@delmaredigital/payload-puck 0.1.1 → 0.1.2
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/package.json +2 -1
- package/dist/AccordionClient.js.map +0 -1
- package/dist/AccordionClient.mjs.map +0 -1
- package/dist/AnimatedWrapper.js.map +0 -1
- package/dist/AnimatedWrapper.mjs.map +0 -1
- package/dist/admin/client.js.map +0 -1
- package/dist/admin/client.mjs.map +0 -1
- package/dist/admin/index.js.map +0 -1
- package/dist/admin/index.mjs.map +0 -1
- package/dist/api/index.js.map +0 -1
- package/dist/api/index.mjs.map +0 -1
- package/dist/components/index.css.map +0 -1
- package/dist/components/index.js.map +0 -1
- package/dist/components/index.mjs.map +0 -1
- package/dist/config/config.editor.css.map +0 -1
- package/dist/config/config.editor.js.map +0 -1
- package/dist/config/config.editor.mjs.map +0 -1
- package/dist/config/index.js.map +0 -1
- package/dist/config/index.mjs.map +0 -1
- package/dist/editor/index.js.map +0 -1
- package/dist/editor/index.mjs.map +0 -1
- package/dist/fields/index.css.map +0 -1
- package/dist/fields/index.js.map +0 -1
- package/dist/fields/index.mjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/layouts/index.js.map +0 -1
- package/dist/layouts/index.mjs.map +0 -1
- package/dist/plugin/index.js.map +0 -1
- package/dist/plugin/index.mjs.map +0 -1
- package/dist/render/index.js.map +0 -1
- package/dist/render/index.mjs.map +0 -1
- package/dist/theme/index.js.map +0 -1
- package/dist/theme/index.mjs.map +0 -1
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/index.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/fields/shared.ts","../../src/lib/utils.ts","../../src/components/ui/button.tsx","../../src/components/ui/input.tsx","../../src/components/ui/label.tsx","../../src/components/ui/dialog.tsx","../../src/components/ui/skeleton.tsx","../../src/fields/MediaField.tsx","../../src/theme/defaults.ts","../../src/theme/context.tsx","../../src/fields/ColorPickerField.tsx","../../src/fields/TiptapField.tsx","../../src/fields/TiptapModal.tsx","../../src/fields/TiptapModalField.tsx","../../src/fields/PaddingField.tsx","../../src/fields/MarginField.tsx","../../src/components/ui/select.tsx","../../src/fields/BorderField.tsx","../../src/fields/WidthField.tsx","../../src/components/ui/checkbox.tsx","../../src/fields/DimensionsField.tsx","../../src/fields/LockedField.tsx","../../src/fields/AlignmentField.tsx","../../src/fields/FlexAlignmentField.tsx","../../src/fields/VerticalAlignmentField.tsx","../../src/fields/SizeField.tsx","../../src/fields/GradientEditor.tsx","../../src/fields/BackgroundField.tsx","../../src/fields/ResponsiveField.tsx","../../src/fields/ResponsiveVisibilityField.tsx","../../src/fields/AnimationField.tsx","../../src/fields/TransformField.tsx","../../src/fields/index.ts"],"names":["cn","React","React2","jsx","cva","React3","React4","jsxs","X","useState","useCallback","memo","useEffect","Superscript","Subscript","editor","SuperscriptIcon","SubscriptIcon","Fragment","value","Link","DEFAULT_VALUE","Unlink","ChevronDown","Icon","AlignLeft","AlignCenter","AlignRight","React15","WIDTH_PRESETS","MoveHorizontal","SlidersHorizontal","ChevronUp","AlignStartVertical","AlignCenterVertical","AlignEndVertical","DEFAULT_GRADIENT","opacity","BREAKPOINT_ICONS","Smartphone","Tablet","Laptop","Monitor","OriginGrid","Maximize2","ChevronRight"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Shared Puck Field Definitions\n *\n * Reusable field configurations and CSS utility maps for Puck components.\n * These ensure consistency across all components.\n */\n\nimport type { Field } from '@measured/puck'\nimport type React from 'react'\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Combines class names, filtering out falsy values\n * A simple alternative to clsx/classnames for bundling purposes\n */\nexport function cn(...classes: (string | boolean | undefined | null)[]): string {\n return classes.filter(Boolean).join(' ')\n}\n\n// =============================================================================\n// Custom Style Types\n// =============================================================================\n\nexport interface ColorValue {\n hex: string\n opacity?: number\n}\n\nexport interface PaddingValue {\n top: number\n right: number\n bottom: number\n left: number\n unit: 'px' | 'rem' | 'em' | '%'\n /** Whether all sides are linked (sync together). Defaults to true if not set. */\n linked?: boolean\n}\n\nexport interface BorderValue {\n style: 'none' | 'solid' | 'dashed' | 'dotted'\n width: number\n color: ColorValue | null\n radius: number\n sides: {\n top: boolean\n right: boolean\n bottom: boolean\n left: boolean\n }\n}\n\nexport interface WidthValue {\n mode: 'full' | 'contained' | 'custom'\n maxWidth: number\n unit: 'px' | 'rem' | '%' | 'vw'\n alignment: 'left' | 'center' | 'right'\n}\n\n// =============================================================================\n// Dimensions Types (Enhanced Width + Height)\n// =============================================================================\n\nexport type DimensionsUnit = 'px' | 'rem' | '%' | 'vw' | 'vh'\nexport type DimensionsMode = 'full' | 'contained' | 'custom'\nexport type ContentAlignment = 'left' | 'center' | 'right'\n\n/**\n * Represents a single dimension constraint (min or max for width or height)\n */\nexport interface DimensionConstraint {\n value: number\n unit: DimensionsUnit\n enabled: boolean\n}\n\n/**\n * Full dimensions configuration value - replaces/extends WidthValue\n * Supports min/max constraints for both width and height\n */\nexport interface DimensionsValue {\n /** Width mode: full (100%), contained (centered max-width), or custom */\n mode: DimensionsMode\n /** Content alignment within the container */\n alignment: ContentAlignment\n /** Minimum width constraint (optional) */\n minWidth?: DimensionConstraint | null\n /** Maximum width constraint (required for backward compat) */\n maxWidth: DimensionConstraint\n /** Minimum height constraint (optional) */\n minHeight?: DimensionConstraint | null\n /** Maximum height constraint (optional) */\n maxHeight?: DimensionConstraint | null\n /** UI state: whether advanced mode is expanded */\n advancedMode?: boolean\n}\n\n/**\n * Type guard to detect legacy WidthValue format\n */\nexport function isLegacyWidthValue(value: unknown): value is WidthValue {\n if (!value || typeof value !== 'object') return false\n const v = value as Record<string, unknown>\n return (\n typeof v.maxWidth === 'number' &&\n typeof v.unit === 'string' &&\n typeof v.mode === 'string' &&\n !('minWidth' in v) &&\n !('minHeight' in v) &&\n !('maxHeight' in v)\n )\n}\n\n/**\n * Migrate legacy WidthValue to new DimensionsValue format\n */\nexport function migrateWidthValue(legacy: WidthValue): DimensionsValue {\n return {\n mode: legacy.mode,\n alignment: legacy.alignment,\n maxWidth: {\n value: legacy.maxWidth,\n unit: legacy.unit,\n enabled: true,\n },\n advancedMode: false,\n }\n}\n\n// =============================================================================\n// Background Types\n// =============================================================================\n\nexport interface GradientStop {\n color: ColorValue\n position: number // 0-100%\n}\n\nexport interface GradientValue {\n type: 'linear' | 'radial'\n angle: number // 0-360 for linear\n stops: GradientStop[]\n radialShape?: 'circle' | 'ellipse'\n radialPosition?: 'center' | 'top' | 'bottom' | 'left' | 'right'\n}\n\n/**\n * Gradient mask for fading images to transparent\n */\nexport interface GradientMask {\n enabled: boolean\n direction:\n | 'to-top'\n | 'to-bottom'\n | 'to-left'\n | 'to-right'\n | 'to-top-left'\n | 'to-top-right'\n | 'to-bottom-left'\n | 'to-bottom-right'\n | 'from-center' // Radial gradient from center outward\n startOpacity: number // 0-100, typically 100 (fully visible)\n endOpacity: number // 0-100, typically 0 (fully transparent)\n startPosition: number // 0-100%, where fade begins\n endPosition: number // 0-100%, where fade ends\n}\n\nexport interface BackgroundImageValue {\n media: import('./MediaField').MediaReference | null\n size: 'cover' | 'contain' | 'auto'\n position:\n | 'center'\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right'\n repeat: 'no-repeat' | 'repeat' | 'repeat-x' | 'repeat-y'\n attachment: 'scroll' | 'fixed'\n /** Overall image opacity 0-100 (default 100) */\n opacity?: number\n /** Gradient mask for fade to transparent effect */\n mask?: GradientMask\n}\n\n/**\n * Overlay layer for images (Divi-style)\n * Renders a color or gradient on top of the background image\n */\nexport interface BackgroundOverlay {\n enabled: boolean\n type: 'solid' | 'gradient'\n solid?: ColorValue | null\n gradient?: GradientValue | null\n}\n\nexport interface BackgroundValue {\n type: 'none' | 'solid' | 'gradient' | 'image'\n solid?: ColorValue | null\n gradient?: GradientValue | null\n image?: BackgroundImageValue | null\n /** Overlay layer, only used when type === 'image' */\n overlay?: BackgroundOverlay | null\n}\n\n// =============================================================================\n// Visibility Field\n// =============================================================================\n\nexport const visibilityField: Field = {\n type: 'select',\n label: 'Visibility',\n options: [\n { label: 'Always Visible', value: 'always' },\n { label: 'Authenticated Users Only', value: 'authenticatedOnly' },\n { label: 'Guests Only', value: 'guestOnly' },\n ],\n}\n\n// =============================================================================\n// Button Style Field\n// =============================================================================\n\nexport const buttonStyleField: Field = {\n type: 'select',\n label: 'Button Style',\n options: [\n { label: 'Primary', value: 'primary' },\n { label: 'Secondary', value: 'secondary' },\n { label: 'Outline', value: 'outline' },\n { label: 'Ghost', value: 'ghost' },\n { label: 'Link', value: 'link' },\n ],\n}\n\n// =============================================================================\n// Button Variant Field\n// =============================================================================\n\nexport const buttonVariantField: Field = {\n type: 'select',\n label: 'Button Variant',\n options: [\n { label: 'Default', value: 'default' },\n { label: 'Destructive', value: 'destructive' },\n { label: 'Outline', value: 'outline' },\n { label: 'Secondary', value: 'secondary' },\n { label: 'Ghost', value: 'ghost' },\n { label: 'Link', value: 'link' },\n ],\n}\n\n// =============================================================================\n// Button Size Field\n// =============================================================================\n\nexport const buttonSizeField: Field = {\n type: 'select',\n label: 'Size',\n options: [\n { label: 'Small', value: 'sm' },\n { label: 'Default', value: 'default' },\n { label: 'Large', value: 'lg' },\n { label: 'Icon', value: 'icon' },\n ],\n}\n\n// =============================================================================\n// Background Color Field (Preset Palette)\n// =============================================================================\n\nexport const backgroundColorField: Field = {\n type: 'select',\n label: 'Background Color',\n options: [\n { label: 'None', value: 'none' },\n { label: 'Background', value: 'background' },\n { label: 'Card', value: 'card' },\n { label: 'Muted', value: 'muted' },\n { label: 'Primary', value: 'primary' },\n { label: 'Secondary', value: 'secondary' },\n { label: 'Accent', value: 'accent' },\n ],\n}\n\n// =============================================================================\n// Text Color Field (Preset Palette)\n// =============================================================================\n\nexport const textColorField: Field = {\n type: 'select',\n label: 'Text Color',\n options: [\n { label: 'Theme (Auto)', value: 'default' },\n { label: 'Foreground', value: 'foreground' },\n { label: 'Muted', value: 'muted-foreground' },\n { label: 'Primary', value: 'primary' },\n { label: 'Secondary', value: 'secondary-foreground' },\n ],\n}\n\n// =============================================================================\n// Gap/Spacing Field\n// =============================================================================\n\nexport const gapField: Field = {\n type: 'select',\n label: 'Gap',\n options: [\n { label: 'None', value: 'none' },\n { label: 'Extra Small', value: 'xs' },\n { label: 'Small', value: 'sm' },\n { label: 'Medium', value: 'md' },\n { label: 'Large', value: 'lg' },\n { label: 'Extra Large', value: 'xl' },\n { label: '2XL', value: '2xl' },\n ],\n}\n\n// =============================================================================\n// Shadow Field\n// =============================================================================\n\nexport const shadowField: Field = {\n type: 'select',\n label: 'Shadow',\n options: [\n { label: 'None', value: 'none' },\n { label: 'Small', value: 'sm' },\n { label: 'Medium', value: 'md' },\n { label: 'Large', value: 'lg' },\n { label: 'Extra Large', value: 'xl' },\n { label: '2XL', value: '2xl' },\n ],\n}\n\n// =============================================================================\n// Spacer Height Field\n// =============================================================================\n\nexport const spacerHeightField: Field = {\n type: 'select',\n label: 'Height',\n options: [\n { label: 'Extra Small (8px)', value: 'xs' },\n { label: 'Small (16px)', value: 'sm' },\n { label: 'Medium (32px)', value: 'md' },\n { label: 'Large (48px)', value: 'lg' },\n { label: 'Extra Large (64px)', value: 'xl' },\n { label: '2XL (96px)', value: '2xl' },\n { label: '3XL (128px)', value: '3xl' },\n ],\n}\n\n// =============================================================================\n// Heading Level Field\n// =============================================================================\n\nexport const headingLevelField: Field = {\n type: 'select',\n label: 'Heading Level',\n options: [\n { label: 'H1', value: 'h1' },\n { label: 'H2', value: 'h2' },\n { label: 'H3', value: 'h3' },\n { label: 'H4', value: 'h4' },\n { label: 'H5', value: 'h5' },\n { label: 'H6', value: 'h6' },\n ],\n}\n\n// =============================================================================\n// Text Size Field\n// =============================================================================\n\nexport const textSizeField: Field = {\n type: 'select',\n label: 'Text Size',\n options: [\n { label: 'Extra Small', value: 'xs' },\n { label: 'Small', value: 'sm' },\n { label: 'Base', value: 'base' },\n { label: 'Large', value: 'lg' },\n { label: 'Extra Large', value: 'xl' },\n { label: '2XL', value: '2xl' },\n ],\n}\n\n// =============================================================================\n// Aspect Ratio Field\n// =============================================================================\n\nexport const aspectRatioField: Field = {\n type: 'select',\n label: 'Aspect Ratio',\n options: [\n { label: 'Auto', value: 'auto' },\n { label: 'Square (1:1)', value: 'square' },\n { label: 'Video (16:9)', value: 'video' },\n { label: 'Portrait (3:4)', value: 'portrait' },\n { label: 'Landscape (4:3)', value: 'landscape' },\n { label: 'Wide (21:9)', value: 'wide' },\n ],\n}\n\n// =============================================================================\n// Divider Style Field\n// =============================================================================\n\nexport const dividerStyleField: Field = {\n type: 'select',\n label: 'Style',\n options: [\n { label: 'Solid', value: 'solid' },\n { label: 'Dashed', value: 'dashed' },\n { label: 'Dotted', value: 'dotted' },\n ],\n}\n\n// =============================================================================\n// Border Radius Field\n// =============================================================================\n\nexport const borderRadiusField: Field = {\n type: 'select',\n label: 'Border Radius',\n options: [\n { label: 'None', value: 'none' },\n { label: 'Small', value: 'sm' },\n { label: 'Medium', value: 'md' },\n { label: 'Large', value: 'lg' },\n { label: 'Extra Large', value: 'xl' },\n { label: '2XL', value: '2xl' },\n { label: 'Full', value: 'full' },\n ],\n}\n\n// =============================================================================\n// Columns Count Field\n// =============================================================================\n\nexport const columnsCountField: Field = {\n type: 'select',\n label: 'Columns',\n options: [\n { label: '1 Column', value: '1' },\n { label: '2 Columns', value: '2' },\n { label: '3 Columns', value: '3' },\n { label: '4 Columns', value: '4' },\n { label: '5 Columns', value: '5' },\n { label: '6 Columns', value: '6' },\n ],\n}\n\n// =============================================================================\n// Flex Direction Field\n// =============================================================================\n\nexport const flexDirectionField: Field = {\n type: 'select',\n label: 'Direction',\n options: [\n { label: 'Row (Horizontal)', value: 'row' },\n { label: 'Column (Vertical)', value: 'column' },\n { label: 'Row Reverse', value: 'row-reverse' },\n { label: 'Column Reverse', value: 'column-reverse' },\n ],\n}\n\n// =============================================================================\n// Flex Wrap Field\n// =============================================================================\n\nexport const flexWrapField: Field = {\n type: 'select',\n label: 'Wrap',\n options: [\n { label: 'No Wrap', value: 'nowrap' },\n { label: 'Wrap', value: 'wrap' },\n { label: 'Wrap Reverse', value: 'wrap-reverse' },\n ],\n}\n\n// =============================================================================\n// CSS Class Mappings\n// =============================================================================\n\n/**\n * Maps alignment values to Tailwind classes\n */\nexport const alignmentMap: Record<string, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n}\n\n/**\n * Maps background color values to Tailwind classes\n */\nexport const bgColorMap: Record<string, string> = {\n none: '',\n background: 'bg-background',\n card: 'bg-card',\n muted: 'bg-muted',\n primary: 'bg-primary',\n secondary: 'bg-secondary',\n accent: 'bg-accent',\n}\n\n/**\n * Maps text color values to Tailwind classes\n */\nexport const textColorMap: Record<string, string> = {\n default: 'text-inherit',\n foreground: 'text-foreground',\n 'muted-foreground': 'text-muted-foreground',\n primary: 'text-primary',\n 'secondary-foreground': 'text-secondary-foreground',\n}\n\n/**\n * Maps gap values to Tailwind classes\n */\nexport const gapMap: Record<string, string> = {\n none: 'gap-0',\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n '2xl': 'gap-12',\n}\n\n/**\n * Maps shadow values to Tailwind classes\n */\nexport const shadowMap: Record<string, string> = {\n none: '',\n sm: 'shadow-sm',\n md: 'shadow-md',\n lg: 'shadow-lg',\n xl: 'shadow-xl',\n '2xl': 'shadow-2xl',\n}\n\n/**\n * Maps spacer height values to Tailwind classes\n */\nexport const spacerHeightMap: Record<string, string> = {\n xs: 'h-2',\n sm: 'h-4',\n md: 'h-8',\n lg: 'h-12',\n xl: 'h-16',\n '2xl': 'h-24',\n '3xl': 'h-32',\n}\n\n/**\n * Maps heading level to Tailwind classes\n */\nexport const headingLevelMap: Record<string, string> = {\n h1: 'text-4xl md:text-5xl lg:text-6xl font-bold tracking-tight',\n h2: 'text-3xl md:text-4xl font-bold tracking-tight',\n h3: 'text-2xl md:text-3xl font-semibold',\n h4: 'text-xl md:text-2xl font-semibold',\n h5: 'text-lg md:text-xl font-medium',\n h6: 'text-base md:text-lg font-medium',\n}\n\n/**\n * Maps text size to Tailwind classes\n */\nexport const textSizeMap: Record<string, string> = {\n xs: 'text-xs',\n sm: 'text-sm',\n base: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n '2xl': 'text-2xl',\n}\n\n/**\n * Maps aspect ratio to Tailwind classes\n */\nexport const aspectRatioMap: Record<string, string> = {\n auto: '',\n square: 'aspect-square',\n video: 'aspect-video',\n portrait: 'aspect-[3/4]',\n landscape: 'aspect-[4/3]',\n wide: 'aspect-[21/9]',\n}\n\n/**\n * Maps divider style to Tailwind classes\n */\nexport const dividerStyleMap: Record<string, string> = {\n solid: 'border-solid',\n dashed: 'border-dashed',\n dotted: 'border-dotted',\n}\n\n/**\n * Maps border radius to Tailwind classes\n */\nexport const borderRadiusMap: Record<string, string> = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n full: 'rounded-full',\n}\n\n/**\n * Maps columns count to Tailwind grid classes (responsive)\n */\nexport const columnsCountMap: Record<string, string> = {\n '1': 'grid-cols-1',\n '2': 'grid-cols-1 md:grid-cols-2',\n '3': 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3',\n '4': 'grid-cols-1 md:grid-cols-2 lg:grid-cols-4',\n '5': 'grid-cols-2 md:grid-cols-3 lg:grid-cols-5',\n '6': 'grid-cols-2 md:grid-cols-3 lg:grid-cols-6',\n}\n\n/**\n * Maps flex direction to Tailwind classes\n */\nexport const flexDirectionMap: Record<string, string> = {\n row: 'flex-row',\n column: 'flex-col',\n 'row-reverse': 'flex-row-reverse',\n 'column-reverse': 'flex-col-reverse',\n}\n\n/**\n * Maps justify content to Tailwind classes\n * Supports both short (start) and full (flex-start) values\n */\nexport const justifyContentMap: Record<string, string> = {\n start: 'justify-start',\n 'flex-start': 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n 'flex-end': 'justify-end',\n between: 'justify-between',\n 'space-between': 'justify-between',\n around: 'justify-around',\n 'space-around': 'justify-around',\n evenly: 'justify-evenly',\n 'space-evenly': 'justify-evenly',\n}\n\n/**\n * Maps align items to Tailwind classes\n * Supports both short (start) and full (flex-start) values\n */\nexport const alignItemsMap: Record<string, string> = {\n start: 'items-start',\n 'flex-start': 'items-start',\n center: 'items-center',\n end: 'items-end',\n 'flex-end': 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n}\n\n/**\n * Maps self-alignment to Tailwind classes (for grid/flex item alignment)\n * Used by components like TextImageSplit for vertical self-alignment\n */\nexport const selfAlignmentMap: Record<string, string> = {\n start: 'self-start',\n 'flex-start': 'self-start',\n center: 'self-center',\n end: 'self-end',\n 'flex-end': 'self-end',\n stretch: 'self-stretch',\n auto: 'self-auto',\n}\n\n/**\n * Maps flex wrap to Tailwind classes\n */\nexport const flexWrapMap: Record<string, string> = {\n nowrap: 'flex-nowrap',\n wrap: 'flex-wrap',\n 'wrap-reverse': 'flex-wrap-reverse',\n}\n\n// =============================================================================\n// Custom Style Value Utilities\n// =============================================================================\n\n/**\n * Convert hex color to RGB components\n */\nfunction hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n const clean = hex.replace(/^#/, '')\n if (clean.length !== 6) return null\n\n const r = parseInt(clean.substring(0, 2), 16)\n const g = parseInt(clean.substring(2, 4), 16)\n const b = parseInt(clean.substring(4, 6), 16)\n\n if (isNaN(r) || isNaN(g) || isNaN(b)) return null\n\n return { r, g, b }\n}\n\n/**\n * Convert ColorValue to CSS rgba string\n */\nexport function colorValueToCSS(color: ColorValue | null | undefined): string | undefined {\n if (!color?.hex) return undefined\n\n const rgb = hexToRgb(color.hex)\n if (!rgb) return color.hex\n\n const opacity = (color.opacity ?? 100) / 100\n\n if (opacity === 1) {\n return color.hex\n }\n\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${opacity})`\n}\n\n/**\n * Convert PaddingValue to CSS padding string\n */\nexport function paddingValueToCSS(padding: PaddingValue | null | undefined): string | undefined {\n if (!padding) return undefined\n\n const { top, right, bottom, left, unit } = padding\n\n if (top === right && right === bottom && bottom === left) {\n return `${top}${unit}`\n }\n\n if (top === bottom && left === right) {\n return `${top}${unit} ${right}${unit}`\n }\n\n if (left === right) {\n return `${top}${unit} ${right}${unit} ${bottom}${unit}`\n }\n\n return `${top}${unit} ${right}${unit} ${bottom}${unit} ${left}${unit}`\n}\n\n/**\n * Convert PaddingValue to CSS margin string (same structure, different property)\n */\nexport function marginValueToCSS(margin: PaddingValue | null | undefined): string | undefined {\n if (!margin) return undefined\n\n const { top, right, bottom, left, unit } = margin\n\n if (top === right && right === bottom && bottom === left) {\n return `${top}${unit}`\n }\n\n if (top === bottom && left === right) {\n return `${top}${unit} ${right}${unit}`\n }\n\n if (left === right) {\n return `${top}${unit} ${right}${unit} ${bottom}${unit}`\n }\n\n return `${top}${unit} ${right}${unit} ${bottom}${unit} ${left}${unit}`\n}\n\n/**\n * Convert BorderValue to CSS properties object\n */\nexport function borderValueToCSS(border: BorderValue | null | undefined): React.CSSProperties | undefined {\n if (!border || border.style === 'none') return undefined\n\n const color = colorValueToCSS(border.color) || '#000000'\n const style: React.CSSProperties = {}\n\n if (border.sides.top) {\n style.borderTopWidth = `${border.width}px`\n style.borderTopStyle = border.style\n style.borderTopColor = color\n }\n\n if (border.sides.right) {\n style.borderRightWidth = `${border.width}px`\n style.borderRightStyle = border.style\n style.borderRightColor = color\n }\n\n if (border.sides.bottom) {\n style.borderBottomWidth = `${border.width}px`\n style.borderBottomStyle = border.style\n style.borderBottomColor = color\n }\n\n if (border.sides.left) {\n style.borderLeftWidth = `${border.width}px`\n style.borderLeftStyle = border.style\n style.borderLeftColor = color\n }\n\n if (border.radius > 0) {\n style.borderRadius = `${border.radius}px`\n }\n\n return Object.keys(style).length > 0 ? style : undefined\n}\n\n/**\n * Convert WidthValue to CSS properties object\n */\nexport function widthValueToCSS(width: WidthValue | null | undefined): React.CSSProperties | undefined {\n if (!width) return undefined\n\n const style: React.CSSProperties = {}\n\n if (width.mode === 'full') {\n style.width = '100%'\n style.maxWidth = '100%'\n } else {\n style.maxWidth = `${width.maxWidth}${width.unit}`\n style.width = '100%'\n }\n\n switch (width.alignment) {\n case 'left':\n style.marginLeft = '0'\n style.marginRight = 'auto'\n break\n case 'center':\n style.marginLeft = 'auto'\n style.marginRight = 'auto'\n break\n case 'right':\n style.marginLeft = 'auto'\n style.marginRight = '0'\n break\n }\n\n return style\n}\n\n/**\n * Convert DimensionsValue to CSS properties object\n * Handles both legacy WidthValue and new DimensionsValue formats\n */\nexport function dimensionsValueToCSS(\n dimensions: DimensionsValue | WidthValue | null | undefined\n): React.CSSProperties | undefined {\n if (!dimensions) return undefined\n\n // Handle legacy WidthValue format\n if (isLegacyWidthValue(dimensions)) {\n return widthValueToCSS(dimensions)\n }\n\n const dim = dimensions as DimensionsValue\n const style: React.CSSProperties = {}\n\n // Width handling based on mode\n if (dim.mode === 'full') {\n style.width = '100%'\n style.maxWidth = '100%'\n } else {\n style.width = '100%'\n\n // Max Width (required)\n if (dim.maxWidth?.enabled !== false && dim.maxWidth?.value > 0) {\n style.maxWidth = `${dim.maxWidth.value}${dim.maxWidth.unit}`\n }\n\n // Min Width (optional)\n if (dim.minWidth?.enabled && dim.minWidth.value > 0) {\n style.minWidth = `${dim.minWidth.value}${dim.minWidth.unit}`\n }\n }\n\n // Height handling (applies to all modes)\n if (dim.minHeight?.enabled && dim.minHeight.value > 0) {\n style.minHeight = `${dim.minHeight.value}${dim.minHeight.unit}`\n }\n\n if (dim.maxHeight?.enabled && dim.maxHeight.value > 0) {\n style.maxHeight = `${dim.maxHeight.value}${dim.maxHeight.unit}`\n }\n\n // Alignment (via margin)\n switch (dim.alignment) {\n case 'left':\n style.marginLeft = '0'\n style.marginRight = 'auto'\n break\n case 'center':\n style.marginLeft = 'auto'\n style.marginRight = 'auto'\n break\n case 'right':\n style.marginLeft = 'auto'\n style.marginRight = '0'\n break\n }\n\n return style\n}\n\n/**\n * Get human-readable summary of dimensions\n */\nexport function getDimensionsSummary(dim: DimensionsValue | null | undefined): string {\n if (!dim) return 'auto'\n\n if (dim.mode === 'full') return '100%'\n\n const parts: string[] = []\n\n if (dim.maxWidth?.enabled && dim.maxWidth.value > 0) {\n parts.push(`max: ${dim.maxWidth.value}${dim.maxWidth.unit}`)\n }\n\n if (dim.minWidth?.enabled && dim.minWidth.value > 0) {\n parts.push(`min: ${dim.minWidth.value}${dim.minWidth.unit}`)\n }\n\n if (dim.maxHeight?.enabled && dim.maxHeight.value > 0) {\n parts.push(`h-max: ${dim.maxHeight.value}${dim.maxHeight.unit}`)\n }\n\n if (dim.minHeight?.enabled && dim.minHeight.value > 0) {\n parts.push(`h-min: ${dim.minHeight.value}${dim.minHeight.unit}`)\n }\n\n return parts.length > 0 ? parts.join(' | ') : 'auto'\n}\n\n/**\n * Combined style generator for layout components\n */\nexport function getCustomStyleObject(options: {\n backgroundColor?: ColorValue | null\n textColor?: ColorValue | null\n padding?: PaddingValue | null\n margin?: PaddingValue | null\n border?: BorderValue | null\n width?: WidthValue | null\n}): React.CSSProperties {\n const style: React.CSSProperties = {}\n\n const bgColor = colorValueToCSS(options.backgroundColor)\n if (bgColor) {\n style.backgroundColor = bgColor\n }\n\n const txtColor = colorValueToCSS(options.textColor)\n if (txtColor) {\n style.color = txtColor\n }\n\n const paddingCSS = paddingValueToCSS(options.padding)\n if (paddingCSS) {\n style.padding = paddingCSS\n }\n\n const marginCSS = marginValueToCSS(options.margin)\n if (marginCSS) {\n style.margin = marginCSS\n }\n\n const borderCSS = borderValueToCSS(options.border)\n if (borderCSS) {\n Object.assign(style, borderCSS)\n }\n\n const widthCSS = widthValueToCSS(options.width)\n if (widthCSS) {\n Object.assign(style, widthCSS)\n }\n\n return style\n}\n\n/**\n * Convert GradientValue to CSS gradient string\n */\nexport function gradientValueToCSS(gradient: GradientValue | null | undefined): string {\n if (!gradient?.stops || gradient.stops.length === 0) {\n return 'transparent'\n }\n\n // Sort stops by position\n const sortedStops = [...gradient.stops].sort((a, b) => a.position - b.position)\n\n // Convert stops to CSS format\n const stopsCSS = sortedStops\n .map((stop) => {\n const color = colorValueToCSS(stop.color) || 'transparent'\n return `${color} ${stop.position}%`\n })\n .join(', ')\n\n if (gradient.type === 'radial') {\n const shape = gradient.radialShape || 'circle'\n const position = gradient.radialPosition || 'center'\n return `radial-gradient(${shape} at ${position}, ${stopsCSS})`\n }\n\n // Linear gradient\n return `linear-gradient(${gradient.angle}deg, ${stopsCSS})`\n}\n\n/**\n * Convert position value to CSS background-position\n */\nfunction positionToCSS(\n position: BackgroundImageValue['position'] | undefined\n): string {\n const positionMap: Record<NonNullable<BackgroundImageValue['position']>, string> = {\n center: 'center',\n top: 'top',\n bottom: 'bottom',\n left: 'left',\n right: 'right',\n 'top-left': 'top left',\n 'top-right': 'top right',\n 'bottom-left': 'bottom left',\n 'bottom-right': 'bottom right',\n }\n return position ? positionMap[position] || 'center' : 'center'\n}\n\n/**\n * Convert GradientMask direction to CSS gradient direction\n */\nfunction maskDirectionToCSS(direction: GradientMask['direction']): string {\n const directionMap: Record<GradientMask['direction'], string> = {\n 'to-top': 'to top',\n 'to-bottom': 'to bottom',\n 'to-left': 'to left',\n 'to-right': 'to right',\n 'to-top-left': 'to top left',\n 'to-top-right': 'to top right',\n 'to-bottom-left': 'to bottom left',\n 'to-bottom-right': 'to bottom right',\n 'from-center': 'radial', // Not used for linear, handled separately in maskToCSS\n }\n return directionMap[direction] || 'to bottom'\n}\n\n/**\n * Convert GradientMask to CSS mask-image string\n */\nfunction maskToCSS(mask: GradientMask): string {\n const startAlpha = (mask.startOpacity ?? 100) / 100\n const endAlpha = (mask.endOpacity ?? 0) / 100\n\n // Handle radial gradient for \"from-center\"\n if (mask.direction === 'from-center') {\n return `radial-gradient(circle at center, rgba(0,0,0,${startAlpha}) ${mask.startPosition}%, rgba(0,0,0,${endAlpha}) ${mask.endPosition}%)`\n }\n\n // Linear gradient for directional fades\n const direction = maskDirectionToCSS(mask.direction)\n return `linear-gradient(${direction}, rgba(0,0,0,${startAlpha}) ${mask.startPosition}%, rgba(0,0,0,${endAlpha}) ${mask.endPosition}%)`\n}\n\n/**\n * Result of background CSS conversion\n * Includes both styles and metadata for consumer components\n */\nexport interface BackgroundCSSResult {\n /** CSS properties to apply directly */\n styles: React.CSSProperties\n /** Image opacity (0-1) - consumer should apply via wrapper if needed */\n imageOpacity?: number\n}\n\n/**\n * Convert BackgroundValue to CSS properties object\n * Returns both styles and metadata for advanced features like image opacity\n */\nexport function backgroundValueToCSS(\n bg: BackgroundValue | null | undefined\n): React.CSSProperties {\n if (!bg || bg.type === 'none') {\n return {}\n }\n\n const style: React.CSSProperties = {}\n\n switch (bg.type) {\n case 'solid':\n if (bg.solid?.hex) {\n style.backgroundColor = colorValueToCSS(bg.solid)\n }\n break\n\n case 'gradient':\n if (bg.gradient && bg.gradient.stops && bg.gradient.stops.length > 0) {\n style.background = gradientValueToCSS(bg.gradient)\n }\n break\n\n case 'image':\n if (bg.image?.media?.url) {\n const imageUrl = bg.image.media.url\n const size = bg.image.size || 'cover'\n const position = positionToCSS(bg.image.position)\n const repeat = bg.image.repeat || 'no-repeat'\n const attachment = bg.image.attachment || 'scroll'\n\n // Check if overlay is enabled\n if (bg.overlay?.enabled) {\n // Layer overlay on top of image using CSS multiple backgrounds\n // Use only backgroundImage to avoid shorthand/longhand conflicts\n const overlayCSS =\n bg.overlay.type === 'solid'\n ? colorValueToCSS(bg.overlay.solid)\n : gradientValueToCSS(bg.overlay.gradient)\n\n // CSS background layering: first layer is on top\n // For solid color overlay, we need to use a gradient to make it a proper layer\n if (bg.overlay.type === 'solid' && overlayCSS) {\n style.backgroundImage = `linear-gradient(${overlayCSS}, ${overlayCSS}), url(${imageUrl})`\n } else {\n style.backgroundImage = `${overlayCSS}, url(${imageUrl})`\n }\n // Use comma-separated values for each layer\n style.backgroundSize = `auto, ${size}`\n style.backgroundPosition = `center, ${position}`\n style.backgroundRepeat = `no-repeat, ${repeat}`\n style.backgroundAttachment = `scroll, ${attachment}`\n } else {\n // No overlay, just the image\n style.backgroundImage = `url(${imageUrl})`\n style.backgroundSize = size\n style.backgroundPosition = position\n style.backgroundRepeat = repeat\n style.backgroundAttachment = attachment\n }\n\n // Apply gradient mask if enabled\n if (bg.image.mask?.enabled) {\n const maskCSS = maskToCSS(bg.image.mask)\n style.maskImage = maskCSS\n // Webkit prefix for Safari support\n ;(style as Record<string, string>).WebkitMaskImage = maskCSS\n }\n }\n break\n }\n\n return style\n}\n\n/**\n * Get image opacity from BackgroundValue (for consumer wrapper components)\n * Returns undefined if no image or opacity is 100%\n */\nexport function getBackgroundImageOpacity(\n bg: BackgroundValue | null | undefined\n): number | undefined {\n if (!bg || bg.type !== 'image' || !bg.image) return undefined\n const opacity = bg.image.opacity ?? 100\n return opacity < 100 ? opacity / 100 : undefined\n}\n\n/**\n * Check if any custom style values are set\n */\nexport function hasCustomStyles(options: {\n backgroundColor?: ColorValue | null\n textColor?: ColorValue | null\n padding?: PaddingValue | null\n margin?: PaddingValue | null\n border?: BorderValue | null\n width?: WidthValue | null\n}): boolean {\n return !!(\n options.backgroundColor?.hex ||\n options.textColor?.hex ||\n options.padding ||\n options.margin ||\n (options.border && options.border.style !== 'none') ||\n options.width\n )\n}\n\n// =============================================================================\n// Transform Types\n// =============================================================================\n\nexport type TransformOrigin =\n | 'center'\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right'\n\nexport interface TransformValue {\n rotate: number // -360 to 360\n scaleX: number // 0.1 to 3\n scaleY: number // 0.1 to 3\n scaleLocked: boolean // When true, X and Y sync\n skewX: number // -45 to 45\n skewY: number // -45 to 45\n translateX: number\n translateY: number\n translateUnit: 'px' | 'rem' | '%'\n origin: TransformOrigin\n\n // Optional 3D\n enable3D: boolean\n perspective?: number // 100-2000px\n rotateX?: number // -180 to 180\n rotateY?: number // -180 to 180\n}\n\n/**\n * Default transform value\n */\nexport const DEFAULT_TRANSFORM: TransformValue = {\n rotate: 0,\n scaleX: 1,\n scaleY: 1,\n scaleLocked: true,\n skewX: 0,\n skewY: 0,\n translateX: 0,\n translateY: 0,\n translateUnit: 'px',\n origin: 'center',\n enable3D: false,\n perspective: 1000,\n rotateX: 0,\n rotateY: 0,\n}\n\n/**\n * Convert TransformOrigin to CSS transform-origin value\n */\nfunction transformOriginToCSS(origin: TransformOrigin): string {\n const originMap: Record<TransformOrigin, string> = {\n center: 'center',\n top: 'top',\n bottom: 'bottom',\n left: 'left',\n right: 'right',\n 'top-left': 'top left',\n 'top-right': 'top right',\n 'bottom-left': 'bottom left',\n 'bottom-right': 'bottom right',\n }\n return originMap[origin] || 'center'\n}\n\n/**\n * Convert TransformValue to CSS properties object\n */\nexport function transformValueToCSS(\n transform: TransformValue | null | undefined\n): React.CSSProperties | undefined {\n if (!transform) return undefined\n\n const style: React.CSSProperties = {}\n const transforms: string[] = []\n\n // Handle 3D perspective\n if (transform.enable3D && transform.perspective) {\n style.perspective = `${transform.perspective}px`\n }\n\n // Build transform string\n // Translate\n if (transform.translateX !== 0 || transform.translateY !== 0) {\n transforms.push(\n `translate(${transform.translateX}${transform.translateUnit}, ${transform.translateY}${transform.translateUnit})`\n )\n }\n\n // Rotate (2D)\n if (transform.rotate !== 0) {\n transforms.push(`rotate(${transform.rotate}deg)`)\n }\n\n // 3D rotations\n if (transform.enable3D) {\n if (transform.rotateX && transform.rotateX !== 0) {\n transforms.push(`rotateX(${transform.rotateX}deg)`)\n }\n if (transform.rotateY && transform.rotateY !== 0) {\n transforms.push(`rotateY(${transform.rotateY}deg)`)\n }\n }\n\n // Scale\n if (transform.scaleX !== 1 || transform.scaleY !== 1) {\n if (transform.scaleX === transform.scaleY) {\n transforms.push(`scale(${transform.scaleX})`)\n } else {\n transforms.push(`scale(${transform.scaleX}, ${transform.scaleY})`)\n }\n }\n\n // Skew\n if (transform.skewX !== 0 || transform.skewY !== 0) {\n if (transform.skewX !== 0 && transform.skewY !== 0) {\n transforms.push(`skew(${transform.skewX}deg, ${transform.skewY}deg)`)\n } else if (transform.skewX !== 0) {\n transforms.push(`skewX(${transform.skewX}deg)`)\n } else {\n transforms.push(`skewY(${transform.skewY}deg)`)\n }\n }\n\n // Apply transform if we have any\n if (transforms.length > 0) {\n style.transform = transforms.join(' ')\n }\n\n // Transform origin\n if (transform.origin !== 'center') {\n style.transformOrigin = transformOriginToCSS(transform.origin)\n }\n\n // Add transform-style for 3D\n if (transform.enable3D) {\n style.transformStyle = 'preserve-3d'\n }\n\n return Object.keys(style).length > 0 ? style : undefined\n}\n\n// =============================================================================\n// Responsive Field Types\n// =============================================================================\n\nexport type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\n/**\n * Responsive value that can have different values at different breakpoints.\n * XS (extra small) is required, other breakpoints are optional overrides.\n */\nexport interface ResponsiveValue<T> {\n xs: T\n sm?: T\n md?: T\n lg?: T\n xl?: T\n}\n\n/**\n * Breakpoint configuration with labels and pixel values\n */\nexport const BREAKPOINTS: Array<{\n key: Breakpoint\n label: string\n minWidth: number | null\n}> = [\n { key: 'xs', label: 'XS', minWidth: null },\n { key: 'sm', label: 'SM', minWidth: 640 },\n { key: 'md', label: 'MD', minWidth: 768 },\n { key: 'lg', label: 'LG', minWidth: 1024 },\n { key: 'xl', label: 'XL', minWidth: 1280 },\n]\n\n// =============================================================================\n// Responsive CSS Helpers\n// =============================================================================\n\n/**\n * Type guard to check if a value is a ResponsiveValue (has breakpoint structure)\n */\nexport function isResponsiveValue<T>(value: unknown): value is ResponsiveValue<T> {\n if (!value || typeof value !== 'object') return false\n return 'xs' in value\n}\n\n/**\n * Converts a camelCase property name to kebab-case CSS property\n */\nfunction camelToKebab(str: string): string {\n return str.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)\n}\n\n/**\n * Converts React.CSSProperties to a CSS string for use in style tags\n */\nexport function cssPropertiesToString(styles: React.CSSProperties): string {\n return Object.entries(styles)\n .filter(([, value]) => value !== undefined && value !== null && value !== '')\n .map(([key, value]) => `${camelToKebab(key)}: ${value}`)\n .join('; ')\n}\n\n/**\n * Result of converting a responsive value to CSS\n */\nexport interface ResponsiveCSSResult {\n /** Base styles to apply as inline styles */\n baseStyles: React.CSSProperties\n /** CSS media queries to render in a <style> tag */\n mediaQueryCSS: string\n}\n\n/**\n * Converts a ResponsiveValue to CSS with media queries.\n * Works with any value type that has a CSS converter function.\n *\n * @param value - The responsive or non-responsive value\n * @param converter - Function to convert the value type to CSSProperties\n * @param uniqueId - Unique class name for targeting in media queries\n * @returns Object with baseStyles (inline) and mediaQueryCSS (for <style> tag)\n *\n * @example\n * ```tsx\n * const { baseStyles, mediaQueryCSS } = responsiveValueToCSS(\n * dimensions,\n * dimensionsValueToCSS,\n * 'container-abc123'\n * )\n *\n * return (\n * <>\n * {mediaQueryCSS && <style>{mediaQueryCSS}</style>}\n * <div className=\"container-abc123\" style={baseStyles}>...</div>\n * </>\n * )\n * ```\n */\nexport function responsiveValueToCSS<T>(\n value: ResponsiveValue<T> | T | null | undefined,\n converter: (v: T) => React.CSSProperties | undefined,\n uniqueId: string\n): ResponsiveCSSResult {\n // Handle null/undefined\n if (value === null || value === undefined) {\n return { baseStyles: {}, mediaQueryCSS: '' }\n }\n\n // If not responsive (single value), return as base styles only\n if (!isResponsiveValue<T>(value)) {\n const styles = converter(value as T)\n return {\n baseStyles: styles || {},\n mediaQueryCSS: '',\n }\n }\n\n // Generate media queries for each breakpoint\n const mediaQueries: string[] = []\n let baseStyles: React.CSSProperties = {}\n\n BREAKPOINTS.forEach((bp) => {\n const bpValue = value[bp.key]\n if (bpValue === undefined) return\n\n const cssProps = converter(bpValue)\n if (!cssProps) return\n\n if (bp.key === 'xs') {\n baseStyles = cssProps\n } else {\n const styleString = cssPropertiesToString(cssProps)\n if (styleString) {\n mediaQueries.push(\n `@media (min-width: ${bp.minWidth}px) { .${uniqueId} { ${styleString} } }`\n )\n }\n }\n })\n\n return { baseStyles, mediaQueryCSS: mediaQueries.join('\\n') }\n}\n\n/**\n * Visibility value for show/hide per breakpoint\n */\nexport interface VisibilityValue {\n /** XS (extra small) visibility - true = visible, false = hidden (default: true) */\n xs: boolean\n /** Small screens (640px+) */\n sm?: boolean\n /** Override for medium screens (768px+) */\n md?: boolean\n /** Override for large screens (1024px+) */\n lg?: boolean\n /** Override for extra large screens (1280px+) */\n xl?: boolean\n}\n\n/**\n * Default visibility value (visible at all breakpoints)\n */\nexport const DEFAULT_VISIBILITY: VisibilityValue = {\n xs: true,\n sm: true,\n md: true,\n lg: true,\n xl: true,\n}\n\n/**\n * Converts a VisibilityValue to CSS with display: none media queries.\n * Each breakpoint is independent - generates targeted media queries for hidden breakpoints.\n *\n * @param visibility - The visibility settings per breakpoint\n * @param uniqueId - Unique class name for targeting in media queries\n * @returns CSS media queries string for hiding at specific breakpoints\n */\nexport function visibilityValueToCSS(\n visibility: VisibilityValue | null | undefined,\n uniqueId: string\n): string {\n if (!visibility) return ''\n\n const mediaQueries: string[] = []\n\n // Breakpoint min-widths for range calculations\n const breakpointWidths: Record<Breakpoint, number | null> = {\n xs: null, // 0px\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n }\n\n // Get next breakpoint's min-width for max-width calculation\n const getNextBreakpointWidth = (bp: Breakpoint): number | null => {\n const order: Breakpoint[] = ['xs', 'sm', 'md', 'lg', 'xl']\n const index = order.indexOf(bp)\n if (index === -1 || index === order.length - 1) return null\n return breakpointWidths[order[index + 1]]\n }\n\n // XS (0 to 639px)\n if (visibility.xs === false) {\n const nextWidth = getNextBreakpointWidth('xs')\n if (nextWidth) {\n mediaQueries.push(`@media (max-width: ${nextWidth - 1}px) { .${uniqueId} { display: none; } }`)\n } else {\n mediaQueries.push(`.${uniqueId} { display: none; }`)\n }\n }\n\n // Other breakpoints (sm, md, lg, xl)\n BREAKPOINTS.slice(1).forEach((bp) => {\n if (visibility[bp.key] === false) {\n const minWidth = breakpointWidths[bp.key]\n const maxWidth = getNextBreakpointWidth(bp.key)\n\n if (minWidth && maxWidth) {\n // Range query (e.g., sm: 640-767px)\n mediaQueries.push(\n `@media (min-width: ${minWidth}px) and (max-width: ${maxWidth - 1}px) { .${uniqueId} { display: none; } }`\n )\n } else if (minWidth) {\n // Last breakpoint (xl: 1280px+)\n mediaQueries.push(\n `@media (min-width: ${minWidth}px) { .${uniqueId} { display: none; } }`\n )\n }\n }\n })\n\n return mediaQueries.join('\\n')\n}\n\n// =============================================================================\n// Animation Types\n// =============================================================================\n\n/** Standard CSS easing functions */\nexport type EasingFunction = 'linear' | 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out'\n\n/** Advanced easing with spring/bounce effects via cubic-bezier approximations */\nexport type AdvancedEasingFunction =\n | EasingFunction\n | 'spring'\n | 'spring-gentle'\n | 'bounce'\n | 'bounce-in'\n | 'bounce-out'\n | 'back-in'\n | 'back-out'\n | 'back-in-out'\n | 'elastic'\n\n/** Map advanced easing to CSS cubic-bezier values */\nexport const EASING_CSS_MAP: Record<AdvancedEasingFunction, string> = {\n linear: 'linear',\n ease: 'ease',\n 'ease-in': 'ease-in',\n 'ease-out': 'ease-out',\n 'ease-in-out': 'ease-in-out',\n spring: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',\n 'spring-gentle': 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n bounce: 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',\n 'bounce-in': 'cubic-bezier(0.6, -0.28, 0.735, 0.045)',\n 'bounce-out': 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',\n 'back-in': 'cubic-bezier(0.6, -0.28, 0.735, 0.045)',\n 'back-out': 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',\n 'back-in-out': 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',\n elastic: 'cubic-bezier(0.68, -0.6, 0.32, 1.6)',\n}\n\n/** Transform origin for animations (3x3 grid) */\nexport type AnimationOrigin =\n | 'center'\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right'\n\n/** Stagger direction for child animations */\nexport type StaggerDirection = 'forward' | 'reverse' | 'center' | 'edges'\n\n/** Configuration for staggered child animations */\nexport interface StaggerConfig {\n enabled: boolean\n /** Delay between each child element (ms) */\n delay: number\n /** Maximum total delay to prevent very long animations */\n maxDelay?: number\n /** Direction of stagger effect */\n direction: StaggerDirection\n}\n\n/** Animation categories for UI organization */\nexport type AnimationCategory =\n | 'fade'\n | 'scale'\n | 'slide'\n | 'blur'\n | 'rotate'\n | 'bounce'\n | 'flip'\n | 'zoom'\n\n/**\n * Extended entrance animation presets (27 total)\n * Organized by category for the UI dropdown\n */\nexport type EntranceAnimation =\n // None\n | 'none'\n // Fade (6)\n | 'fade-in'\n | 'fade-up'\n | 'fade-down'\n | 'fade-left'\n | 'fade-right'\n | 'fade-scale'\n // Scale (4)\n | 'scale-in'\n | 'scale-up'\n | 'scale-down'\n | 'scale-out'\n // Slide (4)\n | 'slide-up'\n | 'slide-down'\n | 'slide-left'\n | 'slide-right'\n // Blur (3)\n | 'blur-in'\n | 'blur-up'\n | 'blur-down'\n // Rotate (3)\n | 'rotate-in'\n | 'rotate-up'\n | 'rotate-down'\n // Bounce (3)\n | 'bounce-in'\n | 'bounce-up'\n | 'bounce-down'\n // Flip (2)\n | 'flip-x'\n | 'flip-y'\n // Zoom (2)\n | 'zoom-in'\n | 'zoom-out'\n\n/**\n * Animation presets organized by category for UI\n */\nexport const ANIMATION_CATEGORIES: Array<{\n category: AnimationCategory | 'none'\n label: string\n animations: EntranceAnimation[]\n}> = [\n { category: 'none', label: 'None', animations: ['none'] },\n { category: 'fade', label: 'Fade', animations: ['fade-in', 'fade-up', 'fade-down', 'fade-left', 'fade-right', 'fade-scale'] },\n { category: 'scale', label: 'Scale', animations: ['scale-in', 'scale-up', 'scale-down', 'scale-out'] },\n { category: 'slide', label: 'Slide', animations: ['slide-up', 'slide-down', 'slide-left', 'slide-right'] },\n { category: 'blur', label: 'Blur', animations: ['blur-in', 'blur-up', 'blur-down'] },\n { category: 'rotate', label: 'Rotate', animations: ['rotate-in', 'rotate-up', 'rotate-down'] },\n { category: 'bounce', label: 'Bounce', animations: ['bounce-in', 'bounce-up', 'bounce-down'] },\n { category: 'flip', label: 'Flip', animations: ['flip-x', 'flip-y'] },\n { category: 'zoom', label: 'Zoom', animations: ['zoom-in', 'zoom-out'] },\n]\n\nexport interface AnimationValue {\n mode: 'preset' | 'custom'\n\n // Preset mode\n entrance?: EntranceAnimation\n entranceDuration?: number // ms\n entranceDelay?: number // ms\n\n // Intensity controls (context-aware based on animation type)\n /** Distance for translate animations (8-200px) */\n distance?: number\n /** Starting scale for scale animations (0.1-2) */\n scaleFrom?: number\n /** Rotation angle for rotate animations (-180 to 180deg) */\n rotateAngle?: number\n /** Blur amount for blur animations (0-50px) */\n blurAmount?: number\n\n // Transform origin (affects scale/rotate)\n origin?: AnimationOrigin\n\n // Advanced easing\n easing?: AdvancedEasingFunction\n\n // Stagger for child elements\n stagger?: StaggerConfig\n\n // Custom transition mode\n duration?: number // 0-2000ms\n delay?: number // 0-2000ms\n\n // Scroll trigger\n triggerOnScroll?: boolean\n triggerThreshold?: number // 0-1\n triggerOnce?: boolean\n /** Margin around viewport for earlier/later triggering (e.g., \"0px 0px -100px 0px\") */\n triggerMargin?: string\n}\n\n// =============================================================================\n// Animation CSS Utilities\n// =============================================================================\n\n/**\n * Convert AnimationOrigin to CSS transform-origin value\n */\nfunction animationOriginToCSS(origin: AnimationOrigin | undefined): string {\n if (!origin) return 'center'\n const originMap: Record<AnimationOrigin, string> = {\n center: 'center',\n top: 'top',\n bottom: 'bottom',\n left: 'left',\n right: 'right',\n 'top-left': 'top left',\n 'top-right': 'top right',\n 'bottom-left': 'bottom left',\n 'bottom-right': 'bottom right',\n }\n return originMap[origin] || 'center'\n}\n\n/**\n * Convert AnimationValue to CSS transition property (for custom mode)\n * Returns undefined for preset mode - use getEntranceAnimationStyles instead\n */\nexport function animationValueToCSS(anim: AnimationValue | null): React.CSSProperties | undefined {\n if (!anim || anim.mode !== 'custom') return undefined\n\n const duration = anim.duration ?? 300\n const delay = anim.delay ?? 0\n const easing = anim.easing ?? 'ease'\n const easingCSS = EASING_CSS_MAP[easing] || 'ease'\n\n return {\n transition: `all ${duration}ms ${easingCSS} ${delay}ms`,\n transitionProperty: 'opacity, transform, filter, background-color, color, border-color, box-shadow',\n }\n}\n\n/**\n * Get initial and animate styles for entrance animations\n * Returns inline CSS style objects that work without Tailwind compilation\n * Supports all 27 animation presets with customizable intensity\n */\nexport function getEntranceAnimationStyles(anim: AnimationValue | null): {\n initial: React.CSSProperties\n animate: React.CSSProperties\n duration: number\n delay: number\n easing: string\n origin: string\n} {\n const defaultResult = {\n initial: {} as React.CSSProperties,\n animate: {} as React.CSSProperties,\n duration: 500,\n delay: 0,\n easing: 'ease',\n origin: 'center',\n }\n\n if (!anim || anim.mode !== 'preset' || anim.entrance === 'none') {\n return defaultResult\n }\n\n const duration = anim.entranceDuration ?? 500\n const delay = anim.entranceDelay ?? 0\n const easing = EASING_CSS_MAP[anim.easing ?? 'ease'] || 'ease'\n const origin = animationOriginToCSS(anim.origin)\n\n // Intensity values with defaults\n const distance = anim.distance ?? 24 // px\n const scaleFrom = anim.scaleFrom ?? 0.9\n const rotateAngle = anim.rotateAngle ?? 15 // degrees\n const blurAmount = anim.blurAmount ?? 8 // px\n\n // Build animation styles based on preset\n const entrance = anim.entrance ?? 'none'\n\n let initial: React.CSSProperties = {}\n let animate: React.CSSProperties = {}\n\n switch (entrance) {\n // ==================== FADE (6) ====================\n case 'fade-in':\n initial = { opacity: 0 }\n animate = { opacity: 1 }\n break\n\n case 'fade-up':\n initial = { opacity: 0, transform: `translateY(${distance}px)` }\n animate = { opacity: 1, transform: 'translateY(0)' }\n break\n\n case 'fade-down':\n initial = { opacity: 0, transform: `translateY(-${distance}px)` }\n animate = { opacity: 1, transform: 'translateY(0)' }\n break\n\n case 'fade-left':\n initial = { opacity: 0, transform: `translateX(${distance}px)` }\n animate = { opacity: 1, transform: 'translateX(0)' }\n break\n\n case 'fade-right':\n initial = { opacity: 0, transform: `translateX(-${distance}px)` }\n animate = { opacity: 1, transform: 'translateX(0)' }\n break\n\n case 'fade-scale':\n initial = { opacity: 0, transform: `scale(${scaleFrom})` }\n animate = { opacity: 1, transform: 'scale(1)' }\n break\n\n // ==================== SCALE (4) ====================\n case 'scale-in':\n initial = { opacity: 0, transform: `scale(${scaleFrom})` }\n animate = { opacity: 1, transform: 'scale(1)' }\n break\n\n case 'scale-up':\n initial = { opacity: 0, transform: `scale(${scaleFrom}) translateY(${distance}px)` }\n animate = { opacity: 1, transform: 'scale(1) translateY(0)' }\n break\n\n case 'scale-down':\n initial = { opacity: 0, transform: `scale(${scaleFrom}) translateY(-${distance}px)` }\n animate = { opacity: 1, transform: 'scale(1) translateY(0)' }\n break\n\n case 'scale-out':\n // Scales from larger to normal\n initial = { opacity: 0, transform: `scale(${2 - scaleFrom})` }\n animate = { opacity: 1, transform: 'scale(1)' }\n break\n\n // ==================== SLIDE (4) ====================\n case 'slide-up':\n initial = { transform: `translateY(${distance}px)` }\n animate = { transform: 'translateY(0)' }\n break\n\n case 'slide-down':\n initial = { transform: `translateY(-${distance}px)` }\n animate = { transform: 'translateY(0)' }\n break\n\n case 'slide-left':\n initial = { transform: `translateX(${distance}px)` }\n animate = { transform: 'translateX(0)' }\n break\n\n case 'slide-right':\n initial = { transform: `translateX(-${distance}px)` }\n animate = { transform: 'translateX(0)' }\n break\n\n // ==================== BLUR (3) ====================\n case 'blur-in':\n initial = { opacity: 0, filter: `blur(${blurAmount}px)` }\n animate = { opacity: 1, filter: 'blur(0)' }\n break\n\n case 'blur-up':\n initial = { opacity: 0, filter: `blur(${blurAmount}px)`, transform: `translateY(${distance}px)` }\n animate = { opacity: 1, filter: 'blur(0)', transform: 'translateY(0)' }\n break\n\n case 'blur-down':\n initial = { opacity: 0, filter: `blur(${blurAmount}px)`, transform: `translateY(-${distance}px)` }\n animate = { opacity: 1, filter: 'blur(0)', transform: 'translateY(0)' }\n break\n\n // ==================== ROTATE (3) ====================\n case 'rotate-in':\n initial = { opacity: 0, transform: `rotate(${rotateAngle}deg) scale(${scaleFrom})` }\n animate = { opacity: 1, transform: 'rotate(0) scale(1)' }\n break\n\n case 'rotate-up':\n initial = { opacity: 0, transform: `rotate(${rotateAngle}deg) translateY(${distance}px)` }\n animate = { opacity: 1, transform: 'rotate(0) translateY(0)' }\n break\n\n case 'rotate-down':\n initial = { opacity: 0, transform: `rotate(-${rotateAngle}deg) translateY(-${distance}px)` }\n animate = { opacity: 1, transform: 'rotate(0) translateY(0)' }\n break\n\n // ==================== BOUNCE (3) ====================\n // These use spring/bounce easing by default for the effect\n case 'bounce-in':\n initial = { opacity: 0, transform: `scale(${scaleFrom * 0.8})` }\n animate = { opacity: 1, transform: 'scale(1)' }\n break\n\n case 'bounce-up':\n initial = { opacity: 0, transform: `translateY(${distance * 1.5}px)` }\n animate = { opacity: 1, transform: 'translateY(0)' }\n break\n\n case 'bounce-down':\n initial = { opacity: 0, transform: `translateY(-${distance * 1.5}px)` }\n animate = { opacity: 1, transform: 'translateY(0)' }\n break\n\n // ==================== FLIP (2) ====================\n // Flip uses perspective in transform for proper 3D effect\n // Starts from -90deg (tilted back) so the flip motion is visible\n case 'flip-x':\n initial = {\n transform: 'perspective(1000px) rotateX(-90deg)',\n opacity: 0.2,\n backfaceVisibility: 'hidden',\n }\n animate = {\n transform: 'perspective(1000px) rotateX(0deg)',\n opacity: 1,\n backfaceVisibility: 'hidden',\n }\n break\n\n case 'flip-y':\n initial = {\n transform: 'perspective(1000px) rotateY(-90deg)',\n opacity: 0.2,\n backfaceVisibility: 'hidden',\n }\n animate = {\n transform: 'perspective(1000px) rotateY(0deg)',\n opacity: 1,\n backfaceVisibility: 'hidden',\n }\n break\n\n // ==================== ZOOM (2) ====================\n case 'zoom-in':\n // Starts small, zooms to full size\n initial = { opacity: 0, transform: `scale(${scaleFrom * 0.5})` }\n animate = { opacity: 1, transform: 'scale(1)' }\n break\n\n case 'zoom-out':\n // Starts large, zooms down to full size\n initial = { opacity: 0, transform: `scale(${2.5 - scaleFrom})` }\n animate = { opacity: 1, transform: 'scale(1)' }\n break\n\n default:\n break\n }\n\n return {\n initial,\n animate,\n duration,\n delay,\n easing,\n origin,\n }\n}\n\n/**\n * Get default easing for animation category\n * Bounce animations default to bounce easing, etc.\n */\nexport function getDefaultEasingForAnimation(entrance: EntranceAnimation): AdvancedEasingFunction {\n if (entrance.startsWith('bounce-')) return 'bounce'\n if (entrance.startsWith('flip-')) return 'back-out'\n if (entrance.startsWith('zoom-')) return 'ease-out'\n return 'ease'\n}\n\n/**\n * Get CSS custom properties for animation timing\n * Useful for CSS-only animations with custom properties\n */\nexport function getAnimationCSSVariables(anim: AnimationValue | null): Record<string, string> {\n if (!anim) return {}\n\n const isPreset = anim.mode === 'preset'\n const duration = isPreset ? (anim.entranceDuration ?? 500) : (anim.duration ?? 300)\n const delay = isPreset ? (anim.entranceDelay ?? 0) : (anim.delay ?? 0)\n const easing = anim.easing ?? 'ease'\n const easingCSS = EASING_CSS_MAP[easing] || 'ease'\n\n return {\n '--animation-duration': `${duration}ms`,\n '--animation-delay': `${delay}ms`,\n '--animation-easing': easingCSS,\n }\n}\n\n/**\n * Generate stagger delay for a specific child index\n * Accounts for direction (forward, reverse, center, edges)\n */\nexport function getStaggerDelay(config: StaggerConfig, index: number, totalChildren: number): number {\n if (!config.enabled || totalChildren <= 1) return 0\n\n let effectiveIndex: number\n\n switch (config.direction) {\n case 'forward':\n effectiveIndex = index\n break\n case 'reverse':\n effectiveIndex = totalChildren - 1 - index\n break\n case 'center': {\n // Center starts from middle, animates outward\n const center = (totalChildren - 1) / 2\n effectiveIndex = Math.abs(index - center)\n break\n }\n case 'edges': {\n // Edges starts from outside, animates inward\n const center = (totalChildren - 1) / 2\n effectiveIndex = center - Math.abs(index - center)\n break\n }\n default:\n effectiveIndex = index\n }\n\n const delay = effectiveIndex * config.delay\n\n // Cap at max delay if specified\n if (config.maxDelay && delay > config.maxDelay) {\n return config.maxDelay\n }\n\n return delay\n}\n\n/**\n * Generate CSS styles for staggered children\n * Returns an object with CSS custom properties for each child\n */\nexport function generateStaggerStyles(\n config: StaggerConfig | undefined,\n totalChildren: number\n): React.CSSProperties[] {\n if (!config?.enabled || totalChildren <= 1) {\n return Array(totalChildren).fill({})\n }\n\n return Array.from({ length: totalChildren }, (_, i) => {\n const delay = getStaggerDelay(config, i, totalChildren)\n return {\n '--stagger-delay': `${delay}ms`,\n transitionDelay: `${delay}ms`,\n } as React.CSSProperties\n })\n}\n\n/**\n * Check which intensity controls are relevant for an animation type\n */\nexport function getRelevantIntensityControls(entrance: EntranceAnimation): {\n showDistance: boolean\n showScale: boolean\n showRotate: boolean\n showBlur: boolean\n} {\n const hasTranslate = [\n 'fade-up', 'fade-down', 'fade-left', 'fade-right',\n 'scale-up', 'scale-down',\n 'slide-up', 'slide-down', 'slide-left', 'slide-right',\n 'blur-up', 'blur-down',\n 'rotate-up', 'rotate-down',\n 'bounce-up', 'bounce-down',\n ].includes(entrance)\n\n const hasScale = [\n 'fade-scale',\n 'scale-in', 'scale-up', 'scale-down', 'scale-out',\n 'rotate-in',\n 'bounce-in',\n 'zoom-in', 'zoom-out',\n ].includes(entrance)\n\n const hasRotate = [\n 'rotate-in', 'rotate-up', 'rotate-down',\n ].includes(entrance)\n\n const hasBlur = [\n 'blur-in', 'blur-up', 'blur-down',\n ].includes(entrance)\n\n return {\n showDistance: hasTranslate,\n showScale: hasScale,\n showRotate: hasRotate,\n showBlur: hasBlur,\n }\n}\n\n/**\n * Default animation value\n */\nexport const DEFAULT_ANIMATION: AnimationValue = {\n mode: 'preset',\n entrance: 'none',\n entranceDuration: 500,\n entranceDelay: 0,\n distance: 24,\n scaleFrom: 0.9,\n rotateAngle: 15,\n blurAmount: 8,\n origin: 'center',\n easing: 'ease',\n triggerOnScroll: true,\n triggerThreshold: 0.1,\n triggerOnce: true,\n}\n\n// =============================================================================\n// Layout Components Disallow List (prevent recursion in slots)\n// =============================================================================\n\nexport const layoutComponentsDisallow = [\n 'Container',\n 'Flex',\n 'Grid',\n 'Section',\n]\n\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../../lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-8 px-3 text-xs\",\n lg: \"h-11 px-8\",\n icon: \"h-10 w-10 p-2\",\n \"icon-sm\": \"h-8 w-8 p-1.5\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\nimport { cn } from \"../../lib/utils\"\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../../lib/utils\"\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { X } from \"lucide-react\"\nimport { cn } from \"../../lib/utils\"\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 flex flex-col w-full max-w-4xl translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-background shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] rounded-lg max-h-[85vh] overflow-hidden p-6\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogContentFullscreen = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n hideCloseButton?: boolean\n /** Accessible title for screen readers (visually hidden) */\n accessibleTitle?: string\n }\n>(({ className, children, hideCloseButton = false, accessibleTitle = \"Dialog\", ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 flex flex-col bg-background duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n >\n {/* Visually hidden title for screen reader accessibility */}\n <DialogPrimitive.Title className=\"sr-only\">\n {accessibleTitle}\n </DialogPrimitive.Title>\n {children}\n {!hideCloseButton && (\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContentFullscreen.displayName = \"DialogContentFullscreen\"\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogContentFullscreen,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n","import { cn } from \"../../lib/utils\"\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"animate-pulse rounded-md bg-muted\", className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","'use client'\n\n/**\n * MediaField - Custom Puck field for selecting Payload CMS media\n *\n * This component provides a media picker that integrates with Payload's\n * media collection, allowing users to browse and select images.\n */\n\nimport React, { useState, useEffect, useCallback, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport { Image, X, Search, Loader2, Upload, AlertCircle, Link } from 'lucide-react'\nimport { Button } from '../components/ui/button'\nimport { Input } from '../components/ui/input'\nimport { Label } from '../components/ui/label'\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '../components/ui/dialog'\nimport { Skeleton } from '../components/ui/skeleton'\nimport { cn } from '../lib/utils'\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface MediaReference {\n id: string | number\n url: string\n alt?: string\n width?: number\n height?: number\n}\n\ninterface MediaFieldProps {\n value: MediaReference | null\n onChange: (value: MediaReference | null) => void\n label?: string\n readOnly?: boolean\n apiEndpoint?: string\n}\n\ninterface MediaItem {\n id: string | number\n url: string\n alt?: string\n filename?: string\n width?: number\n height?: number\n mimeType?: string\n}\n\ntype DialogTab = 'browse' | 'upload' | 'url'\n\ninterface UploadState {\n file: File | null\n preview: string | null\n uploading: boolean\n error: string | null\n}\n\ninterface UrlState {\n url: string\n loading: boolean\n error: string | null\n previewLoaded: boolean\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\nfunction formatFileSize(bytes: number | undefined): string {\n if (!bytes) return 'Unknown'\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n}\n\n// =============================================================================\n// MediaField Component\n// =============================================================================\n\nfunction MediaFieldInner({\n value,\n onChange,\n label,\n readOnly,\n apiEndpoint = '/api/media',\n}: MediaFieldProps) {\n const [isOpen, setIsOpen] = useState(false)\n const [mediaList, setMediaList] = useState<MediaItem[]>([])\n const [loading, setLoading] = useState(false)\n const [searchQuery, setSearchQuery] = useState('')\n const [page, setPage] = useState(1)\n const [hasMore, setHasMore] = useState(true)\n const [activeTab, setActiveTab] = useState<DialogTab>('browse')\n const [uploadState, setUploadState] = useState<UploadState>({\n file: null,\n preview: null,\n uploading: false,\n error: null,\n })\n const [urlState, setUrlState] = useState<UrlState>({\n url: '',\n loading: false,\n error: null,\n previewLoaded: false,\n })\n\n // Fetch media from Payload API\n const fetchMedia = useCallback(async (searchTerm: string = '', pageNum: number = 1) => {\n setLoading(true)\n try {\n const params = new URLSearchParams({\n limit: '24',\n page: pageNum.toString(),\n sort: '-createdAt',\n })\n\n // Filter by images only\n params.set('where[mimeType][contains]', 'image')\n\n if (searchTerm) {\n params.set('where[alt][contains]', searchTerm)\n }\n\n const response = await fetch(`${apiEndpoint}?${params}`)\n if (!response.ok) throw new Error('Failed to fetch media')\n\n const data = await response.json()\n const items: MediaItem[] = (data.docs || []).map((doc: Record<string, unknown>) => ({\n id: doc.id as string | number,\n url: (doc.url as string) || '',\n alt: (doc.alt as string) || '',\n filename: (doc.filename as string) || '',\n width: doc.width as number | undefined,\n height: doc.height as number | undefined,\n mimeType: (doc.mimeType as string) || '',\n }))\n\n if (pageNum === 1) {\n setMediaList(items)\n } else {\n setMediaList((prev) => [...prev, ...items])\n }\n\n setHasMore(data.hasNextPage || false)\n } catch (error) {\n console.error('Error fetching media:', error)\n } finally {\n setLoading(false)\n }\n }, [apiEndpoint])\n\n // Load media when dialog opens\n useEffect(() => {\n if (isOpen) {\n setPage(1)\n fetchMedia(searchQuery, 1)\n }\n }, [isOpen, fetchMedia, searchQuery])\n\n // Handle search with debounce\n useEffect(() => {\n if (!isOpen) return\n\n const timer = setTimeout(() => {\n setPage(1)\n fetchMedia(searchQuery, 1)\n }, 300)\n\n return () => clearTimeout(timer)\n }, [searchQuery, isOpen, fetchMedia])\n\n // Handle media selection\n const handleSelect = (item: MediaItem) => {\n onChange({\n id: item.id,\n url: item.url,\n alt: item.alt,\n width: item.width,\n height: item.height,\n })\n setIsOpen(false)\n }\n\n // Handle remove\n const handleRemove = () => {\n onChange(null)\n }\n\n // Load more\n const handleLoadMore = () => {\n const nextPage = page + 1\n setPage(nextPage)\n fetchMedia(searchQuery, nextPage)\n }\n\n // Reset upload state and cleanup object URL\n const resetUploadState = useCallback(() => {\n setUploadState((prev) => {\n if (prev.preview) URL.revokeObjectURL(prev.preview)\n return { file: null, preview: null, uploading: false, error: null }\n })\n }, [])\n\n // Reset URL state\n const resetUrlState = useCallback(() => {\n setUrlState({ url: '', loading: false, error: null, previewLoaded: false })\n }, [])\n\n // Handle URL submission\n const handleUrlSubmit = useCallback(() => {\n const url = urlState.url.trim()\n if (!url) {\n setUrlState((prev) => ({ ...prev, error: 'Please enter a URL' }))\n return\n }\n\n // Basic URL validation\n try {\n new URL(url)\n } catch {\n setUrlState((prev) => ({ ...prev, error: 'Please enter a valid URL' }))\n return\n }\n\n // Use the URL directly (external image)\n onChange({\n id: `external-${Date.now()}`,\n url: url,\n alt: '',\n })\n setIsOpen(false)\n resetUrlState()\n }, [urlState.url, onChange, resetUrlState])\n\n // Handle URL preview load\n const handleUrlPreviewLoad = useCallback(() => {\n setUrlState((prev) => ({ ...prev, previewLoaded: true, error: null }))\n }, [])\n\n // Handle URL preview error\n const handleUrlPreviewError = useCallback(() => {\n setUrlState((prev) => ({\n ...prev,\n previewLoaded: false,\n error: 'Unable to load image from this URL',\n }))\n }, [])\n\n // Handle file selection\n const handleFileSelect = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0]\n if (!file) return\n\n if (!file.type.startsWith('image/')) {\n setUploadState((prev) => ({ ...prev, error: 'Only image files are allowed' }))\n return\n }\n\n // Cleanup previous preview URL\n setUploadState((prev) => {\n if (prev.preview) URL.revokeObjectURL(prev.preview)\n return prev\n })\n\n const preview = URL.createObjectURL(file)\n setUploadState({ file, preview, uploading: false, error: null })\n }, [])\n\n // Handle upload\n const handleUpload = useCallback(async () => {\n if (!uploadState.file) return\n\n setUploadState((prev) => ({ ...prev, uploading: true, error: null }))\n\n try {\n const formData = new FormData()\n formData.append('file', uploadState.file)\n const altText = uploadState.file.name.replace(/\\.[^/.]+$/, '').replace(/[-_]/g, ' ')\n formData.append('alt', altText)\n\n const response = await fetch(apiEndpoint, {\n method: 'POST',\n body: formData,\n })\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({ message: 'Upload failed' }))\n throw new Error(error.message || error.errors?.[0]?.message || 'Upload failed')\n }\n\n const data = await response.json()\n const doc = data.doc || data\n onChange({\n id: doc.id,\n url: doc.url,\n alt: doc.alt,\n width: doc.width,\n height: doc.height,\n })\n setIsOpen(false)\n resetUploadState()\n } catch (error) {\n setUploadState((prev) => ({\n ...prev,\n uploading: false,\n error: error instanceof Error ? error.message : 'Upload failed',\n }))\n }\n }, [uploadState.file, apiEndpoint, onChange, resetUploadState])\n\n // Handle dialog close\n const handleDialogClose = useCallback(\n (open: boolean) => {\n setIsOpen(open)\n if (!open) {\n resetUploadState()\n resetUrlState()\n setActiveTab('browse')\n }\n },\n [resetUploadState, resetUrlState]\n )\n\n return (\n <div className=\"puck-field\">\n {label && (\n <Label className=\"block text-sm font-medium text-foreground mb-2\">\n {label}\n </Label>\n )}\n\n <div className=\"space-y-2\">\n <div className=\"flex items-start gap-4\">\n {/* Preview */}\n {value?.url ? (\n <div className=\"relative group\">\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n src={value.url}\n alt={value.alt || ''}\n className=\"w-24 h-24 object-cover rounded-md border border-border\"\n />\n {!readOnly && (\n <button\n type=\"button\"\n onClick={handleRemove}\n className=\"absolute -top-2 -right-2 p-1 bg-destructive text-destructive-foreground rounded-full opacity-0 group-hover:opacity-100 transition-opacity\"\n aria-label=\"Remove image\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n )}\n </div>\n ) : (\n <div className=\"w-24 h-24 bg-muted rounded-md border border-dashed border-input flex items-center justify-center\">\n <Image className=\"h-8 w-8 text-muted-foreground\" />\n </div>\n )}\n\n {/* Actions */}\n {!readOnly && (\n <div className=\"flex flex-col gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setIsOpen(true)}\n >\n {value ? 'Change Image' : 'Select Image'}\n </Button>\n {value && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleRemove}\n className=\"text-destructive hover:text-destructive hover:bg-destructive/10\"\n >\n Remove\n </Button>\n )}\n </div>\n )}\n </div>\n\n {/* Current URL display */}\n {value?.url && (\n <div className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <Link className=\"h-3 w-3 flex-shrink-0\" />\n <span className=\"truncate max-w-[280px]\" title={value.url}>\n {value.url}\n </span>\n </div>\n )}\n </div>\n\n {/* Media Picker Dialog */}\n <Dialog open={isOpen} onOpenChange={handleDialogClose}>\n <DialogContent>\n <DialogHeader className=\"flex-shrink-0\">\n <DialogTitle>Select Media</DialogTitle>\n </DialogHeader>\n\n {/* Tab Bar */}\n <div className=\"flex border-b border-border -mt-2 flex-shrink-0\">\n <button\n type=\"button\"\n onClick={() => setActiveTab('browse')}\n className={cn(\n 'px-4 py-2 text-sm font-medium border-b-2 transition-colors',\n activeTab === 'browse'\n ? 'border-primary text-primary'\n : 'border-transparent text-muted-foreground hover:text-foreground'\n )}\n >\n Browse Library\n </button>\n <button\n type=\"button\"\n onClick={() => setActiveTab('upload')}\n className={cn(\n 'px-4 py-2 text-sm font-medium border-b-2 transition-colors',\n activeTab === 'upload'\n ? 'border-primary text-primary'\n : 'border-transparent text-muted-foreground hover:text-foreground'\n )}\n >\n Upload New\n </button>\n <button\n type=\"button\"\n onClick={() => setActiveTab('url')}\n className={cn(\n 'px-4 py-2 text-sm font-medium border-b-2 transition-colors',\n activeTab === 'url'\n ? 'border-primary text-primary'\n : 'border-transparent text-muted-foreground hover:text-foreground'\n )}\n >\n From URL\n </button>\n </div>\n\n {/* Search (browse tab only) */}\n {activeTab === 'browse' && (\n <div className=\"relative flex-shrink-0\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400\" />\n <Input\n type=\"text\"\n placeholder=\"Search by alt text...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"pl-10\"\n />\n </div>\n )}\n\n {/* Content Area - explicit max height for reliable scrolling */}\n <div className=\"overflow-y-auto\" style={{ maxHeight: 'calc(85vh - 180px)' }}>\n {activeTab === 'browse' ? (\n /* Browse Tab - Media Grid */\n loading && mediaList.length === 0 ? (\n <div className=\"grid grid-cols-4 gap-4\">\n {[...Array(8)].map((_, i) => (\n <Skeleton key={i} className=\"aspect-square rounded-md\" />\n ))}\n </div>\n ) : mediaList.length === 0 ? (\n <div className=\"flex items-center justify-center h-full text-muted-foreground\">\n No images found\n </div>\n ) : (\n <>\n <div className=\"grid grid-cols-4 gap-4\">\n {mediaList.map((item) => (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => handleSelect(item)}\n className={cn(\n 'relative aspect-square overflow-hidden rounded-md border-2 transition-all hover:border-primary hover:shadow-md',\n value?.id === item.id ? 'border-primary ring-2 ring-ring/30' : 'border-border'\n )}\n >\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n src={item.url}\n alt={item.alt || item.filename || ''}\n className=\"w-full h-full object-cover\"\n loading=\"lazy\"\n />\n {item.alt && (\n <div className=\"absolute bottom-0 left-0 right-0 bg-black/60 text-white text-xs p-1 truncate\">\n {item.alt}\n </div>\n )}\n </button>\n ))}\n </div>\n\n {/* Load More */}\n {hasMore && (\n <div className=\"flex justify-center mt-4\">\n <Button\n variant=\"outline\"\n onClick={handleLoadMore}\n disabled={loading}\n >\n {loading ? (\n <>\n <Loader2 className=\"h-4 w-4 mr-2 animate-spin\" />\n Loading...\n </>\n ) : (\n 'Load More'\n )}\n </Button>\n </div>\n )}\n </>\n )\n ) : activeTab === 'upload' ? (\n /* Upload Tab */\n <div className=\"flex flex-col items-center justify-center h-full min-h-[300px]\">\n {uploadState.preview ? (\n <div className=\"w-full max-w-md space-y-4\">\n {/* Preview */}\n <div className=\"relative aspect-video bg-muted rounded-lg overflow-hidden\">\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n src={uploadState.preview}\n alt=\"Preview\"\n className=\"w-full h-full object-contain\"\n />\n </div>\n\n {/* Metadata */}\n <div className=\"text-sm text-muted-foreground space-y-1\">\n <p>\n <span className=\"font-medium\">Filename:</span> {uploadState.file?.name}\n </p>\n <p>\n <span className=\"font-medium\">Size:</span>{' '}\n {formatFileSize(uploadState.file?.size)}\n </p>\n </div>\n\n {/* Error */}\n {uploadState.error && (\n <div className=\"p-3 bg-destructive/10 border border-destructive/30 rounded-md text-destructive text-sm flex items-start gap-2\">\n <AlertCircle className=\"h-4 w-4 flex-shrink-0 mt-0.5\" />\n <span>{uploadState.error}</span>\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex gap-2\">\n <Button onClick={handleUpload} disabled={uploadState.uploading}>\n {uploadState.uploading ? (\n <>\n <Loader2 className=\"h-4 w-4 mr-2 animate-spin\" />\n Uploading...\n </>\n ) : (\n <>\n <Upload className=\"h-4 w-4 mr-2\" />\n Upload & Select\n </>\n )}\n </Button>\n <Button\n variant=\"outline\"\n onClick={resetUploadState}\n disabled={uploadState.uploading}\n >\n Cancel\n </Button>\n </div>\n </div>\n ) : (\n <div className=\"text-center\">\n <Image className=\"h-16 w-16 text-muted mx-auto mb-4\" />\n <label className=\"cursor-pointer\">\n <Button asChild>\n <span>Select Image</span>\n </Button>\n <input\n type=\"file\"\n accept=\"image/*\"\n onChange={handleFileSelect}\n className=\"hidden\"\n />\n </label>\n <p className=\"mt-2 text-sm text-muted-foreground\">Select an image file to upload</p>\n {uploadState.error && (\n <div className=\"mt-4 p-3 bg-destructive/10 border border-destructive/30 rounded-md text-destructive text-sm\">\n {uploadState.error}\n </div>\n )}\n </div>\n )}\n </div>\n ) : activeTab === 'url' ? (\n /* URL Tab */\n <div className=\"flex flex-col items-center justify-center h-full min-h-[300px]\">\n <div className=\"w-full max-w-md space-y-4\">\n <div className=\"text-center mb-6\">\n <Link className=\"h-12 w-12 text-muted-foreground mx-auto mb-2\" />\n <p className=\"text-sm text-muted-foreground\">\n Enter an image URL from an external source\n </p>\n </div>\n\n {/* URL Input */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"image-url\">Image URL</Label>\n <Input\n id=\"image-url\"\n type=\"url\"\n placeholder=\"https://example.com/image.jpg\"\n value={urlState.url}\n onChange={(e) =>\n setUrlState((prev) => ({\n ...prev,\n url: e.target.value,\n error: null,\n previewLoaded: false,\n }))\n }\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n handleUrlSubmit()\n }\n }}\n />\n </div>\n\n {/* Preview */}\n {urlState.url && !urlState.error && (\n <div className=\"relative aspect-video bg-muted rounded-lg overflow-hidden\">\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n src={urlState.url}\n alt=\"Preview\"\n className=\"w-full h-full object-contain\"\n onLoad={handleUrlPreviewLoad}\n onError={handleUrlPreviewError}\n />\n {!urlState.previewLoaded && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-muted\">\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n )}\n </div>\n )}\n\n {/* Error */}\n {urlState.error && (\n <div className=\"p-3 bg-destructive/10 border border-destructive/30 rounded-md text-destructive text-sm flex items-start gap-2\">\n <AlertCircle className=\"h-4 w-4 flex-shrink-0 mt-0.5\" />\n <span>{urlState.error}</span>\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex gap-2\">\n <Button\n onClick={handleUrlSubmit}\n disabled={!urlState.url || urlState.loading}\n >\n <Link className=\"h-4 w-4 mr-2\" />\n Use This URL\n </Button>\n {urlState.url && (\n <Button variant=\"outline\" onClick={resetUrlState}>\n Clear\n </Button>\n )}\n </div>\n </div>\n </div>\n ) : null}\n </div>\n </DialogContent>\n </Dialog>\n </div>\n )\n}\n\n// Memoize to prevent unnecessary re-renders\nexport const MediaField = memo(MediaFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for media selection\n */\nexport function createMediaField(config: {\n label?: string\n apiEndpoint?: string\n}): CustomField<MediaReference | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <MediaField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n apiEndpoint={config.apiEndpoint}\n />\n ),\n }\n}\n","/**\n * Default Theme Values\n *\n * These defaults ensure backwards compatibility - components render\n * identically to before theming was introduced when no theme is provided.\n */\n\nimport type {\n ButtonVariantStyles,\n BackgroundStyles,\n ColorPreset,\n ResolvedTheme,\n} from './types'\n\n/**\n * Default button variant styles\n * Uses semantic Tailwind classes that map to CSS variables (--primary, --secondary, etc.)\n * This allows consuming apps to customize colors via their theme CSS variables.\n */\nexport const DEFAULT_BUTTON_VARIANTS: ButtonVariantStyles = {\n default: { classes: 'bg-primary text-primary-foreground hover:bg-primary/90' },\n secondary: { classes: 'bg-secondary text-secondary-foreground hover:bg-secondary/80' },\n outline: { classes: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground' },\n ghost: { classes: 'bg-transparent hover:bg-accent hover:text-accent-foreground' },\n destructive: { classes: 'bg-destructive text-destructive-foreground hover:bg-destructive/90' },\n link: { classes: 'text-primary underline-offset-4 hover:underline bg-transparent' },\n}\n\n/**\n * Default CTA button variant styles\n * Uses semantic Tailwind classes that map to CSS variables.\n */\nexport const DEFAULT_CTA_BUTTON_VARIANTS: ButtonVariantStyles = {\n primary: { classes: 'bg-primary text-primary-foreground hover:bg-primary/90' },\n secondary: { classes: 'bg-secondary text-secondary-foreground hover:bg-secondary/80' },\n outline: { classes: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground' },\n ghost: { classes: 'bg-transparent hover:bg-accent hover:text-accent-foreground' },\n link: { classes: 'text-primary underline-offset-4 hover:underline bg-transparent' },\n}\n\n/**\n * Default CTA background styles\n * Uses semantic Tailwind classes that map to CSS variables.\n */\nexport const DEFAULT_CTA_BACKGROUND_STYLES: BackgroundStyles = {\n default: 'bg-muted',\n dark: 'bg-foreground text-background',\n light: 'bg-background',\n}\n\n/**\n * Default color picker presets\n * Matches DEFAULT_PRESETS from ColorPickerField.tsx\n */\nexport const DEFAULT_COLOR_PRESETS: ColorPreset[] = [\n { hex: '#ffffff', label: 'White' },\n { hex: '#f9fafb', label: 'Gray 50' },\n { hex: '#f3f4f6', label: 'Gray 100' },\n { hex: '#1f2937', label: 'Gray 800' },\n { hex: '#111827', label: 'Gray 900' },\n { hex: '#000000', label: 'Black' },\n { hex: '#3b82f6', label: 'Blue' },\n { hex: '#10b981', label: 'Green' },\n { hex: '#f59e0b', label: 'Amber' },\n { hex: '#ef4444', label: 'Red' },\n]\n\n/**\n * Default focus ring color class\n * Uses semantic ring color from CSS variables\n */\nexport const DEFAULT_FOCUS_RING = 'focus:ring-ring'\n\n/**\n * Complete default theme\n * Used when no ThemeProvider is present or no theme config is provided\n */\nexport const DEFAULT_THEME: ResolvedTheme = {\n buttonVariants: DEFAULT_BUTTON_VARIANTS,\n ctaButtonVariants: DEFAULT_CTA_BUTTON_VARIANTS,\n ctaBackgroundStyles: DEFAULT_CTA_BACKGROUND_STYLES,\n colorPresets: DEFAULT_COLOR_PRESETS,\n focusRingColor: DEFAULT_FOCUS_RING,\n}\n","'use client'\n\n/**\n * Theme Context\n *\n * React context for distributing theme configuration to Puck components.\n * The useTheme() hook returns defaults when no provider is present,\n * ensuring backwards compatibility.\n */\n\nimport { createContext, useContext, useMemo, type ReactNode } from 'react'\nimport type { ThemeConfig, ThemeContextValue, ResolvedTheme } from './types'\nimport { DEFAULT_THEME } from './defaults'\nimport { resolveTheme } from './utils'\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null)\n\nexport interface ThemeProviderProps {\n children: ReactNode\n /** Theme configuration to apply */\n theme?: ThemeConfig\n}\n\n/**\n * Provides theme configuration to descendant Puck components\n *\n * @example\n * ```tsx\n * <ThemeProvider theme={{\n * buttonVariants: {\n * default: { classes: 'bg-primary text-white hover:bg-primary/90' }\n * }\n * }}>\n * <PageRenderer data={data} />\n * </ThemeProvider>\n * ```\n */\nexport function ThemeProvider({ children, theme }: ThemeProviderProps) {\n const resolvedTheme = useMemo(() => resolveTheme(theme), [theme])\n\n const value = useMemo<ThemeContextValue>(\n () => ({\n theme: resolvedTheme,\n }),\n [resolvedTheme]\n )\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>\n}\n\n/**\n * Hook to access the current theme\n *\n * Returns DEFAULT_THEME if no ThemeProvider is present,\n * ensuring components work standalone for backwards compatibility.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const theme = useTheme()\n * const buttonClasses = getVariantClasses(theme.buttonVariants, 'primary')\n * return <button className={buttonClasses}>Click me</button>\n * }\n * ```\n */\nexport function useTheme(): ResolvedTheme {\n const context = useContext(ThemeContext)\n // Return defaults if no provider - ensures backwards compatibility\n return context?.theme ?? DEFAULT_THEME\n}\n\n/**\n * Gets the default theme for server components\n *\n * Use this when you need theme values in a server component\n * where hooks cannot be used.\n */\nexport function getDefaultTheme(): ResolvedTheme {\n return DEFAULT_THEME\n}\n\n/**\n * Hook to check if a ThemeProvider is present\n *\n * Useful for conditional logic based on whether theming is configured.\n */\nexport function useHasThemeProvider(): boolean {\n const context = useContext(ThemeContext)\n return context !== null\n}\n","'use client'\n\n/**\n * ColorPickerField - Custom Puck field for selecting colors with opacity\n *\n * This component provides a color picker with:\n * - Native color input for visual picking\n * - Hex input for direct entry\n * - Opacity slider (0-100%)\n * - Preview swatch\n * - Optional preset color swatches\n */\n\nimport React, { useState, useCallback, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport { X } from 'lucide-react'\nimport type { ColorValue } from './shared'\nimport { useTheme } from '../theme'\nimport { Button } from '../components/ui/button'\nimport { Input } from '../components/ui/input'\nimport { Label } from '../components/ui/label'\nimport { cn } from '../lib/utils'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface ColorPickerFieldProps {\n value: ColorValue | null\n onChange: (value: ColorValue | null) => void\n label?: string\n readOnly?: boolean\n showOpacity?: boolean\n presets?: Array<{ hex: string; label: string }>\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Validates and normalizes a hex color string\n */\nfunction normalizeHex(hex: string): string {\n let clean = hex.replace(/^#/, '')\n\n if (clean.length === 3) {\n clean = clean.split('').map(c => c + c).join('')\n }\n\n if (!/^[0-9A-Fa-f]{6}$/.test(clean)) {\n return ''\n }\n\n return `#${clean.toLowerCase()}`\n}\n\n/**\n * Converts hex + opacity to rgba CSS string\n */\nexport function colorToRgba(hex: string, opacity: number): string {\n const clean = hex.replace(/^#/, '')\n const r = parseInt(clean.substring(0, 2), 16)\n const g = parseInt(clean.substring(2, 4), 16)\n const b = parseInt(clean.substring(4, 6), 16)\n return `rgba(${r}, ${g}, ${b}, ${opacity / 100})`\n}\n\n// =============================================================================\n// ColorPickerField Component\n// =============================================================================\n\nfunction ColorPickerFieldInner({\n value,\n onChange,\n label,\n readOnly,\n showOpacity = true,\n presets,\n}: ColorPickerFieldProps) {\n // Use theme presets if none provided\n const theme = useTheme()\n const resolvedPresets = presets ?? theme.colorPresets\n const [hexInput, setHexInput] = useState(value?.hex || '')\n\n const handleColorChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const newHex = e.target.value\n onChange({\n hex: newHex,\n opacity: value?.opacity ?? 100,\n })\n setHexInput(newHex)\n }, [onChange, value?.opacity])\n\n const handleHexInputChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const input = e.target.value\n setHexInput(input)\n\n const normalized = normalizeHex(input)\n if (normalized) {\n onChange({\n hex: normalized,\n opacity: value?.opacity ?? 100,\n })\n }\n }, [onChange, value?.opacity])\n\n const handleHexInputBlur = useCallback(() => {\n if (value?.hex) {\n setHexInput(value.hex)\n }\n }, [value?.hex])\n\n const handleOpacityChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const newOpacity = parseInt(e.target.value, 10)\n if (value?.hex) {\n onChange({\n hex: value.hex,\n opacity: newOpacity,\n })\n }\n }, [onChange, value?.hex])\n\n const handlePresetClick = useCallback((preset: { hex: string; label: string }) => {\n onChange({\n hex: preset.hex,\n opacity: value?.opacity ?? 100,\n })\n setHexInput(preset.hex)\n }, [onChange, value?.opacity])\n\n const handleClear = useCallback(() => {\n onChange(null)\n setHexInput('')\n }, [onChange])\n\n const previewColor = value?.hex\n ? colorToRgba(value.hex, value.opacity ?? 100)\n : 'transparent'\n\n return (\n <div className=\"puck-field space-y-3\">\n {label && (\n <Label className=\"block text-foreground\">\n {label}\n </Label>\n )}\n\n {/* Color picker and hex input row */}\n <div className=\"flex items-center gap-3\">\n {/* Native color picker */}\n <div className=\"relative\">\n <input\n type=\"color\"\n value={value?.hex || '#000000'}\n onChange={handleColorChange}\n disabled={readOnly}\n className=\"w-10 h-10 rounded-md border border-input cursor-pointer disabled:cursor-not-allowed disabled:opacity-50\"\n style={{ padding: 0 }}\n />\n </div>\n\n {/* Hex input */}\n <div className=\"flex-1\">\n <Input\n type=\"text\"\n value={hexInput}\n onChange={handleHexInputChange}\n onBlur={handleHexInputBlur}\n placeholder=\"#000000\"\n disabled={readOnly}\n className=\"font-mono text-sm\"\n />\n </div>\n\n {/* Preview swatch with checkerboard for transparency */}\n <div\n className=\"w-10 h-10 rounded-md border border-input flex-shrink-0 relative overflow-hidden\"\n title={value?.hex ? `${value.hex} at ${value.opacity ?? 100}% opacity` : 'No color selected'}\n >\n {/* Checkerboard background (always visible for transparency) */}\n <div\n className=\"absolute inset-0\"\n style={{\n backgroundImage:\n 'linear-gradient(45deg, #d0d0d0 25%, transparent 25%), linear-gradient(-45deg, #d0d0d0 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #d0d0d0 75%), linear-gradient(-45deg, transparent 75%, #d0d0d0 75%)',\n backgroundSize: '8px 8px',\n backgroundPosition: '0 0, 0 4px, 4px -4px, -4px 0px',\n backgroundColor: '#f0f0f0',\n }}\n />\n {/* Color overlay */}\n <div\n className=\"absolute inset-0\"\n style={{ backgroundColor: previewColor }}\n />\n </div>\n\n {/* Clear button */}\n {value && !readOnly && (\n <button\n type=\"button\"\n onClick={handleClear}\n title=\"Clear color\"\n className=\"flex items-center justify-center w-8 h-8 rounded border-none bg-transparent cursor-pointer text-muted-foreground flex-shrink-0 hover:bg-accent hover:text-destructive\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n\n {/* Opacity slider */}\n {showOpacity && value?.hex && (\n <div className=\"space-y-1\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-xs text-muted-foreground\">Opacity</Label>\n <span className=\"text-xs text-muted-foreground font-mono\">{value.opacity ?? 100}%</span>\n </div>\n {/* Custom opacity slider with checkerboard + color gradient */}\n <div className=\"relative h-3 rounded-md overflow-hidden border border-input\">\n {/* Checkerboard background */}\n <div\n className=\"absolute inset-0\"\n style={{\n backgroundImage:\n 'linear-gradient(45deg, #d0d0d0 25%, transparent 25%), linear-gradient(-45deg, #d0d0d0 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #d0d0d0 75%), linear-gradient(-45deg, transparent 75%, #d0d0d0 75%)',\n backgroundSize: '8px 8px',\n backgroundPosition: '0 0, 0 4px, 4px -4px, -4px 0px',\n backgroundColor: '#f0f0f0',\n }}\n />\n {/* Color gradient from transparent to solid */}\n <div\n className=\"absolute inset-0\"\n style={{\n background: `linear-gradient(to right, transparent 0%, ${value.hex} 100%)`,\n }}\n />\n {/* Range input overlay */}\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n value={value.opacity ?? 100}\n onChange={handleOpacityChange}\n disabled={readOnly}\n className=\"absolute inset-0 w-full h-full opacity-0 cursor-pointer disabled:cursor-not-allowed\"\n style={{ margin: 0 }}\n />\n {/* Thumb indicator */}\n <div\n className=\"absolute top-0 bottom-0 w-1 bg-white border border-gray-400 rounded-sm shadow-sm pointer-events-none\"\n style={{\n left: `calc(${value.opacity ?? 100}% - 2px)`,\n }}\n />\n </div>\n </div>\n )}\n\n {/* Preset swatches */}\n {resolvedPresets.length > 0 && !readOnly && (\n <div>\n <Label className=\"block text-xs mt-1 mb-2 text-muted-foreground\">\n Presets\n </Label>\n <div className=\"flex flex-wrap gap-1.5\">\n {resolvedPresets.map((preset) => {\n const isSelected = value?.hex?.toLowerCase() === preset.hex.toLowerCase()\n return (\n <button\n key={preset.hex}\n type=\"button\"\n onClick={() => handlePresetClick(preset)}\n className={cn(\n \"w-6 h-6 rounded cursor-pointer p-0 outline-none border\",\n isSelected\n ? \"border-2 border-ring ring-2 ring-ring ring-offset-2 ring-offset-background\"\n : \"border-border\"\n )}\n style={{ backgroundColor: preset.hex }}\n title={preset.label}\n />\n )\n })}\n </div>\n </div>\n )}\n </div>\n )\n}\n\nexport const ColorPickerField = memo(ColorPickerFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for color selection\n */\nexport function createColorPickerField(config: {\n label?: string\n showOpacity?: boolean\n presets?: Array<{ hex: string; label: string }>\n}): CustomField<ColorValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <ColorPickerField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n showOpacity={config.showOpacity}\n presets={config.presets}\n />\n ),\n }\n}\n","'use client'\n\n/**\n * TiptapField - Rich Text Editor Field for Puck\n *\n * A custom Puck field that provides WYSIWYG rich text editing using Tiptap.\n * Outputs HTML content that can be rendered with dangerouslySetInnerHTML.\n *\n * Features:\n * - Theme-aware \"inherit\" color option for text that adapts to dark/light mode\n * - Expanded color palette organized by category\n * - Strikethrough and highlight text styling\n * - Font size options (small, normal, large, extra large)\n * - Full toolbar with all formatting options\n * - HTML source view/edit mode\n */\n\nimport React, { useCallback, memo, useState, useRef, useEffect } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport { useEditor, EditorContent, useEditorState } from '@tiptap/react'\nimport StarterKit from '@tiptap/starter-kit'\nimport TextAlign from '@tiptap/extension-text-align'\nimport { TextStyle } from '@tiptap/extension-text-style'\nimport { Color } from '@tiptap/extension-color'\nimport Highlight from '@tiptap/extension-highlight'\nimport Superscript from '@tiptap/extension-superscript'\nimport Subscript from '@tiptap/extension-subscript'\nimport { Extension } from '@tiptap/core'\nimport {\n Bold,\n Italic,\n Underline,\n Strikethrough,\n Highlighter,\n Link,\n List,\n ListOrdered,\n AlignLeft,\n AlignCenter,\n AlignRight,\n AlignJustify,\n Heading1,\n Heading2,\n Heading3,\n Heading4,\n Heading5,\n Heading6,\n Quote,\n Code,\n RemoveFormatting,\n Palette,\n ALargeSmall,\n X,\n ChevronDown,\n Superscript as SuperscriptIcon,\n Subscript as SubscriptIcon,\n Minus,\n CornerDownLeft,\n Pilcrow,\n} from 'lucide-react'\nimport { cn } from '../lib/utils'\nimport './tiptap-styles.css'\nimport './richtext-output.css'\n\n// =============================================================================\n// Injected Editor Styles\n// These are injected directly to ensure styles load regardless of bundler config\n// =============================================================================\n\nconst TIPTAP_EDITOR_STYLES = `\n.tiptap-editor h1 { font-size: 2em !important; font-weight: 700 !important; margin: 1em 0 0.5em 0; }\n.tiptap-editor h2 { font-size: 1.5em !important; font-weight: 700 !important; margin: 1em 0 0.5em 0; }\n.tiptap-editor h3 { font-size: 1.25em !important; font-weight: 600 !important; margin: 1em 0 0.5em 0; }\n.tiptap-editor h4 { font-size: 1.1em !important; font-weight: 600 !important; margin: 1em 0 0.5em 0; }\n.tiptap-editor h5 { font-size: 1em !important; font-weight: 600 !important; margin: 1em 0 0.5em 0; }\n.tiptap-editor h6 { font-size: 0.9em !important; font-weight: 600 !important; margin: 1em 0 0.5em 0; }\n.tiptap-editor h1:first-child, .tiptap-editor h2:first-child, .tiptap-editor h3:first-child,\n.tiptap-editor h4:first-child, .tiptap-editor h5:first-child, .tiptap-editor h6:first-child { margin-top: 0; }\n.tiptap-editor ul, .tiptap-editor ol { padding-left: 1.5em !important; margin: 0 0 1em 0; }\n.tiptap-editor ul { list-style-type: disc !important; }\n.tiptap-editor ol { list-style-type: decimal !important; }\n.tiptap-editor li { margin: 0.25em 0; }\n.tiptap-editor li p { margin: 0; }\n.tiptap-editor blockquote { border-left: 4px solid #e5e7eb !important; padding-left: 1em !important; margin: 1em 0 !important; font-style: italic !important; }\n.tiptap-editor p { margin: 0 0 1em 0; }\n.tiptap-editor p:last-child { margin-bottom: 0; }\n`\n\n// Inject styles once when module loads\nif (typeof document !== 'undefined') {\n const styleId = 'tiptap-editor-injected-styles'\n if (!document.getElementById(styleId)) {\n const style = document.createElement('style')\n style.id = styleId\n style.textContent = TIPTAP_EDITOR_STYLES\n document.head.appendChild(style)\n console.log('[TipTap] Injected editor styles')\n }\n\n // Debug: Check if CSS file was loaded\n const stylesheets = Array.from(document.styleSheets)\n const hasTiptapCSS = stylesheets.some(sheet => {\n try {\n return Array.from(sheet.cssRules || []).some(rule =>\n rule.cssText?.includes('.tiptap-editor h1')\n )\n } catch { return false }\n })\n console.log('[TipTap] CSS file loaded:', hasTiptapCSS)\n}\n\n// =============================================================================\n// Reusable Tailwind Class Constants\n// =============================================================================\n\nconst ICON_SIZE = 'w-[18px] h-[18px]'\nconst TOOLBAR_BUTTON = 'h-7 w-7 p-0 flex-shrink-0'\nconst TOOLBAR_DIVIDER = 'w-px h-6 bg-gray-300 mx-1 flex-shrink-0'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface TiptapFieldProps {\n value: string\n onChange: (value: string) => void\n label?: string\n readOnly?: boolean\n}\n\n// =============================================================================\n// Font Size Extension\n// =============================================================================\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n fontSize: {\n setFontSize: (size: string) => ReturnType\n unsetFontSize: () => ReturnType\n }\n }\n}\n\nconst FontSize = Extension.create({\n name: 'fontSize',\n\n addOptions() {\n return {\n types: ['textStyle'],\n }\n },\n\n addGlobalAttributes() {\n return [\n {\n types: this.options.types,\n attributes: {\n fontSize: {\n default: null,\n parseHTML: element => element.style.fontSize?.replace(/['\"]+/g, ''),\n renderHTML: attributes => {\n if (!attributes.fontSize) {\n return {}\n }\n return {\n style: `font-size: ${attributes.fontSize}`,\n }\n },\n },\n },\n },\n ]\n },\n\n addCommands() {\n return {\n setFontSize:\n (fontSize: string) =>\n ({ chain }) => {\n return chain().setMark('textStyle', { fontSize }).run()\n },\n unsetFontSize:\n () =>\n ({ chain }) => {\n return chain()\n .setMark('textStyle', { fontSize: null })\n .removeEmptyTextStyle()\n .run()\n },\n }\n },\n})\n\n// =============================================================================\n// Color Palette - Organized by Category\n// =============================================================================\n\n// Special \"inherit\" color means remove any color styling, inherit from parent\nconst THEME_COLOR = { label: 'Theme (Auto)', value: 'inherit' }\n\nconst COLOR_CATEGORIES = [\n {\n label: 'Brand',\n colors: [\n { hex: '#2563eb', label: 'Blue 600' },\n { hex: '#3b82f6', label: 'Blue 500' },\n { hex: '#60a5fa', label: 'Blue 400' },\n { hex: '#0d9488', label: 'Teal 600' },\n ],\n },\n {\n label: 'Grays',\n colors: [\n { hex: '#000000', label: 'Black' },\n { hex: '#374151', label: 'Gray 700' },\n { hex: '#6b7280', label: 'Gray 500' },\n { hex: '#9ca3af', label: 'Gray 400' },\n { hex: '#ffffff', label: 'White' },\n ],\n },\n {\n label: 'Colors',\n colors: [\n { hex: '#dc2626', label: 'Red' },\n { hex: '#ea580c', label: 'Orange' },\n { hex: '#f59e0b', label: 'Amber' },\n { hex: '#16a34a', label: 'Green' },\n { hex: '#0891b2', label: 'Cyan' },\n { hex: '#7c3aed', label: 'Violet' },\n { hex: '#db2777', label: 'Pink' },\n ],\n },\n]\n\n// Highlight colors (background)\nconst HIGHLIGHT_COLORS = [\n { hex: '#fef08a', label: 'Yellow' },\n { hex: '#bbf7d0', label: 'Green' },\n { hex: '#bfdbfe', label: 'Blue' },\n { hex: '#fecaca', label: 'Red' },\n { hex: '#e9d5ff', label: 'Purple' },\n { hex: '#fed7aa', label: 'Orange' },\n]\n\n// Font size options - expanded preset sizes\nconst FONT_SIZES = [\n { label: 'XS', value: '0.75rem', px: '12px' },\n { label: 'Small', value: '0.875rem', px: '14px' },\n { label: 'Normal', value: null, px: '16px' },\n { label: 'Medium', value: '1.125rem', px: '18px' },\n { label: 'Large', value: '1.25rem', px: '20px' },\n { label: 'XL', value: '1.5rem', px: '24px' },\n { label: '2XL', value: '1.875rem', px: '30px' },\n { label: '3XL', value: '2.25rem', px: '36px' },\n { label: '4XL', value: '3rem', px: '48px' },\n]\n\n// Font size units for custom input\nconst FONT_SIZE_UNITS = ['px', 'rem', 'em'] as const\n\n// =============================================================================\n// Standalone UI Components (no external dependencies)\n// =============================================================================\n\nfunction ToolbarButton({\n onClick,\n isActive,\n title,\n children,\n className = '',\n}: {\n onClick: () => void\n isActive?: boolean\n title: string\n children: React.ReactNode\n className?: string\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n title={title}\n className={cn(\n 'inline-flex items-center justify-center rounded transition-colors',\n TOOLBAR_BUTTON,\n isActive && 'bg-gray-200',\n !isActive && 'bg-transparent',\n className\n )}\n >\n {children}\n </button>\n )\n}\n\nfunction ToolbarDropdown({\n trigger,\n children,\n title,\n isActive,\n}: {\n trigger: React.ReactNode\n children: React.ReactNode | ((close: () => void) => React.ReactNode)\n title: string\n isActive?: boolean\n}) {\n const [isOpen, setIsOpen] = useState(false)\n const dropdownRef = useRef<HTMLDivElement>(null)\n\n const close = useCallback(() => setIsOpen(false), [])\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n // Don't close if a color input has focus (native color picker popup is open)\n // The native picker is rendered outside our DOM, so clicks in it would\n // otherwise trigger a close since they're not contained in dropdownRef\n const activeElement = document.activeElement\n if (activeElement?.tagName === 'INPUT' && (activeElement as HTMLInputElement).type === 'color') {\n return\n }\n\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false)\n }\n }\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [])\n\n return (\n <div ref={dropdownRef} className=\"relative flex-shrink-0\">\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n title={title}\n className={cn(\n 'inline-flex items-center justify-center rounded transition-colors',\n TOOLBAR_BUTTON,\n isActive && 'bg-gray-200',\n !isActive && 'bg-transparent'\n )}\n >\n {trigger}\n </button>\n {isOpen && (\n <div className=\"absolute top-full left-0 mt-1 bg-white border border-gray-200 rounded-md shadow-lg z-50 min-w-[160px]\">\n {typeof children === 'function' ? children(close) : children}\n </div>\n )}\n </div>\n )\n}\n\nfunction DropdownItem({\n onClick,\n children,\n className = '',\n}: {\n onClick: () => void\n children: React.ReactNode\n className?: string\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={`\n w-full px-3 py-2 text-left text-sm hover:bg-gray-100 transition-colors\n flex items-center\n ${className}\n `}\n >\n {children}\n </button>\n )\n}\n\nfunction DropdownLabel({ children }: { children: React.ReactNode }) {\n return (\n <div className=\"px-3 py-1 text-xs text-gray-500 font-medium\">\n {children}\n </div>\n )\n}\n\nfunction DropdownSeparator() {\n return <div className=\"h-px bg-gray-200 my-1\" />\n}\n\nfunction LinkPopover({\n isOpen,\n onClose,\n onSetLink,\n onRemoveLink,\n}: {\n isOpen: boolean\n onClose: () => void\n onSetLink: (url: string) => void\n onRemoveLink: () => void\n}) {\n const [url, setUrl] = useState('')\n const popoverRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (popoverRef.current && !popoverRef.current.contains(event.target as Node)) {\n onClose()\n }\n }\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n }\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [isOpen, onClose])\n\n if (!isOpen) return null\n\n return (\n <div\n ref={popoverRef}\n className=\"absolute top-full left-0 mt-1 bg-white border border-gray-200 rounded-md shadow-lg z-50 p-3 w-80\"\n >\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium text-gray-700\">URL</label>\n <input\n type=\"text\"\n placeholder=\"https://example.com\"\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n if (url) {\n onSetLink(url)\n setUrl('')\n }\n }\n }}\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-2 focus:ring-blue-500\"\n />\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={() => {\n if (url) {\n onSetLink(url)\n setUrl('')\n }\n }}\n className=\"px-3 py-1.5 bg-blue-600 text-white text-sm rounded-md hover:bg-blue-700\"\n >\n Add Link\n </button>\n <button\n type=\"button\"\n onClick={() => {\n onRemoveLink()\n setUrl('')\n }}\n className=\"px-3 py-1.5 text-gray-600 text-sm hover:bg-gray-100 rounded-md\"\n >\n Remove Link\n </button>\n </div>\n </div>\n </div>\n )\n}\n\n// =============================================================================\n// Tiptap Extensions Factory\n// Each editor instance needs its own extension instances to avoid\n// \"duplicate extension\" warnings when multiple editors exist on the page.\n// =============================================================================\n\nfunction createTiptapExtensions() {\n return [\n StarterKit.configure({\n heading: {\n levels: [1, 2, 3, 4, 5, 6],\n },\n // Enable strikethrough from StarterKit\n strike: {},\n // Horizontal rule and hard break are included by default\n horizontalRule: {},\n hardBreak: {},\n // Configure StarterKit's built-in Link and Underline (v3+)\n // These are included in StarterKit by default, so we configure them here\n // instead of adding duplicate extensions\n link: {\n openOnClick: false,\n HTMLAttributes: {\n class: 'text-blue-600 underline',\n },\n },\n underline: {},\n }),\n TextAlign.configure({\n types: ['heading', 'paragraph'],\n alignments: ['left', 'center', 'right', 'justify'],\n }),\n TextStyle,\n Color,\n Highlight.configure({\n multicolor: true,\n }),\n FontSize,\n Superscript,\n Subscript,\n ]\n}\n\n// =============================================================================\n// TiptapField Component\n// =============================================================================\n\nfunction TiptapFieldInner({ value, onChange, label, readOnly }: TiptapFieldProps) {\n const [isLinkPopoverOpen, setIsLinkPopoverOpen] = useState(false)\n const [showSource, setShowSource] = useState(false)\n const [sourceContent, setSourceContent] = useState(value)\n\n // Use a ref to store the onChange callback to avoid recreating the editor\n // when onChange reference changes (which happens on every Puck render)\n const onChangeRef = useRef(onChange)\n onChangeRef.current = onChange\n\n // Stable onUpdate handler that uses the ref\n const handleUpdate = useCallback(({ editor }: { editor: ReturnType<typeof useEditor> }) => {\n if (editor) {\n const html = editor.getHTML()\n onChangeRef.current(html)\n }\n }, [])\n\n // Note: The \"duplicate extension\" warning is a known Tiptap limitation with React Strict Mode\n // and multiple editor instances. It doesn't affect functionality.\n // See: https://github.com/ueberdosis/tiptap/issues/2890\n const editor = useEditor({\n extensions: createTiptapExtensions(),\n content: value,\n editorProps: {\n attributes: {\n class: 'tiptap-editor focus:outline-none min-h-[200px] p-4',\n },\n },\n onUpdate: handleUpdate,\n immediatelyRender: false,\n shouldRerenderOnTransaction: false,\n })\n\n // Use useEditorState to subscribe to formatting state changes.\n // This is the official TipTap pattern for reactive toolbar buttons with shouldRerenderOnTransaction: false.\n // See: https://tiptap.dev/docs/guides/performance\n const formattingState = useEditorState({\n editor,\n selector: ({ editor: e }) => {\n if (!e) return null\n return {\n isBold: e.isActive('bold'),\n isItalic: e.isActive('italic'),\n isUnderline: e.isActive('underline'),\n isStrike: e.isActive('strike'),\n isH1: e.isActive('heading', { level: 1 }),\n isH2: e.isActive('heading', { level: 2 }),\n isH3: e.isActive('heading', { level: 3 }),\n isH4: e.isActive('heading', { level: 4 }),\n isH5: e.isActive('heading', { level: 5 }),\n isH6: e.isActive('heading', { level: 6 }),\n isBulletList: e.isActive('bulletList'),\n isOrderedList: e.isActive('orderedList'),\n isBlockquote: e.isActive('blockquote'),\n isAlignLeft: e.isActive({ textAlign: 'left' }),\n isAlignCenter: e.isActive({ textAlign: 'center' }),\n isAlignRight: e.isActive({ textAlign: 'right' }),\n isAlignJustify: e.isActive({ textAlign: 'justify' }),\n isLink: e.isActive('link'),\n isHighlight: e.isActive('highlight'),\n isSuperscript: e.isActive('superscript'),\n isSubscript: e.isActive('subscript'),\n }\n },\n })\n\n // Debug: Log editor element info\n useEffect(() => {\n if (editor) {\n const editorEl = editor.view.dom as HTMLElement\n console.log('[TipTap Debug] Editor element:', {\n className: editorEl.className,\n tagName: editorEl.tagName,\n hasH1: editorEl.querySelector('h1') !== null,\n })\n // Check computed styles on a heading if present\n const h1 = editorEl.querySelector('h1')\n if (h1) {\n const styles = window.getComputedStyle(h1)\n console.log('[TipTap Debug] H1 computed styles:', {\n fontSize: styles.fontSize,\n fontWeight: styles.fontWeight,\n })\n }\n const ul = editorEl.querySelector('ul')\n if (ul) {\n const styles = window.getComputedStyle(ul)\n console.log('[TipTap Debug] UL computed styles:', {\n listStyleType: styles.listStyleType,\n paddingLeft: styles.paddingLeft,\n })\n }\n }\n }, [editor, value])\n\n if (!editor) {\n return (\n <div className=\"puck-field\">\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 mb-2\">{label}</label>\n )}\n <div className=\"border rounded-lg overflow-hidden bg-white\">\n <div className=\"min-h-[200px] p-4 text-gray-400\">Loading editor...</div>\n </div>\n </div>\n )\n }\n\n const setLink = (url: string) => {\n editor.chain().focus().extendMarkRange('link').setLink({ href: url }).run()\n setIsLinkPopoverOpen(false)\n }\n\n const removeLink = () => {\n editor.chain().focus().unsetLink().run()\n setIsLinkPopoverOpen(false)\n }\n\n return (\n <div className=\"puck-field\">\n {label && (\n <label className=\"block text-sm font-medium text-gray-700 mb-2\">{label}</label>\n )}\n\n <div className=\"border rounded-lg bg-white\">\n {/* Toolbar - wraps into multiple rows on narrow screens */}\n {!readOnly && (\n <div className=\"border-b bg-gray-50 flex items-center flex-wrap gap-1 p-2\">\n {/* Text Style */}\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleBold().run()}\n isActive={formattingState?.isBold}\n title=\"Bold\"\n >\n <Bold className={ICON_SIZE} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleItalic().run()}\n isActive={formattingState?.isItalic}\n title=\"Italic\"\n >\n <Italic className={ICON_SIZE} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleUnderline().run()}\n isActive={formattingState?.isUnderline}\n title=\"Underline\"\n >\n <Underline className={ICON_SIZE} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleStrike().run()}\n isActive={formattingState?.isStrike}\n title=\"Strikethrough\"\n >\n <Strikethrough className={ICON_SIZE} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleSuperscript().run()}\n isActive={formattingState?.isSuperscript}\n title=\"Superscript\"\n >\n <SuperscriptIcon className={ICON_SIZE} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleSubscript().run()}\n isActive={formattingState?.isSubscript}\n title=\"Subscript\"\n >\n <SubscriptIcon className={ICON_SIZE} />\n </ToolbarButton>\n\n <div className={TOOLBAR_DIVIDER} />\n\n {/* Headings Dropdown */}\n <ToolbarDropdown\n trigger={\n <span className=\"flex items-center gap-0.5\">\n {formattingState?.isH1 ? <Heading1 className={ICON_SIZE} /> :\n formattingState?.isH2 ? <Heading2 className={ICON_SIZE} /> :\n formattingState?.isH3 ? <Heading3 className={ICON_SIZE} /> :\n formattingState?.isH4 ? <Heading4 className={ICON_SIZE} /> :\n formattingState?.isH5 ? <Heading5 className={ICON_SIZE} /> :\n formattingState?.isH6 ? <Heading6 className={ICON_SIZE} /> :\n <Pilcrow className={ICON_SIZE} />}\n <ChevronDown className=\"w-3 h-3\" />\n </span>\n }\n title=\"Text Type\"\n isActive={formattingState?.isH1 || formattingState?.isH2 || formattingState?.isH3 || formattingState?.isH4 || formattingState?.isH5 || formattingState?.isH6}\n >\n {(close) => (\n <>\n <DropdownItem onClick={() => { editor.chain().focus().setParagraph().run(); close(); }}>\n <Pilcrow className={cn(ICON_SIZE, 'mr-2')} />\n Paragraph\n </DropdownItem>\n <DropdownSeparator />\n <DropdownItem onClick={() => { editor.chain().focus().toggleHeading({ level: 1 }).run(); close(); }}>\n <Heading1 className={cn(ICON_SIZE, 'mr-2')} />\n <span className=\"font-bold text-lg\">Heading 1</span>\n </DropdownItem>\n <DropdownItem onClick={() => { editor.chain().focus().toggleHeading({ level: 2 }).run(); close(); }}>\n <Heading2 className={cn(ICON_SIZE, 'mr-2')} />\n <span className=\"font-bold text-base\">Heading 2</span>\n </DropdownItem>\n <DropdownItem onClick={() => { editor.chain().focus().toggleHeading({ level: 3 }).run(); close(); }}>\n <Heading3 className={cn(ICON_SIZE, 'mr-2')} />\n <span className=\"font-semibold\">Heading 3</span>\n </DropdownItem>\n <DropdownItem onClick={() => { editor.chain().focus().toggleHeading({ level: 4 }).run(); close(); }}>\n <Heading4 className={cn(ICON_SIZE, 'mr-2')} />\n <span className=\"font-semibold text-sm\">Heading 4</span>\n </DropdownItem>\n <DropdownItem onClick={() => { editor.chain().focus().toggleHeading({ level: 5 }).run(); close(); }}>\n <Heading5 className={cn(ICON_SIZE, 'mr-2')} />\n <span className=\"font-semibold text-xs\">Heading 5</span>\n </DropdownItem>\n <DropdownItem onClick={() => { editor.chain().focus().toggleHeading({ level: 6 }).run(); close(); }}>\n <Heading6 className={cn(ICON_SIZE, 'mr-2')} />\n <span className=\"font-semibold text-xs text-gray-600\">Heading 6</span>\n </DropdownItem>\n </>\n )}\n </ToolbarDropdown>\n\n <div className={TOOLBAR_DIVIDER} />\n\n {/* Font Size */}\n <ToolbarDropdown\n trigger={<ALargeSmall className={ICON_SIZE} />}\n title=\"Font Size\"\n >\n {(close) => (\n <>\n <DropdownLabel>Presets</DropdownLabel>\n <div className=\"grid grid-cols-3 gap-1 px-2 pb-2\">\n {FONT_SIZES.map((size) => (\n <button\n key={size.label}\n type=\"button\"\n onClick={() => {\n if (size.value) {\n editor.chain().focus().setFontSize(size.value).run()\n } else {\n editor.chain().focus().unsetFontSize().run()\n }\n close()\n }}\n className=\"px-2 py-1.5 text-xs rounded border border-gray-200 hover:bg-gray-100 transition-colors text-center\"\n title={size.px}\n >\n {size.label}\n </button>\n ))}\n </div>\n <DropdownSeparator />\n <div className=\"p-2\">\n <DropdownLabel>Custom Size</DropdownLabel>\n <div className=\"flex items-center gap-1 mt-1\">\n <input\n type=\"number\"\n placeholder=\"16\"\n min=\"8\"\n max=\"200\"\n className=\"w-16 px-2 py-1 text-sm border border-gray-200 rounded focus:outline-none focus:ring-1 focus:ring-blue-500\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n const input = e.target as HTMLInputElement\n const value = input.value\n const unit = (input.nextElementSibling as HTMLSelectElement)?.value || 'px'\n if (value) {\n editor.chain().focus().setFontSize(`${value}${unit}`).run()\n close()\n }\n }\n }}\n />\n <select\n className=\"px-1 py-1 text-sm border border-gray-200 rounded focus:outline-none focus:ring-1 focus:ring-blue-500\"\n defaultValue=\"px\"\n >\n {FONT_SIZE_UNITS.map((unit) => (\n <option key={unit} value={unit}>{unit}</option>\n ))}\n </select>\n <button\n type=\"button\"\n onClick={(e) => {\n const container = (e.target as HTMLElement).parentElement\n const input = container?.querySelector('input') as HTMLInputElement\n const select = container?.querySelector('select') as HTMLSelectElement\n const value = input?.value\n const unit = select?.value || 'px'\n if (value) {\n editor.chain().focus().setFontSize(`${value}${unit}`).run()\n close()\n }\n }}\n className=\"px-2 py-1 text-xs bg-blue-600 text-white rounded hover:bg-blue-700\"\n >\n Apply\n </button>\n </div>\n </div>\n </>\n )}\n </ToolbarDropdown>\n\n <div className={TOOLBAR_DIVIDER} />\n\n {/* Lists */}\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n isActive={formattingState?.isBulletList}\n title=\"Bullet List\"\n >\n <List className={ICON_SIZE} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n isActive={formattingState?.isOrderedList}\n title=\"Numbered List\"\n >\n <ListOrdered className={ICON_SIZE} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleBlockquote().run()}\n isActive={formattingState?.isBlockquote}\n title=\"Blockquote\"\n >\n <Quote className={ICON_SIZE} />\n </ToolbarButton>\n\n <div className={TOOLBAR_DIVIDER} />\n\n {/* Alignment */}\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('left').run()}\n isActive={formattingState?.isAlignLeft}\n title=\"Align Left\"\n >\n <AlignLeft className={ICON_SIZE} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('center').run()}\n isActive={formattingState?.isAlignCenter}\n title=\"Align Center\"\n >\n <AlignCenter className={ICON_SIZE} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('right').run()}\n isActive={formattingState?.isAlignRight}\n title=\"Align Right\"\n >\n <AlignRight className={ICON_SIZE} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('justify').run()}\n isActive={formattingState?.isAlignJustify}\n title=\"Justify\"\n >\n <AlignJustify className={ICON_SIZE} />\n </ToolbarButton>\n\n <div className={TOOLBAR_DIVIDER} />\n\n {/* Link */}\n <div className=\"relative flex-shrink-0\">\n <ToolbarButton\n onClick={() => setIsLinkPopoverOpen(!isLinkPopoverOpen)}\n isActive={formattingState?.isLink}\n title=\"Add Link\"\n >\n <Link className={ICON_SIZE} />\n </ToolbarButton>\n <LinkPopover\n isOpen={isLinkPopoverOpen}\n onClose={() => setIsLinkPopoverOpen(false)}\n onSetLink={setLink}\n onRemoveLink={removeLink}\n />\n </div>\n\n {/* Text Color */}\n <ToolbarDropdown\n trigger={<Palette className={ICON_SIZE} />}\n title=\"Text Color\"\n >\n {(close) => (\n <>\n {/* Theme (Auto) option - removes color to inherit from parent */}\n <DropdownItem onClick={() => { editor.chain().focus().unsetColor().run(); close(); }}>\n <span\n className=\"w-4 h-4 rounded mr-2 border border-gray-300 flex-shrink-0\"\n style={{ background: 'linear-gradient(135deg, #fff 50%, #1f2937 50%)' }}\n />\n {THEME_COLOR.label}\n </DropdownItem>\n <DropdownSeparator />\n\n {/* Color categories */}\n {COLOR_CATEGORIES.map((category) => (\n <div key={category.label}>\n <DropdownLabel>{category.label}</DropdownLabel>\n <div className=\"grid grid-cols-5 gap-1 px-2 pb-2\">\n {category.colors.map((color) => (\n <button\n key={color.hex}\n type=\"button\"\n onClick={() => { editor.chain().focus().setColor(color.hex).run(); close(); }}\n className=\"w-6 h-6 rounded border border-gray-200 cursor-pointer transition-transform duration-100 hover:scale-110\"\n style={{ backgroundColor: color.hex }}\n title={color.label}\n />\n ))}\n </div>\n </div>\n ))}\n\n <DropdownSeparator />\n\n {/* Custom color picker */}\n <div className=\"p-2\">\n <DropdownLabel>Custom Color</DropdownLabel>\n <div className=\"flex items-center gap-2 mt-1\">\n <input\n type=\"color\"\n // Show current text color (default to black if none set)\n value={editor.getAttributes('textStyle').color || '#000000'}\n // onInput fires while dragging - apply color live\n onInput={(e) => editor.chain().focus().setColor((e.target as HTMLInputElement).value).run()}\n // Let dropdown close naturally via click-outside detection\n className=\"w-8 h-8 p-0 border border-gray-200 rounded cursor-pointer\"\n title=\"Pick any color\"\n />\n <span className=\"text-xs text-gray-500\">Pick any color</span>\n </div>\n </div>\n </>\n )}\n </ToolbarDropdown>\n\n {/* Highlight (background color) */}\n <ToolbarDropdown\n trigger={<Highlighter className={ICON_SIZE} />}\n title=\"Highlight\"\n isActive={formattingState?.isHighlight}\n >\n {(close) => (\n <>\n <div className=\"grid grid-cols-3 gap-1 p-2\">\n {HIGHLIGHT_COLORS.map((color) => (\n <button\n key={color.hex}\n type=\"button\"\n onClick={() => { editor.chain().focus().toggleHighlight({ color: color.hex }).run(); close(); }}\n className=\"w-8 h-6 rounded border border-gray-200 cursor-pointer transition-transform duration-100 hover:scale-110\"\n style={{ backgroundColor: color.hex }}\n title={color.label}\n />\n ))}\n </div>\n <DropdownItem onClick={() => { editor.chain().focus().unsetHighlight().run(); close(); }}>\n Remove Highlight\n </DropdownItem>\n </>\n )}\n </ToolbarDropdown>\n\n <div className={TOOLBAR_DIVIDER} />\n\n {/* Insert Elements */}\n <ToolbarButton\n onClick={() => editor.chain().focus().setHorizontalRule().run()}\n title=\"Horizontal Rule\"\n >\n <Minus className={ICON_SIZE} />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().setHardBreak().run()}\n title=\"Hard Break (Shift+Enter)\"\n >\n <CornerDownLeft className={ICON_SIZE} />\n </ToolbarButton>\n\n <div className={TOOLBAR_DIVIDER} />\n\n {/* Clear Formatting */}\n <ToolbarButton\n onClick={() => editor.chain().focus().unsetAllMarks().clearNodes().run()}\n title=\"Clear Formatting\"\n >\n <RemoveFormatting className={ICON_SIZE} />\n </ToolbarButton>\n\n {/* View Source */}\n <button\n type=\"button\"\n onClick={() => {\n if (showSource) {\n editor.commands.setContent(sourceContent)\n onChange(sourceContent)\n } else {\n setSourceContent(editor.getHTML())\n }\n setShowSource(!showSource)\n }}\n title=\"View Source\"\n className={cn(\n 'inline-flex items-center rounded transition-colors text-xs h-7 px-2 gap-1 flex-shrink-0',\n showSource && 'bg-gray-200',\n !showSource && 'bg-transparent'\n )}\n >\n <Code className={ICON_SIZE} />\n Source\n </button>\n </div>\n )}\n\n {/* Editor or Source View */}\n {showSource ? (\n <textarea\n value={sourceContent}\n onChange={(e) => {\n setSourceContent(e.target.value)\n onChange(e.target.value)\n }}\n className=\"w-full min-h-[200px] p-4 font-mono text-sm border-0 resize-y focus:outline-none\"\n placeholder=\"Edit HTML source...\"\n />\n ) : (\n <div className=\"min-h-[200px] bg-white\">\n <EditorContent editor={editor} />\n </div>\n )}\n </div>\n </div>\n )\n}\n\n// Memoize the component to prevent unnecessary re-renders when Puck updates state.\n// This is critical for maintaining editor focus during typing.\nexport const TiptapField = memo(TiptapFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for Tiptap rich text editing\n */\nexport function createTiptapField(config: {\n label?: string\n placeholder?: string\n}): CustomField<string> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ name, value, onChange, readOnly }) => (\n <TiptapField\n key={`tiptap-${name}`}\n value={value || ''}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n />\n ),\n }\n}\n","'use client'\n\n/**\n * TiptapModal - Full-screen modal for TipTap rich text editing\n *\n * Used by TiptapModalField to provide a focused editing experience\n * that works within Puck's architecture (sidebar triggers modal).\n */\n\nimport React, { useState, useEffect, useCallback } from 'react'\nimport { TiptapField } from './TiptapField'\nimport { X } from 'lucide-react'\n\ninterface TiptapModalProps {\n isOpen: boolean\n onClose: () => void\n value: string\n onChange: (value: string) => void\n title?: string\n}\n\nexport function TiptapModal({ isOpen, onClose, value, onChange, title }: TiptapModalProps) {\n const [localValue, setLocalValue] = useState(value)\n\n // Sync local value when modal opens with new value\n useEffect(() => {\n if (isOpen) {\n setLocalValue(value)\n }\n }, [isOpen, value])\n\n // Handle escape key\n useEffect(() => {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape' && isOpen) {\n handleCancel()\n }\n }\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [isOpen])\n\n const handleSave = useCallback(() => {\n onChange(localValue)\n onClose()\n }, [localValue, onChange, onClose])\n\n const handleCancel = useCallback(() => {\n setLocalValue(value) // Reset to original\n onClose()\n }, [value, onClose])\n\n // Handle backdrop click\n const handleBackdropClick = useCallback(\n (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) {\n handleCancel()\n }\n },\n [handleCancel]\n )\n\n if (!isOpen) return null\n\n return (\n <div\n onClick={handleBackdropClick}\n style={{\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 99999,\n padding: '24px',\n }}\n >\n <div\n style={{\n backgroundColor: 'white',\n borderRadius: '8px',\n width: '100%',\n maxWidth: '900px',\n height: '80vh',\n maxHeight: '800px',\n display: 'flex',\n flexDirection: 'column',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n }}\n >\n {/* Header */}\n <div\n style={{\n padding: '16px 20px',\n borderBottom: '1px solid #e5e7eb',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n flexShrink: 0,\n }}\n >\n <h2 style={{ margin: 0, fontSize: '18px', fontWeight: 600, color: '#111827' }}>\n {title || 'Edit Content'}\n </h2>\n <button\n type=\"button\"\n onClick={handleCancel}\n style={{\n padding: '8px',\n background: 'transparent',\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n color: '#6b7280',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n title=\"Close (Esc)\"\n >\n <X size={20} />\n </button>\n </div>\n\n {/* Editor */}\n <div\n style={{\n flex: 1,\n overflow: 'auto',\n padding: '16px 20px',\n minHeight: 0,\n }}\n >\n <TiptapField value={localValue} onChange={setLocalValue} />\n </div>\n\n {/* Footer */}\n <div\n style={{\n padding: '16px 20px',\n borderTop: '1px solid #e5e7eb',\n display: 'flex',\n justifyContent: 'flex-end',\n gap: '12px',\n flexShrink: 0,\n }}\n >\n <button\n type=\"button\"\n onClick={handleCancel}\n style={{\n padding: '10px 20px',\n backgroundColor: 'transparent',\n color: '#374151',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n }}\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleSave}\n style={{\n padding: '10px 20px',\n backgroundColor: '#2563eb',\n color: 'white',\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n }}\n >\n Save Changes\n </button>\n </div>\n </div>\n </div>\n )\n}\n","'use client'\n\n/**\n * TiptapModalField - Custom Puck field with embedded editor + modal option\n *\n * Shows the full TipTap editor embedded in the sidebar for quick edits,\n * with an \"Expand\" button to open a full-screen modal for focused editing.\n */\n\nimport React, { useState, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport { TiptapField } from './TiptapField'\nimport { TiptapModal } from './TiptapModal'\nimport { Maximize2 } from 'lucide-react'\n\ninterface TiptapModalFieldProps {\n value: string\n onChange: (value: string) => void\n label?: string\n}\n\nfunction TiptapModalFieldInner({ value, onChange, label }: TiptapModalFieldProps) {\n const [isModalOpen, setIsModalOpen] = useState(false)\n\n return (\n <div>\n {/* Header with label and expand button */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: '8px',\n }}\n >\n {label && (\n <label\n style={{\n fontSize: '14px',\n fontWeight: 500,\n color: '#374151',\n }}\n >\n {label}\n </label>\n )}\n <button\n type=\"button\"\n onClick={() => setIsModalOpen(true)}\n style={{\n padding: '4px 8px',\n backgroundColor: 'transparent',\n color: '#6b7280',\n border: '1px solid #d1d5db',\n borderRadius: '4px',\n cursor: 'pointer',\n fontSize: '12px',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n transition: 'all 0.15s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = '#f3f4f6'\n e.currentTarget.style.borderColor = '#9ca3af'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n e.currentTarget.style.borderColor = '#d1d5db'\n }}\n title=\"Open full-screen editor\"\n >\n <Maximize2 size={14} />\n Expand\n </button>\n </div>\n\n {/* Embedded TipTap editor */}\n <TiptapField value={value || ''} onChange={onChange} />\n\n {/* Modal for full-screen editing */}\n <TiptapModal\n isOpen={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n value={value || ''}\n onChange={onChange}\n title=\"Edit Rich Text\"\n />\n </div>\n )\n}\n\nexport const TiptapModalField = memo(TiptapModalFieldInner)\n\n/**\n * Creates a Puck field configuration for TipTap editing with modal option\n */\nexport function createTiptapModalField(config: { label?: string } = {}): CustomField<string> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange }) => (\n <TiptapModalField value={value || ''} onChange={onChange} label={config.label} />\n ),\n }\n}\n","'use client'\n\n/**\n * PaddingField - Custom Puck field for 4-sided padding/margin control\n *\n * This component provides:\n * - 4 number inputs for top/right/bottom/left\n * - Link/unlink toggle button (when linked, all values sync)\n * - Unit selector (px, rem)\n */\n\nimport React, { useCallback, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport { Link, Unlink } from 'lucide-react'\nimport type { PaddingValue } from './shared'\nimport { Button } from '../components/ui/button'\nimport { Input } from '../components/ui/input'\nimport { Label } from '../components/ui/label'\nimport { cn } from '../lib/utils'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ntype SpacingUnit = 'px' | 'rem' | 'em' | '%'\n\ninterface PaddingFieldProps {\n value: PaddingValue | null\n onChange: (value: PaddingValue | null) => void\n label?: string\n readOnly?: boolean\n showUnits?: boolean\n}\n\n// =============================================================================\n// Default Value\n// =============================================================================\n\nconst DEFAULT_VALUE: PaddingValue = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n unit: 'px',\n linked: true,\n}\n\n// =============================================================================\n// PaddingField Component\n// =============================================================================\n\nfunction PaddingFieldInner({\n value,\n onChange,\n label,\n readOnly,\n showUnits = true,\n}: PaddingFieldProps) {\n // Use default if no value\n const currentValue = value || DEFAULT_VALUE\n\n // Use explicit linked state from value, default to true if not set\n const isLinked = currentValue.linked ?? true\n\n // Handle individual side change\n const handleSideChange = useCallback((\n side: 'top' | 'right' | 'bottom' | 'left',\n newValue: number\n ) => {\n if (isLinked) {\n // When linked, update all sides\n onChange({\n ...currentValue,\n top: newValue,\n right: newValue,\n bottom: newValue,\n left: newValue,\n linked: true,\n })\n } else {\n // When unlinked, update only the specific side\n onChange({\n ...currentValue,\n [side]: newValue,\n linked: false,\n })\n }\n }, [currentValue, onChange, isLinked])\n\n // Handle link toggle\n const handleLinkToggle = useCallback(() => {\n if (isLinked) {\n // Unlinking - keep current values but mark as unlinked\n onChange({\n ...currentValue,\n linked: false,\n })\n } else {\n // Linking - set all sides to the top value and mark as linked\n onChange({\n ...currentValue,\n top: currentValue.top,\n right: currentValue.top,\n bottom: currentValue.top,\n left: currentValue.top,\n linked: true,\n })\n }\n }, [currentValue, onChange, isLinked])\n\n // Handle unit change\n const handleUnitChange = useCallback((unit: SpacingUnit) => {\n onChange({\n ...currentValue,\n unit,\n })\n }, [currentValue, onChange])\n\n // Render a single side input - compact horizontal layout\n const renderSideInput = (\n side: 'top' | 'right' | 'bottom' | 'left',\n sideLabel: string\n ) => (\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-[10px] text-muted-foreground uppercase tracking-wide w-6 text-right flex-shrink-0\">\n {sideLabel.charAt(0)}\n </Label>\n <Input\n type=\"number\"\n min={0}\n value={currentValue[side]}\n onChange={(e) => handleSideChange(side, parseInt(e.target.value, 10) || 0)}\n disabled={readOnly}\n className=\"h-7 text-center text-sm font-mono w-full px-1 py-0\"\n />\n </div>\n )\n\n return (\n <div className=\"puck-field flex flex-col gap-3\">\n {/* Header with label and link toggle */}\n <div className=\"flex items-center justify-between\">\n {label && (\n <Label className=\"text-sm font-medium text-foreground\">\n {label}\n </Label>\n )}\n {/* Link/Unlink toggle button */}\n {!readOnly && (\n <Button\n type=\"button\"\n variant={isLinked ? 'default' : 'outline'}\n size=\"icon\"\n onClick={handleLinkToggle}\n className={cn(\n \"h-7 w-7\",\n isLinked ? \"\" : \"text-muted-foreground\"\n )}\n title={isLinked ? 'Click to unlink (set sides individually)' : 'Click to link (all sides same value)'}\n >\n {isLinked ? (\n <Link className=\"h-4 w-4\" />\n ) : (\n <Unlink className=\"h-4 w-4\" />\n )}\n </Button>\n )}\n </div>\n\n {/* Compact 2x2 grid layout */}\n <div className=\"bg-muted/50 rounded-md grid grid-cols-2 gap-2 p-2\">\n {renderSideInput('top', 'Top')}\n {renderSideInput('right', 'Right')}\n {renderSideInput('bottom', 'Bottom')}\n {renderSideInput('left', 'Left')}\n </div>\n\n {/* Unit selector and summary */}\n {showUnits && !readOnly && (\n <div className=\"flex items-center justify-between flex-wrap gap-2\">\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-xs text-muted-foreground\">Unit:</Label>\n <div className=\"flex gap-1\">\n {(['px', 'rem'] as SpacingUnit[]).map((unit) => {\n const isActive = currentValue.unit === unit\n return (\n <Button\n key={unit}\n type=\"button\"\n variant={isActive ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => handleUnitChange(unit)}\n className={cn(\n \"text-xs font-mono h-7 px-2.5\",\n !isActive && \"text-muted-foreground\"\n )}\n >\n {unit}\n </Button>\n )\n })}\n </div>\n </div>\n {/* Current value summary */}\n <span className=\"text-xs text-muted-foreground font-mono\">\n {isLinked\n ? `${currentValue.top}${currentValue.unit}`\n : `${currentValue.top} ${currentValue.right} ${currentValue.bottom} ${currentValue.left}${currentValue.unit}`\n }\n </span>\n </div>\n )}\n </div>\n )\n}\n\nexport const PaddingField = memo(PaddingFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for padding/spacing\n */\nexport function createPaddingField(config: {\n label?: string\n showUnits?: boolean\n}): CustomField<PaddingValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <PaddingField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n showUnits={config.showUnits}\n />\n ),\n }\n}\n","'use client'\n\n/**\n * MarginField - Custom Puck field for component margin/spacing control\n *\n * Similar to PaddingField but specifically for outer margin.\n * Provides:\n * - 4 number inputs for top/right/bottom/left\n * - Link/unlink toggle button (when linked, all values sync)\n * - Unit selector (px, rem)\n */\n\nimport React, { useCallback, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport { Link, Unlink } from 'lucide-react'\nimport type { PaddingValue } from './shared'\nimport { Button } from '../components/ui/button'\nimport { Input } from '../components/ui/input'\nimport { Label } from '../components/ui/label'\nimport { cn } from '../lib/utils'\n\n// Re-use PaddingValue type for margin (same structure)\nexport type MarginValue = PaddingValue\n\n// =============================================================================\n// Types\n// =============================================================================\n\ntype SpacingUnit = 'px' | 'rem' | 'em' | '%'\n\ninterface MarginFieldProps {\n value: MarginValue | null\n onChange: (value: MarginValue | null) => void\n label?: string\n readOnly?: boolean\n showUnits?: boolean\n}\n\n// =============================================================================\n// Default Value\n// =============================================================================\n\nconst DEFAULT_VALUE: MarginValue = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n unit: 'px',\n linked: true,\n}\n\n// =============================================================================\n// MarginField Component\n// =============================================================================\n\nfunction MarginFieldInner({\n value,\n onChange,\n label,\n readOnly,\n showUnits = true,\n}: MarginFieldProps) {\n // Use default if no value\n const currentValue = value || DEFAULT_VALUE\n\n // Use explicit linked state from value, default to true if not set\n const isLinked = currentValue.linked ?? true\n\n // Handle individual side change\n const handleSideChange = useCallback((\n side: 'top' | 'right' | 'bottom' | 'left',\n newValue: number\n ) => {\n if (isLinked) {\n // When linked, update all sides\n onChange({\n ...currentValue,\n top: newValue,\n right: newValue,\n bottom: newValue,\n left: newValue,\n linked: true,\n })\n } else {\n // When unlinked, update only the specific side\n onChange({\n ...currentValue,\n [side]: newValue,\n linked: false,\n })\n }\n }, [currentValue, onChange, isLinked])\n\n // Handle link toggle\n const handleLinkToggle = useCallback(() => {\n if (isLinked) {\n // Unlinking - keep current values but mark as unlinked\n onChange({\n ...currentValue,\n linked: false,\n })\n } else {\n // Linking - set all sides to the top value and mark as linked\n onChange({\n ...currentValue,\n top: currentValue.top,\n right: currentValue.top,\n bottom: currentValue.top,\n left: currentValue.top,\n linked: true,\n })\n }\n }, [currentValue, onChange, isLinked])\n\n // Handle unit change\n const handleUnitChange = useCallback((unit: SpacingUnit) => {\n onChange({\n ...currentValue,\n unit,\n })\n }, [currentValue, onChange])\n\n // Render a single side input - compact horizontal layout\n const renderSideInput = (\n side: 'top' | 'right' | 'bottom' | 'left',\n sideLabel: string\n ) => (\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-[10px] text-muted-foreground uppercase tracking-wide w-6 text-right flex-shrink-0\">\n {sideLabel.charAt(0)}\n </Label>\n <Input\n type=\"number\"\n min={0}\n value={currentValue[side]}\n onChange={(e) => handleSideChange(side, parseInt(e.target.value, 10) || 0)}\n disabled={readOnly}\n className=\"h-7 text-center text-sm font-mono w-full px-1 py-0\"\n />\n </div>\n )\n\n return (\n <div className=\"puck-field flex flex-col gap-3\">\n {/* Header with label and link toggle */}\n <div className=\"flex items-center justify-between\">\n {label && (\n <Label className=\"text-sm font-medium text-foreground\">\n {label}\n </Label>\n )}\n {/* Link/Unlink toggle button */}\n {!readOnly && (\n <Button\n type=\"button\"\n variant={isLinked ? 'default' : 'outline'}\n size=\"icon\"\n onClick={handleLinkToggle}\n className={cn(\n \"h-7 w-7\",\n isLinked ? \"\" : \"text-muted-foreground\"\n )}\n title={isLinked ? 'Click to unlink (set sides individually)' : 'Click to link (all sides same value)'}\n >\n {isLinked ? (\n <Link className=\"h-4 w-4\" />\n ) : (\n <Unlink className=\"h-4 w-4\" />\n )}\n </Button>\n )}\n </div>\n\n {/* Compact 2x2 grid layout */}\n <div className=\"bg-muted/50 rounded-md grid grid-cols-2 gap-2 p-2\">\n {renderSideInput('top', 'Top')}\n {renderSideInput('right', 'Right')}\n {renderSideInput('bottom', 'Bottom')}\n {renderSideInput('left', 'Left')}\n </div>\n\n {/* Unit selector and summary */}\n {showUnits && !readOnly && (\n <div className=\"flex items-center justify-between flex-wrap gap-2\">\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-xs text-muted-foreground\">Unit:</Label>\n <div className=\"flex gap-1\">\n {(['px', 'rem'] as SpacingUnit[]).map((unit) => {\n const isActive = currentValue.unit === unit\n return (\n <Button\n key={unit}\n type=\"button\"\n variant={isActive ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => handleUnitChange(unit)}\n className={cn(\n \"text-xs font-mono h-7 px-2.5\",\n !isActive && \"text-muted-foreground\"\n )}\n >\n {unit}\n </Button>\n )\n })}\n </div>\n </div>\n {/* Current value summary */}\n <span className=\"text-xs text-muted-foreground font-mono\">\n {isLinked\n ? `${currentValue.top}${currentValue.unit}`\n : `${currentValue.top} ${currentValue.right} ${currentValue.bottom} ${currentValue.left}${currentValue.unit}`\n }\n </span>\n </div>\n )}\n </div>\n )\n}\n\nexport const MarginField = memo(MarginFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for margin/spacing\n */\nexport function createMarginField(config: {\n label?: string\n showUnits?: boolean\n}): CustomField<MarginValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <MarginField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n showUnits={config.showUnits}\n />\n ),\n }\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\"\nimport { cn } from \"../../lib/utils\"\n\nconst Select = SelectPrimitive.Root\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst SelectValue = SelectPrimitive.Value\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n))\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n))\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n))\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border border-border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"py-1.5 pl-8 pr-2 text-sm font-semibold\", className)}\n {...props}\n />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n}\n","'use client'\n\n/**\n * BorderField - Custom Puck field for border styling\n *\n * This component provides:\n * - Border width input (px)\n * - Border color picker (reuses ColorPickerField)\n * - Border radius input\n * - Border style selector (solid, dashed, dotted, none)\n * - Per-side toggles (top, right, bottom, left)\n */\n\nimport React, { useCallback, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport {\n X,\n ArrowUp,\n ArrowRight,\n ArrowDown,\n ArrowLeft,\n} from 'lucide-react'\nimport { ColorPickerField } from './ColorPickerField'\nimport type { BorderValue, ColorValue } from './shared'\nimport { Button } from '../components/ui/button'\nimport { Input } from '../components/ui/input'\nimport { Label } from '../components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../components/ui/select'\nimport { cn } from '../lib/utils'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ntype BorderStyle = 'none' | 'solid' | 'dashed' | 'dotted'\n\ninterface BorderFieldProps {\n value: BorderValue | null\n onChange: (value: BorderValue | null) => void\n label?: string\n readOnly?: boolean\n}\n\n// =============================================================================\n// Default Value\n// =============================================================================\n\nconst DEFAULT_VALUE: BorderValue = {\n width: 1,\n color: { hex: '#e5e7eb', opacity: 100 }, // gray-200\n radius: 0,\n style: 'solid',\n sides: {\n top: true,\n right: true,\n bottom: true,\n left: true,\n },\n}\n\n// =============================================================================\n// Border Style Options\n// =============================================================================\n\nconst BORDER_STYLES: Array<{ value: BorderStyle; label: string }> = [\n { value: 'solid', label: 'Solid' },\n { value: 'dashed', label: 'Dashed' },\n { value: 'dotted', label: 'Dotted' },\n { value: 'none', label: 'None' },\n]\n\n// =============================================================================\n// BorderField Component\n// =============================================================================\n\nfunction BorderFieldInner({\n value,\n onChange,\n label,\n readOnly,\n}: BorderFieldProps) {\n // Use default if no value\n const currentValue = value || DEFAULT_VALUE\n\n // Handle width change\n const handleWidthChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const newWidth = parseInt(e.target.value, 10) || 0\n onChange({\n ...currentValue,\n width: Math.max(0, newWidth),\n })\n }, [currentValue, onChange])\n\n // Handle color change\n const handleColorChange = useCallback((newColor: ColorValue | null) => {\n onChange({\n ...currentValue,\n color: newColor || { hex: '#000000', opacity: 100 },\n })\n }, [currentValue, onChange])\n\n // Handle radius change\n const handleRadiusChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const newRadius = parseInt(e.target.value, 10) || 0\n onChange({\n ...currentValue,\n radius: Math.max(0, newRadius),\n })\n }, [currentValue, onChange])\n\n // Handle style change\n const handleStyleChange = useCallback((newStyle: BorderStyle) => {\n onChange({\n ...currentValue,\n style: newStyle,\n })\n }, [currentValue, onChange])\n\n // Handle side toggle\n const handleSideToggle = useCallback((side: 'top' | 'right' | 'bottom' | 'left') => {\n onChange({\n ...currentValue,\n sides: {\n ...currentValue.sides,\n [side]: !currentValue.sides[side],\n },\n })\n }, [currentValue, onChange])\n\n // Handle clear\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n // Check if all sides are enabled\n const allSidesEnabled = currentValue.sides.top &&\n currentValue.sides.right &&\n currentValue.sides.bottom &&\n currentValue.sides.left\n\n return (\n <div className=\"puck-field space-y-4\">\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n {label && (\n <Label className=\"text-sm font-medium text-foreground\">\n {label}\n </Label>\n )}\n {value && !readOnly && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={handleClear}\n className=\"text-muted-foreground hover:text-destructive\"\n title=\"Clear border\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n {/* Border preview */}\n <div\n className=\"h-16 bg-muted/50 rounded flex items-center justify-center\"\n style={{\n borderWidth: currentValue.style !== 'none' ? `${currentValue.width}px` : 0,\n borderStyle: currentValue.style,\n borderColor: currentValue.color?.hex || '#000000',\n borderRadius: `${currentValue.radius}px`,\n borderTopWidth: currentValue.sides.top && currentValue.style !== 'none' ? `${currentValue.width}px` : 0,\n borderRightWidth: currentValue.sides.right && currentValue.style !== 'none' ? `${currentValue.width}px` : 0,\n borderBottomWidth: currentValue.sides.bottom && currentValue.style !== 'none' ? `${currentValue.width}px` : 0,\n borderLeftWidth: currentValue.sides.left && currentValue.style !== 'none' ? `${currentValue.width}px` : 0,\n opacity: (currentValue.color?.opacity ?? 100) / 100,\n }}\n >\n <span className=\"text-xs text-muted-foreground\">Preview</span>\n </div>\n\n {/* Width and Style row */}\n <div className=\"grid grid-cols-2 gap-3\">\n {/* Width */}\n <div className=\"space-y-1\">\n <Label className=\"text-xs text-muted-foreground\">Width (px)</Label>\n <Input\n type=\"number\"\n min={0}\n max={20}\n value={currentValue.width}\n onChange={handleWidthChange}\n disabled={readOnly}\n className=\"h-8 text-sm font-mono\"\n />\n </div>\n\n {/* Style */}\n <div className=\"space-y-1\">\n <Label className=\"text-xs text-muted-foreground\">Style</Label>\n <Select\n value={currentValue.style}\n onValueChange={(val) => handleStyleChange(val as BorderStyle)}\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-8 text-sm\">\n <SelectValue placeholder=\"Select style\" />\n </SelectTrigger>\n <SelectContent>\n {BORDER_STYLES.map((style) => (\n <SelectItem key={style.value} value={style.value}>\n {style.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n {/* Radius */}\n <div className=\"space-y-1\">\n <Label className=\"text-xs text-muted-foreground\">Radius (px)</Label>\n <Input\n type=\"number\"\n min={0}\n max={100}\n value={currentValue.radius}\n onChange={handleRadiusChange}\n disabled={readOnly}\n className=\"h-8 text-sm font-mono\"\n />\n </div>\n\n {/* Color */}\n <div className=\"space-y-1\">\n <ColorPickerField\n value={currentValue.color}\n onChange={handleColorChange}\n label=\"Color\"\n readOnly={readOnly}\n showOpacity={true}\n presets={[\n { hex: '#000000', label: 'Black' },\n { hex: '#374151', label: 'Gray 700' },\n { hex: '#6b7280', label: 'Gray 500' },\n { hex: '#d1d5db', label: 'Gray 300' },\n { hex: '#e5e7eb', label: 'Gray 200' },\n { hex: '#3b82f6', label: 'Blue' },\n { hex: '#ef4444', label: 'Red' },\n ]}\n />\n </div>\n\n {/* Per-side toggles */}\n {!readOnly && (\n <div className=\"space-y-2\">\n <Label className=\"text-xs text-muted-foreground\">Sides</Label>\n <div className=\"flex items-center justify-center gap-2\">\n <Button\n type=\"button\"\n variant={currentValue.sides.top ? 'default' : 'outline'}\n size=\"icon\"\n onClick={() => handleSideToggle('top')}\n className={cn(\n \"h-8 w-8\",\n currentValue.sides.top && \"bg-primary hover:bg-primary/90\"\n )}\n title=\"Top border\"\n >\n <ArrowUp className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant={currentValue.sides.right ? 'default' : 'outline'}\n size=\"icon\"\n onClick={() => handleSideToggle('right')}\n className={cn(\n \"h-8 w-8\",\n currentValue.sides.right && \"bg-primary hover:bg-primary/90\"\n )}\n title=\"Right border\"\n >\n <ArrowRight className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant={currentValue.sides.bottom ? 'default' : 'outline'}\n size=\"icon\"\n onClick={() => handleSideToggle('bottom')}\n className={cn(\n \"h-8 w-8\",\n currentValue.sides.bottom && \"bg-primary hover:bg-primary/90\"\n )}\n title=\"Bottom border\"\n >\n <ArrowDown className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant={currentValue.sides.left ? 'default' : 'outline'}\n size=\"icon\"\n onClick={() => handleSideToggle('left')}\n className={cn(\n \"h-8 w-8\",\n currentValue.sides.left && \"bg-primary hover:bg-primary/90\"\n )}\n title=\"Left border\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n </div>\n <p className=\"text-[10px] text-muted-foreground text-center\">\n {allSidesEnabled ? 'All sides' : 'Custom sides'}\n </p>\n </div>\n )}\n </div>\n )\n}\n\nexport const BorderField = memo(BorderFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for border styling\n */\nexport function createBorderField(config: {\n label?: string\n}): CustomField<BorderValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <BorderField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n />\n ),\n }\n}\n","'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 } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport {\n X,\n AlignLeft,\n AlignCenter,\n AlignRight,\n MoveHorizontal,\n Container,\n SlidersHorizontal,\n} from 'lucide-react'\nimport type { WidthValue } from './shared'\nimport { Button } from '../components/ui/button'\nimport { Input } from '../components/ui/input'\nimport { Label } from '../components/ui/label'\nimport { cn } from '../lib/utils'\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// WidthField Component\n// =============================================================================\n\nfunction WidthFieldInner({\n value,\n onChange,\n label,\n readOnly,\n}: WidthFieldProps) {\n // Use default if no value\n const currentValue = value || DEFAULT_VALUE\n\n // Handle mode change\n const handleModeChange = useCallback((mode: WidthMode) => {\n if (mode === 'full') {\n onChange({\n ...currentValue,\n mode,\n alignment: 'center', // Full width typically centered\n })\n } else {\n onChange({\n ...currentValue,\n mode,\n })\n }\n }, [currentValue, onChange])\n\n // Handle max width change\n const handleMaxWidthChange = useCallback((maxWidth: number) => {\n onChange({\n ...currentValue,\n maxWidth,\n })\n }, [currentValue, onChange])\n\n // Handle unit change\n const handleUnitChange = useCallback((unit: WidthUnit) => {\n onChange({\n ...currentValue,\n unit,\n })\n }, [currentValue, onChange])\n\n // Handle alignment change\n const handleAlignmentChange = useCallback((alignment: ContentAlignment) => {\n onChange({\n ...currentValue,\n alignment,\n })\n }, [currentValue, onChange])\n\n // Handle preset selection\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 // Handle clear\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n // Mode button labels (shorter for space)\n const modeLabels: Record<WidthMode, string> = {\n full: 'Full',\n contained: 'Contain',\n custom: 'Custom',\n }\n\n return (\n <div className=\"puck-field space-y-3\">\n {/* Header with label and clear */}\n <div className=\"flex items-center justify-between\">\n {label && (\n <Label className=\"text-sm font-medium text-foreground\">\n {label}\n </Label>\n )}\n {value && !readOnly && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={handleClear}\n className=\"text-muted-foreground hover:text-destructive\"\n title=\"Reset to default\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n {/* Width Mode Selector - segmented control */}\n <div className=\"flex flex-wrap gap-1\">\n {([\n { mode: 'full' as WidthMode, icon: MoveHorizontal, title: 'Full width (100%)' },\n { mode: 'contained' as WidthMode, icon: Container, title: 'Contained (centered with max-width)' },\n { mode: 'custom' as WidthMode, icon: SlidersHorizontal, title: 'Custom width settings' },\n ]).map(({ mode, icon: Icon, title }) => {\n const isActive = currentValue.mode === mode\n return (\n <Button\n key={mode}\n type=\"button\"\n variant={isActive ? 'default' : 'secondary'}\n size=\"sm\"\n onClick={() => handleModeChange(mode)}\n disabled={readOnly}\n className={cn(\n \"text-xs gap-1\",\n isActive && \"bg-primary hover:bg-primary/90\"\n )}\n title={title}\n >\n <Icon className=\"h-3.5 w-3.5\" />\n {modeLabels[mode]}\n </Button>\n )\n })}\n </div>\n\n {/* Max Width Controls (shown for contained and custom modes) */}\n {currentValue.mode !== 'full' && (\n <div className=\"space-y-3 p-3 bg-muted/50 rounded-md\">\n {/* Preset Quick Selects */}\n <div className=\"space-y-1.5\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">Presets</Label>\n <div className=\"flex flex-wrap gap-1\">\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 variant={isActive ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => handlePresetSelect(preset.value)}\n disabled={readOnly}\n className={cn(\n \"text-xs h-7 px-3\",\n isActive && \"bg-primary hover:bg-primary/90\"\n )}\n >\n {preset.label}\n </Button>\n )\n })}\n </div>\n </div>\n\n {/* Custom Width Input */}\n <div className=\"space-y-1.5\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">Max Width</Label>\n <div className=\"flex items-center flex-wrap gap-2\">\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 className=\"h-8 text-sm font-mono flex-1 min-w-[80px]\"\n />\n {/* Unit Selector */}\n <div className=\"flex flex-shrink-0 gap-1\">\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 variant={isActive ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => handleUnitChange(unit)}\n disabled={readOnly}\n className={cn(\n \"text-xs font-mono h-8 px-2\",\n isActive && \"bg-primary hover:bg-primary/90\"\n )}\n >\n {unit}\n </Button>\n )\n })}\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* Alignment Controls */}\n <div className=\"flex items-center justify-between flex-wrap gap-2\">\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-xs text-muted-foreground flex-shrink-0\">Align:</Label>\n <div className=\"flex gap-1\">\n {([\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 ]).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 variant={isActive ? 'default' : 'secondary'}\n size=\"icon\"\n onClick={() => handleAlignmentChange(alignment)}\n disabled={isDisabled}\n className={cn(\n \"h-8 w-8\",\n isActive && \"bg-primary hover:bg-primary/90\"\n )}\n title={title}\n >\n <Icon className=\"h-3.5 w-3.5\" />\n </Button>\n )\n })}\n </div>\n </div>\n {/* Current value summary */}\n <span className=\"text-xs text-muted-foreground font-mono\">\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","'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n onCheckedChange?: (checked: boolean) => void\n}\n\nconst Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n ({ className, onCheckedChange, onChange, ...props }, ref) => {\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e)\n onCheckedChange?.(e.target.checked)\n }\n\n return (\n <input\n type=\"checkbox\"\n className={cn(\n 'h-4 w-4 shrink-0 rounded border border-primary ring-offset-background',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'accent-primary cursor-pointer',\n className\n )}\n ref={ref}\n onChange={handleChange}\n {...props}\n />\n )\n }\n)\nCheckbox.displayName = 'Checkbox'\n\nexport { Checkbox }\n","'use client'\n\n/**\n * DimensionsField - Unified Puck field for width and height constraints\n *\n * This component provides:\n * - Width mode selector (Full, Contained, Custom)\n * - Min/max width controls\n * - Min/max height controls\n * - Content alignment (left, center, right)\n * - Progressive disclosure (simple vs advanced mode)\n * - Preset quick-select buttons for common widths\n */\n\nimport React, { useCallback, memo, useState } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport {\n X,\n AlignStartHorizontal,\n AlignCenterHorizontal,\n AlignEndHorizontal,\n MoveHorizontal,\n Square,\n SlidersHorizontal,\n ChevronDown,\n ChevronUp,\n} from 'lucide-react'\nimport type {\n DimensionsValue,\n DimensionConstraint,\n DimensionsUnit,\n DimensionsMode,\n ContentAlignment,\n} from './shared'\nimport { getDimensionsSummary } from './shared'\nimport { Button } from '../components/ui/button'\nimport { Input } from '../components/ui/input'\nimport { Label } from '../components/ui/label'\nimport { Checkbox } from '../components/ui/checkbox'\nimport { cn } from '../lib/utils'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface DimensionsFieldProps {\n value: DimensionsValue | null\n onChange: (value: DimensionsValue | null) => void\n label?: string\n readOnly?: boolean\n /** Show height controls (default: true) */\n showHeightControls?: boolean\n /** Show min controls in advanced mode (default: true) */\n showMinControls?: boolean\n /** Start with advanced mode expanded (default: false) */\n defaultAdvancedMode?: boolean\n}\n\n// =============================================================================\n// Default Values\n// =============================================================================\n\nconst DEFAULT_VALUE: DimensionsValue = {\n mode: 'contained',\n alignment: 'center',\n maxWidth: {\n value: 1200,\n unit: 'px',\n enabled: true,\n },\n advancedMode: false,\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\nconst WIDTH_UNITS: DimensionsUnit[] = ['px', 'rem', '%', 'vw']\nconst HEIGHT_UNITS: DimensionsUnit[] = ['px', 'rem', '%', 'vh']\n\n// =============================================================================\n// ConstraintInput Sub-component\n// =============================================================================\n\ninterface ConstraintInputProps {\n label: string\n constraint: DimensionConstraint | null | undefined\n onChange: (constraint: DimensionConstraint) => void\n onToggle: (enabled: boolean) => void\n units: DimensionsUnit[]\n disabled?: boolean\n placeholder?: string\n}\n\nfunction ConstraintInput({\n label,\n constraint,\n onChange,\n onToggle,\n units,\n disabled,\n placeholder = '0',\n}: ConstraintInputProps) {\n const isEnabled = constraint?.enabled ?? false\n const value = constraint?.value ?? 0\n const unit = constraint?.unit ?? 'px'\n\n const handleValueChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = parseInt(e.target.value, 10) || 0\n onChange({\n value: newValue,\n unit,\n enabled: isEnabled,\n })\n },\n [unit, isEnabled, onChange]\n )\n\n const handleUnitChange = useCallback(\n (newUnit: DimensionsUnit) => {\n onChange({\n value,\n unit: newUnit,\n enabled: isEnabled,\n })\n },\n [value, isEnabled, onChange]\n )\n\n const handleToggle = useCallback(\n (checked: boolean) => {\n onToggle(checked)\n },\n [onToggle]\n )\n\n return (\n <div className=\"flex items-center gap-2\">\n <label className=\"flex items-center gap-2 cursor-pointer min-w-[90px]\">\n <Checkbox\n checked={isEnabled}\n onCheckedChange={handleToggle}\n disabled={disabled}\n />\n <span className=\"text-xs text-muted-foreground\">{label}</span>\n </label>\n\n <Input\n type=\"number\"\n min={0}\n value={isEnabled ? value : ''}\n onChange={handleValueChange}\n disabled={disabled || !isEnabled}\n placeholder={placeholder}\n className=\"h-7 text-xs font-mono flex-1 min-w-[60px]\"\n />\n\n <div className=\"flex gap-0.5 flex-shrink-0\">\n {units.map((u) => (\n <Button\n key={u}\n type=\"button\"\n variant={unit === u && isEnabled ? 'default' : 'ghost'}\n size=\"sm\"\n onClick={() => handleUnitChange(u)}\n disabled={disabled || !isEnabled}\n className={cn(\n 'text-[10px] font-mono h-7 px-2.5',\n unit === u && isEnabled && 'bg-primary hover:bg-primary/90'\n )}\n >\n {u}\n </Button>\n ))}\n </div>\n </div>\n )\n}\n\n// =============================================================================\n// DimensionsField Component\n// =============================================================================\n\nfunction DimensionsFieldInner({\n value,\n onChange,\n label,\n readOnly,\n showHeightControls = true,\n showMinControls = true,\n defaultAdvancedMode = false,\n}: DimensionsFieldProps) {\n // Use default if no value\n const currentValue = value || DEFAULT_VALUE\n\n // Local state for advanced mode toggle\n const [advancedMode, setAdvancedMode] = useState(\n currentValue.advancedMode ?? defaultAdvancedMode\n )\n\n // Handle mode change\n const handleModeChange = useCallback(\n (mode: DimensionsMode) => {\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 },\n [currentValue, onChange]\n )\n\n // Handle max width value change\n const handleMaxWidthChange = useCallback(\n (constraint: DimensionConstraint) => {\n onChange({\n ...currentValue,\n maxWidth: constraint,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle max width toggle\n const handleMaxWidthToggle = useCallback(\n (enabled: boolean) => {\n onChange({\n ...currentValue,\n maxWidth: {\n ...currentValue.maxWidth,\n enabled,\n },\n })\n },\n [currentValue, onChange]\n )\n\n // Handle min width change\n const handleMinWidthChange = useCallback(\n (constraint: DimensionConstraint) => {\n onChange({\n ...currentValue,\n minWidth: constraint,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle min width toggle\n const handleMinWidthToggle = useCallback(\n (enabled: boolean) => {\n onChange({\n ...currentValue,\n minWidth: enabled\n ? { value: currentValue.minWidth?.value ?? 0, unit: currentValue.minWidth?.unit ?? 'px', enabled: true }\n : { ...currentValue.minWidth!, enabled: false },\n })\n },\n [currentValue, onChange]\n )\n\n // Handle min height change\n const handleMinHeightChange = useCallback(\n (constraint: DimensionConstraint) => {\n onChange({\n ...currentValue,\n minHeight: constraint,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle min height toggle\n const handleMinHeightToggle = useCallback(\n (enabled: boolean) => {\n onChange({\n ...currentValue,\n minHeight: enabled\n ? { value: currentValue.minHeight?.value ?? 0, unit: currentValue.minHeight?.unit ?? 'px', enabled: true }\n : currentValue.minHeight ? { ...currentValue.minHeight, enabled: false } : null,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle max height change\n const handleMaxHeightChange = useCallback(\n (constraint: DimensionConstraint) => {\n onChange({\n ...currentValue,\n maxHeight: constraint,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle max height toggle\n const handleMaxHeightToggle = useCallback(\n (enabled: boolean) => {\n onChange({\n ...currentValue,\n maxHeight: enabled\n ? { value: currentValue.maxHeight?.value ?? 0, unit: currentValue.maxHeight?.unit ?? 'px', enabled: true }\n : currentValue.maxHeight ? { ...currentValue.maxHeight, enabled: false } : null,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle alignment change\n const handleAlignmentChange = useCallback(\n (alignment: ContentAlignment) => {\n onChange({\n ...currentValue,\n alignment,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle preset selection\n const handlePresetSelect = useCallback(\n (presetValue: number) => {\n onChange({\n ...currentValue,\n mode: 'contained',\n maxWidth: {\n value: presetValue,\n unit: 'px',\n enabled: true,\n },\n })\n },\n [currentValue, onChange]\n )\n\n // Handle clear\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n // Handle advanced mode toggle\n const handleAdvancedToggle = useCallback(() => {\n const newAdvancedMode = !advancedMode\n setAdvancedMode(newAdvancedMode)\n // Persist to value - must be outside setState callback to avoid setState during render\n onChange({\n ...currentValue,\n advancedMode: newAdvancedMode,\n })\n }, [advancedMode, currentValue, onChange])\n\n // Mode labels\n const modeConfig = [\n { mode: 'full' as DimensionsMode, icon: MoveHorizontal, label: 'Full', title: 'Full width (100%)' },\n { mode: 'contained' as DimensionsMode, icon: Square, label: 'Contain', title: 'Contained (centered with max-width)' },\n { mode: 'custom' as DimensionsMode, icon: SlidersHorizontal, label: 'Custom', title: 'Custom width settings' },\n ]\n\n const alignmentConfig = [\n { alignment: 'left' as ContentAlignment, icon: AlignStartHorizontal, title: 'Align left' },\n { alignment: 'center' as ContentAlignment, icon: AlignCenterHorizontal, title: 'Align center' },\n { alignment: 'right' as ContentAlignment, icon: AlignEndHorizontal, title: 'Align right' },\n ]\n\n const showWidthControls = currentValue.mode !== 'full'\n const hasHeightConstraints = showHeightControls && (advancedMode || currentValue.minHeight?.enabled || currentValue.maxHeight?.enabled)\n\n return (\n <div className=\"puck-field space-y-3\">\n {/* Header with label and clear */}\n <div className=\"flex items-center justify-between\">\n {label && (\n <Label className=\"text-sm font-medium text-foreground\">{label}</Label>\n )}\n {value && !readOnly && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={handleClear}\n className=\"text-muted-foreground hover:text-destructive\"\n title=\"Reset to default\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n {/* Width Mode Selector */}\n <div className=\"flex flex-wrap gap-1\">\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 variant={isActive ? 'default' : 'secondary'}\n size=\"sm\"\n onClick={() => handleModeChange(mode)}\n disabled={readOnly}\n className={cn('text-xs gap-1', isActive && 'bg-primary hover:bg-primary/90')}\n title={title}\n >\n <Icon className=\"h-3.5 w-3.5\" />\n {modeLabel}\n </Button>\n )\n })}\n </div>\n\n {/* Width Controls */}\n {showWidthControls && (\n <div className=\"space-y-3 p-3 bg-muted/50 rounded-md\">\n {/* Preset Quick Selects */}\n <div className=\"space-y-1.5\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Presets\n </Label>\n <div className=\"flex flex-wrap gap-1\">\n {WIDTH_PRESETS.map((preset) => {\n const isActive =\n currentValue.maxWidth.value === preset.value &&\n currentValue.maxWidth.unit === 'px' &&\n currentValue.maxWidth.enabled\n return (\n <Button\n key={preset.value}\n type=\"button\"\n variant={isActive ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => handlePresetSelect(preset.value)}\n disabled={readOnly}\n className={cn('text-xs h-7 px-3', isActive && 'bg-primary hover:bg-primary/90')}\n >\n {preset.label}\n </Button>\n )\n })}\n </div>\n </div>\n\n {/* Simple Mode: Just Max Width */}\n {!advancedMode && (\n <div className=\"space-y-1.5\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Max Width\n </Label>\n <div className=\"flex items-center flex-wrap gap-2\">\n <Input\n type=\"number\"\n min={0}\n value={currentValue.maxWidth.value}\n onChange={(e) =>\n handleMaxWidthChange({\n ...currentValue.maxWidth,\n value: parseInt(e.target.value, 10) || 0,\n })\n }\n disabled={readOnly}\n className=\"h-8 text-sm font-mono flex-1 min-w-[80px]\"\n />\n <div className=\"flex flex-shrink-0 gap-1\">\n {WIDTH_UNITS.map((unit) => {\n const isActive = currentValue.maxWidth.unit === unit\n return (\n <Button\n key={unit}\n type=\"button\"\n variant={isActive ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() =>\n handleMaxWidthChange({\n ...currentValue.maxWidth,\n unit,\n })\n }\n disabled={readOnly}\n className={cn(\n 'text-xs font-mono h-8 px-3',\n isActive && 'bg-primary hover:bg-primary/90'\n )}\n >\n {unit}\n </Button>\n )\n })}\n </div>\n </div>\n </div>\n )}\n\n {/* Advanced Mode */}\n {advancedMode && (\n <div className=\"space-y-4\">\n {/* Width Constraints */}\n <div className=\"space-y-2\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Width Constraints\n </Label>\n <div className=\"space-y-2 pl-1\">\n {showMinControls && (\n <ConstraintInput\n label=\"Min Width\"\n constraint={currentValue.minWidth}\n onChange={handleMinWidthChange}\n onToggle={handleMinWidthToggle}\n units={WIDTH_UNITS}\n disabled={readOnly}\n />\n )}\n <ConstraintInput\n label=\"Max Width\"\n constraint={currentValue.maxWidth}\n onChange={handleMaxWidthChange}\n onToggle={handleMaxWidthToggle}\n units={WIDTH_UNITS}\n disabled={readOnly}\n />\n </div>\n </div>\n\n {/* Height Constraints */}\n {showHeightControls && (\n <div className=\"space-y-2\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Height Constraints\n </Label>\n <div className=\"space-y-2 pl-1\">\n {showMinControls && (\n <ConstraintInput\n label=\"Min Height\"\n constraint={currentValue.minHeight}\n onChange={handleMinHeightChange}\n onToggle={handleMinHeightToggle}\n units={HEIGHT_UNITS}\n disabled={readOnly}\n />\n )}\n <ConstraintInput\n label=\"Max Height\"\n constraint={currentValue.maxHeight}\n onChange={handleMaxHeightChange}\n onToggle={handleMaxHeightToggle}\n units={HEIGHT_UNITS}\n disabled={readOnly}\n />\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Height Constraints for Full Mode (still allow height constraints) */}\n {!showWidthControls && showHeightControls && advancedMode && (\n <div className=\"space-y-2 p-3 bg-muted/50 rounded-md\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Height Constraints\n </Label>\n <div className=\"space-y-2 pl-1\">\n {showMinControls && (\n <ConstraintInput\n label=\"Min Height\"\n constraint={currentValue.minHeight}\n onChange={handleMinHeightChange}\n onToggle={handleMinHeightToggle}\n units={HEIGHT_UNITS}\n disabled={readOnly}\n />\n )}\n <ConstraintInput\n label=\"Max Height\"\n constraint={currentValue.maxHeight}\n onChange={handleMaxHeightChange}\n onToggle={handleMaxHeightToggle}\n units={HEIGHT_UNITS}\n disabled={readOnly}\n />\n </div>\n </div>\n )}\n\n {/* Footer: Alignment + Summary + Advanced Toggle */}\n <div className=\"flex items-center justify-between flex-wrap gap-2\">\n {/* Alignment */}\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-xs text-muted-foreground flex-shrink-0\">Align:</Label>\n <div className=\"flex gap-1\">\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 variant={isActive ? 'default' : 'secondary'}\n size=\"icon\"\n onClick={() => handleAlignmentChange(alignment)}\n disabled={isDisabled}\n className={cn('h-8 w-8', isActive && 'bg-primary hover:bg-primary/90')}\n title={title}\n >\n <Icon className=\"h-3.5 w-3.5\" />\n </Button>\n )\n })}\n </div>\n </div>\n\n {/* Value Summary */}\n <span className=\"text-xs text-muted-foreground font-mono\">\n {getDimensionsSummary(currentValue)}\n </span>\n </div>\n\n {/* Advanced Toggle */}\n {(showHeightControls || showMinControls) && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleAdvancedToggle}\n disabled={readOnly}\n className=\"w-full text-xs text-muted-foreground hover:text-foreground\"\n >\n {advancedMode ? (\n <>\n <ChevronUp className=\"h-3.5 w-3.5 mr-1\" />\n Hide Advanced\n </>\n ) : (\n <>\n <ChevronDown className=\"h-3.5 w-3.5 mr-1\" />\n Show Advanced\n </>\n )}\n </Button>\n )}\n </div>\n )\n}\n\nexport const DimensionsField = memo(DimensionsFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\ninterface CreateDimensionsFieldConfig {\n label?: string\n /** Show height controls (default: true) */\n showHeightControls?: boolean\n /** Show min controls in advanced mode (default: true) */\n showMinControls?: boolean\n /** Start with advanced mode expanded (default: false) */\n defaultAdvancedMode?: boolean\n}\n\n/**\n * Creates a Puck field configuration for dimensions control\n */\nexport function createDimensionsField(\n config: CreateDimensionsFieldConfig = {}\n): CustomField<DimensionsValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <DimensionsField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n showHeightControls={config.showHeightControls}\n showMinControls={config.showMinControls}\n defaultAdvancedMode={config.defaultAdvancedMode}\n />\n ),\n }\n}\n","'use client'\n\n/**\n * LockedField - Custom Puck field wrapper that prevents accidental edits\n *\n * Wraps a field with a lock/unlock toggle. When locked, the field is read-only.\n * Click the lock icon to toggle editing.\n *\n * Exports:\n * - LockedTextField: A text input with lock/unlock functionality\n * - LockedRadioField: A radio button group with lock/unlock functionality\n * - createLockedTextField: Factory for Puck field configuration\n * - createLockedRadioField: Factory for Puck field configuration\n */\n\nimport React, { useState } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport { Lock, Unlock } from 'lucide-react'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface LockedTextFieldProps {\n value: string\n onChange: (value: string) => void\n label?: string\n placeholder?: string\n warningMessage?: string\n}\n\ninterface LockedRadioFieldProps {\n value: boolean\n onChange: (value: boolean) => void\n label?: string\n options: { label: string; value: boolean }[]\n warningMessage?: string\n}\n\n// =============================================================================\n// LockedTextField Component\n// =============================================================================\n\nexport function LockedTextField({\n value,\n onChange,\n label,\n placeholder,\n warningMessage,\n}: LockedTextFieldProps) {\n const [isLocked, setIsLocked] = useState(true)\n\n return (\n <div className=\"puck-field\">\n {/* Field header with label and lock toggle */}\n <div className=\"puck-field-header\" style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: '8px' }}>\n {label && (\n <label style={{ fontSize: '14px', fontWeight: 500, color: 'var(--puck-color-grey-04)' }}>{label}</label>\n )}\n <button\n type=\"button\"\n onClick={() => setIsLocked(!isLocked)}\n style={{\n background: 'none',\n border: 'none',\n padding: '4px',\n cursor: 'pointer',\n color: isLocked ? 'var(--puck-color-grey-05)' : 'var(--puck-color-azure-04)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '4px',\n transition: 'all 0.15s ease',\n }}\n title={isLocked ? 'Click to unlock' : 'Click to lock'}\n >\n {isLocked ? (\n <Lock size={14} />\n ) : (\n <Unlock size={14} />\n )}\n </button>\n </div>\n\n {/* Input field - matches Puck's text input style */}\n <div style={{ position: 'relative' }}>\n <input\n type=\"text\"\n value={value || ''}\n onChange={(e) => onChange(e.target.value)}\n disabled={isLocked}\n placeholder={placeholder}\n style={{\n width: '100%',\n padding: '8px 12px',\n paddingRight: isLocked ? '32px' : '12px',\n fontSize: '14px',\n border: '1px solid var(--puck-color-grey-09)',\n borderRadius: '6px',\n background: isLocked ? 'var(--puck-color-grey-11)' : 'var(--puck-color-white)',\n color: isLocked ? 'var(--puck-color-grey-05)' : 'var(--puck-color-grey-04)',\n cursor: isLocked ? 'not-allowed' : 'text',\n outline: 'none',\n transition: 'all 0.15s ease',\n }}\n />\n {isLocked && (\n <Lock\n size={14}\n style={{\n position: 'absolute',\n right: '10px',\n top: '50%',\n transform: 'translateY(-50%)',\n color: 'var(--puck-color-grey-07)',\n }}\n />\n )}\n </div>\n\n {/* Warning message when unlocked */}\n {!isLocked && warningMessage && (\n <p style={{\n marginTop: '6px',\n fontSize: '12px',\n color: 'var(--puck-color-grey-05)',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}>\n <span style={{ color: 'var(--puck-color-rose-07)' }}>⚠</span>\n {warningMessage}\n </p>\n )}\n </div>\n )\n}\n\n// =============================================================================\n// LockedRadioField Component\n// =============================================================================\n\nexport function LockedRadioField({\n value,\n onChange,\n label,\n options,\n warningMessage,\n}: LockedRadioFieldProps) {\n const [isLocked, setIsLocked] = useState(true)\n\n return (\n <div className=\"puck-field\">\n {/* Field header with label and lock toggle */}\n <div className=\"puck-field-header\" style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: '8px' }}>\n {label && (\n <label style={{ fontSize: '14px', fontWeight: 500, color: 'var(--puck-color-grey-04)' }}>{label}</label>\n )}\n <button\n type=\"button\"\n onClick={() => setIsLocked(!isLocked)}\n style={{\n background: 'none',\n border: 'none',\n padding: '4px',\n cursor: 'pointer',\n color: isLocked ? 'var(--puck-color-grey-05)' : 'var(--puck-color-azure-04)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '4px',\n transition: 'all 0.15s ease',\n }}\n title={isLocked ? 'Click to unlock' : 'Click to lock'}\n >\n {isLocked ? (\n <Lock size={14} />\n ) : (\n <Unlock size={14} />\n )}\n </button>\n </div>\n\n {/* Segmented button group - matches Puck's radio style */}\n <div\n style={{\n display: 'flex',\n border: '1px solid var(--puck-color-grey-09)',\n borderRadius: '6px',\n overflow: 'hidden',\n opacity: isLocked ? 0.6 : 1,\n pointerEvents: isLocked ? 'none' : 'auto',\n }}\n >\n {options.map((option, index) => (\n <button\n key={String(option.value)}\n type=\"button\"\n onClick={() => onChange(option.value)}\n disabled={isLocked}\n style={{\n flex: 1,\n padding: '8px 16px',\n fontSize: '14px',\n fontWeight: 500,\n border: 'none',\n borderRight: index < options.length - 1 ? '1px solid var(--puck-color-grey-09)' : 'none',\n background: value === option.value\n ? 'var(--puck-color-azure-12)'\n : 'var(--puck-color-white)',\n color: value === option.value\n ? 'var(--puck-color-azure-04)'\n : 'var(--puck-color-grey-05)',\n cursor: isLocked ? 'not-allowed' : 'pointer',\n transition: 'all 0.15s ease',\n }}\n >\n {option.label}\n </button>\n ))}\n </div>\n\n {/* Warning message when unlocked */}\n {!isLocked && warningMessage && (\n <p style={{\n marginTop: '6px',\n fontSize: '12px',\n color: 'var(--puck-color-grey-05)',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}>\n <span style={{ color: 'var(--puck-color-rose-07)' }}>⚠</span>\n {warningMessage}\n </p>\n )}\n </div>\n )\n}\n\n// =============================================================================\n// Field Configuration Factories\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for a locked text input\n */\nexport function createLockedTextField(config: {\n label?: string\n placeholder?: string\n warningMessage?: string\n}): CustomField<string> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange }) => (\n <LockedTextField\n value={value}\n onChange={onChange}\n label={config.label}\n placeholder={config.placeholder}\n warningMessage={config.warningMessage}\n />\n ),\n }\n}\n\n/**\n * Creates a Puck field configuration for a locked radio button group\n */\nexport function createLockedRadioField(config: {\n label?: string\n options: { label: string; value: boolean }[]\n warningMessage?: string\n}): CustomField<boolean> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange }) => (\n <LockedRadioField\n value={value}\n onChange={onChange}\n label={config.label}\n options={config.options}\n warningMessage={config.warningMessage}\n />\n ),\n }\n}\n\n// =============================================================================\n// Pre-built Field Definitions\n// =============================================================================\n\n/**\n * Pre-built locked slug field - prevents accidental URL changes\n *\n * Use in Puck root config:\n * ```tsx\n * root: {\n * fields: {\n * slug: lockedSlugField,\n * }\n * }\n * ```\n */\nexport const lockedSlugField: CustomField<string> = createLockedTextField({\n label: 'Slug',\n placeholder: 'page-slug',\n warningMessage: 'Changing may break existing links',\n})\n\n/**\n * Pre-built locked isHomepage field - prevents accidental homepage changes\n *\n * Use in Puck root config:\n * ```tsx\n * root: {\n * fields: {\n * isHomepage: lockedHomepageField,\n * }\n * }\n * ```\n */\nexport const lockedHomepageField: CustomField<boolean> = createLockedRadioField({\n label: 'Homepage',\n options: [\n { label: 'No', value: false },\n { label: 'Yes', value: true },\n ],\n warningMessage: 'Only one page can be the homepage',\n})\n","'use client'\n\n/**\n * AlignmentField - Icon toggle buttons for text/content alignment\n *\n * Replaces select dropdowns with intuitive icon toggles for\n * left, center, right alignment.\n */\n\nimport React, { useCallback, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport {\n AlignLeft,\n AlignCenter,\n AlignRight,\n X,\n} from 'lucide-react'\nimport { Button } from '../components/ui/button'\nimport { Label } from '../components/ui/label'\nimport { cn } from '../lib/utils'\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type Alignment = 'left' | 'center' | 'right'\n\ninterface AlignmentFieldProps {\n value: Alignment | null\n onChange: (value: Alignment | null) => void\n label?: string\n readOnly?: boolean\n /** Default value when cleared or initially null */\n defaultValue?: Alignment\n}\n\n// =============================================================================\n// AlignmentField Component\n// =============================================================================\n\nfunction AlignmentFieldInner({\n value,\n onChange,\n label = 'Alignment',\n readOnly,\n defaultValue = 'left',\n}: AlignmentFieldProps) {\n const currentValue = value ?? defaultValue\n\n const handleChange = useCallback((alignment: Alignment) => {\n onChange(alignment)\n }, [onChange])\n\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n const alignments = [\n { value: 'left' as Alignment, icon: AlignLeft, title: 'Align left' },\n { value: 'center' as Alignment, icon: AlignCenter, title: 'Align center' },\n { value: 'right' as Alignment, icon: AlignRight, title: 'Align right' },\n ]\n\n return (\n <div className=\"puck-field space-y-2\">\n {/* Header with label and clear */}\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-sm font-medium text-foreground\">\n {label}\n </Label>\n {value && !readOnly && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={handleClear}\n className=\"text-muted-foreground hover:text-destructive\"\n title=\"Reset to default\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n {/* Alignment toggle buttons */}\n <div className=\"flex gap-1\">\n {alignments.map(({ value: alignment, icon: Icon, title }) => {\n const isActive = currentValue === alignment\n return (\n <Button\n key={alignment}\n type=\"button\"\n variant={isActive ? 'default' : 'secondary'}\n size=\"icon\"\n onClick={() => handleChange(alignment)}\n disabled={readOnly}\n className={cn(\n \"h-8 w-8\",\n isActive && \"bg-primary hover:bg-primary/90\"\n )}\n title={title}\n >\n <Icon className=\"h-4 w-4\" />\n </Button>\n )\n })}\n </div>\n </div>\n )\n}\n\nexport const AlignmentField = memo(AlignmentFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\ninterface CreateAlignmentFieldConfig {\n label?: string\n defaultValue?: Alignment\n}\n\n/**\n * Creates a Puck field configuration for alignment control\n *\n * @example\n * ```ts\n * fields: {\n * alignment: createAlignmentField({ label: 'Text Alignment' }),\n * }\n * ```\n */\nexport function createAlignmentField(\n config: CreateAlignmentFieldConfig = {}\n): CustomField<Alignment | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <AlignmentField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n defaultValue={config.defaultValue}\n />\n ),\n }\n}\n","'use client'\n\n/**\n * FlexAlignmentField - Icon toggle buttons for flexbox alignment properties\n *\n * Provides two specialized fields:\n * - JustifyContentField: Controls main-axis distribution (horizontal in row, vertical in column)\n * - AlignItemsField: Controls cross-axis alignment (vertical in row, horizontal in column)\n */\n\nimport React, { useCallback, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport {\n AlignLeft,\n AlignCenter,\n AlignRight,\n AlignHorizontalDistributeCenter,\n GripHorizontal,\n AlignStartVertical,\n AlignCenterVertical,\n AlignEndVertical,\n MoveVertical,\n X,\n} from 'lucide-react'\nimport { Button } from '../components/ui/button'\nimport { Label } from '../components/ui/label'\nimport { cn } from '../lib/utils'\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type JustifyContent = 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'\nexport type AlignItems = 'flex-start' | 'center' | 'flex-end' | 'stretch'\n\ninterface JustifyContentFieldProps {\n value: JustifyContent | null\n onChange: (value: JustifyContent | null) => void\n label?: string\n readOnly?: boolean\n defaultValue?: JustifyContent\n}\n\ninterface AlignItemsFieldProps {\n value: AlignItems | null\n onChange: (value: AlignItems | null) => void\n label?: string\n readOnly?: boolean\n defaultValue?: AlignItems\n}\n\n// =============================================================================\n// JustifyContentField Component\n// =============================================================================\n\nfunction JustifyContentFieldInner({\n value,\n onChange,\n label = 'Justify Content',\n readOnly,\n defaultValue = 'flex-start',\n}: JustifyContentFieldProps) {\n const currentValue = value ?? defaultValue\n\n const handleChange = useCallback((justifyContent: JustifyContent) => {\n onChange(justifyContent)\n }, [onChange])\n\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n const options = [\n { value: 'flex-start' as JustifyContent, icon: AlignLeft, title: 'Start' },\n { value: 'center' as JustifyContent, icon: AlignCenter, title: 'Center' },\n { value: 'flex-end' as JustifyContent, icon: AlignRight, title: 'End' },\n { value: 'space-between' as JustifyContent, icon: AlignHorizontalDistributeCenter, title: 'Space Between' },\n { value: 'space-around' as JustifyContent, icon: GripHorizontal, title: 'Space Around' },\n ]\n\n return (\n <div className=\"puck-field space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-sm font-medium text-foreground\">\n {label}\n </Label>\n {value && !readOnly && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={handleClear}\n className=\"text-muted-foreground hover:text-destructive\"\n title=\"Reset to default\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n <div className=\"flex gap-1\">\n {options.map(({ value: optionValue, icon: Icon, title }) => {\n const isActive = currentValue === optionValue\n return (\n <Button\n key={optionValue}\n type=\"button\"\n variant={isActive ? 'default' : 'secondary'}\n size=\"icon\"\n onClick={() => handleChange(optionValue)}\n disabled={readOnly}\n className={cn(\n \"h-8 w-8\",\n isActive && \"bg-primary hover:bg-primary/90\"\n )}\n title={title}\n >\n <Icon className=\"h-4 w-4\" />\n </Button>\n )\n })}\n </div>\n </div>\n )\n}\n\nexport const JustifyContentField = memo(JustifyContentFieldInner)\n\n// =============================================================================\n// AlignItemsField Component\n// =============================================================================\n\nfunction AlignItemsFieldInner({\n value,\n onChange,\n label = 'Align Items',\n readOnly,\n defaultValue = 'center',\n}: AlignItemsFieldProps) {\n const currentValue = value ?? defaultValue\n\n const handleChange = useCallback((alignItems: AlignItems) => {\n onChange(alignItems)\n }, [onChange])\n\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n const options = [\n { value: 'flex-start' as AlignItems, icon: AlignStartVertical, title: 'Start' },\n { value: 'center' as AlignItems, icon: AlignCenterVertical, title: 'Center' },\n { value: 'flex-end' as AlignItems, icon: AlignEndVertical, title: 'End' },\n { value: 'stretch' as AlignItems, icon: MoveVertical, title: 'Stretch' },\n ]\n\n return (\n <div className=\"puck-field space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-sm font-medium text-foreground\">\n {label}\n </Label>\n {value && !readOnly && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={handleClear}\n className=\"text-muted-foreground hover:text-destructive\"\n title=\"Reset to default\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n <div className=\"flex gap-1\">\n {options.map(({ value: optionValue, icon: Icon, title }) => {\n const isActive = currentValue === optionValue\n return (\n <Button\n key={optionValue}\n type=\"button\"\n variant={isActive ? 'default' : 'secondary'}\n size=\"icon\"\n onClick={() => handleChange(optionValue)}\n disabled={readOnly}\n className={cn(\n \"h-8 w-8\",\n isActive && \"bg-primary hover:bg-primary/90\"\n )}\n title={title}\n >\n <Icon className=\"h-4 w-4\" />\n </Button>\n )\n })}\n </div>\n </div>\n )\n}\n\nexport const AlignItemsField = memo(AlignItemsFieldInner)\n\n// =============================================================================\n// Field Configuration Factories\n// =============================================================================\n\ninterface CreateJustifyContentFieldConfig {\n label?: string\n defaultValue?: JustifyContent\n}\n\ninterface CreateAlignItemsFieldConfig {\n label?: string\n defaultValue?: AlignItems\n}\n\n/**\n * Creates a Puck field configuration for flex justify-content control\n *\n * @example\n * ```ts\n * fields: {\n * justifyContent: createJustifyContentField({ label: 'Justify Content' }),\n * }\n * ```\n */\nexport function createJustifyContentField(\n config: CreateJustifyContentFieldConfig = {}\n): CustomField<JustifyContent | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <JustifyContentField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n defaultValue={config.defaultValue}\n />\n ),\n }\n}\n\n/**\n * Creates a Puck field configuration for flex align-items control\n *\n * @example\n * ```ts\n * fields: {\n * alignItems: createAlignItemsField({ label: 'Align Items' }),\n * }\n * ```\n */\nexport function createAlignItemsField(\n config: CreateAlignItemsFieldConfig = {}\n): CustomField<AlignItems | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <AlignItemsField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n defaultValue={config.defaultValue}\n />\n ),\n }\n}\n","'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 } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport {\n AlignStartVertical,\n AlignCenterVertical,\n AlignEndVertical,\n X,\n} from 'lucide-react'\nimport { Button } from '../components/ui/button'\nimport { Label } from '../components/ui/label'\nimport { cn } from '../lib/utils'\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// 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 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-sm font-medium text-foreground\">\n {label}\n </Label>\n {value && !readOnly && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={handleClear}\n className=\"text-muted-foreground hover:text-destructive\"\n title=\"Reset to default\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n <div className=\"flex gap-1\">\n {options.map(({ value: optionValue, icon: Icon, title }) => {\n const isActive = currentValue === optionValue\n return (\n <Button\n key={optionValue}\n type=\"button\"\n variant={isActive ? 'default' : 'secondary'}\n size=\"icon\"\n onClick={() => handleChange(optionValue)}\n disabled={readOnly}\n className={cn(\n \"h-8 w-8\",\n isActive && \"bg-primary hover:bg-primary/90\"\n )}\n title={title}\n >\n <Icon className=\"h-4 w-4\" />\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","'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 } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport { X } from 'lucide-react'\nimport { Button } from '../components/ui/button'\nimport { Input } from '../components/ui/input'\nimport { Label } from '../components/ui/label'\nimport { cn } from '../lib/utils'\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type SizeMode = 'sm' | 'default' | 'lg' | 'custom'\nexport type SizeUnit = 'px' | 'rem'\n\nexport interface SizeValue {\n mode: SizeMode\n /** Height in units (only used when mode === 'custom') */\n height?: number\n /** Horizontal padding in units (only used when mode === 'custom') */\n paddingX?: number\n /** Vertical padding in units (only used when mode === 'custom') */\n paddingY?: number\n /** Font size in units (only used when mode === 'custom') */\n fontSize?: number\n /** Unit for all values */\n unit?: SizeUnit\n}\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// 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 // Handle mode change\n const handleModeChange = useCallback((mode: SizeMode) => {\n if (mode === 'custom') {\n // Initialize custom values when switching to custom\n onChange({\n mode,\n ...CUSTOM_DEFAULTS,\n })\n } else {\n onChange({ mode })\n }\n }, [onChange])\n\n // Handle numeric value changes\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 // Handle unit change\n const handleUnitChange = useCallback((unit: SizeUnit) => {\n onChange({\n ...currentValue,\n unit,\n })\n }, [currentValue, onChange])\n\n // Handle clear\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 space-y-3\">\n {/* Header with label and clear */}\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-sm font-medium text-foreground\">\n {label}\n </Label>\n {value && !readOnly && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={handleClear}\n className=\"text-muted-foreground hover:text-destructive\"\n title=\"Reset to default\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n {/* Size mode selector */}\n <div className=\"flex flex-wrap gap-1\">\n {presets.map(({ mode, label: modeLabel }) => {\n const isActive = currentValue.mode === mode\n return (\n <Button\n key={mode}\n type=\"button\"\n variant={isActive ? 'default' : 'secondary'}\n size=\"sm\"\n onClick={() => handleModeChange(mode)}\n disabled={readOnly}\n className={cn(\n \"text-xs\",\n isActive && \"bg-primary hover:bg-primary/90\"\n )}\n >\n {modeLabel}\n </Button>\n )\n })}\n </div>\n\n {/* Custom size controls */}\n {currentValue.mode === 'custom' && (\n <div className=\"space-y-3 p-3 bg-muted/50 rounded-md\">\n {/* Unit selector */}\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground flex-shrink-0\">\n Unit:\n </Label>\n <div className=\"flex gap-1\">\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 variant={isActive ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => handleUnitChange(unit)}\n disabled={readOnly}\n className={cn(\n \"text-xs font-mono h-7 px-2\",\n isActive && \"bg-primary hover:bg-primary/90\"\n )}\n >\n {unit}\n </Button>\n )\n })}\n </div>\n </div>\n\n {/* Numeric inputs */}\n <div className=\"grid grid-cols-2 gap-2\">\n {showHeight && (\n <div className=\"space-y-1\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Height\n </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 className=\"h-8 text-sm font-mono\"\n />\n </div>\n )}\n\n {showFontSize && (\n <div className=\"space-y-1\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Font Size\n </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 className=\"h-8 text-sm font-mono\"\n />\n </div>\n )}\n\n <div className=\"space-y-1\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Padding X\n </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 className=\"h-8 text-sm font-mono\"\n />\n </div>\n\n <div className=\"space-y-1\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Padding Y\n </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 className=\"h-8 text-sm font-mono\"\n />\n </div>\n </div>\n\n {/* Preview summary */}\n <div className=\"text-xs text-muted-foreground font-mono pt-1 border-t border-border/50\">\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// CSS Helper\n// =============================================================================\n\n/**\n * Convert SizeValue to CSS properties object\n *\n * For preset modes, returns undefined (use Tailwind classes instead)\n * For custom mode, returns inline styles\n */\nexport function sizeValueToCSS(size: SizeValue | null | undefined): React.CSSProperties | undefined {\n if (!size || size.mode !== 'custom') return undefined\n\n const unit = size.unit || 'px'\n const style: React.CSSProperties = {}\n\n if (size.height != null) {\n style.height = `${size.height}${unit}`\n }\n\n if (size.paddingX != null || size.paddingY != null) {\n const py = size.paddingY ?? 0\n const px = size.paddingX ?? 0\n style.padding = `${py}${unit} ${px}${unit}`\n }\n\n if (size.fontSize != null) {\n style.fontSize = `${size.fontSize}${unit}`\n }\n\n return Object.keys(style).length > 0 ? style : undefined\n}\n\n/**\n * Get Tailwind classes for preset size modes\n * Returns empty string for custom mode (use inline styles instead)\n */\nexport function getSizeClasses(size: SizeValue | null | undefined, sizeMap: Record<string, string>): string {\n if (!size) return sizeMap.default || ''\n if (size.mode === 'custom') return ''\n return sizeMap[size.mode] || sizeMap.default || ''\n}\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 *\n * @example\n * ```ts\n * fields: {\n * size: createSizeField({ label: 'Button Size' }),\n * }\n * ```\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","'use client'\n\n/**\n * GradientEditor - Component for editing gradient values\n *\n * This component provides:\n * - Type selector (linear/radial toggle)\n * - Angle slider for linear gradients (0-360)\n * - Shape and position selectors for radial gradients\n * - Gradient stops list with color pickers and position sliders\n * - Add/remove stop buttons\n * - Visual gradient preview bar\n */\n\nimport React, { useCallback, memo, useState } from 'react'\nimport { Plus, Trash2 } from 'lucide-react'\nimport type { GradientValue, GradientStop, ColorValue } from './shared'\nimport { colorValueToCSS } from './shared'\nimport { Button } from '../components/ui/button'\nimport { Input } from '../components/ui/input'\nimport { Label } from '../components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../components/ui/select'\nimport { cn } from '../lib/utils'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface GradientEditorProps {\n value: GradientValue | null\n onChange: (value: GradientValue) => void\n readOnly?: boolean\n}\n\n// =============================================================================\n// Default Values\n// =============================================================================\n\nconst DEFAULT_GRADIENT: GradientValue = {\n type: 'linear',\n angle: 90,\n stops: [\n { color: { hex: '#000000', opacity: 100 }, position: 0 },\n { color: { hex: '#ffffff', opacity: 100 }, position: 100 },\n ],\n radialShape: 'circle',\n radialPosition: 'center',\n}\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\n/**\n * Generates CSS gradient string for preview\n */\nfunction getGradientPreviewCSS(gradient: GradientValue): string {\n if (!gradient.stops || gradient.stops.length === 0) {\n return 'linear-gradient(90deg, #ccc 0%, #999 100%)'\n }\n\n const sortedStops = [...gradient.stops].sort((a, b) => a.position - b.position)\n const stopsCSS = sortedStops\n .map((stop) => {\n const color = colorValueToCSS(stop.color) || 'transparent'\n return `${color} ${stop.position}%`\n })\n .join(', ')\n\n if (gradient.type === 'radial') {\n const shape = gradient.radialShape || 'circle'\n const position = gradient.radialPosition || 'center'\n return `radial-gradient(${shape} at ${position}, ${stopsCSS})`\n }\n\n return `linear-gradient(${gradient.angle}deg, ${stopsCSS})`\n}\n\n// =============================================================================\n// GradientStopEditor Component\n// =============================================================================\n\ninterface GradientStopEditorProps {\n stop: GradientStop\n index: number\n canDelete: boolean\n onColorChange: (index: number, color: ColorValue) => void\n onPositionChange: (index: number, position: number) => void\n onDelete: (index: number) => void\n readOnly?: boolean\n}\n\nfunction GradientStopEditorInner({\n stop,\n index,\n canDelete,\n onColorChange,\n onPositionChange,\n onDelete,\n readOnly,\n}: GradientStopEditorProps) {\n const [hexInput, setHexInput] = useState(stop.color.hex)\n\n const handleColorPickerChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newHex = e.target.value\n setHexInput(newHex)\n onColorChange(index, { ...stop.color, hex: newHex })\n },\n [index, stop.color, onColorChange]\n )\n\n const handleHexInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const input = e.target.value\n setHexInput(input)\n\n // Validate hex format\n const clean = input.replace(/^#/, '')\n if (/^[0-9A-Fa-f]{6}$/.test(clean)) {\n onColorChange(index, { ...stop.color, hex: `#${clean.toLowerCase()}` })\n }\n },\n [index, stop.color, onColorChange]\n )\n\n const handleOpacityChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newOpacity = parseInt(e.target.value, 10)\n onColorChange(index, { ...stop.color, opacity: newOpacity })\n },\n [index, stop.color, onColorChange]\n )\n\n const handlePositionChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newPosition = parseInt(e.target.value, 10)\n onPositionChange(index, Math.max(0, Math.min(100, newPosition)))\n },\n [index, onPositionChange]\n )\n\n const previewColor = colorValueToCSS(stop.color) || 'transparent'\n const opacity = stop.color.opacity ?? 100\n\n return (\n <div className=\"space-y-2 p-2 bg-muted/30 rounded-md overflow-hidden\">\n {/* Row 1: Color picker + hex input + preview swatch + delete */}\n <div className=\"flex items-center gap-2\">\n {/* Color picker */}\n <input\n type=\"color\"\n value={stop.color.hex}\n onChange={handleColorPickerChange}\n disabled={readOnly}\n className=\"w-7 h-7 rounded border border-input cursor-pointer disabled:cursor-not-allowed disabled:opacity-50 flex-shrink-0\"\n style={{ padding: 0 }}\n />\n\n {/* Hex input */}\n <Input\n type=\"text\"\n value={hexInput}\n onChange={handleHexInputChange}\n placeholder=\"#000000\"\n disabled={readOnly}\n className=\"w-20 min-w-0 h-7 text-xs font-mono px-1.5\"\n />\n\n {/* Preview swatch with checkerboard for transparency */}\n <div\n className=\"w-7 h-7 rounded border border-input flex-shrink-0 relative overflow-hidden\"\n title={`${previewColor} at ${opacity}% opacity`}\n >\n {/* Checkerboard background for transparency preview */}\n <div\n className=\"absolute inset-0\"\n style={{\n backgroundImage:\n 'linear-gradient(45deg, #e0e0e0 25%, transparent 25%), linear-gradient(-45deg, #e0e0e0 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #e0e0e0 75%), linear-gradient(-45deg, transparent 75%, #e0e0e0 75%)',\n backgroundSize: '8px 8px',\n backgroundPosition: '0 0, 0 4px, 4px -4px, -4px 0px',\n }}\n />\n {/* Color overlay */}\n <div className=\"absolute inset-0\" style={{ backgroundColor: previewColor }} />\n </div>\n\n {/* Spacer */}\n <div className=\"flex-1 min-w-0\" />\n\n {/* Delete button */}\n {canDelete && !readOnly && (\n <button\n type=\"button\"\n onClick={() => onDelete(index)}\n className=\"p-1 text-muted-foreground hover:text-destructive hover:bg-destructive/10 rounded flex-shrink-0\"\n title=\"Remove stop\"\n >\n <Trash2 className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n\n {/* Row 2: Position slider */}\n <div className=\"flex items-center gap-2 min-w-0\">\n <Label className=\"text-xs text-muted-foreground w-12 flex-shrink-0\">Pos</Label>\n <div className=\"flex-1 min-w-0\">\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n value={stop.position}\n onChange={handlePositionChange}\n disabled={readOnly}\n className=\"w-full h-1.5 accent-primary cursor-pointer disabled:cursor-not-allowed disabled:opacity-50\"\n />\n </div>\n <span className=\"text-xs text-muted-foreground font-mono w-8 text-right flex-shrink-0\">\n {stop.position}%\n </span>\n </div>\n\n {/* Row 3: Opacity slider */}\n <div className=\"flex items-center gap-2 min-w-0\">\n <Label className=\"text-xs text-muted-foreground w-12 flex-shrink-0\">Alpha</Label>\n <div className=\"flex-1 min-w-0\">\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n value={opacity}\n onChange={handleOpacityChange}\n disabled={readOnly}\n className=\"w-full h-1.5 accent-primary cursor-pointer disabled:cursor-not-allowed disabled:opacity-50\"\n />\n </div>\n <span className=\"text-xs text-muted-foreground font-mono w-8 text-right flex-shrink-0\">\n {opacity}%\n </span>\n </div>\n </div>\n )\n}\n\nconst GradientStopEditor = memo(GradientStopEditorInner)\n\n// =============================================================================\n// GradientEditor Component\n// =============================================================================\n\nfunction GradientEditorInner({ value, onChange, readOnly }: GradientEditorProps) {\n const currentValue = value || DEFAULT_GRADIENT\n\n // Handle gradient type change\n const handleTypeChange = useCallback(\n (type: 'linear' | 'radial') => {\n onChange({ ...currentValue, type })\n },\n [currentValue, onChange]\n )\n\n // Handle angle change\n const handleAngleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const angle = parseInt(e.target.value, 10)\n onChange({ ...currentValue, angle })\n },\n [currentValue, onChange]\n )\n\n // Handle radial shape change\n const handleRadialShapeChange = useCallback(\n (shape: 'circle' | 'ellipse') => {\n onChange({ ...currentValue, radialShape: shape })\n },\n [currentValue, onChange]\n )\n\n // Handle radial position change\n const handleRadialPositionChange = useCallback(\n (position: GradientValue['radialPosition']) => {\n onChange({ ...currentValue, radialPosition: position })\n },\n [currentValue, onChange]\n )\n\n // Handle stop color change\n const handleStopColorChange = useCallback(\n (index: number, color: ColorValue) => {\n const newStops = [...currentValue.stops]\n newStops[index] = { ...newStops[index], color }\n onChange({ ...currentValue, stops: newStops })\n },\n [currentValue, onChange]\n )\n\n // Handle stop position change\n const handleStopPositionChange = useCallback(\n (index: number, position: number) => {\n const newStops = [...currentValue.stops]\n newStops[index] = { ...newStops[index], position }\n onChange({ ...currentValue, stops: newStops })\n },\n [currentValue, onChange]\n )\n\n // Handle add stop\n const handleAddStop = useCallback(() => {\n const newPosition = currentValue.stops.length > 0 ? 50 : 0\n const newStop: GradientStop = {\n color: { hex: '#888888', opacity: 100 },\n position: newPosition,\n }\n onChange({ ...currentValue, stops: [...currentValue.stops, newStop] })\n }, [currentValue, onChange])\n\n // Handle delete stop\n const handleDeleteStop = useCallback(\n (index: number) => {\n const newStops = currentValue.stops.filter((_, i) => i !== index)\n onChange({ ...currentValue, stops: newStops })\n },\n [currentValue, onChange]\n )\n\n const previewCSS = getGradientPreviewCSS(currentValue)\n const canDeleteStops = currentValue.stops.length > 2\n\n return (\n <div className=\"space-y-4\">\n {/* Gradient Preview */}\n <div\n className=\"h-12 rounded-md border border-input\"\n style={{ background: previewCSS }}\n />\n\n {/* Type Selector */}\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-xs text-muted-foreground w-12\">Type</Label>\n <div className=\"flex gap-1\">\n <Button\n type=\"button\"\n variant={currentValue.type === 'linear' ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => handleTypeChange('linear')}\n disabled={readOnly}\n className=\"text-xs h-7 px-3\"\n >\n Linear\n </Button>\n <Button\n type=\"button\"\n variant={currentValue.type === 'radial' ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => handleTypeChange('radial')}\n disabled={readOnly}\n className=\"text-xs h-7 px-3\"\n >\n Radial\n </Button>\n </div>\n </div>\n\n {/* Linear Options: Angle */}\n {currentValue.type === 'linear' && (\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-xs text-muted-foreground w-12\">Angle</Label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"360\"\n value={currentValue.angle}\n onChange={handleAngleChange}\n disabled={readOnly}\n className=\"flex-1 h-2 bg-muted rounded-lg appearance-none cursor-pointer disabled:cursor-not-allowed disabled:opacity-50\"\n />\n <span className=\"text-xs text-muted-foreground font-mono w-10 text-right\">\n {currentValue.angle}deg\n </span>\n </div>\n )}\n\n {/* Radial Options: Shape & Position */}\n {currentValue.type === 'radial' && (\n <>\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-xs text-muted-foreground w-12\">Shape</Label>\n <Select\n value={currentValue.radialShape || 'circle'}\n onValueChange={(value) => handleRadialShapeChange(value as 'circle' | 'ellipse')}\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-8 text-xs flex-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"circle\">Circle</SelectItem>\n <SelectItem value=\"ellipse\">Ellipse</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-xs text-muted-foreground w-12\">Position</Label>\n <Select\n value={currentValue.radialPosition || 'center'}\n onValueChange={(value) =>\n handleRadialPositionChange(value as GradientValue['radialPosition'])\n }\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-8 text-xs flex-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"center\">Center</SelectItem>\n <SelectItem value=\"top\">Top</SelectItem>\n <SelectItem value=\"bottom\">Bottom</SelectItem>\n <SelectItem value=\"left\">Left</SelectItem>\n <SelectItem value=\"right\">Right</SelectItem>\n </SelectContent>\n </Select>\n </div>\n </>\n )}\n\n {/* Color Stops */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-xs text-muted-foreground\">Color Stops</Label>\n {!readOnly && (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={handleAddStop}\n className=\"h-6 text-xs px-2\"\n >\n <Plus className=\"w-3 h-3 mr-1\" />\n Add Stop\n </Button>\n )}\n </div>\n <div className=\"space-y-2\">\n {currentValue.stops.map((stop, index) => (\n <GradientStopEditor\n key={index}\n stop={stop}\n index={index}\n canDelete={canDeleteStops}\n onColorChange={handleStopColorChange}\n onPositionChange={handleStopPositionChange}\n onDelete={handleDeleteStop}\n readOnly={readOnly}\n />\n ))}\n </div>\n </div>\n </div>\n )\n}\n\nexport const GradientEditor = memo(GradientEditorInner)\n","'use client'\n\n/**\n * BackgroundField - Custom Puck field for unified background selection\n *\n * This component provides a tabbed interface for selecting:\n * - None: No background\n * - Solid: Single color with opacity\n * - Gradient: Linear or radial gradients with multiple stops\n * - Image: Background image from media library with sizing options\n */\n\nimport React, { useCallback, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport { X } from 'lucide-react'\nimport type {\n BackgroundValue,\n BackgroundImageValue,\n ColorValue,\n GradientValue,\n GradientMask,\n BackgroundOverlay,\n} from './shared'\nimport { backgroundValueToCSS, colorValueToCSS, getBackgroundImageOpacity } from './shared'\nimport { ColorPickerField } from './ColorPickerField'\nimport { MediaField, type MediaReference } from './MediaField'\nimport { GradientEditor } from './GradientEditor'\nimport { Label } from '../components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../components/ui/select'\nimport { Checkbox } from '../components/ui/checkbox'\nimport { cn } from '../lib/utils'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ntype BackgroundType = 'none' | 'solid' | 'gradient' | 'image'\n\ninterface BackgroundFieldProps {\n value: BackgroundValue | null\n onChange: (value: BackgroundValue | null) => void\n label?: string\n readOnly?: boolean\n apiEndpoint?: string\n showOpacity?: boolean\n colorPresets?: Array<{ hex: string; label: string }>\n}\n\n// =============================================================================\n// Default Values\n// =============================================================================\n\nconst DEFAULT_VALUE: BackgroundValue = {\n type: 'none',\n solid: null,\n gradient: null,\n image: null,\n}\n\nconst DEFAULT_GRADIENT: GradientValue = {\n type: 'linear',\n angle: 90,\n stops: [\n { color: { hex: '#000000', opacity: 100 }, position: 0 },\n { color: { hex: '#ffffff', opacity: 100 }, position: 100 },\n ],\n radialShape: 'circle',\n radialPosition: 'center',\n}\n\nconst DEFAULT_IMAGE: BackgroundImageValue = {\n media: null,\n size: 'cover',\n position: 'center',\n repeat: 'no-repeat',\n attachment: 'scroll',\n opacity: 100,\n mask: undefined,\n}\n\nconst DEFAULT_MASK: GradientMask = {\n enabled: false,\n direction: 'to-bottom',\n startOpacity: 100,\n endOpacity: 0,\n startPosition: 0,\n endPosition: 100,\n}\n\nconst DEFAULT_OVERLAY: BackgroundOverlay = {\n enabled: false,\n type: 'solid',\n solid: { hex: '#000000', opacity: 50 },\n gradient: null,\n}\n\n// =============================================================================\n// Tab Button Component\n// =============================================================================\n\ninterface TabButtonProps {\n active: boolean\n onClick: () => void\n disabled?: boolean\n children: React.ReactNode\n}\n\nfunction TabButton({ active, onClick, disabled, children }: TabButtonProps) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n className={cn(\n 'px-3 py-1.5 text-xs font-medium rounded-md transition-colors flex-1',\n active\n ? 'bg-primary text-primary-foreground'\n : 'bg-muted text-muted-foreground hover:bg-muted/80 hover:text-foreground',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n >\n {children}\n </button>\n )\n}\n\n// =============================================================================\n// Background Preview Component\n// =============================================================================\n\ninterface BackgroundPreviewProps {\n value: BackgroundValue\n}\n\nfunction BackgroundPreview({ value }: BackgroundPreviewProps) {\n const style = backgroundValueToCSS(value)\n const imageOpacity = getBackgroundImageOpacity(value)\n const hasBackground = value.type !== 'none' && Object.keys(style).length > 0\n\n return (\n <div\n className={cn(\n 'relative h-16 rounded-md border border-input overflow-hidden',\n !hasBackground && 'bg-muted'\n )}\n >\n {/* Checkerboard background for transparency preview */}\n {hasBackground && (\n <div\n className=\"absolute inset-0\"\n style={{\n backgroundImage:\n 'linear-gradient(45deg, #e0e0e0 25%, transparent 25%), linear-gradient(-45deg, #e0e0e0 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #e0e0e0 75%), linear-gradient(-45deg, transparent 75%, #e0e0e0 75%)',\n backgroundSize: '12px 12px',\n backgroundPosition: '0 0, 0 6px, 6px -6px, -6px 0px',\n }}\n />\n )}\n\n {/* Background layer */}\n {hasBackground && (\n <div\n className=\"absolute inset-0\"\n style={{\n ...style,\n opacity: imageOpacity !== undefined ? imageOpacity : 1,\n }}\n />\n )}\n\n {!hasBackground && (\n <div className=\"h-full flex items-center justify-center text-xs text-muted-foreground\">\n No background\n </div>\n )}\n </div>\n )\n}\n\n// =============================================================================\n// Image Options Component\n// =============================================================================\n\ninterface ImageOptionsProps {\n value: BackgroundImageValue\n onChange: (value: BackgroundImageValue) => void\n readOnly?: boolean\n apiEndpoint?: string\n}\n\nfunction ImageOptionsInner({ value, onChange, readOnly, apiEndpoint }: ImageOptionsProps) {\n const handleMediaChange = useCallback(\n (media: MediaReference | null) => {\n onChange({ ...value, media })\n },\n [value, onChange]\n )\n\n const handleSizeChange = useCallback(\n (size: BackgroundImageValue['size']) => {\n onChange({ ...value, size })\n },\n [value, onChange]\n )\n\n const handlePositionChange = useCallback(\n (position: BackgroundImageValue['position']) => {\n onChange({ ...value, position })\n },\n [value, onChange]\n )\n\n const handleRepeatChange = useCallback(\n (repeat: BackgroundImageValue['repeat']) => {\n onChange({ ...value, repeat })\n },\n [value, onChange]\n )\n\n const handleAttachmentChange = useCallback(\n (attachment: BackgroundImageValue['attachment']) => {\n onChange({ ...value, attachment })\n },\n [value, onChange]\n )\n\n const handleOpacityChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const opacity = parseInt(e.target.value, 10)\n onChange({ ...value, opacity })\n },\n [value, onChange]\n )\n\n const handleMaskToggle = useCallback(\n (checked: boolean) => {\n if (checked) {\n onChange({ ...value, mask: { ...DEFAULT_MASK, enabled: true } })\n } else {\n onChange({ ...value, mask: undefined })\n }\n },\n [value, onChange]\n )\n\n const handleMaskDirectionChange = useCallback(\n (direction: GradientMask['direction']) => {\n const currentMask = value.mask || DEFAULT_MASK\n onChange({ ...value, mask: { ...currentMask, direction, enabled: true } })\n },\n [value, onChange]\n )\n\n const handleMaskStartPositionChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const startPosition = parseInt(e.target.value, 10)\n const currentMask = value.mask || DEFAULT_MASK\n onChange({ ...value, mask: { ...currentMask, startPosition, enabled: true } })\n },\n [value, onChange]\n )\n\n const handleMaskEndPositionChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const endPosition = parseInt(e.target.value, 10)\n const currentMask = value.mask || DEFAULT_MASK\n onChange({ ...value, mask: { ...currentMask, endPosition, enabled: true } })\n },\n [value, onChange]\n )\n\n const opacity = value.opacity ?? 100\n const maskEnabled = value.mask?.enabled ?? false\n\n return (\n <div className=\"space-y-4\">\n {/* Media Picker */}\n <MediaField\n value={value.media}\n onChange={handleMediaChange}\n readOnly={readOnly}\n apiEndpoint={apiEndpoint}\n />\n\n {/* Image Options - only show when image is selected */}\n {value.media && (\n <div className=\"space-y-3 pt-2 border-t border-border\">\n {/* Opacity */}\n <div className=\"flex items-center gap-2 min-w-0\">\n <Label className=\"text-xs text-muted-foreground w-16 flex-shrink-0\">Opacity</Label>\n <div className=\"flex-1 min-w-0\">\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n value={opacity}\n onChange={handleOpacityChange}\n disabled={readOnly}\n className=\"w-full h-1.5 accent-primary cursor-pointer disabled:cursor-not-allowed disabled:opacity-50\"\n />\n </div>\n <span className=\"text-xs text-muted-foreground font-mono w-8 text-right flex-shrink-0\">\n {opacity}%\n </span>\n </div>\n\n {/* Size */}\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-xs text-muted-foreground w-20\">Size</Label>\n <Select\n value={value.size}\n onValueChange={(v) => handleSizeChange(v as BackgroundImageValue['size'])}\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-8 text-xs flex-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"cover\">Cover</SelectItem>\n <SelectItem value=\"contain\">Contain</SelectItem>\n <SelectItem value=\"auto\">Auto</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {/* Position */}\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-xs text-muted-foreground w-20\">Position</Label>\n <Select\n value={value.position}\n onValueChange={(v) => handlePositionChange(v as BackgroundImageValue['position'])}\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-8 text-xs flex-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"center\">Center</SelectItem>\n <SelectItem value=\"top\">Top</SelectItem>\n <SelectItem value=\"bottom\">Bottom</SelectItem>\n <SelectItem value=\"left\">Left</SelectItem>\n <SelectItem value=\"right\">Right</SelectItem>\n <SelectItem value=\"top-left\">Top Left</SelectItem>\n <SelectItem value=\"top-right\">Top Right</SelectItem>\n <SelectItem value=\"bottom-left\">Bottom Left</SelectItem>\n <SelectItem value=\"bottom-right\">Bottom Right</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {/* Repeat */}\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-xs text-muted-foreground w-20\">Repeat</Label>\n <Select\n value={value.repeat}\n onValueChange={(v) => handleRepeatChange(v as BackgroundImageValue['repeat'])}\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-8 text-xs flex-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"no-repeat\">No Repeat</SelectItem>\n <SelectItem value=\"repeat\">Repeat</SelectItem>\n <SelectItem value=\"repeat-x\">Repeat X</SelectItem>\n <SelectItem value=\"repeat-y\">Repeat Y</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {/* Attachment */}\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-xs text-muted-foreground w-20\">Attachment</Label>\n <Select\n value={value.attachment}\n onValueChange={(v) => handleAttachmentChange(v as BackgroundImageValue['attachment'])}\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-8 text-xs flex-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"scroll\">Scroll</SelectItem>\n <SelectItem value=\"fixed\">Fixed</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {/* Fade to Transparent (Gradient Mask) */}\n <div className=\"space-y-2 pt-3\">\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <Checkbox\n checked={maskEnabled}\n onCheckedChange={handleMaskToggle}\n disabled={readOnly}\n />\n <span className=\"text-xs text-muted-foreground\">Fade to transparent</span>\n </label>\n\n {maskEnabled && (\n <div className=\"space-y-2 pl-6\">\n {/* Direction */}\n <div className=\"flex items-center gap-2 min-w-0\">\n <Label className=\"text-xs text-muted-foreground w-12 flex-shrink-0\">Dir</Label>\n <Select\n value={value.mask?.direction || 'to-bottom'}\n onValueChange={(v) => handleMaskDirectionChange(v as GradientMask['direction'])}\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-7 text-xs flex-1 min-w-0\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"to-top\">To Top</SelectItem>\n <SelectItem value=\"to-bottom\">To Bottom</SelectItem>\n <SelectItem value=\"to-left\">To Left</SelectItem>\n <SelectItem value=\"to-right\">To Right</SelectItem>\n <SelectItem value=\"to-top-left\">To Top Left</SelectItem>\n <SelectItem value=\"to-top-right\">To Top Right</SelectItem>\n <SelectItem value=\"to-bottom-left\">To Bottom Left</SelectItem>\n <SelectItem value=\"to-bottom-right\">To Bottom Right</SelectItem>\n <SelectItem value=\"from-center\">From Center (Radial)</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {/* Start Position */}\n <div className=\"flex items-center gap-2 min-w-0\">\n <Label className=\"text-xs text-muted-foreground w-12 flex-shrink-0\">Start</Label>\n <div className=\"flex-1 min-w-0\">\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n value={value.mask?.startPosition ?? 0}\n onChange={handleMaskStartPositionChange}\n disabled={readOnly}\n className=\"w-full h-1.5 accent-primary cursor-pointer disabled:cursor-not-allowed disabled:opacity-50\"\n />\n </div>\n <span className=\"text-xs text-muted-foreground font-mono w-8 text-right flex-shrink-0\">\n {value.mask?.startPosition ?? 0}%\n </span>\n </div>\n\n {/* End Position */}\n <div className=\"flex items-center gap-2 min-w-0\">\n <Label className=\"text-xs text-muted-foreground w-12 flex-shrink-0\">End</Label>\n <div className=\"flex-1 min-w-0\">\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n value={value.mask?.endPosition ?? 100}\n onChange={handleMaskEndPositionChange}\n disabled={readOnly}\n className=\"w-full h-1.5 accent-primary cursor-pointer disabled:cursor-not-allowed disabled:opacity-50\"\n />\n </div>\n <span className=\"text-xs text-muted-foreground font-mono w-8 text-right flex-shrink-0\">\n {value.mask?.endPosition ?? 100}%\n </span>\n </div>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n )\n}\n\nconst ImageOptions = memo(ImageOptionsInner)\n\n// =============================================================================\n// BackgroundField Component\n// =============================================================================\n\nfunction BackgroundFieldInner({\n value,\n onChange,\n label,\n readOnly,\n apiEndpoint = '/api/media',\n showOpacity = true,\n colorPresets,\n}: BackgroundFieldProps) {\n const currentValue = value || DEFAULT_VALUE\n const currentType = currentValue.type\n\n // Handle type change\n const handleTypeChange = useCallback(\n (type: BackgroundType) => {\n const newValue: BackgroundValue = {\n ...currentValue,\n type,\n }\n\n // Initialize defaults for the new type if needed\n if (type === 'gradient' && !newValue.gradient) {\n newValue.gradient = DEFAULT_GRADIENT\n }\n if (type === 'image' && !newValue.image) {\n newValue.image = DEFAULT_IMAGE\n }\n\n onChange(newValue)\n },\n [currentValue, onChange]\n )\n\n // Handle solid color change\n const handleSolidChange = useCallback(\n (solid: ColorValue | null) => {\n onChange({ ...currentValue, solid })\n },\n [currentValue, onChange]\n )\n\n // Handle gradient change\n const handleGradientChange = useCallback(\n (gradient: GradientValue) => {\n onChange({ ...currentValue, gradient })\n },\n [currentValue, onChange]\n )\n\n // Handle image change\n const handleImageChange = useCallback(\n (image: BackgroundImageValue) => {\n onChange({ ...currentValue, image })\n },\n [currentValue, onChange]\n )\n\n // Handle overlay toggle\n const handleOverlayToggle = useCallback(\n (checked: boolean) => {\n if (checked) {\n onChange({ ...currentValue, overlay: { ...DEFAULT_OVERLAY, enabled: true } })\n } else {\n onChange({ ...currentValue, overlay: { ...DEFAULT_OVERLAY, enabled: false } })\n }\n },\n [currentValue, onChange]\n )\n\n // Handle overlay type change\n const handleOverlayTypeChange = useCallback(\n (type: 'solid' | 'gradient') => {\n const currentOverlay = currentValue.overlay || DEFAULT_OVERLAY\n onChange({\n ...currentValue,\n overlay: {\n ...currentOverlay,\n type,\n enabled: true,\n // Initialize gradient if switching to gradient and not set\n gradient:\n type === 'gradient' && !currentOverlay.gradient ? DEFAULT_GRADIENT : currentOverlay.gradient,\n },\n })\n },\n [currentValue, onChange]\n )\n\n // Handle overlay solid color change\n const handleOverlaySolidChange = useCallback(\n (solid: ColorValue | null) => {\n const currentOverlay = currentValue.overlay || DEFAULT_OVERLAY\n onChange({\n ...currentValue,\n overlay: { ...currentOverlay, solid, enabled: true },\n })\n },\n [currentValue, onChange]\n )\n\n // Handle overlay gradient change\n const handleOverlayGradientChange = useCallback(\n (gradient: GradientValue) => {\n const currentOverlay = currentValue.overlay || DEFAULT_OVERLAY\n onChange({\n ...currentValue,\n overlay: { ...currentOverlay, gradient, enabled: true },\n })\n },\n [currentValue, onChange]\n )\n\n // Handle clear\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n const overlayEnabled = currentValue.overlay?.enabled ?? false\n const overlayType = currentValue.overlay?.type ?? 'solid'\n\n return (\n <div className=\"puck-field space-y-3\">\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n {label && (\n <Label className=\"block text-sm font-medium text-foreground\">{label}</Label>\n )}\n {value && !readOnly && (\n <button\n type=\"button\"\n onClick={handleClear}\n title=\"Clear background\"\n className=\"flex items-center justify-center w-6 h-6 rounded border-none bg-transparent cursor-pointer text-muted-foreground hover:bg-accent hover:text-destructive\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n\n {/* Preview */}\n <BackgroundPreview value={currentValue} />\n\n {/* Type Tabs */}\n <div className=\"flex gap-1 bg-muted/50 p-1 rounded-lg\">\n <TabButton\n active={currentType === 'none'}\n onClick={() => handleTypeChange('none')}\n disabled={readOnly}\n >\n None\n </TabButton>\n <TabButton\n active={currentType === 'solid'}\n onClick={() => handleTypeChange('solid')}\n disabled={readOnly}\n >\n Solid\n </TabButton>\n <TabButton\n active={currentType === 'gradient'}\n onClick={() => handleTypeChange('gradient')}\n disabled={readOnly}\n >\n Gradient\n </TabButton>\n <TabButton\n active={currentType === 'image'}\n onClick={() => handleTypeChange('image')}\n disabled={readOnly}\n >\n Image\n </TabButton>\n </div>\n\n {/* Tab Content */}\n <div className=\"min-h-[100px]\">\n {currentType === 'none' && (\n <div className=\"flex items-center justify-center h-24 text-sm text-muted-foreground\">\n No background selected\n </div>\n )}\n\n {currentType === 'solid' && (\n <ColorPickerField\n value={currentValue.solid || null}\n onChange={handleSolidChange}\n readOnly={readOnly}\n showOpacity={showOpacity}\n presets={colorPresets}\n />\n )}\n\n {currentType === 'gradient' && (\n <GradientEditor\n value={currentValue.gradient || null}\n onChange={handleGradientChange}\n readOnly={readOnly}\n />\n )}\n\n {currentType === 'image' && (\n <div className=\"space-y-4\">\n <ImageOptions\n value={currentValue.image || DEFAULT_IMAGE}\n onChange={handleImageChange}\n readOnly={readOnly}\n apiEndpoint={apiEndpoint}\n />\n\n {/* Overlay Section - only show when image is selected */}\n {currentValue.image?.media && (\n <div className=\"space-y-3 pt-3\">\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <Checkbox\n checked={overlayEnabled}\n onCheckedChange={handleOverlayToggle}\n disabled={readOnly}\n />\n <span className=\"text-xs text-muted-foreground\">Enable overlay</span>\n </label>\n\n {overlayEnabled && (\n <div className=\"space-y-3\">\n {/* Overlay Type Toggle */}\n <div className=\"flex gap-1 bg-muted/50 p-1 rounded-lg\">\n <TabButton\n active={overlayType === 'solid'}\n onClick={() => handleOverlayTypeChange('solid')}\n disabled={readOnly}\n >\n Solid Color\n </TabButton>\n <TabButton\n active={overlayType === 'gradient'}\n onClick={() => handleOverlayTypeChange('gradient')}\n disabled={readOnly}\n >\n Gradient\n </TabButton>\n </div>\n\n {/* Overlay Editor */}\n {overlayType === 'solid' ? (\n <ColorPickerField\n value={currentValue.overlay?.solid || null}\n onChange={handleOverlaySolidChange}\n readOnly={readOnly}\n showOpacity={true}\n />\n ) : (\n <GradientEditor\n value={currentValue.overlay?.gradient || null}\n onChange={handleOverlayGradientChange}\n readOnly={readOnly}\n />\n )}\n </div>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n )\n}\n\nexport const BackgroundField = memo(BackgroundFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for background selection\n */\nexport function createBackgroundField(config: {\n label?: string\n apiEndpoint?: string\n showOpacity?: boolean\n colorPresets?: Array<{ hex: string; label: string }>\n} = {}): CustomField<BackgroundValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <BackgroundField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n apiEndpoint={config.apiEndpoint}\n showOpacity={config.showOpacity}\n colorPresets={config.colorPresets}\n />\n ),\n }\n}\n","'use client'\n\n/**\n * ResponsiveField - Generic wrapper for breakpoint-specific field overrides\n *\n * This component wraps any existing field to provide responsive overrides\n * at different breakpoints (xs, sm, md, lg, xl). It uses sparse storage,\n * only storing values for breakpoints that have explicit overrides.\n */\n\nimport React, { useState, useCallback, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport {\n Smartphone,\n Tablet,\n Laptop,\n Monitor,\n X,\n} from 'lucide-react'\nimport { Button } from '../components/ui/button'\nimport { Label } from '../components/ui/label'\nimport { cn } from '../lib/utils'\nimport type { Breakpoint, ResponsiveValue } from './shared'\nimport { BREAKPOINTS } from './shared'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface ResponsiveFieldProps<T> {\n value: ResponsiveValue<T> | null\n onChange: (value: ResponsiveValue<T> | null) => void\n label?: string\n readOnly?: boolean\n /** Render function for the inner field */\n renderInnerField: (props: {\n value: T | null\n onChange: (v: T | null) => void\n readOnly?: boolean\n }) => React.ReactNode\n /** Default value for the xs breakpoint */\n defaultValue?: T\n}\n\n// =============================================================================\n// Breakpoint Icons\n// =============================================================================\n\nconst BREAKPOINT_ICONS: Record<Breakpoint, React.ComponentType<{ className?: string }>> = {\n xs: Smartphone,\n sm: Smartphone,\n md: Tablet,\n lg: Laptop,\n xl: Monitor,\n}\n\n// =============================================================================\n// Breakpoint Tab Button\n// =============================================================================\n\ninterface BreakpointTabProps {\n breakpoint: Breakpoint\n label: string\n minWidth: number | null\n isActive: boolean\n hasOverride: boolean\n onClick: () => void\n disabled?: boolean\n}\n\nfunction BreakpointTab({\n breakpoint,\n label,\n minWidth,\n isActive,\n hasOverride,\n onClick,\n disabled,\n}: BreakpointTabProps) {\n const Icon = BREAKPOINT_ICONS[breakpoint]\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n title={minWidth ? `${label} (${minWidth}px+)` : label}\n className={cn(\n 'relative flex items-center justify-center gap-1 px-2 py-1.5 text-xs font-medium rounded-md transition-colors flex-1',\n isActive\n ? 'bg-primary text-primary-foreground'\n : 'bg-muted text-muted-foreground hover:bg-muted/80 hover:text-foreground',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n >\n <Icon className=\"h-3.5 w-3.5\" />\n <span className=\"hidden sm:inline\">{label}</span>\n {/* Override indicator dot */}\n {hasOverride && !isActive && (\n <span className=\"absolute -top-0.5 -right-0.5 h-2 w-2 rounded-full bg-primary\" />\n )}\n </button>\n )\n}\n\n// =============================================================================\n// ResponsiveField Component\n// =============================================================================\n\nfunction ResponsiveFieldInner<T>({\n value,\n onChange,\n label,\n readOnly,\n renderInnerField,\n defaultValue,\n}: ResponsiveFieldProps<T>) {\n const [activeBreakpoint, setActiveBreakpoint] = useState<Breakpoint>('xs')\n\n // Get the current value for the active breakpoint\n // Falls back through the cascade: active -> smaller breakpoints -> xs -> default\n const getCurrentValue = useCallback((): T | null => {\n if (!value) return defaultValue ?? null\n\n // For xs, just return xs value\n if (activeBreakpoint === 'xs') {\n return value.xs ?? defaultValue ?? null\n }\n\n // For other breakpoints, return explicit override if set\n const override = value[activeBreakpoint]\n if (override !== undefined) {\n return override\n }\n\n // Otherwise cascade down to find the nearest defined value\n const breakpointOrder: Breakpoint[] = ['xl', 'lg', 'md', 'sm', 'xs']\n const activeIndex = breakpointOrder.indexOf(activeBreakpoint)\n\n for (let i = activeIndex + 1; i < breakpointOrder.length; i++) {\n const bp = breakpointOrder[i]\n const val = value[bp]\n if (val !== undefined) {\n return val\n }\n }\n\n return defaultValue ?? null\n }, [value, activeBreakpoint, defaultValue])\n\n // Check if a breakpoint has an explicit override\n const hasOverride = useCallback(\n (breakpoint: Breakpoint): boolean => {\n if (!value) return false\n if (breakpoint === 'xs') return value.xs !== undefined\n return value[breakpoint] !== undefined\n },\n [value]\n )\n\n // Handle value change for the active breakpoint\n const handleInnerChange = useCallback(\n (newValue: T | null) => {\n if (activeBreakpoint === 'xs') {\n // XS is required, so we always set it\n if (newValue === null && defaultValue !== undefined) {\n onChange({ ...value, xs: defaultValue } as ResponsiveValue<T>)\n } else if (newValue !== null) {\n onChange({ ...value, xs: newValue } as ResponsiveValue<T>)\n }\n } else {\n // For other breakpoints, set the override\n if (newValue === null) {\n // Remove the override\n const newResponsive = { ...value } as ResponsiveValue<T>\n delete newResponsive[activeBreakpoint]\n onChange(newResponsive)\n } else {\n // Ensure xs exists\n const xs = value?.xs ?? defaultValue\n if (xs === undefined) return\n onChange({\n ...value,\n xs,\n [activeBreakpoint]: newValue,\n } as ResponsiveValue<T>)\n }\n }\n },\n [value, onChange, activeBreakpoint, defaultValue]\n )\n\n // Clear override for current breakpoint\n const handleClearOverride = useCallback(() => {\n if (activeBreakpoint === 'xs' || !value) return\n\n const newResponsive = { ...value }\n delete newResponsive[activeBreakpoint]\n onChange(newResponsive)\n }, [value, onChange, activeBreakpoint])\n\n // Clear all values\n const handleClearAll = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n const currentValue = getCurrentValue()\n const isOverrideBreakpoint = activeBreakpoint !== 'xs'\n const currentHasOverride = hasOverride(activeBreakpoint)\n\n // Count how many breakpoints have overrides (excluding xs)\n const overrideCount = value\n ? (['sm', 'md', 'lg', 'xl'] as Breakpoint[]).filter((bp) => value[bp] !== undefined).length\n : 0\n\n return (\n <div className=\"puck-field space-y-3\">\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n {label && (\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-sm font-medium text-foreground\">{label}</Label>\n {overrideCount > 0 && (\n <span className=\"text-xs text-muted-foreground bg-muted px-1.5 py-0.5 rounded\">\n {overrideCount} override{overrideCount !== 1 ? 's' : ''}\n </span>\n )}\n </div>\n )}\n {value && !readOnly && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={handleClearAll}\n className=\"text-muted-foreground hover:text-destructive\"\n title=\"Clear all values\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n {/* Breakpoint Tabs */}\n <div className=\"flex gap-1 bg-muted/50 p-1 rounded-lg\">\n {BREAKPOINTS.map((bp) => (\n <BreakpointTab\n key={bp.key}\n breakpoint={bp.key}\n label={bp.label}\n minWidth={bp.minWidth}\n isActive={activeBreakpoint === bp.key}\n hasOverride={hasOverride(bp.key)}\n onClick={() => setActiveBreakpoint(bp.key)}\n disabled={readOnly}\n />\n ))}\n </div>\n\n {/* Active Breakpoint Info */}\n <div className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span>\n {activeBreakpoint === 'xs' ? (\n 'Extra small screens (0-639px)'\n ) : (\n <>\n {BREAKPOINTS.find((bp) => bp.key === activeBreakpoint)?.minWidth}px and up\n {!currentHasOverride && (\n <span className=\"text-muted-foreground/60\"> (inheriting from xs)</span>\n )}\n </>\n )}\n </span>\n\n {/* Clear Override Button */}\n {isOverrideBreakpoint && currentHasOverride && !readOnly && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleClearOverride}\n className=\"h-6 px-2 text-xs text-muted-foreground hover:text-destructive\"\n >\n Clear override\n </Button>\n )}\n </div>\n\n {/* Inner Field */}\n <div className=\"border border-border rounded-md p-3\">\n {renderInnerField({\n value: currentValue,\n onChange: handleInnerChange,\n readOnly,\n })}\n </div>\n </div>\n )\n}\n\nexport const ResponsiveField = memo(ResponsiveFieldInner) as <T>(\n props: ResponsiveFieldProps<T>\n) => React.ReactElement\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\ninterface CreateResponsiveFieldConfig<T> {\n label?: string\n /** Factory function that creates the inner field */\n innerField: (config: { label?: string }) => CustomField<T | null>\n /** Default value for base breakpoint */\n defaultValue?: T\n}\n\n/**\n * Creates a responsive wrapper around any Puck custom field.\n *\n * The inner field factory is called to get the field configuration,\n * and its render function is used to render the field at each breakpoint.\n *\n * @example\n * ```ts\n * // Create a responsive padding field\n * fields: {\n * padding: createResponsiveField({\n * label: 'Padding',\n * innerField: (config) => createPaddingField(config),\n * defaultValue: { top: 0, right: 0, bottom: 0, left: 0, unit: 'px', linked: true },\n * }),\n * }\n * ```\n */\nexport function createResponsiveField<T>(\n config: CreateResponsiveFieldConfig<T>\n): CustomField<ResponsiveValue<T> | null> {\n // Get the inner field configuration to access its render function\n const innerFieldConfig = config.innerField({ label: undefined })\n\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <ResponsiveField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n defaultValue={config.defaultValue}\n renderInnerField={(props) => {\n // Use the inner field's render function\n if (innerFieldConfig.type === 'custom' && innerFieldConfig.render) {\n return innerFieldConfig.render({\n field: innerFieldConfig,\n value: props.value,\n onChange: props.onChange,\n readOnly: props.readOnly,\n name: 'responsive-inner',\n id: 'responsive-inner',\n })\n }\n return null\n }}\n />\n ),\n }\n}\n","'use client'\n\n/**\n * ResponsiveVisibilityField - Show/hide elements at different breakpoints\n *\n * Provides a compact visual interface for toggling element visibility\n * at each breakpoint (xs, sm, md, lg, xl). Simple independent toggles\n * like Elementor/Divi - each breakpoint is just on or off.\n */\n\nimport React, { useCallback, memo } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport {\n Smartphone,\n Tablet,\n Laptop,\n Monitor,\n Eye,\n EyeOff,\n} from 'lucide-react'\nimport { Label } from '../components/ui/label'\nimport { cn } from '../lib/utils'\nimport type { Breakpoint, VisibilityValue } from './shared'\nimport { BREAKPOINTS, DEFAULT_VISIBILITY } from './shared'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface ResponsiveVisibilityFieldProps {\n value: VisibilityValue | null\n onChange: (value: VisibilityValue | null) => void\n label?: string\n readOnly?: boolean\n}\n\n// =============================================================================\n// Breakpoint Icons\n// =============================================================================\n\nconst BREAKPOINT_ICONS: Record<Breakpoint, React.ComponentType<{ className?: string }>> = {\n xs: Smartphone,\n sm: Smartphone,\n md: Tablet,\n lg: Laptop,\n xl: Monitor,\n}\n\n// =============================================================================\n// Visibility Toggle Button\n// =============================================================================\n\ninterface VisibilityToggleProps {\n breakpoint: Breakpoint\n label: string\n minWidth: number | null\n isVisible: boolean\n onClick: () => void\n disabled?: boolean\n}\n\nfunction VisibilityToggle({\n breakpoint,\n label,\n minWidth,\n isVisible,\n onClick,\n disabled,\n}: VisibilityToggleProps) {\n const DeviceIcon = BREAKPOINT_ICONS[breakpoint]\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n title={`${label}${minWidth ? ` (${minWidth}px+)` : ''}: ${isVisible ? 'Visible' : 'Hidden'}`}\n className={cn(\n 'relative flex flex-col items-center justify-center gap-0.5 p-2 rounded-md transition-all flex-1 min-w-[52px]',\n isVisible\n ? 'bg-emerald-500/15 text-emerald-600 hover:bg-emerald-500/25 border border-emerald-500/40'\n : 'bg-red-500/15 text-red-500 hover:bg-red-500/25 border border-red-500/40',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n >\n <DeviceIcon className=\"h-4 w-4\" />\n <span className=\"text-[10px] font-medium\">{label}</span>\n {/* Visibility icon overlay */}\n <div className=\"absolute top-1 right-1\">\n {isVisible ? (\n <Eye className=\"h-3 w-3\" />\n ) : (\n <EyeOff className=\"h-3 w-3\" />\n )}\n </div>\n </button>\n )\n}\n\n// =============================================================================\n// ResponsiveVisibilityField Component\n// =============================================================================\n\nfunction ResponsiveVisibilityFieldInner({\n value,\n onChange,\n label,\n readOnly,\n}: ResponsiveVisibilityFieldProps) {\n // Get visibility for a breakpoint (simple lookup, no cascade)\n const getVisibility = useCallback(\n (breakpoint: Breakpoint): boolean => {\n const val = value ?? DEFAULT_VISIBILITY\n // All breakpoints have explicit values, default to true if undefined\n return val[breakpoint] ?? true\n },\n [value]\n )\n\n // Toggle visibility for a breakpoint (simple toggle, no cascade)\n const toggleVisibility = useCallback(\n (breakpoint: Breakpoint) => {\n const currentVisible = getVisibility(breakpoint)\n const newValue: VisibilityValue = {\n ...(value ?? DEFAULT_VISIBILITY),\n [breakpoint]: !currentVisible,\n }\n onChange(newValue)\n },\n [value, onChange, getVisibility]\n )\n\n // Check if any breakpoint is hidden\n const hasHiddenBreakpoints = BREAKPOINTS.some((bp) => !getVisibility(bp.key))\n\n return (\n <div className=\"puck-field space-y-2\">\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n {label && (\n <Label className=\"text-sm font-medium text-foreground\">{label}</Label>\n )}\n {hasHiddenBreakpoints && (\n <span className=\"text-xs text-amber-600 flex items-center gap-1\">\n <EyeOff className=\"h-3 w-3\" />\n Partially hidden\n </span>\n )}\n </div>\n\n {/* Visibility Grid */}\n <div className=\"flex gap-1\">\n {BREAKPOINTS.map((bp) => (\n <VisibilityToggle\n key={bp.key}\n breakpoint={bp.key}\n label={bp.label}\n minWidth={bp.minWidth}\n isVisible={getVisibility(bp.key)}\n onClick={() => toggleVisibility(bp.key)}\n disabled={readOnly}\n />\n ))}\n </div>\n\n {/* Help text */}\n <p className=\"text-xs text-muted-foreground\">\n Toggle visibility per screen size. Each breakpoint is independent.\n </p>\n </div>\n )\n}\n\nexport const ResponsiveVisibilityField = memo(ResponsiveVisibilityFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\ninterface CreateResponsiveVisibilityFieldConfig {\n label?: string\n}\n\n/**\n * Creates a Puck custom field for responsive visibility control.\n *\n * @example\n * ```ts\n * fields: {\n * visibility: createResponsiveVisibilityField({ label: 'Visibility' }),\n * }\n * ```\n */\nexport function createResponsiveVisibilityField(\n config: CreateResponsiveVisibilityFieldConfig = {}\n): CustomField<VisibilityValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <ResponsiveVisibilityField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n />\n ),\n }\n}\n","'use client'\n\n/**\n * AnimationField - Custom Puck field for transition and entrance animation controls\n *\n * Provides comprehensive animation configuration with:\n * - 27 preset entrance animations organized by category\n * - Customizable intensity (distance, scale, rotate, blur)\n * - Transform origin control\n * - Advanced easing options (including spring/bounce)\n * - Scroll trigger settings\n * - Stagger support for child elements\n */\n\nimport React, { useCallback, memo, useState } from 'react'\nimport type { CustomField } from '@measured/puck'\nimport { X, ChevronDown, ChevronRight } from 'lucide-react'\nimport type {\n AnimationValue,\n AdvancedEasingFunction,\n EntranceAnimation,\n AnimationOrigin,\n StaggerDirection,\n} from './shared'\nimport {\n ANIMATION_CATEGORIES,\n DEFAULT_ANIMATION,\n getRelevantIntensityControls,\n getDefaultEasingForAnimation,\n} from './shared'\nimport { Button } from '../components/ui/button'\nimport { Label } from '../components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue,\n} from '../components/ui/select'\nimport { Checkbox } from '../components/ui/checkbox'\nimport { cn } from '../lib/utils'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface AnimationFieldProps {\n value: AnimationValue | null\n onChange: (value: AnimationValue | null) => void\n label?: string\n readOnly?: boolean\n /** Whether to show stagger controls (for container components) */\n showStagger?: boolean\n}\n\n// =============================================================================\n// Easing Options\n// =============================================================================\n\nconst EASING_OPTIONS: Array<{ value: AdvancedEasingFunction; label: string; group: string }> = [\n // Standard\n { value: 'linear', label: 'Linear', group: 'Standard' },\n { value: 'ease', label: 'Ease', group: 'Standard' },\n { value: 'ease-in', label: 'Ease In', group: 'Standard' },\n { value: 'ease-out', label: 'Ease Out', group: 'Standard' },\n { value: 'ease-in-out', label: 'Ease In Out', group: 'Standard' },\n // Spring/Bounce\n { value: 'spring', label: 'Spring', group: 'Spring' },\n { value: 'spring-gentle', label: 'Spring Gentle', group: 'Spring' },\n { value: 'bounce', label: 'Bounce', group: 'Spring' },\n { value: 'bounce-in', label: 'Bounce In', group: 'Spring' },\n { value: 'bounce-out', label: 'Bounce Out', group: 'Spring' },\n // Back\n { value: 'back-in', label: 'Back In', group: 'Back' },\n { value: 'back-out', label: 'Back Out', group: 'Back' },\n { value: 'back-in-out', label: 'Back In Out', group: 'Back' },\n // Elastic\n { value: 'elastic', label: 'Elastic', group: 'Elastic' },\n]\n\n// =============================================================================\n// Collapsible Section Component\n// =============================================================================\n\ninterface CollapsibleSectionProps {\n title: string\n defaultOpen?: boolean\n children: React.ReactNode\n}\n\nfunction CollapsibleSection({ title, defaultOpen = false, children }: CollapsibleSectionProps) {\n const [isOpen, setIsOpen] = useState(defaultOpen)\n\n return (\n <div className=\"border border-border/50 rounded-md overflow-hidden\">\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n className=\"w-full flex items-center justify-between px-3 py-2 bg-muted/30 hover:bg-muted/50 transition-colors\"\n >\n <span className=\"text-xs font-medium text-muted-foreground\">{title}</span>\n {isOpen ? (\n <ChevronDown className=\"h-3.5 w-3.5 text-muted-foreground\" />\n ) : (\n <ChevronRight className=\"h-3.5 w-3.5 text-muted-foreground\" />\n )}\n </button>\n {isOpen && <div className=\"p-3 space-y-3\">{children}</div>}\n </div>\n )\n}\n\n// =============================================================================\n// Origin Grid Component\n// =============================================================================\n\ninterface OriginGridProps {\n value: AnimationOrigin\n onChange: (value: AnimationOrigin) => void\n disabled?: boolean\n}\n\nfunction OriginGrid({ value, onChange, disabled }: OriginGridProps) {\n const origins: AnimationOrigin[] = [\n 'top-left', 'top', 'top-right',\n 'left', 'center', 'right',\n 'bottom-left', 'bottom', 'bottom-right',\n ]\n\n return (\n <div className=\"grid grid-cols-3 gap-1 w-24\">\n {origins.map((origin) => (\n <button\n key={origin}\n type=\"button\"\n onClick={() => onChange(origin)}\n disabled={disabled}\n className={cn(\n 'w-7 h-7 rounded border transition-colors',\n value === origin\n ? 'bg-primary border-primary'\n : 'bg-muted/50 border-border hover:bg-muted hover:border-border/80',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n title={origin.replace('-', ' ')}\n >\n <span\n className={cn(\n 'block w-2 h-2 rounded-full mx-auto',\n value === origin ? 'bg-primary-foreground' : 'bg-muted-foreground/40'\n )}\n />\n </button>\n ))}\n </div>\n )\n}\n\n// =============================================================================\n// Slider Component\n// =============================================================================\n\ninterface SliderRowProps {\n label: string\n value: number\n min: number\n max: number\n step?: number\n unit?: string\n onChange: (value: number) => void\n disabled?: boolean\n}\n\nfunction SliderRow({ label, value, min, max, step = 1, unit = '', onChange, disabled }: SliderRowProps) {\n return (\n <div className=\"space-y-1\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n {label}\n </Label>\n <span className=\"text-xs text-muted-foreground\">{value}{unit}</span>\n </div>\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 className=\"w-full h-1.5 accent-primary cursor-pointer disabled:cursor-not-allowed disabled:opacity-50\"\n />\n </div>\n )\n}\n\n// =============================================================================\n// AnimationField Component\n// =============================================================================\n\nfunction AnimationFieldInner({\n value,\n onChange,\n label = 'Animation',\n readOnly,\n showStagger = false,\n}: AnimationFieldProps) {\n const currentValue = value || DEFAULT_ANIMATION\n\n // Get which intensity controls to show based on animation type\n const intensityControls = getRelevantIntensityControls(currentValue.entrance || 'none')\n const hasIntensityControls = Object.values(intensityControls).some(Boolean)\n\n // Helpers to update specific fields\n const updateField = useCallback(\n <K extends keyof AnimationValue>(key: K, val: AnimationValue[K]) => {\n onChange({\n ...currentValue,\n [key]: val,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle entrance animation change - also update default easing\n const handleEntranceChange = useCallback(\n (entrance: EntranceAnimation) => {\n const defaultEasing = getDefaultEasingForAnimation(entrance)\n onChange({\n ...currentValue,\n entrance,\n // Only set default easing if current is 'ease' (not explicitly set)\n easing: currentValue.easing === 'ease' ? defaultEasing : currentValue.easing,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle stagger config updates\n const updateStagger = useCallback(\n (updates: Partial<NonNullable<AnimationValue['stagger']>>) => {\n onChange({\n ...currentValue,\n stagger: {\n enabled: currentValue.stagger?.enabled ?? false,\n delay: currentValue.stagger?.delay ?? 100,\n direction: currentValue.stagger?.direction ?? 'forward',\n ...currentValue.stagger,\n ...updates,\n },\n })\n },\n [currentValue, onChange]\n )\n\n // Handle clear\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n const thresholdPercent = Math.round((currentValue.triggerThreshold ?? 0.1) * 100)\n\n // Format animation label\n const formatAnimationLabel = (anim: EntranceAnimation): string => {\n if (anim === 'none') return 'None'\n return anim\n .split('-')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n }\n\n return (\n <div className=\"puck-field space-y-3\">\n {/* Header with label and clear */}\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-sm font-medium text-foreground\">{label}</Label>\n {value && !readOnly && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={handleClear}\n className=\"text-muted-foreground hover:text-destructive\"\n title=\"Reset to default\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n {/* Animation Type Select (grouped by category) */}\n <div className=\"space-y-1\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Animation\n </Label>\n <Select\n value={currentValue.entrance || 'none'}\n onValueChange={(v) => handleEntranceChange(v as EntranceAnimation)}\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-9 text-sm\">\n <SelectValue placeholder=\"Select animation\">\n {formatAnimationLabel(currentValue.entrance || 'none')}\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n {ANIMATION_CATEGORIES.map(({ category, label: catLabel, animations }, idx) => (\n <SelectGroup key={category}>\n <SelectLabel\n className={cn(\n 'text-[10px] font-semibold uppercase tracking-wider text-muted-foreground/70',\n 'px-2 py-1.5 bg-muted/50',\n idx > 0 && 'mt-1 border-t border-border/50'\n )}\n >\n {catLabel}\n </SelectLabel>\n {animations.map((anim) => (\n <SelectItem key={anim} value={anim}>\n {formatAnimationLabel(anim)}\n </SelectItem>\n ))}\n </SelectGroup>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {/* Only show controls if animation is not 'none' */}\n {currentValue.entrance && currentValue.entrance !== 'none' && (\n <>\n {/* Timing Controls */}\n <div className=\"space-y-3 p-3 bg-muted/30 rounded-md\">\n <SliderRow\n label=\"Duration\"\n value={currentValue.entranceDuration ?? 500}\n min={100}\n max={2000}\n step={50}\n unit=\"ms\"\n onChange={(v) => updateField('entranceDuration', v)}\n disabled={readOnly}\n />\n <SliderRow\n label=\"Delay\"\n value={currentValue.entranceDelay ?? 0}\n min={0}\n max={2000}\n step={50}\n unit=\"ms\"\n onChange={(v) => updateField('entranceDelay', v)}\n disabled={readOnly}\n />\n </div>\n\n {/* Intensity Controls (context-aware) */}\n {hasIntensityControls && (\n <CollapsibleSection title=\"Intensity\">\n {intensityControls.showDistance && (\n <SliderRow\n label=\"Distance\"\n value={currentValue.distance ?? 24}\n min={8}\n max={200}\n step={4}\n unit=\"px\"\n onChange={(v) => updateField('distance', v)}\n disabled={readOnly}\n />\n )}\n {intensityControls.showScale && (\n <SliderRow\n label=\"Scale From\"\n value={Math.round((currentValue.scaleFrom ?? 0.9) * 100)}\n min={10}\n max={200}\n step={5}\n unit=\"%\"\n onChange={(v) => updateField('scaleFrom', v / 100)}\n disabled={readOnly}\n />\n )}\n {intensityControls.showRotate && (\n <SliderRow\n label=\"Rotation\"\n value={currentValue.rotateAngle ?? 15}\n min={-180}\n max={180}\n step={5}\n unit=\"deg\"\n onChange={(v) => updateField('rotateAngle', v)}\n disabled={readOnly}\n />\n )}\n {intensityControls.showBlur && (\n <SliderRow\n label=\"Blur\"\n value={currentValue.blurAmount ?? 8}\n min={0}\n max={50}\n step={1}\n unit=\"px\"\n onChange={(v) => updateField('blurAmount', v)}\n disabled={readOnly}\n />\n )}\n </CollapsibleSection>\n )}\n\n {/* Transform Origin */}\n <CollapsibleSection title=\"Transform Origin\">\n <div className=\"flex items-center justify-center\">\n <OriginGrid\n value={currentValue.origin ?? 'center'}\n onChange={(v) => updateField('origin', v)}\n disabled={readOnly}\n />\n </div>\n </CollapsibleSection>\n\n {/* Easing */}\n <CollapsibleSection title=\"Easing\">\n <Select\n value={currentValue.easing || 'ease'}\n onValueChange={(v) => updateField('easing', v as AdvancedEasingFunction)}\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-8 text-sm\">\n <SelectValue placeholder=\"Select easing\" />\n </SelectTrigger>\n <SelectContent>\n {['Standard', 'Spring', 'Back', 'Elastic'].map((group, idx) => (\n <SelectGroup key={group}>\n <SelectLabel\n className={cn(\n 'text-[10px] font-semibold uppercase tracking-wider text-muted-foreground/70',\n 'px-2 py-1.5 bg-muted/50',\n idx > 0 && 'mt-1 border-t border-border/50'\n )}\n >\n {group}\n </SelectLabel>\n {EASING_OPTIONS.filter(e => e.group === group).map((opt) => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectGroup>\n ))}\n </SelectContent>\n </Select>\n <p className=\"text-[10px] text-muted-foreground mt-2\">\n Spring and bounce easings create overshoot effects\n </p>\n </CollapsibleSection>\n\n {/* Scroll Trigger */}\n <CollapsibleSection title=\"Scroll Trigger\" defaultOpen>\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id=\"trigger-on-scroll\"\n checked={currentValue.triggerOnScroll ?? true}\n onCheckedChange={(checked) => updateField('triggerOnScroll', !!checked)}\n disabled={readOnly}\n />\n <Label htmlFor=\"trigger-on-scroll\" className=\"text-sm cursor-pointer\">\n Trigger on scroll\n </Label>\n </div>\n\n {currentValue.triggerOnScroll && (\n <>\n <SliderRow\n label=\"Threshold\"\n value={thresholdPercent}\n min={0}\n max={100}\n step={5}\n unit=\"%\"\n onChange={(v) => updateField('triggerThreshold', v / 100)}\n disabled={readOnly}\n />\n <p className=\"text-[10px] text-muted-foreground -mt-2\">\n Element visibility % before animation triggers\n </p>\n\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id=\"animate-once\"\n checked={currentValue.triggerOnce ?? true}\n onCheckedChange={(checked) => updateField('triggerOnce', !!checked)}\n disabled={readOnly}\n />\n <Label htmlFor=\"animate-once\" className=\"text-sm cursor-pointer\">\n Animate only once\n </Label>\n </div>\n </>\n )}\n </div>\n </CollapsibleSection>\n\n {/* Stagger Controls (only for container components) */}\n {showStagger && (\n <CollapsibleSection title=\"Stagger Children\">\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id=\"stagger-enabled\"\n checked={currentValue.stagger?.enabled ?? false}\n onCheckedChange={(checked) => updateStagger({ enabled: !!checked })}\n disabled={readOnly}\n />\n <Label htmlFor=\"stagger-enabled\" className=\"text-sm cursor-pointer\">\n Enable stagger\n </Label>\n </div>\n\n {currentValue.stagger?.enabled && (\n <>\n <SliderRow\n label=\"Delay Between\"\n value={currentValue.stagger?.delay ?? 100}\n min={50}\n max={500}\n step={25}\n unit=\"ms\"\n onChange={(v) => updateStagger({ delay: v })}\n disabled={readOnly}\n />\n\n <SliderRow\n label=\"Max Total Delay\"\n value={currentValue.stagger?.maxDelay ?? 2000}\n min={500}\n max={5000}\n step={100}\n unit=\"ms\"\n onChange={(v) => updateStagger({ maxDelay: v })}\n disabled={readOnly}\n />\n\n <div className=\"space-y-1\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Direction\n </Label>\n <Select\n value={currentValue.stagger?.direction ?? 'forward'}\n onValueChange={(v) => updateStagger({ direction: v as StaggerDirection })}\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-8 text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"forward\">Forward</SelectItem>\n <SelectItem value=\"reverse\">Reverse</SelectItem>\n <SelectItem value=\"center\">From Center</SelectItem>\n <SelectItem value=\"edges\">From Edges</SelectItem>\n </SelectContent>\n </Select>\n </div>\n </>\n )}\n </div>\n </CollapsibleSection>\n )}\n </>\n )}\n </div>\n )\n}\n\nexport const AnimationField = memo(AnimationFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\ninterface CreateAnimationFieldConfig {\n label?: string\n /** Whether to show stagger controls (for container components like Flex, Grid) */\n showStagger?: boolean\n}\n\n/**\n * Creates a Puck field configuration for animation control\n *\n * @example\n * ```ts\n * fields: {\n * animation: createAnimationField({ label: 'Animation' }),\n * // For containers with child elements:\n * animation: createAnimationField({ label: 'Animation', showStagger: true }),\n * }\n * ```\n */\nexport function createAnimationField(config: CreateAnimationFieldConfig = {}): CustomField<AnimationValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <AnimationField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n showStagger={config.showStagger}\n />\n ),\n }\n}\n","'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 } from 'react'\nimport type { CustomField } from '@measured/puck'\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'\nimport { DEFAULT_TRANSFORM, transformValueToCSS } from './shared'\nimport { Button } from '../components/ui/button'\nimport { Input } from '../components/ui/input'\nimport { Label } from '../components/ui/label'\nimport { Checkbox } from '../components/ui/checkbox'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../components/ui/select'\nimport { cn } from '../lib/utils'\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// Origin Grid Component\n// =============================================================================\n\ninterface OriginGridProps {\n value: TransformOrigin\n onChange: (origin: TransformOrigin) => void\n disabled?: boolean\n}\n\nconst ORIGIN_POSITIONS: Array<{ value: TransformOrigin; row: number; col: number }> = [\n { value: 'top-left', row: 0, col: 0 },\n { value: 'top', row: 0, col: 1 },\n { value: 'top-right', row: 0, col: 2 },\n { value: 'left', row: 1, col: 0 },\n { value: 'center', row: 1, col: 1 },\n { value: 'right', row: 1, col: 2 },\n { value: 'bottom-left', row: 2, col: 0 },\n { value: 'bottom', row: 2, col: 1 },\n { value: 'bottom-right', row: 2, col: 2 },\n]\n\nfunction OriginGrid({ value, onChange, disabled }: OriginGridProps) {\n return (\n <div className=\"grid grid-cols-3 gap-1 w-fit\">\n {ORIGIN_POSITIONS.map(({ value: origin }) => {\n const isActive = value === origin\n return (\n <button\n key={origin}\n type=\"button\"\n onClick={() => onChange(origin)}\n disabled={disabled}\n className={cn(\n 'w-6 h-6 rounded border transition-colors',\n isActive\n ? 'bg-primary border-primary'\n : 'bg-muted/50 border-border hover:bg-muted hover:border-muted-foreground/50',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n title={origin}\n >\n <span\n className={cn(\n 'block w-2 h-2 rounded-full mx-auto',\n isActive ? 'bg-primary-foreground' : 'bg-muted-foreground/30'\n )}\n />\n </button>\n )\n })}\n </div>\n )\n}\n\n// =============================================================================\n// Slider Input Component (custom range input)\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 className=\"space-y-1\">\n {label && (\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n {label}\n </Label>\n <span className=\"text-xs font-mono text-muted-foreground\">\n {value}{unit}\n </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 className={cn(\n 'w-full h-2 bg-muted rounded-lg appearance-none cursor-pointer',\n 'accent-primary',\n disabled && 'opacity-50 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 space-y-4\">\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n {label && (\n <Label className=\"text-sm font-medium text-foreground\">{label}</Label>\n )}\n {value && !readOnly && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={handleClear}\n className=\"text-muted-foreground hover:text-destructive\"\n title=\"Reset transform\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n {/* Live Preview */}\n <div className=\"h-24 bg-muted/30 rounded-md border border-border flex items-center justify-center overflow-hidden\">\n <div\n className=\"w-12 h-12 bg-primary/80 rounded-md flex items-center justify-center text-primary-foreground text-xs font-medium transition-transform duration-200\"\n style={previewStyles}\n >\n Aa\n </div>\n </div>\n\n {/* Rotate */}\n <div className=\"space-y-2 p-3 bg-muted/30 rounded-md\">\n <div className=\"flex items-center gap-2 mb-2\">\n <RotateCw className=\"h-4 w-4 text-muted-foreground\" />\n <Label className=\"text-xs font-medium\">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 className=\"space-y-3 p-3 bg-muted/30 rounded-md\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Maximize2 className=\"h-4 w-4 text-muted-foreground\" />\n <Label className=\"text-xs font-medium\">Scale</Label>\n </div>\n {!readOnly && (\n <Button\n type=\"button\"\n variant={currentValue.scaleLocked ? 'default' : 'outline'}\n size=\"icon-sm\"\n onClick={handleScaleLockToggle}\n className=\"h-6 w-6\"\n title={\n currentValue.scaleLocked\n ? 'Click to unlink X and Y scale'\n : 'Click to link X and Y scale'\n }\n >\n {currentValue.scaleLocked ? (\n <Link className=\"h-3 w-3\" />\n ) : (\n <Unlink className=\"h-3 w-3\" />\n )}\n </Button>\n )}\n </div>\n\n <div className={cn('grid gap-3', currentValue.scaleLocked ? 'grid-cols-1' : 'grid-cols-2')}>\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 className=\"space-y-3 p-3 bg-muted/30 rounded-md\">\n <Label className=\"text-xs font-medium\">Skew</Label>\n <div className=\"grid grid-cols-2 gap-3\">\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 className=\"space-y-3 p-3 bg-muted/30 rounded-md\">\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-xs font-medium\">Translate</Label>\n <Select\n value={currentValue.translateUnit}\n onValueChange={(v) => handleChange('translateUnit', v as TranslateUnit)}\n disabled={readOnly}\n >\n <SelectTrigger className=\"h-7 w-16 text-xs\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"px\">px</SelectItem>\n <SelectItem value=\"rem\">rem</SelectItem>\n <SelectItem value=\"%\">%</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <div className=\"grid grid-cols-2 gap-3\">\n <div className=\"space-y-1\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n X\n </Label>\n <Input\n type=\"number\"\n value={currentValue.translateX}\n onChange={(e) =>\n handleChange('translateX', parseFloat(e.target.value) || 0)\n }\n disabled={readOnly}\n className=\"h-8 text-sm font-mono\"\n />\n </div>\n <div className=\"space-y-1\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Y\n </Label>\n <Input\n type=\"number\"\n value={currentValue.translateY}\n onChange={(e) =>\n handleChange('translateY', parseFloat(e.target.value) || 0)\n }\n disabled={readOnly}\n className=\"h-8 text-sm font-mono\"\n />\n </div>\n </div>\n </div>\n\n {/* Transform Origin */}\n <div className=\"space-y-3 p-3 bg-muted/30 rounded-md\">\n <Label className=\"text-xs font-medium\">Transform Origin</Label>\n <div className=\"flex items-center gap-4\">\n <OriginGrid\n value={currentValue.origin}\n onChange={(v) => handleChange('origin', v)}\n disabled={readOnly}\n />\n <span className=\"text-xs text-muted-foreground capitalize\">\n {currentValue.origin.replace('-', ' ')}\n </span>\n </div>\n </div>\n\n {/* 3D Section (Collapsible) */}\n <div className=\"border border-border rounded-md overflow-hidden\">\n <button\n type=\"button\"\n onClick={() => setShow3D(!show3D)}\n className=\"w-full flex items-center justify-between p-3 bg-muted/30 hover:bg-muted/50 transition-colors\"\n >\n <div className=\"flex items-center gap-2\">\n <Box className=\"h-4 w-4 text-muted-foreground\" />\n <Label className=\"text-xs font-medium cursor-pointer\">3D Transforms</Label>\n </div>\n {show3D ? (\n <ChevronDown className=\"h-4 w-4 text-muted-foreground\" />\n ) : (\n <ChevronRight className=\"h-4 w-4 text-muted-foreground\" />\n )}\n </button>\n\n {show3D && (\n <div className=\"p-3 space-y-3 border-t border-border\">\n {/* Enable 3D checkbox */}\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id=\"enable3d\"\n checked={currentValue.enable3D}\n onCheckedChange={(checked) =>\n handle3DToggle(checked === true)\n }\n disabled={readOnly}\n />\n <Label\n htmlFor=\"enable3d\"\n className=\"text-xs text-muted-foreground cursor-pointer\"\n >\n Enable 3D Transforms\n </Label>\n </div>\n\n {currentValue.enable3D && (\n <>\n {/* Perspective */}\n <div className=\"space-y-1\">\n <Label className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n Perspective (px)\n </Label>\n <Input\n type=\"number\"\n min={100}\n max={2000}\n value={currentValue.perspective ?? 1000}\n onChange={(e) =>\n handleChange('perspective', parseInt(e.target.value, 10) || 1000)\n }\n disabled={readOnly}\n className=\"h-8 text-sm font-mono\"\n />\n </div>\n\n {/* Rotate X/Y */}\n <div className=\"grid grid-cols-2 gap-3\">\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","/**\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'\n\n// Custom field components\nexport { MediaField, createMediaField } from './MediaField'\nexport type { MediaReference } from './MediaField'\n\nexport { ColorPickerField, createColorPickerField, colorToRgba } from './ColorPickerField'\n\nexport { TiptapField, createTiptapField } from './TiptapField'\n\nexport { TiptapModal } from './TiptapModal'\nexport { TiptapModalField, createTiptapModalField } from './TiptapModalField'\n\nexport { PaddingField, createPaddingField } from './PaddingField'\n\nexport { MarginField, createMarginField } from './MarginField'\nexport type { MarginValue } from './MarginField'\n\nexport { BorderField, createBorderField } from './BorderField'\n\nexport { WidthField, createWidthField } from './WidthField'\n\nexport { DimensionsField, createDimensionsField } from './DimensionsField'\nexport {\n dimensionsValueToCSS,\n getDimensionsSummary,\n isLegacyWidthValue,\n migrateWidthValue,\n} from './shared'\nexport type {\n DimensionsValue,\n DimensionConstraint,\n DimensionsUnit,\n DimensionsMode,\n ContentAlignment,\n} from './shared'\n\nexport {\n LockedTextField,\n LockedRadioField,\n createLockedTextField,\n createLockedRadioField,\n lockedSlugField,\n lockedHomepageField,\n} from './LockedField'\n\nexport { AlignmentField, createAlignmentField } from './AlignmentField'\nexport type { Alignment } from './AlignmentField'\n\nexport {\n JustifyContentField,\n AlignItemsField,\n createJustifyContentField,\n createAlignItemsField,\n} from './FlexAlignmentField'\nexport type { JustifyContent, AlignItems } from './FlexAlignmentField'\n\nexport { VerticalAlignmentField, createVerticalAlignmentField } from './VerticalAlignmentField'\nexport type { VerticalAlignment } from './VerticalAlignmentField'\n\nexport { SizeField, createSizeField, sizeValueToCSS, getSizeClasses } from './SizeField'\nexport type { SizeValue, SizeMode, SizeUnit } from './SizeField'\n\nexport { GradientEditor } from './GradientEditor'\n\nexport { BackgroundField, createBackgroundField } from './BackgroundField'\nexport type {\n BackgroundValue,\n BackgroundImageValue,\n BackgroundOverlay,\n GradientValue,\n GradientStop,\n GradientMask,\n} from './shared'\nexport { backgroundValueToCSS, gradientValueToCSS, getBackgroundImageOpacity } from './shared'\n\nexport { ResponsiveField, createResponsiveField } from './ResponsiveField'\nexport type { Breakpoint, ResponsiveValue, VisibilityValue, ResponsiveCSSResult } from './shared'\nexport {\n BREAKPOINTS,\n isResponsiveValue,\n responsiveValueToCSS,\n cssPropertiesToString,\n visibilityValueToCSS,\n DEFAULT_VISIBILITY,\n} from './shared'\n\nexport {\n ResponsiveVisibilityField,\n createResponsiveVisibilityField,\n} from './ResponsiveVisibilityField'\n\nexport { AnimationField, createAnimationField } from './AnimationField'\nexport type {\n AnimationValue,\n EasingFunction,\n AdvancedEasingFunction,\n EntranceAnimation,\n AnimationOrigin,\n AnimationCategory,\n StaggerConfig,\n StaggerDirection,\n} from './shared'\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'\n\nexport { TransformField, createTransformField } from './TransformField'\nexport type { TransformValue, TransformOrigin } from './shared'\nexport { transformValueToCSS, DEFAULT_TRANSFORM } from './shared'\n\n// =============================================================================\n// CSS Utilities for Consumers\n// =============================================================================\n\n/**\n * CSS styles for rendering rich text content on the frontend.\n * Include this in your app's global styles or inject via <style> tag.\n *\n * Usage in Next.js app/layout.tsx:\n * ```tsx\n * import { RICHTEXT_OUTPUT_CSS } from '@delmaredigital/payload-puck/fields'\n *\n * export default function RootLayout({ children }) {\n * return (\n * <html>\n * <head>\n * <style dangerouslySetInnerHTML={{ __html: RICHTEXT_OUTPUT_CSS }} />\n * </head>\n * <body>{children}</body>\n * </html>\n * )\n * }\n * ```\n */\nexport const RICHTEXT_OUTPUT_CSS = `\n.richtext-output { font-size: 1.125rem; line-height: 1.75; color: inherit; }\n.richtext-output h1 { margin-top: 2rem; margin-bottom: 1rem; font-weight: 700; font-size: 2.25rem; line-height: 1.2; }\n.richtext-output h2 { margin-top: 2rem; margin-bottom: 1rem; font-weight: 700; font-size: 1.875rem; line-height: 1.25; }\n.richtext-output h3 { margin-top: 2rem; margin-bottom: 1rem; font-weight: 700; font-size: 1.5rem; line-height: 1.3; }\n.richtext-output h4 { margin-top: 2rem; margin-bottom: 1rem; font-weight: 700; font-size: 1.25rem; line-height: 1.35; }\n.richtext-output h5, .richtext-output h6 { margin-top: 2rem; margin-bottom: 1rem; font-weight: 700; }\n.richtext-output h1:first-child, .richtext-output h2:first-child, .richtext-output h3:first-child,\n.richtext-output h4:first-child, .richtext-output h5:first-child, .richtext-output h6:first-child { margin-top: 0; }\n.richtext-output p { margin-bottom: 1.25rem; }\n.richtext-output p:last-child { margin-bottom: 0; }\n.richtext-output ul { margin-bottom: 1.25rem; padding-left: 2rem; list-style-type: disc !important; }\n.richtext-output ol { margin-bottom: 1.25rem; padding-left: 2rem; list-style-type: decimal !important; }\n.richtext-output li { margin-bottom: 0.5rem; }\n.richtext-output li::marker { color: currentColor; }\n.richtext-output ul ul, .richtext-output ol ul { list-style-type: circle !important; margin-top: 0.5rem; margin-bottom: 0; }\n.richtext-output ol ol, .richtext-output ul ol { list-style-type: lower-alpha !important; margin-top: 0.5rem; margin-bottom: 0; }\n.richtext-output blockquote { margin: 1.5rem 0; padding-left: 1.5rem; border-left: 4px solid #e5e7eb; font-style: italic; }\n.richtext-output a { color: #2563eb; text-decoration: underline; }\n.richtext-output a:hover { opacity: 0.8; }\n.richtext-output code { background-color: #f3f4f6; padding: 0.125rem 0.25rem; border-radius: 0.25rem; font-size: 0.875rem; }\n.richtext-output mark { background-color: #fef08a; padding: 0.125rem 0.25rem; border-radius: 0.125rem; }\n.richtext-output s, .richtext-output strike { text-decoration: line-through; }\n.richtext-output sup { vertical-align: super; font-size: 0.75em; }\n.richtext-output sub { vertical-align: sub; font-size: 0.75em; }\n.richtext-output hr { border: none; border-top: 2px solid #e5e7eb; margin: 2rem 0; }\n@media (max-width: 768px) {\n .richtext-output { font-size: 1rem; }\n .richtext-output h1 { font-size: 1.875rem; }\n .richtext-output h2 { font-size: 1.5rem; }\n .richtext-output h3 { font-size: 1.25rem; }\n}\n`\n\n/**\n * Injects rich text output styles into the document head.\n * Call this on the client-side to ensure styles are loaded.\n *\n * Usage:\n * ```tsx\n * 'use client'\n * import { injectRichtextStyles } from '@delmaredigital/payload-puck/fields'\n * import { useEffect } from 'react'\n *\n * export function RichtextStyleProvider() {\n * useEffect(() => { injectRichtextStyles() }, [])\n * return null\n * }\n * ```\n */\nexport function injectRichtextStyles() {\n if (typeof document === 'undefined') return\n const styleId = 'richtext-output-injected-styles'\n if (!document.getElementById(styleId)) {\n const style = document.createElement('style')\n style.id = styleId\n style.textContent = RICHTEXT_OUTPUT_CSS\n document.head.appendChild(style)\n }\n}\n"]}
|