@commercetools-demo/puck-editor 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +389 -0
- package/dist/index.d.ts +389 -0
- package/dist/index.js +3311 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +3238 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/PuckEditor.tsx","../src/config/defaultPuckConfig.ts","../src/components/Hero.tsx","../src/components/RichText.tsx","../src/components/Columns.tsx","../src/fields/ImagePickerField.tsx","../src/components/Image.tsx","../src/components/Button.tsx","../src/components/Card.tsx","../src/components/Spacer.tsx","../src/components/ProductTeaser.tsx","../src/fields/DatasourceField.tsx","../src/components/cms/HeroBanner.tsx","../src/components/cms/TextBlock.tsx","../src/components/cms/CategoryGrid.tsx","../src/components/cms/CategoryHero.tsx","../src/components/cms/CheckoutPromoBanner.tsx","../src/components/cms/CountdownBanner.tsx","../src/components/cms/CrossSellBlock.tsx","../src/components/cms/shared.ts","../src/components/cms/DeliveryMessage.tsx","../src/components/cms/Divider.tsx","../src/components/cms/EmptyState.tsx","../src/components/cms/FAQAccordion.tsx","../src/components/cms/FooterBlock.tsx","../src/components/cms/ImageBlock.tsx","../src/components/cms/NewsletterSignup.tsx","../src/components/cms/ProductBanner.tsx","../src/components/cms/ProductGridHeader.tsx","../src/components/cms/ProductSlider.tsx","../src/components/cms/PromotionalBanner.tsx","../src/components/cms/RelatedProductsSlider.tsx","../src/components/cms/SocialLinks.tsx","../src/components/cms/TabContent.tsx","../src/components/cms/TestimonialsSlider.tsx","../src/components/cms/ThankYouContent.tsx","../src/components/cms/TrustBadges.tsx","../src/components/cms/VideoBlock.tsx","../src/components/cms/WebsiteLogo.tsx","../src/toolbar/EditorToolbar.tsx","../src/overrides/ComponentListSearch.tsx"],"sourcesContent":["// Main editor component\nexport { PuckEditor } from './PuckEditor';\nexport type { PuckEditorProps } from './PuckEditor';\n\n// Default config (consumers can extend this)\nexport { defaultPuckConfig } from './config/defaultPuckConfig';\n\n// Built-in components (export so consumers can compose custom configs)\nexport {\n Hero,\n RichText,\n Columns,\n Image,\n Button,\n Card,\n Spacer,\n ProductTeaser,\n} from './components';\nexport type {\n HeroProps,\n RichTextProps,\n ColumnsProps,\n ImageProps,\n ButtonProps,\n CardProps,\n SpacerProps,\n ProductTeaserProps,\n} from './components';\n\n// Custom field components (reuse in your own component configs)\nexport { ImagePickerField } from './fields/ImagePickerField';\nexport type { ImagePickerFieldProps } from './fields/ImagePickerField';\n\nexport { DatasourceField } from './fields/DatasourceField';\nexport type { DatasourceFieldProps, DatasourceValue, DatasourceType } from './fields/DatasourceField';\n\n// CMS components\nexport * from './components/cms';\n\n// Toolbar (in case consumers want to render it standalone)\nexport { EditorToolbar } from './toolbar/EditorToolbar';\nexport type { EditorToolbarProps } from './toolbar/EditorToolbar';\n\n// Puck overrides — component search panel and filter (reusable in any Puck editor)\nexport {\n ComponentSearchProvider,\n ComponentsPanel,\n ComponentItemFilter,\n} from './overrides/ComponentListSearch';\n","import React, { useCallback, useRef, useState } from 'react';\nimport { Puck, type Config, type Data } from '@measured/puck';\nimport '@measured/puck/puck.css';\nimport { PuckApiProvider } from '@commercetools-demo/puck-api';\nimport { usePuckPage } from '@commercetools-demo/puck-api';\nimport type { PuckData } from '@commercetools-demo/puck-types';\nimport { defaultPuckConfig } from './config/defaultPuckConfig';\nimport { EditorToolbar } from './toolbar/EditorToolbar';\nimport {\n ComponentSearchProvider,\n ComponentsPanel,\n ComponentItemFilter,\n} from './overrides/ComponentListSearch';\n\n// ---------------------------------------------------------------------------\n// Inner component (uses context from PuckApiProvider)\n// ---------------------------------------------------------------------------\n\ninterface PuckEditorInnerProps {\n pageKey: string;\n config: Config;\n onPublish?: (puckData: PuckData) => void;\n onSave?: (puckData: PuckData) => void;\n onError?: (error: Error) => void;\n showPublishButton: boolean;\n autoSaveDebounceMs: number;\n}\n\nconst PuckEditorInner: React.FC<PuckEditorInnerProps> = ({\n pageKey,\n config,\n onPublish,\n onSave,\n onError,\n showPublishButton,\n autoSaveDebounceMs: _autoSaveDebounceMs,\n}) => {\n const {\n page,\n states,\n saving,\n loading,\n error,\n saveDraft,\n publish,\n revertToPublished,\n } = usePuckPage(pageKey);\n\n const latestDataRef = useRef<Data | null>(null);\n const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false);\n\n const handleChange = useCallback((data: Data) => {\n latestDataRef.current = data;\n setHasUnsavedChanges(true);\n }, []);\n\n const handleSave = useCallback(async () => {\n const data = latestDataRef.current;\n if (!data) return;\n try {\n await saveDraft(data as PuckData);\n setHasUnsavedChanges(false);\n onSave?.(data as PuckData);\n } catch (err) {\n onError?.(err as Error);\n }\n }, [saveDraft, onSave, onError]);\n\n const handlePublish = useCallback(\n async (data: Data) => {\n try {\n await saveDraft(data as PuckData);\n setHasUnsavedChanges(false);\n await publish(false);\n onPublish?.(data as PuckData);\n } catch (err) {\n onError?.(err as Error);\n }\n },\n [saveDraft, publish, onPublish, onError]\n );\n\n const handleRevert = useCallback(async () => {\n try {\n await revertToPublished();\n setHasUnsavedChanges(false);\n } catch (err) {\n onError?.(err as Error);\n }\n }, [revertToPublished, onError]);\n\n if (loading) {\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100vh',\n fontSize: '16px',\n color: 'var(--text-muted)',\n background: 'var(--bg-void)',\n }}\n >\n Loading editor…\n </div>\n );\n }\n\n if (error) {\n return (\n <div\n style={{\n padding: '32px',\n color: 'var(--status-error)',\n background: 'rgba(248, 113, 113, 0.08)',\n border: '1px solid rgba(248, 113, 113, 0.25)',\n borderRadius: '8px',\n margin: '16px',\n }}\n >\n <strong>Error loading page:</strong> {error}\n </div>\n );\n }\n\n // Use draft state data if available, otherwise fall back to the main page value\n const activeData: PuckData =\n states.draft?.puckData ??\n page?.puckData ?? {\n content: [],\n root: { props: {} },\n };\n\n return (\n <ComponentSearchProvider>\n <Puck\n config={config}\n data={activeData as Data}\n onChange={handleChange}\n onPublish={handlePublish}\n overrides={{\n headerActions: () => (\n <EditorToolbar\n saving={saving}\n isDirty={hasUnsavedChanges}\n states={states}\n onSave={() => void handleSave()}\n onPublish={() => void handlePublish(activeData as Data)}\n onRevert={() => void handleRevert()}\n showPublishButton={showPublishButton}\n />\n ),\n components: ({ children }) => <ComponentsPanel>{children}</ComponentsPanel>,\n componentItem: ({ children, name }) => (\n <ComponentItemFilter name={name}>{children}</ComponentItemFilter>\n ),\n }}\n />\n </ComponentSearchProvider>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Public component (self-contained, wraps PuckApiProvider)\n// ---------------------------------------------------------------------------\n\nexport interface PuckEditorProps {\n /** Service base URL, e.g. \"http://localhost:8080\" */\n baseURL: string;\n /** CommerceTools project key */\n projectKey: string;\n /** Business unit key */\n businessUnitKey: string;\n /** JWT bearer token — required for save/publish mutations */\n jwtToken: string;\n /** The key of the puck page to edit */\n pageKey: string;\n /**\n * Puck component config.\n * Defaults to `defaultPuckConfig` (all built-in components).\n * Consumers can extend or replace.\n */\n config?: Config;\n /** Called after a successful publish */\n onPublish?: (puckData: PuckData) => void;\n /** Called after each auto-save */\n onSave?: (puckData: PuckData) => void;\n /** Called when an error occurs */\n onError?: (error: Error) => void;\n /** Show the Publish button in the toolbar. Default: true */\n showPublishButton?: boolean;\n /** Debounce delay for auto-save in ms. Default: 1500 */\n autoSaveDebounceMs?: number;\n}\n\nexport const PuckEditor: React.FC<PuckEditorProps> = ({\n baseURL,\n projectKey,\n businessUnitKey,\n jwtToken,\n pageKey,\n config = defaultPuckConfig,\n onPublish,\n onSave,\n onError,\n showPublishButton = true,\n autoSaveDebounceMs = 1500,\n}) => {\n return (\n <PuckApiProvider\n baseURL={baseURL}\n projectKey={projectKey}\n businessUnitKey={businessUnitKey}\n jwtToken={jwtToken}\n >\n <PuckEditorInner\n pageKey={pageKey}\n config={config}\n onPublish={onPublish}\n onSave={onSave}\n onError={onError}\n showPublishButton={showPublishButton}\n autoSaveDebounceMs={autoSaveDebounceMs}\n />\n </PuckApiProvider>\n );\n};\n","import React from 'react';\nimport { type Config } from '@measured/puck';\nimport { Hero } from '../components/Hero';\nimport { RichText } from '../components/RichText';\nimport { Columns } from '../components/Columns';\nimport { Image } from '../components/Image';\nimport { Button } from '../components/Button';\nimport { Card } from '../components/Card';\nimport { Spacer } from '../components/Spacer';\nimport { ProductTeaser } from '../components/ProductTeaser';\nimport {\n HeroBanner, TextBlock, CategoryGrid, CategoryHero,\n CheckoutPromoBanner, CountdownBanner, CrossSellBlock, DeliveryMessage,\n Divider, EmptyState, FAQAccordion, FooterBlock, ImageBlock,\n NewsletterSignup, ProductBanner, ProductGridHeader, ProductSlider,\n PromotionalBanner, RelatedProductsSlider, SocialLinks, TabContent,\n TestimonialsSlider, ThankYouContent, TrustBadges, VideoBlock, WebsiteLogo,\n} from '../components/cms';\n\n/**\n * Default Puck configuration with built-in components.\n *\n * Consumers can extend this:\n * ```ts\n * import { defaultPuckConfig } from '@commercetools-demo/puck-editor';\n * const myConfig = {\n * ...defaultPuckConfig,\n * components: { ...defaultPuckConfig.components, MyComponent },\n * };\n * ```\n */\nexport const defaultPuckConfig: Config = {\n components: {\n Hero,\n RichText,\n Columns,\n Image,\n Button,\n Card,\n Spacer,\n ProductTeaser,\n // CMS components\n HeroBanner, TextBlock, CategoryGrid, CategoryHero,\n CheckoutPromoBanner, CountdownBanner, CrossSellBlock, DeliveryMessage,\n Divider, EmptyState, FAQAccordion, FooterBlock, ImageBlock,\n NewsletterSignup, ProductBanner, ProductGridHeader, ProductSlider,\n PromotionalBanner, RelatedProductsSlider, SocialLinks, TabContent,\n TestimonialsSlider, ThankYouContent, TrustBadges, VideoBlock, WebsiteLogo,\n },\n root: {\n fields: {\n title: { type: 'text', label: 'Page Title' },\n backgroundColor: { type: 'text', label: 'Background Color (CSS)' },\n },\n defaultProps: {\n title: 'New Page',\n backgroundColor: '#ffffff',\n },\n render: ({ children, backgroundColor }) =>\n React.createElement(\n 'div',\n {\n style: {\n background: backgroundColor ?? '#ffffff',\n minHeight: '100vh',\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n },\n },\n children\n ),\n },\n};\n","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\n\nexport interface HeroProps {\n heading: string;\n subheading?: string;\n backgroundImage?: string;\n ctaText?: string;\n ctaUrl?: string;\n layout?: 'centered' | 'left-aligned';\n minHeight?: string;\n}\n\nexport const Hero: ComponentConfig<HeroProps> = {\n label: 'Hero',\n fields: {\n heading: { type: 'text', label: 'Heading' },\n subheading: { type: 'textarea', label: 'Subheading' },\n backgroundImage: { type: 'text', label: 'Background Image URL' },\n ctaText: { type: 'text', label: 'CTA Button Text' },\n ctaUrl: { type: 'text', label: 'CTA Button URL' },\n layout: {\n type: 'select',\n label: 'Layout',\n options: [\n { value: 'centered', label: 'Centered' },\n { value: 'left-aligned', label: 'Left Aligned' },\n ],\n },\n minHeight: { type: 'text', label: 'Min Height (CSS, e.g. 400px)' },\n },\n defaultProps: {\n heading: 'Welcome',\n layout: 'centered',\n minHeight: '400px',\n },\n render: ({\n heading,\n subheading,\n backgroundImage,\n ctaText,\n ctaUrl,\n layout,\n minHeight,\n }) => {\n const isCenter = layout !== 'left-aligned';\n return (\n <section\n style={{\n position: 'relative',\n minHeight: minHeight ?? '400px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: isCenter ? 'center' : 'flex-start',\n padding: '48px 32px',\n backgroundImage: backgroundImage\n ? `url(${backgroundImage})`\n : undefined,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n backgroundColor: backgroundImage ? undefined : '#1a1a2e',\n color: '#fff',\n boxSizing: 'border-box',\n }}\n >\n {backgroundImage && (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n background: 'rgba(0,0,0,0.45)',\n }}\n />\n )}\n <div\n style={{\n position: 'relative',\n maxWidth: '720px',\n textAlign: isCenter ? 'center' : 'left',\n }}\n >\n <h1 style={{ margin: '0 0 16px', fontSize: '2.5rem', fontWeight: 700 }}>\n {heading}\n </h1>\n {subheading && (\n <p style={{ margin: '0 0 24px', fontSize: '1.2rem', opacity: 0.85 }}>\n {subheading}\n </p>\n )}\n {ctaText && ctaUrl && (\n <a\n href={ctaUrl}\n style={{\n display: 'inline-block',\n padding: '12px 28px',\n background: '#e94560',\n color: '#fff',\n borderRadius: '4px',\n textDecoration: 'none',\n fontWeight: 600,\n }}\n >\n {ctaText}\n </a>\n )}\n </div>\n </section>\n );\n },\n};\n","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\n\nexport interface RichTextProps {\n content: string;\n align?: 'left' | 'center' | 'right';\n maxWidth?: string;\n padding?: string;\n}\n\nexport const RichText: ComponentConfig<RichTextProps> = {\n label: 'Rich Text',\n fields: {\n content: {\n type: 'textarea',\n label: 'Content (HTML supported)',\n },\n align: {\n type: 'select',\n label: 'Text Alignment',\n options: [\n { value: 'left', label: 'Left' },\n { value: 'center', label: 'Center' },\n { value: 'right', label: 'Right' },\n ],\n },\n maxWidth: { type: 'text', label: 'Max Width (CSS)' },\n padding: { type: 'text', label: 'Padding (CSS)' },\n },\n defaultProps: {\n content: '<p>Add your content here…</p>',\n align: 'left',\n padding: '32px',\n },\n render: ({ content, align, maxWidth, padding }) => (\n <div\n style={{\n padding: padding ?? '32px',\n textAlign: align ?? 'left',\n maxWidth: maxWidth,\n margin: maxWidth ? '0 auto' : undefined,\n boxSizing: 'border-box',\n }}\n // Puck stores raw HTML for rich text fields; this is controlled editor input\n dangerouslySetInnerHTML={{ __html: content }}\n />\n ),\n};\n","import React from 'react';\nimport { DropZone, type ComponentConfig } from '@measured/puck';\n\nexport interface ColumnsProps {\n columnCount?: 2 | 3 | 4;\n gap?: string;\n padding?: string;\n}\n\nexport const Columns: ComponentConfig<ColumnsProps> = {\n label: 'Columns',\n fields: {\n columnCount: {\n type: 'select',\n label: 'Number of Columns',\n options: [\n { value: 2, label: '2 Columns' },\n { value: 3, label: '3 Columns' },\n { value: 4, label: '4 Columns' },\n ],\n },\n gap: { type: 'text', label: 'Column Gap (CSS)' },\n padding: { type: 'text', label: 'Padding (CSS)' },\n },\n defaultProps: {\n columnCount: 2,\n gap: '16px',\n padding: '16px',\n },\n render: ({ columnCount = 2, gap = '16px', padding = '16px' }) => {\n const cols = Array.from({ length: columnCount }, (_, i) => i);\n return (\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: `repeat(${columnCount}, 1fr)`,\n gap,\n padding,\n boxSizing: 'border-box',\n }}\n >\n {cols.map((i) => (\n <div key={i}>\n <DropZone zone={`column-${i}`} />\n </div>\n ))}\n </div>\n );\n },\n};\n","import React, {\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { useMediaLibrary } from '@commercetools-demo/puck-api';\nimport type { MediaFile } from '@commercetools-demo/puck-types';\n\n// ---------------------------------------------------------------------------\n// Inline styles (no external styling deps — this runs inside the Puck editor)\n// ---------------------------------------------------------------------------\n\nconst s = {\n root: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '8px',\n fontFamily: 'inherit',\n fontSize: '13px',\n },\n preview: {\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n padding: '8px',\n border: '1px solid #d1d5db',\n borderRadius: '6px',\n background: '#f9fafb',\n },\n previewImg: {\n width: '48px',\n height: '48px',\n objectFit: 'cover' as const,\n borderRadius: '4px',\n flexShrink: 0,\n },\n previewInfo: { flex: 1, minWidth: 0 },\n previewUrl: {\n fontSize: '12px',\n color: '#374151',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap' as const,\n },\n btnRow: { display: 'flex', gap: '6px', flexWrap: 'wrap' as const },\n btn: (primary?: boolean): React.CSSProperties => ({\n padding: '5px 12px',\n borderRadius: '4px',\n border: primary ? 'none' : '1px solid #d1d5db',\n background: primary ? '#1a1a2e' : '#fff',\n color: primary ? '#fff' : '#374151',\n fontWeight: 500,\n fontSize: '12px',\n cursor: 'pointer',\n whiteSpace: 'nowrap',\n }),\n dangerBtn: {\n padding: '5px 12px',\n borderRadius: '4px',\n border: '1px solid #fca5a5',\n background: '#fff',\n color: '#dc2626',\n fontWeight: 500,\n fontSize: '12px',\n cursor: 'pointer',\n } as React.CSSProperties,\n // Modal\n overlay: {\n position: 'fixed' as const,\n inset: 0,\n background: 'rgba(0,0,0,0.5)',\n zIndex: 9999,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n modal: {\n background: '#fff',\n borderRadius: '8px',\n width: '640px',\n maxWidth: '95vw',\n maxHeight: '85vh',\n display: 'flex',\n flexDirection: 'column' as const,\n boxShadow: '0 20px 60px rgba(0,0,0,0.3)',\n },\n modalHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '16px 20px',\n borderBottom: '1px solid #e5e7eb',\n },\n modalTitle: { margin: 0, fontSize: '16px', fontWeight: 600 },\n modalClose: {\n background: 'none',\n border: 'none',\n fontSize: '20px',\n cursor: 'pointer',\n color: '#6b7280',\n lineHeight: 1,\n },\n modalBody: {\n flex: 1,\n overflow: 'auto',\n padding: '20px',\n },\n modalFooter: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '12px 20px',\n borderTop: '1px solid #e5e7eb',\n gap: '12px',\n },\n // Upload form\n formGroup: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '4px',\n marginBottom: '12px',\n },\n label: { fontSize: '12px', fontWeight: 600, color: '#374151' },\n input: {\n padding: '7px 10px',\n border: '1px solid #d1d5db',\n borderRadius: '4px',\n fontSize: '13px',\n width: '100%',\n boxSizing: 'border-box' as const,\n },\n dropZone: {\n border: '2px dashed #d1d5db',\n borderRadius: '6px',\n padding: '24px',\n textAlign: 'center' as const,\n cursor: 'pointer',\n color: '#6b7280',\n fontSize: '13px',\n transition: 'border-color .2s',\n },\n dropZoneActive: {\n border: '2px dashed #3b82f6',\n borderRadius: '6px',\n padding: '24px',\n textAlign: 'center' as const,\n cursor: 'pointer',\n color: '#3b82f6',\n fontSize: '13px',\n },\n // Media grid\n grid: {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(110px, 1fr))',\n gap: '12px',\n marginTop: '4px',\n },\n gridItem: (selected: boolean): React.CSSProperties => ({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n cursor: 'pointer',\n border: `2px solid ${selected ? '#3b82f6' : 'transparent'}`,\n borderRadius: '6px',\n padding: '6px',\n background: selected ? 'rgba(59,130,246,0.07)' : '#f9fafb',\n }),\n thumb: {\n width: '80px',\n height: '80px',\n objectFit: 'cover' as const,\n borderRadius: '4px',\n background: '#e5e7eb',\n },\n thumbPlaceholder: {\n width: '80px',\n height: '80px',\n borderRadius: '4px',\n background: '#e5e7eb',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '28px',\n },\n itemName: {\n marginTop: '6px',\n fontSize: '11px',\n textAlign: 'center' as const,\n maxWidth: '100%',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap' as const,\n color: '#374151',\n },\n pagination: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n gap: '12px',\n marginTop: '16px',\n fontSize: '12px',\n color: '#6b7280',\n },\n errorMsg: {\n fontSize: '12px',\n color: '#dc2626',\n marginTop: '4px',\n },\n selectedInfo: {\n flex: 1,\n fontSize: '12px',\n color: '#374151',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap' as const,\n },\n} as const;\n\n// ---------------------------------------------------------------------------\n// Upload modal\n// ---------------------------------------------------------------------------\n\ninterface UploadModalProps {\n uploading: boolean;\n error: string | null;\n onUpload: (file: File, title: string, description: string) => void;\n onClose: () => void;\n}\n\nconst UploadModal: React.FC<UploadModalProps> = ({\n uploading,\n error,\n onUpload,\n onClose,\n}) => {\n const [file, setFile] = useState<File | null>(null);\n const [title, setTitle] = useState('');\n const [description, setDescription] = useState('');\n const [dragging, setDragging] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const handleFile = (f: File) => {\n setFile(f);\n if (!title) setTitle(f.name);\n };\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n setDragging(false);\n const f = e.dataTransfer.files[0];\n if (f) handleFile(f);\n };\n\n return (\n <div style={s.overlay} onClick={(e) => e.target === e.currentTarget && onClose()}>\n <div style={s.modal}>\n <div style={s.modalHeader}>\n <h3 style={s.modalTitle}>Upload a file</h3>\n <button style={s.modalClose} onClick={onClose}>×</button>\n </div>\n <div style={s.modalBody}>\n <div style={s.formGroup}>\n <label style={s.label}>Title</label>\n <input\n style={s.input}\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n placeholder=\"File title\"\n />\n </div>\n <div style={s.formGroup}>\n <label style={s.label}>Description</label>\n <input\n style={s.input}\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder=\"Optional description\"\n />\n </div>\n <div\n style={dragging ? s.dropZoneActive : s.dropZone}\n onClick={() => inputRef.current?.click()}\n onDragOver={(e) => { e.preventDefault(); setDragging(true); }}\n onDragLeave={() => setDragging(false)}\n onDrop={handleDrop}\n >\n {file ? (\n <>\n <div>📎 {file.name}</div>\n <div style={{ fontSize: '11px', marginTop: '4px', color: '#9ca3af' }}>\n {(file.size / 1024).toFixed(0)} KB\n </div>\n </>\n ) : (\n <>\n <div>📁 Click or drag & drop to select a file</div>\n </>\n )}\n <input\n ref={inputRef}\n type=\"file\"\n accept=\"image/*\"\n style={{ display: 'none' }}\n onChange={(e) => {\n const f = e.target.files?.[0];\n if (f) handleFile(f);\n }}\n />\n </div>\n {error && <div style={s.errorMsg}>{error}</div>}\n </div>\n <div style={s.modalFooter}>\n <span style={s.selectedInfo}>{file?.name ?? 'No file selected'}</span>\n <div style={s.btnRow}>\n <button style={s.btn()} onClick={onClose}>Cancel</button>\n <button\n style={s.btn(true)}\n disabled={!file || uploading}\n onClick={() => file && onUpload(file, title, description)}\n >\n {uploading ? 'Uploading…' : 'Upload'}\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Library modal\n// ---------------------------------------------------------------------------\n\ninterface LibraryModalProps {\n files: MediaFile[];\n pagination: { currentPage: number; totalPages: number };\n loading: boolean;\n error: string | null;\n onNextPage: () => void;\n onPrevPage: () => void;\n onSelect: (file: MediaFile) => void;\n onClose: () => void;\n}\n\nconst LibraryModal: React.FC<LibraryModalProps> = ({\n files,\n pagination,\n loading,\n error,\n onNextPage,\n onPrevPage,\n onSelect,\n onClose,\n}) => {\n const [selected, setSelected] = useState<MediaFile | null>(null);\n\n const handleConfirm = () => {\n if (selected) onSelect(selected);\n };\n\n return (\n <div style={s.overlay} onClick={(e) => e.target === e.currentTarget && onClose()}>\n <div style={s.modal}>\n <div style={s.modalHeader}>\n <h3 style={s.modalTitle}>Select from Media Library</h3>\n <button style={s.modalClose} onClick={onClose}>×</button>\n </div>\n <div style={s.modalBody}>\n {loading ? (\n <div style={{ color: '#6b7280', fontSize: '13px' }}>Loading…</div>\n ) : files.length === 0 ? (\n <div style={{ color: '#6b7280', fontSize: '13px' }}>No files found.</div>\n ) : (\n <>\n <div style={s.grid}>\n {files.map((file) => (\n <div\n key={file.url}\n style={s.gridItem(selected?.url === file.url)}\n onClick={() => setSelected(file)}\n title={file.title ?? file.name}\n >\n {file.isImage ? (\n <img src={file.url} alt={file.name} style={s.thumb} />\n ) : (\n <div style={s.thumbPlaceholder}>📄</div>\n )}\n <div style={s.itemName}>{file.title ?? file.name}</div>\n </div>\n ))}\n </div>\n {pagination.totalPages > 1 && (\n <div style={s.pagination}>\n <button\n style={s.btn()}\n disabled={pagination.currentPage <= 1}\n onClick={onPrevPage}\n >\n ← Prev\n </button>\n <span>{pagination.currentPage} / {pagination.totalPages}</span>\n <button\n style={s.btn()}\n disabled={pagination.currentPage >= pagination.totalPages}\n onClick={onNextPage}\n >\n Next →\n </button>\n </div>\n )}\n </>\n )}\n {error && <div style={s.errorMsg}>{error}</div>}\n </div>\n <div style={s.modalFooter}>\n <span style={s.selectedInfo}>\n {selected ? (selected.title ?? selected.name) : 'Nothing selected'}\n </span>\n <div style={s.btnRow}>\n <button style={s.btn()} onClick={onClose}>Cancel</button>\n <button\n style={s.btn(true)}\n disabled={!selected}\n onClick={handleConfirm}\n >\n Select\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// ImagePickerField — the Puck custom field component\n// ---------------------------------------------------------------------------\n\nexport interface ImagePickerFieldProps {\n value: string;\n onChange: (value: string) => void;\n /** Only show images (default: true) */\n imagesOnly?: boolean;\n}\n\nexport const ImagePickerField: React.FC<ImagePickerFieldProps> = ({\n value,\n onChange,\n imagesOnly = true,\n}) => {\n const {\n files,\n pagination,\n loading,\n uploading,\n error,\n fetchMedia,\n uploadFile,\n loadNextPage,\n loadPreviousPage,\n } = useMediaLibrary();\n\n const [showUpload, setShowUpload] = useState(false);\n const [showLibrary, setShowLibrary] = useState(false);\n\n const extensions = imagesOnly ? ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg'] : [];\n\n const openLibrary = useCallback(() => {\n void fetchMedia(extensions, 1, 20);\n setShowLibrary(true);\n }, [fetchMedia, extensions]);\n\n const handleUpload = useCallback(\n async (file: File, title: string, description: string) => {\n const mediaFile = await uploadFile(file, title, description);\n onChange(mediaFile.url);\n setShowUpload(false);\n },\n [uploadFile, onChange]\n );\n\n const handleSelect = useCallback(\n (file: MediaFile) => {\n onChange(file.url);\n setShowLibrary(false);\n },\n [onChange]\n );\n\n // Close modals on Escape\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setShowUpload(false);\n setShowLibrary(false);\n }\n };\n window.addEventListener('keydown', onKey);\n return () => window.removeEventListener('keydown', onKey);\n }, []);\n\n return (\n <div style={s.root}>\n {value ? (\n <div style={s.preview}>\n <img src={value} alt=\"\" style={s.previewImg} />\n <div style={s.previewInfo}>\n <div style={s.previewUrl}>{value}</div>\n </div>\n <button style={s.dangerBtn} onClick={() => onChange('')}>\n Remove\n </button>\n </div>\n ) : (\n <div style={{ color: '#9ca3af', fontSize: '12px', padding: '4px 0' }}>\n No image selected\n </div>\n )}\n\n <div style={s.btnRow}>\n <button style={s.btn()} onClick={() => setShowUpload(true)}>\n Upload\n </button>\n <button style={s.btn(true)} onClick={openLibrary}>\n Media Library\n </button>\n </div>\n\n {showUpload && (\n <UploadModal\n uploading={uploading}\n error={error}\n onUpload={(file, title, desc) => void handleUpload(file, title, desc)}\n onClose={() => setShowUpload(false)}\n />\n )}\n\n {showLibrary && (\n <LibraryModal\n files={files}\n pagination={pagination}\n loading={loading}\n error={error}\n onNextPage={() => void loadNextPage(extensions)}\n onPrevPage={() => void loadPreviousPage(extensions)}\n onSelect={handleSelect}\n onClose={() => setShowLibrary(false)}\n />\n )}\n </div>\n );\n};\n","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { ImagePickerField } from '../fields/ImagePickerField';\n\nexport interface ImageProps {\n src: string;\n alt?: string;\n caption?: string;\n width?: string;\n height?: string;\n objectFit?: 'cover' | 'contain' | 'fill';\n borderRadius?: string;\n align?: 'left' | 'center' | 'right';\n}\n\nexport const Image: ComponentConfig<ImageProps> = {\n label: 'Image',\n fields: {\n src: {\n type: 'custom',\n label: 'Image',\n render: ({ value, onChange }) => (\n <ImagePickerField\n value={value as string}\n onChange={onChange}\n imagesOnly={true}\n />\n ),\n },\n alt: { type: 'text', label: 'Alt Text' },\n caption: { type: 'text', label: 'Caption' },\n width: { type: 'text', label: 'Width (CSS, e.g. 100%)' },\n height: { type: 'text', label: 'Height (CSS, e.g. 300px)' },\n objectFit: {\n type: 'select',\n label: 'Object Fit',\n options: [\n { value: 'cover', label: 'Cover' },\n { value: 'contain', label: 'Contain' },\n { value: 'fill', label: 'Fill' },\n ],\n },\n borderRadius: { type: 'text', label: 'Border Radius (CSS)' },\n align: {\n type: 'select',\n label: 'Alignment',\n options: [\n { value: 'left', label: 'Left' },\n { value: 'center', label: 'Center' },\n { value: 'right', label: 'Right' },\n ],\n },\n },\n defaultProps: {\n src: '',\n alt: '',\n width: '100%',\n objectFit: 'cover',\n align: 'center',\n },\n render: ({ src, alt, caption, width, height, objectFit, borderRadius, align }) => (\n <figure\n style={{\n margin: 0,\n padding: '16px',\n textAlign: align ?? 'center',\n boxSizing: 'border-box',\n }}\n >\n {src ? (\n <img\n src={src}\n alt={alt ?? ''}\n style={{\n width: width ?? '100%',\n height: height,\n objectFit: objectFit ?? 'cover',\n borderRadius,\n display: 'inline-block',\n maxWidth: '100%',\n }}\n />\n ) : (\n <div\n style={{\n width: width ?? '100%',\n height: height ?? '200px',\n background: '#e0e0e0',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#888',\n fontSize: '14px',\n borderRadius,\n }}\n >\n No image selected\n </div>\n )}\n {caption && (\n <figcaption\n style={{ marginTop: '8px', fontSize: '14px', color: '#666' }}\n >\n {caption}\n </figcaption>\n )}\n </figure>\n ),\n};\n","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\n\nexport interface ButtonProps {\n label: string;\n href?: string;\n variant?: 'primary' | 'secondary' | 'outline';\n size?: 'sm' | 'md' | 'lg';\n align?: 'left' | 'center' | 'right';\n openInNewTab?: boolean;\n}\n\nconst VARIANT_STYLES: Record<string, React.CSSProperties> = {\n primary: { background: '#1a1a2e', color: '#fff', border: '2px solid #1a1a2e' },\n secondary: { background: '#e94560', color: '#fff', border: '2px solid #e94560' },\n outline: { background: 'transparent', color: '#1a1a2e', border: '2px solid #1a1a2e' },\n};\n\nconst SIZE_STYLES: Record<string, React.CSSProperties> = {\n sm: { padding: '6px 16px', fontSize: '14px' },\n md: { padding: '10px 24px', fontSize: '16px' },\n lg: { padding: '14px 32px', fontSize: '18px' },\n};\n\nexport const Button: ComponentConfig<ButtonProps> = {\n label: 'Button',\n fields: {\n label: { type: 'text', label: 'Button Label' },\n href: { type: 'text', label: 'Link URL' },\n variant: {\n type: 'select',\n label: 'Variant',\n options: [\n { value: 'primary', label: 'Primary' },\n { value: 'secondary', label: 'Secondary' },\n { value: 'outline', label: 'Outline' },\n ],\n },\n size: {\n type: 'select',\n label: 'Size',\n options: [\n { value: 'sm', label: 'Small' },\n { value: 'md', label: 'Medium' },\n { value: 'lg', label: 'Large' },\n ],\n },\n align: {\n type: 'select',\n label: 'Alignment',\n options: [\n { value: 'left', label: 'Left' },\n { value: 'center', label: 'Center' },\n { value: 'right', label: 'Right' },\n ],\n },\n openInNewTab: { type: 'radio', label: 'Open in New Tab', options: [\n { value: true, label: 'Yes' },\n { value: false, label: 'No' },\n ]},\n },\n defaultProps: {\n label: 'Click me',\n variant: 'primary',\n size: 'md',\n align: 'left',\n openInNewTab: false,\n },\n render: ({ label, href, variant = 'primary', size = 'md', align = 'left', openInNewTab }) => (\n <div style={{ padding: '12px 16px', textAlign: align, boxSizing: 'border-box' }}>\n <a\n href={href ?? '#'}\n target={openInNewTab ? '_blank' : undefined}\n rel={openInNewTab ? 'noopener noreferrer' : undefined}\n style={{\n display: 'inline-block',\n borderRadius: '4px',\n textDecoration: 'none',\n fontWeight: 600,\n cursor: 'pointer',\n ...VARIANT_STYLES[variant],\n ...SIZE_STYLES[size],\n }}\n >\n {label}\n </a>\n </div>\n ),\n};\n","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\n\nexport interface CardProps {\n title: string;\n body?: string;\n imageUrl?: string;\n ctaText?: string;\n ctaUrl?: string;\n shadow?: boolean;\n borderRadius?: string;\n}\n\nexport const Card: ComponentConfig<CardProps> = {\n label: 'Card',\n fields: {\n title: { type: 'text', label: 'Title' },\n body: { type: 'textarea', label: 'Body Text' },\n imageUrl: { type: 'text', label: 'Image URL' },\n ctaText: { type: 'text', label: 'CTA Text' },\n ctaUrl: { type: 'text', label: 'CTA URL' },\n shadow: {\n type: 'radio',\n label: 'Drop Shadow',\n options: [\n { value: true, label: 'Yes' },\n { value: false, label: 'No' },\n ],\n },\n borderRadius: { type: 'text', label: 'Border Radius (CSS)' },\n },\n defaultProps: {\n title: 'Card Title',\n body: 'Card description goes here.',\n shadow: true,\n borderRadius: '8px',\n },\n render: ({ title, body, imageUrl, ctaText, ctaUrl, shadow, borderRadius }) => (\n <div\n style={{\n border: '1px solid #e0e0e0',\n borderRadius: borderRadius ?? '8px',\n overflow: 'hidden',\n boxShadow: shadow ? '0 2px 8px rgba(0,0,0,0.12)' : undefined,\n background: '#fff',\n margin: '8px',\n boxSizing: 'border-box',\n }}\n >\n {imageUrl && (\n <img\n src={imageUrl}\n alt={title}\n style={{ width: '100%', height: '200px', objectFit: 'cover', display: 'block' }}\n />\n )}\n <div style={{ padding: '16px' }}>\n <h3 style={{ margin: '0 0 8px', fontSize: '1.1rem' }}>{title}</h3>\n {body && <p style={{ margin: '0 0 16px', color: '#555', fontSize: '14px' }}>{body}</p>}\n {ctaText && ctaUrl && (\n <a\n href={ctaUrl}\n style={{\n color: '#e94560',\n fontWeight: 600,\n textDecoration: 'none',\n fontSize: '14px',\n }}\n >\n {ctaText} →\n </a>\n )}\n </div>\n </div>\n ),\n};\n","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\n\nexport interface SpacerProps {\n height?: string;\n showLine?: boolean;\n lineColor?: string;\n}\n\nexport const Spacer: ComponentConfig<SpacerProps> = {\n label: 'Spacer',\n fields: {\n height: { type: 'text', label: 'Height (CSS, e.g. 48px)' },\n showLine: {\n type: 'radio',\n label: 'Show Divider Line',\n options: [\n { value: true, label: 'Yes' },\n { value: false, label: 'No' },\n ],\n },\n lineColor: { type: 'text', label: 'Line Color (CSS color)' },\n },\n defaultProps: {\n height: '48px',\n showLine: false,\n lineColor: '#e0e0e0',\n },\n render: ({ height = '48px', showLine = false, lineColor = '#e0e0e0' }) => (\n <div\n style={{\n height,\n display: 'flex',\n alignItems: 'center',\n padding: '0 16px',\n boxSizing: 'border-box',\n }}\n >\n {showLine && (\n <hr style={{ width: '100%', border: 'none', borderTop: `1px solid ${lineColor}` }} />\n )}\n </div>\n ),\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\nimport { useDatasource } from '@commercetools-demo/puck-api';\nimport { DatasourceField, type DatasourceValue } from '../fields/DatasourceField';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ProductTeaserProps {\n datasource: DatasourceValue;\n richText: string;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\ninterface ProductProjection {\n name?: Record<string, string>;\n masterVariant?: {\n images?: Array<{ url: string }>;\n prices?: Array<{\n value: { centAmount: number; currencyCode: string; fractionDigits: number };\n }>;\n };\n}\n\nconst getLocalizedName = (name?: Record<string, string>): string => {\n if (!name) return '';\n return name['en'] ?? name['en-US'] ?? Object.values(name)[0] ?? '';\n};\n\nconst formatPrice = (\n centAmount: number,\n currencyCode: string,\n fractionDigits: number\n): string => {\n const amount = centAmount / Math.pow(10, fractionDigits);\n return `${currencyCode} ${amount.toFixed(fractionDigits)}`;\n};\n\n// ---------------------------------------------------------------------------\n// Render — a proper React component so hooks work\n// ---------------------------------------------------------------------------\n\nconst ProductTeaserRender: React.FC<ProductTeaserProps> = ({\n datasource,\n richText,\n}) => {\n // Skip the hook fetch when the server has already pre-resolved the data.\n const hasPreResolved = datasource?.resolvedData != null;\n const { data: fetchedData, loading, error } = useDatasource(\n hasPreResolved ? undefined : datasource?.type,\n hasPreResolved ? [] : (datasource?.skus ?? [])\n );\n\n const data = hasPreResolved ? datasource.resolvedData : fetchedData;\n\n // For products-by-sku the service returns an array; for product-by-sku a single object.\n const product: ProductProjection | null = data\n ? Array.isArray(data)\n ? (data[0] as ProductProjection) ?? null\n : (data as ProductProjection)\n : null;\n\n const imageUrl = product?.masterVariant?.images?.[0]?.url;\n const priceValue = product?.masterVariant?.prices?.[0]?.value;\n const productName = getLocalizedName(product?.name);\n\n return (\n <div\n style={{\n display: 'flex',\n gap: '24px',\n padding: '16px',\n alignItems: 'flex-start',\n fontFamily: 'inherit',\n }}\n >\n {/* Left: product image */}\n <div style={{ flexShrink: 0, width: '200px' }}>\n {loading ? (\n <div\n style={{\n width: '200px',\n height: '200px',\n background: '#f3f4f6',\n borderRadius: '8px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#9ca3af',\n fontSize: '13px',\n }}\n >\n Loading…\n </div>\n ) : imageUrl ? (\n <img\n src={imageUrl}\n alt={productName}\n style={{\n width: '200px',\n height: '200px',\n objectFit: 'cover',\n borderRadius: '8px',\n display: 'block',\n }}\n />\n ) : (\n <div\n style={{\n width: '200px',\n height: '200px',\n background: '#f3f4f6',\n borderRadius: '8px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#9ca3af',\n fontSize: '13px',\n }}\n >\n {error ? 'Error loading product' : 'No product selected'}\n </div>\n )}\n </div>\n\n {/* Right: rich text + price stacked */}\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n flex: 1,\n minWidth: 0,\n }}\n >\n {richText ? (\n <div dangerouslySetInnerHTML={{ __html: richText }} />\n ) : (\n <div style={{ color: '#9ca3af', fontSize: '13px' }}>\n No description\n </div>\n )}\n\n {priceValue && (\n <div\n style={{\n fontSize: '20px',\n fontWeight: 700,\n color: '#111827',\n }}\n >\n {formatPrice(\n priceValue.centAmount,\n priceValue.currencyCode,\n priceValue.fractionDigits\n )}\n </div>\n )}\n </div>\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Puck component config\n// ---------------------------------------------------------------------------\n\nexport const ProductTeaser: ComponentConfig<ProductTeaserProps> = {\n label: 'Product Teaser',\n fields: {\n datasource: {\n type: 'custom',\n label: 'Product Datasource',\n render: ({ value, onChange }) => (\n <DatasourceField value={value} onChange={onChange} />\n ),\n },\n richText: {\n type: 'textarea',\n label: 'Rich Text (HTML)',\n },\n },\n defaultProps: {\n datasource: { type: 'product-by-sku', skus: [''] },\n richText: '',\n },\n render: (props) => <ProductTeaserRender {...props} />,\n};\n","import React, { useState } from 'react';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type DatasourceType = 'product-by-sku' | 'products-by-sku';\n\nexport interface DatasourceValue {\n type: DatasourceType;\n skus: string[];\n /** Pre-resolved by the server on published/preview endpoints — use directly in render. */\n resolvedData?: unknown;\n}\n\nexport interface DatasourceFieldProps {\n value: DatasourceValue | undefined;\n onChange: (value: DatasourceValue) => void;\n}\n\n// ---------------------------------------------------------------------------\n// Inline styles\n// ---------------------------------------------------------------------------\n\nconst s = {\n root: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '10px',\n fontFamily: 'inherit',\n fontSize: '13px',\n },\n label: { fontSize: '12px', fontWeight: 600, color: '#374151' } as React.CSSProperties,\n select: {\n width: '100%',\n padding: '7px 10px',\n border: '1px solid #d1d5db',\n borderRadius: '4px',\n fontSize: '13px',\n background: '#fff',\n boxSizing: 'border-box' as const,\n },\n skuRow: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n },\n input: {\n flex: 1,\n padding: '7px 10px',\n border: '1px solid #d1d5db',\n borderRadius: '4px',\n fontSize: '13px',\n boxSizing: 'border-box' as const,\n } as React.CSSProperties,\n removeBtn: {\n padding: '5px 8px',\n border: '1px solid #fca5a5',\n borderRadius: '4px',\n background: '#fff',\n color: '#dc2626',\n fontWeight: 600,\n fontSize: '13px',\n cursor: 'pointer',\n lineHeight: 1,\n flexShrink: 0,\n } as React.CSSProperties,\n addBtn: {\n padding: '5px 12px',\n border: '1px solid #d1d5db',\n borderRadius: '4px',\n background: '#fff',\n color: '#374151',\n fontWeight: 500,\n fontSize: '12px',\n cursor: 'pointer',\n alignSelf: 'flex-start' as const,\n } as React.CSSProperties,\n skuList: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '6px',\n },\n};\n\n// ---------------------------------------------------------------------------\n// DatasourceField — custom Puck field component\n// ---------------------------------------------------------------------------\n\nconst EMPTY_VALUE: DatasourceValue = { type: 'product-by-sku', skus: [''] };\n\nexport const DatasourceField: React.FC<DatasourceFieldProps> = ({\n value,\n onChange,\n}) => {\n const current: DatasourceValue = value ?? EMPTY_VALUE;\n\n const handleTypeChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const newType = e.target.value as DatasourceType;\n onChange({ type: newType, skus: newType === 'product-by-sku' ? [current.skus[0] ?? ''] : current.skus });\n };\n\n const handleSingleSkuChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange({ ...current, skus: [e.target.value] });\n };\n\n const handleMultiSkuChange = (index: number, val: string) => {\n const updated = [...current.skus];\n updated[index] = val;\n onChange({ ...current, skus: updated });\n };\n\n const addSku = () => {\n onChange({ ...current, skus: [...current.skus, ''] });\n };\n\n const removeSku = (index: number) => {\n const updated = current.skus.filter((_, i) => i !== index);\n onChange({ ...current, skus: updated.length > 0 ? updated : [''] });\n };\n\n return (\n <div style={s.root}>\n <div>\n <div style={s.label}>Datasource type</div>\n <select style={s.select} value={current.type} onChange={handleTypeChange}>\n <option value=\"product-by-sku\">Product by SKU</option>\n <option value=\"products-by-sku\">Products by SKU</option>\n </select>\n </div>\n\n {current.type === 'product-by-sku' ? (\n <div>\n <div style={s.label}>SKU</div>\n <input\n style={s.input}\n type=\"text\"\n placeholder=\"Enter product SKU\"\n value={current.skus[0] ?? ''}\n onChange={handleSingleSkuChange}\n />\n </div>\n ) : (\n <div>\n <div style={s.label}>SKUs</div>\n <div style={s.skuList}>\n {current.skus.map((sku, i) => (\n <div key={i} style={s.skuRow}>\n <input\n style={s.input}\n type=\"text\"\n placeholder={`SKU ${i + 1}`}\n value={sku}\n onChange={(e) => handleMultiSkuChange(i, e.target.value)}\n />\n <button\n style={s.removeBtn}\n onClick={() => removeSku(i)}\n title=\"Remove SKU\"\n >\n ×\n </button>\n </div>\n ))}\n <button style={s.addBtn} onClick={addSku}>\n + Add SKU\n </button>\n </div>\n </div>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\nimport { ImagePickerField } from '../../fields/ImagePickerField';\n\nexport interface HeroBannerProps {\n title: string;\n subtitle: string;\n image: string;\n}\n\nexport const HeroBanner: ComponentConfig<HeroBannerProps> = {\n label: 'Hero Banner',\n fields: {\n title: { type: 'text', label: 'Title' },\n subtitle: { type: 'text', label: 'Subtitle' },\n image: {\n type: 'custom',\n label: 'Image',\n render: ({ value, onChange }) => (\n <ImagePickerField value={value ?? ''} onChange={onChange} />\n ),\n },\n },\n defaultProps: { title: '', subtitle: '', image: '' },\n render: ({ title, subtitle, image }) => (\n <div\n style={{\n position: 'relative',\n width: '100%',\n paddingBottom: '56.25%',\n overflow: 'hidden',\n backgroundColor: '#f0f0f0',\n }}\n >\n {image && (\n <img\n src={image}\n alt={title || 'Hero banner'}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n objectPosition: 'center',\n }}\n />\n )}\n {/* dark overlay */}\n <div\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'rgba(0,0,0,0.3)',\n zIndex: 1,\n }}\n />\n <div\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%,-50%)',\n textAlign: 'center',\n color: 'white',\n zIndex: 2,\n padding: '2rem',\n maxWidth: '90%',\n }}\n >\n {title && (\n <h1\n style={{\n fontSize: '3rem',\n fontWeight: 'bold',\n margin: '0 0 1rem 0',\n textShadow: '2px 2px 4px rgba(0,0,0,0.7)',\n }}\n >\n {title}\n </h1>\n )}\n {subtitle && (\n <p\n style={{\n fontSize: '1.25rem',\n margin: 0,\n textShadow: '1px 1px 2px rgba(0,0,0,0.7)',\n opacity: 0.95,\n }}\n >\n {subtitle}\n </p>\n )}\n </div>\n </div>\n ),\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\n\nexport interface TextBlockProps {\n content: string;\n}\n\nexport const TextBlock: ComponentConfig<TextBlockProps> = {\n label: 'Text Block',\n fields: {\n content: { type: 'textarea', label: 'Content (HTML)' },\n },\n defaultProps: { content: '' },\n render: ({ content }) => {\n if (!content) return <></>;\n return (\n <div\n dangerouslySetInnerHTML={{ __html: content }}\n style={{\n maxWidth: '720px',\n margin: '0 auto',\n padding: '1.5rem 1rem',\n lineHeight: 1.6,\n color: '#333',\n }}\n />\n );\n },\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\nimport { ImagePickerField } from '../../fields/ImagePickerField';\n\nexport interface CategoryGridProps {\n category1Image: string; category1Label: string; category1Link: string;\n category2Image: string; category2Label: string; category2Link: string;\n category3Image: string; category3Label: string; category3Link: string;\n category4Image: string; category4Label: string; category4Link: string;\n}\n\nconst imgField = (label: string) => ({\n type: 'custom' as const,\n label,\n render: ({ value, onChange }: { value: string; onChange: (v: string) => void }) => (\n <ImagePickerField value={value ?? ''} onChange={onChange} />\n ),\n});\n\nexport const CategoryGrid: ComponentConfig<CategoryGridProps> = {\n label: 'Category Grid',\n fields: {\n category1Image: imgField('Category 1 Image'),\n category1Label: { type: 'text', label: 'Category 1 Label' },\n category1Link: { type: 'text', label: 'Category 1 Link' },\n category2Image: imgField('Category 2 Image'),\n category2Label: { type: 'text', label: 'Category 2 Label' },\n category2Link: { type: 'text', label: 'Category 2 Link' },\n category3Image: imgField('Category 3 Image'),\n category3Label: { type: 'text', label: 'Category 3 Label' },\n category3Link: { type: 'text', label: 'Category 3 Link' },\n category4Image: imgField('Category 4 Image'),\n category4Label: { type: 'text', label: 'Category 4 Label' },\n category4Link: { type: 'text', label: 'Category 4 Link' },\n },\n defaultProps: {\n category1Image: '', category1Label: '', category1Link: '',\n category2Image: '', category2Label: '', category2Link: '',\n category3Image: '', category3Label: '', category3Link: '',\n category4Image: '', category4Label: '', category4Link: '',\n },\n render: (props) => {\n const categories = [\n [props.category1Image, props.category1Label, props.category1Link],\n [props.category2Image, props.category2Label, props.category2Link],\n [props.category3Image, props.category3Label, props.category3Link],\n [props.category4Image, props.category4Label, props.category4Link],\n ].filter(([, label, link]) => label && link) as [string, string, string][];\n\n if (categories.length === 0) return (\n <div style={{ padding: '2rem', textAlign: 'center', color: '#999', fontSize: '13px' }}>\n No categories configured\n </div>\n );\n\n return (\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(200px, 1fr))',\n gap: '1.5rem',\n padding: '2rem 1rem',\n }}\n >\n {categories.map(([image, label, link], i) => (\n <a\n key={i}\n href={link}\n style={{\n display: 'block',\n textAlign: 'center',\n textDecoration: 'none',\n color: 'inherit',\n borderRadius: '8px',\n overflow: 'hidden',\n boxShadow: '0 2px 8px rgba(0,0,0,0.1)',\n }}\n >\n <div style={{ aspectRatio: '1', background: '#f0f0f0', overflow: 'hidden' }}>\n {image && (\n <img\n src={image}\n alt={label}\n style={{ width: '100%', height: '100%', objectFit: 'cover' }}\n />\n )}\n </div>\n <span\n style={{\n display: 'block',\n padding: '1rem',\n fontWeight: 600,\n color: '#333',\n }}\n >\n {label}\n </span>\n </a>\n ))}\n </div>\n );\n },\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\nimport { ImagePickerField } from '../../fields/ImagePickerField';\n\nexport interface CategoryHeroProps {\n title: string;\n subtitle: string;\n image: string;\n ctaText: string;\n ctaLink: string;\n}\n\nexport const CategoryHero: ComponentConfig<CategoryHeroProps> = {\n label: 'Category Hero',\n fields: {\n title: { type: 'text', label: 'Title' },\n subtitle: { type: 'text', label: 'Subtitle' },\n image: {\n type: 'custom', label: 'Background Image',\n render: ({ value, onChange }) => <ImagePickerField value={value ?? ''} onChange={onChange} />,\n },\n ctaText: { type: 'text', label: 'CTA Text' },\n ctaLink: { type: 'text', label: 'CTA Link' },\n },\n defaultProps: { title: '', subtitle: '', image: '', ctaText: '', ctaLink: '' },\n render: ({ title, subtitle, image, ctaText, ctaLink }) => (\n <div\n style={{\n position: 'relative',\n minHeight: '220px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: '#f0f0f0',\n borderRadius: '8px',\n overflow: 'hidden',\n margin: '1rem 0',\n }}\n >\n {image && (\n <img\n src={image}\n alt={title || 'Category'}\n style={{\n position: 'absolute',\n top: 0, left: 0,\n width: '100%', height: '100%',\n objectFit: 'cover',\n opacity: 0.85,\n }}\n />\n )}\n <div style={{ position: 'absolute', inset: 0, background: 'rgba(0,0,0,0.25)' }} />\n <div\n style={{\n position: 'relative',\n zIndex: 1,\n textAlign: 'center',\n padding: '2rem',\n color: 'white',\n textShadow: '0 1px 3px rgba(0,0,0,0.5)',\n }}\n >\n {title && <h1 style={{ fontSize: '2.5rem', marginBottom: '0.5rem' }}>{title}</h1>}\n {subtitle && <p style={{ fontSize: '1.1rem', marginBottom: '1rem' }}>{subtitle}</p>}\n {ctaText && ctaLink && (\n <a\n href={ctaLink}\n style={{\n display: 'inline-block',\n background: 'white',\n color: '#2c5530',\n padding: '0.75rem 2rem',\n borderRadius: '4px',\n textDecoration: 'none',\n fontWeight: 600,\n }}\n >\n {ctaText}\n </a>\n )}\n </div>\n </div>\n ),\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\n\nexport interface CheckoutPromoBannerProps {\n title: string;\n message: string;\n ctaText: string;\n ctaLink: string;\n}\n\nexport const CheckoutPromoBanner: ComponentConfig<CheckoutPromoBannerProps> = {\n label: 'Checkout Promo Banner',\n fields: {\n title: { type: 'text', label: 'Title' },\n message: { type: 'text', label: 'Message' },\n ctaText: { type: 'text', label: 'CTA Text' },\n ctaLink: { type: 'text', label: 'CTA Link' },\n },\n defaultProps: { title: '', message: '', ctaText: '', ctaLink: '' },\n render: ({ title, message, ctaText, ctaLink }) => {\n if (!title && !message && !ctaText) return <></>;\n return (\n <div\n style={{\n padding: '1rem 1.25rem',\n background: '#f0f7f0',\n border: '1px solid #c8e6c8',\n borderRadius: '4px',\n marginBottom: '1rem',\n fontSize: '0.95rem',\n }}\n >\n {title && (\n <div style={{ fontWeight: 600, color: '#2c5530', marginBottom: '0.25rem' }}>\n {title}\n </div>\n )}\n {message && <p style={{ margin: '0 0 0.5rem 0', color: '#333' }}>{message}</p>}\n {ctaText && ctaLink && (\n <a href={ctaLink} style={{ color: '#2c5530', fontWeight: 600, textDecoration: 'none' }}>\n {ctaText}\n </a>\n )}\n </div>\n );\n },\n};\n","import React, { useEffect, useState } from 'react';\nimport { type ComponentConfig } from '@measured/puck';\n\nexport interface CountdownBannerProps {\n headline: string;\n subline: string;\n endDate: string;\n ctaText: string;\n ctaLink: string;\n background: string;\n}\n\nconst calcTimeLeft = (endDate: string): string => {\n if (!endDate) return '';\n const end = new Date(endDate);\n const now = new Date();\n if (end <= now) return 'Offer ended';\n const diff = end.getTime() - now.getTime();\n const d = Math.floor(diff / 86_400_000);\n const h = Math.floor((diff % 86_400_000) / 3_600_000);\n const m = Math.floor((diff % 3_600_000) / 60_000);\n const s = Math.floor((diff % 60_000) / 1_000);\n if (d > 0) return `${d}d ${h}h ${m}m left`;\n if (h > 0) return `${h}h ${m}m ${s}s left`;\n return `${m}m ${s}s left`;\n};\n\nconst CountdownRender: React.FC<CountdownBannerProps> = ({\n headline, subline, endDate, ctaText, ctaLink, background,\n}) => {\n const [timeLeft, setTimeLeft] = useState(() => calcTimeLeft(endDate));\n useEffect(() => {\n if (!endDate) return;\n const id = setInterval(() => setTimeLeft(calcTimeLeft(endDate)), 1000);\n return () => clearInterval(id);\n }, [endDate]);\n\n return (\n <div\n style={{\n background: background || '#2c5530',\n color: 'white',\n padding: '2rem 1rem',\n textAlign: 'center',\n borderRadius: '4px',\n margin: '1rem 0',\n }}\n >\n {headline && <h2 style={{ fontSize: '1.75rem', marginBottom: '0.5rem' }}>{headline}</h2>}\n {subline && <p style={{ fontSize: '1rem', opacity: 0.9, marginBottom: '1rem' }}>{subline}</p>}\n {timeLeft && (\n <p style={{ fontSize: '1.25rem', fontWeight: 600, margin: '0 0 1rem 0', letterSpacing: '0.05em' }}>\n {timeLeft}\n </p>\n )}\n {ctaText && ctaLink && (\n <a\n href={ctaLink}\n style={{\n display: 'inline-block',\n background: 'white',\n color: '#2c5530',\n padding: '0.75rem 2rem',\n borderRadius: '4px',\n textDecoration: 'none',\n fontWeight: 600,\n }}\n >\n {ctaText}\n </a>\n )}\n </div>\n );\n};\n\nexport const CountdownBanner: ComponentConfig<CountdownBannerProps> = {\n label: 'Countdown Banner',\n fields: {\n headline: { type: 'text', label: 'Headline' },\n subline: { type: 'text', label: 'Subline' },\n endDate: { type: 'text', label: 'End Date (ISO, e.g. 2025-12-31T23:59:59)' },\n ctaText: { type: 'text', label: 'CTA Text' },\n ctaLink: { type: 'text', label: 'CTA Link' },\n background: { type: 'text', label: 'Background Color' },\n },\n defaultProps: {\n headline: '', subline: '', endDate: '', ctaText: '', ctaLink: '', background: '#2c5530',\n },\n render: (props) => <CountdownRender {...props} />,\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\nimport { useDatasource } from '@commercetools-demo/puck-api';\nimport { DatasourceField, type DatasourceValue } from '../../fields/DatasourceField';\nimport { formatPrice, getFirstPrice, getLocalizedText, getProductImage, getProductSlug } from './shared';\n\nexport interface CrossSellBlockProps {\n title: string;\n products: DatasourceValue;\n ctaText: string;\n}\n\nconst CrossSellRender: React.FC<CrossSellBlockProps> = ({ title, products, ctaText }) => {\n const hasPreResolved = products?.resolvedData != null;\n const { data: fetchedData, loading } = useDatasource(\n hasPreResolved ? undefined : products?.type,\n hasPreResolved ? [] : (products?.skus ?? [])\n );\n const items: unknown[] = hasPreResolved\n ? (Array.isArray(products.resolvedData) ? products.resolvedData : [])\n : (Array.isArray(fetchedData) ? fetchedData : []);\n\n if (!loading && items.length === 0) return null;\n\n return (\n <div style={{ padding: '2rem 0', borderTop: '1px solid #eee' }}>\n {title && <h3 style={{ fontSize: '1.5rem', marginBottom: '1.5rem', color: '#333' }}>{title || 'Frequently bought together'}</h3>}\n {loading && <div style={{ color: '#999', padding: '1rem' }}>Loading…</div>}\n {items.length > 0 && (\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(180px, 1fr))',\n gap: '1rem',\n }}\n >\n {items.map((product, i) => {\n const name = getLocalizedText((product as any)?.name);\n const imageUrl = getProductImage(product);\n const priceVal = getFirstPrice(product);\n const slug = getProductSlug(product);\n return (\n <a\n key={(product as any)?.id ?? i}\n href={slug}\n style={{\n textAlign: 'center',\n textDecoration: 'none',\n color: 'inherit',\n padding: '1rem',\n borderRadius: '8px',\n border: '1px solid #eee',\n }}\n >\n <div style={{ height: '120px', marginBottom: '0.75rem', display: 'flex', alignItems: 'center', justifyContent: 'center', background: '#f9f9f9', borderRadius: '4px' }}>\n {imageUrl\n ? <img src={imageUrl} alt={name} style={{ maxWidth: '100%', maxHeight: '100%', objectFit: 'contain' }} />\n : null\n }\n </div>\n <div style={{ fontWeight: 600, fontSize: '0.95rem', marginBottom: '0.25rem' }}>{name}</div>\n {priceVal && (\n <div style={{ fontSize: '1.1rem', color: '#2c5530', fontWeight: 'bold' }}>\n {formatPrice(priceVal.centAmount, priceVal.currencyCode, priceVal.fractionDigits)}\n </div>\n )}\n </a>\n );\n })}\n </div>\n )}\n {ctaText && (\n <a href=\"#\" style={{ display: 'inline-block', marginTop: '1rem', color: '#2c5530', fontWeight: 600, textDecoration: 'none' }}>\n {ctaText}\n </a>\n )}\n </div>\n );\n};\n\nexport const CrossSellBlock: ComponentConfig<CrossSellBlockProps> = {\n label: 'Cross-Sell Block',\n fields: {\n title: { type: 'text', label: 'Title' },\n products: {\n type: 'custom', label: 'Products',\n render: ({ value, onChange }) => <DatasourceField value={value} onChange={onChange} />,\n },\n ctaText: { type: 'text', label: 'CTA Text' },\n },\n defaultProps: {\n title: 'Frequently bought together',\n products: { type: 'products-by-sku', skus: [''] },\n ctaText: '',\n },\n render: (props) => <CrossSellRender {...props} />,\n};\n","// Shared helpers used across CMS Puck components\n\nexport const getLocalizedText = (obj?: Record<string, string> | null): string => {\n if (!obj) return '';\n return obj['en-US'] ?? obj['en'] ?? Object.values(obj)[0] ?? '';\n};\n\nexport const formatPrice = (\n centAmount: number,\n currencyCode = 'USD',\n fractionDigits = 2\n): string => {\n const amount = centAmount / Math.pow(10, fractionDigits);\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: currencyCode,\n }).format(amount);\n};\n\nexport const getFirstPrice = (\n product: unknown\n): { centAmount: number; currencyCode: string; fractionDigits: number } | null => {\n const p = product as any;\n return p?.masterVariant?.prices?.[0]?.value ?? null;\n};\n\nexport const getProductImage = (product: unknown): string | null => {\n const p = product as any;\n return p?.masterVariant?.images?.[0]?.url ?? null;\n};\n\nexport const getProductName = (product: unknown): string => {\n const p = product as any;\n return getLocalizedText(p?.name) || 'Product';\n};\n\nexport const getProductSlug = (product: unknown): string => {\n const p = product as any;\n return getLocalizedText(p?.slug) || p?.id || '#';\n};\n\n// Colour palette shared across components\nexport const colors = {\n primary: '#2c5530',\n primaryHover: '#1e3a21',\n lightBg: '#f0f7f0',\n lightBorder: '#c8e6c8',\n text: '#333',\n textMuted: '#666',\n border: '#eee',\n bg: '#f5f5f5',\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\n\nexport interface DeliveryMessageProps {\n message: string;\n threshold: string;\n}\n\nexport const DeliveryMessage: ComponentConfig<DeliveryMessageProps> = {\n label: 'Delivery Message',\n fields: {\n message: { type: 'text', label: 'Message (use $XX for threshold)' },\n threshold: { type: 'text', label: 'Threshold Amount (e.g. 50)' },\n },\n defaultProps: { message: 'Free delivery on orders over $50', threshold: '' },\n render: ({ message, threshold }) => {\n if (!message) return <></>;\n const text = threshold\n ? message.replace(/\\$\\d+/g, `$${threshold}`)\n : message;\n return (\n <div\n style={{\n padding: '0.75rem 1rem',\n background: '#f0f7f0',\n borderRadius: '4px',\n fontSize: '0.95rem',\n color: '#2c5530',\n }}\n >\n {text}\n </div>\n );\n },\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\n\nexport interface DividerProps {\n lineStyle: 'solid' | 'dashed' | 'dotted';\n spacing: string;\n}\n\nexport const Divider: ComponentConfig<DividerProps> = {\n label: 'Divider',\n fields: {\n lineStyle: {\n type: 'select',\n label: 'Line Style',\n options: [\n { value: 'solid', label: 'Solid' },\n { value: 'dashed', label: 'Dashed' },\n { value: 'dotted', label: 'Dotted' },\n ],\n },\n spacing: { type: 'text', label: 'Spacing (px)' },\n },\n defaultProps: { lineStyle: 'solid', spacing: '24' },\n render: ({ lineStyle, spacing }) => {\n const s = parseInt(spacing, 10) || 24;\n return (\n <hr\n style={{\n border: 'none',\n borderTop: `1px ${lineStyle} #ddd`,\n margin: `${s / 2}px 0`,\n }}\n />\n );\n },\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\nimport { ImagePickerField } from '../../fields/ImagePickerField';\n\nexport interface EmptyStateProps {\n image: string;\n title: string;\n description: string;\n ctaText: string;\n ctaLink: string;\n}\n\nexport const EmptyState: ComponentConfig<EmptyStateProps> = {\n label: 'Empty State',\n fields: {\n image: {\n type: 'custom', label: 'Image',\n render: ({ value, onChange }) => <ImagePickerField value={value ?? ''} onChange={onChange} />,\n },\n title: { type: 'text', label: 'Title' },\n description: { type: 'text', label: 'Description' },\n ctaText: { type: 'text', label: 'CTA Text' },\n ctaLink: { type: 'text', label: 'CTA Link' },\n },\n defaultProps: { image: '', title: '', description: '', ctaText: '', ctaLink: '' },\n render: ({ image, title, description, ctaText, ctaLink }) => (\n <div style={{ textAlign: 'center', padding: '3rem 1rem' }}>\n {image && (\n <img\n src={image}\n alt={title || 'Empty state'}\n style={{ maxWidth: '200px', height: 'auto', marginBottom: '1.5rem', opacity: 0.8 }}\n />\n )}\n {title && <h2 style={{ fontSize: '1.5rem', color: '#333', marginBottom: '0.5rem' }}>{title}</h2>}\n {description && (\n <p style={{ color: '#666', marginBottom: '1.5rem', maxWidth: '400px', margin: '0 auto 1.5rem' }}>\n {description}\n </p>\n )}\n {ctaText && ctaLink && (\n <a\n href={ctaLink}\n style={{\n display: 'inline-block',\n background: '#2c5530',\n color: 'white',\n padding: '0.75rem 2rem',\n borderRadius: '4px',\n textDecoration: 'none',\n fontWeight: 600,\n }}\n >\n {ctaText}\n </a>\n )}\n </div>\n ),\n};\n","import React, { useState } from 'react';\nimport { type ComponentConfig } from '@measured/puck';\n\nexport interface FAQAccordionProps {\n question1: string; answer1: string;\n question2: string; answer2: string;\n question3: string; answer3: string;\n question4: string; answer4: string;\n}\n\nconst FAQRender: React.FC<FAQAccordionProps> = (props) => {\n const items = [\n [props.question1, props.answer1],\n [props.question2, props.answer2],\n [props.question3, props.answer3],\n [props.question4, props.answer4],\n ].filter(([q]) => q) as [string, string][];\n\n const [open, setOpen] = useState<number | null>(null);\n\n if (items.length === 0) return (\n <div style={{ padding: '1rem', color: '#999', fontSize: '13px' }}>No FAQ items configured</div>\n );\n\n return (\n <div style={{ border: '1px solid #eee', borderRadius: '8px', overflow: 'hidden' }}>\n {items.map(([question, answer], i) => (\n <div key={i} style={{ borderBottom: i < items.length - 1 ? '1px solid #eee' : 'none' }}>\n <button\n onClick={() => setOpen(open === i ? null : i)}\n style={{\n width: '100%',\n padding: '1rem 1.25rem',\n textAlign: 'left',\n fontWeight: 600,\n fontSize: '1rem',\n background: '#fafafa',\n border: 'none',\n cursor: 'pointer',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n {question}\n <span style={{ fontSize: '1.2rem', lineHeight: 1 }}>{open === i ? '−' : '+'}</span>\n </button>\n {open === i && answer && (\n <div\n dangerouslySetInnerHTML={{ __html: answer }}\n style={{\n padding: '1rem 1.25rem',\n background: 'white',\n fontSize: '0.95rem',\n lineHeight: 1.5,\n color: '#555',\n }}\n />\n )}\n </div>\n ))}\n </div>\n );\n};\n\nexport const FAQAccordion: ComponentConfig<FAQAccordionProps> = {\n label: 'FAQ Accordion',\n fields: {\n question1: { type: 'text', label: 'Question 1' },\n answer1: { type: 'textarea', label: 'Answer 1 (HTML)' },\n question2: { type: 'text', label: 'Question 2' },\n answer2: { type: 'textarea', label: 'Answer 2 (HTML)' },\n question3: { type: 'text', label: 'Question 3' },\n answer3: { type: 'textarea', label: 'Answer 3 (HTML)' },\n question4: { type: 'text', label: 'Question 4' },\n answer4: { type: 'textarea', label: 'Answer 4 (HTML)' },\n },\n defaultProps: {\n question1: '', answer1: '',\n question2: '', answer2: '',\n question3: '', answer3: '',\n question4: '', answer4: '',\n },\n render: (props) => <FAQRender {...props} />,\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\n\nexport interface FooterBlockProps {\n column1: string;\n column2: string;\n column3: string;\n copyright: string;\n}\n\nexport const FooterBlock: ComponentConfig<FooterBlockProps> = {\n label: 'Footer Block',\n fields: {\n column1: { type: 'textarea', label: 'Column 1 (HTML)' },\n column2: { type: 'textarea', label: 'Column 2 (HTML)' },\n column3: { type: 'textarea', label: 'Column 3 (HTML)' },\n copyright: { type: 'text', label: 'Copyright Text' },\n },\n defaultProps: { column1: '', column2: '', column3: '', copyright: '' },\n render: ({ column1, column2, column3, copyright }) => {\n const columns = [column1, column2, column3].filter(Boolean);\n return (\n <footer style={{ background: '#333', color: '#eee', padding: '2rem 1rem', marginTop: '3rem' }}>\n {columns.length > 0 && (\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: `repeat(${columns.length}, 1fr)`,\n gap: '2rem',\n maxWidth: '1200px',\n margin: '0 auto 2rem',\n }}\n >\n {columns.map((html, i) => (\n <div\n key={i}\n dangerouslySetInnerHTML={{ __html: html }}\n style={{ fontSize: '0.9rem', lineHeight: 1.6 }}\n />\n ))}\n </div>\n )}\n {copyright && (\n <p style={{ textAlign: 'center', fontSize: '0.85rem', color: '#999', margin: 0 }}>\n {copyright}\n </p>\n )}\n </footer>\n );\n },\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\nimport { ImagePickerField } from '../../fields/ImagePickerField';\n\nexport interface ImageBlockProps {\n image: string;\n caption: string;\n link: string;\n}\n\nexport const ImageBlock: ComponentConfig<ImageBlockProps> = {\n label: 'Image Block',\n fields: {\n image: {\n type: 'custom', label: 'Image',\n render: ({ value, onChange }) => <ImagePickerField value={value ?? ''} onChange={onChange} />,\n },\n caption: { type: 'text', label: 'Caption' },\n link: { type: 'text', label: 'Link URL' },\n },\n defaultProps: { image: '', caption: '', link: '' },\n render: ({ image, caption, link }) => {\n if (!image) return (\n <div style={{ padding: '2rem', textAlign: 'center', color: '#999', background: '#f5f5f5', borderRadius: '4px' }}>\n No image selected\n </div>\n );\n const img = (\n <img\n src={image}\n alt={caption || 'Image'}\n style={{ maxWidth: '100%', height: 'auto', borderRadius: '4px' }}\n />\n );\n return (\n <figure style={{ margin: '1rem 0', textAlign: 'center' }}>\n {link ? <a href={link} style={{ display: 'inline-block' }}>{img}</a> : img}\n {caption && (\n <figcaption style={{ marginTop: '0.5rem', fontSize: '0.9rem', color: '#666' }}>\n {caption}\n </figcaption>\n )}\n </figure>\n );\n },\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\n\nexport interface NewsletterSignupProps {\n title: string;\n subtitle: string;\n ctaText: string;\n placeholder: string;\n}\n\nexport const NewsletterSignup: ComponentConfig<NewsletterSignupProps> = {\n label: 'Newsletter Signup',\n fields: {\n title: { type: 'text', label: 'Title' },\n subtitle: { type: 'text', label: 'Subtitle' },\n ctaText: { type: 'text', label: 'Button Text' },\n placeholder: { type: 'text', label: 'Input Placeholder' },\n },\n defaultProps: { title: '', subtitle: '', ctaText: 'Subscribe', placeholder: 'Enter your email' },\n render: ({ title, subtitle, ctaText, placeholder }) => (\n <div\n style={{\n textAlign: 'center',\n padding: '2rem 1rem',\n background: '#f5f5f5',\n borderRadius: '8px',\n maxWidth: '480px',\n margin: '0 auto',\n }}\n >\n {title && <h3 style={{ fontSize: '1.5rem', marginBottom: '0.5rem', color: '#333' }}>{title}</h3>}\n {subtitle && <p style={{ fontSize: '0.95rem', color: '#666', marginBottom: '1.5rem' }}>{subtitle}</p>}\n <form\n onSubmit={(e) => e.preventDefault()}\n style={{ display: 'flex', gap: '0.5rem', flexWrap: 'wrap', justifyContent: 'center' }}\n >\n <input\n type=\"email\"\n placeholder={placeholder}\n aria-label=\"Email\"\n style={{\n padding: '0.75rem 1rem',\n border: '1px solid #ddd',\n borderRadius: '4px',\n fontSize: '1rem',\n minWidth: '200px',\n }}\n />\n <button\n type=\"submit\"\n style={{\n padding: '0.75rem 1.5rem',\n background: '#2c5530',\n color: 'white',\n border: 'none',\n borderRadius: '4px',\n fontWeight: 600,\n cursor: 'pointer',\n }}\n >\n {ctaText || 'Subscribe'}\n </button>\n </form>\n </div>\n ),\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\nimport { useDatasource } from '@commercetools-demo/puck-api';\nimport { DatasourceField, type DatasourceValue } from '../../fields/DatasourceField';\nimport { formatPrice, getFirstPrice, getLocalizedText } from './shared';\n\nexport interface ProductBannerProps {\n title: string;\n description: string;\n ctaText: string;\n ctaLink: string;\n product: DatasourceValue;\n productOnLeft: boolean;\n background: string;\n}\n\nconst ProductBannerRender: React.FC<ProductBannerProps> = ({\n title, description, ctaText, ctaLink, product, productOnLeft, background,\n}) => {\n const hasPreResolved = product?.resolvedData != null;\n const { data: fetchedData, loading } = useDatasource(\n hasPreResolved ? undefined : product?.type,\n hasPreResolved ? [] : (product?.skus ?? [])\n );\n const raw = hasPreResolved ? product.resolvedData : fetchedData;\n const p = raw as any;\n\n const name = getLocalizedText(p?.name);\n const description2 = getLocalizedText(p?.description);\n const imageUrl = p?.masterVariant?.images?.[0]?.url;\n const sku = p?.masterVariant?.sku;\n const priceVal = getFirstPrice(p);\n\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n minHeight: '400px',\n backgroundColor: background || '#f5f5f5',\n padding: '2rem',\n borderRadius: '2px',\n margin: '1rem 0',\n gap: '2rem',\n flexDirection: productOnLeft ? 'row-reverse' : 'row',\n flexWrap: 'wrap',\n }}\n >\n {/* Content side */}\n <div style={{ flex: 1, minWidth: '200px' }}>\n {title && <h2 style={{ fontSize: '2rem', fontWeight: 'bold', marginBottom: '1rem', color: '#333' }}>{title}</h2>}\n {description && (\n <div\n dangerouslySetInnerHTML={{ __html: description }}\n style={{ marginBottom: '2rem', color: '#555', lineHeight: 1.6 }}\n />\n )}\n {ctaText && ctaLink && (\n <a\n href={ctaLink}\n style={{\n display: 'inline-block',\n backgroundColor: '#2c5530',\n color: 'white',\n padding: '0.75rem 2rem',\n borderRadius: '2px',\n textDecoration: 'none',\n fontWeight: 600,\n }}\n >\n {ctaText}\n </a>\n )}\n </div>\n\n {/* Product side */}\n <div style={{ flex: 1, minWidth: '200px', display: 'flex', flexDirection: 'column', alignItems: 'center' }}>\n {loading && <div style={{ color: '#999', padding: '2rem' }}>Loading product…</div>}\n {name && <h3 style={{ fontSize: '1.5rem', fontWeight: 600, marginBottom: '0.5rem', textAlign: 'center' }}>{name}</h3>}\n {description2 && <p style={{ fontSize: '0.9rem', color: '#666', textAlign: 'center', marginBottom: '1rem', fontStyle: 'italic' }}>{description2}</p>}\n {imageUrl && (\n <img\n src={imageUrl}\n alt={name || 'Product'}\n style={{ maxWidth: '100%', maxHeight: '300px', objectFit: 'cover', borderRadius: '2px', marginBottom: '1rem', boxShadow: '0 4px 12px rgba(0,0,0,0.1)' }}\n />\n )}\n {priceVal && (\n <span\n style={{\n fontSize: '1.25rem',\n fontWeight: 'bold',\n color: '#2c5530',\n background: 'rgba(255,255,255,0.8)',\n padding: '0.5rem 1rem',\n borderRadius: '2px',\n marginBottom: '0.5rem',\n }}\n >\n {formatPrice(priceVal.centAmount, priceVal.currencyCode, priceVal.fractionDigits)}\n </span>\n )}\n {sku && (\n <span style={{ fontSize: '0.85rem', color: '#666', background: 'rgba(255,255,255,0.6)', padding: '0.25rem 0.75rem', borderRadius: '2px' }}>\n SKU: {sku}\n </span>\n )}\n {!loading && !p && (\n <div style={{ color: '#999', fontSize: '13px', padding: '2rem', textAlign: 'center' }}>No product selected</div>\n )}\n </div>\n </div>\n );\n};\n\nexport const ProductBanner: ComponentConfig<ProductBannerProps> = {\n label: 'Product Banner',\n fields: {\n title: { type: 'text', label: 'Title' },\n description: { type: 'textarea', label: 'Description (HTML)' },\n ctaText: { type: 'text', label: 'CTA Text' },\n ctaLink: { type: 'text', label: 'CTA Link' },\n product: {\n type: 'custom', label: 'Product',\n render: ({ value, onChange }) => <DatasourceField value={value} onChange={onChange} />,\n },\n productOnLeft: {\n type: 'radio', label: 'Product Position',\n options: [\n { value: false, label: 'Product on Right' },\n { value: true, label: 'Product on Left' },\n ],\n },\n background: { type: 'text', label: 'Background Color' },\n },\n defaultProps: {\n title: '',\n description: '',\n ctaText: '',\n ctaLink: '',\n product: { type: 'product-by-sku', skus: [''] },\n productOnLeft: false,\n background: '#f5f5f5',\n },\n render: (props) => <ProductBannerRender {...props} />,\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\n\nexport interface ProductGridHeaderProps {\n title: string;\n description: string;\n}\n\nexport const ProductGridHeader: ComponentConfig<ProductGridHeaderProps> = {\n label: 'Product Grid Header',\n fields: {\n title: { type: 'text', label: 'Title' },\n description: { type: 'textarea', label: 'Description (HTML)' },\n },\n defaultProps: { title: '', description: '' },\n render: ({ title, description }) => (\n <div style={{ marginBottom: '2rem', padding: '0 1rem' }}>\n {title && (\n <h1 style={{ fontSize: '2rem', fontWeight: 'bold', color: '#333', marginBottom: '0.75rem' }}>\n {title}\n </h1>\n )}\n {description && (\n <div\n dangerouslySetInnerHTML={{ __html: description }}\n style={{ fontSize: '1rem', color: '#666', lineHeight: 1.5, maxWidth: '720px' }}\n />\n )}\n </div>\n ),\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\nimport { useDatasource } from '@commercetools-demo/puck-api';\nimport { DatasourceField, type DatasourceValue } from '../../fields/DatasourceField';\nimport { formatPrice, getFirstPrice, getLocalizedText, getProductImage, getProductSlug } from './shared';\n\nexport interface ProductSliderProps {\n title: string;\n subtitle: string;\n products: DatasourceValue;\n}\n\nconst ProductSliderRender: React.FC<ProductSliderProps> = ({ title, subtitle, products }) => {\n const hasPreResolved = products?.resolvedData != null;\n const { data: fetchedData, loading } = useDatasource(\n hasPreResolved ? undefined : products?.type,\n hasPreResolved ? [] : (products?.skus ?? [])\n );\n const items: unknown[] = hasPreResolved\n ? (Array.isArray(products.resolvedData) ? products.resolvedData : [])\n : (Array.isArray(fetchedData) ? fetchedData : []);\n\n return (\n <div style={{ padding: '2rem 0' }}>\n {(title || subtitle) && (\n <div style={{ textAlign: 'center', marginBottom: '1.5rem' }}>\n {title && <h2 style={{ fontSize: '2rem', fontWeight: 'bold', color: '#333', marginBottom: '0.5rem' }}>{title}</h2>}\n {subtitle && <p style={{ fontSize: '1.1rem', color: '#666', margin: 0 }}>{subtitle}</p>}\n </div>\n )}\n {loading && <div style={{ textAlign: 'center', color: '#999', padding: '2rem' }}>Loading products…</div>}\n {!loading && items.length === 0 && (\n <div style={{ textAlign: 'center', color: '#999', padding: '2rem', fontSize: '13px' }}>No products configured</div>\n )}\n {items.length > 0 && (\n <div\n style={{\n display: 'flex',\n gap: '1rem',\n overflowX: 'auto',\n scrollSnapType: 'x mandatory',\n paddingBottom: '1rem',\n }}\n >\n {items.map((product, i) => {\n const name = getLocalizedText((product as any)?.name);\n const desc = getLocalizedText((product as any)?.description);\n const imageUrl = getProductImage(product);\n const priceVal = getFirstPrice(product);\n const slug = getProductSlug(product);\n return (\n <a\n key={(product as any)?.id ?? i}\n href={slug}\n style={{\n flex: '0 0 280px',\n background: 'white',\n borderRadius: '12px',\n boxShadow: '0 4px 12px rgba(0,0,0,0.1)',\n overflow: 'hidden',\n textDecoration: 'none',\n color: 'inherit',\n scrollSnapAlign: 'start',\n }}\n >\n <div style={{ width: '100%', height: '200px', background: '#f5f5f5', display: 'flex', alignItems: 'center', justifyContent: 'center', overflow: 'hidden' }}>\n {imageUrl\n ? <img src={imageUrl} alt={name} style={{ width: '100%', height: '100%', objectFit: 'contain' }} />\n : <span style={{ color: '#999', fontSize: '0.85rem' }}>No image</span>\n }\n </div>\n <div style={{ padding: '1.5rem' }}>\n <h3 style={{ fontSize: '1.1rem', fontWeight: 600, color: '#333', marginBottom: '0.5rem', lineHeight: 1.3 }}>{name}</h3>\n {desc && (\n <p style={{ fontSize: '0.9rem', color: '#666', marginBottom: '1rem', display: '-webkit-box', WebkitLineClamp: 2, WebkitBoxOrient: 'vertical', overflow: 'hidden' }}>\n {desc}\n </p>\n )}\n {priceVal && (\n <div style={{ fontSize: '1.2rem', fontWeight: 'bold', color: '#2c5530' }}>\n {formatPrice(priceVal.centAmount, priceVal.currencyCode, priceVal.fractionDigits)}\n </div>\n )}\n </div>\n </a>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n\nexport const ProductSlider: ComponentConfig<ProductSliderProps> = {\n label: 'Product Slider',\n fields: {\n title: { type: 'text', label: 'Title' },\n subtitle: { type: 'text', label: 'Subtitle' },\n products: {\n type: 'custom', label: 'Products',\n render: ({ value, onChange }) => <DatasourceField value={value} onChange={onChange} />,\n },\n },\n defaultProps: {\n title: '',\n subtitle: '',\n products: { type: 'products-by-sku', skus: [''] },\n },\n render: (props) => <ProductSliderRender {...props} />,\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\nimport { ImagePickerField } from '../../fields/ImagePickerField';\n\nexport interface PromotionalBannerProps {\n image: string;\n title: string;\n subtitle: string;\n ctaText: string;\n ctaLink: string;\n background: string;\n}\n\nexport const PromotionalBanner: ComponentConfig<PromotionalBannerProps> = {\n label: 'Promotional Banner',\n fields: {\n image: {\n type: 'custom', label: 'Image',\n render: ({ value, onChange }) => <ImagePickerField value={value ?? ''} onChange={onChange} />,\n },\n title: { type: 'text', label: 'Title' },\n subtitle: { type: 'text', label: 'Subtitle' },\n ctaText: { type: 'text', label: 'CTA Text' },\n ctaLink: { type: 'text', label: 'CTA Link' },\n background: { type: 'text', label: 'Background Color' },\n },\n defaultProps: { image: '', title: '', subtitle: '', ctaText: '', ctaLink: '', background: '#f5f5f5' },\n render: ({ image, title, subtitle, ctaText, ctaLink, background }) => (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n minHeight: '280px',\n backgroundColor: background || '#f5f5f5',\n padding: '2rem',\n borderRadius: '2px',\n margin: '1rem 0',\n gap: '2rem',\n flexWrap: 'wrap',\n }}\n >\n {image && (\n <div style={{ flex: '0 0 auto', maxWidth: '40%' }}>\n <img src={image} alt={title || 'Promo'} style={{ maxWidth: '100%', height: 'auto', borderRadius: '2px' }} />\n </div>\n )}\n <div style={{ flex: 1, minWidth: '200px' }}>\n {title && <h2 style={{ fontSize: '1.75rem', fontWeight: 'bold', marginBottom: '0.5rem', color: '#333' }}>{title}</h2>}\n {subtitle && <p style={{ fontSize: '1rem', color: '#666', marginBottom: '1rem' }}>{subtitle}</p>}\n {ctaText && ctaLink && (\n <a\n href={ctaLink}\n style={{\n display: 'inline-block',\n backgroundColor: '#2c5530',\n color: 'white',\n padding: '0.75rem 2rem',\n borderRadius: '2px',\n textDecoration: 'none',\n fontWeight: 600,\n }}\n >\n {ctaText}\n </a>\n )}\n </div>\n </div>\n ),\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\nimport { useDatasource } from '@commercetools-demo/puck-api';\nimport { DatasourceField, type DatasourceValue } from '../../fields/DatasourceField';\nimport { formatPrice, getFirstPrice, getLocalizedText, getProductImage, getProductSlug } from './shared';\n\nexport interface RelatedProductsSliderProps {\n title: string;\n subtitle: string;\n products: DatasourceValue;\n}\n\nconst RelatedProductsRender: React.FC<RelatedProductsSliderProps> = ({ title, subtitle, products }) => {\n const hasPreResolved = products?.resolvedData != null;\n const { data: fetchedData, loading } = useDatasource(\n hasPreResolved ? undefined : products?.type,\n hasPreResolved ? [] : (products?.skus ?? [])\n );\n const items: unknown[] = hasPreResolved\n ? (Array.isArray(products.resolvedData) ? products.resolvedData : [])\n : (Array.isArray(fetchedData) ? fetchedData : []);\n\n if (!loading && items.length === 0) return null;\n\n return (\n <div style={{ padding: '2rem 0' }}>\n {(title || subtitle) && (\n <div style={{ textAlign: 'center', marginBottom: '1.5rem' }}>\n {title && <h2 style={{ fontSize: '2rem', fontWeight: 'bold', color: '#333', marginBottom: '0.5rem' }}>{title}</h2>}\n {subtitle && <p style={{ fontSize: '1.1rem', color: '#666', margin: 0 }}>{subtitle}</p>}\n </div>\n )}\n {loading && <div style={{ textAlign: 'center', color: '#999', padding: '2rem' }}>Loading…</div>}\n {items.length > 0 && (\n <div\n style={{\n display: 'flex',\n gap: '1rem',\n overflowX: 'auto',\n scrollSnapType: 'x mandatory',\n paddingBottom: '1rem',\n }}\n >\n {items.map((product, i) => {\n const name = getLocalizedText((product as any)?.name);\n const imageUrl = getProductImage(product);\n const priceVal = getFirstPrice(product);\n const slug = getProductSlug(product);\n return (\n <a\n key={(product as any)?.id ?? i}\n href={slug}\n style={{\n flex: '0 0 280px',\n background: 'white',\n borderRadius: '12px',\n boxShadow: '0 4px 12px rgba(0,0,0,0.1)',\n overflow: 'hidden',\n textDecoration: 'none',\n color: 'inherit',\n scrollSnapAlign: 'start',\n }}\n >\n <div style={{ width: '100%', height: '200px', background: '#f5f5f5', display: 'flex', alignItems: 'center', justifyContent: 'center', overflow: 'hidden' }}>\n {imageUrl\n ? <img src={imageUrl} alt={name} style={{ width: '100%', height: '100%', objectFit: 'contain' }} />\n : <span style={{ color: '#999', fontSize: '0.85rem' }}>No image</span>\n }\n </div>\n <div style={{ padding: '1.5rem' }}>\n <h3 style={{ fontSize: '1.1rem', fontWeight: 600, color: '#333', marginBottom: '0.5rem' }}>{name}</h3>\n {priceVal && (\n <div style={{ fontSize: '1.2rem', fontWeight: 'bold', color: '#2c5530' }}>\n {formatPrice(priceVal.centAmount, priceVal.currencyCode, priceVal.fractionDigits)}\n </div>\n )}\n </div>\n </a>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n\nexport const RelatedProductsSlider: ComponentConfig<RelatedProductsSliderProps> = {\n label: 'Related Products',\n fields: {\n title: { type: 'text', label: 'Title' },\n subtitle: { type: 'text', label: 'Subtitle' },\n products: {\n type: 'custom', label: 'Products',\n render: ({ value, onChange }) => <DatasourceField value={value} onChange={onChange} />,\n },\n },\n defaultProps: {\n title: 'Related Products',\n subtitle: '',\n products: { type: 'products-by-sku', skus: [''] },\n },\n render: (props) => <RelatedProductsRender {...props} />,\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\n\nexport interface SocialLinksProps {\n link1Label: string; link1Url: string;\n link2Label: string; link2Url: string;\n link3Label: string; link3Url: string;\n link4Label: string; link4Url: string;\n}\n\nexport const SocialLinks: ComponentConfig<SocialLinksProps> = {\n label: 'Social Links',\n fields: {\n link1Label: { type: 'text', label: 'Link 1 Label' },\n link1Url: { type: 'text', label: 'Link 1 URL' },\n link2Label: { type: 'text', label: 'Link 2 Label' },\n link2Url: { type: 'text', label: 'Link 2 URL' },\n link3Label: { type: 'text', label: 'Link 3 Label' },\n link3Url: { type: 'text', label: 'Link 3 URL' },\n link4Label: { type: 'text', label: 'Link 4 Label' },\n link4Url: { type: 'text', label: 'Link 4 URL' },\n },\n defaultProps: {\n link1Label: '', link1Url: '',\n link2Label: '', link2Url: '',\n link3Label: '', link3Url: '',\n link4Label: '', link4Url: '',\n },\n render: (props) => {\n const links = [\n [props.link1Label, props.link1Url],\n [props.link2Label, props.link2Url],\n [props.link3Label, props.link3Url],\n [props.link4Label, props.link4Url],\n ].filter(([label, url]) => label && url) as [string, string][];\n if (links.length === 0) return <></>;\n return (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '1rem', padding: '0.5rem 0' }}>\n {links.map(([label, url], i) => (\n <a\n key={i}\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ color: '#2c5530', textDecoration: 'none', fontWeight: 500, fontSize: '0.95rem' }}\n >\n {label}\n </a>\n ))}\n </div>\n );\n },\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\n\nexport interface TabContentProps {\n tabLabel: string;\n content: string;\n}\n\nexport const TabContent: ComponentConfig<TabContentProps> = {\n label: 'Tab Content',\n fields: {\n tabLabel: { type: 'text', label: 'Tab Label' },\n content: { type: 'textarea', label: 'Content (HTML)' },\n },\n defaultProps: { tabLabel: '', content: '' },\n render: ({ tabLabel, content }) => {\n if (!content) return <></>;\n return (\n <div style={{ padding: '1.5rem 0', lineHeight: 1.6, color: '#333' }}>\n {tabLabel && <h3 style={{ marginBottom: '1rem' }}>{tabLabel}</h3>}\n <div dangerouslySetInnerHTML={{ __html: content }} />\n </div>\n );\n },\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\n\nexport interface TestimonialsSliderProps {\n quote1: string; author1: string; role1: string;\n quote2: string; author2: string; role2: string;\n quote3: string; author3: string; role3: string;\n}\n\nexport const TestimonialsSlider: ComponentConfig<TestimonialsSliderProps> = {\n label: 'Testimonials',\n fields: {\n quote1: { type: 'textarea', label: 'Quote 1' },\n author1: { type: 'text', label: 'Author 1' },\n role1: { type: 'text', label: 'Role 1' },\n quote2: { type: 'textarea', label: 'Quote 2' },\n author2: { type: 'text', label: 'Author 2' },\n role2: { type: 'text', label: 'Role 2' },\n quote3: { type: 'textarea', label: 'Quote 3' },\n author3: { type: 'text', label: 'Author 3' },\n role3: { type: 'text', label: 'Role 3' },\n },\n defaultProps: {\n quote1: '', author1: '', role1: '',\n quote2: '', author2: '', role2: '',\n quote3: '', author3: '', role3: '',\n },\n render: (props) => {\n const items = [\n [props.quote1, props.author1, props.role1],\n [props.quote2, props.author2, props.role2],\n [props.quote3, props.author3, props.role3],\n ].filter(([q]) => q) as [string, string, string][];\n if (items.length === 0) return <></>;\n return (\n <div style={{ padding: '2rem 1rem', background: '#f9f9f9', borderRadius: '8px', margin: '1rem 0' }}>\n {items.map(([quote, author, role], i) => (\n <div key={i} style={{ marginBottom: i < items.length - 1 ? '2rem' : 0 }}>\n <blockquote\n style={{\n fontSize: '1.15rem',\n fontStyle: 'italic',\n color: '#444',\n margin: '0 0 0.75rem 0',\n paddingLeft: '1rem',\n borderLeft: '4px solid #2c5530',\n }}\n >\n {quote}\n </blockquote>\n {author && (\n <cite style={{ fontStyle: 'normal', fontSize: '0.95rem', fontWeight: 600, color: '#333' }}>\n — {author}\n {role && <span style={{ fontWeight: 'normal', color: '#666' }}> ({role})</span>}\n </cite>\n )}\n </div>\n ))}\n </div>\n );\n },\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\n\nexport interface ThankYouContentProps {\n headline: string;\n message: string;\n ctaText: string;\n ctaLink: string;\n}\n\nexport const ThankYouContent: ComponentConfig<ThankYouContentProps> = {\n label: 'Thank You Content',\n fields: {\n headline: { type: 'text', label: 'Headline' },\n message: { type: 'textarea', label: 'Message (HTML)' },\n ctaText: { type: 'text', label: 'CTA Text' },\n ctaLink: { type: 'text', label: 'CTA Link' },\n },\n defaultProps: { headline: 'Thank you for your order!', message: '', ctaText: '', ctaLink: '' },\n render: ({ headline, message, ctaText, ctaLink }) => (\n <div style={{ textAlign: 'center', padding: '3rem 1rem', maxWidth: '560px', margin: '0 auto' }}>\n {headline && (\n <h1 style={{ fontSize: '2rem', color: '#2c5530', marginBottom: '1rem' }}>{headline}</h1>\n )}\n {message && (\n <div\n dangerouslySetInnerHTML={{ __html: message }}\n style={{ fontSize: '1rem', lineHeight: 1.6, color: '#555', marginBottom: '2rem' }}\n />\n )}\n {ctaText && ctaLink && (\n <a\n href={ctaLink}\n style={{\n display: 'inline-block',\n background: '#2c5530',\n color: 'white',\n padding: '0.75rem 2rem',\n borderRadius: '4px',\n textDecoration: 'none',\n fontWeight: 600,\n }}\n >\n {ctaText}\n </a>\n )}\n </div>\n ),\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\nimport { ImagePickerField } from '../../fields/ImagePickerField';\n\nexport interface TrustBadgesProps {\n badge1Icon: string; badge1Label: string;\n badge2Icon: string; badge2Label: string;\n badge3Icon: string; badge3Label: string;\n badge4Icon: string; badge4Label: string;\n}\n\nconst iconField = (label: string) => ({\n type: 'custom' as const,\n label,\n render: ({ value, onChange }: { value: string; onChange: (v: string) => void }) => (\n <ImagePickerField value={value ?? ''} onChange={onChange} />\n ),\n});\n\nexport const TrustBadges: ComponentConfig<TrustBadgesProps> = {\n label: 'Trust Badges',\n fields: {\n badge1Icon: iconField('Badge 1 Icon'),\n badge1Label: { type: 'text', label: 'Badge 1 Label' },\n badge2Icon: iconField('Badge 2 Icon'),\n badge2Label: { type: 'text', label: 'Badge 2 Label' },\n badge3Icon: iconField('Badge 3 Icon'),\n badge3Label: { type: 'text', label: 'Badge 3 Label' },\n badge4Icon: iconField('Badge 4 Icon'),\n badge4Label: { type: 'text', label: 'Badge 4 Label' },\n },\n defaultProps: {\n badge1Icon: '', badge1Label: '',\n badge2Icon: '', badge2Label: '',\n badge3Icon: '', badge3Label: '',\n badge4Icon: '', badge4Label: '',\n },\n render: (props) => {\n const badges = [\n [props.badge1Icon, props.badge1Label],\n [props.badge2Icon, props.badge2Label],\n [props.badge3Icon, props.badge3Label],\n [props.badge4Icon, props.badge4Label],\n ].filter(([, label]) => label) as [string, string][];\n if (badges.length === 0) return <></>;\n return (\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'center',\n gap: '2rem',\n padding: '2rem 1rem',\n background: '#f9f9f9',\n borderRadius: '4px',\n }}\n >\n {badges.map(([icon, label], i) => (\n <div key={i} style={{ display: 'flex', alignItems: 'center', gap: '0.75rem' }}>\n {icon && (\n <img\n src={icon}\n alt={label}\n style={{ width: '40px', height: '40px', objectFit: 'contain' }}\n />\n )}\n <span style={{ fontSize: '0.95rem', fontWeight: 500, color: '#333' }}>{label}</span>\n </div>\n ))}\n </div>\n );\n },\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\nimport { ImagePickerField } from '../../fields/ImagePickerField';\n\nexport interface VideoBlockProps {\n videoUrl: string;\n posterImage: string;\n title: string;\n caption: string;\n}\n\nexport const VideoBlock: ComponentConfig<VideoBlockProps> = {\n label: 'Video Block',\n fields: {\n videoUrl: { type: 'text', label: 'Video URL' },\n posterImage: {\n type: 'custom', label: 'Poster Image',\n render: ({ value, onChange }) => <ImagePickerField value={value ?? ''} onChange={onChange} />,\n },\n title: { type: 'text', label: 'Title' },\n caption: { type: 'text', label: 'Caption' },\n },\n defaultProps: { videoUrl: '', posterImage: '', title: '', caption: '' },\n render: ({ videoUrl, posterImage, title, caption }) => {\n if (!videoUrl) return (\n <div style={{ padding: '2rem', textAlign: 'center', color: '#999', background: '#f5f5f5', borderRadius: '8px' }}>\n No video URL configured\n </div>\n );\n return (\n <div style={{ margin: '1.5rem 0' }}>\n <div\n style={{\n position: 'relative',\n paddingBottom: '56.25%',\n height: 0,\n overflow: 'hidden',\n background: '#000',\n borderRadius: '8px',\n }}\n >\n <video\n src={videoUrl}\n poster={posterImage || undefined}\n controls\n preload=\"metadata\"\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n objectFit: 'contain',\n }}\n />\n </div>\n {title && <h4 style={{ marginTop: '0.75rem', fontSize: '1.1rem', color: '#333' }}>{title}</h4>}\n {caption && <p style={{ fontSize: '0.9rem', color: '#666', marginTop: '0.25rem' }}>{caption}</p>}\n </div>\n );\n },\n};\n","import React from 'react';\nimport { type ComponentConfig } from '@measured/puck';\nimport { ImagePickerField } from '../../fields/ImagePickerField';\n\nexport interface WebsiteLogoProps {\n logo: string;\n maxWidth: string;\n maxHeight: string;\n}\n\nexport const WebsiteLogo: ComponentConfig<WebsiteLogoProps> = {\n label: 'Website Logo',\n fields: {\n logo: {\n type: 'custom', label: 'Logo',\n render: ({ value, onChange }) => <ImagePickerField value={value ?? ''} onChange={onChange} />,\n },\n maxWidth: { type: 'text', label: 'Max Width (px)' },\n maxHeight: { type: 'text', label: 'Max Height (px)' },\n },\n defaultProps: { logo: '', maxWidth: '180', maxHeight: '50' },\n render: ({ logo, maxWidth, maxHeight }) => {\n if (!logo) return (\n <div style={{ width: `${parseInt(maxWidth, 10) || 180}px`, height: `${parseInt(maxHeight, 10) || 50}px`, background: '#f0f0f0', borderRadius: '4px' }} />\n );\n return (\n <div\n style={{\n maxWidth: `${parseInt(maxWidth, 10) || 180}px`,\n maxHeight: `${parseInt(maxHeight, 10) || 50}px`,\n }}\n >\n <img\n src={logo}\n alt=\"Logo\"\n style={{ width: '100%', height: '100%', objectFit: 'contain' }}\n />\n </div>\n );\n },\n};\n","import React from 'react';\nimport type { PuckStateInfo } from '@commercetools-demo/puck-types';\n\ntype BadgeVariant = 'saving' | 'unsaved' | 'draft' | 'published';\n\ninterface StatusBadgeProps {\n label: string;\n variant: BadgeVariant;\n}\n\nconst BADGE_STYLES: Record<BadgeVariant, { bg: string; color: string; border: string }> = {\n saving: { bg: 'rgba(251, 191, 36, 0.12)', color: 'var(--status-saving)', border: 'rgba(251, 191, 36, 0.3)' },\n unsaved: { bg: 'rgba(100, 116, 139, 0.12)', color: 'var(--text-muted)', border: 'rgba(100, 116, 139, 0.3)' },\n draft: { bg: 'rgba(129, 140, 248, 0.12)', color: 'var(--status-draft)', border: 'rgba(129, 140, 248, 0.3)' },\n published: { bg: 'rgba(6, 214, 160, 0.12)', color: 'var(--status-published)', border: 'rgba(6, 214, 160, 0.3)' },\n};\n\nconst StatusBadge: React.FC<StatusBadgeProps> = ({ label, variant }) => {\n const s = BADGE_STYLES[variant];\n return (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n padding: '2px 10px',\n borderRadius: '12px',\n fontSize: '12px',\n fontWeight: 600,\n background: s.bg,\n color: s.color,\n border: `1px solid ${s.border}`,\n }}\n >\n {label}\n </span>\n );\n};\n\nexport interface EditorToolbarProps {\n saving: boolean;\n isDirty: boolean;\n states: PuckStateInfo;\n onSave: () => void;\n onPublish: () => void;\n onRevert: () => void;\n showPublishButton: boolean;\n}\n\nexport const EditorToolbar: React.FC<EditorToolbarProps> = ({\n saving,\n isDirty,\n states,\n onSave,\n onPublish,\n onRevert,\n showPublishButton,\n}) => {\n const hasDraft = Boolean(states.draft);\n const hasPublished = Boolean(states.published);\n\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n flexWrap: 'wrap',\n }}\n >\n {/* Status indicators */}\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px' }}>\n {saving && <StatusBadge label=\"Saving…\" variant=\"saving\" />}\n {!saving && isDirty && <StatusBadge label=\"Unsaved\" variant=\"unsaved\" />}\n {!saving && !isDirty && hasDraft && (\n <StatusBadge label=\"Draft\" variant=\"draft\" />\n )}\n {hasPublished && <StatusBadge label=\"Published\" variant=\"published\" />}\n </div>\n\n {/* Revert button — only when there's a draft and an existing published version */}\n {hasDraft && hasPublished && (\n <button\n onClick={onRevert}\n disabled={saving}\n style={{\n padding: '6px 14px',\n borderRadius: '4px',\n border: '1px solid var(--border-glow)',\n background: 'transparent',\n color: 'var(--text-muted)',\n fontWeight: 500,\n fontSize: '13px',\n cursor: saving ? 'not-allowed' : 'pointer',\n opacity: saving ? 0.5 : 1,\n }}\n >\n Revert to Published\n </button>\n )}\n\n {/* Save draft button */}\n <button\n onClick={onSave}\n disabled={!isDirty || saving}\n style={{\n padding: '6px 14px',\n borderRadius: '4px',\n border: '1px solid var(--border-glow)',\n background: 'transparent',\n color: 'var(--text-muted)',\n fontWeight: 500,\n fontSize: '13px',\n cursor: (!isDirty || saving) ? 'not-allowed' : 'pointer',\n opacity: (!isDirty || saving) ? 0.4 : 1,\n }}\n >\n Save\n </button>\n\n {/* Publish button */}\n {showPublishButton && (\n <button\n onClick={onPublish}\n disabled={saving}\n style={{\n padding: '6px 16px',\n borderRadius: '4px',\n border: '1px solid var(--accent-cyan)',\n background: 'rgba(0, 212, 255, 0.1)',\n color: 'var(--accent-cyan)',\n fontWeight: 600,\n fontSize: '13px',\n cursor: saving ? 'not-allowed' : 'pointer',\n opacity: saving ? 0.5 : 1,\n boxShadow: '0 0 12px rgba(0, 212, 255, 0.15)',\n }}\n >\n {hasPublished ? 'Re-publish' : 'Publish'}\n </button>\n )}\n </div>\n );\n};\n","import React, { createContext, useContext, useState, type ReactNode } from 'react';\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\ninterface ComponentSearchContextValue {\n search: string;\n setSearch: (value: string) => void;\n}\n\nexport const ComponentSearchContext = createContext<ComponentSearchContextValue>({\n search: '',\n setSearch: () => {},\n});\n\nexport const ComponentSearchProvider: React.FC<{ children: ReactNode }> = ({ children }) => {\n const [search, setSearch] = useState('');\n return (\n <ComponentSearchContext.Provider value={{ search, setSearch }}>\n {children}\n </ComponentSearchContext.Provider>\n );\n};\n\n// ---------------------------------------------------------------------------\n// components override — sticky search input + scrollable list\n//\n// CSS trick: Puck's Drawer renders each item as a direct `div` child of the\n// `[data-puck-dnd]` container (flex, gap:12px). When an item is hidden we\n// inject a `data-hidden-component` span; the `:has()` rule sets that wrapper\n// to `display:none` so it's removed from the flex flow entirely (no gap\n// accumulation from invisible items).\n// ---------------------------------------------------------------------------\n\nexport const ComponentsPanel: React.FC<{ children: ReactNode }> = ({ children }) => {\n const { search, setSearch } = useContext(ComponentSearchContext);\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}>\n {/* Remove hidden DrawerItem wrappers from the flex layout */}\n <style>{`[data-puck-dnd] > div:has([data-hidden-component]) { display: none !important; }`}</style>\n\n {/* Sticky search bar */}\n <div\n style={{\n flexShrink: 0,\n padding: '0',\n margin: '12px 0',\n background: 'var(--puck-color-white, #fff)',\n position: 'sticky',\n top: 0,\n zIndex: 1,\n }}\n >\n <input\n type=\"search\"\n placeholder=\"Search components…\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n style={{\n width: '100%',\n boxSizing: 'border-box',\n padding: '6px 10px',\n borderRadius: '4px',\n border: '1px solid var(--puck-color-grey-08, #d1d5db)',\n background: 'var(--puck-color-white, #fff)',\n fontSize: '13px',\n outline: 'none',\n color: 'inherit',\n }}\n />\n </div>\n\n {/* Scrollable component list */}\n <div style={{ flex: 1, overflowY: 'auto' }}>{children}</div>\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// componentItem override — hides non-matching items via a data marker so\n// the CSS rule above can remove the wrapper from the flex flow.\n// ---------------------------------------------------------------------------\n\nexport const ComponentItemFilter: React.FC<{ children: ReactNode; name: string }> = ({\n children,\n name,\n}) => {\n const { search } = useContext(ComponentSearchContext);\n const isHidden = search.trim() !== '' && !name.toLowerCase().includes(search.toLowerCase());\n\n if (isHidden) {\n // Render a zero-size marker; the `:has([data-hidden-component])` CSS rule\n // hides the ancestor DrawerItem wrapper completely (no gap residue).\n return <span data-hidden-component />;\n }\n return <>{children}</>;\n};\n"],"mappings":"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","names":["import_react","import_puck","import_puck_api","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_puck_api","import_jsx_runtime","s","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","s","import_puck_api","formatPrice","import_jsx_runtime","formatPrice","import_jsx_runtime","import_jsx_runtime","s","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_puck_api","import_jsx_runtime","formatPrice","import_jsx_runtime","import_puck_api","import_jsx_runtime","formatPrice","import_jsx_runtime","import_puck_api","import_jsx_runtime","formatPrice","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","React","import_jsx_runtime","s","import_react","import_jsx_runtime","import_jsx_runtime"]}
|