@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.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/editor/components/LoadingState.tsx","../../src/editor/components/VersionHistory.tsx","../../src/lib/utils.ts","../../src/editor/components/HeaderActions.tsx","../../src/fields/shared.ts","../../src/editor/components/IframeWrapper.tsx","../../src/components/ui/dialog.tsx","../../src/layouts/defaults.ts","../../src/layouts/utils.ts","../../src/layouts/LayoutWrapper.tsx","../../src/layouts/index.ts","../../src/hooks/useScrollAnimation.ts","../../src/components/AnimatedWrapper.tsx","../../src/components/layout/Container.server.tsx","../../src/components/layout/Flex.server.tsx","../../src/components/layout/Grid.server.tsx","../../src/components/layout/Section.server.tsx","../../src/components/layout/Spacer.server.tsx","../../src/components/layout/Template.server.tsx","../../src/components/typography/Heading.server.tsx","../../src/components/typography/Text.server.tsx","../../src/components/typography/RichText.server.tsx","../../src/components/media/Image.server.tsx","../../src/components/ui/button.tsx","../../src/components/ui/input.tsx","../../src/components/ui/label.tsx","../../src/fields/SizeField.tsx","../../src/theme/defaults.ts","../../src/theme/utils.ts","../../src/components/interactive/Button.server.tsx","../../src/components/interactive/Card.server.tsx","../../src/components/interactive/Divider.server.tsx","../../src/components/AccordionClient.tsx","../../src/components/interactive/Accordion.server.tsx","../../src/config/merge.ts","../../src/config/index.tsx","../../src/render/PageRenderer.tsx","../../src/editor/components/PreviewModal.tsx","../../src/editor/hooks/useUnsavedChanges.ts","../../src/theme/context.tsx","../../src/theme/example.ts","../../src/theme/index.ts","../../src/editor/PuckEditorCore.client.tsx","../../src/editor/PuckEditor.client.tsx","../../src/editor/index.ts","../../src/admin/PuckEditorView.tsx"],"names":["VersionHistory","jsxs","jsx","Loader2","memo","HeaderActions","useCallback","Check","cn","usePuck","createUsePuck","IframeWrapper","defaultLayout","useEffect","Fragment","X","init_utils","useRef","useState","Content","generateUniqueId","idCounter","defaultProps","React2","React3","cva","React4","init_defaults","ChevronDown","PreviewModal","ExternalLink","AlertTriangle","useMemo","document","PuckEditorCore","PuckEditor","data"],"mappings":"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","file":"index.mjs","sourcesContent":["'use client'\n\nimport { Loader2 } from 'lucide-react'\n\nexport interface LoadingStateProps {\n /**\n * Loading message to display\n * @default 'Loading editor...'\n */\n message?: string\n}\n\n/**\n * Loading indicator shown while the Puck editor is being loaded\n *\n * Used as the fallback for dynamic import with ssr: false\n */\nexport function LoadingState({ message = 'Loading editor...' }: LoadingStateProps) {\n return (\n <div className=\"h-screen flex items-center justify-center bg-gray-50\">\n <div className=\"text-center\">\n <Loader2 className=\"h-8 w-8 animate-spin text-gray-600 mx-auto mb-4\" />\n <p className=\"text-gray-600\">{message}</p>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { useState, useCallback, useEffect, useRef, memo } from 'react'\nimport {\n History,\n Loader2,\n Check,\n RotateCcw,\n X,\n ChevronDown,\n} from 'lucide-react'\n\n/**\n * Version entry from Payload's versions system\n */\nexport interface PageVersion {\n id: string\n parent: string\n version: {\n title?: string\n slug?: string\n _status?: 'draft' | 'published'\n updatedAt: string\n createdAt: string\n }\n createdAt: string\n updatedAt: string\n autosave?: boolean\n latest?: boolean\n}\n\nexport interface VersionHistoryProps {\n /**\n * Page ID to fetch versions for\n */\n pageId: string\n /**\n * API endpoint base path\n * @default '/api/puck/pages'\n */\n apiEndpoint?: string\n /**\n * Callback when a version is restored\n */\n onRestore?: (version: PageVersion) => void\n /**\n * Whether restore operations are disabled\n */\n disabled?: boolean\n}\n\n/**\n * Version history dropdown for the Puck editor\n *\n * Shows a list of previous versions with the ability to restore them.\n */\nexport const VersionHistory = memo(function VersionHistory({\n pageId,\n apiEndpoint = '/api/puck/pages',\n onRestore,\n disabled,\n}: VersionHistoryProps) {\n const [isOpen, setIsOpen] = useState(false)\n const [isLoading, setIsLoading] = useState(false)\n const [isRestoring, setIsRestoring] = useState(false)\n const [versions, setVersions] = useState<PageVersion[]>([])\n const [error, setError] = useState<string | null>(null)\n const [isAvailable, setIsAvailable] = useState<boolean | null>(null) // null = checking, false = not available\n const dropdownRef = useRef<HTMLDivElement>(null)\n\n // Check if versions endpoint is available on mount\n useEffect(() => {\n async function checkAvailability() {\n try {\n const response = await fetch(`${apiEndpoint}/${pageId}/versions?limit=1`, {\n method: 'GET',\n })\n // 404 means endpoint doesn't exist, other errors might be auth-related\n setIsAvailable(response.status !== 404)\n } catch {\n // Network error or other issue - assume not available\n setIsAvailable(false)\n }\n }\n checkAvailability()\n }, [apiEndpoint, pageId])\n\n // Close on outside click\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\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 // Fetch versions when dropdown opens\n const fetchVersions = useCallback(async () => {\n setIsLoading(true)\n setError(null)\n try {\n const response = await fetch(`${apiEndpoint}/${pageId}/versions?limit=20`)\n if (!response.ok) {\n throw new Error('Failed to fetch versions')\n }\n const data = await response.json()\n setVersions(data.docs || [])\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load versions')\n console.error('Error fetching versions:', err)\n } finally {\n setIsLoading(false)\n }\n }, [apiEndpoint, pageId])\n\n // Fetch versions when opening\n useEffect(() => {\n if (isOpen) {\n fetchVersions()\n }\n }, [isOpen, fetchVersions])\n\n // Handle version restore\n const handleRestore = useCallback(\n async (version: PageVersion) => {\n if (!confirm(`Restore this version from ${formatDate(version.updatedAt)}? This will overwrite current changes.`)) {\n return\n }\n\n setIsRestoring(true)\n try {\n const response = await fetch(`${apiEndpoint}/${pageId}/versions`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ versionId: version.id }),\n })\n\n if (!response.ok) {\n throw new Error('Failed to restore version')\n }\n\n onRestore?.(version)\n setIsOpen(false)\n // Reload the page to show restored version\n window.location.reload()\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to restore version')\n console.error('Error restoring version:', err)\n } finally {\n setIsRestoring(false)\n }\n },\n [apiEndpoint, pageId, onRestore]\n )\n\n // Format date for display\n function formatDate(dateStr: string): string {\n const date = new Date(dateStr)\n const now = new Date()\n const diffMs = now.getTime() - date.getTime()\n const diffMins = Math.floor(diffMs / 60000)\n const diffHours = Math.floor(diffMs / 3600000)\n const diffDays = Math.floor(diffMs / 86400000)\n\n if (diffMins < 1) return 'Just now'\n if (diffMins < 60) return `${diffMins}m ago`\n if (diffHours < 24) return `${diffHours}h ago`\n if (diffDays < 7) return `${diffDays}d ago`\n return date.toLocaleDateString()\n }\n\n // Format time for display\n function formatTime(dateStr: string): string {\n const date = new Date(dateStr)\n return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })\n }\n\n // Don't render if versions endpoint is not available or still checking\n if (isAvailable !== true) {\n return null\n }\n\n // Button styles\n const baseBtn =\n 'inline-flex items-center whitespace-nowrap px-3 py-1.5 text-sm font-medium rounded-md transition-colors'\n const secondaryBtn = `${baseBtn} text-gray-700 bg-white border border-gray-300 hover:bg-gray-100`\n\n return (\n <div ref={dropdownRef} className=\"relative\">\n {/* Trigger button */}\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n disabled={disabled}\n className={`${secondaryBtn} disabled:opacity-50 disabled:cursor-not-allowed`}\n >\n <History className=\"h-4 w-4 mr-1 flex-shrink-0\" />\n History\n <ChevronDown className=\"h-3 w-3 ml-1 flex-shrink-0\" />\n </button>\n\n {/* Dropdown panel */}\n {isOpen && (\n <div\n className=\"absolute top-full right-0 mt-1 bg-white border border-gray-200 rounded-lg shadow-lg z-50 w-80 max-h-[400px] overflow-hidden\"\n >\n {/* Header */}\n <div\n className=\"border-b border-gray-200 flex items-center justify-between px-4 py-3\"\n >\n <span className=\"font-medium text-sm text-gray-900\">Version History</span>\n <button\n type=\"button\"\n onClick={() => setIsOpen(false)}\n className=\"text-gray-400 hover:text-gray-600 transition-colors p-1\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n\n {/* Content */}\n <div className=\"max-h-[340px] overflow-y-auto\">\n {isLoading ? (\n <div\n className=\"flex items-center justify-center p-8\"\n >\n <Loader2 className=\"h-5 w-5 animate-spin text-gray-400\" />\n </div>\n ) : error ? (\n <div\n className=\"text-sm text-red-600 p-4 text-center\"\n >\n {error}\n </div>\n ) : versions.length === 0 ? (\n <div\n className=\"text-sm text-gray-500 p-4 text-center\"\n >\n No version history available\n </div>\n ) : (\n <div className=\"p-2\">\n {versions.map((version, index) => (\n <div\n key={version.id}\n className=\"hover:bg-gray-50 rounded-md transition-colors flex items-center justify-between px-3 py-2.5 gap-3\"\n >\n {/* Version info */}\n <div className=\"flex-1 min-w-0\">\n <div\n className=\"flex items-center gap-2\"\n >\n <span className=\"text-sm font-medium text-gray-900\">\n {formatDate(version.updatedAt)}\n </span>\n {index === 0 && (\n <span\n className=\"text-xs font-medium rounded-full px-2 py-0.5 bg-blue-100 text-blue-700\"\n >\n Current\n </span>\n )}\n {version.version._status === 'published' && (\n <span\n className=\"text-xs font-medium rounded-full px-2 py-0.5 bg-green-100 text-green-700\"\n >\n Published\n </span>\n )}\n {version.autosave && (\n <span\n className=\"text-xs text-gray-400\"\n title=\"Autosaved\"\n >\n (auto)\n </span>\n )}\n </div>\n <div className=\"text-xs text-gray-500 mt-0.5\">\n {formatTime(version.updatedAt)}\n {version.version.title && (\n <span> &middot; {version.version.title}</span>\n )}\n </div>\n </div>\n\n {/* Restore button (not for current version) */}\n {index > 0 && (\n <button\n type=\"button\"\n onClick={() => handleRestore(version)}\n disabled={isRestoring}\n className=\"text-xs font-medium text-blue-600 hover:text-blue-800 transition-colors disabled:opacity-50 flex items-center gap-1 px-2 py-1 flex-shrink-0\"\n >\n {isRestoring ? (\n <Loader2 className=\"h-3 w-3 animate-spin\" />\n ) : (\n <RotateCcw className=\"h-3 w-3\" />\n )}\n Restore\n </button>\n )}\n\n {/* Current indicator */}\n {index === 0 && (\n <span className=\"text-gray-400 flex-shrink-0\">\n <Check className=\"h-4 w-4\" />\n </span>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\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","'use client'\n\nimport { memo, useCallback, type ReactNode } from 'react'\nimport { createUsePuck, type Data } from '@measured/puck'\nimport {\n ArrowLeft,\n Save,\n ExternalLink,\n Loader2,\n Check,\n MousePointerClick,\n MousePointer,\n Upload,\n X,\n AlertTriangle,\n Eye,\n} from 'lucide-react'\nimport { VersionHistory } from './VersionHistory'\nimport { cn } from '../../lib/utils'\n\n// Create usePuck hook for accessing editor state\nconst usePuck = createUsePuck()\n\nexport interface HeaderActionsProps {\n /**\n * Default Puck header actions (undo/redo, publish button)\n */\n children: ReactNode\n /**\n * Handler for back button click\n */\n onBack: () => void\n /**\n * Handler for preview button click\n */\n onPreview: () => void\n /**\n * Handler for save button click\n */\n onSave: (data: Data) => void\n /**\n * Handler for publish button click (optional, uses default Puck publish if not provided)\n */\n onPublish?: (data: Data) => void\n /**\n * Whether a save operation is in progress\n */\n isSaving: boolean\n /**\n * Whether there are unsaved changes\n */\n hasUnsavedChanges: boolean\n /**\n * Last saved timestamp\n */\n lastSaved: Date | null\n /**\n * Document status from Payload (_status field)\n * Shows visual indicator for draft vs published\n */\n documentStatus?: 'draft' | 'published'\n /**\n * Whether the document has ever been published (initially or during this session)\n * Used to show \"Unpublished Changes\" vs \"Draft\" badge\n */\n wasPublished?: boolean\n /**\n * Custom actions to render at the start of the header\n */\n actionsStart?: ReactNode\n /**\n * Custom actions to render at the end of the header (before publish)\n */\n actionsEnd?: ReactNode\n /**\n * Whether to show the save draft button\n * @default true\n */\n showSaveDraft?: boolean\n /**\n * Whether to show the view page button\n * @default true\n */\n showViewPage?: boolean\n /**\n * Whether to show the interactive mode toggle\n * @default false\n * @deprecated Use the Preview button instead\n */\n showInteractiveToggle?: boolean\n /**\n * Whether to show the preview button\n * @default true\n */\n showPreviewButton?: boolean\n /**\n * Handler for opening the preview modal\n */\n onOpenPreview?: () => void\n /**\n * Whether to show the version history button\n * @default true\n */\n showVersionHistory?: boolean\n /**\n * Page ID for version history (required if showVersionHistory is true)\n */\n pageId?: string\n /**\n * API endpoint base path for version history\n * @default '/api/puck/pages'\n */\n apiEndpoint?: string\n /**\n * Error message to display (e.g., validation errors)\n */\n saveError?: string | null\n /**\n * Handler to dismiss the error message\n */\n onDismissError?: () => void\n}\n\n/**\n * Custom header actions component for the Puck editor\n *\n * Provides standard actions: Back, Edit/Interactive toggle, View Page, Save Draft\n * Also displays save status and last saved time.\n *\n * @example\n * ```tsx\n * const overrides = {\n * headerActions: ({ children }) => (\n * <HeaderActions\n * onBack={handleBack}\n * onPreview={handlePreview}\n * onSave={handleSave}\n * isSaving={isSaving}\n * hasUnsavedChanges={hasUnsavedChanges}\n * lastSaved={lastSaved}\n * >\n * {children}\n * </HeaderActions>\n * ),\n * }\n * ```\n */\nexport const HeaderActions = memo(function HeaderActions({\n children,\n onBack,\n onPreview,\n onSave,\n onPublish,\n isSaving,\n hasUnsavedChanges,\n lastSaved,\n documentStatus,\n wasPublished,\n actionsStart,\n actionsEnd,\n showSaveDraft = true,\n showViewPage = true,\n showInteractiveToggle = false,\n showPreviewButton = true,\n onOpenPreview,\n showVersionHistory = true,\n pageId,\n apiEndpoint = '/api/puck/pages',\n saveError,\n onDismissError,\n}: HeaderActionsProps) {\n const appState = usePuck((s) => s.appState)\n const dispatch = usePuck((s) => s.dispatch)\n\n const isInteractive = appState.ui.previewMode === 'interactive'\n\n const togglePreviewMode = useCallback(() => {\n dispatch({\n type: 'setUi',\n ui: {\n previewMode: isInteractive ? 'edit' : 'interactive',\n },\n })\n }, [dispatch, isInteractive])\n\n const handleSaveClick = useCallback(() => {\n onSave(appState.data)\n }, [onSave, appState.data])\n\n const handlePublishClick = useCallback(() => {\n if (onPublish) {\n onPublish(appState.data)\n }\n }, [onPublish, appState.data])\n\n // Common button base class (non-color styles that Puck doesn't override)\n const btnBase = 'inline-flex items-center whitespace-nowrap text-sm font-medium rounded-md transition-colors'\n\n return (\n <>\n {/* Custom actions at start */}\n {actionsStart}\n\n {/* Back button */}\n <button\n type=\"button\"\n onClick={onBack}\n className={cn(btnBase, \"px-3 py-1.5 bg-white text-gray-700 border border-gray-300 rounded hover:bg-gray-50\")}\n >\n <ArrowLeft className=\"h-4 w-4 mr-1 flex-shrink-0\" />\n Back\n </button>\n\n {/* Document status badge */}\n {documentStatus && (() => {\n // Determine badge state\n const isPublished = documentStatus === 'published'\n const hasUnpublishedChanges = documentStatus === 'draft' && wasPublished\n\n // Badge label based on state\n let badgeLabel: string\n\n if (isPublished) {\n badgeLabel = 'Published'\n } else if (hasUnpublishedChanges) {\n badgeLabel = 'Unpublished Changes'\n } else {\n badgeLabel = 'Draft'\n }\n\n return (\n <span\n className={cn(\n \"px-2.5 py-1 border rounded-full text-xs font-medium whitespace-nowrap\",\n isPublished && \"bg-green-100 text-green-800 border-green-300\",\n hasUnpublishedChanges && \"bg-orange-100 text-orange-700 border-orange-200\",\n !isPublished && !hasUnpublishedChanges && \"bg-amber-100 text-amber-700 border-amber-200\"\n )}\n >\n {badgeLabel}\n </span>\n )\n })()}\n\n {/* Interactive mode toggle */}\n {showInteractiveToggle && (\n <div className=\"flex gap-1\">\n <button\n type=\"button\"\n onClick={() => isInteractive && togglePreviewMode()}\n className={cn(\n \"inline-flex items-center gap-1 text-xs font-medium rounded transition-colors px-2.5 py-1.5 border\",\n !isInteractive\n ? \"bg-blue-500 text-white border-blue-500\"\n : \"bg-gray-100 text-gray-500 border-gray-200\"\n )}\n >\n <MousePointer className=\"h-3.5 w-3.5\" />\n Edit\n </button>\n <button\n type=\"button\"\n onClick={() => !isInteractive && togglePreviewMode()}\n className={cn(\n \"inline-flex items-center gap-1 text-xs font-medium rounded transition-colors px-2.5 py-1.5 border\",\n isInteractive\n ? \"bg-blue-500 text-white border-blue-500\"\n : \"bg-gray-100 text-gray-500 border-gray-200\"\n )}\n >\n <MousePointerClick className=\"h-3.5 w-3.5\" />\n Interactive\n </button>\n </div>\n )}\n\n {/* Status indicators */}\n {lastSaved && !saveError && (\n <span className=\"text-xs text-gray-500 flex items-center gap-1 whitespace-nowrap\">\n <Check className=\"h-3 w-3 flex-shrink-0\" />\n Saved {lastSaved.toLocaleTimeString()}\n </span>\n )}\n {hasUnsavedChanges && !saveError && (\n <span className=\"text-xs text-amber-600 font-medium whitespace-nowrap\">Unsaved</span>\n )}\n\n {/* Error indicator in header - clicking opens modal */}\n {saveError && (\n <button\n type=\"button\"\n onClick={() => {}} // Modal is already open when saveError exists\n className=\"flex items-center gap-1.5 px-2.5 py-1.5 bg-red-50 border border-red-200 rounded-md text-red-700 text-xs font-medium\"\n >\n <AlertTriangle className=\"h-4 w-4 text-red-500 flex-shrink-0\" />\n Error\n </button>\n )}\n\n {/* Error Modal */}\n {saveError && (\n <div\n className=\"fixed inset-0 z-[9999] flex items-center justify-center bg-black/50\"\n onClick={onDismissError}\n >\n <div\n className=\"bg-white rounded-lg shadow-xl max-w-md w-full mx-4 overflow-hidden\"\n onClick={(e) => e.stopPropagation()}\n >\n {/* Modal Header */}\n <div className=\"flex items-center gap-3 px-5 py-4 border-b border-gray-200 bg-red-50\">\n <div className=\"flex-shrink-0 w-10 h-10 rounded-full bg-red-100 flex items-center justify-center\">\n <AlertTriangle className=\"h-5 w-5 text-red-600\" />\n </div>\n <div>\n <h3 className=\"text-base font-semibold text-gray-900\">Save Failed</h3>\n <p className=\"text-sm text-gray-500\">Unable to save your changes</p>\n </div>\n </div>\n\n {/* Modal Body */}\n <div className=\"px-5 py-4\">\n <p className=\"text-sm text-gray-700\">{saveError}</p>\n </div>\n\n {/* Modal Footer */}\n <div className=\"px-5 py-4 bg-gray-50 border-t border-gray-200 flex justify-end\">\n <button\n type=\"button\"\n onClick={onDismissError}\n className=\"px-4 py-2 bg-gray-900 text-white text-sm font-medium rounded-md hover:bg-gray-800 transition-colors\"\n >\n Close\n </button>\n </div>\n </div>\n </div>\n )}\n\n {/* Preview modal button */}\n {showPreviewButton && onOpenPreview && (\n <button\n type=\"button\"\n onClick={onOpenPreview}\n disabled={isSaving}\n className={cn(\n btnBase,\n \"px-3 py-1.5 bg-blue-600 text-white border border-blue-600 rounded hover:bg-blue-700 disabled:opacity-50 disabled:cursor-not-allowed\"\n )}\n >\n <Eye className=\"h-4 w-4 mr-1 flex-shrink-0\" />\n Preview\n </button>\n )}\n\n {/* View published page in new tab */}\n {showViewPage && (\n <button\n type=\"button\"\n onClick={onPreview}\n className={cn(btnBase, \"px-3 py-1.5 bg-white text-gray-700 border border-gray-300 rounded hover:bg-gray-50\")}\n >\n <ExternalLink className=\"h-4 w-4 mr-1 flex-shrink-0\" />\n View\n </button>\n )}\n\n {/* Version History */}\n {showVersionHistory && pageId && (\n <VersionHistory\n pageId={pageId}\n apiEndpoint={apiEndpoint}\n disabled={isSaving}\n />\n )}\n\n {/* Save Draft button */}\n {showSaveDraft && (\n <button\n type=\"button\"\n onClick={handleSaveClick}\n disabled={isSaving || !hasUnsavedChanges}\n className={cn(\n btnBase,\n \"px-3 py-1.5 bg-white text-gray-700 border border-gray-300 rounded hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed\"\n )}\n >\n {isSaving ? (\n <Loader2 className=\"h-4 w-4 mr-1 flex-shrink-0 animate-spin\" />\n ) : (\n <Save className=\"h-4 w-4 mr-1 flex-shrink-0\" />\n )}\n Save\n </button>\n )}\n\n {/* Custom publish button if handler provided */}\n {onPublish && (\n <button\n type=\"button\"\n onClick={handlePublishClick}\n disabled={isSaving}\n className={cn(\n btnBase,\n \"px-3 py-1.5 bg-blue-600 text-white border border-blue-600 rounded hover:bg-blue-700 disabled:opacity-50 disabled:cursor-not-allowed\"\n )}\n >\n {isSaving ? (\n <Loader2 className=\"h-4 w-4 mr-1 flex-shrink-0 animate-spin\" />\n ) : (\n <Upload className=\"h-4 w-4 mr-1 flex-shrink-0\" />\n )}\n Publish\n </button>\n )}\n\n {/* Custom actions at end */}\n {actionsEnd}\n\n {/* Default Puck actions (undo/redo, publish button if no custom handler) */}\n {!onPublish && children}\n </>\n )\n})\n","/**\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","'use client'\n\nimport { memo, useEffect, useMemo, type ReactNode, type ComponentType } from 'react'\nimport { createUsePuck } from '@measured/puck'\nimport type { LayoutDefinition } from '../../layouts'\nimport { backgroundValueToCSS, type BackgroundValue } from '../../fields/shared'\n\n// Create usePuck hook for accessing editor state\nconst usePuck = createUsePuck()\n\n/**\n * Layout style configuration for theme-aware preview\n * @deprecated Use LayoutDefinition with editorBackground and editorDarkMode instead\n */\nexport interface LayoutStyle {\n /**\n * CSS background value (color, gradient, etc.)\n */\n background: string\n /**\n * Whether this layout uses dark mode styling\n */\n isDark: boolean\n /**\n * Header component to render above the page content in the editor preview\n */\n header?: ComponentType\n /**\n * Footer component to render below the page content in the editor preview\n */\n footer?: ComponentType\n}\n\n/**\n * Internal layout config used by the iframe wrapper\n */\ninterface InternalLayoutConfig {\n background: string\n isDark: boolean\n header?: ComponentType\n footer?: ComponentType\n stickyHeaderHeight?: number\n}\n\nexport interface IframeWrapperProps {\n children: ReactNode\n /**\n * The iframe document to apply styles to\n */\n document?: Document\n /**\n * Layout definitions - the primary way to configure layouts.\n * Reads header, footer, editorBackground, and editorDarkMode from each layout.\n */\n layouts?: LayoutDefinition[]\n /**\n * Layout style configurations keyed by layout value\n * @deprecated Use `layouts` prop instead\n */\n layoutStyles?: Record<string, LayoutStyle>\n /**\n * Key in root.props to read layout value from\n * @default 'pageLayout'\n */\n layoutKey?: string\n /**\n * Default layout to use if none specified\n * @default 'default'\n */\n defaultLayout?: string\n}\n\n/**\n * Default layout config\n */\nconst DEFAULT_LAYOUT_CONFIG: InternalLayoutConfig = {\n background: '#ffffff',\n isDark: false,\n}\n\n/**\n * Theme-aware iframe wrapper component\n *\n * Uses usePuck to read the pageLayout from root.props and applies\n * appropriate background and theme class to the preview iframe.\n *\n * @example\n * ```tsx\n * // Using layouts (recommended)\n * const overrides = {\n * iframe: ({ children, document }) => (\n * <IframeWrapper\n * document={document}\n * layouts={[\n * { value: 'default', label: 'Default', header: Header, footer: Footer },\n * { value: 'landing', label: 'Landing', editorBackground: '#f8fafc' },\n * ]}\n * >\n * {children}\n * </IframeWrapper>\n * ),\n * }\n * ```\n */\nexport const IframeWrapper = memo(function IframeWrapper({\n children,\n document: iframeDoc,\n layouts,\n layoutStyles,\n layoutKey = 'pageLayout',\n defaultLayout = 'default',\n}: IframeWrapperProps) {\n const appState = usePuck((s) => s.appState)\n\n // Check if we're in interactive mode (links should be clickable)\n const isInteractive = appState.ui.previewMode === 'interactive'\n\n // Read layout value and page-level overrides from root props\n const rootProps = appState.data.root?.props as Record<string, unknown> | undefined\n const layoutValue = (rootProps?.[layoutKey] as string) || defaultLayout\n\n // Page-level overrides\n const showHeaderOverride = rootProps?.showHeader as 'default' | 'show' | 'hide' | undefined\n const showFooterOverride = rootProps?.showFooter as 'default' | 'show' | 'hide' | undefined\n const pageBackground = rootProps?.pageBackground as BackgroundValue | null | undefined\n\n // Convert layouts array to config map, or use deprecated layoutStyles\n const layoutConfigMap = useMemo<Record<string, InternalLayoutConfig>>(() => {\n // If layouts prop provided, convert to internal format\n if (layouts) {\n const map: Record<string, InternalLayoutConfig> = {}\n for (const layout of layouts) {\n map[layout.value] = {\n background: layout.editorBackground ?? '#ffffff',\n isDark: layout.editorDarkMode ?? false,\n header: layout.header,\n footer: layout.footer,\n stickyHeaderHeight: layout.stickyHeaderHeight,\n }\n }\n return map\n }\n\n // Fall back to deprecated layoutStyles if provided\n if (layoutStyles) {\n return layoutStyles\n }\n\n // Default fallback\n return { default: DEFAULT_LAYOUT_CONFIG }\n }, [layouts, layoutStyles])\n\n // Get config for current layout\n const layoutConfig = layoutConfigMap[layoutValue] || layoutConfigMap[defaultLayout] || DEFAULT_LAYOUT_CONFIG\n\n useEffect(() => {\n if (!iframeDoc) return\n\n const body = iframeDoc.body\n const html = iframeDoc.documentElement\n\n // Apply background - page-level override takes precedence\n if (pageBackground) {\n const bgStyles = backgroundValueToCSS(pageBackground)\n // Clear previous background styles\n body.style.background = ''\n body.style.backgroundColor = ''\n body.style.backgroundImage = ''\n // Apply new styles\n Object.assign(body.style, bgStyles)\n } else {\n body.style.background = layoutConfig.background\n }\n body.style.backgroundAttachment = 'fixed'\n body.style.minHeight = '100vh'\n\n // Apply theme class for dark/light mode\n if (layoutConfig.isDark) {\n html.classList.add('dark')\n html.classList.remove('light')\n body.style.color = '#ffffff'\n } else {\n html.classList.remove('dark')\n html.classList.add('light')\n body.style.color = '#1f2937' // gray-800\n }\n\n // Inject richtext-output styles into the iframe for proper heading/list rendering\n const RICHTEXT_STYLES_ID = 'puck-richtext-output-styles'\n if (!iframeDoc.getElementById(RICHTEXT_STYLES_ID)) {\n const style = iframeDoc.createElement('style')\n style.id = RICHTEXT_STYLES_ID\n style.textContent = `\n /* Rich Text Output Styles for Puck Preview */\n .richtext-output {\n font-size: 1.125rem;\n line-height: 1.75;\n color: inherit;\n }\n .richtext-output h1 {\n margin-top: 2rem;\n margin-bottom: 1rem;\n font-weight: 700;\n font-size: 2.25rem;\n line-height: 1.2;\n }\n .richtext-output h1:first-child { margin-top: 0; }\n .richtext-output h2 {\n margin-top: 2rem;\n margin-bottom: 1rem;\n font-weight: 700;\n font-size: 1.875rem;\n line-height: 1.25;\n }\n .richtext-output h2:first-child { margin-top: 0; }\n .richtext-output h3 {\n margin-top: 2rem;\n margin-bottom: 1rem;\n font-weight: 700;\n font-size: 1.5rem;\n line-height: 1.3;\n }\n .richtext-output h3:first-child { margin-top: 0; }\n .richtext-output h4 {\n margin-top: 2rem;\n margin-bottom: 1rem;\n font-weight: 700;\n font-size: 1.25rem;\n line-height: 1.35;\n }\n .richtext-output h4:first-child { margin-top: 0; }\n .richtext-output p {\n margin-bottom: 1.25rem;\n }\n .richtext-output p:last-child { margin-bottom: 0; }\n .richtext-output ul {\n margin-bottom: 1.25rem;\n padding-left: 2rem;\n list-style-type: disc !important;\n }\n .richtext-output ol {\n margin-bottom: 1.25rem;\n padding-left: 2rem;\n list-style-type: decimal !important;\n }\n .richtext-output li {\n margin-bottom: 0.5rem;\n display: list-item !important;\n }\n .richtext-output li::marker {\n color: currentColor;\n }\n .richtext-output ul ul,\n .richtext-output ol ul {\n list-style-type: circle !important;\n margin-top: 0.5rem;\n margin-bottom: 0;\n }\n .richtext-output ul ul ul,\n .richtext-output ol ul ul {\n list-style-type: square !important;\n }\n .richtext-output ol ol,\n .richtext-output ul ol {\n list-style-type: lower-alpha !important;\n margin-top: 0.5rem;\n margin-bottom: 0;\n }\n .richtext-output blockquote {\n margin: 1.5rem 0;\n padding-left: 1.5rem;\n border-left: 4px solid #e5e7eb;\n font-style: italic;\n }\n .richtext-output a {\n color: #2563eb;\n text-decoration: underline;\n }\n .richtext-output a:hover { opacity: 0.8; }\n .richtext-output code {\n background-color: #f3f4f6;\n padding: 0.125rem 0.25rem;\n border-radius: 0.25rem;\n font-size: 0.875rem;\n }\n .richtext-output mark {\n background-color: #fef08a;\n padding: 0.125rem 0.25rem;\n border-radius: 0.125rem;\n }\n .richtext-output s,\n .richtext-output strike {\n text-decoration: line-through;\n }\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 iframeDoc.head.appendChild(style)\n }\n }, [iframeDoc, layoutConfig, pageBackground])\n\n // Get header/footer components from layout config\n const LayoutHeader = layoutConfig.header\n const LayoutFooter = layoutConfig.footer\n\n // Determine header/footer visibility based on page-level overrides\n // 'default' or undefined = use layout setting\n // 'show' = always show (even if layout doesn't have one - use layout's component)\n // 'hide' = always hide\n const shouldShowHeader =\n showHeaderOverride === 'hide'\n ? false\n : showHeaderOverride === 'show'\n ? !!LayoutHeader\n : !!LayoutHeader\n\n const shouldShowFooter =\n showFooterOverride === 'hide'\n ? false\n : showFooterOverride === 'show'\n ? !!LayoutFooter\n : !!LayoutFooter\n\n // If we have header or footer to show, wrap in flex container to ensure proper layout\n if (shouldShowHeader || shouldShowFooter) {\n // Calculate content padding for sticky headers (only if header is actually shown)\n const contentStyle: React.CSSProperties = {\n flex: 1,\n position: 'relative',\n // Add padding-top for sticky headers so content doesn't render behind them\n ...(shouldShowHeader && layoutConfig.stickyHeaderHeight && { paddingTop: layoutConfig.stickyHeaderHeight }),\n }\n\n // Disable pointer events on header/footer in edit mode to prevent accidental clicks\n const headerFooterStyle: React.CSSProperties = isInteractive\n ? {}\n : { pointerEvents: 'none' }\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', minHeight: '100vh' }}>\n {shouldShowHeader && LayoutHeader && (\n <div style={headerFooterStyle}>\n <LayoutHeader />\n </div>\n )}\n <div style={contentStyle}>{children}</div>\n {shouldShowFooter && LayoutFooter && (\n <div style={headerFooterStyle}>\n <LayoutFooter />\n </div>\n )}\n </div>\n )\n }\n\n return <>{children}</>\n})\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","/**\n * Default Layout Definitions\n *\n * These provide sensible defaults for common page layout patterns.\n * Users can override or extend these in their own configuration.\n */\n\nimport type { LayoutDefinition, LayoutConfig } from './types'\n\n/**\n * Default layout - standard content width with padding\n */\nexport const defaultLayout: LayoutDefinition = {\n value: 'default',\n label: 'Default',\n description: 'Standard page layout with contained content width',\n classes: {\n wrapper: '',\n container: 'mx-auto px-4 sm:px-6 lg:px-8',\n content: '',\n },\n maxWidth: '1200px',\n fullWidth: false,\n}\n\n/**\n * Landing layout - optimized for marketing/landing pages\n */\nexport const landingLayout: LayoutDefinition = {\n value: 'landing',\n label: 'Landing',\n description: 'Full-width sections with no global container constraints',\n classes: {\n wrapper: '',\n container: '',\n content: '',\n },\n fullWidth: true,\n}\n\n/**\n * Full width layout - edge-to-edge content\n */\nexport const fullWidthLayout: LayoutDefinition = {\n value: 'full-width',\n label: 'Full Width',\n description: 'Content spans the full viewport width',\n classes: {\n wrapper: 'w-full',\n container: 'w-full',\n content: '',\n },\n maxWidth: '100%',\n fullWidth: true,\n}\n\n/**\n * Narrow layout - ideal for blog posts and articles\n */\nexport const narrowLayout: LayoutDefinition = {\n value: 'narrow',\n label: 'Narrow',\n description: 'Narrow content width for optimal reading experience',\n classes: {\n wrapper: '',\n container: 'mx-auto px-4 sm:px-6',\n content: '',\n },\n maxWidth: '768px',\n fullWidth: false,\n}\n\n/**\n * Wide layout - extra wide content area\n */\nexport const wideLayout: LayoutDefinition = {\n value: 'wide',\n label: 'Wide',\n description: 'Wider content area for dashboards or galleries',\n classes: {\n wrapper: '',\n container: 'mx-auto px-4 sm:px-6 lg:px-8',\n content: '',\n },\n maxWidth: '1440px',\n fullWidth: false,\n}\n\n/**\n * Default layouts included with the plugin\n */\nexport const DEFAULT_LAYOUTS: LayoutDefinition[] = [\n defaultLayout,\n landingLayout,\n fullWidthLayout,\n]\n\n/**\n * Extended layouts for users who want more options\n */\nexport const EXTENDED_LAYOUTS: LayoutDefinition[] = [\n defaultLayout,\n landingLayout,\n fullWidthLayout,\n narrowLayout,\n wideLayout,\n]\n\n/**\n * Default layout configuration\n */\nexport const DEFAULT_LAYOUT_CONFIG: LayoutConfig = {\n layouts: DEFAULT_LAYOUTS,\n defaultLayout: 'default',\n}\n","/**\n * Layout Utilities\n *\n * Functions for working with layout configurations.\n */\n\nimport type { LayoutDefinition, LayoutConfig, LayoutOption } from './types'\nimport { DEFAULT_LAYOUTS, DEFAULT_LAYOUT_CONFIG } from './defaults'\n\n/**\n * Resolves a layout config, merging with defaults if needed\n */\nexport function resolveLayoutConfig(config?: Partial<LayoutConfig>): LayoutConfig {\n if (!config) return DEFAULT_LAYOUT_CONFIG\n\n return {\n layouts: config.layouts ?? DEFAULT_LAYOUTS,\n defaultLayout: config.defaultLayout ?? 'default',\n }\n}\n\n/**\n * Gets a layout definition by value\n */\nexport function getLayout(\n layouts: LayoutDefinition[],\n value: string,\n fallback = 'default'\n): LayoutDefinition | undefined {\n const layout = layouts.find((l) => l.value === value)\n if (layout) return layout\n\n // Try fallback\n if (value !== fallback) {\n return layouts.find((l) => l.value === fallback)\n }\n\n // Return first layout if nothing matches\n return layouts[0]\n}\n\n/**\n * Converts layout definitions to Puck select options\n */\nexport function layoutsToOptions(layouts: LayoutDefinition[]): LayoutOption[] {\n return layouts.map(({ value, label, description }) => ({\n value,\n label,\n description,\n }))\n}\n\n/**\n * Converts layout definitions to Payload select options\n */\nexport function layoutsToPayloadOptions(\n layouts: LayoutDefinition[]\n): Array<{ label: string; value: string }> {\n return layouts.map(({ value, label }) => ({\n label,\n value,\n }))\n}\n\n/**\n * Creates a custom layout definition\n */\nexport function createLayout(\n config: Omit<LayoutDefinition, 'value' | 'label'> & {\n value: string\n label: string\n }\n): LayoutDefinition {\n return {\n ...config,\n }\n}\n\n/**\n * Merges layout configurations\n */\nexport function mergeLayouts(\n base: LayoutDefinition[],\n custom: LayoutDefinition[],\n options?: {\n /** Replace base layouts instead of merging */\n replace?: boolean\n /** Exclude these layout values from base */\n exclude?: string[]\n }\n): LayoutDefinition[] {\n if (options?.replace) {\n return custom\n }\n\n let result = [...base]\n\n // Exclude specified layouts\n if (options?.exclude) {\n result = result.filter((l) => !options.exclude!.includes(l.value))\n }\n\n // Merge/override with custom layouts\n for (const customLayout of custom) {\n const existingIndex = result.findIndex((l) => l.value === customLayout.value)\n if (existingIndex >= 0) {\n result[existingIndex] = customLayout\n } else {\n result.push(customLayout)\n }\n }\n\n return result\n}\n","/**\n * Layout Wrapper Component\n *\n * Wraps page content with layout-specific styling and structure.\n */\n\nimport type { ReactNode, CSSProperties } from 'react'\nimport type { LayoutDefinition } from './types'\nimport { backgroundValueToCSS, type BackgroundValue } from '../fields/shared'\n\n/**\n * Page-level overrides for layout settings\n */\nexport interface PageOverrides {\n /** Override header visibility: 'default' uses layout, 'show'/'hide' overrides */\n showHeader?: 'default' | 'show' | 'hide'\n /** Override footer visibility: 'default' uses layout, 'show'/'hide' overrides */\n showFooter?: 'default' | 'show' | 'hide'\n /** Page background (overrides any layout background) */\n background?: BackgroundValue | null\n /** Page max width: 'default' uses layout, otherwise uses the value */\n maxWidth?: string\n}\n\nexport interface LayoutWrapperProps {\n children: ReactNode\n layout?: LayoutDefinition\n className?: string\n /** Page-level overrides from Puck root props */\n overrides?: PageOverrides\n}\n\n/**\n * Styles for sticky footer layout - pushes footer to bottom of viewport\n */\nconst stickyFooterContainerStyle: CSSProperties = {\n minHeight: '100vh',\n display: 'flex',\n flexDirection: 'column',\n}\n\nconst stickyFooterMainStyle: CSSProperties = {\n flex: 1,\n}\n\n/**\n * Applies layout configuration to page content\n */\nexport function LayoutWrapper({ children, layout, className, overrides }: LayoutWrapperProps) {\n // No layout - render children directly (but still apply background if set)\n if (!layout) {\n if (overrides?.background) {\n const bgStyles = backgroundValueToCSS(overrides.background)\n return <div style={{ minHeight: '100vh', ...bgStyles }}>{children}</div>\n }\n return <>{children}</>\n }\n\n // Get header/footer components\n const Header = layout.header\n const Footer = layout.footer\n\n // Determine header/footer visibility based on overrides\n const shouldShowHeader =\n overrides?.showHeader === 'hide'\n ? false\n : overrides?.showHeader === 'show'\n ? true\n : !!Header\n\n const shouldShowFooter =\n overrides?.showFooter === 'hide'\n ? false\n : overrides?.showFooter === 'show'\n ? true\n : !!Footer\n\n // Sticky footer is enabled by default - check for explicit false\n const useStickyFooter = layout.stickyFooter !== false\n\n // Calculate main content style with sticky header offset\n const mainStyle: CSSProperties = {\n ...(layout.stickyHeaderHeight && shouldShowHeader ? { paddingTop: layout.stickyHeaderHeight } : {}),\n ...(useStickyFooter ? stickyFooterMainStyle : {}),\n }\n\n // Build outer container background styles\n // Page override takes precedence, then falls back to layout wrapper background\n const outerBackgroundStyles: CSSProperties = overrides?.background\n ? backgroundValueToCSS(overrides.background)\n : {\n ...(layout.styles?.wrapper?.background !== undefined\n ? { background: layout.styles.wrapper.background }\n : {}),\n ...(layout.styles?.wrapper?.backgroundAttachment !== undefined\n ? { backgroundAttachment: layout.styles.wrapper.backgroundAttachment }\n : {}),\n }\n\n // Get effective max width (override or layout default)\n const effectiveMaxWidth =\n overrides?.maxWidth && overrides.maxWidth !== 'default'\n ? overrides.maxWidth\n : layout.maxWidth\n\n // Helper to wrap content with sticky footer container if needed\n const wrapWithStickyFooter = (content: ReactNode) => {\n if (useStickyFooter) {\n return (\n <div style={{ ...stickyFooterContainerStyle, ...outerBackgroundStyles }}>\n {content}\n </div>\n )\n }\n // Non-sticky-footer: still apply background if set\n const hasBackground = Object.keys(outerBackgroundStyles).length > 0\n if (hasBackground) {\n return <div style={{ minHeight: '100vh', ...outerBackgroundStyles }}>{content}</div>\n }\n return <>{content}</>\n }\n\n // Custom wrapper component takes precedence\n if (layout.wrapper) {\n const CustomWrapper = layout.wrapper\n return wrapWithStickyFooter(\n <>\n {shouldShowHeader && Header && <Header />}\n <main style={Object.keys(mainStyle).length > 0 ? mainStyle : undefined}>\n <CustomWrapper>{children}</CustomWrapper>\n </main>\n {shouldShowFooter && Footer && <Footer />}\n </>\n )\n }\n\n // Build wrapper styles\n const wrapperStyle: CSSProperties = {\n ...layout.styles?.wrapper,\n }\n\n // Build container styles with effective max width\n const containerStyle: CSSProperties = {\n ...(effectiveMaxWidth && !layout.fullWidth ? { maxWidth: effectiveMaxWidth } : {}),\n ...layout.styles?.container,\n }\n\n // Build content styles\n const contentStyle: CSSProperties = {\n ...layout.styles?.content,\n }\n\n // Build data attributes\n const dataAttrs: Record<string, string> = {\n 'data-layout': layout.value,\n ...layout.dataAttributes,\n }\n\n // For landing/full-width layouts, render without container constraints\n if (layout.fullWidth) {\n return wrapWithStickyFooter(\n <>\n {shouldShowHeader && Header && <Header />}\n <main\n className={[layout.classes?.wrapper, className].filter(Boolean).join(' ') || undefined}\n style={{\n ...mainStyle,\n ...(Object.keys(wrapperStyle).length > 0 ? wrapperStyle : {}),\n }}\n {...dataAttrs}\n >\n {children}\n </main>\n {shouldShowFooter && Footer && <Footer />}\n </>\n )\n }\n\n // Standard layout with container\n return wrapWithStickyFooter(\n <>\n {shouldShowHeader && Header && <Header />}\n <main\n className={layout.classes?.wrapper || undefined}\n style={{\n ...mainStyle,\n ...(Object.keys(wrapperStyle).length > 0 ? wrapperStyle : {}),\n }}\n {...dataAttrs}\n >\n <div\n className={[layout.classes?.container, className].filter(Boolean).join(' ') || undefined}\n style={Object.keys(containerStyle).length > 0 ? containerStyle : undefined}\n >\n <div\n className={layout.classes?.content || undefined}\n style={Object.keys(contentStyle).length > 0 ? contentStyle : undefined}\n >\n {children}\n </div>\n </div>\n </main>\n {shouldShowFooter && Footer && <Footer />}\n </>\n )\n}\n","/**\n * Layouts Module\n *\n * Dynamic page layout system for payload-puck.\n *\n * @example\n * ```tsx\n * import {\n * DEFAULT_LAYOUTS,\n * createLayout,\n * mergeLayouts,\n * } from '@delmaredigital/payload-puck/layouts'\n *\n * // Create custom layouts\n * const customLayouts = mergeLayouts(DEFAULT_LAYOUTS, [\n * createLayout({\n * value: 'blog',\n * label: 'Blog Post',\n * maxWidth: '720px',\n * classes: { container: 'mx-auto px-4 prose' },\n * }),\n * ])\n * ```\n */\n\n// Types\nexport type {\n LayoutOption,\n LayoutClasses,\n LayoutStyles,\n LayoutDefinition,\n LayoutConfig,\n LayoutWrapperProps,\n} from './types'\n\n// Defaults\nexport {\n defaultLayout,\n landingLayout,\n fullWidthLayout,\n narrowLayout,\n wideLayout,\n DEFAULT_LAYOUTS,\n EXTENDED_LAYOUTS,\n DEFAULT_LAYOUT_CONFIG,\n} from './defaults'\n\n// Utilities\nexport {\n resolveLayoutConfig,\n getLayout,\n layoutsToOptions,\n layoutsToPayloadOptions,\n createLayout,\n mergeLayouts,\n} from './utils'\n\n// Components\nexport { LayoutWrapper, type LayoutWrapperProps as LayoutWrapperComponentProps, type PageOverrides } from './LayoutWrapper'\n","'use client'\n\n/**\n * useScrollAnimation - Hook for scroll-triggered animations\n *\n * Uses IntersectionObserver to detect when an element enters the viewport.\n * Perfect for triggering entrance animations, lazy loading, or scroll-based effects.\n */\n\nimport { useRef, useState, useEffect, useCallback } from 'react'\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface UseScrollAnimationOptions {\n /**\n * Whether to trigger animation on scroll into view.\n * If false, isInView will always be true.\n * @default true\n */\n triggerOnScroll?: boolean\n\n /**\n * Threshold for intersection (0-1).\n * 0 = trigger as soon as any pixel is visible.\n * 1 = trigger only when fully visible.\n * @default 0.1\n */\n threshold?: number\n\n /**\n * Whether to only trigger once.\n * If true, hasAnimated will stay true after first trigger.\n * @default true\n */\n once?: boolean\n\n /**\n * Root margin for intersection observer.\n * Allows triggering before/after the element enters the viewport.\n * @example \"-50px\" // Trigger 50px before entering viewport\n * @example \"100px 0px\" // 100px top/bottom, 0px left/right\n * @default \"0px\"\n */\n rootMargin?: string\n\n /**\n * Delay in milliseconds before setting isInView to true.\n * Useful for staggering animations.\n * @default 0\n */\n delay?: number\n}\n\nexport interface UseScrollAnimationResult<T extends HTMLElement = HTMLElement> {\n /**\n * Ref to attach to the element you want to observe\n */\n ref: React.RefObject<T | null>\n\n /**\n * Whether the element is currently in view\n */\n isInView: boolean\n\n /**\n * Whether the element has ever been in view\n * (useful for once-only animations)\n */\n hasAnimated: boolean\n\n /**\n * Manually reset the animation state\n */\n reset: () => void\n}\n\n// =============================================================================\n// Hook Implementation\n// =============================================================================\n\nexport function useScrollAnimation<T extends HTMLElement = HTMLElement>(\n options: UseScrollAnimationOptions = {}\n): UseScrollAnimationResult<T> {\n const {\n triggerOnScroll = true,\n threshold = 0.1,\n once = true,\n rootMargin = '0px',\n delay = 0,\n } = options\n\n const ref = useRef<T | null>(null)\n // Always start with isInView: false to allow initial → animate transition\n const [isInView, setIsInView] = useState(false)\n const [hasAnimated, setHasAnimated] = useState(false)\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const hasMountedRef = useRef(false)\n\n // Reset function\n const reset = useCallback(() => {\n setIsInView(false)\n setHasAnimated(false)\n hasMountedRef.current = false\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n timeoutRef.current = null\n }\n }, [])\n\n useEffect(() => {\n // If not triggering on scroll, animate immediately after mount\n // Use requestAnimationFrame to ensure the initial state is rendered first\n if (!triggerOnScroll) {\n // Skip if already mounted (prevents re-triggering on re-renders)\n if (hasMountedRef.current) return\n hasMountedRef.current = true\n\n // Use double RAF to ensure browser has painted initial state\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (delay > 0) {\n timeoutRef.current = setTimeout(() => {\n setIsInView(true)\n setHasAnimated(true)\n }, delay)\n } else {\n setIsInView(true)\n setHasAnimated(true)\n }\n })\n })\n return\n }\n\n // If once mode and already animated, skip observer setup\n if (once && hasAnimated) {\n return\n }\n\n const element = ref.current\n if (!element) return\n\n // Check if IntersectionObserver is available (SSR safety)\n if (typeof IntersectionObserver === 'undefined') {\n setIsInView(true)\n setHasAnimated(true)\n return\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n const [entry] = entries\n const inView = entry.isIntersecting\n\n if (inView) {\n if (delay > 0) {\n // Apply delay before setting isInView\n timeoutRef.current = setTimeout(() => {\n setIsInView(true)\n setHasAnimated(true)\n }, delay)\n } else {\n setIsInView(true)\n setHasAnimated(true)\n }\n\n // If once mode, disconnect observer after triggering\n if (once) {\n observer.disconnect()\n }\n } else if (!once) {\n // Only update isInView to false if not in once mode\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n timeoutRef.current = null\n }\n setIsInView(false)\n }\n },\n {\n threshold,\n rootMargin,\n }\n )\n\n observer.observe(element)\n\n return () => {\n observer.disconnect()\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n timeoutRef.current = null\n }\n }\n }, [triggerOnScroll, threshold, once, rootMargin, delay, hasAnimated])\n\n return {\n ref,\n isInView,\n hasAnimated,\n reset,\n }\n}\n","'use client'\n\n/**\n * AnimatedWrapper - Client component for scroll-triggered animations\n *\n * Wraps children with animation support using IntersectionObserver.\n * Handles both preset entrance animations and custom transitions.\n * Supports 27 animation presets with customizable intensity, easing, and origin.\n */\n\nimport type { ReactNode, CSSProperties, ElementType } from 'react'\nimport { useScrollAnimation } from '../hooks/useScrollAnimation'\nimport {\n getEntranceAnimationStyles,\n animationValueToCSS,\n type AnimationValue,\n} from '../fields/shared'\n\nexport interface AnimatedWrapperProps {\n /** Animation configuration from the component */\n animation: AnimationValue | null | undefined\n /** Child content to animate */\n children: ReactNode\n /** Additional CSS classes */\n className?: string\n /** Inline styles */\n style?: CSSProperties\n /** HTML element to render as (default: 'div') */\n as?: ElementType\n}\n\n/**\n * Wraps children with scroll-triggered animation support.\n *\n * For preset animations: Applies initial/animate inline styles\n * when element enters viewport.\n *\n * For custom animations: Applies CSS transition properties.\n *\n * If no animation is set, renders children without a wrapper div.\n */\nexport function AnimatedWrapper({\n animation,\n children,\n className,\n style,\n as: Component = 'div',\n}: AnimatedWrapperProps) {\n // Check if animation should be applied\n const hasAnimation = animation && (\n (animation.mode === 'preset' && animation.entrance && animation.entrance !== 'none') ||\n animation.mode === 'custom'\n )\n\n // If no animation, render children directly without wrapper\n if (!hasAnimation) {\n // If there's a className or style, we still need to wrap\n if (className || style) {\n return <Component className={className} style={style}>{children}</Component>\n }\n return <>{children}</>\n }\n\n // Use the scroll animation hook\n const { ref, isInView } = useScrollAnimation({\n triggerOnScroll: animation.triggerOnScroll ?? true,\n threshold: animation.triggerThreshold ?? 0.1,\n once: animation.triggerOnce ?? true,\n rootMargin: animation.triggerMargin,\n })\n\n // Handle preset entrance animations\n if (animation.mode === 'preset') {\n const { initial, animate, duration, delay, easing, origin } = getEntranceAnimationStyles(animation)\n\n // Apply initial or animate styles based on visibility\n const animationStyles = isInView ? animate : initial\n\n // Build transition string with all relevant properties\n const transitionProperties = [\n `opacity ${duration}ms ${easing} ${delay}ms`,\n `transform ${duration}ms ${easing} ${delay}ms`,\n `filter ${duration}ms ${easing} ${delay}ms`,\n ].join(', ')\n\n return (\n <Component\n ref={ref}\n className={className}\n style={{\n ...style,\n ...animationStyles,\n transition: transitionProperties,\n transformOrigin: origin,\n }}\n >\n {children}\n </Component>\n )\n }\n\n // Handle custom transition mode\n const customStyles = animationValueToCSS(animation)\n\n return (\n <Component\n ref={ref}\n className={className}\n style={{\n ...style,\n ...customStyles,\n // Apply opacity for visibility-based transitions\n opacity: isInView ? 1 : 0,\n }}\n >\n {children}\n </Component>\n )\n}\n","/**\n * Container Component - Server-safe Puck Configuration\n *\n * Content wrapper with max-width and background options.\n * Uses Puck's slot system for nesting other components.\n * Uses Tailwind classes for layout, inline styles for dynamic user values.\n *\n * This is a server-safe version with NO fields property (only slot for content).\n * For the full editor version with fields, use Container.tsx\n *\n * Responsive Controls:\n * - dimensions: Different max-width at different breakpoints\n * - customPadding: Different outer padding at different breakpoints\n * - innerPadding: Different inner padding at different breakpoints\n * - margin: Different margins at different breakpoints\n * - visibility: Show/hide at different breakpoints\n */\n\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n cn,\n dimensionsValueToCSS,\n borderValueToCSS,\n paddingValueToCSS,\n marginValueToCSS,\n backgroundValueToCSS,\n responsiveValueToCSS,\n visibilityValueToCSS,\n type PaddingValue,\n type BorderValue,\n type DimensionsValue,\n type BackgroundValue,\n type AnimationValue,\n type ResponsiveValue,\n type VisibilityValue,\n} from '../../fields/shared'\nimport { AnimatedWrapper } from '../AnimatedWrapper'\n\n// Simple ID generator for server-side rendering\nlet idCounter = 0\nfunction generateUniqueId(): string {\n return `c${(++idCounter).toString(36)}${Math.random().toString(36).slice(2, 6)}`\n}\n\nexport interface ContainerProps {\n content: unknown\n // Outer (section-level) options\n background: BackgroundValue | null\n customPadding: ResponsiveValue<PaddingValue> | PaddingValue | null\n dimensions: ResponsiveValue<DimensionsValue> | DimensionsValue | null\n border: BorderValue | null\n margin: ResponsiveValue<PaddingValue> | PaddingValue | null\n animation: AnimationValue | null\n // Inner (content container) options\n innerBackground: BackgroundValue | null\n innerPadding: ResponsiveValue<PaddingValue> | PaddingValue | null\n innerBorder: BorderValue | null\n // Responsive visibility\n visibility: VisibilityValue | null\n}\n\nconst defaultProps: ContainerProps = {\n content: [],\n background: null,\n customPadding: null,\n dimensions: null,\n border: null,\n margin: null,\n animation: null,\n innerBackground: null,\n innerPadding: null,\n innerBorder: null,\n visibility: null,\n}\n\nexport const ContainerConfig: ComponentConfig = {\n label: 'Container',\n fields: {\n content: { type: 'slot' },\n },\n defaultProps,\n render: ({\n content: Content,\n background,\n customPadding,\n dimensions,\n border,\n margin,\n animation,\n innerBackground,\n innerPadding,\n innerBorder,\n visibility,\n }) => {\n // Generate unique IDs for CSS targeting (server-safe)\n const uniqueId = generateUniqueId()\n const outerClass = `puck-container-outer-${uniqueId}`\n const innerClass = `puck-container-inner-${uniqueId}`\n\n // Collect all media query CSS\n const mediaQueries: string[] = []\n\n // Generate outer wrapper styles from BackgroundValue\n const outerBackgroundStyles = backgroundValueToCSS(background)\n const outerStyles: React.CSSProperties = {\n ...outerBackgroundStyles,\n }\n\n // Add outer padding with responsive support\n const outerPaddingResult = responsiveValueToCSS(\n customPadding,\n (v) => ({ padding: paddingValueToCSS(v) }),\n outerClass\n )\n Object.assign(outerStyles, outerPaddingResult.baseStyles)\n if (outerPaddingResult.mediaQueryCSS) {\n mediaQueries.push(outerPaddingResult.mediaQueryCSS)\n }\n\n // Add outer border if set\n const outerBorderStyles = borderValueToCSS(border)\n if (outerBorderStyles) {\n Object.assign(outerStyles, outerBorderStyles)\n }\n\n // Add margin with responsive support\n const marginResult = responsiveValueToCSS(\n margin,\n (v) => ({ margin: marginValueToCSS(v) }),\n outerClass\n )\n Object.assign(outerStyles, marginResult.baseStyles)\n if (marginResult.mediaQueryCSS) {\n mediaQueries.push(marginResult.mediaQueryCSS)\n }\n\n // Generate inner container styles\n const innerBackgroundStyles = backgroundValueToCSS(innerBackground)\n const innerStyles: React.CSSProperties = {\n ...innerBackgroundStyles,\n }\n\n // Dimensions with responsive support\n const dimensionsResult = responsiveValueToCSS(\n dimensions,\n dimensionsValueToCSS,\n innerClass\n )\n Object.assign(innerStyles, dimensionsResult.baseStyles)\n if (dimensionsResult.mediaQueryCSS) {\n mediaQueries.push(dimensionsResult.mediaQueryCSS)\n }\n\n // Inner padding with responsive support\n const innerPaddingResult = responsiveValueToCSS(\n innerPadding,\n (v) => ({ padding: paddingValueToCSS(v) }),\n innerClass\n )\n Object.assign(innerStyles, innerPaddingResult.baseStyles)\n if (innerPaddingResult.mediaQueryCSS) {\n mediaQueries.push(innerPaddingResult.mediaQueryCSS)\n }\n\n // Inner border\n const innerBorderStyles = borderValueToCSS(innerBorder)\n if (innerBorderStyles) {\n Object.assign(innerStyles, innerBorderStyles)\n }\n\n // Visibility media queries\n const visibilityCSS = visibilityValueToCSS(visibility, outerClass)\n if (visibilityCSS) {\n mediaQueries.push(visibilityCSS)\n }\n\n const contentClasses = cn('px-4', innerClass)\n\n // Check if we have any inner styling\n const hasInnerStyles = Object.keys(innerStyles).length > 0\n\n // Combine all media queries\n const allMediaQueryCSS = mediaQueries.join('\\n')\n\n // Type assertion for Puck slot content - cast to any to avoid complex React type issues\n const ContentSlot = Content as any\n\n return (\n <AnimatedWrapper animation={animation}>\n {allMediaQueryCSS && <style>{allMediaQueryCSS}</style>}\n <div className={outerClass} style={outerStyles}>\n {hasInnerStyles ? (\n <div className={contentClasses} style={innerStyles}>\n <ContentSlot />\n </div>\n ) : (\n <ContentSlot className={contentClasses} style={innerStyles} />\n )}\n </div>\n </AnimatedWrapper>\n )\n },\n}\n","/**\n * Flex Component - Server-safe Puck Configuration\n *\n * Flexbox layout following official Puck demo patterns.\n * Uses Tailwind classes for layout, inline styles for dynamic user values.\n *\n * This is a server-safe version with NO fields property (only slot for content).\n * For the full editor version with fields, use Flex.tsx\n *\n * Responsive Controls:\n * - dimensions: Different dimensions at different breakpoints\n * - customPadding: Different padding at different breakpoints\n * - margin: Different margins at different breakpoints\n * - visibility: Show/hide at different breakpoints\n */\n\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n cn,\n dimensionsValueToCSS,\n marginValueToCSS,\n paddingValueToCSS,\n borderValueToCSS,\n backgroundValueToCSS,\n responsiveValueToCSS,\n visibilityValueToCSS,\n justifyContentMap,\n alignItemsMap,\n type PaddingValue,\n type BorderValue,\n type DimensionsValue,\n type BackgroundValue,\n type AnimationValue,\n type ResponsiveValue,\n type VisibilityValue,\n} from '../../fields/shared'\nimport { AnimatedWrapper } from '../AnimatedWrapper'\n\n// Simple ID generator for server-side rendering\nlet idCounter = 0\nfunction generateUniqueId(): string {\n return `f${(++idCounter).toString(36)}${Math.random().toString(36).slice(2, 6)}`\n}\n\n// Inline type definitions to avoid importing from client-only FlexAlignmentField\nexport type JustifyContent = 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around'\nexport type AlignItems = 'flex-start' | 'center' | 'flex-end' | 'stretch'\n\n// Tailwind class mappings for flex properties\nconst 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\nconst flexWrapMap: Record<string, string> = {\n wrap: 'flex-wrap',\n nowrap: 'flex-nowrap',\n 'wrap-reverse': 'flex-wrap-reverse',\n}\n\nexport interface FlexProps {\n content: unknown\n direction: 'row' | 'column'\n justifyContent: JustifyContent | null\n alignItems: AlignItems | null\n gap: number\n wrap: 'wrap' | 'nowrap'\n // Background\n background: BackgroundValue | null\n // Advanced custom options\n customPadding: ResponsiveValue<PaddingValue> | PaddingValue | null\n margin: ResponsiveValue<PaddingValue> | PaddingValue | null\n dimensions: ResponsiveValue<DimensionsValue> | DimensionsValue | null\n border: BorderValue | null\n animation: AnimationValue | null\n // Responsive visibility\n visibility: VisibilityValue | null\n}\n\nconst defaultProps: FlexProps = {\n content: [],\n direction: 'row',\n justifyContent: null,\n alignItems: null,\n gap: 24,\n wrap: 'wrap',\n background: null,\n customPadding: null,\n margin: null,\n dimensions: null,\n border: null,\n animation: null,\n visibility: null,\n}\n\nexport const FlexConfig: ComponentConfig = {\n label: 'Flex',\n fields: {\n content: { type: 'slot' },\n },\n defaultProps,\n render: ({\n content: Content,\n direction,\n justifyContent,\n alignItems,\n gap,\n wrap,\n background,\n customPadding,\n margin,\n dimensions,\n border,\n animation,\n visibility,\n }) => {\n // Generate unique IDs for CSS targeting (server-safe)\n const uniqueId = generateUniqueId()\n const wrapperClass = `puck-flex-${uniqueId}`\n const contentClass = `puck-flex-content-${uniqueId}`\n\n // Collect all media query CSS\n const mediaQueries: string[] = []\n\n // Generate styles from BackgroundValue\n const backgroundStyles = backgroundValueToCSS(background)\n\n // Build wrapper styles\n const wrapperStyles: React.CSSProperties = {\n ...backgroundStyles,\n }\n\n // Add padding with responsive support\n const paddingResult = responsiveValueToCSS(\n customPadding,\n (v) => ({ padding: paddingValueToCSS(v) }),\n wrapperClass\n )\n Object.assign(wrapperStyles, paddingResult.baseStyles)\n if (paddingResult.mediaQueryCSS) {\n mediaQueries.push(paddingResult.mediaQueryCSS)\n }\n\n // Add border if set\n const borderStyles = borderValueToCSS(border)\n if (borderStyles) {\n Object.assign(wrapperStyles, borderStyles)\n }\n\n // Apply margin with responsive support\n const marginResult = responsiveValueToCSS(\n margin,\n (v) => ({ margin: marginValueToCSS(v) }),\n wrapperClass\n )\n Object.assign(wrapperStyles, marginResult.baseStyles)\n if (marginResult.mediaQueryCSS) {\n mediaQueries.push(marginResult.mediaQueryCSS)\n }\n\n // Use dimensions with responsive support\n const dimensionsResult = responsiveValueToCSS(\n dimensions,\n dimensionsValueToCSS,\n contentClass\n )\n\n // Visibility media queries\n const visibilityCSS = visibilityValueToCSS(visibility, wrapperClass)\n if (visibilityCSS) {\n mediaQueries.push(visibilityCSS)\n }\n\n // Build Tailwind classes for flex layout\n // [&>*]:min-w-0 prevents flex children from overflowing (CSS best practice)\n const contentClasses = cn(\n 'flex w-full min-h-[50px]',\n flexDirectionMap[direction],\n justifyContent && justifyContentMap[justifyContent],\n alignItems && alignItemsMap[alignItems],\n flexWrapMap[wrap],\n '[&>*]:min-w-0',\n contentClass,\n )\n\n // Dynamic styles that need inline (user-controlled values)\n const contentStyles: React.CSSProperties = {\n gap,\n ...dimensionsResult.baseStyles,\n }\n if (dimensionsResult.mediaQueryCSS) {\n mediaQueries.push(dimensionsResult.mediaQueryCSS)\n }\n\n // Combine all media queries\n const allMediaQueryCSS = mediaQueries.join('\\n')\n\n // Type assertion for Puck slot content - cast to any to avoid complex React type issues\n const ContentSlot = Content as any\n\n return (\n <AnimatedWrapper animation={animation}>\n {allMediaQueryCSS && <style>{allMediaQueryCSS}</style>}\n <div className={wrapperClass} style={wrapperStyles}>\n <ContentSlot className={contentClasses} style={contentStyles} />\n </div>\n </AnimatedWrapper>\n )\n },\n}\n","/**\n * Grid Component - Server-safe Puck Configuration\n *\n * CSS Grid layout following official Puck demo patterns.\n * Responsive: stacks on mobile (flex column), grid on desktop (md+).\n * Uses Tailwind classes for layout, inline styles for dynamic user values.\n *\n * This is a server-safe version with NO fields property (only slot for content).\n * For the full editor version with fields, use Grid.tsx\n *\n * Responsive Controls:\n * - dimensions: Different dimensions at different breakpoints\n * - customPadding: Different padding at different breakpoints\n * - margin: Different margins at different breakpoints\n * - visibility: Show/hide at different breakpoints\n */\n\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n cn,\n dimensionsValueToCSS,\n marginValueToCSS,\n paddingValueToCSS,\n borderValueToCSS,\n backgroundValueToCSS,\n responsiveValueToCSS,\n visibilityValueToCSS,\n type PaddingValue,\n type BorderValue,\n type DimensionsValue,\n type BackgroundValue,\n type AnimationValue,\n type ResponsiveValue,\n type VisibilityValue,\n} from '../../fields/shared'\nimport { AnimatedWrapper } from '../AnimatedWrapper'\n\n// Simple ID generator for server-side rendering\nlet idCounter = 0\nfunction generateUniqueId(): string {\n return `g${(++idCounter).toString(36)}${Math.random().toString(36).slice(2, 6)}`\n}\n\nexport interface GridProps {\n content: unknown\n numColumns: number\n gap: number\n // Background\n background: BackgroundValue | null\n // Advanced custom options\n customPadding: ResponsiveValue<PaddingValue> | PaddingValue | null\n dimensions: ResponsiveValue<DimensionsValue> | DimensionsValue | null\n border: BorderValue | null\n margin: ResponsiveValue<PaddingValue> | PaddingValue | null\n animation: AnimationValue | null\n // Responsive visibility\n visibility: VisibilityValue | null\n}\n\nconst defaultProps: GridProps = {\n content: [],\n numColumns: 3,\n gap: 24,\n background: null,\n customPadding: null,\n dimensions: null,\n border: null,\n margin: null,\n animation: null,\n visibility: null,\n}\n\nexport const GridConfig: ComponentConfig = {\n label: 'Grid',\n fields: {\n content: { type: 'slot' },\n },\n defaultProps,\n render: ({\n content: Content,\n numColumns,\n gap,\n background,\n customPadding,\n dimensions,\n border,\n margin,\n animation,\n visibility,\n }) => {\n // Generate unique IDs for CSS targeting (server-safe)\n const uniqueId = generateUniqueId()\n const wrapperClass = `puck-grid-${uniqueId}`\n const contentClass = `puck-grid-content-${uniqueId}`\n\n // Collect all media query CSS\n const mediaQueries: string[] = []\n\n // Generate styles from BackgroundValue\n const backgroundStyles = backgroundValueToCSS(background)\n\n // Build wrapper styles\n const wrapperStyles: React.CSSProperties = {\n ...backgroundStyles,\n }\n\n // Add padding with responsive support\n const paddingResult = responsiveValueToCSS(\n customPadding,\n (v) => ({ padding: paddingValueToCSS(v) }),\n wrapperClass\n )\n Object.assign(wrapperStyles, paddingResult.baseStyles)\n if (paddingResult.mediaQueryCSS) {\n mediaQueries.push(paddingResult.mediaQueryCSS)\n }\n\n // Add border if set\n const borderStyles = borderValueToCSS(border)\n if (borderStyles) {\n Object.assign(wrapperStyles, borderStyles)\n }\n\n // Add margin with responsive support\n const marginResult = responsiveValueToCSS(\n margin,\n (v) => ({ margin: marginValueToCSS(v) }),\n wrapperClass\n )\n Object.assign(wrapperStyles, marginResult.baseStyles)\n if (marginResult.mediaQueryCSS) {\n mediaQueries.push(marginResult.mediaQueryCSS)\n }\n\n // Use dimensions with responsive support\n const dimensionsResult = responsiveValueToCSS(\n dimensions,\n dimensionsValueToCSS,\n contentClass\n )\n\n // Visibility media queries\n const visibilityCSS = visibilityValueToCSS(visibility, wrapperClass)\n if (visibilityCSS) {\n mediaQueries.push(visibilityCSS)\n }\n\n // Tailwind classes for responsive grid: flex column on mobile, grid on md+\n const contentClasses = cn(\n 'flex flex-col w-full',\n 'md:grid',\n contentClass,\n )\n\n // Dynamic styles that need inline (user-controlled values: gap, columns)\n const contentStyles: React.CSSProperties = {\n gap,\n ...dimensionsResult.baseStyles,\n }\n if (dimensionsResult.mediaQueryCSS) {\n mediaQueries.push(dimensionsResult.mediaQueryCSS)\n }\n\n // Grid template columns must be inline since numColumns is dynamic\n const gridStyles: React.CSSProperties = {\n ...contentStyles,\n '--grid-cols': numColumns,\n } as React.CSSProperties\n\n // Combine all media queries\n const allMediaQueryCSS = mediaQueries.join('\\n')\n\n // Type assertion for Puck slot content - cast to any to avoid complex React type issues\n const ContentSlot = Content as any\n\n return (\n <AnimatedWrapper animation={animation}>\n {allMediaQueryCSS && <style>{allMediaQueryCSS}</style>}\n <div className={wrapperClass} style={wrapperStyles}>\n <ContentSlot className={contentClasses} style={gridStyles} />\n <style>{`\n @media (min-width: 768px) {\n .flex.md\\\\:grid {\n grid-template-columns: repeat(var(--grid-cols), 1fr);\n }\n }\n `}</style>\n </div>\n </AnimatedWrapper>\n )\n },\n}\n","/**\n * Section Component - Server-safe Puck Configuration\n *\n * Full-width section with background options and content slot.\n * Used as a top-level page section wrapper.\n * Uses Tailwind classes for layout, inline styles for dynamic user values.\n *\n * This is a server-safe version with NO fields property.\n * For the full editor version with fields, use Section.tsx\n *\n * Responsive Controls:\n * - dimensions: Different dimensions at different breakpoints\n * - customPadding: Different padding at different breakpoints\n * - margin: Different margins at different breakpoints\n * - visibility: Show/hide at different breakpoints\n */\n\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n cn,\n dimensionsValueToCSS,\n marginValueToCSS,\n paddingValueToCSS,\n borderValueToCSS,\n backgroundValueToCSS,\n responsiveValueToCSS,\n visibilityValueToCSS,\n type PaddingValue,\n type BorderValue,\n type DimensionsValue,\n type BackgroundValue,\n type AnimationValue,\n type ResponsiveValue,\n type VisibilityValue,\n} from '../../fields/shared'\nimport { AnimatedWrapper } from '../AnimatedWrapper'\n\n// Simple ID generator for server-side rendering\nlet idCounter = 0\nfunction generateUniqueId(): string {\n return `s${(++idCounter).toString(36)}${Math.random().toString(36).slice(2, 6)}`\n}\n\nexport interface SectionProps {\n id: string\n content: unknown\n // Background\n background: BackgroundValue | null\n fullWidth: boolean\n // Advanced custom options\n customPadding: ResponsiveValue<PaddingValue> | PaddingValue | null\n dimensions: ResponsiveValue<DimensionsValue> | DimensionsValue | null\n border: BorderValue | null\n margin: ResponsiveValue<PaddingValue> | PaddingValue | null\n animation: AnimationValue | null\n // Responsive visibility\n visibility: VisibilityValue | null\n}\n\nconst defaultProps: SectionProps = {\n id: '',\n content: [],\n background: null,\n fullWidth: false,\n customPadding: null,\n dimensions: null,\n border: null,\n margin: null,\n animation: null,\n visibility: null,\n}\n\nexport const SectionConfig: ComponentConfig = {\n label: 'Section',\n fields: {\n content: { type: 'slot' },\n },\n defaultProps,\n render: ({\n id,\n content: Content,\n background,\n fullWidth,\n customPadding,\n dimensions,\n border,\n margin,\n animation,\n visibility,\n }) => {\n // Generate unique IDs for CSS targeting (server-safe)\n const uniqueId = generateUniqueId()\n const sectionClass = `puck-section-${uniqueId}`\n const contentClass = `puck-section-content-${uniqueId}`\n\n // Collect all media query CSS\n const mediaQueries: string[] = []\n\n // Generate styles from BackgroundValue\n const backgroundStyles = backgroundValueToCSS(background)\n\n // Build section styles\n const sectionStyles: React.CSSProperties = {\n ...backgroundStyles,\n }\n\n // Add padding with responsive support\n const paddingResult = responsiveValueToCSS(\n customPadding,\n (v) => ({ padding: paddingValueToCSS(v) }),\n sectionClass\n )\n Object.assign(sectionStyles, paddingResult.baseStyles)\n if (paddingResult.mediaQueryCSS) {\n mediaQueries.push(paddingResult.mediaQueryCSS)\n }\n\n // Add border if set\n const borderStyles = borderValueToCSS(border)\n if (borderStyles) {\n Object.assign(sectionStyles, borderStyles)\n }\n\n // Add margin with responsive support\n const marginResult = responsiveValueToCSS(\n margin,\n (v) => ({ margin: marginValueToCSS(v) }),\n sectionClass\n )\n Object.assign(sectionStyles, marginResult.baseStyles)\n if (marginResult.mediaQueryCSS) {\n mediaQueries.push(marginResult.mediaQueryCSS)\n }\n\n // Visibility media queries\n const visibilityCSS = visibilityValueToCSS(visibility, sectionClass)\n if (visibilityCSS) {\n mediaQueries.push(visibilityCSS)\n }\n\n const sectionClasses = cn('relative w-full', sectionClass)\n\n // Use dimensions with responsive support\n const dimensionsResult = responsiveValueToCSS(\n dimensions,\n dimensionsValueToCSS,\n contentClass\n )\n if (dimensionsResult.mediaQueryCSS) {\n mediaQueries.push(dimensionsResult.mediaQueryCSS)\n }\n\n const contentClasses = cn(\n 'relative z-10',\n // Only apply preset content width if no dimensions set\n !dimensions && !fullWidth && 'max-w-[1200px] mx-auto px-4',\n contentClass,\n )\n\n // Combine all media queries\n const allMediaQueryCSS = mediaQueries.join('\\n')\n\n // Type assertion for Puck slot content - cast to any to avoid complex React type issues\n const ContentSlot = Content as any\n\n return (\n <AnimatedWrapper animation={animation}>\n {allMediaQueryCSS && <style>{allMediaQueryCSS}</style>}\n <section\n id={id || undefined}\n className={sectionClasses}\n style={sectionStyles}\n >\n <ContentSlot className={contentClasses} style={dimensionsResult.baseStyles} />\n </section>\n </AnimatedWrapper>\n )\n },\n}\n","/**\n * Spacer Component - Server-safe Puck Configuration\n *\n * Simple spacing component for adding vertical or horizontal space.\n * Uses Tailwind classes for layout and sizing from predefined options.\n *\n * This is a server-safe version with NO fields property.\n * For the full editor version with fields, use Spacer.tsx\n *\n * Responsive Controls:\n * - visibility: Show/hide at different breakpoints\n */\n\nimport type { ComponentConfig } from '@measured/puck'\nimport { cn, visibilityValueToCSS, type VisibilityValue } from '../../fields/shared'\n\n// Simple ID generator for server-side rendering\nlet idCounter = 0\nfunction generateUniqueId(): string {\n return `sp${(++idCounter).toString(36)}${Math.random().toString(36).slice(2, 6)}`\n}\n\n// Tailwind height classes for predefined spacing options\nconst heightMap: Record<string, string> = {\n '8px': 'h-2',\n '16px': 'h-4',\n '24px': 'h-6',\n '32px': 'h-8',\n '48px': 'h-12',\n '64px': 'h-16',\n '80px': 'h-20',\n '96px': 'h-24',\n '128px': 'h-32',\n}\n\n// Tailwind width classes for predefined spacing options\nconst widthMap: Record<string, string> = {\n '8px': 'w-2',\n '16px': 'w-4',\n '24px': 'w-6',\n '32px': 'w-8',\n '48px': 'w-12',\n '64px': 'w-16',\n '80px': 'w-20',\n '96px': 'w-24',\n '128px': 'w-32',\n}\n\nexport interface SpacerProps {\n size: string\n direction: 'vertical' | 'horizontal' | 'both'\n visibility: VisibilityValue | null\n}\n\nconst defaultProps: SpacerProps = {\n size: '24px',\n direction: 'vertical',\n visibility: null,\n}\n\nexport const SpacerConfig: ComponentConfig<SpacerProps> = {\n label: 'Spacer',\n defaultProps,\n render: ({ size, direction, visibility }) => {\n // Generate unique ID for CSS targeting (server-safe)\n const uniqueId = generateUniqueId()\n const wrapperClass = `puck-spacer-${uniqueId}`\n\n // Visibility media queries\n const visibilityCSS = visibilityValueToCSS(visibility, wrapperClass)\n\n const getClasses = (): string => {\n const heightClass = heightMap[size] || 'h-6'\n const widthClass = widthMap[size] || 'w-6'\n\n if (direction === 'vertical') {\n return `block ${heightClass} w-full`\n }\n if (direction === 'horizontal') {\n return `inline-block ${widthClass} h-full`\n }\n // both\n return `block ${heightClass} ${widthClass}`\n }\n\n return (\n <>\n {visibilityCSS && <style>{visibilityCSS}</style>}\n <div className={cn(getClasses(), wrapperClass)} aria-hidden=\"true\" />\n </>\n )\n },\n}\n","/**\n * Template Component - Server-safe Configuration\n *\n * A reusable template container for rendering nested components.\n * This server-safe version excludes the TemplateField (which requires client-side APIs).\n *\n * For the full editor experience with template loading, use Template.tsx\n *\n * Responsive Controls:\n * - dimensions: Different dimensions at different breakpoints\n * - customPadding: Different padding at different breakpoints\n * - margin: Different margins at different breakpoints\n * - visibility: Show/hide at different breakpoints\n */\n\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n cn,\n dimensionsValueToCSS,\n marginValueToCSS,\n paddingValueToCSS,\n responsiveValueToCSS,\n visibilityValueToCSS,\n type PaddingValue,\n type DimensionsValue,\n type ResponsiveValue,\n type VisibilityValue,\n} from '../../fields/shared'\n\n// Simple ID generator for server-side rendering\nlet idCounter = 0\nfunction generateUniqueId(): string {\n return `t${(++idCounter).toString(36)}${Math.random().toString(36).slice(2, 6)}`\n}\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface TemplateProps {\n /** Slot for nested components */\n content: unknown\n /** ID of the currently loaded template (for tracking only) */\n templateId: string | null\n /** Responsive dimensions */\n dimensions: ResponsiveValue<DimensionsValue> | DimensionsValue | null\n /** Responsive padding */\n customPadding: ResponsiveValue<PaddingValue> | PaddingValue | null\n /** Responsive margin */\n margin: ResponsiveValue<PaddingValue> | PaddingValue | null\n /** Responsive visibility */\n visibility: VisibilityValue | null\n}\n\n// =============================================================================\n// Default Props\n// =============================================================================\n\nconst defaultProps: TemplateProps = {\n content: [],\n templateId: null,\n dimensions: null,\n customPadding: null,\n margin: null,\n visibility: null,\n}\n\n// =============================================================================\n// Component Configuration (Server-safe)\n// =============================================================================\n\nexport const TemplateServerConfig: ComponentConfig = {\n label: 'Template',\n fields: {\n // In server config, templateId is just for reference (no loading UI)\n templateId: {\n type: 'text',\n label: 'Template ID',\n },\n content: {\n type: 'slot',\n },\n },\n defaultProps,\n render: ({ content: Content, dimensions, customPadding, margin, visibility }) => {\n // Generate unique IDs for CSS targeting (server-safe)\n const uniqueId = generateUniqueId()\n const wrapperClass = `puck-template-${uniqueId}`\n const contentClass = `puck-template-content-${uniqueId}`\n\n // Collect all media query CSS\n const mediaQueries: string[] = []\n\n // Build wrapper styles\n const wrapperStyles: React.CSSProperties = {}\n\n // Add padding with responsive support\n const paddingResult = responsiveValueToCSS(\n customPadding,\n (v) => ({ padding: paddingValueToCSS(v) }),\n wrapperClass\n )\n Object.assign(wrapperStyles, paddingResult.baseStyles)\n if (paddingResult.mediaQueryCSS) {\n mediaQueries.push(paddingResult.mediaQueryCSS)\n }\n\n // Add margin with responsive support\n const marginResult = responsiveValueToCSS(\n margin,\n (v) => ({ margin: marginValueToCSS(v) }),\n wrapperClass\n )\n Object.assign(wrapperStyles, marginResult.baseStyles)\n if (marginResult.mediaQueryCSS) {\n mediaQueries.push(marginResult.mediaQueryCSS)\n }\n\n // Visibility media queries\n const visibilityCSS = visibilityValueToCSS(visibility, wrapperClass)\n if (visibilityCSS) {\n mediaQueries.push(visibilityCSS)\n }\n\n // Use dimensions with responsive support\n const dimensionsResult = responsiveValueToCSS(\n dimensions,\n dimensionsValueToCSS,\n contentClass\n )\n if (dimensionsResult.mediaQueryCSS) {\n mediaQueries.push(dimensionsResult.mediaQueryCSS)\n }\n\n // Combine all media queries\n const allMediaQueryCSS = mediaQueries.join('\\n')\n\n // Type assertion for Puck slot content\n const ContentSlot = Content as any\n\n // Content is a slot component that Puck provides\n // It renders all the nested components within this template\n return (\n <>\n {allMediaQueryCSS && <style>{allMediaQueryCSS}</style>}\n <div\n className={cn('template-wrapper', wrapperClass)}\n style={Object.keys(wrapperStyles).length > 0 ? wrapperStyles : undefined}\n >\n <ContentSlot className={contentClass} style={dimensionsResult.baseStyles} />\n </div>\n </>\n )\n },\n}\n","/**\n * Heading Component - Server-Safe Puck Configuration\n *\n * H1-H6 headings with customizable styling.\n * This version excludes field definitions for server-side rendering.\n */\n\nimport { createElement } from 'react'\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n headingLevelMap,\n alignmentMap,\n cn,\n marginValueToCSS,\n paddingValueToCSS,\n colorValueToCSS,\n dimensionsValueToCSS,\n type PaddingValue,\n type ColorValue,\n type DimensionsValue,\n type AnimationValue,\n} from '../../fields/shared'\nimport { AnimatedWrapper } from '../AnimatedWrapper'\nimport type { Alignment } from '../../fields/AlignmentField'\n\nexport interface HeadingProps {\n text: string\n level: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'\n alignment: Alignment | null\n textColor: ColorValue | null\n dimensions: DimensionsValue | null\n animation: AnimationValue | null\n margin: PaddingValue | null\n customPadding: PaddingValue | null\n}\n\nconst defaultProps: HeadingProps = {\n text: 'Heading Text',\n level: 'h2',\n alignment: null,\n textColor: null,\n dimensions: null,\n animation: null,\n margin: null,\n customPadding: null,\n}\n\nexport const HeadingConfig: ComponentConfig<HeadingProps> = {\n label: 'Heading',\n defaultProps,\n render: ({ text, level, alignment, textColor, dimensions, animation, margin, customPadding }) => {\n const tag = level || 'h2'\n const alignmentValue = alignment ?? 'left'\n const classes = cn(\n headingLevelMap[level] || headingLevelMap.h2,\n alignmentMap[alignmentValue] || alignmentMap.left\n )\n\n const dimensionsStyles = dimensions ? dimensionsValueToCSS(dimensions) : undefined\n\n const style: React.CSSProperties = {\n ...dimensionsStyles,\n }\n const marginCSS = marginValueToCSS(margin)\n if (marginCSS) {\n style.margin = marginCSS\n }\n const paddingCSS = paddingValueToCSS(customPadding)\n if (paddingCSS) {\n style.padding = paddingCSS\n }\n // Apply text color from ColorValue\n const colorCSS = colorValueToCSS(textColor)\n if (colorCSS) {\n style.color = colorCSS\n }\n\n const headingElement = createElement(tag, { className: classes, style: Object.keys(style).length > 0 ? style : undefined }, text)\n\n return (\n <AnimatedWrapper animation={animation}>\n {headingElement}\n </AnimatedWrapper>\n )\n },\n}\n","/**\n * Text Component - Server-Safe Puck Configuration\n *\n * Simple paragraph text with customizable styling.\n * This version excludes field definitions for server-side rendering.\n */\n\nimport type React from 'react'\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n textSizeMap,\n alignmentMap,\n cn,\n marginValueToCSS,\n paddingValueToCSS,\n colorValueToCSS,\n dimensionsValueToCSS,\n type PaddingValue,\n type ColorValue,\n type DimensionsValue,\n type AnimationValue,\n} from '../../fields/shared'\nimport { AnimatedWrapper } from '../AnimatedWrapper'\nimport type { Alignment } from '../../fields/AlignmentField'\n\nexport interface TextProps {\n content: string\n size: string\n alignment: Alignment | null\n textColor: ColorValue | null\n dimensions: DimensionsValue | null\n animation: AnimationValue | null\n margin: PaddingValue | null\n customPadding: PaddingValue | null\n}\n\nconst defaultProps: TextProps = {\n content: 'Enter your text here...',\n size: 'base',\n alignment: null,\n textColor: null,\n dimensions: null,\n animation: null,\n margin: null,\n customPadding: null,\n}\n\nexport const TextConfig: ComponentConfig<TextProps> = {\n label: 'Text',\n defaultProps,\n render: ({ content, size, alignment, textColor, dimensions, animation, margin, customPadding }) => {\n const dimensionsStyles = dimensions ? dimensionsValueToCSS(dimensions) : undefined\n\n const style: React.CSSProperties = {\n ...dimensionsStyles,\n }\n const marginCSS = marginValueToCSS(margin)\n if (marginCSS) {\n style.margin = marginCSS\n }\n const paddingCSS = paddingValueToCSS(customPadding)\n if (paddingCSS) {\n style.padding = paddingCSS\n }\n // Apply text color from ColorValue\n const colorCSS = colorValueToCSS(textColor)\n if (colorCSS) {\n style.color = colorCSS\n }\n\n const alignmentValue = alignment ?? 'left'\n\n return (\n <AnimatedWrapper animation={animation}>\n <p\n className={cn(\n textSizeMap[size] || textSizeMap.base,\n alignmentMap[alignmentValue] || alignmentMap.left\n )}\n style={Object.keys(style).length > 0 ? style : undefined}\n >\n {content}\n </p>\n </AnimatedWrapper>\n )\n },\n}\n","/**\n * RichText Component - Server-Safe Puck Configuration\n *\n * Rich text content with customizable styling.\n * This version excludes field definitions for server-side rendering.\n *\n * Requires @tailwindcss/typography - uses the `prose` class for styling.\n */\n\nimport type React from 'react'\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n cn,\n marginValueToCSS,\n paddingValueToCSS,\n dimensionsValueToCSS,\n colorValueToCSS,\n alignmentMap,\n type PaddingValue,\n type DimensionsValue,\n type ColorValue,\n type AnimationValue,\n} from '../../fields/shared'\nimport { AnimatedWrapper } from '../AnimatedWrapper'\nimport type { Alignment } from '../../fields/AlignmentField'\n\nexport interface RichTextProps {\n content: string\n alignment: Alignment | null\n textColor: ColorValue | null\n dimensions: DimensionsValue | null\n animation: AnimationValue | null\n margin: PaddingValue | null\n customPadding: PaddingValue | null\n}\n\nconst defaultProps: RichTextProps = {\n content: '<p>Enter your content here...</p>',\n alignment: null,\n textColor: null,\n dimensions: null,\n animation: null,\n margin: null,\n customPadding: null,\n}\n\nexport const RichTextConfig: ComponentConfig<RichTextProps> = {\n label: 'Rich Text',\n defaultProps,\n render: ({ content, alignment, textColor, dimensions, animation, margin, customPadding }) => {\n const dimensionsStyles = dimensions ? dimensionsValueToCSS(dimensions) : undefined\n\n const style: React.CSSProperties = {\n ...dimensionsStyles,\n }\n const marginCSS = marginValueToCSS(margin)\n if (marginCSS) {\n style.margin = marginCSS\n }\n const customPaddingCSS = paddingValueToCSS(customPadding)\n if (customPaddingCSS) {\n style.padding = customPaddingCSS\n }\n // Apply text color from ColorValue\n const colorCSS = colorValueToCSS(textColor)\n if (colorCSS) {\n style.color = colorCSS\n }\n\n const alignmentValue = alignment ?? 'left'\n const alignmentClass = alignmentMap[alignmentValue] || alignmentMap.left\n\n // Handle empty content\n if (!content || content === '<p></p>') {\n return (\n <AnimatedWrapper animation={animation}>\n <section className={cn('relative overflow-hidden px-4', alignmentClass)} style={Object.keys(style).length > 0 ? style : undefined}>\n <div className=\"prose dark:prose-invert\">\n <p><em>No content available</em></p>\n </div>\n </section>\n </AnimatedWrapper>\n )\n }\n\n return (\n <AnimatedWrapper animation={animation}>\n <section className={cn('relative overflow-hidden px-4', alignmentClass)} style={Object.keys(style).length > 0 ? style : undefined}>\n <div\n className=\"prose dark:prose-invert\"\n dangerouslySetInnerHTML={{ __html: content }}\n />\n </section>\n </AnimatedWrapper>\n )\n },\n}\n","/**\n * Image Component - Server-safe Puck Configuration\n *\n * Standalone image block with optional link wrapper.\n * This version contains only the render function and types - no fields.\n * Safe for use in server components.\n */\n\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n aspectRatioMap,\n cn,\n marginValueToCSS,\n paddingValueToCSS,\n dimensionsValueToCSS,\n borderValueToCSS,\n transformValueToCSS,\n visibilityValueToCSS,\n type PaddingValue,\n type DimensionsValue,\n type BorderValue,\n type AnimationValue,\n type TransformValue,\n type VisibilityValue,\n} from '../../fields/shared'\nimport { AnimatedWrapper } from '../AnimatedWrapper'\nimport type { MediaReference } from '../../fields/MediaField'\nimport type { Alignment } from '../../fields/AlignmentField'\n\n// Simple ID generator for server-side rendering\nlet idCounter = 0\nfunction generateUniqueId(): string {\n return `i${(++idCounter).toString(36)}${Math.random().toString(36).slice(2, 6)}`\n}\n\nexport interface ImageProps {\n image: MediaReference | null\n alt: string\n aspectRatio: string\n link: string\n openInNewTab: boolean\n margin: PaddingValue | null\n border: BorderValue | null\n dimensions: DimensionsValue | null\n alignment: Alignment | null\n transform: TransformValue | null\n animation: AnimationValue | null\n customPadding: PaddingValue | null\n visibility: VisibilityValue | null\n}\n\nconst defaultProps: ImageProps = {\n image: null,\n alt: '',\n aspectRatio: 'auto',\n link: '',\n openInNewTab: false,\n margin: null,\n border: null,\n dimensions: null,\n alignment: null,\n transform: null,\n animation: null,\n customPadding: null,\n visibility: null,\n}\n\nexport const ImageConfig: ComponentConfig<ImageProps> = {\n label: 'Image',\n defaultProps,\n render: ({ image, alt, aspectRatio, link, openInNewTab, dimensions, alignment, margin, border, transform, animation, customPadding, visibility }) => {\n // Generate unique ID for CSS targeting (server-safe)\n const uniqueId = generateUniqueId()\n const wrapperClass = `puck-image-${uniqueId}`\n\n // Visibility media queries\n const visibilityCSS = visibilityValueToCSS(visibility, wrapperClass)\n const dimensionsStyles = dimensionsValueToCSS(dimensions)\n\n const style: React.CSSProperties = {\n ...dimensionsStyles,\n }\n const marginCSS = marginValueToCSS(margin)\n if (marginCSS) {\n style.margin = marginCSS\n }\n const paddingCSS = paddingValueToCSS(customPadding)\n if (paddingCSS) {\n style.padding = paddingCSS\n }\n const borderStyles = borderValueToCSS(border)\n if (borderStyles) {\n Object.assign(style, borderStyles)\n }\n const transformStyles = transformValueToCSS(transform)\n if (transformStyles) {\n Object.assign(style, transformStyles)\n }\n\n const alignmentValue = alignment ?? 'center'\n const alignmentClasses = cn(\n 'flex',\n alignmentValue === 'left' && 'justify-start',\n alignmentValue === 'center' && 'justify-center',\n alignmentValue === 'right' && 'justify-end'\n )\n\n // Placeholder if no image\n if (!image?.url) {\n return (\n <AnimatedWrapper animation={animation}>\n {visibilityCSS && <style>{visibilityCSS}</style>}\n <div className={cn('py-4 px-4', wrapperClass)} style={Object.keys(style).length > 0 ? style : undefined}>\n <div className={alignmentClasses}>\n <div\n className={cn(\n 'relative overflow-hidden rounded-lg w-full max-w-md bg-muted flex items-center justify-center min-h-[200px]',\n aspectRatioMap[aspectRatio] || ''\n )}\n >\n <span className=\"text-muted-foreground\">No image selected</span>\n </div>\n </div>\n </div>\n </AnimatedWrapper>\n )\n }\n\n // For auto aspect ratio, use natural image dimensions\n // For fixed aspect ratios, use absolute positioning within aspect-ratio container\n // Note: When using aspect ratios in Flex, set a min-width via Dimensions\n const imageElement = aspectRatio === 'auto' ? (\n <div className=\"relative overflow-hidden rounded-lg w-full\">\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n src={image.url}\n alt={alt || image.alt || ''}\n className=\"w-full h-auto object-cover\"\n />\n </div>\n ) : (\n <div className={cn('relative overflow-hidden rounded-lg w-full', aspectRatioMap[aspectRatio])}>\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n src={image.url}\n alt={alt || image.alt || ''}\n className=\"absolute inset-0 w-full h-full object-cover\"\n />\n </div>\n )\n\n const content = link ? (\n <a\n href={link}\n target={openInNewTab ? '_blank' : undefined}\n rel={openInNewTab ? 'noopener noreferrer' : undefined}\n className=\"block transition-opacity hover:opacity-90\"\n >\n {imageElement}\n </a>\n ) : (\n imageElement\n )\n\n return (\n <AnimatedWrapper animation={animation}>\n {visibilityCSS && <style>{visibilityCSS}</style>}\n <div className={cn('py-4 px-4', wrapperClass)} style={Object.keys(style).length > 0 ? style : undefined}>\n <div className={alignmentClasses}>{content}</div>\n </div>\n </AnimatedWrapper>\n )\n },\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\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","/**\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","/**\n * Theme Resolution Utilities\n *\n * Functions for merging user-provided theme config with defaults\n * and safely accessing theme values.\n */\n\nimport type {\n ThemeConfig,\n ResolvedTheme,\n ButtonVariantStyles,\n BackgroundStyles,\n} from './types'\nimport {\n DEFAULT_BUTTON_VARIANTS,\n DEFAULT_CTA_BUTTON_VARIANTS,\n DEFAULT_CTA_BACKGROUND_STYLES,\n DEFAULT_COLOR_PRESETS,\n DEFAULT_FOCUS_RING,\n DEFAULT_THEME,\n} from './defaults'\n\n/**\n * Merges user-provided theme config with defaults to create a fully resolved theme\n */\nexport function resolveTheme(config?: ThemeConfig): ResolvedTheme {\n if (!config) return DEFAULT_THEME\n\n return {\n buttonVariants: mergeVariants(DEFAULT_BUTTON_VARIANTS, config.buttonVariants),\n ctaButtonVariants: mergeVariants(DEFAULT_CTA_BUTTON_VARIANTS, config.ctaButtonVariants),\n ctaBackgroundStyles: mergeBackgroundStyles(\n DEFAULT_CTA_BACKGROUND_STYLES,\n config.ctaBackgroundStyles\n ),\n colorPresets: resolveColorPresets(config),\n focusRingColor: config.focusRingColor ?? DEFAULT_FOCUS_RING,\n }\n}\n\n/**\n * Merges variant overrides with defaults\n */\nfunction mergeVariants(\n defaults: ButtonVariantStyles,\n overrides?: Partial<ButtonVariantStyles>\n): ButtonVariantStyles {\n if (!overrides) return defaults\n\n const result: ButtonVariantStyles = { ...defaults }\n for (const key of Object.keys(overrides)) {\n const override = overrides[key]\n if (override) {\n result[key] = override\n }\n }\n return result\n}\n\n/**\n * Merges background style overrides with defaults\n */\nfunction mergeBackgroundStyles(\n defaults: BackgroundStyles,\n overrides?: Partial<BackgroundStyles>\n): BackgroundStyles {\n if (!overrides) return defaults\n return { ...defaults, ...overrides }\n}\n\n/**\n * Resolves color presets based on config\n */\nfunction resolveColorPresets(config: ThemeConfig) {\n if (!config.colorPresets) {\n return DEFAULT_COLOR_PRESETS\n }\n\n if (config.extendColorPresets) {\n return [...DEFAULT_COLOR_PRESETS, ...config.colorPresets]\n }\n\n return config.colorPresets\n}\n\n/**\n * Safely gets variant classes from a variant styles object\n *\n * @param variants - The button variant styles object\n * @param variant - The variant key to look up\n * @param fallback - Fallback variant key if the requested variant doesn't exist\n * @returns The CSS classes string for the variant\n */\nexport function getVariantClasses(\n variants: ButtonVariantStyles,\n variant: string,\n fallback = 'default'\n): string {\n const config = variants[variant]\n if (config?.classes) {\n return config.classes\n }\n\n const fallbackConfig = variants[fallback]\n return fallbackConfig?.classes ?? ''\n}\n\n/**\n * Safely gets background style classes\n *\n * @param styles - The background styles object\n * @param style - The style key to look up\n * @param fallback - Fallback style key if the requested style doesn't exist\n * @returns The CSS classes string for the background\n */\nexport function getBackgroundClasses(\n styles: BackgroundStyles,\n style: string,\n fallback = 'default'\n): string {\n return styles[style] ?? styles[fallback] ?? ''\n}\n","/**\n * Button Component - Server-safe Puck Configuration\n *\n * CTA button with customizable styling and link support.\n * This version contains only the render function and types - no fields.\n * Safe for use in server components.\n */\n\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n cn,\n marginValueToCSS,\n paddingValueToCSS,\n colorValueToCSS,\n borderValueToCSS,\n transformValueToCSS,\n type PaddingValue,\n type ColorValue,\n type BorderValue,\n type AnimationValue,\n type TransformValue,\n} from '../../fields/shared'\nimport { AnimatedWrapper } from '../AnimatedWrapper'\nimport { sizeValueToCSS, getSizeClasses, type SizeValue } from '../../fields/SizeField'\nimport type { Alignment } from '../../fields/AlignmentField'\nimport { DEFAULT_BUTTON_VARIANTS, DEFAULT_FOCUS_RING } from '../../theme/defaults'\nimport { getVariantClasses } from '../../theme/utils'\n\nexport interface ButtonProps {\n text: string\n link: string\n variant: string\n size: SizeValue | null\n openInNewTab: string\n margin: PaddingValue | null\n customBackgroundColor: ColorValue | null\n customTextColor: ColorValue | null\n customBorder: BorderValue | null\n alignment: Alignment | null\n transform: TransformValue | null\n animation: AnimationValue | null\n customPadding: PaddingValue | null\n}\n\nconst sizeStyles: Record<string, string> = {\n sm: 'h-8 px-3 text-sm',\n default: 'h-10 px-4',\n lg: 'h-12 px-8 text-lg',\n}\n\nconst alignmentWrapperMap: Record<string, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n}\n\nconst defaultProps: ButtonProps = {\n text: 'Click Me',\n link: '',\n variant: 'default',\n size: null,\n openInNewTab: 'no',\n margin: null,\n customBackgroundColor: null,\n customTextColor: null,\n customBorder: null,\n alignment: null,\n transform: null,\n animation: null,\n customPadding: null,\n}\n\nexport const ButtonConfig: ComponentConfig<ButtonProps> = {\n label: 'Button',\n defaultProps,\n render: ({ text, link, variant, size, openInNewTab, alignment, margin, customBackgroundColor, customTextColor, customBorder, transform, animation, customPadding }) => {\n // Determine if custom styles should override preset variant/size styles\n const hasCustomBackground = customBackgroundColor?.hex\n const hasCustomTextColor = customTextColor?.hex\n const hasCustomPadding = customPadding\n const hasCustomSize = size?.mode === 'custom'\n\n // Get variant classes from defaults (SSR-safe, no hooks)\n const variantClasses = getVariantClasses(DEFAULT_BUTTON_VARIANTS, variant, 'default')\n\n // Get size classes for preset modes, or empty for custom mode\n const sizeClasses = getSizeClasses(size, sizeStyles)\n\n // Build button classes - exclude variant/size classes if custom styles are set\n const buttonClasses = cn(\n 'inline-flex items-center justify-center font-medium transition-colors',\n `focus:outline-none focus:ring-2 focus:ring-offset-2 ${DEFAULT_FOCUS_RING}`,\n 'disabled:opacity-50 disabled:pointer-events-none',\n // Only apply variant styles if no custom background/text color\n !hasCustomBackground && !hasCustomTextColor && variantClasses,\n // Only apply background portion of variant if no custom background\n hasCustomBackground && !hasCustomTextColor && 'hover:opacity-90',\n // Only apply size classes if not using custom size or custom padding\n !hasCustomPadding && !hasCustomSize && sizeClasses,\n // Apply rounded-md unless custom border has radius\n !customBorder?.radius && 'rounded-md'\n )\n\n // Build inline styles for the button\n const buttonStyle: React.CSSProperties = {}\n\n // Apply custom background color\n if (hasCustomBackground) {\n buttonStyle.backgroundColor = colorValueToCSS(customBackgroundColor)\n }\n\n // Apply custom text color\n if (hasCustomTextColor) {\n buttonStyle.color = colorValueToCSS(customTextColor)\n }\n\n // Apply custom border\n const borderStyles = borderValueToCSS(customBorder)\n if (borderStyles) {\n Object.assign(buttonStyle, borderStyles)\n }\n\n // Apply custom size (only if mode is custom)\n const customSizeStyles = sizeValueToCSS(size)\n if (customSizeStyles) {\n Object.assign(buttonStyle, customSizeStyles)\n }\n\n // Apply custom padding (overrides size padding if set)\n const paddingCSS = paddingValueToCSS(customPadding)\n if (paddingCSS) {\n buttonStyle.padding = paddingCSS\n }\n\n // Apply transform\n const transformStyles = transformValueToCSS(transform)\n if (transformStyles) {\n Object.assign(buttonStyle, transformStyles)\n }\n\n const buttonElement = link ? (\n <a\n href={link}\n target={openInNewTab === 'yes' ? '_blank' : undefined}\n rel={openInNewTab === 'yes' ? 'noopener noreferrer' : undefined}\n className={buttonClasses}\n style={buttonStyle}\n >\n {text}\n </a>\n ) : (\n <button type=\"button\" className={buttonClasses} style={buttonStyle}>\n {text}\n </button>\n )\n\n const wrapperStyle: React.CSSProperties = {}\n const marginCSS = marginValueToCSS(margin)\n if (marginCSS) {\n wrapperStyle.margin = marginCSS\n }\n\n // Get alignment value, defaulting to 'left'\n const alignmentValue = alignment ?? 'left'\n\n return (\n <AnimatedWrapper\n animation={animation}\n className={alignmentWrapperMap[alignmentValue] || alignmentWrapperMap.left}\n style={wrapperStyle}\n >\n {buttonElement}\n </AnimatedWrapper>\n )\n },\n}\n","/**\n * Card Component - Server-safe Puck Configuration\n *\n * Content card with image, heading, and text.\n * This version contains only the render function and types - no fields.\n * Safe for use in server components.\n */\n\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n shadowMap,\n cn,\n marginValueToCSS,\n paddingValueToCSS,\n backgroundValueToCSS,\n borderValueToCSS,\n dimensionsValueToCSS,\n transformValueToCSS,\n type PaddingValue,\n type BackgroundValue,\n type BorderValue,\n type DimensionsValue,\n type AnimationValue,\n type TransformValue,\n} from '../../fields/shared'\nimport { AnimatedWrapper } from '../AnimatedWrapper'\nimport type { MediaReference } from '../../fields/MediaField'\nimport type { Alignment } from '../../fields/AlignmentField'\n\nexport interface CardProps {\n image: MediaReference | null\n heading: string\n text: string\n link: string\n openInNewTab: boolean\n shadow: string\n margin: PaddingValue | null\n background: BackgroundValue | null\n border: BorderValue | null\n dimensions: DimensionsValue | null\n alignment: Alignment | null\n transform: TransformValue | null\n animation: AnimationValue | null\n customPadding: PaddingValue | null\n}\n\nconst defaultProps: CardProps = {\n image: null,\n heading: 'Card Heading',\n text: 'Card description text goes here.',\n link: '',\n openInNewTab: false,\n shadow: 'md',\n margin: null,\n background: null,\n border: null,\n dimensions: null,\n alignment: null,\n transform: null,\n animation: null,\n customPadding: null,\n}\n\nexport const CardConfig: ComponentConfig<CardProps> = {\n label: 'Card',\n defaultProps,\n render: ({ image, heading, text, link, openInNewTab, shadow, background, dimensions, alignment, margin, border, transform, animation, customPadding }) => {\n // Check if border has radius, if so don't apply rounded-lg\n const hasBorderRadius = border?.radius && border.radius > 0\n const cardClasses = cn(\n 'overflow-hidden transition-all bg-card',\n !hasBorderRadius && 'rounded-lg',\n shadowMap[shadow] || '',\n link && 'hover:shadow-lg cursor-pointer'\n )\n\n // Wrapper style for margin, dimensions, alignment, transform, animation\n const wrapperStyle: React.CSSProperties = {}\n const marginCSS = marginValueToCSS(margin)\n if (marginCSS) {\n wrapperStyle.margin = marginCSS\n }\n const dimensionsStyles = dimensionsValueToCSS(dimensions)\n if (dimensionsStyles) {\n Object.assign(wrapperStyle, dimensionsStyles)\n }\n const transformStyles = transformValueToCSS(transform)\n if (transformStyles) {\n Object.assign(wrapperStyle, transformStyles)\n }\n\n // Alignment classes for wrapper\n const alignmentValue = alignment ?? 'left'\n const alignmentClasses = cn(\n 'flex',\n alignmentValue === 'left' && 'justify-start',\n alignmentValue === 'center' && 'justify-center',\n alignmentValue === 'right' && 'justify-end'\n )\n\n // Card background styles from BackgroundValue\n const backgroundStyles = backgroundValueToCSS(background)\n const cardStyle: React.CSSProperties = {\n ...backgroundStyles,\n }\n // Note: bg-card class handles default background (theme-aware)\n // Apply border to card\n const borderStyles = borderValueToCSS(border)\n if (borderStyles) {\n Object.assign(cardStyle, borderStyles)\n }\n // Apply padding to card\n const paddingCSS = paddingValueToCSS(customPadding)\n if (paddingCSS) {\n cardStyle.padding = paddingCSS\n }\n\n const cardContent = (\n <div className={cardClasses} style={cardStyle}>\n {/* Image */}\n {image?.url ? (\n <div className=\"relative aspect-video w-full overflow-hidden\">\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n src={image.url}\n alt={image.alt || heading || ''}\n className=\"w-full h-full object-cover\"\n />\n </div>\n ) : (\n <div className=\"aspect-video w-full bg-muted flex items-center justify-center\">\n <span className=\"text-muted-foreground\">No image</span>\n </div>\n )}\n\n {/* Content */}\n <div className=\"p-4\">\n {heading && (\n <h3 className=\"text-lg font-semibold text-foreground mb-2\">{heading}</h3>\n )}\n {text && <p className=\"text-muted-foreground text-sm\">{text}</p>}\n </div>\n </div>\n )\n\n if (link) {\n return (\n <AnimatedWrapper animation={animation}>\n <div className={alignmentClasses}>\n <a\n href={link}\n target={openInNewTab ? '_blank' : undefined}\n rel={openInNewTab ? 'noopener noreferrer' : undefined}\n className=\"block\"\n style={wrapperStyle}\n >\n {cardContent}\n </a>\n </div>\n </AnimatedWrapper>\n )\n }\n\n return (\n <AnimatedWrapper animation={animation}>\n <div className={alignmentClasses}>\n <div style={wrapperStyle}>{cardContent}</div>\n </div>\n </AnimatedWrapper>\n )\n },\n}\n","/**\n * Divider Component - Server-safe Puck Configuration\n *\n * Horizontal line separator with customizable style.\n * This version contains only the render function and types - no fields.\n * Safe for use in server components.\n */\n\nimport type { ComponentConfig } from '@measured/puck'\nimport {\n dividerStyleMap,\n cn,\n marginValueToCSS,\n paddingValueToCSS,\n colorValueToCSS,\n dimensionsValueToCSS,\n transformValueToCSS,\n type PaddingValue,\n type ColorValue,\n type DimensionsValue,\n type AnimationValue,\n type TransformValue,\n} from '../../fields/shared'\nimport { AnimatedWrapper } from '../AnimatedWrapper'\n\nexport interface DividerProps {\n style: string\n color: ColorValue | null\n margin: PaddingValue | null\n dimensions: DimensionsValue | null\n transform: TransformValue | null\n animation: AnimationValue | null\n customPadding: PaddingValue | null\n}\n\nconst defaultProps: DividerProps = {\n style: 'solid',\n color: null,\n margin: null,\n dimensions: null,\n transform: null,\n animation: null,\n customPadding: null,\n}\n\nexport const DividerConfig: ComponentConfig<DividerProps> = {\n label: 'Divider',\n defaultProps,\n render: ({ style, color, dimensions, margin, transform, animation, customPadding }) => {\n const dimensionsStyles = dimensionsValueToCSS(dimensions)\n\n const wrapperStyle: React.CSSProperties = {\n ...dimensionsStyles,\n }\n const marginCSS = marginValueToCSS(margin)\n if (marginCSS) {\n wrapperStyle.margin = marginCSS\n }\n const paddingCSS = paddingValueToCSS(customPadding)\n if (paddingCSS) {\n wrapperStyle.padding = paddingCSS\n }\n const transformStyles = transformValueToCSS(transform)\n if (transformStyles) {\n Object.assign(wrapperStyle, transformStyles)\n }\n\n // Only set color if explicitly provided, otherwise use CSS variable\n const customColor = colorValueToCSS(color)\n const hrStyle: React.CSSProperties | undefined = customColor\n ? { borderColor: customColor }\n : undefined\n\n return (\n <AnimatedWrapper animation={animation}>\n <div className=\"px-4\" style={Object.keys(wrapperStyle).length > 0 ? wrapperStyle : undefined}>\n <hr\n className={cn(\n 'border-t border-border',\n dividerStyleMap[style] || dividerStyleMap.solid\n )}\n style={hrStyle}\n />\n </div>\n </AnimatedWrapper>\n )\n },\n}\n","'use client'\n\n/**\n * AccordionClient - Client component for accordion interactivity\n *\n * This is the actual interactive accordion that uses useState.\n * Imported by the server-safe AccordionConfig to enable client-side expansion.\n */\n\nimport { useState } from 'react'\nimport { ChevronDown } from 'lucide-react'\nimport {\n marginValueToCSS,\n paddingValueToCSS,\n dimensionsValueToCSS,\n backgroundValueToCSS,\n transformValueToCSS,\n colorValueToCSS,\n cn,\n type PaddingValue,\n type DimensionsValue,\n type BackgroundValue,\n type AnimationValue,\n type TransformValue,\n type ColorValue,\n} from '../fields/shared'\nimport { AnimatedWrapper } from './AnimatedWrapper'\n\ninterface AccordionItemData {\n title: string\n content: string\n defaultOpen: boolean\n}\n\nexport interface AccordionClientProps {\n items: AccordionItemData[]\n allowMultiple: boolean\n textColor: ColorValue | null\n margin: PaddingValue | null\n background: BackgroundValue | null\n dimensions: DimensionsValue | null\n transform: TransformValue | null\n animation: AnimationValue | null\n customPadding: PaddingValue | null\n}\n\n// Accordion Item Component\nfunction AccordionItem({\n item,\n isOpen,\n onToggle,\n textColorCSS,\n}: {\n item: AccordionItemData\n isOpen: boolean\n onToggle: () => void\n textColorCSS?: string\n}) {\n const textStyle: React.CSSProperties = textColorCSS ? { color: textColorCSS } : {}\n\n return (\n <div className=\"border-b border-border last:border-b-0\">\n <button\n type=\"button\"\n onClick={onToggle}\n className=\"flex w-full items-center justify-between py-4 px-4 text-left font-medium transition-all hover:bg-muted/50 text-foreground\"\n style={textStyle}\n >\n <span>{item.title}</span>\n <ChevronDown\n className={cn(\n 'h-4 w-4 shrink-0 transition-transform duration-200',\n isOpen && 'rotate-180'\n )}\n />\n </button>\n <div\n className={cn(\n 'overflow-hidden transition-all duration-200',\n isOpen ? 'max-h-[1000px] opacity-100' : 'max-h-0 opacity-0'\n )}\n >\n <div\n className=\"px-4 pb-4 text-muted-foreground\"\n style={textColorCSS ? { color: textColorCSS } : undefined}\n >\n {item.content}\n </div>\n </div>\n </div>\n )\n}\n\nexport function AccordionClient({\n items,\n allowMultiple,\n textColor,\n margin,\n background,\n dimensions,\n transform,\n animation,\n customPadding,\n}: AccordionClientProps) {\n // Initialize open states from defaultOpen values\n const [openItems, setOpenItems] = useState<Set<number>>(() => {\n const initialOpen = new Set<number>()\n items?.forEach((item, index) => {\n if (item.defaultOpen) {\n initialOpen.add(index)\n }\n })\n return initialOpen\n })\n\n const handleToggle = (index: number) => {\n setOpenItems((prev) => {\n const newSet = new Set(prev)\n if (newSet.has(index)) {\n newSet.delete(index)\n } else {\n if (!allowMultiple) {\n newSet.clear()\n }\n newSet.add(index)\n }\n return newSet\n })\n }\n\n const textColorCSS = colorValueToCSS(textColor)\n const dimensionsStyles = dimensionsValueToCSS(dimensions)\n\n // Theme-aware classes - uses CSS variables for colors\n const accordionClasses = 'rounded-lg border border-border overflow-hidden bg-card'\n\n const backgroundStyles = backgroundValueToCSS(background)\n // Only apply background styles if explicitly set, otherwise let bg-card handle it\n const accordionStyle: React.CSSProperties = backgroundStyles && Object.keys(backgroundStyles).length > 0\n ? backgroundStyles\n : {}\n\n const style: React.CSSProperties = {\n ...dimensionsStyles,\n }\n const marginCSS = marginValueToCSS(margin)\n if (marginCSS) {\n style.margin = marginCSS\n }\n const paddingCSS = paddingValueToCSS(customPadding)\n if (paddingCSS) {\n style.padding = paddingCSS\n }\n const transformStyles = transformValueToCSS(transform)\n if (transformStyles) {\n Object.assign(style, transformStyles)\n }\n\n if (!items || items.length === 0) {\n return (\n <AnimatedWrapper animation={animation}>\n <div className=\"px-4\" style={Object.keys(style).length > 0 ? style : undefined}>\n <div className={accordionClasses} style={accordionStyle}>\n <div className=\"p-4 text-center text-muted-foreground\">\n No accordion items. Add items in the editor.\n </div>\n </div>\n </div>\n </AnimatedWrapper>\n )\n }\n\n return (\n <AnimatedWrapper animation={animation}>\n <div className=\"px-4\" style={Object.keys(style).length > 0 ? style : undefined}>\n <div className={accordionClasses} style={accordionStyle}>\n {items.map((item, index) => (\n <AccordionItem\n key={index}\n item={item}\n isOpen={openItems.has(index)}\n onToggle={() => handleToggle(index)}\n textColorCSS={textColorCSS}\n />\n ))}\n </div>\n </div>\n </AnimatedWrapper>\n )\n}\n","/**\n * Accordion Component - Server-safe Puck Configuration\n *\n * Expandable sections with collapsible content.\n * This version contains only the render function and types - no fields.\n * The render function returns a client component (AccordionClient) that\n * handles the interactive state.\n */\n\nimport type { ComponentConfig } from '@measured/puck'\nimport type {\n PaddingValue,\n DimensionsValue,\n BackgroundValue,\n AnimationValue,\n TransformValue,\n ColorValue,\n} from '../../fields/shared'\nimport { AccordionClient } from '../AccordionClient'\n\ninterface AccordionItemData {\n title: string\n content: string\n defaultOpen: boolean\n}\n\nexport interface AccordionProps {\n items: AccordionItemData[]\n allowMultiple: boolean\n textColor: ColorValue | null\n margin: PaddingValue | null\n background: BackgroundValue | null\n dimensions: DimensionsValue | null\n transform: TransformValue | null\n animation: AnimationValue | null\n customPadding: PaddingValue | null\n}\n\nconst defaultProps: AccordionProps = {\n items: [\n {\n title: 'What is this?',\n content: 'This is an accordion component that can expand and collapse.',\n defaultOpen: false,\n },\n {\n title: 'How do I use it?',\n content: 'Click on each item to expand or collapse it.',\n defaultOpen: false,\n },\n ],\n allowMultiple: false,\n textColor: null,\n margin: null,\n background: null,\n dimensions: null,\n transform: null,\n animation: null,\n customPadding: null,\n}\n\nexport const AccordionConfig: ComponentConfig<AccordionProps> = {\n label: 'Accordion',\n defaultProps,\n render: (props) => (\n <AccordionClient\n items={props.items}\n allowMultiple={props.allowMultiple}\n textColor={props.textColor}\n margin={props.margin}\n background={props.background}\n dimensions={props.dimensions}\n transform={props.transform}\n animation={props.animation}\n customPadding={props.customPadding}\n />\n ),\n}\n","import type { Config as PuckConfig } from '@measured/puck'\nimport type { MergeConfigOptions } from '../types'\n\n/**\n * Merges Puck configurations together\n *\n * @example\n * ```typescript\n * import { mergeConfigs, baseConfig } from '@delmaredigital/payload-puck/config'\n *\n * const customConfig = mergeConfigs({\n * base: baseConfig,\n * components: {\n * CustomHero: myHeroConfig,\n * },\n * categories: {\n * custom: { title: 'Custom', components: ['CustomHero'] },\n * },\n * exclude: ['CallToAction'], // Remove if not needed\n * })\n * ```\n */\nexport function mergeConfigs(options: MergeConfigOptions): PuckConfig {\n const { base, components = {}, categories = {}, root, exclude = [] } = options\n\n // Filter out excluded components from base\n const filteredBaseComponents = Object.fromEntries(\n Object.entries(base.components || {}).filter(([key]) => !exclude.includes(key))\n )\n\n // Merge categories\n const mergedCategories: PuckConfig['categories'] = {}\n\n // First, process base categories (filtering excluded components)\n for (const [key, category] of Object.entries(base.categories || {})) {\n if (category) {\n mergedCategories[key] = {\n ...category,\n components: category.components?.filter((c) => !exclude.includes(String(c))) || [],\n }\n }\n }\n\n // Then, merge in new categories\n for (const [key, category] of Object.entries(categories)) {\n if (category) {\n if (mergedCategories[key]) {\n // Merge with existing category\n mergedCategories[key] = {\n ...mergedCategories[key],\n ...category,\n components: [\n ...(mergedCategories[key]?.components || []),\n ...(category.components || []),\n ],\n }\n } else {\n // Add new category\n mergedCategories[key] = category\n }\n }\n }\n\n // Merge root config\n const mergedRoot = root\n ? {\n ...base.root,\n ...root,\n fields: {\n ...base.root?.fields,\n ...root.fields,\n },\n defaultProps: {\n ...base.root?.defaultProps,\n ...root.defaultProps,\n },\n }\n : base.root\n\n return {\n ...base,\n root: mergedRoot,\n categories: mergedCategories,\n components: {\n ...filteredBaseComponents,\n ...components,\n },\n }\n}\n","/**\n * Server-safe Puck configuration\n *\n * This config is safe for server-side rendering and should be used\n * with the PageRenderer component.\n */\n\nimport type { Config as PuckConfig, ComponentConfig } from '@measured/puck'\nimport type { ReactNode } from 'react'\nimport { DEFAULT_LAYOUTS, layoutsToOptions, type LayoutDefinition } from '../layouts'\n\n// Layout Components (server-safe versions)\nimport { ContainerConfig } from '../components/layout/Container.server'\nimport { FlexConfig } from '../components/layout/Flex.server'\nimport { GridConfig } from '../components/layout/Grid.server'\nimport { SectionConfig } from '../components/layout/Section.server'\nimport { SpacerConfig } from '../components/layout/Spacer.server'\nimport { TemplateServerConfig } from '../components/layout/Template.server'\n\n// Typography Components (server-safe versions)\nimport { HeadingConfig } from '../components/typography/Heading.server'\nimport { TextConfig } from '../components/typography/Text.server'\nimport { RichTextConfig } from '../components/typography/RichText.server'\n\n// Media Components (server-safe versions)\nimport { ImageConfig } from '../components/media/Image.server'\n\n// Interactive Components (server-safe versions)\nimport { ButtonConfig } from '../components/interactive/Button.server'\nimport { CardConfig } from '../components/interactive/Card.server'\nimport { DividerConfig } from '../components/interactive/Divider.server'\nimport { AccordionConfig } from '../components/interactive/Accordion.server'\n\n/**\n * Creates a Puck configuration with custom layouts\n *\n * @param layouts - Custom layout definitions\n * @returns Puck configuration with the specified layouts\n *\n * @example\n * ```tsx\n * import { createConfig, DEFAULT_LAYOUTS, createLayout } from '@delmaredigital/payload-puck/config'\n *\n * const customConfig = createConfig([\n * ...DEFAULT_LAYOUTS,\n * createLayout({\n * value: 'blog',\n * label: 'Blog Post',\n * maxWidth: '720px',\n * }),\n * ])\n * ```\n */\nexport function createConfig(layouts: LayoutDefinition[] = DEFAULT_LAYOUTS): PuckConfig {\n const layoutOptions = layoutsToOptions(layouts)\n\n return {\n root: {\n fields: {\n title: {\n type: 'text',\n label: 'Page Title',\n },\n pageLayout: {\n type: 'select',\n label: 'Page Layout',\n options: layoutOptions.map(({ value, label }) => ({ value, label })),\n },\n },\n defaultProps: {\n title: 'New Page',\n pageLayout: 'default',\n },\n render: ({ children }: { children: ReactNode }) => <>{children}</>,\n },\n categories: {\n layout: {\n title: 'Layout',\n components: ['Container', 'Flex', 'Grid', 'Section', 'Spacer', 'Template'],\n defaultExpanded: true,\n },\n typography: {\n title: 'Typography',\n components: ['Heading', 'Text', 'RichText'],\n },\n media: {\n title: 'Media',\n components: ['Image'],\n },\n interactive: {\n title: 'Interactive',\n components: ['Button', 'Card', 'Divider', 'Accordion'],\n },\n },\n components: {\n // Layout\n Container: ContainerConfig as ComponentConfig<any>,\n Flex: FlexConfig as ComponentConfig<any>,\n Grid: GridConfig as ComponentConfig<any>,\n Section: SectionConfig as ComponentConfig<any>,\n Spacer: SpacerConfig as ComponentConfig<any>,\n Template: TemplateServerConfig as ComponentConfig<any>,\n // Typography\n Heading: HeadingConfig as ComponentConfig<any>,\n Text: TextConfig as ComponentConfig<any>,\n RichText: RichTextConfig as ComponentConfig<any>,\n // Media\n Image: ImageConfig as ComponentConfig<any>,\n // Interactive\n Button: ButtonConfig as ComponentConfig<any>,\n Card: CardConfig as ComponentConfig<any>,\n Divider: DividerConfig as ComponentConfig<any>,\n Accordion: AccordionConfig as ComponentConfig<any>,\n },\n } satisfies PuckConfig\n}\n\n/**\n * Base Puck configuration with server-safe component configs\n *\n * All components have server-safe versions (.server.tsx) that render\n * without client-side interactivity. Use editorConfig from ./config.editor\n * for the full interactive editor experience.\n *\n * For custom layouts, use createConfig() instead.\n */\nexport const baseConfig = createConfig(DEFAULT_LAYOUTS)\n\n// Re-export merge utility and layout helpers\nexport { mergeConfigs } from './merge'\nexport { DEFAULT_LAYOUTS, createLayout, type LayoutDefinition } from '../layouts'\n","import { Render } from '@measured/puck'\nimport type { Config as PuckConfig, Data as PuckData } from '@measured/puck'\nimport { baseConfig } from '../config'\nimport { LayoutWrapper, getLayout, DEFAULT_LAYOUTS, type LayoutDefinition, type PageOverrides } from '../layouts'\nimport type { BackgroundValue } from '../fields/shared'\n\nexport interface PageRendererProps {\n /**\n * Puck data to render\n */\n data: PuckData\n\n /**\n * Puck configuration to use\n * @default baseConfig\n */\n config?: PuckConfig\n\n /**\n * Optional wrapper component (takes precedence over layout)\n */\n wrapper?: React.ComponentType<{ children: React.ReactNode }>\n\n /**\n * Optional className for the wrapper\n */\n className?: string\n\n /**\n * Available layouts for this page\n * @default DEFAULT_LAYOUTS\n */\n layouts?: LayoutDefinition[]\n}\n\n/**\n * Renders a Puck page using the provided data and configuration\n *\n * @example\n * ```tsx\n * import { PageRenderer } from '@delmaredigital/payload-puck/render'\n * import { baseConfig } from '@delmaredigital/payload-puck/config'\n * import { ThemeProvider } from '@delmaredigital/payload-puck/theme'\n *\n * export default async function Page({ params }) {\n * const page = await getPage(params.slug)\n *\n * // Wrap with ThemeProvider if using theming\n * return (\n * <ThemeProvider theme={myTheme}>\n * <PageRenderer data={page.puckData} config={baseConfig} />\n * </ThemeProvider>\n * )\n * }\n * ```\n */\nexport function PageRenderer({\n data,\n config = baseConfig,\n wrapper: Wrapper,\n className,\n layouts = DEFAULT_LAYOUTS,\n}: PageRendererProps) {\n // Handle empty or invalid data\n if (!data || !data.content) {\n return (\n <div className={className}>\n <p>No content available</p>\n </div>\n )\n }\n\n const content = <Render config={config} data={data} />\n\n // Extract root props for page-level settings\n const rootProps = data.root?.props as {\n pageLayout?: string\n showHeader?: 'default' | 'show' | 'hide'\n showFooter?: 'default' | 'show' | 'hide'\n pageBackground?: BackgroundValue | null\n pageMaxWidth?: string\n } | undefined\n\n // Build page overrides from root props\n const overrides: PageOverrides = {\n showHeader: rootProps?.showHeader,\n showFooter: rootProps?.showFooter,\n background: rootProps?.pageBackground,\n maxWidth: rootProps?.pageMaxWidth,\n }\n\n // Build the component tree\n let result = content\n\n // Custom wrapper takes precedence\n if (Wrapper) {\n result = <Wrapper>{result}</Wrapper>\n } else {\n // Apply layout from puck root props\n const pageLayout = rootProps?.pageLayout\n const layout = pageLayout ? getLayout(layouts, pageLayout) : undefined\n\n if (layout) {\n result = (\n <LayoutWrapper layout={layout} className={className} overrides={overrides}>\n {result}\n </LayoutWrapper>\n )\n } else if (className || overrides.background) {\n // No layout but has background or className - use LayoutWrapper without layout\n result = (\n <LayoutWrapper className={className} overrides={overrides}>\n {result}\n </LayoutWrapper>\n )\n }\n }\n\n return result\n}\n","'use client'\n\nimport { useState, useCallback, memo, type MouseEvent } from 'react'\nimport type { Data as PuckData } from '@measured/puck'\nimport {\n Dialog,\n DialogContentFullscreen,\n} from '../../components/ui/dialog'\nimport {\n X,\n ExternalLink,\n AlertTriangle,\n} from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { PageRenderer } from '../../render/PageRenderer'\nimport type { LayoutDefinition } from '../../layouts'\n\nexport interface PreviewModalProps {\n /**\n * Whether the modal is open\n */\n isOpen: boolean\n /**\n * Handler for closing the modal\n */\n onClose: () => void\n /**\n * Puck data to render in the preview\n */\n data: PuckData | null\n /**\n * Page title for the modal header\n */\n pageTitle?: string\n /**\n * Handler for opening the page in a new tab\n */\n onOpenInNewTab?: () => void\n /**\n * Available layouts for rendering\n */\n layouts?: LayoutDefinition[]\n /**\n * Whether there are unsaved changes in the editor\n */\n hasUnsavedChanges?: boolean\n /**\n * Handler to save the current data before navigating\n */\n onSave?: () => Promise<void>\n /**\n * Whether a save is in progress\n */\n isSaving?: boolean\n}\n\n/**\n * Full-screen preview modal with client-side rendering\n *\n * Renders the current editor data directly using PageRenderer.\n * Links prompt for confirmation before navigating (with option to save first).\n *\n * Features:\n * - Zero consumer setup required\n * - Shows current editor state (including unsaved changes)\n * - Interactive elements (accordions, hover states) still work\n * - Links show confirmation dialog before navigating\n */\nexport const PreviewModal = memo(function PreviewModal({\n isOpen,\n onClose,\n data,\n pageTitle,\n onOpenInNewTab,\n layouts,\n hasUnsavedChanges = false,\n onSave,\n isSaving = false,\n}: PreviewModalProps) {\n // Navigation confirmation state\n const [pendingNavigation, setPendingNavigation] = useState<string | null>(null)\n const [isNavigating, setIsNavigating] = useState(false)\n\n // Intercept link clicks\n const handleContentClick = useCallback((e: MouseEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement\n const anchor = target.closest('a')\n\n if (anchor) {\n const href = anchor.getAttribute('href')\n\n // Allow hash-only links (scroll to section on same page)\n if (href?.startsWith('#') && !href.includes('/')) {\n return\n }\n\n // Block navigation and show confirmation\n e.preventDefault()\n e.stopPropagation()\n\n if (href) {\n setPendingNavigation(href)\n }\n }\n }, [])\n\n // Handle navigation after confirmation\n const handleNavigate = useCallback((saveFirst: boolean) => {\n if (!pendingNavigation) return\n\n const navigate = () => {\n setIsNavigating(true)\n // Close the preview and navigate\n onClose()\n window.location.href = pendingNavigation\n }\n\n if (saveFirst && onSave) {\n onSave().then(navigate).catch(() => {\n // Save failed, don't navigate\n setIsNavigating(false)\n })\n } else {\n navigate()\n }\n }, [pendingNavigation, onClose, onSave])\n\n // Cancel navigation\n const handleCancelNavigation = useCallback(() => {\n setPendingNavigation(null)\n }, [])\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && onClose()}>\n <DialogContentFullscreen\n hideCloseButton\n accessibleTitle={`Preview: ${pageTitle || 'Page'}`}\n className=\"p-0\"\n >\n {/* Floating control panel - middle-right of screen, avoids sticky headers */}\n <div className=\"fixed top-1/2 right-4 -translate-y-1/2 z-[9998] flex flex-col gap-2 items-end\">\n {/* Main controls card */}\n <div className=\"bg-white rounded-lg shadow-lg border border-gray-200 p-2 flex flex-col gap-1\">\n {/* Close button - prominent */}\n <button\n type=\"button\"\n onClick={onClose}\n className=\"flex items-center gap-2 px-3 py-2 text-sm font-medium text-white bg-gray-900 hover:bg-gray-800 rounded-md transition-colors\"\n title=\"Close preview (Esc)\"\n >\n <X className=\"h-4 w-4\" />\n Close Preview\n </button>\n\n {/* View page button */}\n {onOpenInNewTab && (\n <button\n type=\"button\"\n onClick={onOpenInNewTab}\n className=\"flex items-center gap-2 px-3 py-2 text-sm text-gray-600 hover:text-gray-900 hover:bg-gray-100 rounded-md transition-colors\"\n title=\"Open published page in new tab\"\n >\n <ExternalLink className=\"h-4 w-4\" />\n View Page\n </button>\n )}\n </div>\n\n {/* Status badge */}\n {hasUnsavedChanges && (\n <div className=\"bg-amber-100 text-amber-700 px-3 py-1.5 rounded-full text-xs font-medium shadow-sm\">\n Unsaved changes\n </div>\n )}\n </div>\n\n {/* Preview content - full height, no padding needed */}\n <div\n className=\"h-full overflow-auto bg-white\"\n onClickCapture={handleContentClick}\n >\n {data ? (\n <PageRenderer data={data} layouts={layouts} />\n ) : (\n <div className=\"flex items-center justify-center h-full text-gray-500\">\n No content to preview\n </div>\n )}\n </div>\n\n {/* Navigation confirmation dialog */}\n {pendingNavigation && (\n <div className=\"fixed inset-0 z-[9999] flex items-center justify-center bg-black/50\">\n <div\n className=\"bg-white rounded-lg shadow-xl max-w-md w-full mx-4 overflow-hidden\"\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n <div className=\"flex items-center gap-3 px-5 py-4 border-b border-gray-200 bg-amber-50\">\n <div className=\"flex-shrink-0 w-10 h-10 rounded-full bg-amber-100 flex items-center justify-center\">\n <AlertTriangle className=\"h-5 w-5 text-amber-600\" />\n </div>\n <div>\n <h3 className=\"text-base font-semibold text-gray-900\">Navigate away?</h3>\n <p className=\"text-sm text-gray-500\">This will close the preview</p>\n </div>\n </div>\n\n {/* Body */}\n <div className=\"px-5 py-4\">\n <p className=\"text-sm text-gray-700 mb-2\">\n You&apos;re about to navigate to:\n </p>\n <p className=\"text-sm font-mono bg-gray-100 px-3 py-2 rounded text-gray-800 break-all\">\n {pendingNavigation}\n </p>\n {hasUnsavedChanges && (\n <p className=\"text-sm text-amber-600 mt-3 font-medium\">\n You have unsaved changes that will be lost.\n </p>\n )}\n </div>\n\n {/* Footer */}\n <div className=\"px-5 py-4 bg-gray-50 border-t border-gray-200 flex flex-col sm:flex-row gap-2 sm:justify-end\">\n <button\n type=\"button\"\n onClick={handleCancelNavigation}\n disabled={isNavigating || isSaving}\n className=\"px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 transition-colors disabled:opacity-50\"\n >\n Cancel\n </button>\n {hasUnsavedChanges && onSave && (\n <button\n type=\"button\"\n onClick={() => handleNavigate(true)}\n disabled={isNavigating || isSaving}\n className=\"px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-md hover:bg-blue-700 transition-colors disabled:opacity-50\"\n >\n {isSaving ? 'Saving...' : 'Save & Navigate'}\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => handleNavigate(false)}\n disabled={isNavigating || isSaving}\n className={cn(\n \"px-4 py-2 text-sm font-medium rounded-md transition-colors disabled:opacity-50\",\n hasUnsavedChanges\n ? \"text-red-700 bg-red-50 border border-red-200 hover:bg-red-100\"\n : \"text-white bg-gray-900 hover:bg-gray-800\"\n )}\n >\n {isNavigating ? 'Navigating...' : hasUnsavedChanges ? 'Navigate without saving' : 'Navigate'}\n </button>\n </div>\n </div>\n </div>\n )}\n </DialogContentFullscreen>\n </Dialog>\n )\n})\n","'use client'\n\nimport { useState, useEffect, useCallback, useRef } from 'react'\n\nexport interface UseUnsavedChangesReturn {\n hasUnsavedChanges: boolean\n markClean: () => void\n markDirty: () => void\n}\n\n/**\n * Hook to track unsaved changes and warn before navigation\n *\n * Registers a beforeunload handler to prevent accidental navigation\n * when there are unsaved changes.\n *\n * @example\n * ```tsx\n * const { hasUnsavedChanges, markClean, markDirty } = useUnsavedChanges()\n *\n * const handleChange = () => {\n * markDirty()\n * }\n *\n * const handleSave = async () => {\n * await save()\n * markClean()\n * }\n * ```\n */\nexport function useUnsavedChanges(): UseUnsavedChangesReturn {\n const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false)\n\n // Use a ref to track the latest value for the beforeunload handler\n // This ensures the handler always checks the current value, not a stale closure\n const hasUnsavedChangesRef = useRef(hasUnsavedChanges)\n hasUnsavedChangesRef.current = hasUnsavedChanges\n\n // Register beforeunload handler once (uses ref for latest value)\n useEffect(() => {\n const handleBeforeUnload = (e: BeforeUnloadEvent) => {\n if (hasUnsavedChangesRef.current) {\n e.preventDefault()\n // Modern browsers ignore custom messages but still show a warning\n e.returnValue = ''\n }\n }\n\n window.addEventListener('beforeunload', handleBeforeUnload)\n return () => window.removeEventListener('beforeunload', handleBeforeUnload)\n }, [])\n\n const markClean = useCallback(() => {\n hasUnsavedChangesRef.current = false // Update ref immediately for beforeunload\n setHasUnsavedChanges(false)\n }, [])\n\n const markDirty = useCallback(() => {\n hasUnsavedChangesRef.current = true // Update ref immediately for beforeunload\n setHasUnsavedChanges(true)\n }, [])\n\n return {\n hasUnsavedChanges,\n markClean,\n markDirty,\n }\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","/**\n * Example Theme Configuration\n *\n * Copy this file to your project and customize it to match your design system.\n *\n * Usage:\n * 1. Copy this file to your project (e.g., src/lib/puck-theme.ts)\n * 2. Customize the values to match your CSS variables/design tokens\n * 3. Import and pass to PageRenderer or PuckEditor:\n *\n * ```tsx\n * import { puckTheme } from '@/lib/puck-theme'\n *\n * <PageRenderer data={data} config={config} theme={puckTheme} />\n * ```\n */\n\nimport type { ThemeConfig } from './types'\n\n/**\n * Example theme using shadcn/ui CSS variables\n *\n * This example assumes you have CSS variables like:\n * --primary, --primary-foreground\n * --secondary, --secondary-foreground\n * --accent, --accent-foreground\n * --muted, --muted-foreground\n * --destructive, --destructive-foreground\n * --ring (for focus rings)\n */\nexport const exampleTheme: ThemeConfig = {\n // Button component variants\n buttonVariants: {\n default: {\n classes: 'bg-primary text-primary-foreground hover:bg-primary/90',\n },\n secondary: {\n classes: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n },\n outline: {\n classes: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',\n },\n ghost: {\n classes: 'hover:bg-accent hover:text-accent-foreground',\n },\n destructive: {\n classes: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n },\n link: {\n classes: 'text-primary underline-offset-4 hover:underline',\n },\n },\n\n // CTA button variants\n ctaButtonVariants: {\n primary: {\n classes: 'bg-primary text-primary-foreground hover:bg-primary/90',\n },\n secondary: {\n classes: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n },\n outline: {\n classes: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',\n },\n },\n\n // CTA background styles\n ctaBackgroundStyles: {\n default: 'bg-muted',\n dark: 'bg-primary text-primary-foreground',\n light: 'bg-background',\n },\n\n // Focus ring class\n focusRingColor: 'focus:ring-ring',\n\n // Color picker presets - customize with your brand colors\n colorPresets: [\n { hex: '#ffffff', label: 'White' },\n { hex: '#f8fafc', label: 'Slate 50' },\n { hex: '#f1f5f9', label: 'Slate 100' },\n { hex: '#e2e8f0', label: 'Slate 200' },\n { hex: '#64748b', label: 'Slate 500' },\n { hex: '#334155', label: 'Slate 700' },\n { hex: '#1e293b', label: 'Slate 800' },\n { hex: '#0f172a', label: 'Slate 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 // Set to true to add your presets to defaults instead of replacing\n extendColorPresets: false,\n}\n","/**\n * Theme Module\n *\n * Provides dynamic theming capabilities for payload-puck components.\n *\n * @example\n * ```tsx\n * import { ThemeProvider, useTheme, getVariantClasses } from '@delmaredigital/payload-puck/theme'\n *\n * // In your app\n * <ThemeProvider theme={{\n * buttonVariants: {\n * default: { classes: 'bg-primary text-primary-foreground' }\n * }\n * }}>\n * <PageRenderer data={data} />\n * </ThemeProvider>\n *\n * // In a component\n * function CustomButton({ variant }) {\n * const theme = useTheme()\n * const classes = getVariantClasses(theme.buttonVariants, variant)\n * return <button className={classes}>...</button>\n * }\n * ```\n */\n\n// Types\nexport type {\n ButtonVariantConfig,\n ButtonVariantStyles,\n ColorPreset,\n BackgroundStyles,\n ThemeConfig,\n ResolvedTheme,\n ThemeContextValue,\n} from './types'\n\n// Context & Provider\nexport {\n ThemeProvider,\n useTheme,\n getDefaultTheme,\n useHasThemeProvider,\n type ThemeProviderProps,\n} from './context'\n\n// Defaults\nexport {\n DEFAULT_BUTTON_VARIANTS,\n DEFAULT_CTA_BUTTON_VARIANTS,\n DEFAULT_CTA_BACKGROUND_STYLES,\n DEFAULT_COLOR_PRESETS,\n DEFAULT_FOCUS_RING,\n DEFAULT_THEME,\n} from './defaults'\n\n// Utilities\nexport { resolveTheme, getVariantClasses, getBackgroundClasses } from './utils'\n\n// Example theme (copy and customize for your project)\nexport { exampleTheme } from './example'\n","'use client'\n\nimport { useState, useCallback, useMemo, useRef, type ReactNode } from 'react'\nimport { useRouter } from 'next/navigation'\nimport { Puck, type Config as PuckConfig, type Data, type Plugin as PuckPlugin, type Overrides as PuckOverrides } from '@measured/puck'\nimport '@measured/puck/puck.css'\nimport headingAnalyzer from '@measured/puck-plugin-heading-analyzer'\nimport '@measured/puck-plugin-heading-analyzer/dist/index.css'\n\nimport { HeaderActions } from './components/HeaderActions'\nimport { IframeWrapper, type LayoutStyle } from './components/IframeWrapper'\nimport { PreviewModal } from './components/PreviewModal'\nimport { useUnsavedChanges } from './hooks/useUnsavedChanges'\nimport { ThemeProvider, type ThemeConfig } from '../theme'\nimport type { LayoutDefinition } from '../layouts'\n\n/**\n * Default viewports for responsive preview\n */\nconst DEFAULT_VIEWPORTS = [\n {\n width: 360,\n height: 'auto' as const,\n label: 'Mobile',\n icon: 'Smartphone' as const,\n },\n {\n width: 768,\n height: 'auto' as const,\n label: 'Tablet',\n icon: 'Tablet' as const,\n },\n {\n width: 1280,\n height: 'auto' as const,\n label: 'Desktop',\n icon: 'Monitor' as const,\n },\n]\n\n/**\n * Extended Data type to include our root props\n */\ninterface PuckDataWithMeta extends Data {\n root: {\n props?: {\n title?: string\n slug?: string\n pageLayout?: string\n [key: string]: unknown\n }\n }\n}\n\nexport interface PuckEditorCoreProps {\n /**\n * Page ID for save operations\n */\n pageId: string\n /**\n * Initial Puck data to load\n */\n initialData: Data\n /**\n * Puck configuration with components and settings\n */\n config: PuckConfig\n /**\n * Page title for display\n */\n pageTitle: string\n /**\n * Page slug for preview URL\n */\n pageSlug: string\n /**\n * API endpoint for save operations\n * @default '/api/puck/pages'\n */\n apiEndpoint?: string\n /**\n * URL to navigate to when back button is clicked\n */\n backUrl?: string\n /**\n * Preview URL or function to generate preview URL from slug\n */\n previewUrl?: string | ((slug: string) => string)\n /**\n * Whether to enable viewport switching\n * @default true\n */\n enableViewports?: boolean\n /**\n * Additional Puck plugins to use.\n * The headingAnalyzer plugin is included by default.\n * Set to `false` to disable all default plugins.\n */\n plugins?: PuckPlugin[] | false\n /**\n * Layout definitions for the editor preview.\n * The editor reads header, footer, editorBackground, and editorDarkMode\n * from the layout definition matching the selected pageLayout.\n */\n layouts?: LayoutDefinition[]\n /**\n * Layout style configurations for theme-aware preview\n * @deprecated Use `layouts` prop instead. layoutStyles will be removed in a future version.\n */\n layoutStyles?: Record<string, LayoutStyle>\n /**\n * Key in root.props to read layout value from\n * @default 'pageLayout'\n */\n layoutKey?: string\n /**\n * Custom actions to render at the start of the header\n */\n headerActionsStart?: ReactNode\n /**\n * Custom actions to render at the end of the header\n */\n headerActionsEnd?: ReactNode\n /**\n * Puck overrides to merge with defaults\n */\n overrides?: Partial<PuckOverrides>\n /**\n * Callback on successful save\n */\n onSaveSuccess?: (data: Data) => void\n /**\n * Callback on save error\n */\n onSaveError?: (error: Error) => void\n /**\n * Callback when data changes\n */\n onChange?: (data: Data) => void\n /**\n * Initial document status from Payload (_status field)\n * Used to show draft/published badge in the header\n */\n initialStatus?: 'draft' | 'published'\n\n /**\n * Theme configuration for customizing component styles\n * When provided, components will use themed styles\n */\n theme?: ThemeConfig\n}\n\n/**\n * Full-featured Puck editor implementation\n *\n * Provides a complete editing experience with:\n * - Save draft and publish functionality\n * - Unsaved changes tracking with beforeunload warning\n * - Interactive/Edit mode toggle\n * - Theme-aware preview backgrounds\n * - Responsive viewport switching\n * - Custom header actions\n *\n * @example\n * ```tsx\n * 'use client'\n *\n * import { PuckEditorCore } from '@delmaredigital/payload-puck/editor'\n * import { editorConfig } from '@delmaredigital/payload-puck/config/editor'\n *\n * export function PageEditor({ page }) {\n * return (\n * <PuckEditorCore\n * pageId={page.id}\n * initialData={page.puckData}\n * config={editorConfig}\n * pageTitle={page.title}\n * pageSlug={page.slug}\n * backUrl=\"/admin/pages\"\n * layoutStyles={{\n * default: { background: '#fff', isDark: false },\n * dark: { background: '#1a1a1a', isDark: true },\n * }}\n * />\n * )\n * }\n * ```\n */\nexport function PuckEditorCore({\n pageId,\n initialData,\n config,\n pageTitle,\n pageSlug,\n apiEndpoint = '/api/puck/pages',\n backUrl,\n previewUrl,\n enableViewports = true,\n plugins,\n layouts,\n layoutStyles,\n layoutKey = 'pageLayout',\n headerActionsStart,\n headerActionsEnd,\n overrides: customOverrides,\n onSaveSuccess,\n onSaveError,\n onChange: onChangeProp,\n initialStatus,\n theme,\n}: PuckEditorCoreProps) {\n const router = useRouter()\n const [isSaving, setIsSaving] = useState(false)\n const [lastSaved, setLastSaved] = useState<Date | null>(null)\n const [saveError, setSaveError] = useState<string | null>(null)\n const [documentStatus, setDocumentStatus] = useState<'draft' | 'published' | undefined>(initialStatus)\n // Track if document was ever published (initially or during this session)\n const [wasPublished, setWasPublished] = useState(initialStatus === 'published')\n const { hasUnsavedChanges, markClean, markDirty } = useUnsavedChanges()\n\n // Preview modal state\n const [isPreviewOpen, setIsPreviewOpen] = useState(false)\n\n // Inject slug into initial data if not present\n const dataWithSlug = useMemo<PuckDataWithMeta>(() => {\n const data = initialData as PuckDataWithMeta\n return {\n ...data,\n root: {\n ...data.root,\n props: {\n ...data.root?.props,\n slug: data.root?.props?.slug || pageSlug,\n },\n },\n }\n }, [initialData, pageSlug])\n\n // Use a ref to track latest data without causing re-renders\n const latestDataRef = useRef<PuckDataWithMeta>(dataWithSlug)\n\n // Handle save (as draft)\n const handleSave = useCallback(\n async (data: Data) => {\n setIsSaving(true)\n const typedData = data as PuckDataWithMeta\n try {\n const response = await fetch(`${apiEndpoint}/${pageId}`, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n puckData: data,\n title: typedData.root?.props?.title || pageTitle,\n slug: typedData.root?.props?.slug || pageSlug,\n draft: true, // Save as draft, don't publish\n }),\n })\n\n if (!response.ok) {\n const errorData = await response.json()\n const errorMessage = errorData.error || errorData.message || 'Failed to save page'\n const err = new Error(errorMessage) as Error & { field?: string; details?: unknown }\n err.field = errorData.field\n err.details = errorData.details\n throw err\n }\n\n setLastSaved(new Date())\n setSaveError(null) // Clear any previous error\n // After saving as draft, update status to draft (shows \"Unpublished Changes\" if was published)\n setDocumentStatus('draft')\n markClean()\n onSaveSuccess?.(data)\n } catch (error) {\n console.error('Error saving page:', error)\n setSaveError(error instanceof Error ? error.message : 'Unknown error')\n onSaveError?.(error instanceof Error ? error : new Error('Unknown error'))\n } finally {\n setIsSaving(false)\n }\n },\n [apiEndpoint, pageId, pageTitle, pageSlug, markClean, onSaveSuccess, onSaveError]\n )\n\n // Handle publish\n const handlePublish = useCallback(\n async (data: Data) => {\n setIsSaving(true)\n const typedData = data as PuckDataWithMeta\n try {\n const response = await fetch(`${apiEndpoint}/${pageId}`, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n puckData: data,\n title: typedData.root?.props?.title || pageTitle,\n slug: typedData.root?.props?.slug || pageSlug,\n status: 'published',\n }),\n })\n\n if (!response.ok) {\n const errorData = await response.json()\n const errorMessage = errorData.error || errorData.message || 'Failed to publish page'\n const err = new Error(errorMessage) as Error & { field?: string; details?: unknown }\n err.field = errorData.field\n err.details = errorData.details\n throw err\n }\n\n setLastSaved(new Date())\n setSaveError(null) // Clear any previous error\n setDocumentStatus('published') // Update status after successful publish\n setWasPublished(true) // Mark as having been published\n markClean()\n onSaveSuccess?.(data)\n } catch (error) {\n console.error('Error publishing page:', error)\n setSaveError(error instanceof Error ? error.message : 'Unknown error')\n onSaveError?.(error instanceof Error ? error : new Error('Unknown error'))\n } finally {\n setIsSaving(false)\n }\n },\n [apiEndpoint, pageId, pageTitle, pageSlug, markClean, onSaveSuccess, onSaveError]\n )\n\n // Handle data change\n const handleChange = useCallback(\n (data: Data) => {\n latestDataRef.current = data as PuckDataWithMeta\n markDirty()\n onChangeProp?.(data)\n },\n [markDirty, onChangeProp]\n )\n\n // Handle back navigation\n const handleBack = useCallback(() => {\n if (hasUnsavedChanges) {\n if (!confirm('You have unsaved changes. Are you sure you want to leave?')) {\n return\n }\n }\n if (backUrl) {\n router.push(backUrl)\n } else {\n router.back()\n }\n }, [hasUnsavedChanges, router, backUrl])\n\n // Handle preview (opens in new tab)\n const handlePreview = useCallback(() => {\n const currentSlug = latestDataRef.current?.root?.props?.slug || pageSlug\n let url: string\n if (typeof previewUrl === 'function') {\n url = previewUrl(currentSlug)\n } else if (previewUrl) {\n url = previewUrl\n } else {\n url = `/${currentSlug}`\n }\n window.open(url, '_blank')\n }, [pageSlug, previewUrl])\n\n // Handle opening preview modal\n const handleOpenPreview = useCallback(() => {\n setIsPreviewOpen(true)\n }, [])\n\n // Handle save from preview modal (returns Promise for navigation flow)\n const handleSaveFromPreview = useCallback(async () => {\n const data = latestDataRef.current\n setIsSaving(true)\n try {\n const response = await fetch(`${apiEndpoint}/${pageId}`, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n puckData: data,\n title: data?.root?.props?.title || pageTitle,\n slug: data?.root?.props?.slug || pageSlug,\n draft: true,\n }),\n })\n\n if (!response.ok) {\n const errorData = await response.json()\n const errorMessage = errorData.error || errorData.message || 'Failed to save page'\n throw new Error(errorMessage)\n }\n\n setLastSaved(new Date())\n setSaveError(null)\n setDocumentStatus('draft')\n markClean()\n onSaveSuccess?.(data)\n } catch (error) {\n console.error('Error saving page:', error)\n setSaveError(error instanceof Error ? error.message : 'Unknown error')\n onSaveError?.(error instanceof Error ? error : new Error('Unknown error'))\n throw error // Re-throw so preview modal knows save failed\n } finally {\n setIsSaving(false)\n }\n }, [apiEndpoint, pageId, pageTitle, pageSlug, markClean, onSaveSuccess, onSaveError])\n\n // Memoized overrides\n const overrides = useMemo<Partial<PuckOverrides>>(\n () => ({\n headerActions: ({ children }: { children: ReactNode }) => (\n <HeaderActions\n onBack={handleBack}\n onPreview={handlePreview}\n onSave={handleSave}\n onPublish={handlePublish}\n onOpenPreview={handleOpenPreview}\n isSaving={isSaving}\n hasUnsavedChanges={hasUnsavedChanges}\n lastSaved={lastSaved}\n documentStatus={documentStatus}\n wasPublished={wasPublished}\n actionsStart={headerActionsStart}\n actionsEnd={headerActionsEnd}\n pageId={pageId}\n apiEndpoint={apiEndpoint}\n saveError={saveError}\n onDismissError={() => setSaveError(null)}\n >\n {children}\n </HeaderActions>\n ),\n // Always wrap iframe for richtext styles injection and theme-aware background\n iframe: ({ children, document }: { children: ReactNode; document?: Document }) => (\n <IframeWrapper document={document} layouts={layouts} layoutStyles={layoutStyles} layoutKey={layoutKey}>\n {children}\n </IframeWrapper>\n ),\n // Merge custom overrides\n ...customOverrides,\n }),\n [\n handleBack,\n handlePreview,\n handleSave,\n handlePublish,\n handleOpenPreview,\n isSaving,\n hasUnsavedChanges,\n lastSaved,\n saveError,\n documentStatus,\n wasPublished,\n headerActionsStart,\n headerActionsEnd,\n pageId,\n apiEndpoint,\n layouts,\n layoutStyles,\n layoutKey,\n customOverrides,\n ]\n )\n\n // Default plugins - headingAnalyzer is always included unless plugins is explicitly false\n const defaultPlugins: PuckPlugin[] = [headingAnalyzer]\n const resolvedPlugins = useMemo(() => {\n if (plugins === false) return undefined\n if (!plugins || plugins.length === 0) return defaultPlugins\n return [...defaultPlugins, ...plugins]\n }, [plugins])\n\n const editorContent = (\n <>\n <div className=\"h-screen\">\n <Puck\n config={config}\n data={dataWithSlug}\n onChange={handleChange}\n onPublish={handlePublish}\n headerTitle={`${pageTitle} /${pageSlug}`}\n plugins={resolvedPlugins}\n viewports={enableViewports ? DEFAULT_VIEWPORTS : undefined}\n overrides={overrides}\n />\n </div>\n <PreviewModal\n isOpen={isPreviewOpen}\n onClose={() => setIsPreviewOpen(false)}\n data={latestDataRef.current}\n pageTitle={pageTitle}\n onOpenInNewTab={handlePreview}\n layouts={layouts}\n hasUnsavedChanges={hasUnsavedChanges}\n onSave={handleSaveFromPreview}\n isSaving={isSaving}\n />\n </>\n )\n\n // Wrap with ThemeProvider if theme is provided\n if (theme) {\n return <ThemeProvider theme={theme}>{editorContent}</ThemeProvider>\n }\n\n return editorContent\n}\n","'use client'\n\nimport dynamic from 'next/dynamic'\nimport type { Config as PuckConfig, Data, Plugin as PuckPlugin, Overrides as PuckOverrides } from '@measured/puck'\nimport type { ReactNode } from 'react'\nimport type { LayoutStyle } from './components/IframeWrapper'\nimport type { ThemeConfig } from '../theme'\nimport type { LayoutDefinition } from '../layouts'\nimport { LoadingState } from './components/LoadingState'\n\n// Dynamic import with ssr: false to prevent hydration mismatch\n// Puck generates random IDs for drag-and-drop that differ between server/client\nconst PuckEditorCore = dynamic(\n () => import('./PuckEditorCore.client').then((mod) => mod.PuckEditorCore),\n {\n ssr: false,\n loading: () => <LoadingState />,\n }\n)\n\nexport interface PuckEditorProps {\n /**\n * Page ID for save operations\n */\n pageId: string\n /**\n * Initial Puck data to load\n */\n initialData: Data\n /**\n * Puck configuration with components and settings\n */\n config: PuckConfig\n /**\n * Page title for display\n */\n pageTitle: string\n /**\n * Page slug for preview URL\n */\n pageSlug: string\n /**\n * API endpoint for save operations\n * @default '/api/puck/pages'\n */\n apiEndpoint?: string\n /**\n * URL to navigate to when back button is clicked\n */\n backUrl?: string\n /**\n * Preview URL or function to generate preview URL from slug\n */\n previewUrl?: string | ((slug: string) => string)\n /**\n * Whether to enable viewport switching\n * @default true\n */\n enableViewports?: boolean\n /**\n * Additional Puck plugins to use.\n * The headingAnalyzer plugin is included by default.\n * Set to `false` to disable all default plugins.\n */\n plugins?: PuckPlugin[] | false\n /**\n * Layout definitions for the editor preview.\n * The editor reads header, footer, editorBackground, and editorDarkMode\n * from the layout definition matching the selected pageLayout.\n */\n layouts?: LayoutDefinition[]\n /**\n * Layout style configurations for theme-aware preview\n * @deprecated Use `layouts` prop instead. layoutStyles will be removed in a future version.\n */\n layoutStyles?: Record<string, LayoutStyle>\n /**\n * Key in root.props to read layout value from\n * @default 'pageLayout'\n */\n layoutKey?: string\n /**\n * Custom actions to render at the start of the header\n */\n headerActionsStart?: ReactNode\n /**\n * Custom actions to render at the end of the header\n */\n headerActionsEnd?: ReactNode\n /**\n * Puck overrides to merge with defaults\n */\n overrides?: Partial<PuckOverrides>\n /**\n * Callback on successful save\n */\n onSaveSuccess?: (data: Data) => void\n /**\n * Callback on save error\n */\n onSaveError?: (error: Error) => void\n /**\n * Callback when data changes\n */\n onChange?: (data: Data) => void\n /**\n * Initial document status from Payload (_status field)\n * Automatically populated when using PuckEditorView\n */\n initialStatus?: 'draft' | 'published'\n\n /**\n * Theme configuration for customizing component styles\n * When provided, components will use themed styles\n */\n theme?: ThemeConfig\n}\n\n/**\n * Puck Editor wrapper with dynamic import\n *\n * This component wraps PuckEditorCore with next/dynamic to prevent\n * hydration mismatches caused by Puck's random ID generation for\n * drag-and-drop functionality.\n *\n * @example\n * ```tsx\n * 'use client'\n *\n * import { PuckEditor } from '@delmaredigital/payload-puck/editor'\n * import { editorConfig } from '@delmaredigital/payload-puck/config/editor'\n *\n * export function PageEditor({ page }) {\n * return (\n * <PuckEditor\n * pageId={page.id}\n * initialData={page.puckData}\n * config={editorConfig}\n * pageTitle={page.title}\n * pageSlug={page.slug}\n * backUrl=\"/admin/pages\"\n * />\n * )\n * }\n * ```\n */\nexport function PuckEditor({\n pageId,\n initialData,\n config,\n pageTitle,\n pageSlug,\n apiEndpoint,\n backUrl,\n previewUrl,\n enableViewports,\n plugins,\n layouts,\n layoutStyles,\n layoutKey,\n headerActionsStart,\n headerActionsEnd,\n overrides,\n onSaveSuccess,\n onSaveError,\n onChange,\n initialStatus,\n theme,\n}: PuckEditorProps) {\n return (\n <PuckEditorCore\n pageId={pageId}\n initialData={initialData}\n config={config}\n pageTitle={pageTitle}\n pageSlug={pageSlug}\n apiEndpoint={apiEndpoint}\n backUrl={backUrl}\n previewUrl={previewUrl}\n enableViewports={enableViewports}\n plugins={plugins}\n layouts={layouts}\n layoutStyles={layoutStyles}\n layoutKey={layoutKey}\n headerActionsStart={headerActionsStart}\n headerActionsEnd={headerActionsEnd}\n overrides={overrides}\n onSaveSuccess={onSaveSuccess}\n onSaveError={onSaveError}\n onChange={onChange}\n initialStatus={initialStatus}\n theme={theme}\n />\n )\n}\n","'use client'\n\n/**\n * @delmaredigital/payload-puck/editor\n *\n * Full-featured Puck editor components with dynamic loading,\n * unsaved changes tracking, and theme-aware preview.\n *\n * @example\n * ```tsx\n * 'use client'\n *\n * import { PuckEditor } from '@delmaredigital/payload-puck/editor'\n * import { editorConfig } from '@delmaredigital/payload-puck/config/editor'\n *\n * export function PageEditor({ page }) {\n * return (\n * <PuckEditor\n * pageId={page.id}\n * initialData={page.puckData}\n * config={editorConfig}\n * pageTitle={page.title}\n * pageSlug={page.slug}\n * backUrl=\"/admin/pages\"\n * layoutStyles={{\n * default: { background: '#fff', isDark: false },\n * dark: { background: '#1a1a1a', isDark: true },\n * }}\n * onSaveSuccess={(data) => console.log('Saved!', data)}\n * onSaveError={(error) => console.error('Error:', error)}\n * />\n * )\n * }\n * ```\n */\n\n// Main editor components\nexport { PuckEditor, type PuckEditorProps } from './PuckEditor.client'\nexport { PuckEditorCore, type PuckEditorCoreProps } from './PuckEditorCore.client'\n\n// Ready-to-use editor page component (auto-fetches page data from route params)\nexport { PuckEditorView, type PuckEditorViewProps } from '../admin/PuckEditorView'\n\n// Sub-components\nexport { HeaderActions, type HeaderActionsProps } from './components/HeaderActions'\nexport { IframeWrapper, type IframeWrapperProps, type LayoutStyle } from './components/IframeWrapper'\nexport { LoadingState, type LoadingStateProps } from './components/LoadingState'\nexport { PreviewModal, type PreviewModalProps } from './components/PreviewModal'\nexport { VersionHistory, type VersionHistoryProps, type PageVersion } from './components/VersionHistory'\n\n// Hooks\nexport { useUnsavedChanges, type UseUnsavedChangesReturn } from './hooks/useUnsavedChanges'\n\n// Plugins\nexport { headingAnalyzer } from './plugins'\n","'use client'\n\nimport { useEffect, useState } from 'react'\nimport { useParams, useSearchParams } from 'next/navigation'\nimport type { Config as PuckConfig, Data, Plugin as PuckPlugin } from '@measured/puck'\n\n/**\n * Props for the PuckEditorView component\n */\nexport interface PuckEditorViewProps {\n /**\n * Puck configuration with components and settings\n */\n config: PuckConfig\n /**\n * Collection slug for API endpoints\n * @default 'pages'\n */\n collectionSlug?: string\n /**\n * Base API path for Puck operations\n * @default '/api/puck'\n */\n apiBasePath?: string\n /**\n * URL to navigate to when back button is clicked\n * Falls back to /admin/collections/{collectionSlug}\n */\n backUrl?: string\n /**\n * Preview URL or function to generate preview URL from slug\n */\n previewUrl?: string | ((slug: string) => string)\n /**\n * Layout styles for theme-aware preview\n */\n layoutStyles?: Record<string, { background: string; isDark: boolean }>\n /**\n * Key in root.props to read layout value from\n * @default 'pageLayout'\n */\n layoutKey?: string\n /**\n * Additional Puck plugins to use.\n * The headingAnalyzer plugin is included by default.\n * Set to `false` to disable all default plugins.\n */\n plugins?: PuckPlugin[] | false\n /**\n * Callback on successful save\n */\n onSaveSuccess?: (data: Data) => void\n /**\n * Callback on save error\n */\n onSaveError?: (error: Error) => void\n}\n\ninterface PageData {\n id: string\n title: string\n slug: string\n puckData: Data | null\n _status?: 'draft' | 'published'\n}\n\n/**\n * Ready-to-use Puck editor page component\n *\n * Use this in your own editor page route (e.g., /pages/[id]/edit).\n * It auto-fetches page data from the API and renders the PuckEditor.\n *\n * @example\n * ```tsx\n * // src/app/pages/[id]/edit/page.tsx\n * 'use client'\n *\n * import { PuckEditorView } from '@delmaredigital/payload-puck/editor'\n * import { editorConfig } from '@/puck/config'\n *\n * export default function PageEditor() {\n * return (\n * <PuckEditorView\n * config={editorConfig}\n * collectionSlug=\"pages\"\n * apiBasePath=\"/api/puck\"\n * backUrl=\"/admin/collections/pages\"\n * previewUrl={(slug) => `/${slug}`}\n * />\n * )\n * }\n * ```\n */\nexport function PuckEditorView({\n config,\n collectionSlug = 'pages',\n apiBasePath = '/api/puck',\n backUrl,\n previewUrl,\n layoutStyles,\n layoutKey = 'pageLayout',\n plugins,\n onSaveSuccess,\n onSaveError,\n}: PuckEditorViewProps) {\n const params = useParams()\n const searchParams = useSearchParams()\n\n // Get page ID from route params or search params\n const pageId = (params?.id as string) || searchParams?.get('id') || ''\n\n const [page, setPage] = useState<PageData | null>(null)\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n const [PuckEditor, setPuckEditor] = useState<React.ComponentType<any> | null>(null)\n\n // Dynamically import PuckEditor to avoid SSR issues\n useEffect(() => {\n import('../editor/PuckEditor.client').then((mod) => {\n setPuckEditor(() => mod.PuckEditor)\n })\n }, [])\n\n useEffect(() => {\n async function fetchPage() {\n if (!pageId) {\n setError('No page ID provided')\n setLoading(false)\n return\n }\n\n try {\n setLoading(true)\n const response = await fetch(`${apiBasePath}/${collectionSlug}/${pageId}`)\n\n if (!response.ok) {\n const data = await response.json().catch(() => ({}))\n throw new Error(data.error || `Failed to fetch page: ${response.status}`)\n }\n\n const data = await response.json()\n setPage(data.doc)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'An error occurred')\n } finally {\n setLoading(false)\n }\n }\n\n fetchPage()\n }, [pageId, apiBasePath, collectionSlug])\n\n const computedBackUrl = backUrl || `/admin/collections/${collectionSlug}`\n\n if (loading || !PuckEditor) {\n return (\n <div style={{\n display: 'flex',\n height: '100vh',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: '#0f0f0f',\n color: '#fff',\n }}>\n <div style={{ textAlign: 'center' }}>\n <div style={{\n width: '32px',\n height: '32px',\n border: '3px solid #333',\n borderTopColor: '#fff',\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n margin: '0 auto 16px',\n }} />\n <p style={{ color: '#888' }}>Loading editor...</p>\n <style>{`\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n </div>\n )\n }\n\n if (error) {\n return (\n <div style={{\n display: 'flex',\n height: '100vh',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: '#0f0f0f',\n color: '#fff',\n }}>\n <div style={{ textAlign: 'center' }}>\n <p style={{ color: '#f87171', marginBottom: '16px' }}>{error}</p>\n <a\n href={computedBackUrl}\n style={{\n color: '#60a5fa',\n textDecoration: 'underline',\n }}\n >\n Back to {collectionSlug}\n </a>\n </div>\n </div>\n )\n }\n\n if (!page) {\n return (\n <div style={{\n display: 'flex',\n height: '100vh',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: '#0f0f0f',\n color: '#fff',\n }}>\n <div style={{ textAlign: 'center' }}>\n <p style={{ color: '#888', marginBottom: '16px' }}>Page not found</p>\n <a\n href={computedBackUrl}\n style={{\n color: '#60a5fa',\n textDecoration: 'underline',\n }}\n >\n Back to {collectionSlug}\n </a>\n </div>\n </div>\n )\n }\n\n // Default puck data if none exists\n const initialData: Data = page.puckData || {\n root: {\n props: {\n title: page.title || 'New Page',\n },\n },\n content: [],\n zones: {},\n }\n\n return (\n <PuckEditor\n pageId={page.id}\n initialData={initialData}\n config={config}\n pageTitle={page.title}\n pageSlug={page.slug}\n apiEndpoint={`${apiBasePath}/${collectionSlug}`}\n backUrl={computedBackUrl}\n previewUrl={previewUrl}\n layoutStyles={layoutStyles}\n layoutKey={layoutKey}\n plugins={plugins}\n onSaveSuccess={onSaveSuccess}\n onSaveError={onSaveError}\n initialStatus={page._status}\n />\n )\n}\n\nexport default PuckEditorView\n"]}