@commercetools-demo/puck-components 0.8.1 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/intl/en.json","../src/intl/es.json","../src/intl/index.ts","../src/utils/sanitizeHtml.ts","../src/components/RichTextContent.tsx","../src/components/cms/shared.ts","../src/components/Root.tsx","../src/components/Hero.tsx","../src/components/RichText.tsx","../src/components/Grid.tsx","../src/components/Columns.tsx","../src/components/Image.tsx","../src/components/Button.tsx","../src/components/Card.tsx","../src/components/Spacer.tsx","../src/components/ProductTeaser.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/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/renderConfig.tsx"],"sourcesContent":["// -----------------------------------------------------------------------------\n// @commercetools-demo/puck-components — Nimbus-free \"visualize\" layer\n//\n// Component render functions, their prop types, shared render helpers, the i18n\n// catalogs, and a render-only Puck config. The editor package composes these\n// render functions with its (Nimbus-backed) field widgets; the renderer uses the\n// render config directly. Nothing here imports @commercetools/nimbus.\n// -----------------------------------------------------------------------------\n\n// i18n message catalogs (keyed by language)\nexport { catalogs as intlCatalogs } from './intl';\n\n// Rich-text rendering + HTML sanitization\nexport { sanitizeHtml } from './utils/sanitizeHtml';\nexport { RichTextContent } from './components/RichTextContent';\nexport type { RichTextContentProps } from './components/RichTextContent';\n\n// Datasource value types (shared with the editor's DatasourceField widget)\nexport type { DatasourceType, DatasourceValue } from './datasource.types';\n\n// Shared render helpers, types, and data\nexport {\n getLocalizedText,\n formatPrice,\n getFirstPrice,\n getProductImage,\n getProductName,\n getProductSlug,\n getProductSku,\n resolveProductLink,\n productLinkDefaults,\n colors,\n} from './components/cms/shared';\nexport type { ProductLinkWith, ProductLinkProps } from './components/cms/shared';\n\n// Component render functions + prop types\nexport * from './components';\n\n// Render-only Puck config (components' render fns; no fields → no Nimbus)\nexport { createRenderConfig, defaultRenderConfig } from './renderConfig';\n","{\n \"Editor.loadingEditor\": \"Loading editor…\",\n \"Editor.errorLoadingPage\": \"Error loading page:\",\n \"Editor.toggleComponentsPanel\": \"Toggle components panel\",\n \"Editor.togglePropertiesPanel\": \"Toggle properties panel\",\n \"Editor.undo\": \"Undo\",\n \"Editor.redo\": \"Redo\",\n \"Editor.badgeSaving\": \"Saving…\",\n \"Editor.badgeUnsaved\": \"Unsaved\",\n \"Editor.badgeDraft\": \"Draft\",\n \"Editor.badgePublished\": \"Published\",\n \"Editor.preview\": \"Preview\",\n \"Editor.save\": \"Save\",\n \"Editor.publish\": \"Publish\",\n \"Editor.moreOptions\": \"More options\",\n \"Editor.hideVersionHistory\": \"Hide version history\",\n \"Editor.versionHistory\": \"Version history\",\n \"Editor.revertToPublished\": \"Revert to published\",\n \"Editor.createTemplateFromPage\": \"Create a template from this page\",\n \"Editor.createTemplateTitle\": \"Create a new template\",\n \"Editor.nameLabel\": \"Name\",\n \"Editor.nameRequired\": \"Name is required\",\n \"Editor.templateNamePlaceholder\": \"e.g. Landing page\",\n \"Editor.createTemplateWithoutData\": \"Create template without data\",\n \"Editor.cancel\": \"Cancel\",\n \"Editor.creating\": \"Creating…\",\n \"Editor.create\": \"Create\",\n \"Editor.discardChangesTitle\": \"Discard unsaved changes?\",\n \"Editor.discardChangesBody\": \"You have unsaved changes on this page. If you leave now, those changes will be lost.\",\n \"Editor.stayOnPage\": \"Stay on page\",\n \"Editor.leaveAndDiscard\": \"Leave & discard\",\n \"Editor.showPanel\": \"Show {panel} panel\",\n \"Editor.tabComponents\": \"Components\",\n \"Editor.tabHistory\": \"History\",\n \"Editor.searchComponents\": \"Search components\",\n \"Editor.searchComponentsPlaceholder\": \"Search components…\",\n \"Editor.clearSearch\": \"Clear search\",\n \"Editor.resizePropertiesPanel\": \"Resize properties panel\",\n \"Editor.resizeComponentsPanel\": \"Resize components panel\",\n \"Editor.searchProducts\": \"Search products\",\n \"Editor.searchProductsPlaceholder\": \"Search by product name…\",\n \"Editor.productSearchResults\": \"Product search results\",\n \"Editor.searching\": \"Searching…\",\n \"Editor.noProductsFound\": \"No products found\",\n \"Editor.unnamedProduct\": \"(unnamed product)\",\n \"Editor.skuLabel\": \"SKU: {sku}\",\n \"Editor.noSkuOnMasterVariant\": \"No SKU on master variant\",\n \"Editor.added\": \"Added\",\n \"Editor.datasourceType\": \"Datasource type\",\n \"Editor.datasourceProductBySku\": \"Product by SKU\",\n \"Editor.datasourceProductsBySku\": \"Products by SKU\",\n \"Editor.selectedProduct\": \"Selected product\",\n \"Editor.selectedProducts\": \"Selected products\",\n \"Editor.noProductSelectedSearch\": \"No product selected — search above to add one.\",\n \"Editor.remove\": \"Remove\",\n \"Editor.richTextPlaceholder\": \"Start typing…\",\n \"Editor.uploadAFile\": \"Upload a file\",\n \"Editor.close\": \"Close\",\n \"Editor.title\": \"Title\",\n \"Editor.fileTitlePlaceholder\": \"File title\",\n \"Editor.description\": \"Description\",\n \"Editor.optionalDescriptionPlaceholder\": \"Optional description\",\n \"Editor.dropToSelectFile\": \"Click or drag & drop to select a file\",\n \"Editor.noFileSelected\": \"No file selected\",\n \"Editor.uploading\": \"Uploading…\",\n \"Editor.upload\": \"Upload\",\n \"Editor.selectFromMediaLibrary\": \"Select from Media Library\",\n \"Editor.noFilesFound\": \"No files found.\",\n \"Editor.prev\": \"← Prev\",\n \"Editor.next\": \"Next →\",\n \"Editor.nothingSelected\": \"Nothing selected\",\n \"Editor.select\": \"Select\",\n \"Editor.selectedImagePreview\": \"Selected image preview\",\n \"Editor.noImageSelected\": \"No image selected\",\n \"Editor.mediaLibrary\": \"Media Library\",\n \"Editor.loading\": \"Loading…\",\n \"Editor.loadingProduct\": \"Loading product…\",\n \"Editor.loadingProducts\": \"Loading products…\",\n \"Editor.errorLoadingProduct\": \"Error loading product\",\n \"Editor.noProductSelected\": \"No product selected\",\n \"Editor.noDescription\": \"No description\",\n \"Editor.noCategoriesConfigured\": \"No categories configured\",\n \"Editor.noFaqItemsConfigured\": \"No FAQ items configured\",\n \"Editor.noProductsConfigured\": \"No products configured\",\n \"Editor.noImage\": \"No image\",\n \"Editor.noVideoUrlConfigured\": \"No video URL configured\",\n \"Editor.cfg.root.field.title\": \"Page Title\",\n \"Editor.cfg.root.field.backgroundColor\": \"Background Color\",\n \"Editor.cfg.root.field.contentWidth\": \"Content Width\",\n \"Editor.cfg.root.contentWidth.full\": \"Full width\",\n \"Editor.cfg.category.layout\": \"Layout\",\n \"Editor.cfg.category.text\": \"Text & Content\",\n \"Editor.cfg.category.media\": \"Media\",\n \"Editor.cfg.category.heroBanners\": \"Hero & Banners\",\n \"Editor.cfg.category.products\": \"Products\",\n \"Editor.cfg.category.actions\": \"Buttons & Forms\",\n \"Editor.cfg.category.socialProof\": \"Social Proof & Info\",\n \"Editor.cfg.category.sections\": \"Page Sections\",\n \"Editor.cfg.category.other\": \"Other\",\n \"Editor.cfg.shared.field.linkWith\": \"Link products by\",\n \"Editor.cfg.shared.linkWith.slug\": \"Slug\",\n \"Editor.cfg.shared.linkWith.sku\": \"SKU\",\n \"Editor.cfg.shared.field.baseUrl\": \"Link base URL\",\n \"Editor.cfg.fontSize.default\": \"Default\",\n \"Editor.cfg.fontSize.small\": \"Small (0.875rem)\",\n \"Editor.cfg.fontSize.medium\": \"Medium (1rem)\",\n \"Editor.cfg.fontSize.large\": \"Large (1.25rem)\",\n \"Editor.cfg.fontSize.xLarge\": \"X-Large (1.5rem)\",\n \"Editor.cfg.fontSize.2xLarge\": \"2X-Large (2rem)\",\n \"Editor.cfg.fontSize.3xLarge\": \"3X-Large (2.5rem)\",\n \"Editor.cfg.fontSize.4xLarge\": \"4X-Large (3rem)\",\n \"Editor.cfg.hero.label\": \"Hero\",\n \"Editor.cfg.hero.field.heading\": \"Heading\",\n \"Editor.cfg.hero.field.headingFontSize\": \"Heading Font Size\",\n \"Editor.cfg.hero.field.subheading\": \"Subheading\",\n \"Editor.cfg.hero.field.subheadingFontSize\": \"Subheading Font Size\",\n \"Editor.cfg.hero.field.backgroundImage\": \"Background Image URL\",\n \"Editor.cfg.hero.field.ctaText\": \"CTA Button Text\",\n \"Editor.cfg.hero.field.ctaUrl\": \"CTA Button URL\",\n \"Editor.cfg.hero.field.layout\": \"Layout\",\n \"Editor.cfg.hero.layout.centered\": \"Centered\",\n \"Editor.cfg.hero.layout.leftAligned\": \"Left Aligned\",\n \"Editor.cfg.hero.field.minHeight\": \"Min Height (CSS, e.g. 400px)\",\n \"Editor.cfg.richText.label\": \"Rich Text\",\n \"Editor.cfg.richText.field.content\": \"Content\",\n \"Editor.cfg.richText.field.align\": \"Text Alignment\",\n \"Editor.cfg.align.left\": \"Left\",\n \"Editor.cfg.align.center\": \"Center\",\n \"Editor.cfg.align.right\": \"Right\",\n \"Editor.cfg.richText.field.maxWidth\": \"Max Width (CSS)\",\n \"Editor.cfg.richText.field.padding\": \"Padding (CSS)\",\n \"Editor.cfg.grid.label\": \"Grid\",\n \"Editor.cfg.grid.field.columnCount\": \"Number of Columns\",\n \"Editor.cfg.grid.field.rowCount\": \"Number of Rows\",\n \"Editor.cfg.grid.field.gap\": \"Gap (CSS)\",\n \"Editor.cfg.grid.field.padding\": \"Padding (CSS)\",\n \"Editor.cfg.columns.label\": \"Columns\",\n \"Editor.cfg.columns.field.columnCount\": \"Number of Columns\",\n \"Editor.cfg.columns.count.2\": \"2 Columns\",\n \"Editor.cfg.columns.count.3\": \"3 Columns\",\n \"Editor.cfg.columns.count.4\": \"4 Columns\",\n \"Editor.cfg.columns.field.gap\": \"Column Gap (CSS)\",\n \"Editor.cfg.columns.field.padding\": \"Padding (CSS)\",\n \"Editor.cfg.image.label\": \"Image\",\n \"Editor.cfg.image.field.src\": \"Image\",\n \"Editor.cfg.image.field.alt\": \"Alt Text\",\n \"Editor.cfg.image.field.caption\": \"Caption\",\n \"Editor.cfg.image.field.width\": \"Width (CSS, e.g. 100%)\",\n \"Editor.cfg.image.field.height\": \"Height (CSS, e.g. 300px)\",\n \"Editor.cfg.image.field.objectFit\": \"Object Fit\",\n \"Editor.cfg.image.objectFit.cover\": \"Cover\",\n \"Editor.cfg.image.objectFit.contain\": \"Contain\",\n \"Editor.cfg.image.objectFit.fill\": \"Fill\",\n \"Editor.cfg.image.field.borderRadius\": \"Border Radius (CSS)\",\n \"Editor.cfg.image.field.align\": \"Alignment\",\n \"Editor.cfg.button.label\": \"Button\",\n \"Editor.cfg.button.field.label\": \"Button Label\",\n \"Editor.cfg.button.field.href\": \"Link URL\",\n \"Editor.cfg.button.field.variant\": \"Variant\",\n \"Editor.cfg.button.variant.primary\": \"Primary\",\n \"Editor.cfg.button.variant.secondary\": \"Secondary\",\n \"Editor.cfg.button.variant.outline\": \"Outline\",\n \"Editor.cfg.button.field.size\": \"Size\",\n \"Editor.cfg.button.size.small\": \"Small\",\n \"Editor.cfg.button.size.medium\": \"Medium\",\n \"Editor.cfg.button.size.large\": \"Large\",\n \"Editor.cfg.button.field.fontSize\": \"Font Size Override\",\n \"Editor.cfg.button.field.align\": \"Alignment\",\n \"Editor.cfg.button.field.openInNewTab\": \"Open in New Tab\",\n \"Editor.cfg.yesNo.yes\": \"Yes\",\n \"Editor.cfg.yesNo.no\": \"No\",\n \"Editor.cfg.card.label\": \"Card\",\n \"Editor.cfg.card.field.title\": \"Title\",\n \"Editor.cfg.card.field.titleFontSize\": \"Title Font Size\",\n \"Editor.cfg.card.field.body\": \"Body Text\",\n \"Editor.cfg.card.field.imageUrl\": \"Image URL\",\n \"Editor.cfg.card.field.ctaText\": \"CTA Text\",\n \"Editor.cfg.card.field.ctaUrl\": \"CTA URL\",\n \"Editor.cfg.card.field.shadow\": \"Drop Shadow\",\n \"Editor.cfg.card.field.borderRadius\": \"Border Radius (CSS)\",\n \"Editor.cfg.spacer.label\": \"Spacer\",\n \"Editor.cfg.spacer.field.height\": \"Height (CSS, e.g. 48px)\",\n \"Editor.cfg.spacer.field.showLine\": \"Show Divider Line\",\n \"Editor.cfg.spacer.field.lineColor\": \"Line Color\",\n \"Editor.cfg.productTeaser.label\": \"Product Teaser\",\n \"Editor.cfg.productTeaser.field.datasource\": \"Product Datasource\",\n \"Editor.cfg.productTeaser.field.richText\": \"Rich Text\",\n \"Editor.cfg.heroBanner.label\": \"Hero Banner\",\n \"Editor.cfg.heroBanner.field.title\": \"Title\",\n \"Editor.cfg.heroBanner.field.subtitle\": \"Subtitle\",\n \"Editor.cfg.heroBanner.field.image\": \"Image\",\n \"Editor.cfg.textBlock.label\": \"Text Block\",\n \"Editor.cfg.textBlock.field.content\": \"Content\",\n \"Editor.cfg.categoryGrid.label\": \"Category Grid\",\n \"Editor.cfg.categoryGrid.field.image\": \"Category {n} Image\",\n \"Editor.cfg.categoryGrid.field.label\": \"Category {n} Label\",\n \"Editor.cfg.categoryGrid.field.link\": \"Category {n} Link\",\n \"Editor.cfg.categoryHero.label\": \"Category Hero\",\n \"Editor.cfg.categoryHero.field.title\": \"Title\",\n \"Editor.cfg.categoryHero.field.subtitle\": \"Subtitle\",\n \"Editor.cfg.categoryHero.field.image\": \"Background Image\",\n \"Editor.cfg.categoryHero.field.ctaText\": \"CTA Text\",\n \"Editor.cfg.categoryHero.field.ctaLink\": \"CTA Link\",\n \"Editor.cfg.checkoutPromoBanner.label\": \"Checkout Promo Banner\",\n \"Editor.cfg.checkoutPromoBanner.field.title\": \"Title\",\n \"Editor.cfg.checkoutPromoBanner.field.message\": \"Message\",\n \"Editor.cfg.checkoutPromoBanner.field.ctaText\": \"CTA Text\",\n \"Editor.cfg.checkoutPromoBanner.field.ctaLink\": \"CTA Link\",\n \"Editor.cfg.countdownBanner.label\": \"Countdown Banner\",\n \"Editor.cfg.countdownBanner.field.headline\": \"Headline\",\n \"Editor.cfg.countdownBanner.field.subline\": \"Subline\",\n \"Editor.cfg.countdownBanner.field.endDate\": \"End Date (ISO, e.g. 2025-12-31T23:59:59)\",\n \"Editor.cfg.countdownBanner.field.ctaText\": \"CTA Text\",\n \"Editor.cfg.countdownBanner.field.ctaLink\": \"CTA Link\",\n \"Editor.cfg.countdownBanner.field.background\": \"Background Color\",\n \"Editor.cfg.crossSellBlock.label\": \"Cross-Sell Block\",\n \"Editor.cfg.crossSellBlock.field.title\": \"Title\",\n \"Editor.cfg.crossSellBlock.field.products\": \"Products\",\n \"Editor.cfg.crossSellBlock.field.ctaText\": \"CTA Text\",\n \"Editor.cfg.deliveryMessage.label\": \"Delivery Message\",\n \"Editor.cfg.deliveryMessage.field.message\": \"Message (use $XX for threshold)\",\n \"Editor.cfg.deliveryMessage.field.threshold\": \"Threshold Amount (e.g. 50)\",\n \"Editor.cfg.divider.label\": \"Divider\",\n \"Editor.cfg.divider.field.lineStyle\": \"Line Style\",\n \"Editor.cfg.divider.lineStyle.solid\": \"Solid\",\n \"Editor.cfg.divider.lineStyle.dashed\": \"Dashed\",\n \"Editor.cfg.divider.lineStyle.dotted\": \"Dotted\",\n \"Editor.cfg.divider.field.spacing\": \"Spacing (px)\",\n \"Editor.cfg.emptyState.label\": \"Empty State\",\n \"Editor.cfg.emptyState.field.image\": \"Image\",\n \"Editor.cfg.emptyState.field.title\": \"Title\",\n \"Editor.cfg.emptyState.field.description\": \"Description\",\n \"Editor.cfg.emptyState.field.ctaText\": \"CTA Text\",\n \"Editor.cfg.emptyState.field.ctaLink\": \"CTA Link\",\n \"Editor.cfg.faqAccordion.label\": \"FAQ Accordion\",\n \"Editor.cfg.faqAccordion.field.question\": \"Question {n}\",\n \"Editor.cfg.faqAccordion.field.answer\": \"Answer {n}\",\n \"Editor.cfg.footerBlock.label\": \"Footer Block\",\n \"Editor.cfg.footerBlock.field.column\": \"Column {n}\",\n \"Editor.cfg.footerBlock.field.copyright\": \"Copyright Text\",\n \"Editor.cfg.imageBlock.label\": \"Image Block\",\n \"Editor.cfg.imageBlock.field.image\": \"Image\",\n \"Editor.cfg.imageBlock.field.caption\": \"Caption\",\n \"Editor.cfg.imageBlock.field.link\": \"Link URL\",\n \"Editor.cfg.newsletterSignup.label\": \"Newsletter Signup\",\n \"Editor.cfg.newsletterSignup.field.title\": \"Title\",\n \"Editor.cfg.newsletterSignup.field.subtitle\": \"Subtitle\",\n \"Editor.cfg.newsletterSignup.field.ctaText\": \"Button Text\",\n \"Editor.cfg.newsletterSignup.field.placeholder\": \"Input Placeholder\",\n \"Editor.newsletterEmailAria\": \"Email\",\n \"Editor.cfg.productBanner.label\": \"Product Banner\",\n \"Editor.cfg.productBanner.field.title\": \"Title\",\n \"Editor.cfg.productBanner.field.description\": \"Description\",\n \"Editor.cfg.productBanner.field.ctaText\": \"CTA Text\",\n \"Editor.cfg.productBanner.field.ctaLink\": \"CTA Link\",\n \"Editor.cfg.productBanner.field.product\": \"Product\",\n \"Editor.cfg.productBanner.field.productOnLeft\": \"Product Position\",\n \"Editor.cfg.productBanner.productPosition.right\": \"Product on Right\",\n \"Editor.cfg.productBanner.productPosition.left\": \"Product on Left\",\n \"Editor.cfg.productBanner.field.background\": \"Background Color\",\n \"Editor.cfg.productGridHeader.label\": \"Product Grid Header\",\n \"Editor.cfg.productGridHeader.field.title\": \"Title\",\n \"Editor.cfg.productGridHeader.field.description\": \"Description\",\n \"Editor.cfg.productSlider.label\": \"Product Slider\",\n \"Editor.cfg.productSlider.field.title\": \"Title\",\n \"Editor.cfg.productSlider.field.subtitle\": \"Subtitle\",\n \"Editor.cfg.productSlider.field.products\": \"Products\",\n \"Editor.cfg.promotionalBanner.label\": \"Promotional Banner\",\n \"Editor.cfg.promotionalBanner.field.image\": \"Image\",\n \"Editor.cfg.promotionalBanner.field.title\": \"Title\",\n \"Editor.cfg.promotionalBanner.field.subtitle\": \"Subtitle\",\n \"Editor.cfg.promotionalBanner.field.ctaText\": \"CTA Text\",\n \"Editor.cfg.promotionalBanner.field.ctaLink\": \"CTA Link\",\n \"Editor.cfg.promotionalBanner.field.background\": \"Background Color\",\n \"Editor.cfg.relatedProducts.label\": \"Related Products\",\n \"Editor.cfg.relatedProducts.field.title\": \"Title\",\n \"Editor.cfg.relatedProducts.field.subtitle\": \"Subtitle\",\n \"Editor.cfg.relatedProducts.field.products\": \"Products\",\n \"Editor.cfg.socialLinks.label\": \"Social Links\",\n \"Editor.cfg.socialLinks.field.label\": \"Link {n} Label\",\n \"Editor.cfg.socialLinks.field.url\": \"Link {n} URL\",\n \"Editor.cfg.tabContent.label\": \"Tab Content\",\n \"Editor.cfg.tabContent.field.tabLabel\": \"Tab Label\",\n \"Editor.cfg.tabContent.field.content\": \"Content\",\n \"Editor.cfg.testimonials.label\": \"Testimonials\",\n \"Editor.cfg.testimonials.field.quote\": \"Quote {n}\",\n \"Editor.cfg.testimonials.field.author\": \"Author {n}\",\n \"Editor.cfg.testimonials.field.role\": \"Role {n}\",\n \"Editor.cfg.thankYouContent.label\": \"Thank You Content\",\n \"Editor.cfg.thankYouContent.field.headline\": \"Headline\",\n \"Editor.cfg.thankYouContent.field.message\": \"Message\",\n \"Editor.cfg.thankYouContent.field.ctaText\": \"CTA Text\",\n \"Editor.cfg.thankYouContent.field.ctaLink\": \"CTA Link\",\n \"Editor.cfg.trustBadges.label\": \"Trust Badges\",\n \"Editor.cfg.trustBadges.field.icon\": \"Badge {n} Icon\",\n \"Editor.cfg.trustBadges.field.label\": \"Badge {n} Label\",\n \"Editor.cfg.videoBlock.label\": \"Video Block\",\n \"Editor.cfg.videoBlock.field.videoUrl\": \"Video URL\",\n \"Editor.cfg.videoBlock.field.posterImage\": \"Poster Image\",\n \"Editor.cfg.videoBlock.field.title\": \"Title\",\n \"Editor.cfg.videoBlock.field.caption\": \"Caption\",\n \"Editor.cfg.websiteLogo.label\": \"Website Logo\",\n \"Editor.cfg.websiteLogo.field.logo\": \"Logo\",\n \"Editor.cfg.websiteLogo.field.maxWidth\": \"Max Width (px)\",\n \"Editor.cfg.websiteLogo.field.maxHeight\": \"Max Height (px)\",\n \"Editor.websiteLogoAlt\": \"Logo\",\n \"Editor.color.none\": \"None\",\n \"Editor.color.custom\": \"Custom color\",\n \"Editor.color.white\": \"White\",\n \"Editor.color.lightGray\": \"Light gray\",\n \"Editor.color.gray\": \"Gray\",\n \"Editor.color.slate\": \"Slate\",\n \"Editor.color.charcoal\": \"Charcoal\",\n \"Editor.color.black\": \"Black\",\n \"Editor.color.red\": \"Red\",\n \"Editor.color.orange\": \"Orange\",\n \"Editor.color.amber\": \"Amber\",\n \"Editor.color.yellow\": \"Yellow\",\n \"Editor.color.lime\": \"Lime\",\n \"Editor.color.green\": \"Green\",\n \"Editor.color.teal\": \"Teal\",\n \"Editor.color.cyan\": \"Cyan\",\n \"Editor.color.skyBlue\": \"Sky blue\",\n \"Editor.color.blue\": \"Blue\",\n \"Editor.color.navy\": \"Navy\",\n \"Editor.color.purple\": \"Purple\",\n \"Editor.color.pink\": \"Pink\",\n \"Editor.color.sand\": \"Sand\"\n}\n","{\n \"Editor.loadingEditor\": \"Cargando editor…\",\n \"Editor.errorLoadingPage\": \"Error al cargar la página:\",\n \"Editor.toggleComponentsPanel\": \"Panel de componentes alternados\",\n \"Editor.togglePropertiesPanel\": \"Mostrar/ocultar panel de propiedades\",\n \"Editor.undo\": \"Deshacer\",\n \"Editor.redo\": \"Rehacer\",\n \"Editor.badgeSaving\": \"Ahorro…\",\n \"Editor.badgeUnsaved\": \"No guardado\",\n \"Editor.badgeDraft\": \"Borrador\",\n \"Editor.badgePublished\": \"Publicado\",\n \"Editor.preview\": \"Vista previa\",\n \"Editor.save\": \"Guardar\",\n \"Editor.publish\": \"Publicar\",\n \"Editor.moreOptions\": \"Más opciones\",\n \"Editor.hideVersionHistory\": \"Ocultar historial de versiones\",\n \"Editor.versionHistory\": \"Historial de versiones\",\n \"Editor.revertToPublished\": \"Volver a la versión publicada\",\n \"Editor.createTemplateFromPage\": \"Crea una plantilla a partir de esta página.\",\n \"Editor.createTemplateTitle\": \"Crear una nueva plantilla\",\n \"Editor.nameLabel\": \"Nombre\",\n \"Editor.nameRequired\": \"Se requiere el nombre\",\n \"Editor.templateNamePlaceholder\": \"p. ej. Página de inicio\",\n \"Editor.createTemplateWithoutData\": \"Crear plantilla sin datos\",\n \"Editor.cancel\": \"Cancelar\",\n \"Editor.creating\": \"Creando…\",\n \"Editor.create\": \"Crear\",\n \"Editor.discardChangesTitle\": \"¿Descartar los cambios no guardados?\",\n \"Editor.discardChangesBody\": \"Tienes cambios sin guardar en esta página. Si sales ahora, esos cambios se perderán.\",\n \"Editor.stayOnPage\": \"Permanecer en la página\",\n \"Editor.leaveAndDiscard\": \"Dejar y desechar\",\n \"Editor.showPanel\": \"Mostrar panel {panel}\",\n \"Editor.tabComponents\": \"Componentes\",\n \"Editor.tabHistory\": \"Historia\",\n \"Editor.searchComponents\": \"Componentes de búsqueda\",\n \"Editor.searchComponentsPlaceholder\": \"Componentes de búsqueda…\",\n \"Editor.clearSearch\": \"Borrar búsqueda\",\n \"Editor.resizePropertiesPanel\": \"Redimensionar el panel de propiedades\",\n \"Editor.resizeComponentsPanel\": \"Redimensionar el panel de componentes\",\n \"Editor.searchProducts\": \"Buscar productos\",\n \"Editor.searchProductsPlaceholder\": \"Buscar por nombre del producto…\",\n \"Editor.productSearchResults\": \"Resultados de la búsqueda de productos\",\n \"Editor.searching\": \"Búsqueda…\",\n \"Editor.noProductsFound\": \"No se encontraron productos\",\n \"Editor.unnamedProduct\": \"(producto sin nombre)\",\n \"Editor.skuLabel\": \"SKU: {sku}\",\n \"Editor.noSkuOnMasterVariant\": \"No hay SKU en la variante principal\",\n \"Editor.added\": \"Agregado\",\n \"Editor.datasourceType\": \"Tipo de fuente de datos\",\n \"Editor.datasourceProductBySku\": \"Producto por SKU\",\n \"Editor.datasourceProductsBySku\": \"Productos por SKU\",\n \"Editor.selectedProduct\": \"Producto seleccionado\",\n \"Editor.selectedProducts\": \"Productos seleccionados\",\n \"Editor.noProductSelectedSearch\": \"No se ha seleccionado ningún producto; busque arriba para añadir uno.\",\n \"Editor.remove\": \"Eliminar\",\n \"Editor.richTextPlaceholder\": \"Empieza a escribir…\",\n \"Editor.uploadAFile\": \"Subir un archivo\",\n \"Editor.close\": \"Cerrar\",\n \"Editor.title\": \"Título\",\n \"Editor.fileTitlePlaceholder\": \"Título del archivo\",\n \"Editor.description\": \"Descripción\",\n \"Editor.optionalDescriptionPlaceholder\": \"Descripción opcional\",\n \"Editor.dropToSelectFile\": \"Haz clic o arrastra y suelta para seleccionar un archivo.\",\n \"Editor.noFileSelected\": \"No se ha seleccionado ningún archivo.\",\n \"Editor.uploading\": \"Subiendo…\",\n \"Editor.upload\": \"Subir\",\n \"Editor.selectFromMediaLibrary\": \"Seleccionar de la biblioteca multimedia\",\n \"Editor.noFilesFound\": \"No se encontraron archivos.\",\n \"Editor.prev\": \"← Anterior\",\n \"Editor.next\": \"Siguiente →\",\n \"Editor.nothingSelected\": \"No se ha seleccionado nada\",\n \"Editor.select\": \"Seleccionar\",\n \"Editor.selectedImagePreview\": \"Vista previa de la imagen seleccionada\",\n \"Editor.noImageSelected\": \"No se ha seleccionado ninguna imagen\",\n \"Editor.mediaLibrary\": \"Biblioteca multimedia\",\n \"Editor.loading\": \"Cargando…\",\n \"Editor.loadingProduct\": \"Cargando producto…\",\n \"Editor.loadingProducts\": \"Cargando productos…\",\n \"Editor.errorLoadingProduct\": \"Error al cargar el producto\",\n \"Editor.noProductSelected\": \"No se ha seleccionado ningún producto.\",\n \"Editor.noDescription\": \"Sin descripción\",\n \"Editor.noCategoriesConfigured\": \"No se han configurado categorías\",\n \"Editor.noFaqItemsConfigured\": \"No hay elementos de preguntas frecuentes configurados.\",\n \"Editor.noProductsConfigured\": \"No hay productos configurados\",\n \"Editor.noImage\": \"Sin imagen\",\n \"Editor.noVideoUrlConfigured\": \"No se ha configurado ninguna URL de vídeo.\",\n \"Editor.cfg.root.field.title\": \"Título de la página\",\n \"Editor.cfg.root.field.backgroundColor\": \"Color de fondo\",\n \"Editor.cfg.root.field.contentWidth\": \"Ancho del contenido\",\n \"Editor.cfg.root.contentWidth.full\": \"Ancho completo\",\n \"Editor.cfg.category.layout\": \"Disposición\",\n \"Editor.cfg.category.text\": \"Texto y contenido\",\n \"Editor.cfg.category.media\": \"Medios de comunicación\",\n \"Editor.cfg.category.heroBanners\": \"Héroes y Estandartes\",\n \"Editor.cfg.category.products\": \"Productos\",\n \"Editor.cfg.category.actions\": \"Botones y formularios\",\n \"Editor.cfg.category.socialProof\": \"Prueba social e información\",\n \"Editor.cfg.category.sections\": \"Secciones de página\",\n \"Editor.cfg.category.other\": \"Otro\",\n \"Editor.cfg.shared.field.linkWith\": \"Enlace productos por\",\n \"Editor.cfg.shared.linkWith.slug\": \"Slug\",\n \"Editor.cfg.shared.linkWith.sku\": \"SKU\",\n \"Editor.cfg.shared.field.baseUrl\": \"URL base del enlace\",\n \"Editor.cfg.fontSize.default\": \"Por defecto\",\n \"Editor.cfg.fontSize.small\": \"Pequeño (0,875 rem)\",\n \"Editor.cfg.fontSize.medium\": \"Medio (1 rem)\",\n \"Editor.cfg.fontSize.large\": \"Grande (1,25 rem)\",\n \"Editor.cfg.fontSize.xLarge\": \"Extra grande (1,5 rem)\",\n \"Editor.cfg.fontSize.2xLarge\": \"2X-Grande (2rem)\",\n \"Editor.cfg.fontSize.3xLarge\": \"3X-Grande (2,5 rem)\",\n \"Editor.cfg.fontSize.4xLarge\": \"4X-Grande (3rem)\",\n \"Editor.cfg.hero.label\": \"Hero\",\n \"Editor.cfg.hero.field.heading\": \"Título\",\n \"Editor.cfg.hero.field.headingFontSize\": \"Tamaño de fuente del encabezado\",\n \"Editor.cfg.hero.field.subheading\": \"Subtítulo\",\n \"Editor.cfg.hero.field.subheadingFontSize\": \"Tamaño de fuente del subtítulo\",\n \"Editor.cfg.hero.field.backgroundImage\": \"URL de la imagen de fondo\",\n \"Editor.cfg.hero.field.ctaText\": \"Texto del botón CTA\",\n \"Editor.cfg.hero.field.ctaUrl\": \"URL del botón CTA\",\n \"Editor.cfg.hero.field.layout\": \"Disposición\",\n \"Editor.cfg.hero.layout.centered\": \"Centrado\",\n \"Editor.cfg.hero.layout.leftAligned\": \"Alineado a la izquierda\",\n \"Editor.cfg.hero.field.minHeight\": \"Altura mínima (CSS, por ejemplo, 400px)\",\n \"Editor.cfg.richText.label\": \"Texto enriquecido\",\n \"Editor.cfg.richText.field.content\": \"Contenido\",\n \"Editor.cfg.richText.field.align\": \"Alineación del texto\",\n \"Editor.cfg.align.left\": \"Izquierda\",\n \"Editor.cfg.align.center\": \"Centro\",\n \"Editor.cfg.align.right\": \"Bien\",\n \"Editor.cfg.richText.field.maxWidth\": \"Ancho máximo (CSS)\",\n \"Editor.cfg.richText.field.padding\": \"Relleno (CSS)\",\n \"Editor.cfg.grid.label\": \"Red\",\n \"Editor.cfg.grid.field.columnCount\": \"Número de columnas\",\n \"Editor.cfg.grid.field.rowCount\": \"Número de filas\",\n \"Editor.cfg.grid.field.gap\": \"Brecha (CSS)\",\n \"Editor.cfg.grid.field.padding\": \"Relleno (CSS)\",\n \"Editor.cfg.columns.label\": \"Columnas\",\n \"Editor.cfg.columns.field.columnCount\": \"Número de columnas\",\n \"Editor.cfg.columns.count.2\": \"2 columnas\",\n \"Editor.cfg.columns.count.3\": \"3 columnas\",\n \"Editor.cfg.columns.count.4\": \"4 columnas\",\n \"Editor.cfg.columns.field.gap\": \"Espacio entre columnas (CSS)\",\n \"Editor.cfg.columns.field.padding\": \"Relleno (CSS)\",\n \"Editor.cfg.image.label\": \"Imagen\",\n \"Editor.cfg.image.field.src\": \"Imagen\",\n \"Editor.cfg.image.field.alt\": \"Texto alternativo\",\n \"Editor.cfg.image.field.caption\": \"Subtítulo\",\n \"Editor.cfg.image.field.width\": \"Ancho (CSS, por ejemplo, 100%)\",\n \"Editor.cfg.image.field.height\": \"Altura (CSS, por ejemplo, 300px)\",\n \"Editor.cfg.image.field.objectFit\": \"Ajuste del objeto\",\n \"Editor.cfg.image.objectFit.cover\": \"Cubrir\",\n \"Editor.cfg.image.objectFit.contain\": \"Contener\",\n \"Editor.cfg.image.objectFit.fill\": \"Llenar\",\n \"Editor.cfg.image.field.borderRadius\": \"Radio de borde (CSS)\",\n \"Editor.cfg.image.field.align\": \"Alineación\",\n \"Editor.cfg.button.label\": \"Botón\",\n \"Editor.cfg.button.field.label\": \"Etiqueta del botón\",\n \"Editor.cfg.button.field.href\": \"URL del enlace\",\n \"Editor.cfg.button.field.variant\": \"Variante\",\n \"Editor.cfg.button.variant.primary\": \"Primario\",\n \"Editor.cfg.button.variant.secondary\": \"Secundario\",\n \"Editor.cfg.button.variant.outline\": \"Describir\",\n \"Editor.cfg.button.field.size\": \"Tamaño\",\n \"Editor.cfg.button.size.small\": \"Pequeño\",\n \"Editor.cfg.button.size.medium\": \"Medio\",\n \"Editor.cfg.button.size.large\": \"Grande\",\n \"Editor.cfg.button.field.fontSize\": \"Anulación del tamaño de fuente\",\n \"Editor.cfg.button.field.align\": \"Alineación\",\n \"Editor.cfg.button.field.openInNewTab\": \"Abrir en una pestaña nueva\",\n \"Editor.cfg.yesNo.yes\": \"Sí\",\n \"Editor.cfg.yesNo.no\": \"No\",\n \"Editor.cfg.card.label\": \"Tarjeta\",\n \"Editor.cfg.card.field.title\": \"Título\",\n \"Editor.cfg.card.field.titleFontSize\": \"Tamaño de fuente del título\",\n \"Editor.cfg.card.field.body\": \"Texto del cuerpo\",\n \"Editor.cfg.card.field.imageUrl\": \"URL de la imagen\",\n \"Editor.cfg.card.field.ctaText\": \"Texto de llamada a la acción\",\n \"Editor.cfg.card.field.ctaUrl\": \"URL de llamada a la acción\",\n \"Editor.cfg.card.field.shadow\": \"Sombra paralela\",\n \"Editor.cfg.card.field.borderRadius\": \"Radio de borde (CSS)\",\n \"Editor.cfg.spacer.label\": \"espaciador\",\n \"Editor.cfg.spacer.field.height\": \"Altura (CSS, por ejemplo, 48px)\",\n \"Editor.cfg.spacer.field.showLine\": \"Mostrar línea divisoria\",\n \"Editor.cfg.spacer.field.lineColor\": \"Color de línea\",\n \"Editor.cfg.productTeaser.label\": \"Avance del producto\",\n \"Editor.cfg.productTeaser.field.datasource\": \"Fuente de datos del producto\",\n \"Editor.cfg.productTeaser.field.richText\": \"Texto enriquecido\",\n \"Editor.cfg.heroBanner.label\": \"Hero Banner\",\n \"Editor.cfg.heroBanner.field.title\": \"Título\",\n \"Editor.cfg.heroBanner.field.subtitle\": \"Subtitular\",\n \"Editor.cfg.heroBanner.field.image\": \"Imagen\",\n \"Editor.cfg.textBlock.label\": \"Bloque de texto\",\n \"Editor.cfg.textBlock.field.content\": \"Contenido\",\n \"Editor.cfg.categoryGrid.label\": \"Cuadrícula de categorías\",\n \"Editor.cfg.categoryGrid.field.image\": \"Categoría {n} Imagen\",\n \"Editor.cfg.categoryGrid.field.label\": \"Categoría {n} Etiqueta\",\n \"Editor.cfg.categoryGrid.field.link\": \"Enlace de categoría {n}\",\n \"Editor.cfg.categoryHero.label\": \"Héroe de categoría\",\n \"Editor.cfg.categoryHero.field.title\": \"Título\",\n \"Editor.cfg.categoryHero.field.subtitle\": \"Subtitular\",\n \"Editor.cfg.categoryHero.field.image\": \"Imagen de fondo\",\n \"Editor.cfg.categoryHero.field.ctaText\": \"Texto de llamada a la acción\",\n \"Editor.cfg.categoryHero.field.ctaLink\": \"Enlace CTA\",\n \"Editor.cfg.checkoutPromoBanner.label\": \"Banner promocional de pago\",\n \"Editor.cfg.checkoutPromoBanner.field.title\": \"Título\",\n \"Editor.cfg.checkoutPromoBanner.field.message\": \"Mensaje\",\n \"Editor.cfg.checkoutPromoBanner.field.ctaText\": \"Texto de llamada a la acción\",\n \"Editor.cfg.checkoutPromoBanner.field.ctaLink\": \"Enlace CTA\",\n \"Editor.cfg.countdownBanner.label\": \"Banner de cuenta regresiva\",\n \"Editor.cfg.countdownBanner.field.headline\": \"Titular\",\n \"Editor.cfg.countdownBanner.field.subline\": \"Sublínea\",\n \"Editor.cfg.countdownBanner.field.endDate\": \"Fecha de finalización (ISO, por ejemplo, 2025-12-31T23:59:59)\",\n \"Editor.cfg.countdownBanner.field.ctaText\": \"Texto de llamada a la acción\",\n \"Editor.cfg.countdownBanner.field.ctaLink\": \"Enlace CTA\",\n \"Editor.cfg.countdownBanner.field.background\": \"Color de fondo\",\n \"Editor.cfg.crossSellBlock.label\": \"Bloque de venta cruzada\",\n \"Editor.cfg.crossSellBlock.field.title\": \"Título\",\n \"Editor.cfg.crossSellBlock.field.products\": \"Productos\",\n \"Editor.cfg.crossSellBlock.field.ctaText\": \"Texto de llamada a la acción\",\n \"Editor.cfg.deliveryMessage.label\": \"Mensaje de entrega\",\n \"Editor.cfg.deliveryMessage.field.message\": \"Mensaje (use $XX para el umbral)\",\n \"Editor.cfg.deliveryMessage.field.threshold\": \"Cantidad umbral (p. ej., 50)\",\n \"Editor.cfg.divider.label\": \"Divisor\",\n \"Editor.cfg.divider.field.lineStyle\": \"Estilo de línea\",\n \"Editor.cfg.divider.lineStyle.solid\": \"Sólido\",\n \"Editor.cfg.divider.lineStyle.dashed\": \"Corrido\",\n \"Editor.cfg.divider.lineStyle.dotted\": \"Punteado\",\n \"Editor.cfg.divider.field.spacing\": \"Espaciado (px)\",\n \"Editor.cfg.emptyState.label\": \"Estado vacío\",\n \"Editor.cfg.emptyState.field.image\": \"Imagen\",\n \"Editor.cfg.emptyState.field.title\": \"Título\",\n \"Editor.cfg.emptyState.field.description\": \"Descripción\",\n \"Editor.cfg.emptyState.field.ctaText\": \"Texto de llamada a la acción\",\n \"Editor.cfg.emptyState.field.ctaLink\": \"Enlace CTA\",\n \"Editor.cfg.faqAccordion.label\": \"Acordeón de preguntas frecuentes\",\n \"Editor.cfg.faqAccordion.field.question\": \"Pregunta {n}\",\n \"Editor.cfg.faqAccordion.field.answer\": \"Respuesta {n}\",\n \"Editor.cfg.footerBlock.label\": \"Bloque de pie de página\",\n \"Editor.cfg.footerBlock.field.column\": \"Columna {n}\",\n \"Editor.cfg.footerBlock.field.copyright\": \"Texto de derechos de autor\",\n \"Editor.cfg.imageBlock.label\": \"Bloque de imagen\",\n \"Editor.cfg.imageBlock.field.image\": \"Imagen\",\n \"Editor.cfg.imageBlock.field.caption\": \"Subtítulo\",\n \"Editor.cfg.imageBlock.field.link\": \"URL del enlace\",\n \"Editor.cfg.newsletterSignup.label\": \"Suscripción al boletín informativo\",\n \"Editor.cfg.newsletterSignup.field.title\": \"Título\",\n \"Editor.cfg.newsletterSignup.field.subtitle\": \"Subtitular\",\n \"Editor.cfg.newsletterSignup.field.ctaText\": \"Texto del botón\",\n \"Editor.cfg.newsletterSignup.field.placeholder\": \"Marcador de posición de entrada\",\n \"Editor.newsletterEmailAria\": \"Correo electrónico\",\n \"Editor.cfg.productBanner.label\": \"Banner del producto\",\n \"Editor.cfg.productBanner.field.title\": \"Título\",\n \"Editor.cfg.productBanner.field.description\": \"Descripción\",\n \"Editor.cfg.productBanner.field.ctaText\": \"Texto de llamada a la acción\",\n \"Editor.cfg.productBanner.field.ctaLink\": \"Enlace CTA\",\n \"Editor.cfg.productBanner.field.product\": \"Producto\",\n \"Editor.cfg.productBanner.field.productOnLeft\": \"Posicionamiento del producto\",\n \"Editor.cfg.productBanner.productPosition.right\": \"Producto a la derecha\",\n \"Editor.cfg.productBanner.productPosition.left\": \"Producto a la izquierda\",\n \"Editor.cfg.productBanner.field.background\": \"Color de fondo\",\n \"Editor.cfg.productGridHeader.label\": \"Encabezado de la cuadrícula de productos\",\n \"Editor.cfg.productGridHeader.field.title\": \"Título\",\n \"Editor.cfg.productGridHeader.field.description\": \"Descripción\",\n \"Editor.cfg.productSlider.label\": \"Deslizador de productos\",\n \"Editor.cfg.productSlider.field.title\": \"Título\",\n \"Editor.cfg.productSlider.field.subtitle\": \"Subtitular\",\n \"Editor.cfg.productSlider.field.products\": \"Productos\",\n \"Editor.cfg.promotionalBanner.label\": \"Banner promocional\",\n \"Editor.cfg.promotionalBanner.field.image\": \"Imagen\",\n \"Editor.cfg.promotionalBanner.field.title\": \"Título\",\n \"Editor.cfg.promotionalBanner.field.subtitle\": \"Subtitular\",\n \"Editor.cfg.promotionalBanner.field.ctaText\": \"Texto de llamada a la acción\",\n \"Editor.cfg.promotionalBanner.field.ctaLink\": \"Enlace CTA\",\n \"Editor.cfg.promotionalBanner.field.background\": \"Color de fondo\",\n \"Editor.cfg.relatedProducts.label\": \"Productos relacionados\",\n \"Editor.cfg.relatedProducts.field.title\": \"Título\",\n \"Editor.cfg.relatedProducts.field.subtitle\": \"Subtitular\",\n \"Editor.cfg.relatedProducts.field.products\": \"Productos\",\n \"Editor.cfg.socialLinks.label\": \"Enlaces sociales\",\n \"Editor.cfg.socialLinks.field.label\": \"Enlace {n} Etiqueta\",\n \"Editor.cfg.socialLinks.field.url\": \"Enlace {n} URL\",\n \"Editor.cfg.tabContent.label\": \"Contenido de la pestaña\",\n \"Editor.cfg.tabContent.field.tabLabel\": \"Etiqueta de pestaña\",\n \"Editor.cfg.tabContent.field.content\": \"Contenido\",\n \"Editor.cfg.testimonials.label\": \"Testimonios\",\n \"Editor.cfg.testimonials.field.quote\": \"Cita {n}\",\n \"Editor.cfg.testimonials.field.author\": \"Autor {n}\",\n \"Editor.cfg.testimonials.field.role\": \"Rol {n}\",\n \"Editor.cfg.thankYouContent.label\": \"Contenido de agradecimiento\",\n \"Editor.cfg.thankYouContent.field.headline\": \"Titular\",\n \"Editor.cfg.thankYouContent.field.message\": \"Mensaje\",\n \"Editor.cfg.thankYouContent.field.ctaText\": \"Texto de llamada a la acción\",\n \"Editor.cfg.thankYouContent.field.ctaLink\": \"Enlace CTA\",\n \"Editor.cfg.trustBadges.label\": \"Insignias de confianza\",\n \"Editor.cfg.trustBadges.field.icon\": \"Insignia {n} Icono\",\n \"Editor.cfg.trustBadges.field.label\": \"Etiqueta de insignia {n}\",\n \"Editor.cfg.videoBlock.label\": \"Bloque de vídeo\",\n \"Editor.cfg.videoBlock.field.videoUrl\": \"URL del vídeo\",\n \"Editor.cfg.videoBlock.field.posterImage\": \"Imagen del póster\",\n \"Editor.cfg.videoBlock.field.title\": \"Título\",\n \"Editor.cfg.videoBlock.field.caption\": \"Subtítulo\",\n \"Editor.cfg.websiteLogo.label\": \"Logotipo del sitio web\",\n \"Editor.cfg.websiteLogo.field.logo\": \"Logo\",\n \"Editor.cfg.websiteLogo.field.maxWidth\": \"Ancho máximo (px)\",\n \"Editor.cfg.websiteLogo.field.maxHeight\": \"Altura máxima (px)\",\n \"Editor.websiteLogoAlt\": \"Logo\",\n \"Editor.color.none\": \"Ninguno\",\n \"Editor.color.custom\": \"Color personalizado\",\n \"Editor.color.white\": \"Blanco\",\n \"Editor.color.lightGray\": \"Gris claro\",\n \"Editor.color.gray\": \"Gris\",\n \"Editor.color.slate\": \"Pizarra\",\n \"Editor.color.charcoal\": \"Carbón\",\n \"Editor.color.black\": \"Negro\",\n \"Editor.color.red\": \"Rojo\",\n \"Editor.color.orange\": \"Naranja\",\n \"Editor.color.amber\": \"Ámbar\",\n \"Editor.color.yellow\": \"Amarillo\",\n \"Editor.color.lime\": \"Lima\",\n \"Editor.color.green\": \"Verde\",\n \"Editor.color.teal\": \"Verde azulado\",\n \"Editor.color.cyan\": \"Cian\",\n \"Editor.color.skyBlue\": \"Azul cielo\",\n \"Editor.color.blue\": \"Azul\",\n \"Editor.color.navy\": \"Azul marino\",\n \"Editor.color.purple\": \"Morado\",\n \"Editor.color.pink\": \"Rosa\",\n \"Editor.color.sand\": \"Arena\"\n}\n","import en from './en.json';\nimport es from './es.json';\n/**\n * Locale catalogs owned by this package, keyed by language. `en.json` is the\n * source of truth; other locales are generated by `scripts/translate-messages.mjs`\n * and may be empty until that script is run (missing keys fall back to the\n * English `defaultMessage`).\n */\nexport const catalogs: Record<string, Record<string, string>> = { en, es };\n","import DOMPurify from 'isomorphic-dompurify';\n\n/**\n * Sanitize rich-text HTML before it is injected via dangerouslySetInnerHTML.\n *\n * RichText/TextBlock/Card store author-controlled HTML produced by the TipTap\n * editor, but content can also arrive from imports or older data, so we always\n * sanitize at render time. isomorphic-dompurify works in both the browser and\n * during SSR, so this is safe wherever the renderer runs.\n *\n * `style` and `class` are allowed because the editor emits inline styles\n * (e.g. font-size from the typography control) and structural classes.\n */\nexport const sanitizeHtml = (html: string | undefined | null): string => {\n if (!html) return '';\n return DOMPurify.sanitize(html, {\n USE_PROFILES: { html: true },\n ADD_ATTR: ['target', 'rel'],\n });\n};\n","import React from 'react';\nimport { sanitizeHtml } from '../utils/sanitizeHtml';\n\n// ---------------------------------------------------------------------------\n// RichTextContent — renders sanitized rich-text HTML with scoped typography\n//\n// Rich-text output is injected as bare HTML tags (<h1>, <strong>, <ul>, …).\n// Those tags get no Nimbus/Chakra styling (Nimbus styles its own components,\n// not bare element selectors), and any host CSS reset — notably Tailwind's\n// Preflight, which sets `h1..h6 { font-size: inherit; font-weight: inherit }`\n// and strips list markers/margins — flattens them to plain body text.\n//\n// To make the output look the same regardless of the host's reset, we ship a\n// small stylesheet scoped to `.puck-rich-text-content` that restores sensible\n// typographic defaults. The <style> uses React 19 href/precedence dedup, so it\n// is inserted once no matter how many rich-text blocks render.\n// ---------------------------------------------------------------------------\n\nconst STYLE_ID = 'puck-rich-text-content-styles';\n\nconst RICH_TEXT_CSS = `\n.puck-rich-text-content { line-height: 1.6; }\n.puck-rich-text-content > :first-child { margin-top: 0; }\n.puck-rich-text-content > :last-child { margin-bottom: 0; }\n.puck-rich-text-content h1 { font-size: 2em; font-weight: 400; line-height: 1.2; margin: 0.67em 0; }\n.puck-rich-text-content h2 { font-size: 1.5em; font-weight: 400; line-height: 1.25; margin: 0.75em 0; }\n.puck-rich-text-content h3 { font-size: 1.17em; font-weight: 400; line-height: 1.3; margin: 0.83em 0; }\n.puck-rich-text-content h4 { font-size: 1em; font-weight: 400; margin: 1em 0; }\n.puck-rich-text-content h5 { font-size: 0.83em; font-weight: 400; margin: 1.17em 0; }\n.puck-rich-text-content h6 { font-size: 0.75em; font-weight: 400; margin: 1.33em 0; }\n.puck-rich-text-content p { margin: 1em 0; }\n.puck-rich-text-content strong, .puck-rich-text-content b { font-weight: 700; }\n.puck-rich-text-content em, .puck-rich-text-content i { font-style: italic; }\n.puck-rich-text-content u { text-decoration: underline; }\n.puck-rich-text-content s, .puck-rich-text-content del { text-decoration: line-through; }\n.puck-rich-text-content ul { list-style: disc; margin: 1em 0; padding-left: 1.5em; }\n.puck-rich-text-content ol { list-style: decimal; margin: 1em 0; padding-left: 1.5em; }\n.puck-rich-text-content li { margin: 0.25em 0; }\n.puck-rich-text-content a { color: #2563eb; text-decoration: underline; }\n.puck-rich-text-content blockquote { margin: 1em 0; padding-left: 1em; border-left: 3px solid #d1d5db; color: #4b5563; }\n.puck-rich-text-content code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; background: rgba(0,0,0,0.06); padding: 0.1em 0.3em; border-radius: 3px; font-size: 0.9em; }\n.puck-rich-text-content pre { background: rgba(0,0,0,0.06); padding: 0.75em 1em; border-radius: 6px; overflow-x: auto; }\n.puck-rich-text-content pre code { background: none; padding: 0; }\n.puck-rich-text-content img { max-width: 100%; height: auto; }\n.puck-rich-text-content hr { border: none; border-top: 1px solid #e5e7eb; margin: 1.5em 0; }\n`.trim();\n\nexport interface RichTextContentProps {\n /** Rich-text HTML string; sanitized here before injection. */\n html: string | undefined | null;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport const RichTextContent: React.FC<RichTextContentProps> = ({\n html,\n className,\n style,\n}) => (\n <>\n {/* React 19 dedups by href, so this stylesheet is inserted only once. */}\n <style href={STYLE_ID} precedence=\"default\">\n {RICH_TEXT_CSS}\n </style>\n <div\n className={className ? `puck-rich-text-content ${className}` : 'puck-rich-text-content'}\n style={style}\n dangerouslySetInnerHTML={{ __html: sanitizeHtml(html) }}\n />\n </>\n);\n","// Shared RENDER helpers used across CMS Puck components (Nimbus-free).\n// The editor-side field factory (createProductLinkFields) lives in\n// puck-editor's own cms/shared.ts, which re-exports the data/types from here.\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\nexport const getProductSku = (product: unknown): string => {\n const p = product as any;\n return p?.masterVariant?.sku ?? '';\n};\n\n/** How a product link is built — from the product slug or its SKU. */\nexport type ProductLinkWith = 'slug' | 'sku';\n\n/**\n * Build a storefront link to a product.\n *\n * Joins a sanitised base URL with the product's slug or SKU. The base is\n * trimmed, stripped of leading/trailing slashes and collapsed of any double\n * slashes, then re-prefixed with a single \"/\", e.g.\n * resolveProductLink(p, 'sku', '/product/') → '/product/123' (sku 123)\n * resolveProductLink(p, 'slug', '/slug/p/') → '/slug/p/test' (slug \"test\")\n */\nexport const resolveProductLink = (\n product: unknown,\n linkWith: ProductLinkWith = 'sku',\n baseUrl = '/p/'\n): string => {\n const p = product as any;\n const slug = getLocalizedText(p?.slug);\n const sku = getProductSku(product);\n const id = (p?.id as string) ?? '';\n // Chosen identifier, falling back to the product id / the other identifier.\n const identifier = (linkWith === 'sku' ? sku : slug) || id || slug || sku;\n\n const base =\n '/' +\n String(baseUrl ?? '')\n .trim()\n .replace(/^\\/+|\\/+$/g, '')\n .replace(/\\/{2,}/g, '/');\n const cleanId = String(identifier ?? '')\n .trim()\n .replace(/^\\/+|\\/+$/g, '');\n\n return (cleanId ? `${base}/${cleanId}` : base).replace(/\\/{2,}/g, '/');\n};\n\n/** Props every product-linking component shares. */\nexport interface ProductLinkProps {\n linkWith: ProductLinkWith;\n baseUrl: string;\n}\n\n/** Default values for the shared link props — spread into a component's defaultProps. */\nexport const productLinkDefaults: ProductLinkProps = {\n linkWith: 'sku',\n baseUrl: '/p/',\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';\n\n/**\n * Page content-width scale. `X` is the base column unit; each step doubles up\n * to a wide layout, and `full` removes the constraint (edge-to-edge).\n */\nexport type ContentWidth = 'x' | '2x' | '3x' | '4x' | '5x' | '6x' | 'full';\n\nexport const CONTENT_WIDTHS: Record<ContentWidth, string> = {\n x: '256px',\n '2x': '512px',\n '3x': '768px',\n '4x': '1024px',\n '5x': '1280px',\n '6x': '1536px',\n full: '100%',\n};\n\nexport interface RootProps {\n title?: string;\n backgroundColor?: string;\n contentWidth?: ContentWidth;\n}\n\n/**\n * Root render — the page wrapper. Applies the background and centres the content\n * column at the configured width. Nimbus-free (plain elements + inline styles).\n */\nexport const renderRoot = ({\n children,\n backgroundColor,\n contentWidth,\n}: RootProps & { children?: React.ReactNode }): React.ReactElement => {\n const maxWidth = CONTENT_WIDTHS[contentWidth as ContentWidth] ?? '100%';\n const isConstrained = maxWidth !== '100%';\n return React.createElement(\n 'div',\n {\n style: {\n background: backgroundColor ?? '#ffffff',\n minHeight: '100vh',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n },\n },\n React.createElement(\n 'div',\n {\n style: {\n maxWidth,\n // Centre the content column and give it breathing room on the sides\n // when its width is constrained.\n margin: '0 auto',\n paddingLeft: isConstrained ? '24px' : undefined,\n paddingRight: isConstrained ? '24px' : undefined,\n boxSizing: 'border-box',\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 headingFontSize?: string;\n subheading?: string;\n subheadingFontSize?: string;\n backgroundImage?: string;\n ctaText?: string;\n ctaUrl?: string;\n layout?: 'centered' | 'left-aligned';\n minHeight?: string;\n}\n\nexport const renderHero: NonNullable<ComponentConfig<HeroProps>['render']> = ({\n heading,\n headingFontSize,\n subheading,\n subheadingFontSize,\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: headingFontSize || '2.5rem', fontWeight: 700 }}>\n {heading}\n </h1>\n {subheading && (\n <p style={{ margin: '0 0 24px', fontSize: subheadingFontSize || '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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { RichTextContent } from './RichTextContent';\n\nexport interface RichTextProps {\n content: string;\n align?: 'left' | 'center' | 'right';\n maxWidth?: string;\n padding?: string;\n}\n\nexport const renderRichText: NonNullable<ComponentConfig<RichTextProps>['render']> = ({\n content,\n align,\n maxWidth,\n padding,\n}) => (\n <RichTextContent\n html={content}\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 />\n);\n","import React from 'react';\nimport { DropZone, type ComponentConfig } from '@measured/puck';\n\nexport interface GridProps {\n columnCount?: 1 | 2 | 3 | 4 | 5 | 6;\n rowCount?: 1 | 2 | 3 | 4 | 5 | 6;\n gap?: string;\n padding?: string;\n}\n\nexport const renderGrid: NonNullable<ComponentConfig<GridProps>['render']> = ({\n columnCount = 2,\n rowCount = 1,\n gap = '16px',\n padding = '16px',\n}) => {\n const cols = Math.max(1, columnCount);\n const rows = Math.max(1, rowCount);\n const cells = Array.from({ length: cols * rows }, (_, i) => i);\n return (\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: `repeat(${cols}, 1fr)`,\n gridTemplateRows: `repeat(${rows}, minmax(40px, auto))`,\n gap,\n padding,\n boxSizing: 'border-box',\n }}\n >\n {cells.map((i) => (\n <div key={i}>\n {/* Cells are indexed row-major: cell-0 = row 0 col 0, etc. */}\n <DropZone zone={`cell-${i}`} />\n </div>\n ))}\n </div>\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 renderColumns: NonNullable<ComponentConfig<ColumnsProps>['render']> = ({\n columnCount = 2,\n gap = '16px',\n padding = '16px',\n}) => {\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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { FormattedMessage } from 'react-intl';\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 renderImage: NonNullable<ComponentConfig<ImageProps>['render']> = ({\n src,\n alt,\n caption,\n width,\n height,\n objectFit,\n borderRadius,\n align,\n}) => (\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 <FormattedMessage id=\"Editor.noImageSelected\" />\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","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 fontSize?: string;\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 renderButton: NonNullable<ComponentConfig<ButtonProps>['render']> = ({\n label,\n href,\n variant = 'primary',\n size = 'md',\n fontSize,\n align = 'left',\n openInNewTab,\n}) => (\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 ...(fontSize ? { fontSize } : {}),\n }}\n >\n {label}\n </a>\n </div>\n);\n","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { RichTextContent } from './RichTextContent';\n\nexport interface CardProps {\n title: string;\n titleFontSize?: string;\n body?: string;\n imageUrl?: string;\n ctaText?: string;\n ctaUrl?: string;\n shadow?: boolean;\n borderRadius?: string;\n}\n\nexport const renderCard: NonNullable<ComponentConfig<CardProps>['render']> = ({\n title,\n titleFontSize,\n body,\n imageUrl,\n ctaText,\n ctaUrl,\n shadow,\n borderRadius,\n}) => (\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: titleFontSize || '1.1rem' }}>{title}</h3>\n {body && (\n <RichTextContent\n html={body}\n style={{ margin: '0 0 16px', color: '#555', fontSize: '14px' }}\n />\n )}\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","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 renderSpacer: NonNullable<ComponentConfig<SpacerProps>['render']> = ({\n height = '48px',\n showLine = false,\n lineColor = '#e0e0e0',\n}) => (\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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { FormattedMessage } from 'react-intl';\nimport { useDatasource } from '@commercetools-demo/puck-api';\nimport { RichTextContent } from './RichTextContent';\nimport { resolveProductLink, type ProductLinkProps } from './cms/shared';\nimport type { DatasourceValue } from '../datasource.types';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ProductTeaserProps extends ProductLinkProps {\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\nexport const renderProductTeaser: NonNullable<\n ComponentConfig<ProductTeaserProps>['render']\n> = ({ datasource, richText, linkWith, baseUrl }) => {\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 const href = product ? resolveProductLink(product, linkWith, baseUrl) : undefined;\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 <FormattedMessage id=\"Editor.loading\" />\n </div>\n ) : imageUrl ? (\n <a href={href} style={{ display: 'block' }}>\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 </a>\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 ? (\n <FormattedMessage id=\"Editor.errorLoadingProduct\" />\n ) : (\n <FormattedMessage id=\"Editor.noProductSelected\" />\n )}\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 <RichTextContent html={richText} />\n ) : (\n <div style={{ color: '#9ca3af', fontSize: '13px' }}>\n <FormattedMessage id=\"Editor.noDescription\" />\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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\n\nexport interface HeroBannerProps {\n title: string;\n subtitle: string;\n image: string;\n}\n\nexport const renderHeroBanner: NonNullable<\n ComponentConfig<HeroBannerProps>['render']\n> = ({ 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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { RichTextContent } from '../RichTextContent';\n\nexport interface TextBlockProps {\n content: string;\n}\n\nexport const renderTextBlock: NonNullable<ComponentConfig<TextBlockProps>['render']> = ({ content }) => {\n if (!content) return <></>;\n return (\n <RichTextContent\n 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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { FormattedMessage } from 'react-intl';\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\nexport const renderCategoryGrid: NonNullable<ComponentConfig<CategoryGridProps>['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 <FormattedMessage id=\"Editor.noCategoriesConfigured\" />\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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\n\nexport interface CategoryHeroProps {\n title: string;\n subtitle: string;\n image: string;\n ctaText: string;\n ctaLink: string;\n}\n\nexport const renderCategoryHero: NonNullable<\n ComponentConfig<CategoryHeroProps>['render']\n> = ({ 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","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 renderCheckoutPromoBanner: NonNullable<\n ComponentConfig<CheckoutPromoBannerProps>['render']\n> = ({ 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","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\nexport const renderCountdownBanner: NonNullable<\n ComponentConfig<CountdownBannerProps>['render']\n> = ({ headline, subline, endDate, ctaText, ctaLink, background }) => {\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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { FormattedMessage } from 'react-intl';\nimport { useDatasource } from '@commercetools-demo/puck-api';\nimport {\n formatPrice,\n getFirstPrice,\n getLocalizedText,\n getProductImage,\n resolveProductLink,\n type ProductLinkProps,\n} from './shared';\nimport type { DatasourceValue } from '../../datasource.types';\n\nexport interface CrossSellBlockProps extends ProductLinkProps {\n title: string;\n products: DatasourceValue;\n ctaText: string;\n}\n\nexport const renderCrossSellBlock: NonNullable<\n ComponentConfig<CrossSellBlockProps>['render']\n> = ({ title, products, ctaText, linkWith, baseUrl }) => {\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 <></>;\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' }}><FormattedMessage id=\"Editor.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 return (\n <a\n key={(product as any)?.id ?? i}\n href={resolveProductLink(product, linkWith, baseUrl)}\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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\n\nexport interface DeliveryMessageProps {\n message: string;\n threshold: string;\n}\n\nexport const renderDeliveryMessage: NonNullable<\n ComponentConfig<DeliveryMessageProps>['render']\n> = ({ 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","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 renderDivider: NonNullable<ComponentConfig<DividerProps>['render']> = ({\n lineStyle,\n spacing,\n}) => {\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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\n\nexport interface EmptyStateProps {\n image: string;\n title: string;\n description: string;\n ctaText: string;\n ctaLink: string;\n}\n\nexport const renderEmptyState: NonNullable<ComponentConfig<EmptyStateProps>['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","import React, { useState } from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { FormattedMessage } from 'react-intl';\nimport { RichTextContent } from '../RichTextContent';\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\nexport const renderFAQAccordion: NonNullable<ComponentConfig<FAQAccordionProps>['render']> = (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' }}>\n <FormattedMessage id=\"Editor.noFaqItemsConfigured\" />\n </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 <RichTextContent\n 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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { RichTextContent } from '../RichTextContent';\n\nexport interface FooterBlockProps {\n column1: string;\n column2: string;\n column3: string;\n copyright: string;\n}\n\nexport const renderFooterBlock: NonNullable<ComponentConfig<FooterBlockProps>['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 <RichTextContent\n key={i}\n 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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { FormattedMessage } from 'react-intl';\n\nexport interface ImageBlockProps {\n image: string;\n caption: string;\n link: string;\n}\n\nexport const renderImageBlock: NonNullable<ComponentConfig<ImageBlockProps>['render']> = ({ image, caption, link }) => {\n if (!image) return (\n <div style={{ padding: '2rem', textAlign: 'center', color: '#999', background: '#f5f5f5', borderRadius: '4px' }}>\n <FormattedMessage id=\"Editor.noImageSelected\" />\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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { useIntl } from 'react-intl';\n\nexport interface NewsletterSignupProps {\n title: string;\n subtitle: string;\n ctaText: string;\n placeholder: string;\n}\n\nexport const renderNewsletterSignup: NonNullable<\n ComponentConfig<NewsletterSignupProps>['render']\n> = ({ title, subtitle, ctaText, placeholder }) => {\n const intl = useIntl();\n return (\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={intl.formatMessage({ id: 'Editor.newsletterEmailAria' })}\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 { FormattedMessage } from 'react-intl';\nimport { useDatasource } from '@commercetools-demo/puck-api';\nimport { RichTextContent } from '../RichTextContent';\nimport {\n formatPrice,\n getFirstPrice,\n getLocalizedText,\n resolveProductLink,\n type ProductLinkProps,\n} from './shared';\nimport type { DatasourceValue } from '../../datasource.types';\n\nexport interface ProductBannerProps extends ProductLinkProps {\n title: string;\n description: string;\n ctaText: string;\n ctaLink: string;\n product: DatasourceValue;\n productOnLeft: boolean;\n background: string;\n}\n\nexport const renderProductBanner: NonNullable<\n ComponentConfig<ProductBannerProps>['render']\n> = ({\n title, description, ctaText, ctaLink, product, productOnLeft, background, linkWith, baseUrl,\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 const productHref = p ? resolveProductLink(p, linkWith, baseUrl) : undefined;\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 <RichTextContent\n 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' }}><FormattedMessage id=\"Editor.loadingProduct\" /></div>}\n {name && (\n <a href={productHref} style={{ textDecoration: 'none', color: 'inherit' }}>\n <h3 style={{ fontSize: '1.5rem', fontWeight: 600, marginBottom: '0.5rem', textAlign: 'center' }}>{name}</h3>\n </a>\n )}\n {description2 && <p style={{ fontSize: '0.9rem', color: '#666', textAlign: 'center', marginBottom: '1rem', fontStyle: 'italic' }}>{description2}</p>}\n {imageUrl && (\n <a href={productHref} style={{ display: 'block', marginBottom: '1rem' }}>\n <img\n src={imageUrl}\n alt={name || 'Product'}\n style={{ maxWidth: '100%', maxHeight: '300px', objectFit: 'cover', borderRadius: '2px', boxShadow: '0 4px 12px rgba(0,0,0,0.1)', display: 'block' }}\n />\n </a>\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 <FormattedMessage id=\"Editor.skuLabel\" values={{ sku }} />\n </span>\n )}\n {!loading && !p && (\n <div style={{ color: '#999', fontSize: '13px', padding: '2rem', textAlign: 'center' }}>\n <FormattedMessage id=\"Editor.noProductSelected\" />\n </div>\n )}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { RichTextContent } from '../RichTextContent';\n\nexport interface ProductGridHeaderProps {\n title: string;\n description: string;\n}\n\nexport const renderProductGridHeader: NonNullable<ComponentConfig<ProductGridHeaderProps>['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 <RichTextContent\n html={description}\n style={{ fontSize: '1rem', color: '#666', lineHeight: 1.5, maxWidth: '720px' }}\n />\n )}\n </div>\n);\n","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { FormattedMessage } from 'react-intl';\nimport { useDatasource } from '@commercetools-demo/puck-api';\nimport {\n formatPrice,\n getFirstPrice,\n getLocalizedText,\n getProductImage,\n resolveProductLink,\n type ProductLinkProps,\n} from './shared';\nimport type { DatasourceValue } from '../../datasource.types';\n\nexport interface ProductSliderProps extends ProductLinkProps {\n title: string;\n subtitle: string;\n products: DatasourceValue;\n}\n\nexport const renderProductSlider: NonNullable<\n ComponentConfig<ProductSliderProps>['render']\n> = ({ title, subtitle, products, linkWith, baseUrl }) => {\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' }}><FormattedMessage id=\"Editor.loadingProducts\" /></div>}\n {!loading && items.length === 0 && (\n <div style={{ textAlign: 'center', color: '#999', padding: '2rem', fontSize: '13px' }}><FormattedMessage id=\"Editor.noProductsConfigured\" /></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 return (\n <a\n key={(product as any)?.id ?? i}\n href={resolveProductLink(product, linkWith, baseUrl)}\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' }}><FormattedMessage id=\"Editor.noImage\" /></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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\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 renderPromotionalBanner: NonNullable<\n ComponentConfig<PromotionalBannerProps>['render']\n> = ({ 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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { FormattedMessage } from 'react-intl';\nimport { useDatasource } from '@commercetools-demo/puck-api';\nimport {\n formatPrice,\n getFirstPrice,\n getLocalizedText,\n getProductImage,\n resolveProductLink,\n type ProductLinkProps,\n} from './shared';\nimport type { DatasourceValue } from '../../datasource.types';\n\nexport interface RelatedProductsSliderProps extends ProductLinkProps {\n title: string;\n subtitle: string;\n products: DatasourceValue;\n}\n\nexport const renderRelatedProductsSlider: NonNullable<\n ComponentConfig<RelatedProductsSliderProps>['render']\n> = ({ title, subtitle, products, linkWith, baseUrl }) => {\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 <></>;\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' }}><FormattedMessage id=\"Editor.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 return (\n <a\n key={(product as any)?.id ?? i}\n href={resolveProductLink(product, linkWith, baseUrl)}\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' }}><FormattedMessage id=\"Editor.noImage\" /></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","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 renderSocialLinks: NonNullable<ComponentConfig<SocialLinksProps>['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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { RichTextContent } from '../RichTextContent';\n\nexport interface TabContentProps {\n tabLabel: string;\n content: string;\n}\n\nexport const renderTabContent: NonNullable<\n ComponentConfig<TabContentProps>['render']\n> = ({ 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 <RichTextContent html={content} />\n </div>\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 renderTestimonialsSlider: NonNullable<\n ComponentConfig<TestimonialsSliderProps>['render']\n> = (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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { RichTextContent } from '../RichTextContent';\n\nexport interface ThankYouContentProps {\n headline: string;\n message: string;\n ctaText: string;\n ctaLink: string;\n}\n\nexport const renderThankYouContent: NonNullable<\n ComponentConfig<ThankYouContentProps>['render']\n> = ({ 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 <RichTextContent\n 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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\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\nexport const renderTrustBadges: NonNullable<ComponentConfig<TrustBadgesProps>['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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { FormattedMessage } from 'react-intl';\n\nexport interface VideoBlockProps {\n videoUrl: string;\n posterImage: string;\n title: string;\n caption: string;\n}\n\nexport const renderVideoBlock: NonNullable<ComponentConfig<VideoBlockProps>['render']> = ({ videoUrl, posterImage, title, caption }) => {\n if (!videoUrl) return (\n <div style={{ padding: '2rem', textAlign: 'center', color: '#999', background: '#f5f5f5', borderRadius: '8px' }}>\n <FormattedMessage id=\"Editor.noVideoUrlConfigured\" />\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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { useIntl } from 'react-intl';\n\nexport interface WebsiteLogoProps {\n logo: string;\n maxWidth: string;\n maxHeight: string;\n}\n\nexport const renderWebsiteLogo: NonNullable<\n ComponentConfig<WebsiteLogoProps>['render']\n> = ({ logo, maxWidth, maxHeight }) => {\n const intl = useIntl();\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={intl.formatMessage({ id: 'Editor.websiteLogoAlt' })}\n style={{ width: '100%', height: '100%', objectFit: 'contain' }}\n />\n </div>\n );\n};\n","import type { Config, ComponentConfig } from '@measured/puck';\nimport * as C from './components';\n\n/**\n * Render-only Puck config: each component's `render` function, keyed by the same\n * component names the editor's `createDefaultPuckConfig` uses. No `fields` (those\n * are editor-only), so this graph never touches @commercetools/nimbus.\n */\nconst components: Record<string, ComponentConfig> = {\n Hero: { render: C.renderHero },\n RichText: { render: C.renderRichText },\n Grid: { render: C.renderGrid },\n Columns: { render: C.renderColumns },\n Image: { render: C.renderImage },\n Button: { render: C.renderButton },\n Card: { render: C.renderCard },\n Spacer: { render: C.renderSpacer },\n ProductTeaser: { render: C.renderProductTeaser },\n HeroBanner: { render: C.renderHeroBanner },\n TextBlock: { render: C.renderTextBlock },\n CategoryGrid: { render: C.renderCategoryGrid },\n CategoryHero: { render: C.renderCategoryHero },\n CheckoutPromoBanner: { render: C.renderCheckoutPromoBanner },\n CountdownBanner: { render: C.renderCountdownBanner },\n CrossSellBlock: { render: C.renderCrossSellBlock },\n DeliveryMessage: { render: C.renderDeliveryMessage },\n Divider: { render: C.renderDivider },\n EmptyState: { render: C.renderEmptyState },\n FAQAccordion: { render: C.renderFAQAccordion },\n FooterBlock: { render: C.renderFooterBlock },\n ImageBlock: { render: C.renderImageBlock },\n NewsletterSignup: { render: C.renderNewsletterSignup },\n ProductBanner: { render: C.renderProductBanner },\n ProductGridHeader: { render: C.renderProductGridHeader },\n ProductSlider: { render: C.renderProductSlider },\n PromotionalBanner: { render: C.renderPromotionalBanner },\n RelatedProductsSlider: { render: C.renderRelatedProductsSlider },\n SocialLinks: { render: C.renderSocialLinks },\n TabContent: { render: C.renderTabContent },\n TestimonialsSlider: { render: C.renderTestimonialsSlider },\n ThankYouContent: { render: C.renderThankYouContent },\n TrustBadges: { render: C.renderTrustBadges },\n VideoBlock: { render: C.renderVideoBlock },\n WebsiteLogo: { render: C.renderWebsiteLogo },\n} as unknown as Record<string, ComponentConfig>;\n\nexport function createRenderConfig(): Config {\n return {\n components,\n root: { render: C.renderRoot },\n } as unknown as Config;\n}\n\nexport const defaultRenderConfig: Config = createRenderConfig();\n"],"mappings":"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","names":["DOMPurify","React","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_puck","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react_intl","import_jsx_runtime","formatPrice","import_jsx_runtime","import_jsx_runtime","import_react_intl","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react_intl","import_puck_api","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_react_intl","import_jsx_runtime","import_jsx_runtime","import_react_intl","import_jsx_runtime","import_react_intl","import_jsx_runtime","import_react_intl","import_puck_api","import_jsx_runtime","import_jsx_runtime","import_react_intl","import_puck_api","import_jsx_runtime","import_jsx_runtime","import_react_intl","import_puck_api","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react_intl","import_jsx_runtime","import_react_intl","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/intl/en.json","../src/intl/es.json","../src/intl/index.ts","../src/utils/sanitizeHtml.ts","../src/components/RichTextContent.tsx","../src/components/cms/shared.ts","../src/components/Root.tsx","../src/components/Hero.tsx","../src/components/RichText.tsx","../src/components/Grid.tsx","../src/components/Columns.tsx","../src/components/Image.tsx","../src/components/Button.tsx","../src/components/Card.tsx","../src/components/Spacer.tsx","../src/components/ProductTeaser.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/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/renderConfig.tsx"],"sourcesContent":["// -----------------------------------------------------------------------------\n// @commercetools-demo/puck-components — Nimbus-free \"visualize\" layer\n//\n// Component render functions, their prop types, shared render helpers, the i18n\n// catalogs, and a render-only Puck config. The editor package composes these\n// render functions with its (Nimbus-backed) field widgets; the renderer uses the\n// render config directly. Nothing here imports @commercetools/nimbus.\n// -----------------------------------------------------------------------------\n\n// i18n message catalogs (keyed by language)\nexport { catalogs as intlCatalogs } from './intl';\n\n// Rich-text rendering + HTML sanitization\nexport { sanitizeHtml } from './utils/sanitizeHtml';\nexport { RichTextContent } from './components/RichTextContent';\nexport type { RichTextContentProps } from './components/RichTextContent';\n\n// Datasource value types (shared with the editor's DatasourceField widget)\nexport type { DatasourceType, DatasourceValue } from './datasource.types';\n\n// Shared render helpers, types, and data\nexport {\n getLocalizedText,\n formatPrice,\n getFirstPrice,\n getProductImage,\n getProductName,\n getProductSlug,\n getProductSku,\n resolveProductLink,\n productLinkDefaults,\n colors,\n} from './components/cms/shared';\nexport type { ProductLinkWith, ProductLinkProps } from './components/cms/shared';\n\n// Component render functions + prop types\nexport * from './components';\n\n// Render-only Puck config (components' render fns; no fields → no Nimbus)\nexport { createRenderConfig, defaultRenderConfig } from './renderConfig';\n","{\n \"Editor.loadingEditor\": \"Loading editor…\",\n \"Editor.errorLoadingPage\": \"Error loading page:\",\n \"Editor.toggleComponentsPanel\": \"Toggle components panel\",\n \"Editor.togglePropertiesPanel\": \"Toggle properties panel\",\n \"Editor.undo\": \"Undo\",\n \"Editor.redo\": \"Redo\",\n \"Editor.badgeSaving\": \"Saving…\",\n \"Editor.badgeUnsaved\": \"Unsaved\",\n \"Editor.badgeDraft\": \"Draft\",\n \"Editor.badgePublished\": \"Published\",\n \"Editor.preview\": \"Preview\",\n \"Editor.save\": \"Save\",\n \"Editor.publish\": \"Publish\",\n \"Editor.moreOptions\": \"More options\",\n \"Editor.hideVersionHistory\": \"Hide version history\",\n \"Editor.versionHistory\": \"Version history\",\n \"Editor.revertToPublished\": \"Revert to published\",\n \"Editor.createTemplateFromPage\": \"Create a template from this page\",\n \"Editor.createTemplateTitle\": \"Create a new template\",\n \"Editor.nameLabel\": \"Name\",\n \"Editor.nameRequired\": \"Name is required\",\n \"Editor.templateNamePlaceholder\": \"e.g. Landing page\",\n \"Editor.createTemplateWithoutData\": \"Create template without data\",\n \"Editor.cancel\": \"Cancel\",\n \"Editor.creating\": \"Creating…\",\n \"Editor.create\": \"Create\",\n \"Editor.discardChangesTitle\": \"Discard unsaved changes?\",\n \"Editor.discardChangesBody\": \"You have unsaved changes on this page. If you leave now, those changes will be lost.\",\n \"Editor.stayOnPage\": \"Stay on page\",\n \"Editor.leaveAndDiscard\": \"Leave & discard\",\n \"Editor.showPanel\": \"Show {panel} panel\",\n \"Editor.tabComponents\": \"Components\",\n \"Editor.tabHistory\": \"History\",\n \"Editor.searchComponents\": \"Search components\",\n \"Editor.searchComponentsPlaceholder\": \"Search components…\",\n \"Editor.clearSearch\": \"Clear search\",\n \"Editor.resizePropertiesPanel\": \"Resize properties panel\",\n \"Editor.resizeComponentsPanel\": \"Resize components panel\",\n \"Editor.searchProducts\": \"Search products\",\n \"Editor.searchProductsPlaceholder\": \"Search by product name…\",\n \"Editor.productSearchResults\": \"Product search results\",\n \"Editor.searching\": \"Searching…\",\n \"Editor.noProductsFound\": \"No products found\",\n \"Editor.unnamedProduct\": \"(unnamed product)\",\n \"Editor.skuLabel\": \"SKU: {sku}\",\n \"Editor.noSkuOnMasterVariant\": \"No SKU on master variant\",\n \"Editor.added\": \"Added\",\n \"Editor.datasourceType\": \"Datasource type\",\n \"Editor.datasourceProductBySku\": \"Product by SKU\",\n \"Editor.datasourceProductsBySku\": \"Products by SKU\",\n \"Editor.selectedProduct\": \"Selected product\",\n \"Editor.selectedProducts\": \"Selected products\",\n \"Editor.noProductSelectedSearch\": \"No product selected — search above to add one.\",\n \"Editor.remove\": \"Remove\",\n \"Editor.richTextPlaceholder\": \"Start typing…\",\n \"Editor.uploadAFile\": \"Upload a file\",\n \"Editor.close\": \"Close\",\n \"Editor.title\": \"Title\",\n \"Editor.fileTitlePlaceholder\": \"File title\",\n \"Editor.description\": \"Description\",\n \"Editor.optionalDescriptionPlaceholder\": \"Optional description\",\n \"Editor.dropToSelectFile\": \"Click or drag & drop to select a file\",\n \"Editor.noFileSelected\": \"No file selected\",\n \"Editor.uploading\": \"Uploading…\",\n \"Editor.upload\": \"Upload\",\n \"Editor.selectFromMediaLibrary\": \"Select from Media Library\",\n \"Editor.noFilesFound\": \"No files found.\",\n \"Editor.prev\": \"← Prev\",\n \"Editor.next\": \"Next →\",\n \"Editor.nothingSelected\": \"Nothing selected\",\n \"Editor.select\": \"Select\",\n \"Editor.selectedImagePreview\": \"Selected image preview\",\n \"Editor.noImageSelected\": \"No image selected\",\n \"Editor.mediaLibrary\": \"Media Library\",\n \"Editor.loading\": \"Loading…\",\n \"Editor.loadingProduct\": \"Loading product…\",\n \"Editor.loadingProducts\": \"Loading products…\",\n \"Editor.errorLoadingProduct\": \"Error loading product\",\n \"Editor.noProductSelected\": \"No product selected\",\n \"Editor.noDescription\": \"No description\",\n \"Editor.noCategoriesConfigured\": \"No categories configured\",\n \"Editor.noFaqItemsConfigured\": \"No FAQ items configured\",\n \"Editor.noProductsConfigured\": \"No products configured\",\n \"Editor.noImage\": \"No image\",\n \"Editor.noVideoUrlConfigured\": \"No video URL configured\",\n \"Editor.cfg.root.field.title\": \"Page Title\",\n \"Editor.cfg.root.field.backgroundColor\": \"Background Color\",\n \"Editor.cfg.root.field.contentWidth\": \"Content Width\",\n \"Editor.cfg.root.contentWidth.full\": \"Full width\",\n \"Editor.cfg.category.layout\": \"Layout\",\n \"Editor.cfg.category.text\": \"Text & Content\",\n \"Editor.cfg.category.media\": \"Media\",\n \"Editor.cfg.category.heroBanners\": \"Hero & Banners\",\n \"Editor.cfg.category.products\": \"Products\",\n \"Editor.cfg.category.actions\": \"Buttons & Forms\",\n \"Editor.cfg.category.socialProof\": \"Social Proof & Info\",\n \"Editor.cfg.category.sections\": \"Page Sections\",\n \"Editor.cfg.category.other\": \"Other\",\n \"Editor.cfg.shared.field.linkWith\": \"Link products by\",\n \"Editor.cfg.shared.linkWith.slug\": \"Slug\",\n \"Editor.cfg.shared.linkWith.sku\": \"SKU\",\n \"Editor.cfg.shared.field.baseUrl\": \"Link base URL\",\n \"Editor.cfg.fontSize.default\": \"Default\",\n \"Editor.cfg.fontSize.small\": \"Small (0.875rem)\",\n \"Editor.cfg.fontSize.medium\": \"Medium (1rem)\",\n \"Editor.cfg.fontSize.large\": \"Large (1.25rem)\",\n \"Editor.cfg.fontSize.xLarge\": \"X-Large (1.5rem)\",\n \"Editor.cfg.fontSize.2xLarge\": \"2X-Large (2rem)\",\n \"Editor.cfg.fontSize.3xLarge\": \"3X-Large (2.5rem)\",\n \"Editor.cfg.fontSize.4xLarge\": \"4X-Large (3rem)\",\n \"Editor.cfg.hero.label\": \"Hero\",\n \"Editor.cfg.hero.field.heading\": \"Heading\",\n \"Editor.cfg.hero.field.headingFontSize\": \"Heading Font Size\",\n \"Editor.cfg.hero.field.subheading\": \"Subheading\",\n \"Editor.cfg.hero.field.subheadingFontSize\": \"Subheading Font Size\",\n \"Editor.cfg.hero.field.backgroundImage\": \"Background Image URL\",\n \"Editor.cfg.hero.field.ctaText\": \"CTA Button Text\",\n \"Editor.cfg.hero.field.ctaUrl\": \"CTA Button URL\",\n \"Editor.cfg.hero.field.layout\": \"Layout\",\n \"Editor.cfg.hero.layout.centered\": \"Centered\",\n \"Editor.cfg.hero.layout.leftAligned\": \"Left Aligned\",\n \"Editor.cfg.hero.field.minHeight\": \"Min Height (CSS, e.g. 400px)\",\n \"Editor.cfg.richText.label\": \"Rich Text\",\n \"Editor.cfg.richText.field.content\": \"Content\",\n \"Editor.cfg.richText.field.align\": \"Text Alignment\",\n \"Editor.cfg.align.left\": \"Left\",\n \"Editor.cfg.align.center\": \"Center\",\n \"Editor.cfg.align.right\": \"Right\",\n \"Editor.cfg.richText.field.maxWidth\": \"Max Width (CSS)\",\n \"Editor.cfg.richText.field.padding\": \"Padding (CSS)\",\n \"Editor.cfg.grid.label\": \"Grid\",\n \"Editor.cfg.grid.field.columnCount\": \"Number of Columns\",\n \"Editor.cfg.grid.field.rowCount\": \"Number of Rows\",\n \"Editor.cfg.grid.field.gap\": \"Gap (CSS)\",\n \"Editor.cfg.grid.field.padding\": \"Padding (CSS)\",\n \"Editor.cfg.columns.label\": \"Columns\",\n \"Editor.cfg.columns.field.columnCount\": \"Number of Columns\",\n \"Editor.cfg.columns.count.2\": \"2 Columns\",\n \"Editor.cfg.columns.count.3\": \"3 Columns\",\n \"Editor.cfg.columns.count.4\": \"4 Columns\",\n \"Editor.cfg.columns.field.gap\": \"Column Gap (CSS)\",\n \"Editor.cfg.columns.field.padding\": \"Padding (CSS)\",\n \"Editor.cfg.image.label\": \"Image\",\n \"Editor.cfg.image.field.src\": \"Image\",\n \"Editor.cfg.image.field.alt\": \"Alt Text\",\n \"Editor.cfg.image.field.caption\": \"Caption\",\n \"Editor.cfg.image.field.width\": \"Width (CSS, e.g. 100%)\",\n \"Editor.cfg.image.field.height\": \"Height (CSS, e.g. 300px)\",\n \"Editor.cfg.image.field.objectFit\": \"Object Fit\",\n \"Editor.cfg.image.objectFit.cover\": \"Cover\",\n \"Editor.cfg.image.objectFit.contain\": \"Contain\",\n \"Editor.cfg.image.objectFit.fill\": \"Fill\",\n \"Editor.cfg.image.field.borderRadius\": \"Border Radius (CSS)\",\n \"Editor.cfg.image.field.align\": \"Alignment\",\n \"Editor.cfg.button.label\": \"Button\",\n \"Editor.cfg.button.field.label\": \"Button Label\",\n \"Editor.cfg.button.field.href\": \"Link URL\",\n \"Editor.cfg.button.field.variant\": \"Variant\",\n \"Editor.cfg.button.variant.primary\": \"Primary\",\n \"Editor.cfg.button.variant.secondary\": \"Secondary\",\n \"Editor.cfg.button.variant.outline\": \"Outline\",\n \"Editor.cfg.button.field.size\": \"Size\",\n \"Editor.cfg.button.size.small\": \"Small\",\n \"Editor.cfg.button.size.medium\": \"Medium\",\n \"Editor.cfg.button.size.large\": \"Large\",\n \"Editor.cfg.button.field.fontSize\": \"Font Size Override\",\n \"Editor.cfg.button.field.align\": \"Alignment\",\n \"Editor.cfg.button.field.openInNewTab\": \"Open in New Tab\",\n \"Editor.cfg.yesNo.yes\": \"Yes\",\n \"Editor.cfg.yesNo.no\": \"No\",\n \"Editor.cfg.card.label\": \"Card\",\n \"Editor.cfg.card.field.title\": \"Title\",\n \"Editor.cfg.card.field.titleFontSize\": \"Title Font Size\",\n \"Editor.cfg.card.field.body\": \"Body Text\",\n \"Editor.cfg.card.field.imageUrl\": \"Image URL\",\n \"Editor.cfg.card.field.ctaText\": \"CTA Text\",\n \"Editor.cfg.card.field.ctaUrl\": \"CTA URL\",\n \"Editor.cfg.card.field.shadow\": \"Drop Shadow\",\n \"Editor.cfg.card.field.borderRadius\": \"Border Radius (CSS)\",\n \"Editor.cfg.spacer.label\": \"Spacer\",\n \"Editor.cfg.spacer.field.height\": \"Height (CSS, e.g. 48px)\",\n \"Editor.cfg.spacer.field.showLine\": \"Show Divider Line\",\n \"Editor.cfg.spacer.field.lineColor\": \"Line Color\",\n \"Editor.cfg.productTeaser.label\": \"Product Teaser\",\n \"Editor.cfg.productTeaser.field.datasource\": \"Product Datasource\",\n \"Editor.cfg.productTeaser.field.richText\": \"Rich Text\",\n \"Editor.cfg.heroBanner.label\": \"Hero Banner\",\n \"Editor.cfg.heroBanner.field.title\": \"Title\",\n \"Editor.cfg.heroBanner.field.subtitle\": \"Subtitle\",\n \"Editor.cfg.heroBanner.field.image\": \"Image\",\n \"Editor.cfg.textBlock.label\": \"Text Block\",\n \"Editor.cfg.textBlock.field.content\": \"Content\",\n \"Editor.cfg.categoryGrid.label\": \"Category Grid\",\n \"Editor.cfg.categoryGrid.field.image\": \"Category {n} Image\",\n \"Editor.cfg.categoryGrid.field.label\": \"Category {n} Label\",\n \"Editor.cfg.categoryGrid.field.link\": \"Category {n} Link\",\n \"Editor.cfg.categoryHero.label\": \"Category Hero\",\n \"Editor.cfg.categoryHero.field.title\": \"Title\",\n \"Editor.cfg.categoryHero.field.subtitle\": \"Subtitle\",\n \"Editor.cfg.categoryHero.field.image\": \"Background Image\",\n \"Editor.cfg.categoryHero.field.ctaText\": \"CTA Text\",\n \"Editor.cfg.categoryHero.field.ctaLink\": \"CTA Link\",\n \"Editor.cfg.checkoutPromoBanner.label\": \"Checkout Promo Banner\",\n \"Editor.cfg.checkoutPromoBanner.field.title\": \"Title\",\n \"Editor.cfg.checkoutPromoBanner.field.message\": \"Message\",\n \"Editor.cfg.checkoutPromoBanner.field.ctaText\": \"CTA Text\",\n \"Editor.cfg.checkoutPromoBanner.field.ctaLink\": \"CTA Link\",\n \"Editor.cfg.countdownBanner.label\": \"Countdown Banner\",\n \"Editor.cfg.countdownBanner.field.headline\": \"Headline\",\n \"Editor.cfg.countdownBanner.field.subline\": \"Subline\",\n \"Editor.cfg.countdownBanner.field.endDate\": \"End Date (ISO, e.g. 2025-12-31T23:59:59)\",\n \"Editor.cfg.countdownBanner.field.ctaText\": \"CTA Text\",\n \"Editor.cfg.countdownBanner.field.ctaLink\": \"CTA Link\",\n \"Editor.cfg.countdownBanner.field.background\": \"Background Color\",\n \"Editor.cfg.crossSellBlock.label\": \"Cross-Sell Block\",\n \"Editor.cfg.crossSellBlock.field.title\": \"Title\",\n \"Editor.cfg.crossSellBlock.field.products\": \"Products\",\n \"Editor.cfg.crossSellBlock.field.ctaText\": \"CTA Text\",\n \"Editor.cfg.deliveryMessage.label\": \"Delivery Message\",\n \"Editor.cfg.deliveryMessage.field.message\": \"Message (use $XX for threshold)\",\n \"Editor.cfg.deliveryMessage.field.threshold\": \"Threshold Amount (e.g. 50)\",\n \"Editor.cfg.divider.label\": \"Divider\",\n \"Editor.cfg.divider.field.lineStyle\": \"Line Style\",\n \"Editor.cfg.divider.lineStyle.solid\": \"Solid\",\n \"Editor.cfg.divider.lineStyle.dashed\": \"Dashed\",\n \"Editor.cfg.divider.lineStyle.dotted\": \"Dotted\",\n \"Editor.cfg.divider.field.spacing\": \"Spacing (px)\",\n \"Editor.cfg.emptyState.label\": \"Empty State\",\n \"Editor.cfg.emptyState.field.image\": \"Image\",\n \"Editor.cfg.emptyState.field.title\": \"Title\",\n \"Editor.cfg.emptyState.field.description\": \"Description\",\n \"Editor.cfg.emptyState.field.ctaText\": \"CTA Text\",\n \"Editor.cfg.emptyState.field.ctaLink\": \"CTA Link\",\n \"Editor.cfg.faqAccordion.label\": \"FAQ Accordion\",\n \"Editor.cfg.faqAccordion.field.question\": \"Question {n}\",\n \"Editor.cfg.faqAccordion.field.answer\": \"Answer {n}\",\n \"Editor.cfg.footerBlock.label\": \"Footer Block\",\n \"Editor.cfg.footerBlock.field.column\": \"Column {n}\",\n \"Editor.cfg.footerBlock.field.copyright\": \"Copyright Text\",\n \"Editor.cfg.imageBlock.label\": \"Image Block\",\n \"Editor.cfg.imageBlock.field.image\": \"Image\",\n \"Editor.cfg.imageBlock.field.caption\": \"Caption\",\n \"Editor.cfg.imageBlock.field.link\": \"Link URL\",\n \"Editor.cfg.newsletterSignup.label\": \"Newsletter Signup\",\n \"Editor.cfg.newsletterSignup.field.title\": \"Title\",\n \"Editor.cfg.newsletterSignup.field.subtitle\": \"Subtitle\",\n \"Editor.cfg.newsletterSignup.field.ctaText\": \"Button Text\",\n \"Editor.cfg.newsletterSignup.field.placeholder\": \"Input Placeholder\",\n \"Editor.newsletterEmailAria\": \"Email\",\n \"Editor.cfg.productBanner.label\": \"Product Banner\",\n \"Editor.cfg.productBanner.field.title\": \"Title\",\n \"Editor.cfg.productBanner.field.description\": \"Description\",\n \"Editor.cfg.productBanner.field.ctaText\": \"CTA Text\",\n \"Editor.cfg.productBanner.field.ctaLink\": \"CTA Link\",\n \"Editor.cfg.productBanner.field.product\": \"Product\",\n \"Editor.cfg.productBanner.field.productOnLeft\": \"Product Position\",\n \"Editor.cfg.productBanner.productPosition.right\": \"Product on Right\",\n \"Editor.cfg.productBanner.productPosition.left\": \"Product on Left\",\n \"Editor.cfg.productBanner.field.background\": \"Background Color\",\n \"Editor.cfg.productGridHeader.label\": \"Product Grid Header\",\n \"Editor.cfg.productGridHeader.field.title\": \"Title\",\n \"Editor.cfg.productGridHeader.field.description\": \"Description\",\n \"Editor.cfg.productSlider.label\": \"Product Slider\",\n \"Editor.cfg.productSlider.field.title\": \"Title\",\n \"Editor.cfg.productSlider.field.subtitle\": \"Subtitle\",\n \"Editor.cfg.productSlider.field.products\": \"Products\",\n \"Editor.cfg.promotionalBanner.label\": \"Promotional Banner\",\n \"Editor.cfg.promotionalBanner.field.image\": \"Image\",\n \"Editor.cfg.promotionalBanner.field.title\": \"Title\",\n \"Editor.cfg.promotionalBanner.field.subtitle\": \"Subtitle\",\n \"Editor.cfg.promotionalBanner.field.ctaText\": \"CTA Text\",\n \"Editor.cfg.promotionalBanner.field.ctaLink\": \"CTA Link\",\n \"Editor.cfg.promotionalBanner.field.background\": \"Background Color\",\n \"Editor.cfg.relatedProducts.label\": \"Related Products\",\n \"Editor.cfg.relatedProducts.field.title\": \"Title\",\n \"Editor.cfg.relatedProducts.field.subtitle\": \"Subtitle\",\n \"Editor.cfg.relatedProducts.field.products\": \"Products\",\n \"Editor.cfg.socialLinks.label\": \"Social Links\",\n \"Editor.cfg.socialLinks.field.label\": \"Link {n} Label\",\n \"Editor.cfg.socialLinks.field.url\": \"Link {n} URL\",\n \"Editor.cfg.tabContent.label\": \"Tab Content\",\n \"Editor.cfg.tabContent.field.tabLabel\": \"Tab Label\",\n \"Editor.cfg.tabContent.field.content\": \"Content\",\n \"Editor.cfg.testimonials.label\": \"Testimonials\",\n \"Editor.cfg.testimonials.field.quote\": \"Quote {n}\",\n \"Editor.cfg.testimonials.field.author\": \"Author {n}\",\n \"Editor.cfg.testimonials.field.role\": \"Role {n}\",\n \"Editor.cfg.thankYouContent.label\": \"Thank You Content\",\n \"Editor.cfg.thankYouContent.field.headline\": \"Headline\",\n \"Editor.cfg.thankYouContent.field.message\": \"Message\",\n \"Editor.cfg.thankYouContent.field.ctaText\": \"CTA Text\",\n \"Editor.cfg.thankYouContent.field.ctaLink\": \"CTA Link\",\n \"Editor.cfg.trustBadges.label\": \"Trust Badges\",\n \"Editor.cfg.trustBadges.field.icon\": \"Badge {n} Icon\",\n \"Editor.cfg.trustBadges.field.label\": \"Badge {n} Label\",\n \"Editor.cfg.videoBlock.label\": \"Video Block\",\n \"Editor.cfg.videoBlock.field.videoUrl\": \"Video URL\",\n \"Editor.cfg.videoBlock.field.posterImage\": \"Poster Image\",\n \"Editor.cfg.videoBlock.field.title\": \"Title\",\n \"Editor.cfg.videoBlock.field.caption\": \"Caption\",\n \"Editor.cfg.websiteLogo.label\": \"Website Logo\",\n \"Editor.cfg.websiteLogo.field.logo\": \"Logo\",\n \"Editor.cfg.websiteLogo.field.maxWidth\": \"Max Width (px)\",\n \"Editor.cfg.websiteLogo.field.maxHeight\": \"Max Height (px)\",\n \"Editor.websiteLogoAlt\": \"Logo\",\n \"Editor.color.none\": \"None\",\n \"Editor.color.custom\": \"Custom color\",\n \"Editor.color.white\": \"White\",\n \"Editor.color.lightGray\": \"Light gray\",\n \"Editor.color.gray\": \"Gray\",\n \"Editor.color.slate\": \"Slate\",\n \"Editor.color.charcoal\": \"Charcoal\",\n \"Editor.color.black\": \"Black\",\n \"Editor.color.red\": \"Red\",\n \"Editor.color.orange\": \"Orange\",\n \"Editor.color.amber\": \"Amber\",\n \"Editor.color.yellow\": \"Yellow\",\n \"Editor.color.lime\": \"Lime\",\n \"Editor.color.green\": \"Green\",\n \"Editor.color.teal\": \"Teal\",\n \"Editor.color.cyan\": \"Cyan\",\n \"Editor.color.skyBlue\": \"Sky blue\",\n \"Editor.color.blue\": \"Blue\",\n \"Editor.color.navy\": \"Navy\",\n \"Editor.color.purple\": \"Purple\",\n \"Editor.color.pink\": \"Pink\",\n \"Editor.color.sand\": \"Sand\"\n}\n","{\n \"Editor.loadingEditor\": \"Cargando editor…\",\n \"Editor.errorLoadingPage\": \"Error al cargar la página:\",\n \"Editor.toggleComponentsPanel\": \"Panel de componentes alternados\",\n \"Editor.togglePropertiesPanel\": \"Mostrar/ocultar panel de propiedades\",\n \"Editor.undo\": \"Deshacer\",\n \"Editor.redo\": \"Rehacer\",\n \"Editor.badgeSaving\": \"Ahorro…\",\n \"Editor.badgeUnsaved\": \"No guardado\",\n \"Editor.badgeDraft\": \"Borrador\",\n \"Editor.badgePublished\": \"Publicado\",\n \"Editor.preview\": \"Vista previa\",\n \"Editor.save\": \"Guardar\",\n \"Editor.publish\": \"Publicar\",\n \"Editor.moreOptions\": \"Más opciones\",\n \"Editor.hideVersionHistory\": \"Ocultar historial de versiones\",\n \"Editor.versionHistory\": \"Historial de versiones\",\n \"Editor.revertToPublished\": \"Volver a la versión publicada\",\n \"Editor.createTemplateFromPage\": \"Crea una plantilla a partir de esta página.\",\n \"Editor.createTemplateTitle\": \"Crear una nueva plantilla\",\n \"Editor.nameLabel\": \"Nombre\",\n \"Editor.nameRequired\": \"Se requiere el nombre\",\n \"Editor.templateNamePlaceholder\": \"p. ej. Página de inicio\",\n \"Editor.createTemplateWithoutData\": \"Crear plantilla sin datos\",\n \"Editor.cancel\": \"Cancelar\",\n \"Editor.creating\": \"Creando…\",\n \"Editor.create\": \"Crear\",\n \"Editor.discardChangesTitle\": \"¿Descartar los cambios no guardados?\",\n \"Editor.discardChangesBody\": \"Tienes cambios sin guardar en esta página. Si sales ahora, esos cambios se perderán.\",\n \"Editor.stayOnPage\": \"Permanecer en la página\",\n \"Editor.leaveAndDiscard\": \"Dejar y desechar\",\n \"Editor.showPanel\": \"Mostrar panel {panel}\",\n \"Editor.tabComponents\": \"Componentes\",\n \"Editor.tabHistory\": \"Historia\",\n \"Editor.searchComponents\": \"Componentes de búsqueda\",\n \"Editor.searchComponentsPlaceholder\": \"Componentes de búsqueda…\",\n \"Editor.clearSearch\": \"Borrar búsqueda\",\n \"Editor.resizePropertiesPanel\": \"Redimensionar el panel de propiedades\",\n \"Editor.resizeComponentsPanel\": \"Redimensionar el panel de componentes\",\n \"Editor.searchProducts\": \"Buscar productos\",\n \"Editor.searchProductsPlaceholder\": \"Buscar por nombre del producto…\",\n \"Editor.productSearchResults\": \"Resultados de la búsqueda de productos\",\n \"Editor.searching\": \"Búsqueda…\",\n \"Editor.noProductsFound\": \"No se encontraron productos\",\n \"Editor.unnamedProduct\": \"(producto sin nombre)\",\n \"Editor.skuLabel\": \"SKU: {sku}\",\n \"Editor.noSkuOnMasterVariant\": \"No hay SKU en la variante principal\",\n \"Editor.added\": \"Agregado\",\n \"Editor.datasourceType\": \"Tipo de fuente de datos\",\n \"Editor.datasourceProductBySku\": \"Producto por SKU\",\n \"Editor.datasourceProductsBySku\": \"Productos por SKU\",\n \"Editor.selectedProduct\": \"Producto seleccionado\",\n \"Editor.selectedProducts\": \"Productos seleccionados\",\n \"Editor.noProductSelectedSearch\": \"No se ha seleccionado ningún producto; busque arriba para añadir uno.\",\n \"Editor.remove\": \"Eliminar\",\n \"Editor.richTextPlaceholder\": \"Empieza a escribir…\",\n \"Editor.uploadAFile\": \"Subir un archivo\",\n \"Editor.close\": \"Cerrar\",\n \"Editor.title\": \"Título\",\n \"Editor.fileTitlePlaceholder\": \"Título del archivo\",\n \"Editor.description\": \"Descripción\",\n \"Editor.optionalDescriptionPlaceholder\": \"Descripción opcional\",\n \"Editor.dropToSelectFile\": \"Haz clic o arrastra y suelta para seleccionar un archivo.\",\n \"Editor.noFileSelected\": \"No se ha seleccionado ningún archivo.\",\n \"Editor.uploading\": \"Subiendo…\",\n \"Editor.upload\": \"Subir\",\n \"Editor.selectFromMediaLibrary\": \"Seleccionar de la biblioteca multimedia\",\n \"Editor.noFilesFound\": \"No se encontraron archivos.\",\n \"Editor.prev\": \"← Anterior\",\n \"Editor.next\": \"Siguiente →\",\n \"Editor.nothingSelected\": \"No se ha seleccionado nada\",\n \"Editor.select\": \"Seleccionar\",\n \"Editor.selectedImagePreview\": \"Vista previa de la imagen seleccionada\",\n \"Editor.noImageSelected\": \"No se ha seleccionado ninguna imagen\",\n \"Editor.mediaLibrary\": \"Biblioteca multimedia\",\n \"Editor.loading\": \"Cargando…\",\n \"Editor.loadingProduct\": \"Cargando producto…\",\n \"Editor.loadingProducts\": \"Cargando productos…\",\n \"Editor.errorLoadingProduct\": \"Error al cargar el producto\",\n \"Editor.noProductSelected\": \"No se ha seleccionado ningún producto.\",\n \"Editor.noDescription\": \"Sin descripción\",\n \"Editor.noCategoriesConfigured\": \"No se han configurado categorías\",\n \"Editor.noFaqItemsConfigured\": \"No hay elementos de preguntas frecuentes configurados.\",\n \"Editor.noProductsConfigured\": \"No hay productos configurados\",\n \"Editor.noImage\": \"Sin imagen\",\n \"Editor.noVideoUrlConfigured\": \"No se ha configurado ninguna URL de vídeo.\",\n \"Editor.cfg.root.field.title\": \"Título de la página\",\n \"Editor.cfg.root.field.backgroundColor\": \"Color de fondo\",\n \"Editor.cfg.root.field.contentWidth\": \"Ancho del contenido\",\n \"Editor.cfg.root.contentWidth.full\": \"Ancho completo\",\n \"Editor.cfg.category.layout\": \"Disposición\",\n \"Editor.cfg.category.text\": \"Texto y contenido\",\n \"Editor.cfg.category.media\": \"Medios de comunicación\",\n \"Editor.cfg.category.heroBanners\": \"Héroes y Estandartes\",\n \"Editor.cfg.category.products\": \"Productos\",\n \"Editor.cfg.category.actions\": \"Botones y formularios\",\n \"Editor.cfg.category.socialProof\": \"Prueba social e información\",\n \"Editor.cfg.category.sections\": \"Secciones de página\",\n \"Editor.cfg.category.other\": \"Otro\",\n \"Editor.cfg.shared.field.linkWith\": \"Enlace productos por\",\n \"Editor.cfg.shared.linkWith.slug\": \"Slug\",\n \"Editor.cfg.shared.linkWith.sku\": \"SKU\",\n \"Editor.cfg.shared.field.baseUrl\": \"URL base del enlace\",\n \"Editor.cfg.fontSize.default\": \"Por defecto\",\n \"Editor.cfg.fontSize.small\": \"Pequeño (0,875 rem)\",\n \"Editor.cfg.fontSize.medium\": \"Medio (1 rem)\",\n \"Editor.cfg.fontSize.large\": \"Grande (1,25 rem)\",\n \"Editor.cfg.fontSize.xLarge\": \"Extra grande (1,5 rem)\",\n \"Editor.cfg.fontSize.2xLarge\": \"2X-Grande (2rem)\",\n \"Editor.cfg.fontSize.3xLarge\": \"3X-Grande (2,5 rem)\",\n \"Editor.cfg.fontSize.4xLarge\": \"4X-Grande (3rem)\",\n \"Editor.cfg.hero.label\": \"Hero\",\n \"Editor.cfg.hero.field.heading\": \"Título\",\n \"Editor.cfg.hero.field.headingFontSize\": \"Tamaño de fuente del encabezado\",\n \"Editor.cfg.hero.field.subheading\": \"Subtítulo\",\n \"Editor.cfg.hero.field.subheadingFontSize\": \"Tamaño de fuente del subtítulo\",\n \"Editor.cfg.hero.field.backgroundImage\": \"URL de la imagen de fondo\",\n \"Editor.cfg.hero.field.ctaText\": \"Texto del botón CTA\",\n \"Editor.cfg.hero.field.ctaUrl\": \"URL del botón CTA\",\n \"Editor.cfg.hero.field.layout\": \"Disposición\",\n \"Editor.cfg.hero.layout.centered\": \"Centrado\",\n \"Editor.cfg.hero.layout.leftAligned\": \"Alineado a la izquierda\",\n \"Editor.cfg.hero.field.minHeight\": \"Altura mínima (CSS, por ejemplo, 400px)\",\n \"Editor.cfg.richText.label\": \"Texto enriquecido\",\n \"Editor.cfg.richText.field.content\": \"Contenido\",\n \"Editor.cfg.richText.field.align\": \"Alineación del texto\",\n \"Editor.cfg.align.left\": \"Izquierda\",\n \"Editor.cfg.align.center\": \"Centro\",\n \"Editor.cfg.align.right\": \"Bien\",\n \"Editor.cfg.richText.field.maxWidth\": \"Ancho máximo (CSS)\",\n \"Editor.cfg.richText.field.padding\": \"Relleno (CSS)\",\n \"Editor.cfg.grid.label\": \"Red\",\n \"Editor.cfg.grid.field.columnCount\": \"Número de columnas\",\n \"Editor.cfg.grid.field.rowCount\": \"Número de filas\",\n \"Editor.cfg.grid.field.gap\": \"Brecha (CSS)\",\n \"Editor.cfg.grid.field.padding\": \"Relleno (CSS)\",\n \"Editor.cfg.columns.label\": \"Columnas\",\n \"Editor.cfg.columns.field.columnCount\": \"Número de columnas\",\n \"Editor.cfg.columns.count.2\": \"2 columnas\",\n \"Editor.cfg.columns.count.3\": \"3 columnas\",\n \"Editor.cfg.columns.count.4\": \"4 columnas\",\n \"Editor.cfg.columns.field.gap\": \"Espacio entre columnas (CSS)\",\n \"Editor.cfg.columns.field.padding\": \"Relleno (CSS)\",\n \"Editor.cfg.image.label\": \"Imagen\",\n \"Editor.cfg.image.field.src\": \"Imagen\",\n \"Editor.cfg.image.field.alt\": \"Texto alternativo\",\n \"Editor.cfg.image.field.caption\": \"Subtítulo\",\n \"Editor.cfg.image.field.width\": \"Ancho (CSS, por ejemplo, 100%)\",\n \"Editor.cfg.image.field.height\": \"Altura (CSS, por ejemplo, 300px)\",\n \"Editor.cfg.image.field.objectFit\": \"Ajuste del objeto\",\n \"Editor.cfg.image.objectFit.cover\": \"Cubrir\",\n \"Editor.cfg.image.objectFit.contain\": \"Contener\",\n \"Editor.cfg.image.objectFit.fill\": \"Llenar\",\n \"Editor.cfg.image.field.borderRadius\": \"Radio de borde (CSS)\",\n \"Editor.cfg.image.field.align\": \"Alineación\",\n \"Editor.cfg.button.label\": \"Botón\",\n \"Editor.cfg.button.field.label\": \"Etiqueta del botón\",\n \"Editor.cfg.button.field.href\": \"URL del enlace\",\n \"Editor.cfg.button.field.variant\": \"Variante\",\n \"Editor.cfg.button.variant.primary\": \"Primario\",\n \"Editor.cfg.button.variant.secondary\": \"Secundario\",\n \"Editor.cfg.button.variant.outline\": \"Describir\",\n \"Editor.cfg.button.field.size\": \"Tamaño\",\n \"Editor.cfg.button.size.small\": \"Pequeño\",\n \"Editor.cfg.button.size.medium\": \"Medio\",\n \"Editor.cfg.button.size.large\": \"Grande\",\n \"Editor.cfg.button.field.fontSize\": \"Anulación del tamaño de fuente\",\n \"Editor.cfg.button.field.align\": \"Alineación\",\n \"Editor.cfg.button.field.openInNewTab\": \"Abrir en una pestaña nueva\",\n \"Editor.cfg.yesNo.yes\": \"Sí\",\n \"Editor.cfg.yesNo.no\": \"No\",\n \"Editor.cfg.card.label\": \"Tarjeta\",\n \"Editor.cfg.card.field.title\": \"Título\",\n \"Editor.cfg.card.field.titleFontSize\": \"Tamaño de fuente del título\",\n \"Editor.cfg.card.field.body\": \"Texto del cuerpo\",\n \"Editor.cfg.card.field.imageUrl\": \"URL de la imagen\",\n \"Editor.cfg.card.field.ctaText\": \"Texto de llamada a la acción\",\n \"Editor.cfg.card.field.ctaUrl\": \"URL de llamada a la acción\",\n \"Editor.cfg.card.field.shadow\": \"Sombra paralela\",\n \"Editor.cfg.card.field.borderRadius\": \"Radio de borde (CSS)\",\n \"Editor.cfg.spacer.label\": \"espaciador\",\n \"Editor.cfg.spacer.field.height\": \"Altura (CSS, por ejemplo, 48px)\",\n \"Editor.cfg.spacer.field.showLine\": \"Mostrar línea divisoria\",\n \"Editor.cfg.spacer.field.lineColor\": \"Color de línea\",\n \"Editor.cfg.productTeaser.label\": \"Avance del producto\",\n \"Editor.cfg.productTeaser.field.datasource\": \"Fuente de datos del producto\",\n \"Editor.cfg.productTeaser.field.richText\": \"Texto enriquecido\",\n \"Editor.cfg.heroBanner.label\": \"Hero Banner\",\n \"Editor.cfg.heroBanner.field.title\": \"Título\",\n \"Editor.cfg.heroBanner.field.subtitle\": \"Subtitular\",\n \"Editor.cfg.heroBanner.field.image\": \"Imagen\",\n \"Editor.cfg.textBlock.label\": \"Bloque de texto\",\n \"Editor.cfg.textBlock.field.content\": \"Contenido\",\n \"Editor.cfg.categoryGrid.label\": \"Cuadrícula de categorías\",\n \"Editor.cfg.categoryGrid.field.image\": \"Categoría {n} Imagen\",\n \"Editor.cfg.categoryGrid.field.label\": \"Categoría {n} Etiqueta\",\n \"Editor.cfg.categoryGrid.field.link\": \"Enlace de categoría {n}\",\n \"Editor.cfg.categoryHero.label\": \"Héroe de categoría\",\n \"Editor.cfg.categoryHero.field.title\": \"Título\",\n \"Editor.cfg.categoryHero.field.subtitle\": \"Subtitular\",\n \"Editor.cfg.categoryHero.field.image\": \"Imagen de fondo\",\n \"Editor.cfg.categoryHero.field.ctaText\": \"Texto de llamada a la acción\",\n \"Editor.cfg.categoryHero.field.ctaLink\": \"Enlace CTA\",\n \"Editor.cfg.checkoutPromoBanner.label\": \"Banner promocional de pago\",\n \"Editor.cfg.checkoutPromoBanner.field.title\": \"Título\",\n \"Editor.cfg.checkoutPromoBanner.field.message\": \"Mensaje\",\n \"Editor.cfg.checkoutPromoBanner.field.ctaText\": \"Texto de llamada a la acción\",\n \"Editor.cfg.checkoutPromoBanner.field.ctaLink\": \"Enlace CTA\",\n \"Editor.cfg.countdownBanner.label\": \"Banner de cuenta regresiva\",\n \"Editor.cfg.countdownBanner.field.headline\": \"Titular\",\n \"Editor.cfg.countdownBanner.field.subline\": \"Sublínea\",\n \"Editor.cfg.countdownBanner.field.endDate\": \"Fecha de finalización (ISO, por ejemplo, 2025-12-31T23:59:59)\",\n \"Editor.cfg.countdownBanner.field.ctaText\": \"Texto de llamada a la acción\",\n \"Editor.cfg.countdownBanner.field.ctaLink\": \"Enlace CTA\",\n \"Editor.cfg.countdownBanner.field.background\": \"Color de fondo\",\n \"Editor.cfg.crossSellBlock.label\": \"Bloque de venta cruzada\",\n \"Editor.cfg.crossSellBlock.field.title\": \"Título\",\n \"Editor.cfg.crossSellBlock.field.products\": \"Productos\",\n \"Editor.cfg.crossSellBlock.field.ctaText\": \"Texto de llamada a la acción\",\n \"Editor.cfg.deliveryMessage.label\": \"Mensaje de entrega\",\n \"Editor.cfg.deliveryMessage.field.message\": \"Mensaje (use $XX para el umbral)\",\n \"Editor.cfg.deliveryMessage.field.threshold\": \"Cantidad umbral (p. ej., 50)\",\n \"Editor.cfg.divider.label\": \"Divisor\",\n \"Editor.cfg.divider.field.lineStyle\": \"Estilo de línea\",\n \"Editor.cfg.divider.lineStyle.solid\": \"Sólido\",\n \"Editor.cfg.divider.lineStyle.dashed\": \"Corrido\",\n \"Editor.cfg.divider.lineStyle.dotted\": \"Punteado\",\n \"Editor.cfg.divider.field.spacing\": \"Espaciado (px)\",\n \"Editor.cfg.emptyState.label\": \"Estado vacío\",\n \"Editor.cfg.emptyState.field.image\": \"Imagen\",\n \"Editor.cfg.emptyState.field.title\": \"Título\",\n \"Editor.cfg.emptyState.field.description\": \"Descripción\",\n \"Editor.cfg.emptyState.field.ctaText\": \"Texto de llamada a la acción\",\n \"Editor.cfg.emptyState.field.ctaLink\": \"Enlace CTA\",\n \"Editor.cfg.faqAccordion.label\": \"Acordeón de preguntas frecuentes\",\n \"Editor.cfg.faqAccordion.field.question\": \"Pregunta {n}\",\n \"Editor.cfg.faqAccordion.field.answer\": \"Respuesta {n}\",\n \"Editor.cfg.footerBlock.label\": \"Bloque de pie de página\",\n \"Editor.cfg.footerBlock.field.column\": \"Columna {n}\",\n \"Editor.cfg.footerBlock.field.copyright\": \"Texto de derechos de autor\",\n \"Editor.cfg.imageBlock.label\": \"Bloque de imagen\",\n \"Editor.cfg.imageBlock.field.image\": \"Imagen\",\n \"Editor.cfg.imageBlock.field.caption\": \"Subtítulo\",\n \"Editor.cfg.imageBlock.field.link\": \"URL del enlace\",\n \"Editor.cfg.newsletterSignup.label\": \"Suscripción al boletín informativo\",\n \"Editor.cfg.newsletterSignup.field.title\": \"Título\",\n \"Editor.cfg.newsletterSignup.field.subtitle\": \"Subtitular\",\n \"Editor.cfg.newsletterSignup.field.ctaText\": \"Texto del botón\",\n \"Editor.cfg.newsletterSignup.field.placeholder\": \"Marcador de posición de entrada\",\n \"Editor.newsletterEmailAria\": \"Correo electrónico\",\n \"Editor.cfg.productBanner.label\": \"Banner del producto\",\n \"Editor.cfg.productBanner.field.title\": \"Título\",\n \"Editor.cfg.productBanner.field.description\": \"Descripción\",\n \"Editor.cfg.productBanner.field.ctaText\": \"Texto de llamada a la acción\",\n \"Editor.cfg.productBanner.field.ctaLink\": \"Enlace CTA\",\n \"Editor.cfg.productBanner.field.product\": \"Producto\",\n \"Editor.cfg.productBanner.field.productOnLeft\": \"Posicionamiento del producto\",\n \"Editor.cfg.productBanner.productPosition.right\": \"Producto a la derecha\",\n \"Editor.cfg.productBanner.productPosition.left\": \"Producto a la izquierda\",\n \"Editor.cfg.productBanner.field.background\": \"Color de fondo\",\n \"Editor.cfg.productGridHeader.label\": \"Encabezado de la cuadrícula de productos\",\n \"Editor.cfg.productGridHeader.field.title\": \"Título\",\n \"Editor.cfg.productGridHeader.field.description\": \"Descripción\",\n \"Editor.cfg.productSlider.label\": \"Deslizador de productos\",\n \"Editor.cfg.productSlider.field.title\": \"Título\",\n \"Editor.cfg.productSlider.field.subtitle\": \"Subtitular\",\n \"Editor.cfg.productSlider.field.products\": \"Productos\",\n \"Editor.cfg.promotionalBanner.label\": \"Banner promocional\",\n \"Editor.cfg.promotionalBanner.field.image\": \"Imagen\",\n \"Editor.cfg.promotionalBanner.field.title\": \"Título\",\n \"Editor.cfg.promotionalBanner.field.subtitle\": \"Subtitular\",\n \"Editor.cfg.promotionalBanner.field.ctaText\": \"Texto de llamada a la acción\",\n \"Editor.cfg.promotionalBanner.field.ctaLink\": \"Enlace CTA\",\n \"Editor.cfg.promotionalBanner.field.background\": \"Color de fondo\",\n \"Editor.cfg.relatedProducts.label\": \"Productos relacionados\",\n \"Editor.cfg.relatedProducts.field.title\": \"Título\",\n \"Editor.cfg.relatedProducts.field.subtitle\": \"Subtitular\",\n \"Editor.cfg.relatedProducts.field.products\": \"Productos\",\n \"Editor.cfg.socialLinks.label\": \"Enlaces sociales\",\n \"Editor.cfg.socialLinks.field.label\": \"Enlace {n} Etiqueta\",\n \"Editor.cfg.socialLinks.field.url\": \"Enlace {n} URL\",\n \"Editor.cfg.tabContent.label\": \"Contenido de la pestaña\",\n \"Editor.cfg.tabContent.field.tabLabel\": \"Etiqueta de pestaña\",\n \"Editor.cfg.tabContent.field.content\": \"Contenido\",\n \"Editor.cfg.testimonials.label\": \"Testimonios\",\n \"Editor.cfg.testimonials.field.quote\": \"Cita {n}\",\n \"Editor.cfg.testimonials.field.author\": \"Autor {n}\",\n \"Editor.cfg.testimonials.field.role\": \"Rol {n}\",\n \"Editor.cfg.thankYouContent.label\": \"Contenido de agradecimiento\",\n \"Editor.cfg.thankYouContent.field.headline\": \"Titular\",\n \"Editor.cfg.thankYouContent.field.message\": \"Mensaje\",\n \"Editor.cfg.thankYouContent.field.ctaText\": \"Texto de llamada a la acción\",\n \"Editor.cfg.thankYouContent.field.ctaLink\": \"Enlace CTA\",\n \"Editor.cfg.trustBadges.label\": \"Insignias de confianza\",\n \"Editor.cfg.trustBadges.field.icon\": \"Insignia {n} Icono\",\n \"Editor.cfg.trustBadges.field.label\": \"Etiqueta de insignia {n}\",\n \"Editor.cfg.videoBlock.label\": \"Bloque de vídeo\",\n \"Editor.cfg.videoBlock.field.videoUrl\": \"URL del vídeo\",\n \"Editor.cfg.videoBlock.field.posterImage\": \"Imagen del póster\",\n \"Editor.cfg.videoBlock.field.title\": \"Título\",\n \"Editor.cfg.videoBlock.field.caption\": \"Subtítulo\",\n \"Editor.cfg.websiteLogo.label\": \"Logotipo del sitio web\",\n \"Editor.cfg.websiteLogo.field.logo\": \"Logo\",\n \"Editor.cfg.websiteLogo.field.maxWidth\": \"Ancho máximo (px)\",\n \"Editor.cfg.websiteLogo.field.maxHeight\": \"Altura máxima (px)\",\n \"Editor.websiteLogoAlt\": \"Logo\",\n \"Editor.color.none\": \"Ninguno\",\n \"Editor.color.custom\": \"Color personalizado\",\n \"Editor.color.white\": \"Blanco\",\n \"Editor.color.lightGray\": \"Gris claro\",\n \"Editor.color.gray\": \"Gris\",\n \"Editor.color.slate\": \"Pizarra\",\n \"Editor.color.charcoal\": \"Carbón\",\n \"Editor.color.black\": \"Negro\",\n \"Editor.color.red\": \"Rojo\",\n \"Editor.color.orange\": \"Naranja\",\n \"Editor.color.amber\": \"Ámbar\",\n \"Editor.color.yellow\": \"Amarillo\",\n \"Editor.color.lime\": \"Lima\",\n \"Editor.color.green\": \"Verde\",\n \"Editor.color.teal\": \"Verde azulado\",\n \"Editor.color.cyan\": \"Cian\",\n \"Editor.color.skyBlue\": \"Azul cielo\",\n \"Editor.color.blue\": \"Azul\",\n \"Editor.color.navy\": \"Azul marino\",\n \"Editor.color.purple\": \"Morado\",\n \"Editor.color.pink\": \"Rosa\",\n \"Editor.color.sand\": \"Arena\"\n}\n","import en from './en.json';\nimport es from './es.json';\n/**\n * Locale catalogs owned by this package, keyed by language. `en.json` is the\n * source of truth; other locales are generated by `scripts/translate-messages.mjs`\n * and may be empty until that script is run (missing keys fall back to the\n * English `defaultMessage`).\n */\nexport const catalogs: Record<string, Record<string, string>> = { en, es };\n","import DOMPurify from 'isomorphic-dompurify';\n\n/**\n * Sanitize rich-text HTML before it is injected via dangerouslySetInnerHTML.\n *\n * RichText/TextBlock/Card store author-controlled HTML produced by the TipTap\n * editor, but content can also arrive from imports or older data, so we always\n * sanitize at render time. isomorphic-dompurify works in both the browser and\n * during SSR, so this is safe wherever the renderer runs.\n *\n * `style` and `class` are allowed because the editor emits inline styles\n * (e.g. font-size from the typography control) and structural classes.\n */\nexport const sanitizeHtml = (html: string | undefined | null): string => {\n if (!html) return '';\n return DOMPurify.sanitize(html, {\n USE_PROFILES: { html: true },\n ADD_ATTR: ['target', 'rel'],\n });\n};\n","import React from 'react';\nimport { sanitizeHtml } from '../utils/sanitizeHtml';\n\n// ---------------------------------------------------------------------------\n// RichTextContent — renders sanitized rich-text HTML with scoped typography\n//\n// Rich-text output is injected as bare HTML tags (<h1>, <strong>, <ul>, …).\n// Those tags get no Nimbus/Chakra styling (Nimbus styles its own components,\n// not bare element selectors), and any host CSS reset — notably Tailwind's\n// Preflight, which sets `h1..h6 { font-size: inherit; font-weight: inherit }`\n// and strips list markers/margins — flattens them to plain body text.\n//\n// To make the output look the same regardless of the host's reset, we ship a\n// small stylesheet scoped to `.puck-rich-text-content` that restores sensible\n// typographic defaults. The <style> uses React 19 href/precedence dedup, so it\n// is inserted once no matter how many rich-text blocks render.\n//\n// Theming: every declared property reads from a CSS custom property with the\n// default as the var() fallback, e.g.\n// .puck-rich-text-content h1 { font-size: var(--puck-rich-text-content--h1--font-size, 2em); }\n// so a host can restyle any element by setting the matching variable on\n// `.puck-rich-text-content` (or any ancestor). See README.md for the full list.\n// ---------------------------------------------------------------------------\n\nconst STYLE_ID = 'puck-rich-text-content-styles';\n\n// Naming: --puck-rich-text-content--<element>--<property>. Keep this in sync\n// with the \"Theming\" table in this package's README.\nconst RICH_TEXT_CSS = `\n.puck-rich-text-content { line-height: var(--puck-rich-text-content--line-height, 1.6); }\n.puck-rich-text-content > :first-child { margin-top: var(--puck-rich-text-content--first-child--margin-top, 0); }\n.puck-rich-text-content > :last-child { margin-bottom: var(--puck-rich-text-content--last-child--margin-bottom, 0); }\n.puck-rich-text-content h1 { font-size: var(--puck-rich-text-content--h1--font-size, 2em); font-weight: var(--puck-rich-text-content--h1--font-weight, 400); line-height: var(--puck-rich-text-content--h1--line-height, 1.2); margin: var(--puck-rich-text-content--h1--margin, 0.67em 0); }\n.puck-rich-text-content h2 { font-size: var(--puck-rich-text-content--h2--font-size, 1.5em); font-weight: var(--puck-rich-text-content--h2--font-weight, 400); line-height: var(--puck-rich-text-content--h2--line-height, 1.25); margin: var(--puck-rich-text-content--h2--margin, 0.75em 0); }\n.puck-rich-text-content h3 { font-size: var(--puck-rich-text-content--h3--font-size, 1.17em); font-weight: var(--puck-rich-text-content--h3--font-weight, 400); line-height: var(--puck-rich-text-content--h3--line-height, 1.3); margin: var(--puck-rich-text-content--h3--margin, 0.83em 0); }\n.puck-rich-text-content h4 { font-size: var(--puck-rich-text-content--h4--font-size, 1em); font-weight: var(--puck-rich-text-content--h4--font-weight, 400); margin: var(--puck-rich-text-content--h4--margin, 1em 0); }\n.puck-rich-text-content h5 { font-size: var(--puck-rich-text-content--h5--font-size, 0.83em); font-weight: var(--puck-rich-text-content--h5--font-weight, 400); margin: var(--puck-rich-text-content--h5--margin, 1.17em 0); }\n.puck-rich-text-content h6 { font-size: var(--puck-rich-text-content--h6--font-size, 0.75em); font-weight: var(--puck-rich-text-content--h6--font-weight, 400); margin: var(--puck-rich-text-content--h6--margin, 1.33em 0); }\n.puck-rich-text-content p { margin: var(--puck-rich-text-content--p--margin, 1em 0); }\n.puck-rich-text-content strong, .puck-rich-text-content b { font-weight: var(--puck-rich-text-content--strong--font-weight, 700); }\n.puck-rich-text-content em, .puck-rich-text-content i { font-style: var(--puck-rich-text-content--em--font-style, italic); }\n.puck-rich-text-content u { text-decoration: var(--puck-rich-text-content--u--text-decoration, underline); }\n.puck-rich-text-content s, .puck-rich-text-content del { text-decoration: var(--puck-rich-text-content--s--text-decoration, line-through); }\n.puck-rich-text-content ul { list-style: var(--puck-rich-text-content--ul--list-style, disc); margin: var(--puck-rich-text-content--ul--margin, 1em 0); padding-left: var(--puck-rich-text-content--ul--padding-left, 1.5em); }\n.puck-rich-text-content ol { list-style: var(--puck-rich-text-content--ol--list-style, decimal); margin: var(--puck-rich-text-content--ol--margin, 1em 0); padding-left: var(--puck-rich-text-content--ol--padding-left, 1.5em); }\n.puck-rich-text-content li { margin: var(--puck-rich-text-content--li--margin, 0.25em 0); }\n.puck-rich-text-content a { color: var(--puck-rich-text-content--a--color, #2563eb); text-decoration: var(--puck-rich-text-content--a--text-decoration, underline); }\n.puck-rich-text-content blockquote { margin: var(--puck-rich-text-content--blockquote--margin, 1em 0); padding-left: var(--puck-rich-text-content--blockquote--padding-left, 1em); border-left: var(--puck-rich-text-content--blockquote--border-left, 3px solid #d1d5db); color: var(--puck-rich-text-content--blockquote--color, #4b5563); }\n.puck-rich-text-content code { font-family: var(--puck-rich-text-content--code--font-family, ui-monospace, SFMono-Regular, Menlo, monospace); background: var(--puck-rich-text-content--code--background, rgba(0,0,0,0.06)); padding: var(--puck-rich-text-content--code--padding, 0.1em 0.3em); border-radius: var(--puck-rich-text-content--code--border-radius, 3px); font-size: var(--puck-rich-text-content--code--font-size, 0.9em); }\n.puck-rich-text-content pre { background: var(--puck-rich-text-content--pre--background, rgba(0,0,0,0.06)); padding: var(--puck-rich-text-content--pre--padding, 0.75em 1em); border-radius: var(--puck-rich-text-content--pre--border-radius, 6px); overflow-x: var(--puck-rich-text-content--pre--overflow-x, auto); }\n.puck-rich-text-content pre code { background: var(--puck-rich-text-content--pre-code--background, none); padding: var(--puck-rich-text-content--pre-code--padding, 0); }\n.puck-rich-text-content img { max-width: var(--puck-rich-text-content--img--max-width, 100%); height: var(--puck-rich-text-content--img--height, auto); }\n.puck-rich-text-content hr { border: var(--puck-rich-text-content--hr--border, none); border-top: var(--puck-rich-text-content--hr--border-top, 1px solid #e5e7eb); margin: var(--puck-rich-text-content--hr--margin, 1.5em 0); }\n`.trim();\n\nexport interface RichTextContentProps {\n /** Rich-text HTML string; sanitized here before injection. */\n html: string | undefined | null;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport const RichTextContent: React.FC<RichTextContentProps> = ({\n html,\n className,\n style,\n}) => (\n <>\n {/* React 19 dedups by href, so this stylesheet is inserted only once. */}\n <style href={STYLE_ID} precedence=\"default\">\n {RICH_TEXT_CSS}\n </style>\n <div\n className={className ? `puck-rich-text-content ${className}` : 'puck-rich-text-content'}\n style={style}\n dangerouslySetInnerHTML={{ __html: sanitizeHtml(html) }}\n />\n </>\n);\n","// Shared RENDER helpers used across CMS Puck components (Nimbus-free).\n// The editor-side field factory (createProductLinkFields) lives in\n// puck-editor's own cms/shared.ts, which re-exports the data/types from here.\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\nexport const getProductSku = (product: unknown): string => {\n const p = product as any;\n return p?.masterVariant?.sku ?? '';\n};\n\n/** How a product link is built — from the product slug or its SKU. */\nexport type ProductLinkWith = 'slug' | 'sku';\n\n/**\n * Build a storefront link to a product.\n *\n * Joins a sanitised base URL with the product's slug or SKU. The base is\n * trimmed, stripped of leading/trailing slashes and collapsed of any double\n * slashes, then re-prefixed with a single \"/\", e.g.\n * resolveProductLink(p, 'sku', '/product/') → '/product/123' (sku 123)\n * resolveProductLink(p, 'slug', '/slug/p/') → '/slug/p/test' (slug \"test\")\n */\nexport const resolveProductLink = (\n product: unknown,\n linkWith: ProductLinkWith = 'sku',\n baseUrl = '/p/'\n): string => {\n const p = product as any;\n const slug = getLocalizedText(p?.slug);\n const sku = getProductSku(product);\n const id = (p?.id as string) ?? '';\n // Chosen identifier, falling back to the product id / the other identifier.\n const identifier = (linkWith === 'sku' ? sku : slug) || id || slug || sku;\n\n const base =\n '/' +\n String(baseUrl ?? '')\n .trim()\n .replace(/^\\/+|\\/+$/g, '')\n .replace(/\\/{2,}/g, '/');\n const cleanId = String(identifier ?? '')\n .trim()\n .replace(/^\\/+|\\/+$/g, '');\n\n return (cleanId ? `${base}/${cleanId}` : base).replace(/\\/{2,}/g, '/');\n};\n\n/** Props every product-linking component shares. */\nexport interface ProductLinkProps {\n linkWith: ProductLinkWith;\n baseUrl: string;\n}\n\n/** Default values for the shared link props — spread into a component's defaultProps. */\nexport const productLinkDefaults: ProductLinkProps = {\n linkWith: 'sku',\n baseUrl: '/p/',\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';\n\n/**\n * Page content-width scale. `X` is the base column unit; each step doubles up\n * to a wide layout, and `full` removes the constraint (edge-to-edge).\n */\nexport type ContentWidth = 'x' | '2x' | '3x' | '4x' | '5x' | '6x' | 'full';\n\nexport const CONTENT_WIDTHS: Record<ContentWidth, string> = {\n x: '256px',\n '2x': '512px',\n '3x': '768px',\n '4x': '1024px',\n '5x': '1280px',\n '6x': '1536px',\n full: '100%',\n};\n\nexport interface RootProps {\n title?: string;\n backgroundColor?: string;\n contentWidth?: ContentWidth;\n}\n\n/**\n * Root render — the page wrapper. Applies the background and centres the content\n * column at the configured width. Nimbus-free (plain elements + inline styles).\n */\nexport const renderRoot = ({\n children,\n backgroundColor,\n contentWidth,\n}: RootProps & { children?: React.ReactNode }): React.ReactElement => {\n const maxWidth = CONTENT_WIDTHS[contentWidth as ContentWidth] ?? '100%';\n const isConstrained = maxWidth !== '100%';\n return React.createElement(\n 'div',\n {\n style: {\n background: backgroundColor ?? '#ffffff',\n minHeight: '100vh',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n },\n },\n React.createElement(\n 'div',\n {\n style: {\n maxWidth,\n // Centre the content column and give it breathing room on the sides\n // when its width is constrained.\n margin: '0 auto',\n paddingLeft: isConstrained ? '24px' : undefined,\n paddingRight: isConstrained ? '24px' : undefined,\n boxSizing: 'border-box',\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 headingFontSize?: string;\n subheading?: string;\n subheadingFontSize?: string;\n backgroundImage?: string;\n ctaText?: string;\n ctaUrl?: string;\n layout?: 'centered' | 'left-aligned';\n minHeight?: string;\n}\n\nexport const renderHero: NonNullable<ComponentConfig<HeroProps>['render']> = ({\n heading,\n headingFontSize,\n subheading,\n subheadingFontSize,\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: headingFontSize || '2.5rem', fontWeight: 700 }}>\n {heading}\n </h1>\n {subheading && (\n <p style={{ margin: '0 0 24px', fontSize: subheadingFontSize || '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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { RichTextContent } from './RichTextContent';\n\nexport interface RichTextProps {\n content: string;\n align?: 'left' | 'center' | 'right';\n maxWidth?: string;\n padding?: string;\n}\n\nexport const renderRichText: NonNullable<ComponentConfig<RichTextProps>['render']> = ({\n content,\n align,\n maxWidth,\n padding,\n}) => (\n <RichTextContent\n html={content}\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 />\n);\n","import React from 'react';\nimport { DropZone, type ComponentConfig } from '@measured/puck';\n\nexport interface GridProps {\n columnCount?: 1 | 2 | 3 | 4 | 5 | 6;\n rowCount?: 1 | 2 | 3 | 4 | 5 | 6;\n gap?: string;\n padding?: string;\n}\n\nexport const renderGrid: NonNullable<ComponentConfig<GridProps>['render']> = ({\n columnCount = 2,\n rowCount = 1,\n gap = '16px',\n padding = '16px',\n}) => {\n const cols = Math.max(1, columnCount);\n const rows = Math.max(1, rowCount);\n const cells = Array.from({ length: cols * rows }, (_, i) => i);\n return (\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: `repeat(${cols}, 1fr)`,\n gridTemplateRows: `repeat(${rows}, minmax(40px, auto))`,\n gap,\n padding,\n boxSizing: 'border-box',\n }}\n >\n {cells.map((i) => (\n <div key={i}>\n {/* Cells are indexed row-major: cell-0 = row 0 col 0, etc. */}\n <DropZone zone={`cell-${i}`} />\n </div>\n ))}\n </div>\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 renderColumns: NonNullable<ComponentConfig<ColumnsProps>['render']> = ({\n columnCount = 2,\n gap = '16px',\n padding = '16px',\n}) => {\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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { FormattedMessage } from 'react-intl';\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 renderImage: NonNullable<ComponentConfig<ImageProps>['render']> = ({\n src,\n alt,\n caption,\n width,\n height,\n objectFit,\n borderRadius,\n align,\n}) => (\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 <FormattedMessage id=\"Editor.noImageSelected\" />\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","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 fontSize?: string;\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 renderButton: NonNullable<ComponentConfig<ButtonProps>['render']> = ({\n label,\n href,\n variant = 'primary',\n size = 'md',\n fontSize,\n align = 'left',\n openInNewTab,\n}) => (\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 ...(fontSize ? { fontSize } : {}),\n }}\n >\n {label}\n </a>\n </div>\n);\n","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { RichTextContent } from './RichTextContent';\n\nexport interface CardProps {\n title: string;\n titleFontSize?: string;\n body?: string;\n imageUrl?: string;\n ctaText?: string;\n ctaUrl?: string;\n shadow?: boolean;\n borderRadius?: string;\n}\n\nexport const renderCard: NonNullable<ComponentConfig<CardProps>['render']> = ({\n title,\n titleFontSize,\n body,\n imageUrl,\n ctaText,\n ctaUrl,\n shadow,\n borderRadius,\n}) => (\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: titleFontSize || '1.1rem' }}>{title}</h3>\n {body && (\n <RichTextContent\n html={body}\n style={{ margin: '0 0 16px', color: '#555', fontSize: '14px' }}\n />\n )}\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","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 renderSpacer: NonNullable<ComponentConfig<SpacerProps>['render']> = ({\n height = '48px',\n showLine = false,\n lineColor = '#e0e0e0',\n}) => (\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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { FormattedMessage } from 'react-intl';\nimport { useDatasource } from '@commercetools-demo/puck-api';\nimport { RichTextContent } from './RichTextContent';\nimport { resolveProductLink, type ProductLinkProps } from './cms/shared';\nimport type { DatasourceValue } from '../datasource.types';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ProductTeaserProps extends ProductLinkProps {\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\nexport const renderProductTeaser: NonNullable<\n ComponentConfig<ProductTeaserProps>['render']\n> = ({ datasource, richText, linkWith, baseUrl }) => {\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 const href = product ? resolveProductLink(product, linkWith, baseUrl) : undefined;\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 <FormattedMessage id=\"Editor.loading\" />\n </div>\n ) : imageUrl ? (\n <a href={href} style={{ display: 'block' }}>\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 </a>\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 ? (\n <FormattedMessage id=\"Editor.errorLoadingProduct\" />\n ) : (\n <FormattedMessage id=\"Editor.noProductSelected\" />\n )}\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 <RichTextContent html={richText} />\n ) : (\n <div style={{ color: '#9ca3af', fontSize: '13px' }}>\n <FormattedMessage id=\"Editor.noDescription\" />\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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\n\nexport interface HeroBannerProps {\n title: string;\n subtitle: string;\n image: string;\n}\n\nexport const renderHeroBanner: NonNullable<\n ComponentConfig<HeroBannerProps>['render']\n> = ({ 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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { RichTextContent } from '../RichTextContent';\n\nexport interface TextBlockProps {\n content: string;\n}\n\nexport const renderTextBlock: NonNullable<ComponentConfig<TextBlockProps>['render']> = ({ content }) => {\n if (!content) return <></>;\n return (\n <RichTextContent\n 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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { FormattedMessage } from 'react-intl';\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\nexport const renderCategoryGrid: NonNullable<ComponentConfig<CategoryGridProps>['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 <FormattedMessage id=\"Editor.noCategoriesConfigured\" />\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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\n\nexport interface CategoryHeroProps {\n title: string;\n subtitle: string;\n image: string;\n ctaText: string;\n ctaLink: string;\n}\n\nexport const renderCategoryHero: NonNullable<\n ComponentConfig<CategoryHeroProps>['render']\n> = ({ 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","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 renderCheckoutPromoBanner: NonNullable<\n ComponentConfig<CheckoutPromoBannerProps>['render']\n> = ({ 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","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\nexport const renderCountdownBanner: NonNullable<\n ComponentConfig<CountdownBannerProps>['render']\n> = ({ headline, subline, endDate, ctaText, ctaLink, background }) => {\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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { FormattedMessage } from 'react-intl';\nimport { useDatasource } from '@commercetools-demo/puck-api';\nimport {\n formatPrice,\n getFirstPrice,\n getLocalizedText,\n getProductImage,\n resolveProductLink,\n type ProductLinkProps,\n} from './shared';\nimport type { DatasourceValue } from '../../datasource.types';\n\nexport interface CrossSellBlockProps extends ProductLinkProps {\n title: string;\n products: DatasourceValue;\n ctaText: string;\n}\n\nexport const renderCrossSellBlock: NonNullable<\n ComponentConfig<CrossSellBlockProps>['render']\n> = ({ title, products, ctaText, linkWith, baseUrl }) => {\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 <></>;\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' }}><FormattedMessage id=\"Editor.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 return (\n <a\n key={(product as any)?.id ?? i}\n href={resolveProductLink(product, linkWith, baseUrl)}\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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\n\nexport interface DeliveryMessageProps {\n message: string;\n threshold: string;\n}\n\nexport const renderDeliveryMessage: NonNullable<\n ComponentConfig<DeliveryMessageProps>['render']\n> = ({ 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","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 renderDivider: NonNullable<ComponentConfig<DividerProps>['render']> = ({\n lineStyle,\n spacing,\n}) => {\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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\n\nexport interface EmptyStateProps {\n image: string;\n title: string;\n description: string;\n ctaText: string;\n ctaLink: string;\n}\n\nexport const renderEmptyState: NonNullable<ComponentConfig<EmptyStateProps>['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","import React, { useState } from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { FormattedMessage } from 'react-intl';\nimport { RichTextContent } from '../RichTextContent';\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\nexport const renderFAQAccordion: NonNullable<ComponentConfig<FAQAccordionProps>['render']> = (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' }}>\n <FormattedMessage id=\"Editor.noFaqItemsConfigured\" />\n </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 <RichTextContent\n 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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { RichTextContent } from '../RichTextContent';\n\nexport interface FooterBlockProps {\n column1: string;\n column2: string;\n column3: string;\n copyright: string;\n}\n\nexport const renderFooterBlock: NonNullable<ComponentConfig<FooterBlockProps>['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 <RichTextContent\n key={i}\n 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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { FormattedMessage } from 'react-intl';\n\nexport interface ImageBlockProps {\n image: string;\n caption: string;\n link: string;\n}\n\nexport const renderImageBlock: NonNullable<ComponentConfig<ImageBlockProps>['render']> = ({ image, caption, link }) => {\n if (!image) return (\n <div style={{ padding: '2rem', textAlign: 'center', color: '#999', background: '#f5f5f5', borderRadius: '4px' }}>\n <FormattedMessage id=\"Editor.noImageSelected\" />\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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { useIntl } from 'react-intl';\n\nexport interface NewsletterSignupProps {\n title: string;\n subtitle: string;\n ctaText: string;\n placeholder: string;\n}\n\nexport const renderNewsletterSignup: NonNullable<\n ComponentConfig<NewsletterSignupProps>['render']\n> = ({ title, subtitle, ctaText, placeholder }) => {\n const intl = useIntl();\n return (\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={intl.formatMessage({ id: 'Editor.newsletterEmailAria' })}\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 { FormattedMessage } from 'react-intl';\nimport { useDatasource } from '@commercetools-demo/puck-api';\nimport { RichTextContent } from '../RichTextContent';\nimport {\n formatPrice,\n getFirstPrice,\n getLocalizedText,\n resolveProductLink,\n type ProductLinkProps,\n} from './shared';\nimport type { DatasourceValue } from '../../datasource.types';\n\nexport interface ProductBannerProps extends ProductLinkProps {\n title: string;\n description: string;\n ctaText: string;\n ctaLink: string;\n product: DatasourceValue;\n productOnLeft: boolean;\n background: string;\n}\n\nexport const renderProductBanner: NonNullable<\n ComponentConfig<ProductBannerProps>['render']\n> = ({\n title, description, ctaText, ctaLink, product, productOnLeft, background, linkWith, baseUrl,\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 const productHref = p ? resolveProductLink(p, linkWith, baseUrl) : undefined;\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 <RichTextContent\n 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' }}><FormattedMessage id=\"Editor.loadingProduct\" /></div>}\n {name && (\n <a href={productHref} style={{ textDecoration: 'none', color: 'inherit' }}>\n <h3 style={{ fontSize: '1.5rem', fontWeight: 600, marginBottom: '0.5rem', textAlign: 'center' }}>{name}</h3>\n </a>\n )}\n {description2 && <p style={{ fontSize: '0.9rem', color: '#666', textAlign: 'center', marginBottom: '1rem', fontStyle: 'italic' }}>{description2}</p>}\n {imageUrl && (\n <a href={productHref} style={{ display: 'block', marginBottom: '1rem' }}>\n <img\n src={imageUrl}\n alt={name || 'Product'}\n style={{ maxWidth: '100%', maxHeight: '300px', objectFit: 'cover', borderRadius: '2px', boxShadow: '0 4px 12px rgba(0,0,0,0.1)', display: 'block' }}\n />\n </a>\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 <FormattedMessage id=\"Editor.skuLabel\" values={{ sku }} />\n </span>\n )}\n {!loading && !p && (\n <div style={{ color: '#999', fontSize: '13px', padding: '2rem', textAlign: 'center' }}>\n <FormattedMessage id=\"Editor.noProductSelected\" />\n </div>\n )}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { RichTextContent } from '../RichTextContent';\n\nexport interface ProductGridHeaderProps {\n title: string;\n description: string;\n}\n\nexport const renderProductGridHeader: NonNullable<ComponentConfig<ProductGridHeaderProps>['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 <RichTextContent\n html={description}\n style={{ fontSize: '1rem', color: '#666', lineHeight: 1.5, maxWidth: '720px' }}\n />\n )}\n </div>\n);\n","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { FormattedMessage } from 'react-intl';\nimport { useDatasource } from '@commercetools-demo/puck-api';\nimport {\n formatPrice,\n getFirstPrice,\n getLocalizedText,\n getProductImage,\n resolveProductLink,\n type ProductLinkProps,\n} from './shared';\nimport type { DatasourceValue } from '../../datasource.types';\n\nexport interface ProductSliderProps extends ProductLinkProps {\n title: string;\n subtitle: string;\n products: DatasourceValue;\n}\n\nexport const renderProductSlider: NonNullable<\n ComponentConfig<ProductSliderProps>['render']\n> = ({ title, subtitle, products, linkWith, baseUrl }) => {\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' }}><FormattedMessage id=\"Editor.loadingProducts\" /></div>}\n {!loading && items.length === 0 && (\n <div style={{ textAlign: 'center', color: '#999', padding: '2rem', fontSize: '13px' }}><FormattedMessage id=\"Editor.noProductsConfigured\" /></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 return (\n <a\n key={(product as any)?.id ?? i}\n href={resolveProductLink(product, linkWith, baseUrl)}\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' }}><FormattedMessage id=\"Editor.noImage\" /></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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\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 renderPromotionalBanner: NonNullable<\n ComponentConfig<PromotionalBannerProps>['render']\n> = ({ 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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { FormattedMessage } from 'react-intl';\nimport { useDatasource } from '@commercetools-demo/puck-api';\nimport {\n formatPrice,\n getFirstPrice,\n getLocalizedText,\n getProductImage,\n resolveProductLink,\n type ProductLinkProps,\n} from './shared';\nimport type { DatasourceValue } from '../../datasource.types';\n\nexport interface RelatedProductsSliderProps extends ProductLinkProps {\n title: string;\n subtitle: string;\n products: DatasourceValue;\n}\n\nexport const renderRelatedProductsSlider: NonNullable<\n ComponentConfig<RelatedProductsSliderProps>['render']\n> = ({ title, subtitle, products, linkWith, baseUrl }) => {\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 <></>;\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' }}><FormattedMessage id=\"Editor.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 return (\n <a\n key={(product as any)?.id ?? i}\n href={resolveProductLink(product, linkWith, baseUrl)}\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' }}><FormattedMessage id=\"Editor.noImage\" /></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","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 renderSocialLinks: NonNullable<ComponentConfig<SocialLinksProps>['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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { RichTextContent } from '../RichTextContent';\n\nexport interface TabContentProps {\n tabLabel: string;\n content: string;\n}\n\nexport const renderTabContent: NonNullable<\n ComponentConfig<TabContentProps>['render']\n> = ({ 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 <RichTextContent html={content} />\n </div>\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 renderTestimonialsSlider: NonNullable<\n ComponentConfig<TestimonialsSliderProps>['render']\n> = (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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { RichTextContent } from '../RichTextContent';\n\nexport interface ThankYouContentProps {\n headline: string;\n message: string;\n ctaText: string;\n ctaLink: string;\n}\n\nexport const renderThankYouContent: NonNullable<\n ComponentConfig<ThankYouContentProps>['render']\n> = ({ 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 <RichTextContent\n 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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\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\nexport const renderTrustBadges: NonNullable<ComponentConfig<TrustBadgesProps>['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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { FormattedMessage } from 'react-intl';\n\nexport interface VideoBlockProps {\n videoUrl: string;\n posterImage: string;\n title: string;\n caption: string;\n}\n\nexport const renderVideoBlock: NonNullable<ComponentConfig<VideoBlockProps>['render']> = ({ videoUrl, posterImage, title, caption }) => {\n if (!videoUrl) return (\n <div style={{ padding: '2rem', textAlign: 'center', color: '#999', background: '#f5f5f5', borderRadius: '8px' }}>\n <FormattedMessage id=\"Editor.noVideoUrlConfigured\" />\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","import React from 'react';\nimport type { ComponentConfig } from '@measured/puck';\nimport { useIntl } from 'react-intl';\n\nexport interface WebsiteLogoProps {\n logo: string;\n maxWidth: string;\n maxHeight: string;\n}\n\nexport const renderWebsiteLogo: NonNullable<\n ComponentConfig<WebsiteLogoProps>['render']\n> = ({ logo, maxWidth, maxHeight }) => {\n const intl = useIntl();\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={intl.formatMessage({ id: 'Editor.websiteLogoAlt' })}\n style={{ width: '100%', height: '100%', objectFit: 'contain' }}\n />\n </div>\n );\n};\n","import type { Config, ComponentConfig } from '@measured/puck';\nimport * as C from './components';\n\n/**\n * Render-only Puck config: each component's `render` function, keyed by the same\n * component names the editor's `createDefaultPuckConfig` uses. No `fields` (those\n * are editor-only), so this graph never touches @commercetools/nimbus.\n */\nconst components: Record<string, ComponentConfig> = {\n Hero: { render: C.renderHero },\n RichText: { render: C.renderRichText },\n Grid: { render: C.renderGrid },\n Columns: { render: C.renderColumns },\n Image: { render: C.renderImage },\n Button: { render: C.renderButton },\n Card: { render: C.renderCard },\n Spacer: { render: C.renderSpacer },\n ProductTeaser: { render: C.renderProductTeaser },\n HeroBanner: { render: C.renderHeroBanner },\n TextBlock: { render: C.renderTextBlock },\n CategoryGrid: { render: C.renderCategoryGrid },\n CategoryHero: { render: C.renderCategoryHero },\n CheckoutPromoBanner: { render: C.renderCheckoutPromoBanner },\n CountdownBanner: { render: C.renderCountdownBanner },\n CrossSellBlock: { render: C.renderCrossSellBlock },\n DeliveryMessage: { render: C.renderDeliveryMessage },\n Divider: { render: C.renderDivider },\n EmptyState: { render: C.renderEmptyState },\n FAQAccordion: { render: C.renderFAQAccordion },\n FooterBlock: { render: C.renderFooterBlock },\n ImageBlock: { render: C.renderImageBlock },\n NewsletterSignup: { render: C.renderNewsletterSignup },\n ProductBanner: { render: C.renderProductBanner },\n ProductGridHeader: { render: C.renderProductGridHeader },\n ProductSlider: { render: C.renderProductSlider },\n PromotionalBanner: { render: C.renderPromotionalBanner },\n RelatedProductsSlider: { render: C.renderRelatedProductsSlider },\n SocialLinks: { render: C.renderSocialLinks },\n TabContent: { render: C.renderTabContent },\n TestimonialsSlider: { render: C.renderTestimonialsSlider },\n ThankYouContent: { render: C.renderThankYouContent },\n TrustBadges: { render: C.renderTrustBadges },\n VideoBlock: { render: C.renderVideoBlock },\n WebsiteLogo: { render: C.renderWebsiteLogo },\n} as unknown as Record<string, ComponentConfig>;\n\nexport function createRenderConfig(): Config {\n return {\n components,\n root: { render: C.renderRoot },\n } as unknown as Config;\n}\n\nexport const defaultRenderConfig: Config = createRenderConfig();\n"],"mappings":"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","names":["DOMPurify","React","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_puck","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react_intl","import_jsx_runtime","formatPrice","import_jsx_runtime","import_jsx_runtime","import_react_intl","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react_intl","import_puck_api","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_react_intl","import_jsx_runtime","import_jsx_runtime","import_react_intl","import_jsx_runtime","import_react_intl","import_jsx_runtime","import_react_intl","import_puck_api","import_jsx_runtime","import_jsx_runtime","import_react_intl","import_puck_api","import_jsx_runtime","import_jsx_runtime","import_react_intl","import_puck_api","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react_intl","import_jsx_runtime","import_react_intl","import_jsx_runtime"]}