@frontlit/page-builder 0.1.0-alpha.2 → 0.1.0-alpha.4

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.
Files changed (98) hide show
  1. package/README.md +32 -0
  2. package/dist/blocks/index.d.ts +33 -21
  3. package/dist/blocks/index.js +3 -3
  4. package/dist/builder/index.d.ts +7 -8
  5. package/dist/builder/index.js +6 -5
  6. package/dist/{button-Bzt1GDO-.d.ts → button-OLKN3wPf.d.ts} +2 -2
  7. package/dist/{chunk-H4P5MFJI.js → chunk-36QHCIPM.js} +205 -251
  8. package/dist/chunk-36QHCIPM.js.map +1 -0
  9. package/dist/chunk-BBI7UHOA.js +56 -0
  10. package/dist/chunk-BBI7UHOA.js.map +1 -0
  11. package/dist/{chunk-KQKSLI3L.js → chunk-GIKTOAQS.js} +335 -122
  12. package/dist/chunk-GIKTOAQS.js.map +1 -0
  13. package/dist/chunk-HWOVSHIW.js +4 -0
  14. package/dist/{chunk-RUYOL7JZ.js.map → chunk-HWOVSHIW.js.map} +1 -1
  15. package/dist/{chunk-HDINUNI2.js → chunk-IU4KATI2.js} +69 -96
  16. package/dist/chunk-IU4KATI2.js.map +1 -0
  17. package/dist/{chunk-SGNRWWG3.js → chunk-J7Z4UW45.js} +530 -135
  18. package/dist/chunk-J7Z4UW45.js.map +1 -0
  19. package/dist/{chunk-UO7XGBGM.js → chunk-K4WCLHMS.js} +1182 -1033
  20. package/dist/chunk-K4WCLHMS.js.map +1 -0
  21. package/dist/components/index.d.ts +33 -8
  22. package/dist/components/index.js +42 -2
  23. package/dist/components/index.js.map +1 -1
  24. package/dist/data-slots.d.ts +3 -3
  25. package/dist/fonts/archivo/archivo-latin-variable.woff2 +0 -0
  26. package/dist/fonts/hanken-grotesk/hanken-grotesk-latin-variable.woff2 +0 -0
  27. package/dist/fonts/jetbrains-mono/jetbrains-mono-latin-variable.woff2 +0 -0
  28. package/dist/fonts/spline-sans-mono/spline-sans-mono-latin-variable.woff2 +0 -0
  29. package/dist/heading-DQCxQt38.d.ts +20 -0
  30. package/dist/image-Bk8kPXwP.d.ts +52 -0
  31. package/dist/index.d.ts +17 -10
  32. package/dist/index.js +7 -6
  33. package/dist/models/index.d.ts +5 -5
  34. package/dist/models/index.js +1 -1
  35. package/dist/{page-W3hQga4w.d.ts → page-B5Gmm-Ys.d.ts} +1 -1
  36. package/dist/primitives/index.d.ts +44 -9
  37. package/dist/primitives/index.js +1 -1
  38. package/dist/renderer/index.d.ts +12 -8
  39. package/dist/renderer/index.js +5 -4
  40. package/dist/{section-background-MsdE40Rk.d.ts → section-background-6V_LCi5e.d.ts} +1 -1
  41. package/dist/server/index.d.ts +103 -0
  42. package/dist/server/index.js +2649 -0
  43. package/dist/server/index.js.map +1 -0
  44. package/dist/server/islands/code-snippet.d.ts +17 -0
  45. package/dist/server/islands/code-snippet.js +72 -0
  46. package/dist/server/islands/code-snippet.js.map +1 -0
  47. package/dist/server/islands/email-form.d.ts +50 -0
  48. package/dist/server/islands/email-form.js +406 -0
  49. package/dist/server/islands/email-form.js.map +1 -0
  50. package/dist/server/islands/header-mobile-menu.d.ts +22 -0
  51. package/dist/server/islands/header-mobile-menu.js +422 -0
  52. package/dist/server/islands/header-mobile-menu.js.map +1 -0
  53. package/dist/server/islands/inline-embed.d.ts +28 -0
  54. package/dist/server/islands/inline-embed.js +84 -0
  55. package/dist/server/islands/inline-embed.js.map +1 -0
  56. package/dist/server/islands/marquee-track.d.ts +18 -0
  57. package/dist/server/islands/marquee-track.js +67 -0
  58. package/dist/server/islands/marquee-track.js.map +1 -0
  59. package/dist/server/islands/nav-link.d.ts +37 -0
  60. package/dist/server/islands/nav-link.js +67 -0
  61. package/dist/server/islands/nav-link.js.map +1 -0
  62. package/dist/server/islands/support-form.d.ts +17 -0
  63. package/dist/server/islands/support-form.js +469 -0
  64. package/dist/server/islands/support-form.js.map +1 -0
  65. package/dist/server/islands/theme-mode-switcher.d.ts +38 -0
  66. package/dist/server/islands/theme-mode-switcher.js +169 -0
  67. package/dist/server/islands/theme-mode-switcher.js.map +1 -0
  68. package/dist/server/islands/video-with-preview.d.ts +13 -0
  69. package/dist/server/islands/video-with-preview.js +269 -0
  70. package/dist/server/islands/video-with-preview.js.map +1 -0
  71. package/dist/server/primitives.d.ts +200 -0
  72. package/dist/server/primitives.js +888 -0
  73. package/dist/server/primitives.js.map +1 -0
  74. package/dist/server/schema.d.ts +11308 -0
  75. package/dist/server/schema.js +6179 -0
  76. package/dist/server/schema.js.map +1 -0
  77. package/dist/server/theme-CF3fIKvw.d.ts +9 -0
  78. package/dist/server/theme-style-5_AGy-4V.d.ts +183 -0
  79. package/dist/server/theme-style-BPaMwk88.d.ts +183 -0
  80. package/dist/server/theme.d.ts +28 -0
  81. package/dist/server/theme.js +1671 -0
  82. package/dist/server/theme.js.map +1 -0
  83. package/dist/server/widget-YH9BrOwY.d.ts +77 -0
  84. package/dist/styles.css +121 -15
  85. package/dist/{theme-style-Cbl7NM-T.d.ts → theme-style-BVd5tOsc.d.ts} +20 -0
  86. package/dist/theme.css +12 -0
  87. package/dist/{widget-B_RoG6se.d.ts → widget-CpE2HdgU.d.ts} +17 -14
  88. package/package.json +60 -12
  89. package/schema/page.v1.json +3855 -0
  90. package/schema/site.v1.json +3811 -0
  91. package/dist/alignment-dZDzN96G.d.ts +0 -5
  92. package/dist/chunk-H4P5MFJI.js.map +0 -1
  93. package/dist/chunk-HDINUNI2.js.map +0 -1
  94. package/dist/chunk-KQKSLI3L.js.map +0 -1
  95. package/dist/chunk-RUYOL7JZ.js +0 -4
  96. package/dist/chunk-SGNRWWG3.js.map +0 -1
  97. package/dist/chunk-UO7XGBGM.js.map +0 -1
  98. package/dist/image-DAWVx1zQ.d.ts +0 -31
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/blocks/header/metadata.ts","../src/utils/is-video.ts","../src/utils/generate-unique-id.ts","../src/blocks/header/widget.tsx","../src/blocks/_shared/fields.tsx","../src/blocks/header/editor.tsx","../src/blocks/header/defaults.ts","../src/blocks/header/index.ts","../src/blocks/hero/metadata.ts","../src/blocks/hero/widget.tsx","../src/blocks/hero/editor.tsx","../src/blocks/hero/defaults.ts","../src/blocks/hero/index.ts","../src/blocks/content/metadata.ts","../src/blocks/content/widget.tsx","../src/blocks/content/editor.tsx","../src/blocks/content/defaults.ts","../src/blocks/content/index.ts","../src/blocks/featured/metadata.ts","../src/blocks/featured/widget.tsx","../src/blocks/featured/editor.tsx","../src/blocks/featured/defaults.ts","../src/blocks/featured/index.ts","../src/blocks/faq/metadata.ts","../src/blocks/faq/widget.tsx","../src/blocks/faq/editor.tsx","../src/blocks/faq/defaults.ts","../src/blocks/faq/index.ts","../src/blocks/pricing/metadata.ts","../src/blocks/pricing/widget.tsx","../src/blocks/pricing/editor.tsx","../src/blocks/pricing/defaults.ts","../src/blocks/pricing/index.ts","../src/blocks/banner/metadata.ts","../src/blocks/banner/widget.tsx","../src/blocks/banner/editor.tsx","../src/blocks/banner/defaults.ts","../src/blocks/banner/index.ts","../src/blocks/email-form/metadata.ts","../src/blocks/email-form/widget.tsx","../src/blocks/email-form/editor.tsx","../src/blocks/email-form/defaults.ts","../src/blocks/email-form/index.ts","../src/blocks/support-form/metadata.ts","../src/blocks/support-form/widget.tsx","../src/blocks/support-form/editor.tsx","../src/blocks/support-form/defaults.ts","../src/blocks/support-form/index.ts","../src/blocks/footer/metadata.ts","../src/blocks/footer/widget.tsx","../src/blocks/footer/editor.tsx","../src/blocks/footer/defaults.ts","../src/blocks/footer/index.ts","../src/blocks/rich-text/metadata.ts","../src/blocks/rich-text/widget.tsx","../src/blocks/rich-text/editor.tsx","../src/blocks/rich-text/defaults.ts","../src/blocks/rich-text/index.ts","../src/blocks/grid/metadata.ts","../src/blocks/grid/widget.tsx","../src/blocks/grid/editor.tsx","../src/blocks/grid/defaults.ts","../src/blocks/grid/index.ts","../src/blocks/media/metadata.ts","../src/blocks/media/widget.tsx","../src/blocks/media/editor.tsx","../src/blocks/media/defaults.ts","../src/blocks/media/index.ts","../src/blocks/marquee/metadata.ts","../src/blocks/marquee/marquee-track.tsx","../src/blocks/marquee/widget.tsx","../src/blocks/marquee/editor.tsx","../src/blocks/marquee/defaults.ts","../src/blocks/marquee/index.ts","../src/blocks/embed/metadata.ts","../src/blocks/embed/widget.tsx","../src/blocks/embed/editor.tsx","../src/blocks/embed/defaults.ts","../src/blocks/embed/index.ts","../src/blocks/data-slot/metadata.ts","../src/blocks/data-slot/widget.tsx","../src/blocks/data-slot/index.ts"],"names":["Button","clsx","jsxs","jsx","createItem","roundedMap","Editor","emptyDoc","Fragment","useState","resolveIcon","Icons","useRef","useId","useEffect","React"],"mappings":"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","file":"chunk-UO7XGBGM.js","sourcesContent":["import type { WidgetMetadata } from \"../../models\";\n\nexport const headerMetadata: WidgetMetadata = {\n name: \"header\",\n displayName: \"Header\",\n description: \"The site navigation bar, pinned to the top of every page.\",\n compatibleWith: [\"site\", \"landing\", \"blog\", \"post\", \"custom\"],\n};\n","import type { Media } from \"../models\";\n\nexport function isVideo(youtubeLink?: string, media?: Partial<Media>) {\n return Boolean(\n youtubeLink || (media && RegExp(\"video/\").test(media?.mimeType || \"\")),\n );\n}\n","export function generateUniqueId(): string {\n return Math.random().toString(36).slice(2) + Date.now().toString(36);\n}\n","import React, { useState } from \"react\";\nimport clsx from \"clsx\";\nimport { MenuIcon } from \"lucide-react\";\nimport type { WidgetProps, ThemeStyle } from \"../../models\";\nimport type { HeaderNavLink, HeaderSettings } from \"./settings\";\nimport { Image, NavLink, ThemeModeSwitcher } from \"../../components\";\nimport {\n Button,\n Drawer,\n Header4,\n Link as PrimitiveLink,\n Section,\n} from \"../../primitives\";\n\nfunction HeaderLink({\n link,\n theme,\n onClick,\n}: {\n link: HeaderNavLink;\n theme?: ThemeStyle;\n onClick?: () => void;\n}) {\n if (link.isButton) {\n return (\n <NavLink href={link.href} onClick={onClick}>\n <Button size=\"sm\" theme={theme}>\n {link.label}\n </Button>\n </NavLink>\n );\n }\n\n return (\n <NavLink href={link.href} onClick={onClick} className=\"no-underline\">\n <PrimitiveLink theme={theme} className=\"no-underline\">\n {link.label}\n </PrimitiveLink>\n </NavLink>\n );\n}\n\nexport function HeaderWidget({\n settings: {\n logoText,\n logoImage,\n logoCorners,\n logoRadius,\n links = [],\n ctaLabel,\n ctaHref,\n linkAlignment = \"left\",\n layout = \"fixed\",\n backdropBlur = false,\n showThemeSwitcher = true,\n cssId,\n maxWidth,\n verticalPadding,\n background,\n },\n state: { theme },\n pageData,\n nextTheme,\n toggleTheme,\n}: WidgetProps<HeaderSettings>) {\n const overriddenTheme: ThemeStyle = JSON.parse(JSON.stringify(theme.theme));\n overriddenTheme.structure.page.width = maxWidth || theme.theme.structure.page.width;\n overriddenTheme.structure.section.padding.y =\n verticalPadding || theme.theme.structure.section.padding.y;\n\n const [mobileNavOpen, setMobileNavOpen] = useState(false);\n const isFloating = layout === \"floating\";\n const isCentered = layout === \"centered\";\n const isFixed = !isFloating;\n const primaryLinks = links.filter((link) => !link.isButton);\n const buttonLinks = links.filter((link) => link.isButton);\n // On a published tenant site, branding is owned by the site settings,\n // not the header instance. Retain the block-local image for standalone\n // renderer and builder previews where no tenant logo is supplied.\n const resolvedLogoImage = pageData.siteLogoUrl || logoImage;\n const resolvedLogoAlt = pageData.siteLogoAlt || logoText || \"\";\n const effectiveLogoCorners = logoCorners ?? logoRadius ?? 2;\n\n const logo = (\n <NavLink href=\"/\" className=\"no-underline\">\n <div className=\"flex items-center gap-2\">\n {resolvedLogoImage && (\n <Image\n src={resolvedLogoImage}\n alt={resolvedLogoAlt}\n width=\"w-8\"\n height=\"h-8\"\n className=\"aspect-square shrink-0\"\n borderRadius={effectiveLogoCorners}\n />\n )}\n {logoText && <Header4 theme={overriddenTheme}>{logoText}</Header4>}\n </div>\n </NavLink>\n );\n\n const colorModeControl =\n showThemeSwitcher && toggleTheme ? (\n <ThemeModeSwitcher\n resolved={nextTheme ?? \"light\"}\n onToggle={toggleTheme}\n theme={overriddenTheme}\n size=\"sm\"\n variant=\"outline\"\n />\n ) : null;\n\n const ctaAndMenu = (\n <div className=\"flex items-center gap-3\">\n {colorModeControl}\n {buttonLinks.map((link) => (\n <div className=\"hidden lg:!block\" key={link.id}>\n <HeaderLink link={link} theme={overriddenTheme} />\n </div>\n ))}\n {ctaLabel && ctaHref && (\n <div className=\"hidden lg:!block\">\n <NavLink href={ctaHref}>\n <Button theme={overriddenTheme} size=\"sm\">\n {ctaLabel}\n </Button>\n </NavLink>\n </div>\n )}\n <div className=\"lg:hidden\">\n <Drawer\n open={mobileNavOpen}\n setOpen={setMobileNavOpen}\n side=\"right\"\n theme={overriddenTheme}\n trigger={\n <Button variant=\"outline\" size=\"sm\" theme={overriddenTheme}>\n <MenuIcon className=\"h-4 w-4\" />\n <span className=\"sr-only\">Toggle menu</span>\n </Button>\n }\n >\n <div className=\"mt-6 flex flex-col gap-4\">\n {links.map((link) => (\n <HeaderLink\n key={link.id}\n link={link}\n theme={overriddenTheme}\n onClick={() => setMobileNavOpen(false)}\n />\n ))}\n {ctaLabel && ctaHref && (\n <NavLink href={ctaHref} onClick={() => setMobileNavOpen(false)}>\n <Button theme={overriddenTheme} className=\"w-full\">\n {ctaLabel}\n </Button>\n </NavLink>\n )}\n </div>\n </Drawer>\n </div>\n </div>\n );\n\n let mainContent: React.ReactNode;\n if (isCentered) {\n // Logo centered, nav links split evenly left and right of it — the\n // symmetric header pattern seen on many modern SaaS marketing sites.\n const half = Math.ceil(primaryLinks.length / 2);\n const leftLinks = primaryLinks.slice(0, half);\n const rightLinks = primaryLinks.slice(half);\n mainContent = (\n <div className=\"grid w-full grid-cols-[1fr_auto_1fr] items-center gap-4\">\n <div className=\"hidden items-center justify-end gap-6 lg:!flex\">\n {leftLinks.map((link) => (\n <HeaderLink key={link.id} link={link} theme={overriddenTheme} />\n ))}\n </div>\n <div className=\"flex justify-center\">{logo}</div>\n <div className=\"flex items-center justify-end gap-3\">\n <div className=\"hidden items-center gap-6 lg:!flex\">\n {rightLinks.map((link) => (\n <HeaderLink key={link.id} link={link} theme={overriddenTheme} />\n ))}\n </div>\n {ctaAndMenu}\n </div>\n </div>\n );\n } else {\n mainContent = (\n <div className=\"flex w-full items-center justify-between gap-4\">\n {logo}\n <div\n className={clsx(\n \"hidden items-center gap-6 lg:!flex lg:!grow\",\n linkAlignment === \"right\"\n ? \"justify-end\"\n : linkAlignment === \"center\"\n ? \"justify-center\"\n : \"justify-start\",\n )}\n >\n {primaryLinks.map((link) => (\n <HeaderLink key={link.id} link={link} theme={overriddenTheme} />\n ))}\n </div>\n {ctaAndMenu}\n </div>\n );\n }\n\n return (\n <Section\n theme={overriddenTheme}\n component=\"header\"\n id={cssId}\n background={background}\n nextTheme={nextTheme}\n className={clsx(\n \"sticky top-0 z-20\",\n isFixed && \"border-b\",\n isFixed && backdropBlur && \"bg-transparent backdrop-blur-2xl\",\n isFixed && !backdropBlur && \"bg-background\",\n !isFixed && \"bg-transparent\",\n )}\n >\n {isFloating ? (\n <div\n className={clsx(\n \"p-2\",\n overriddenTheme.interactives?.card?.border?.width ?? \"border\",\n overriddenTheme.interactives?.card?.border?.radius ?? \"rounded-xl\",\n overriddenTheme.interactives?.card?.border?.style,\n overriddenTheme.interactives?.card?.shadow ?? \"shadow-md\",\n backdropBlur\n ? \"bg-transparent backdrop-blur-2xl\"\n : \"bg-card text-card-foreground\",\n )}\n >\n {mainContent}\n </div>\n ) : (\n mainContent\n )}\n </Section>\n );\n}\n","\"use client\";\n\nimport React, { useId } from \"react\";\nimport { ImageIcon, Plus } from \"lucide-react\";\nimport { ImageUploadDialog } from \"@frontlit/media-uploader\";\nimport { getMediaUrl, type Media } from \"../../models/media\";\nimport { cn } from \"../../primitives/lib/utils\";\n\n/**\n * Lightweight, dependency-free form field primitives shared by every block's\n * settings editor. These intentionally stay simple (no media library, no\n * rich color pickers) so the page-builder package works without a backend.\n */\n\nexport function FieldGroup({\n title,\n children,\n}: {\n title?: string;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"mb-6 flex min-w-0 max-w-full flex-col gap-4 border-b border-border/80 pb-6 last:mb-0 last:border-0 last:pb-0\">\n {title && (\n <div className=\"flex items-center gap-2\">\n <span className=\"h-1.5 w-1.5 rounded-full bg-primary\" />\n <p className=\"text-[10px] font-bold uppercase tracking-[0.16em] text-muted-foreground\">\n {title}\n </p>\n </div>\n )}\n {children}\n </div>\n );\n}\n\nexport function TextField({\n label,\n value,\n onChange,\n placeholder,\n multiline,\n}: {\n label: string;\n value?: string;\n onChange: (value: string) => void;\n placeholder?: string;\n multiline?: boolean;\n}) {\n const generatedId = useId();\n const inputId = `field-${generatedId.replace(/:/g, \"\")}`;\n\n return (\n <label htmlFor={inputId} className=\"flex flex-col gap-1.5 text-sm\">\n <span className=\"text-xs font-semibold text-foreground\">{label}</span>\n {multiline ? (\n <textarea\n id={inputId}\n className=\"min-h-24 resize-y rounded-lg border border-input bg-muted/20 px-3 py-2.5 text-sm text-foreground outline-none transition-colors placeholder:text-muted-foreground/70 focus:border-ring focus:bg-background focus:ring-2 focus:ring-ring/20\"\n value={value ?? \"\"}\n placeholder={placeholder}\n onChange={(e) => onChange(e.target.value)}\n />\n ) : (\n <input\n id={inputId}\n className=\"h-9 rounded-lg border border-input bg-muted/20 px-3 py-2 text-sm text-foreground outline-none transition-colors placeholder:text-muted-foreground/70 focus:border-ring focus:bg-background focus:ring-2 focus:ring-ring/20\"\n value={value ?? \"\"}\n placeholder={placeholder}\n onChange={(e) => onChange(e.target.value)}\n />\n )}\n </label>\n );\n}\n\nexport function NumberField({\n label,\n value,\n onChange,\n min,\n max,\n}: {\n label: string;\n value?: number;\n onChange: (value: number) => void;\n min?: number;\n max?: number;\n}) {\n const generatedId = useId();\n const inputId = `field-${generatedId.replace(/:/g, \"\")}`;\n\n return (\n <label htmlFor={inputId} className=\"flex flex-col gap-1.5 text-sm\">\n <span className=\"text-xs font-semibold text-foreground\">{label}</span>\n <input\n id={inputId}\n type=\"number\"\n className=\"h-9 rounded-lg border border-input bg-muted/20 px-3 py-2 text-sm text-foreground outline-none transition-colors focus:border-ring focus:bg-background focus:ring-2 focus:ring-ring/20\"\n value={value ?? \"\"}\n min={min}\n max={max}\n onChange={(e) => onChange(Number(e.target.value))}\n />\n </label>\n );\n}\n\nexport function SliderField({\n label,\n value = 0,\n onChange,\n min = 0,\n max = 8,\n step = 1,\n unit = \"\",\n displayValue,\n minLabel,\n maxLabel,\n}: {\n label: string;\n value?: number;\n onChange: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n unit?: string;\n displayValue?: string;\n minLabel?: string;\n maxLabel?: string;\n}) {\n const generatedId = useId();\n const inputId = `field-${generatedId.replace(/:/g, \"\")}`;\n const numValue = Number.isFinite(value) ? (value as number) : min;\n\n return (\n <div className=\"flex flex-col gap-2 text-sm\">\n <div className=\"flex items-center justify-between gap-3\">\n <label htmlFor={inputId} className=\"text-xs font-semibold text-foreground\">\n {label}\n </label>\n <div className=\"flex items-center gap-1.5\">\n {displayValue && (\n <span className=\"text-[11px] font-medium text-muted-foreground\">\n {displayValue}\n </span>\n )}\n <input\n id={inputId}\n type=\"number\"\n inputMode=\"numeric\"\n min={min}\n max={max}\n step={step}\n value={numValue}\n onChange={(e) => {\n const parsed = Number(e.currentTarget.value);\n if (Number.isNaN(parsed)) return;\n onChange(Math.min(Math.max(parsed, min), max));\n }}\n className=\"h-7 w-12 rounded-md border border-input bg-muted/20 px-1.5 py-1 text-center text-xs font-semibold text-foreground outline-none transition-colors focus:border-ring focus:bg-background focus:ring-2 focus:ring-ring/20\"\n />\n {unit && (\n <span className=\"text-[10px] font-medium text-muted-foreground\">\n {unit}\n </span>\n )}\n </div>\n </div>\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={numValue}\n onChange={(e) => onChange(Number(e.currentTarget.value))}\n aria-label={label}\n className=\"h-1.5 w-full cursor-pointer accent-primary\"\n />\n {(minLabel || maxLabel) && (\n <div className=\"flex items-center justify-between text-[10px] font-medium text-muted-foreground\">\n <span>{minLabel}</span>\n <span>{maxLabel}</span>\n </div>\n )}\n </div>\n );\n}\n\nexport function SelectField<T extends string>({\n label,\n value,\n onChange,\n options,\n}: {\n label: string;\n value?: T;\n onChange: (value: T) => void;\n options: { label: string; value: T }[];\n}) {\n const generatedId = useId();\n const inputId = `field-${generatedId.replace(/:/g, \"\")}`;\n\n return (\n <label htmlFor={inputId} className=\"flex flex-col gap-1.5 text-sm\">\n <span className=\"text-xs font-semibold text-foreground\">{label}</span>\n <select\n id={inputId}\n className=\"h-9 w-full rounded-lg border border-input bg-muted/20 px-3 py-2 text-sm text-foreground outline-none transition-colors focus:border-ring focus:bg-background focus:ring-2 focus:ring-ring/20\"\n value={value ?? \"\"}\n onChange={(e) => onChange(e.target.value as T)}\n >\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </label>\n );\n}\n\nexport function ToggleField({\n label,\n value,\n onChange,\n}: {\n label: string;\n value?: boolean;\n onChange: (value: boolean) => void;\n}) {\n return (\n <label className=\"flex cursor-pointer items-center justify-between gap-3 rounded-lg border border-border/80 bg-muted/20 px-3 py-2.5 text-sm transition-colors hover:bg-muted/50\">\n <span className=\"text-xs font-semibold text-foreground\">{label}</span>\n <input\n type=\"checkbox\"\n className=\"peer sr-only\"\n checked={Boolean(value)}\n onChange={(e) => onChange(e.target.checked)}\n />\n <span\n aria-hidden=\"true\"\n className={cn(\n \"relative h-5 w-9 shrink-0 rounded-full bg-muted-foreground/25 transition-colors after:absolute after:left-0.5 after:top-0.5 after:h-4 after:w-4 after:rounded-full after:bg-background after:shadow-sm after:transition-transform peer-focus-visible:ring-2 peer-focus-visible:ring-ring peer-focus-visible:ring-offset-2\",\n value && \"bg-primary after:translate-x-4\",\n )}\n />\n </label>\n );\n}\n\nexport function ListField<T>({\n label,\n items,\n onChange,\n renderItem,\n createItem,\n addLabel = \"Add item\",\n}: {\n label: string;\n items: T[];\n onChange: (items: T[]) => void;\n renderItem: (\n item: T,\n update: (next: Partial<T>) => void,\n remove: () => void,\n index: number,\n ) => React.ReactNode;\n createItem: () => T;\n addLabel?: string;\n}) {\n return (\n <div className=\"flex flex-col gap-2.5 text-sm\">\n <div className=\"flex items-center justify-between gap-3\">\n <span className=\"text-xs font-semibold text-foreground\">{label}</span>\n <span className=\"text-[10px] font-medium uppercase tracking-wider text-muted-foreground\">\n {items.length} {items.length === 1 ? \"item\" : \"items\"}\n </span>\n </div>\n <div className=\"flex flex-col gap-2.5\">\n {items.map((item, index) => (\n <div\n key={index}\n className=\"flex flex-col gap-3 rounded-xl border border-border/80 bg-muted/15 p-3.5 [&>button]:self-end [&>button]:rounded-md [&>button]:px-2 [&>button]:py-1 [&>button]:text-[11px] [&>button]:font-semibold [&>button]:transition-colors [&>button]:hover:bg-destructive/10\"\n >\n <div className=\"flex items-center justify-between border-b border-border/60 pb-2\">\n <span className=\"text-[10px] font-bold uppercase tracking-[0.14em] text-muted-foreground\">\n Item {String(index + 1).padStart(2, \"0\")}\n </span>\n </div>\n {renderItem(\n item,\n (next) => {\n const copy = items.slice();\n copy[index] = { ...item, ...next };\n onChange(copy);\n },\n () => {\n onChange(items.filter((_, i) => i !== index));\n },\n index,\n )}\n </div>\n ))}\n </div>\n <button\n type=\"button\"\n className=\"inline-flex h-9 w-full items-center justify-center gap-2 rounded-lg border border-dashed border-input text-xs font-semibold text-muted-foreground transition-colors hover:border-primary/50 hover:bg-primary/5 hover:text-foreground\"\n onClick={() => onChange([...items, createItem()])}\n >\n <Plus className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n {addLabel}\n </button>\n </div>\n );\n}\n\nexport function ImageField({\n label,\n value,\n onChange,\n placeholder = \"https://...\",\n}: {\n label: string;\n value?: string | Media;\n onChange: (value: Media | undefined) => void;\n placeholder?: string;\n}) {\n const imageUrl = getMediaUrl(value);\n\n return (\n <div className=\"flex flex-col gap-2 text-sm\">\n <span className=\"text-xs font-semibold text-foreground\">{label}</span>\n {imageUrl ? (\n <div className=\"space-y-2\">\n <div className=\"relative aspect-video w-full overflow-hidden rounded-lg border border-border bg-muted/40\">\n <img\n src={imageUrl}\n alt=\"Preview\"\n className=\"h-full w-full object-cover\"\n />\n </div>\n <div className=\"flex items-center gap-2\">\n <ImageUploadDialog\n title={`Choose ${label.toLowerCase()}`}\n description=\"Upload an image or select one from your library.\"\n onSelect={(selected) => {\n const selMedia = selected.media as Record<string, unknown> | undefined;\n const mediaLitId =\n (selMedia?.mediaLitId as string) ??\n (selMedia?.mediaId as string) ??\n undefined;\n onChange({\n ...(mediaLitId ? { mediaId: mediaLitId, mediaLitId } : {}),\n url: selected.src,\n file: selected.src,\n thumbnailUrl: (selMedia?.thumbnailUrl as string) ?? selected.src,\n thumbnail: (selMedia?.thumbnailUrl as string) ?? selected.src,\n alt: selected.alt,\n });\n }}\n >\n <button\n type=\"button\"\n className=\"inline-flex h-8 items-center justify-center rounded-lg border border-input bg-background px-3 text-xs font-medium text-foreground hover:bg-muted\"\n >\n <ImageIcon className=\"mr-1.5 h-3.5 w-3.5\" />\n Change image\n </button>\n </ImageUploadDialog>\n <button\n type=\"button\"\n className=\"inline-flex h-8 items-center justify-center rounded-lg border border-destructive/30 bg-background px-3 text-xs font-medium text-destructive hover:bg-destructive/10\"\n onClick={() => onChange(undefined)}\n >\n Remove\n </button>\n </div>\n </div>\n ) : (\n <ImageUploadDialog\n title={`Choose ${label.toLowerCase()}`}\n description=\"Upload an image or select one from your library.\"\n onSelect={(selected) => {\n const selMedia = selected.media as Record<string, unknown> | undefined;\n const mediaLitId =\n (selMedia?.mediaLitId as string) ??\n (selMedia?.mediaId as string) ??\n undefined;\n onChange({\n ...(mediaLitId ? { mediaId: mediaLitId, mediaLitId } : {}),\n url: selected.src,\n file: selected.src,\n thumbnailUrl: (selMedia?.thumbnailUrl as string) ?? selected.src,\n thumbnail: (selMedia?.thumbnailUrl as string) ?? selected.src,\n alt: selected.alt,\n });\n }}\n >\n <button\n type=\"button\"\n className=\"flex w-full items-center justify-center gap-2 rounded-lg border border-dashed border-border bg-muted/20 py-3 text-xs font-medium text-muted-foreground transition-colors hover:border-primary/40 hover:bg-muted/40 hover:text-foreground\"\n >\n <ImageIcon className=\"h-4 w-4\" />\n Upload or choose image\n </button>\n </ImageUploadDialog>\n )}\n <input\n type=\"text\"\n className=\"h-9 rounded-lg border border-input bg-muted/20 px-3 py-2 text-sm text-foreground outline-none transition-colors placeholder:text-muted-foreground/70 focus:border-ring focus:bg-background focus:ring-2 focus:ring-ring/20\"\n value={imageUrl ?? \"\"}\n placeholder={placeholder}\n onChange={(e) =>\n onChange(\n e.target.value\n ? { url: e.target.value, file: e.target.value }\n : undefined,\n )\n }\n />\n </div>\n );\n}\n","import React from \"react\";\nimport type { WidgetEditorProps } from \"../../models\";\nimport type { HeaderNavLink, HeaderSettings } from \"./settings\";\nimport { generateUniqueId } from \"../../utils\";\nimport {\n FieldGroup,\n ImageField,\n ListField,\n SelectField,\n SliderField,\n TextField,\n ToggleField,\n} from \"../_shared/fields\";\nimport { getMediaUrl } from \"../../models/media\";\n\nconst CORNER_LABELS: Record<number, string> = {\n 0: \"Square\",\n 1: \"Small\",\n 2: \"Default\",\n 3: \"Medium\",\n 4: \"Large\",\n 5: \"XL\",\n 6: \"2XL\",\n 7: \"3XL\",\n 8: \"Full\",\n};\n\nexport function HeaderEditor({\n settings,\n onChange,\n}: WidgetEditorProps<HeaderSettings>) {\n const update = (partial: Partial<HeaderSettings>) =>\n onChange({ ...settings, ...partial });\n\n return (\n <div className=\"flex flex-col\">\n <FieldGroup title=\"Logo\">\n <TextField\n label=\"Logo text\"\n value={settings.logoText}\n onChange={(logoText) => update({ logoText })}\n />\n <ImageField\n label=\"Logo image\"\n value={\n settings.logoImage\n ? typeof settings.logoImage === \"string\"\n ? { url: settings.logoImage, file: settings.logoImage }\n : (settings.logoImage as any)\n : undefined\n }\n onChange={(media) => update({ logoImage: getMediaUrl(media) || undefined })}\n />\n </FieldGroup>\n <FieldGroup title=\"Navigation links\">\n <ListField<HeaderNavLink>\n label=\"Links\"\n items={settings.links ?? []}\n onChange={(links) => update({ links })}\n createItem={() => ({\n id: generateUniqueId(),\n label: \"New link\",\n href: \"#\",\n })}\n addLabel=\"Add link\"\n renderItem={(link, updateLink, remove) => (\n <>\n <TextField\n label=\"Label\"\n value={link.label}\n onChange={(label) => updateLink({ label })}\n />\n <TextField\n label=\"Link\"\n value={link.href}\n onChange={(href) => updateLink({ href })}\n />\n <ToggleField\n label=\"Show as button\"\n value={link.isButton}\n onChange={(isButton) => updateLink({ isButton })}\n />\n <button\n type=\"button\"\n className=\"self-start text-xs text-destructive\"\n onClick={remove}\n >\n Remove\n </button>\n </>\n )}\n />\n </FieldGroup>\n <FieldGroup title=\"Call to action\">\n <TextField\n label=\"Button text\"\n value={settings.ctaLabel}\n onChange={(ctaLabel) => update({ ctaLabel })}\n />\n <TextField\n label=\"Button link\"\n value={settings.ctaHref}\n onChange={(ctaHref) => update({ ctaHref })}\n />\n </FieldGroup>\n <FieldGroup title=\"Layout\">\n <SelectField\n label=\"Link alignment\"\n value={settings.linkAlignment ?? \"left\"}\n onChange={(linkAlignment) => update({ linkAlignment })}\n options={[\n { label: \"Left\", value: \"left\" },\n { label: \"Center\", value: \"center\" },\n { label: \"Right\", value: \"right\" },\n ]}\n />\n <ToggleField\n label=\"Backdrop blur\"\n value={settings.backdropBlur}\n onChange={(backdropBlur) => update({ backdropBlur })}\n />\n <ToggleField\n label=\"Color mode switcher\"\n value={settings.showThemeSwitcher !== false}\n onChange={(showThemeSwitcher) => update({ showThemeSwitcher })}\n />\n </FieldGroup>\n </div>\n );\n}\n\nexport function HeaderDesignEditor({\n settings,\n onChange,\n}: WidgetEditorProps<HeaderSettings>) {\n const update = (partial: Partial<HeaderSettings>) =>\n onChange({ ...settings, ...partial });\n\n const logoCorners = settings.logoCorners ?? settings.logoRadius ?? 2;\n\n return (\n <div className=\"flex flex-col\">\n <FieldGroup title=\"Logo styling\">\n <SliderField\n label=\"Logo corners\"\n value={logoCorners}\n min={0}\n max={8}\n step={1}\n minLabel=\"0 (Square)\"\n maxLabel=\"Full\"\n displayValue={CORNER_LABELS[logoCorners] ?? `${logoCorners}`}\n onChange={(val) => update({ logoCorners: val })}\n />\n </FieldGroup>\n </div>\n );\n}\n","import type { HeaderSettings } from \"./settings\";\nimport { generateUniqueId } from \"../../utils\";\n\nexport const headerDefaults: Partial<HeaderSettings> = {\n logoText: \"FrontLit\",\n logoCorners: 2,\n links: [\n { id: generateUniqueId(), label: \"Features\", href: \"/#features\" },\n { id: generateUniqueId(), label: \"Pricing\", href: \"/#pricing\" },\n { id: generateUniqueId(), label: \"Docs\", href: \"/docs\" },\n { id: generateUniqueId(), label: \"Blog\", href: \"/blog\" },\n ],\n ctaLabel: \"Get started\",\n ctaHref: \"/help\",\n linkAlignment: \"left\",\n layout: \"fixed\",\n backdropBlur: false,\n showThemeSwitcher: true,\n // Slider value 1. Keeps a new header compact instead of inheriting the\n // theme's content-section padding (`py-12` / slider 5 on most themes).\n verticalPadding: \"py-4\",\n};\n","import type { Widget } from \"../../models\";\nimport { headerMetadata } from \"./metadata\";\nimport { HeaderWidget } from \"./widget\";\nimport { HeaderDesignEditor, HeaderEditor } from \"./editor\";\nimport { headerDefaults } from \"./defaults\";\nimport type { HeaderSettings } from \"./settings\";\n\nexport * from \"./settings\";\n\nexport const Header: Widget<HeaderSettings> = {\n metadata: headerMetadata,\n widget: HeaderWidget,\n editor: HeaderEditor,\n designEditor: HeaderDesignEditor,\n getDefaultSettings: () => headerDefaults,\n layouts: [\n { id: \"fixed\", name: \"Fixed\" },\n { id: \"floating\", name: \"Floating\" },\n { id: \"centered\", name: \"Centered logo\" },\n ],\n};\n","import type { WidgetMetadata } from \"../../models\";\n\nexport const heroMetadata: WidgetMetadata = {\n name: \"hero\",\n displayName: \"Hero\",\n description: \"A large introductory section with a title, copy and CTAs.\",\n compatibleWith: [\"site\", \"landing\", \"blog\", \"post\", \"custom\"],\n};\n","import React from \"react\";\nimport type { WidgetProps } from \"../../models\";\nimport type { ThemeStyle } from \"../../models\";\nimport { getMediaUrl, getMediaAlt } from \"../../models/media\";\nimport type { HeroSettings } from \"./settings\";\nimport { Image, NavLink, TextRenderer, VideoWithPreview } from \"../../components\";\nimport { isVideo } from \"../../utils\";\nimport clsx from \"clsx\";\nimport {\n Button,\n Header1,\n Preheader,\n Subheader1,\n Section,\n PageCard,\n PageCardContent,\n} from \"../../primitives\";\n\nconst roundedMap: Record<number, string> = {\n 0: \"rounded-none\",\n 1: \"rounded-sm\",\n 2: \"rounded\",\n 3: \"rounded-md\",\n 4: \"rounded-lg\",\n 5: \"rounded-xl\",\n 6: \"rounded-2xl\",\n 7: \"rounded-3xl\",\n 8: \"rounded-full\",\n};\n\nexport function HeroWidget({\n settings: {\n preTitle,\n title,\n description,\n buttonCaption,\n buttonAction,\n media,\n youtubeLink,\n alignment = \"right\",\n mediaRadius = 3,\n contentAlignment = \"left\",\n secondaryButtonAction,\n secondaryButtonCaption,\n cssId,\n maxWidth,\n verticalPadding,\n background,\n layout = \"normal\",\n },\n state: { theme },\n nextTheme,\n}: WidgetProps<HeroSettings>) {\n const overriddenTheme: ThemeStyle = JSON.parse(JSON.stringify(theme.theme));\n overriddenTheme.structure.page.width = maxWidth || theme.theme.structure.page.width;\n overriddenTheme.structure.section.padding.y =\n verticalPadding || theme.theme.structure.section.padding.y;\n\n const mediaUrl = getMediaUrl(media);\n const hasHeroGraphic = Boolean(youtubeLink || mediaUrl);\n const direction = alignment === \"right\" ? \"md:!flex-row-reverse\" : \"md:!flex-row\";\n const isCentered = layout === \"centered\" || layout === \"media-below\";\n\n const graphic = hasHeroGraphic && (\n <div\n className={`w-full overflow-hidden ${roundedMap[mediaRadius] ?? \"rounded-md\"}`}\n >\n {isVideo(youtubeLink, media) ? (\n <VideoWithPreview\n videoUrl={youtubeLink || mediaUrl || \"\"}\n title={getMediaAlt(media) || (media as any)?.caption || \"\"}\n thumbnailUrl={(media as any)?.thumbnail || (media as any)?.thumbnailUrl || \"\"}\n />\n ) : (\n <Image\n src={mediaUrl || \"\"}\n alt={getMediaAlt(media)}\n borderRadius={mediaRadius}\n />\n )}\n </div>\n );\n\n const textContent = (\n <div\n className={clsx(\n \"flex flex-col gap-4\",\n isCentered || contentAlignment === \"center\"\n ? \"items-center text-center\"\n : \"items-start justify-center h-full\",\n )}\n >\n {preTitle && (\n <Preheader theme={overriddenTheme} className=\"text-muted-foreground\">\n {preTitle}\n </Preheader>\n )}\n <Header1 theme={overriddenTheme}>{title}</Header1>\n {description && (\n <Subheader1 theme={overriddenTheme} component=\"span\">\n <TextRenderer json={description} theme={overriddenTheme} />\n </Subheader1>\n )}\n <div\n className={clsx(\n \"flex flex-col md:!flex-row gap-2 w-full\",\n (isCentered || contentAlignment === \"center\") && \"md:!justify-center\",\n )}\n >\n {buttonAction && buttonCaption && (\n <NavLink href={buttonAction}>\n <Button theme={overriddenTheme} className=\"w-full md:min-w-[150px]\">\n {buttonCaption}\n </Button>\n </NavLink>\n )}\n {secondaryButtonAction && secondaryButtonCaption && (\n <NavLink href={secondaryButtonAction}>\n <Button\n theme={overriddenTheme}\n variant=\"secondary\"\n className=\"w-full md:min-w-[150px]\"\n >\n {secondaryButtonCaption}\n </Button>\n </NavLink>\n )}\n </div>\n </div>\n );\n\n let mainContent: React.ReactNode;\n if (layout === \"centered\") {\n // Text-only, no media — the minimalist SaaS hero (Linear, Vercel).\n mainContent = (\n <div className=\"mx-auto flex max-w-2xl flex-col gap-4\">{textContent}</div>\n );\n } else if (layout === \"media-below\") {\n // Centered headline with a large screenshot/media beneath it — the\n // classic \"product hero\" pattern (Stripe, Vercel, Linear).\n mainContent = (\n <div className=\"flex flex-col gap-10\">\n <div className=\"mx-auto flex max-w-2xl flex-col gap-4\">{textContent}</div>\n {graphic && <div className=\"w-full\">{graphic}</div>}\n </div>\n );\n } else {\n mainContent = (\n <div className={clsx(\"flex flex-col gap-8\", direction)}>\n {graphic && <div className=\"w-full md:w-1/2 flex items-center\">{graphic}</div>}\n <div className={`w-full ${hasHeroGraphic ? \"md:w-1/2\" : \"\"}`}>\n {textContent}\n </div>\n </div>\n );\n }\n\n return (\n <Section\n theme={overriddenTheme}\n id={cssId}\n background={background}\n nextTheme={nextTheme}\n >\n {layout === \"card\" ? (\n <PageCard theme={overriddenTheme}>\n <PageCardContent theme={overriddenTheme}>{mainContent}</PageCardContent>\n </PageCard>\n ) : (\n mainContent\n )}\n </Section>\n );\n}\n","import React from \"react\";\nimport type { WidgetEditorProps } from \"../../models\";\nimport type { HeroSettings } from \"./settings\";\nimport { Editor, emptyDoc } from \"@frontlit/text-editor\";\nimport { FieldGroup, ImageField, SelectField, TextField } from \"../_shared/fields\";\n\nexport function HeroEditor({ settings, onChange }: WidgetEditorProps<HeroSettings>) {\n const update = (partial: Partial<HeroSettings>) =>\n onChange({ ...settings, ...partial });\n\n return (\n <div className=\"flex flex-col\">\n <FieldGroup title=\"Content\">\n <TextField\n label=\"Eyebrow\"\n value={settings.preTitle}\n placeholder=\"e.g. Careers\"\n onChange={(preTitle) => update({ preTitle })}\n />\n <TextField\n label=\"Title\"\n value={settings.title}\n onChange={(title) => update({ title })}\n />\n <div className=\"flex flex-col gap-1 text-sm\">\n <span className=\"font-medium text-foreground\">Description</span>\n <Editor\n initialContent={settings.description ?? emptyDoc}\n onChange={(description: any) => update({ description })}\n showToolbar={false}\n editorClassName=\"min-h-[100px]\"\n />\n </div>\n </FieldGroup>\n <FieldGroup title=\"Media\">\n <ImageField\n label=\"Image\"\n value={settings.media}\n onChange={(media) => update({ media })}\n />\n <TextField\n label=\"YouTube / Vimeo link\"\n value={settings.youtubeLink}\n placeholder=\"https://youtube.com/watch?v=...\"\n onChange={(youtubeLink) => update({ youtubeLink })}\n />\n </FieldGroup>\n <FieldGroup title=\"Calls to action\">\n <TextField\n label=\"Primary button text\"\n value={settings.buttonCaption}\n onChange={(buttonCaption) => update({ buttonCaption })}\n />\n <TextField\n label=\"Primary button link\"\n value={settings.buttonAction}\n onChange={(buttonAction) => update({ buttonAction })}\n />\n <TextField\n label=\"Secondary button text\"\n value={settings.secondaryButtonCaption}\n onChange={(secondaryButtonCaption) => update({ secondaryButtonCaption })}\n />\n <TextField\n label=\"Secondary button link\"\n value={settings.secondaryButtonAction}\n onChange={(secondaryButtonAction) => update({ secondaryButtonAction })}\n />\n </FieldGroup>\n <FieldGroup title=\"Layout\">\n <SelectField\n label=\"Media position\"\n value={settings.alignment ?? \"right\"}\n onChange={(alignment) => update({ alignment })}\n options={[\n { label: \"Left\", value: \"left\" },\n { label: \"Right\", value: \"right\" },\n ]}\n />\n <SelectField\n label=\"Content alignment\"\n value={settings.contentAlignment ?? \"left\"}\n onChange={(contentAlignment) => update({ contentAlignment })}\n options={[\n { label: \"Left\", value: \"left\" },\n { label: \"Center\", value: \"center\" },\n ]}\n />\n </FieldGroup>\n </div>\n );\n}\n","import type { HeroSettings } from \"./settings\";\n\nexport const heroDefaults: Partial<HeroSettings> = {\n title: \"Run your whole business from one front office\",\n buttonCaption: \"See features\",\n buttonAction: \"/#features\",\n secondaryButtonCaption: \"Read the docs\",\n secondaryButtonAction: \"/docs\",\n alignment: \"right\",\n contentAlignment: \"left\",\n mediaRadius: 3,\n layout: \"normal\",\n};\n","import type { Widget } from \"../../models\";\nimport { heroMetadata } from \"./metadata\";\nimport { HeroWidget } from \"./widget\";\nimport { HeroEditor } from \"./editor\";\nimport { heroDefaults } from \"./defaults\";\nimport type { HeroSettings } from \"./settings\";\n\nexport * from \"./settings\";\n\nexport const Hero: Widget<HeroSettings> = {\n metadata: heroMetadata,\n widget: HeroWidget,\n editor: HeroEditor,\n getDefaultSettings: () => heroDefaults,\n layouts: [\n { id: \"normal\", name: \"Standard\" },\n { id: \"card\", name: \"Card\" },\n { id: \"centered\", name: \"Centered\" },\n { id: \"media-below\", name: \"Media below\" },\n ],\n};\n","import type { WidgetMetadata } from \"../../models\";\n\nexport const contentMetadata: WidgetMetadata = {\n name: \"content\",\n displayName: \"Content\",\n description:\n \"A rich-text section with an optional image, for things like an about-us or feature explainer.\",\n compatibleWith: [\"site\", \"landing\", \"blog\", \"post\", \"custom\"],\n};\n","import React from \"react\";\nimport clsx from \"clsx\";\nimport type { WidgetProps, ThemeStyle } from \"../../models\";\nimport { getMediaUrl, getMediaAlt } from \"../../models/media\";\nimport type { ContentSettings } from \"./settings\";\nimport { Image, TextRenderer } from \"../../components\";\nimport { Header2, Section } from \"../../primitives\";\n\nconst roundedMap: Record<number, string> = {\n 0: \"rounded-none\",\n 1: \"rounded-sm\",\n 2: \"rounded\",\n 3: \"rounded-md\",\n 4: \"rounded-lg\",\n 5: \"rounded-xl\",\n 6: \"rounded-2xl\",\n 7: \"rounded-3xl\",\n 8: \"rounded-full\",\n};\n\nexport function ContentWidget({\n settings: {\n title,\n body,\n media,\n alignment = \"left\",\n headerAlignment = \"left\",\n mediaRadius = 3,\n layout = \"side\",\n cssId,\n maxWidth,\n verticalPadding,\n background,\n },\n state: { theme },\n nextTheme,\n}: WidgetProps<ContentSettings>) {\n const overriddenTheme: ThemeStyle = JSON.parse(JSON.stringify(theme.theme));\n overriddenTheme.structure.page.width = maxWidth || theme.theme.structure.page.width;\n overriddenTheme.structure.section.padding.y =\n verticalPadding || theme.theme.structure.section.padding.y;\n\n const mediaUrl = getMediaUrl(media);\n const mediaAlt = getMediaAlt(media);\n const hasMedia = Boolean(mediaUrl);\n const sideBySide = layout !== \"stacked\" && layout !== \"overlay\";\n const direction = alignment === \"right\" ? \"md:!flex-row-reverse\" : \"md:!flex-row\";\n\n if (layout === \"overlay\") {\n // Media fills the section as a background; the text sits in a card\n // on top — a \"feature spotlight\" pattern common on product pages.\n const textPosition =\n alignment === \"right\" ? \"items-end text-right\" : \"items-start text-left\";\n return (\n <Section\n theme={overriddenTheme}\n id={cssId}\n background={background}\n nextTheme={nextTheme}\n >\n <div className=\"relative min-h-[420px] w-full overflow-hidden rounded-xl\">\n {hasMedia && (\n <Image\n src={mediaUrl || \"\"}\n alt={mediaAlt}\n width=\"w-full\"\n height=\"h-full\"\n className=\"absolute inset-0\"\n borderRadius={0}\n />\n )}\n <div className=\"absolute inset-0 bg-gradient-to-t from-black/70 via-black/20 to-transparent\" />\n <div\n className={clsx(\n \"relative flex h-full flex-col justify-end gap-4 p-6 md:p-10\",\n textPosition,\n )}\n >\n <div className=\"max-w-lg text-white\">\n {title && <Header2 theme={overriddenTheme}>{title}</Header2>}\n {body && <TextRenderer json={body} theme={overriddenTheme} />}\n </div>\n </div>\n </div>\n </Section>\n );\n }\n\n return (\n <Section\n theme={overriddenTheme}\n id={cssId}\n background={background}\n nextTheme={nextTheme}\n >\n <div className={clsx(\"flex flex-col gap-8\", sideBySide && direction)}>\n {hasMedia && (\n <div className={clsx(\"flex w-full items-center\", sideBySide && \"md:w-1/2\")}>\n <div\n className={`w-full overflow-hidden ${\n roundedMap[mediaRadius] ?? \"rounded-md\"\n }`}\n >\n <Image\n src={mediaUrl || \"\"}\n alt={mediaAlt}\n borderRadius={mediaRadius}\n />\n </div>\n </div>\n )}\n <div className={clsx(\"w-full\", hasMedia && sideBySide && \"md:w-1/2\")}>\n <div\n className={clsx(\n \"flex h-full flex-col justify-center gap-4\",\n headerAlignment === \"center\" ? \"items-center text-center\" : \"items-start\",\n )}\n >\n {title && <Header2 theme={overriddenTheme}>{title}</Header2>}\n {body && <TextRenderer json={body} theme={overriddenTheme} />}\n </div>\n </div>\n </div>\n </Section>\n );\n}\n","import React from \"react\";\nimport type { WidgetEditorProps } from \"../../models\";\nimport type { ContentSettings } from \"./settings\";\nimport { Editor, emptyDoc } from \"@frontlit/text-editor\";\nimport { FieldGroup, ImageField, NumberField, SelectField, TextField } from \"../_shared/fields\";\n\nexport function ContentEditor({\n settings,\n onChange,\n}: WidgetEditorProps<ContentSettings>) {\n const update = (partial: Partial<ContentSettings>) =>\n onChange({ ...settings, ...partial });\n\n return (\n <div className=\"flex flex-col\">\n <FieldGroup title=\"Content\">\n <TextField\n label=\"Title\"\n value={settings.title}\n onChange={(title) => update({ title })}\n />\n <div className=\"flex flex-col gap-1 text-sm\">\n <span className=\"font-medium text-foreground\">Body</span>\n <Editor\n initialContent={settings.body ?? emptyDoc}\n onChange={(body: any) => update({ body })}\n editorClassName=\"min-h-[160px]\"\n />\n </div>\n </FieldGroup>\n <FieldGroup title=\"Media\">\n <ImageField\n label=\"Image\"\n value={settings.media}\n onChange={(media) => update({ media })}\n />\n <NumberField\n label=\"Image corner radius\"\n value={settings.mediaRadius}\n min={0}\n max={8}\n onChange={(mediaRadius) => update({ mediaRadius })}\n />\n </FieldGroup>\n <FieldGroup title=\"Layout\">\n <SelectField\n label=\"Media position\"\n value={settings.alignment ?? \"left\"}\n onChange={(alignment) => update({ alignment })}\n options={[\n { label: \"Left\", value: \"left\" },\n { label: \"Right\", value: \"right\" },\n ]}\n />\n <SelectField\n label=\"Header alignment\"\n value={settings.headerAlignment ?? \"left\"}\n onChange={(headerAlignment) => update({ headerAlignment })}\n options={[\n { label: \"Left\", value: \"left\" },\n { label: \"Center\", value: \"center\" },\n ]}\n />\n </FieldGroup>\n </div>\n );\n}\n","import type { ContentSettings } from \"./settings\";\n\nexport const contentDefaults: Partial<ContentSettings> = {\n title: \"One dashboard, every channel\",\n body: {\n type: \"doc\",\n content: [\n {\n type: \"paragraph\",\n content: [\n {\n type: \"text\",\n text: \"FrontLit brings your website, content, customer support, and audience engagement into one connected front office.\",\n },\n ],\n },\n ],\n },\n alignment: \"left\",\n headerAlignment: \"left\",\n mediaRadius: 3,\n};\n","import type { Widget } from \"../../models\";\nimport { contentMetadata } from \"./metadata\";\nimport { ContentWidget } from \"./widget\";\nimport { ContentEditor } from \"./editor\";\nimport { contentDefaults } from \"./defaults\";\nimport type { ContentSettings } from \"./settings\";\n\nexport * from \"./settings\";\n\nexport const Content: Widget<ContentSettings> = {\n metadata: contentMetadata,\n widget: ContentWidget,\n editor: ContentEditor,\n getDefaultSettings: () => contentDefaults,\n layouts: [\n { id: \"side\", name: \"Media beside\" },\n { id: \"stacked\", name: \"Media on top\" },\n { id: \"overlay\", name: \"Overlay\" },\n ],\n};\n","import type { WidgetMetadata } from \"../../models\";\n\nexport const featuredMetadata: WidgetMetadata = {\n name: \"featured\",\n displayName: \"Feature grid\",\n description:\n \"A grid of feature highlights, each with an icon, title and description.\",\n compatibleWith: [\"site\", \"landing\", \"custom\"],\n};\n","import React from \"react\";\nimport clsx from \"clsx\";\nimport * as Icons from \"lucide-react\";\nimport type { LucideIcon } from \"lucide-react\";\nimport type { ThemeStyle, WidgetProps } from \"../../models\";\nimport type { FeaturedSettings } from \"./settings\";\nimport { TextRenderer } from \"../../components\";\nimport {\n Header1,\n Header4,\n PageCard,\n PageCardContent,\n Section,\n Subheader1,\n Text2,\n} from \"../../primitives\";\n\n/**\n * Resolves a lucide-react icon by name, falling back to a safe default when\n * the configured name doesn't match a known icon (e.g. a typo in settings).\n */\nfunction resolveIcon(name?: string): LucideIcon {\n if (!name) return Icons.Sparkles;\n const icon = (Icons as unknown as Record<string, LucideIcon>)[name];\n // Lucide icons are `React.forwardRef` components (objects), not plain\n // functions, so we can't gate on `typeof icon === \"function\"` here.\n return icon ?? Icons.Sparkles;\n}\n\nexport function FeaturedWidget({\n settings: {\n title,\n description,\n headerAlignment = \"center\",\n items,\n layout = \"grid\",\n cssId,\n maxWidth,\n verticalPadding,\n background,\n },\n state: { theme },\n nextTheme,\n}: WidgetProps<FeaturedSettings>) {\n const overriddenTheme: ThemeStyle = JSON.parse(JSON.stringify(theme.theme));\n overriddenTheme.structure.page.width = maxWidth || theme.theme.structure.page.width;\n overriddenTheme.structure.section.padding.y =\n verticalPadding || theme.theme.structure.section.padding.y;\n\n return (\n <Section\n theme={overriddenTheme}\n id={cssId}\n background={background}\n nextTheme={nextTheme}\n >\n <div className=\"flex flex-col gap-8\">\n <div\n className={clsx(\n \"flex flex-col gap-4\",\n headerAlignment === \"center\" ? \"items-center text-center\" : \"items-start\",\n )}\n >\n <Header1 theme={overriddenTheme}>{title}</Header1>\n {description && (\n <Subheader1 theme={overriddenTheme} component=\"span\">\n <TextRenderer json={description} theme={overriddenTheme} />\n </Subheader1>\n )}\n </div>\n {items && items.length > 0 && layout === \"numbered\" && (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8\">\n {items.map((item, index) => (\n <div key={index} className=\"flex flex-col gap-2\">\n <span className=\"text-3xl font-bold text-primary/30\">\n {String(index + 1).padStart(2, \"0\")}\n </span>\n <Header4 theme={overriddenTheme}>{item.title}</Header4>\n {item.description && (\n <Text2 theme={overriddenTheme}>{item.description}</Text2>\n )}\n </div>\n ))}\n </div>\n )}\n {items && items.length > 0 && layout !== \"numbered\" && (\n <div\n className={clsx(\n layout === \"list\" && \"flex flex-col gap-4\",\n layout === \"compact\" &&\n \"grid grid-cols-2 md:grid-cols-4 gap-4 items-stretch\",\n layout !== \"list\" &&\n layout !== \"compact\" &&\n \"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 items-stretch\",\n )}\n >\n {items.map((item, index) => {\n const Icon = resolveIcon(item.icon);\n return (\n <PageCard key={index} theme={overriddenTheme}>\n <PageCardContent\n theme={overriddenTheme}\n className={clsx(\n \"h-full flex gap-3\",\n layout === \"list\" ? \"flex-row items-start\" : \"flex-col\",\n layout === \"compact\" && \"items-center text-center gap-2\",\n )}\n >\n <div\n className={clsx(\n \"flex shrink-0 items-center justify-center rounded-md bg-primary/10 text-primary\",\n layout === \"compact\" ? \"h-8 w-8\" : \"h-10 w-10\",\n )}\n >\n <Icon className=\"h-5 w-5\" />\n </div>\n <div\n className={clsx(\n \"flex flex-col gap-2\",\n layout === \"compact\" && \"items-center gap-1\",\n )}\n >\n <Header4 theme={overriddenTheme}>{item.title}</Header4>\n {item.description && layout !== \"compact\" && (\n <Text2 theme={overriddenTheme}>{item.description}</Text2>\n )}\n </div>\n </PageCardContent>\n </PageCard>\n );\n })}\n </div>\n )}\n </div>\n </Section>\n );\n}\n","import React from \"react\";\nimport type { WidgetEditorProps } from \"../../models\";\nimport type { FeatureItem, FeaturedSettings } from \"./settings\";\nimport { Editor, emptyDoc } from \"@frontlit/text-editor\";\nimport { FieldGroup, ListField, SelectField, TextField } from \"../_shared/fields\";\n\nconst createItem = (): FeatureItem => ({\n title: \"New feature\",\n description: \"\",\n icon: \"Sparkles\",\n});\n\nexport function FeaturedEditor({\n settings,\n onChange,\n}: WidgetEditorProps<FeaturedSettings>) {\n const update = (partial: Partial<FeaturedSettings>) =>\n onChange({ ...settings, ...partial });\n\n return (\n <div className=\"flex flex-col\">\n <FieldGroup title=\"Content\">\n <TextField\n label=\"Title\"\n value={settings.title}\n onChange={(title) => update({ title })}\n />\n <div className=\"flex flex-col gap-1 text-sm\">\n <span className=\"font-medium text-foreground\">Description</span>\n <Editor\n initialContent={settings.description ?? emptyDoc}\n onChange={(description: any) => update({ description })}\n showToolbar={false}\n editorClassName=\"min-h-[80px]\"\n />\n </div>\n <SelectField\n label=\"Header alignment\"\n value={settings.headerAlignment ?? \"center\"}\n onChange={(headerAlignment) => update({ headerAlignment })}\n options={[\n { label: \"Left\", value: \"left\" },\n { label: \"Center\", value: \"center\" },\n ]}\n />\n </FieldGroup>\n <FieldGroup title=\"Features\">\n <ListField<FeatureItem>\n label=\"Feature items\"\n items={settings.items ?? []}\n onChange={(items) => update({ items })}\n createItem={createItem}\n addLabel=\"Add feature\"\n renderItem={(item, updateItem, remove) => (\n <>\n <TextField\n label=\"Title\"\n value={item.title}\n onChange={(title) => updateItem({ title })}\n />\n <TextField\n label=\"Description\"\n value={item.description}\n multiline\n onChange={(description) => updateItem({ description })}\n />\n <TextField\n label=\"Icon (lucide-react name)\"\n value={item.icon}\n placeholder=\"Globe\"\n onChange={(icon) => updateItem({ icon })}\n />\n <button\n type=\"button\"\n className=\"self-start text-xs font-medium text-destructive hover:underline\"\n onClick={remove}\n >\n Remove feature\n </button>\n </>\n )}\n />\n </FieldGroup>\n </div>\n );\n}\n","import type { FeaturedSettings } from \"./settings\";\n\nexport const featuredDefaults: Partial<FeaturedSettings> = {\n title: \"Everything you need to run your business online\",\n headerAlignment: \"center\",\n items: [\n {\n title: \"Website\",\n description: \"Design and publish beautiful pages with a drag-and-drop editor.\",\n icon: \"Globe\",\n },\n {\n title: \"Content\",\n description:\n \"Publish articles, documentation, and product updates from one content system.\",\n icon: \"Newspaper\",\n },\n {\n title: \"Support\",\n description:\n \"Support customers with a shared inbox, ticketing, help center, and AI answers.\",\n icon: \"LifeBuoy\",\n },\n {\n title: \"Engage\",\n description: \"Grow your audience and send email without leaving FrontLit.\",\n icon: \"Mail\",\n },\n ],\n};\n","import type { Widget } from \"../../models\";\nimport { featuredMetadata } from \"./metadata\";\nimport { FeaturedWidget } from \"./widget\";\nimport { FeaturedEditor } from \"./editor\";\nimport { featuredDefaults } from \"./defaults\";\nimport type { FeaturedSettings } from \"./settings\";\n\nexport * from \"./settings\";\n\nexport const Featured: Widget<FeaturedSettings> = {\n metadata: featuredMetadata,\n widget: FeaturedWidget,\n editor: FeaturedEditor,\n getDefaultSettings: () => featuredDefaults,\n layouts: [\n { id: \"grid\", name: \"Grid\" },\n { id: \"list\", name: \"List\" },\n { id: \"compact\", name: \"Compact\" },\n { id: \"numbered\", name: \"Numbered\" },\n ],\n};\n","import type { WidgetMetadata } from \"../../models\";\n\nexport const faqMetadata: WidgetMetadata = {\n name: \"faq\",\n displayName: \"FAQs\",\n description: \"A list of frequently asked questions, rendered as an accordion.\",\n compatibleWith: [\"site\", \"landing\", \"blog\", \"post\", \"custom\"],\n};\n","\"use client\";\n\nimport React, { useState } from \"react\";\nimport clsx from \"clsx\";\nimport { ChevronDown } from \"lucide-react\";\nimport type { WidgetProps, ThemeStyle } from \"../../models\";\nimport type { FaqSettings } from \"./settings\";\nimport { Header2, Section, Text1 } from \"../../primitives\";\n\nexport function FaqWidget({\n settings: {\n title,\n headerAlignment = \"left\",\n items = [],\n layout = \"list\",\n cssId,\n maxWidth,\n verticalPadding,\n background,\n },\n state: { theme },\n nextTheme,\n}: WidgetProps<FaqSettings>) {\n const overriddenTheme: ThemeStyle = JSON.parse(JSON.stringify(theme.theme));\n overriddenTheme.structure.page.width = maxWidth || theme.theme.structure.page.width;\n overriddenTheme.structure.section.padding.y =\n verticalPadding || theme.theme.structure.section.padding.y;\n\n const [expandedIndex, setExpandedIndex] = useState<number | null>(\n items.length > 0 ? 0 : null,\n );\n\n return (\n <Section\n theme={overriddenTheme}\n id={cssId}\n background={background}\n nextTheme={nextTheme}\n >\n <div className=\"flex flex-col gap-6\">\n {title && (\n <div\n className={clsx(\n \"flex flex-col\",\n headerAlignment === \"center\" ? \"items-center text-center\" : \"items-start\",\n )}\n >\n <Header2 theme={overriddenTheme}>{title}</Header2>\n </div>\n )}\n {items.length > 0 &&\n (() => {\n const renderItem = (item: (typeof items)[number], index: number) => {\n const isOpen = expandedIndex === index;\n return (\n <div\n key={item.id}\n className={\n layout === \"cards\"\n ? \"rounded-lg border border-border bg-card px-4 py-4\"\n : layout === \"columns\"\n ? \"border-b border-border py-4\"\n : \"py-4\"\n }\n >\n <button\n type=\"button\"\n className=\"flex w-full items-center justify-between gap-4 text-left\"\n onClick={() => setExpandedIndex(isOpen ? null : index)}\n aria-expanded={isOpen}\n >\n <Text1 theme={overriddenTheme} className=\"font-medium\">\n {item.question}\n </Text1>\n <ChevronDown\n className={clsx(\n \"h-4 w-4 shrink-0 transition-transform\",\n isOpen && \"rotate-180\",\n )}\n />\n </button>\n {isOpen && (\n <div className=\"pt-3\">\n <Text1 theme={overriddenTheme} className=\"text-muted-foreground\">\n {item.answer}\n </Text1>\n </div>\n )}\n </div>\n );\n };\n\n if (layout === \"columns\") {\n // Two side-by-side lists — the left column gets\n // the first half of items, the right column the\n // rest, a common layout for FAQ sections with\n // many questions.\n const half = Math.ceil(items.length / 2);\n const left = items.slice(0, half);\n const right = items.slice(half);\n return (\n <div className=\"grid grid-cols-1 gap-x-10 md:grid-cols-2\">\n <div className=\"flex flex-col\">\n {left.map((item, i) => renderItem(item, i))}\n </div>\n <div className=\"flex flex-col\">\n {right.map((item, i) => renderItem(item, half + i))}\n </div>\n </div>\n );\n }\n\n return (\n <div\n className={\n layout === \"cards\"\n ? \"flex flex-col gap-3\"\n : \"flex flex-col divide-y divide-border border-b border-t border-border\"\n }\n >\n {items.map((item, index) => renderItem(item, index))}\n </div>\n );\n })()}\n </div>\n </Section>\n );\n}\n","import React from \"react\";\nimport type { WidgetEditorProps } from \"../../models\";\nimport type { FaqItem, FaqSettings } from \"./settings\";\nimport { generateUniqueId } from \"../../utils\";\nimport { FieldGroup, ListField, SelectField, TextField } from \"../_shared/fields\";\n\nexport function FaqEditor({ settings, onChange }: WidgetEditorProps<FaqSettings>) {\n const update = (partial: Partial<FaqSettings>) =>\n onChange({ ...settings, ...partial });\n\n return (\n <div className=\"flex flex-col\">\n <FieldGroup title=\"Header\">\n <TextField\n label=\"Title\"\n value={settings.title}\n onChange={(title) => update({ title })}\n />\n <SelectField\n label=\"Header alignment\"\n value={settings.headerAlignment ?? \"left\"}\n onChange={(headerAlignment) => update({ headerAlignment })}\n options={[\n { label: \"Left\", value: \"left\" },\n { label: \"Center\", value: \"center\" },\n ]}\n />\n </FieldGroup>\n <FieldGroup title=\"Questions\">\n <ListField<FaqItem>\n label=\"Items\"\n items={settings.items ?? []}\n onChange={(items) => update({ items })}\n createItem={() => ({\n id: generateUniqueId(),\n question: \"New question\",\n answer: \"\",\n })}\n addLabel=\"Add question\"\n renderItem={(item, updateItem, remove) => (\n <>\n <TextField\n label=\"Question\"\n value={item.question}\n onChange={(question) => updateItem({ question })}\n />\n <TextField\n label=\"Answer\"\n value={item.answer}\n multiline\n onChange={(answer) => updateItem({ answer })}\n />\n <button\n type=\"button\"\n className=\"self-start text-xs text-destructive\"\n onClick={remove}\n >\n Remove\n </button>\n </>\n )}\n />\n </FieldGroup>\n </div>\n );\n}\n","import type { FaqSettings } from \"./settings\";\nimport { generateUniqueId } from \"../../utils\";\n\nexport const faqDefaults: Partial<FaqSettings> = {\n title: \"Frequently asked questions\",\n headerAlignment: \"left\",\n items: [\n {\n id: generateUniqueId(),\n question: \"What can I build with FrontLit?\",\n answer:\n \"A marketing website, articles, documentation, product updates, customer support, and email — all from one connected dashboard.\",\n },\n {\n id: generateUniqueId(),\n question: \"Do I need to know how to code?\",\n answer:\n \"No. Every page is assembled from ready-made blocks like this one, and you can customize copy, media and layout without touching code.\",\n },\n {\n id: generateUniqueId(),\n question: \"Can I use my own domain?\",\n answer:\n \"Yes, every FrontLit site can be connected to a custom domain in a few clicks.\",\n },\n {\n id: generateUniqueId(),\n question: \"Is there a free plan?\",\n answer: \"Yes, you can get started for free and upgrade as your audience grows.\",\n },\n ],\n};\n","import type { Widget } from \"../../models\";\nimport { faqMetadata } from \"./metadata\";\nimport { FaqWidget } from \"./widget\";\nimport { FaqEditor } from \"./editor\";\nimport { faqDefaults } from \"./defaults\";\nimport type { FaqSettings } from \"./settings\";\n\nexport * from \"./settings\";\n\nexport const Faq: Widget<FaqSettings> = {\n metadata: faqMetadata,\n widget: FaqWidget,\n editor: FaqEditor,\n getDefaultSettings: () => faqDefaults,\n layouts: [\n { id: \"list\", name: \"List\" },\n { id: \"cards\", name: \"Cards\" },\n { id: \"columns\", name: \"Columns\" },\n ],\n};\n","import type { WidgetMetadata } from \"../../models\";\n\nexport const pricingMetadata: WidgetMetadata = {\n name: \"pricing\",\n displayName: \"Pricing\",\n description: \"A grid of pricing tiers with features and calls to action.\",\n compatibleWith: [\"site\", \"landing\", \"custom\"],\n};\n","import React from \"react\";\nimport clsx from \"clsx\";\nimport type { ThemeStyle, WidgetProps } from \"../../models\";\nimport type { PricingSettings } from \"./settings\";\nimport { NavLink, TextRenderer } from \"../../components\";\nimport {\n Badge,\n Button,\n Header1,\n PageCard,\n PageCardContent,\n PageCardHeader,\n Preheader,\n Section,\n Subheader1,\n Text1,\n Text2,\n} from \"../../primitives\";\n\nexport function PricingWidget({\n settings: {\n title,\n description,\n headerAlignment = \"center\",\n tiers,\n layout = \"grid\",\n cssId,\n maxWidth,\n verticalPadding,\n background,\n },\n state: { theme },\n nextTheme,\n}: WidgetProps<PricingSettings>) {\n const overriddenTheme: ThemeStyle = JSON.parse(JSON.stringify(theme.theme));\n overriddenTheme.structure.page.width = maxWidth || theme.theme.structure.page.width;\n overriddenTheme.structure.section.padding.y =\n verticalPadding || theme.theme.structure.section.padding.y;\n\n return (\n <Section\n theme={overriddenTheme}\n id={cssId}\n background={background}\n nextTheme={nextTheme}\n >\n <div className=\"flex flex-col gap-8\">\n <div\n className={clsx(\n \"flex flex-col gap-4\",\n headerAlignment === \"center\" ? \"items-center text-center\" : \"items-start\",\n )}\n >\n <Header1 theme={overriddenTheme}>{title}</Header1>\n {description && (\n <Subheader1 theme={overriddenTheme} component=\"span\">\n <TextRenderer json={description} theme={overriddenTheme} />\n </Subheader1>\n )}\n </div>\n {tiers && tiers.length > 0 && (\n <div\n className={\n layout === \"stacked\"\n ? \"mx-auto flex w-full max-w-xl flex-col gap-6\"\n : \"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 items-stretch\"\n }\n >\n {tiers.map((tier, index) => (\n <PageCard\n key={index}\n theme={overriddenTheme}\n className={clsx(\n tier.highlighted && \"ring-2 ring-primary\",\n layout === \"highlight\" &&\n tier.highlighted &&\n \"relative z-10 shadow-xl md:-translate-y-3\",\n )}\n >\n <PageCardContent\n theme={overriddenTheme}\n className=\"h-full flex flex-col gap-4\"\n >\n <div className=\"flex items-center justify-between gap-2\">\n <Preheader theme={overriddenTheme}>{tier.name}</Preheader>\n {tier.highlighted && (\n <Badge theme={overriddenTheme}>Most popular</Badge>\n )}\n </div>\n <PageCardHeader theme={overriddenTheme}>{tier.price}</PageCardHeader>\n {tier.description && (\n <Text1 theme={overriddenTheme}>{tier.description}</Text1>\n )}\n {tier.features && tier.features.length > 0 && (\n <div className=\"grow flex flex-col gap-2\">\n {tier.features.map((feature, i) => (\n <Text2 key={i} theme={overriddenTheme}>\n {feature}\n </Text2>\n ))}\n </div>\n )}\n {tier.buttonAction && tier.buttonCaption && (\n <NavLink href={tier.buttonAction} className=\"w-full mt-auto\">\n <Button\n theme={overriddenTheme}\n variant={tier.highlighted ? \"default\" : \"secondary\"}\n className=\"w-full\"\n >\n {tier.buttonCaption}\n </Button>\n </NavLink>\n )}\n </PageCardContent>\n </PageCard>\n ))}\n </div>\n )}\n </div>\n </Section>\n );\n}\n","import React from \"react\";\nimport type { WidgetEditorProps } from \"../../models\";\nimport type { PricingSettings, PricingTier } from \"./settings\";\nimport { Editor, emptyDoc } from \"@frontlit/text-editor\";\nimport {\n FieldGroup,\n ListField,\n SelectField,\n TextField,\n ToggleField,\n} from \"../_shared/fields\";\n\nconst createTier = (): PricingTier => ({\n name: \"New plan\",\n price: \"$0/mo\",\n description: \"\",\n features: [],\n buttonCaption: \"Get started\",\n buttonAction: \"#\",\n});\n\nexport function PricingEditor({\n settings,\n onChange,\n}: WidgetEditorProps<PricingSettings>) {\n const update = (partial: Partial<PricingSettings>) =>\n onChange({ ...settings, ...partial });\n\n return (\n <div className=\"flex flex-col\">\n <FieldGroup title=\"Content\">\n <TextField\n label=\"Title\"\n value={settings.title}\n onChange={(title) => update({ title })}\n />\n <div className=\"flex flex-col gap-1 text-sm\">\n <span className=\"font-medium text-foreground\">Description</span>\n <Editor\n initialContent={settings.description ?? emptyDoc}\n onChange={(description: any) => update({ description })}\n showToolbar={false}\n editorClassName=\"min-h-[80px]\"\n />\n </div>\n <SelectField\n label=\"Header alignment\"\n value={settings.headerAlignment ?? \"center\"}\n onChange={(headerAlignment) => update({ headerAlignment })}\n options={[\n { label: \"Left\", value: \"left\" },\n { label: \"Center\", value: \"center\" },\n ]}\n />\n </FieldGroup>\n <FieldGroup title=\"Pricing tiers\">\n <ListField<PricingTier>\n label=\"Tiers\"\n items={settings.tiers ?? []}\n onChange={(tiers) => update({ tiers })}\n createItem={createTier}\n addLabel=\"Add tier\"\n renderItem={(tier, updateTier, remove) => (\n <>\n <TextField\n label=\"Name\"\n value={tier.name}\n onChange={(name) => updateTier({ name })}\n />\n <TextField\n label=\"Price\"\n value={tier.price}\n placeholder=\"$29/mo\"\n onChange={(price) => updateTier({ price })}\n />\n <TextField\n label=\"Description\"\n value={tier.description}\n multiline\n onChange={(description) => updateTier({ description })}\n />\n <TextField\n label=\"Features (one per line)\"\n value={(tier.features ?? []).join(\"\\n\")}\n multiline\n onChange={(value) =>\n updateTier({\n features: value\n .split(\"\\n\")\n .map((f) => f.trim())\n .filter(Boolean),\n })\n }\n />\n <TextField\n label=\"Button text\"\n value={tier.buttonCaption}\n onChange={(buttonCaption) => updateTier({ buttonCaption })}\n />\n <TextField\n label=\"Button link\"\n value={tier.buttonAction}\n onChange={(buttonAction) => updateTier({ buttonAction })}\n />\n <ToggleField\n label=\"Highlight this tier\"\n value={tier.highlighted}\n onChange={(highlighted) => updateTier({ highlighted })}\n />\n <button\n type=\"button\"\n className=\"self-start text-xs font-medium text-destructive hover:underline\"\n onClick={remove}\n >\n Remove tier\n </button>\n </>\n )}\n />\n </FieldGroup>\n </div>\n );\n}\n","import type { PricingSettings } from \"./settings\";\n\nexport const pricingDefaults: Partial<PricingSettings> = {\n title: \"Simple, transparent pricing\",\n headerAlignment: \"center\",\n tiers: [\n {\n name: \"Starter\",\n price: \"$0/mo\",\n description: \"For hobby sites and side projects.\",\n features: [\"1 website\", \"FrontLit branding\", \"Community support\"],\n buttonCaption: \"Get started\",\n buttonAction: \"/help\",\n },\n {\n name: \"Pro\",\n price: \"$29/mo\",\n description: \"For growing businesses that need more.\",\n features: [\"5 websites\", \"Custom domain\", \"Blog + Email\", \"Priority support\"],\n buttonCaption: \"Talk to us\",\n buttonAction: \"/help\",\n highlighted: true,\n },\n {\n name: \"Business\",\n price: \"$79/mo\",\n description: \"For teams that need scale and control.\",\n features: [\n \"Unlimited websites\",\n \"Help desk & chatbot\",\n \"Team seats\",\n \"Dedicated support\",\n ],\n buttonCaption: \"Contact sales\",\n buttonAction: \"/help\",\n },\n ],\n};\n","import type { Widget } from \"../../models\";\nimport { pricingMetadata } from \"./metadata\";\nimport { PricingWidget } from \"./widget\";\nimport { PricingEditor } from \"./editor\";\nimport { pricingDefaults } from \"./defaults\";\nimport type { PricingSettings } from \"./settings\";\n\nexport * from \"./settings\";\n\nexport const Pricing: Widget<PricingSettings> = {\n metadata: pricingMetadata,\n widget: PricingWidget,\n editor: PricingEditor,\n getDefaultSettings: () => pricingDefaults,\n layouts: [\n { id: \"grid\", name: \"Grid\" },\n { id: \"stacked\", name: \"Stacked\" },\n { id: \"highlight\", name: \"Highlight\" },\n ],\n};\n","import type { WidgetMetadata } from \"../../models\";\n\nexport const bannerMetadata: WidgetMetadata = {\n name: \"banner\",\n displayName: \"Banner\",\n description: \"A strong, punchy call-to-action strip.\",\n compatibleWith: [\"site\", \"landing\", \"blog\", \"post\", \"custom\"],\n};\n","import React from \"react\";\nimport clsx from \"clsx\";\nimport type { ThemeStyle, WidgetProps } from \"../../models\";\nimport type { BannerSettings } from \"./settings\";\nimport { NavLink, TextRenderer } from \"../../components\";\nimport {\n Button,\n Header1,\n PageCard,\n PageCardContent,\n Section,\n Subheader1,\n} from \"../../primitives\";\n\nexport function BannerWidget({\n settings: {\n title,\n description,\n buttonCaption,\n buttonAction,\n secondaryButtonCaption,\n secondaryButtonAction,\n contentAlignment = \"center\",\n layout = \"stacked\",\n cssId,\n maxWidth,\n verticalPadding,\n background,\n },\n state: { theme },\n nextTheme,\n}: WidgetProps<BannerSettings>) {\n const overriddenTheme: ThemeStyle = JSON.parse(JSON.stringify(theme.theme));\n overriddenTheme.structure.page.width = maxWidth || theme.theme.structure.page.width;\n overriddenTheme.structure.section.padding.y =\n verticalPadding || theme.theme.structure.section.padding.y;\n\n const isCentered = contentAlignment === \"center\";\n const isSplit = layout === \"split\";\n const isBoxed = layout === \"boxed\";\n\n const heading = (\n <>\n <Header1 theme={overriddenTheme}>{title}</Header1>\n {description && (\n <Subheader1 theme={overriddenTheme} component=\"span\">\n <TextRenderer json={description} theme={overriddenTheme} />\n </Subheader1>\n )}\n </>\n );\n\n const buttons = (buttonAction || secondaryButtonAction) && (\n <div\n className={clsx(\n \"flex flex-col md:!flex-row gap-2 w-full md:w-auto\",\n isSplit ? \"shrink-0\" : \"mt-2\",\n !isSplit && isCentered ? \"md:!justify-center\" : \"\",\n )}\n >\n {buttonAction && buttonCaption && (\n <NavLink href={buttonAction}>\n <Button theme={overriddenTheme} className=\"w-full md:min-w-[150px]\">\n {buttonCaption}\n </Button>\n </NavLink>\n )}\n {secondaryButtonAction && secondaryButtonCaption && (\n <NavLink href={secondaryButtonAction}>\n <Button\n theme={overriddenTheme}\n variant=\"secondary\"\n className=\"w-full md:min-w-[150px]\"\n >\n {secondaryButtonCaption}\n </Button>\n </NavLink>\n )}\n </div>\n );\n\n const content = isSplit ? (\n <div className=\"flex flex-col gap-6 md:!flex-row md:items-center md:justify-between\">\n <div className=\"flex flex-col items-start gap-4\">{heading}</div>\n {buttons}\n </div>\n ) : (\n <div\n className={clsx(\n \"flex flex-col gap-4\",\n isCentered ? \"items-center text-center\" : \"items-start\",\n )}\n >\n {heading}\n {buttons}\n </div>\n );\n\n return (\n <Section\n theme={overriddenTheme}\n id={cssId}\n background={background}\n nextTheme={nextTheme}\n >\n {isBoxed ? (\n <PageCard theme={overriddenTheme} className=\"mx-auto max-w-3xl\">\n <PageCardContent\n theme={overriddenTheme}\n className=\"items-center p-8 text-center md:p-12\"\n >\n {content}\n </PageCardContent>\n </PageCard>\n ) : (\n content\n )}\n </Section>\n );\n}\n","import React from \"react\";\nimport type { WidgetEditorProps } from \"../../models\";\nimport type { BannerSettings } from \"./settings\";\nimport { Editor, emptyDoc } from \"@frontlit/text-editor\";\nimport { FieldGroup, SelectField, TextField } from \"../_shared/fields\";\n\nexport function BannerEditor({\n settings,\n onChange,\n}: WidgetEditorProps<BannerSettings>) {\n const update = (partial: Partial<BannerSettings>) =>\n onChange({ ...settings, ...partial });\n\n return (\n <div className=\"flex flex-col\">\n <FieldGroup title=\"Content\">\n <TextField\n label=\"Title\"\n value={settings.title}\n onChange={(title) => update({ title })}\n />\n <div className=\"flex flex-col gap-1 text-sm\">\n <span className=\"font-medium text-foreground\">Description</span>\n <Editor\n initialContent={settings.description ?? emptyDoc}\n onChange={(description: any) => update({ description })}\n showToolbar={false}\n editorClassName=\"min-h-[80px]\"\n />\n </div>\n </FieldGroup>\n <FieldGroup title=\"Calls to action\">\n <TextField\n label=\"Primary button text\"\n value={settings.buttonCaption}\n onChange={(buttonCaption) => update({ buttonCaption })}\n />\n <TextField\n label=\"Primary button link\"\n value={settings.buttonAction}\n onChange={(buttonAction) => update({ buttonAction })}\n />\n <TextField\n label=\"Secondary button text\"\n value={settings.secondaryButtonCaption}\n onChange={(secondaryButtonCaption) => update({ secondaryButtonCaption })}\n />\n <TextField\n label=\"Secondary button link\"\n value={settings.secondaryButtonAction}\n onChange={(secondaryButtonAction) => update({ secondaryButtonAction })}\n />\n </FieldGroup>\n <FieldGroup title=\"Layout\">\n <SelectField\n label=\"Content alignment\"\n value={settings.contentAlignment ?? \"center\"}\n onChange={(contentAlignment) => update({ contentAlignment })}\n options={[\n { label: \"Left\", value: \"left\" },\n { label: \"Center\", value: \"center\" },\n ]}\n />\n </FieldGroup>\n </div>\n );\n}\n","import type { BannerSettings } from \"./settings\";\n\nexport const bannerDefaults: Partial<BannerSettings> = {\n title: \"Ready to launch your site?\",\n buttonCaption: \"Contact us\",\n buttonAction: \"/help\",\n secondaryButtonCaption: \"Read the docs\",\n secondaryButtonAction: \"/docs\",\n contentAlignment: \"center\",\n};\n","import type { Widget } from \"../../models\";\nimport { bannerMetadata } from \"./metadata\";\nimport { BannerWidget } from \"./widget\";\nimport { BannerEditor } from \"./editor\";\nimport { bannerDefaults } from \"./defaults\";\nimport type { BannerSettings } from \"./settings\";\n\nexport * from \"./settings\";\n\nexport const Banner: Widget<BannerSettings> = {\n metadata: bannerMetadata,\n widget: BannerWidget,\n editor: BannerEditor,\n getDefaultSettings: () => bannerDefaults,\n layouts: [\n { id: \"stacked\", name: \"Stacked\" },\n { id: \"split\", name: \"Split\" },\n { id: \"boxed\", name: \"Boxed\" },\n ],\n};\n","import type { WidgetMetadata } from \"../../models\";\n\nexport const emailFormMetadata: WidgetMetadata = {\n name: \"email-form\",\n displayName: \"Email signup\",\n description: \"An email signup form with a title, description and email input.\",\n compatibleWith: [\"site\", \"landing\", \"blog\", \"post\", \"custom\"],\n};\n","import React, { useState } from \"react\";\nimport clsx from \"clsx\";\nimport type { PageData, ThemeStyle, WidgetProps } from \"../../models\";\nimport type { EmailFormSettings } from \"./settings\";\nimport { TextRenderer } from \"../../components\";\nimport {\n Button,\n Header1,\n Input,\n Label,\n Section,\n Subheader1,\n Text2,\n} from \"../../primitives\";\n\n/**\n * Captures a lead via FrontLit's public, unauthenticated lead-capture\n * endpoint (architecture.md §10.2), which enqueues a SendLit contact-sync\n * job and returns immediately — capture never depends on SendLit being\n * reachable. Falls back to a local-only success (no network call) when the\n * page isn't wired to a live team/API, e.g. an isolated component preview.\n */\nasync function subscribeEmail(\n email: string,\n pageData: PageData,\n): Promise<{ success: boolean }> {\n if (!pageData.teamId || !pageData.publicApiBaseUrl) {\n await new Promise((resolve) => setTimeout(resolve, 600));\n return { success: Boolean(email) };\n }\n\n try {\n const res = await fetch(\n `${pageData.publicApiBaseUrl}/public/${pageData.teamId}/leads`,\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n email,\n sourcePath: pageData.pageSlug ? `/${pageData.pageSlug}` : undefined,\n }),\n },\n );\n if (!res.ok) return { success: false };\n const body = (await res.json()) as { accepted: boolean };\n return { success: body.accepted };\n } catch {\n return { success: false };\n }\n}\n\nexport function EmailFormWidget({\n settings: {\n title,\n description,\n buttonCaption = \"Subscribe\",\n successMessage = \"Thanks for subscribing!\",\n alignment = \"left\",\n layout = \"stacked\",\n cssId,\n maxWidth,\n verticalPadding,\n background,\n },\n state: { theme },\n pageData,\n editing,\n nextTheme,\n}: WidgetProps<EmailFormSettings>) {\n const overriddenTheme: ThemeStyle = JSON.parse(JSON.stringify(theme.theme));\n overriddenTheme.structure.page.width = maxWidth || theme.theme.structure.page.width;\n overriddenTheme.structure.section.padding.y =\n verticalPadding || theme.theme.structure.section.padding.y;\n\n const [email, setEmail] = useState(\"\");\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [success, setSuccess] = useState(false);\n\n const isCentered = alignment === \"center\";\n\n const onSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (editing) return;\n\n setIsSubmitting(true);\n try {\n const result = await subscribeEmail(email, pageData);\n if (result.success) {\n setSuccess(true);\n setEmail(\"\");\n }\n } finally {\n setIsSubmitting(false);\n }\n };\n\n if (layout === \"inline\") {\n // Single-row minimal prompt — title/description beside a bare\n // input+button, no label. Common for a compact in-page nudge\n // rather than a dedicated email section.\n return (\n <Section\n theme={overriddenTheme}\n id={cssId}\n background={background}\n nextTheme={nextTheme}\n >\n <form\n onSubmit={onSubmit}\n className=\"flex flex-col items-start gap-4 md:!flex-row md:items-center md:justify-between\"\n >\n <div className=\"flex flex-col gap-1\">\n <Header1 theme={overriddenTheme} className=\"text-xl\">\n {title}\n </Header1>\n {description && (\n <Subheader1 theme={overriddenTheme} component=\"span\">\n <TextRenderer json={description} theme={overriddenTheme} />\n </Subheader1>\n )}\n </div>\n {success ? (\n <Text2 theme={overriddenTheme}>{successMessage}</Text2>\n ) : (\n <div className=\"flex w-full flex-col gap-2 sm:!flex-row md:w-auto md:shrink-0\">\n <Input\n theme={overriddenTheme}\n id=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"Enter your email\"\n type=\"email\"\n required\n className=\"md:w-64\"\n />\n <Button\n theme={overriddenTheme}\n type=\"submit\"\n disabled={!editing && (isSubmitting || !email)}\n >\n {buttonCaption}\n </Button>\n </div>\n )}\n </form>\n </Section>\n );\n }\n\n return (\n <Section\n theme={overriddenTheme}\n id={cssId}\n background={background}\n nextTheme={nextTheme}\n >\n <form\n onSubmit={onSubmit}\n className={clsx(\n \"flex gap-4\",\n layout === \"split\"\n ? \"flex-col md:!flex-row md:items-center md:justify-between md:gap-10\"\n : clsx(\"flex-col\", isCentered ? \"items-center text-center\" : \"items-start\"),\n )}\n >\n <div\n className={clsx(\n \"flex flex-col gap-4\",\n layout === \"split\" ? \"items-start\" : \"contents\",\n )}\n >\n <Header1 theme={overriddenTheme}>{title}</Header1>\n {description && (\n <Subheader1 theme={overriddenTheme} component=\"span\">\n <TextRenderer json={description} theme={overriddenTheme} />\n </Subheader1>\n )}\n </div>\n {success ? (\n <Text2 theme={overriddenTheme}>{successMessage}</Text2>\n ) : (\n <div\n className={clsx(\n \"flex flex-col md:!flex-row md:!items-end gap-2\",\n layout === \"split\" ? \"md:shrink-0\" : \"w-full\",\n layout !== \"split\" && isCentered ? \"md:!justify-center\" : \"\",\n )}\n >\n <div className=\"flex flex-col gap-1 items-start\">\n <Label theme={overriddenTheme} htmlFor=\"email\">\n Email\n </Label>\n <Input\n theme={overriddenTheme}\n id=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"Enter your email\"\n type=\"email\"\n required\n />\n </div>\n <Button\n theme={overriddenTheme}\n type=\"submit\"\n disabled={!editing && (isSubmitting || !email)}\n >\n {buttonCaption}\n </Button>\n </div>\n )}\n </form>\n </Section>\n );\n}\n","import React from \"react\";\nimport type { WidgetEditorProps } from \"../../models\";\nimport type { EmailFormSettings } from \"./settings\";\nimport { Editor, emptyDoc } from \"@frontlit/text-editor\";\nimport { FieldGroup, SelectField, TextField } from \"../_shared/fields\";\n\nexport function EmailFormEditor({\n settings,\n onChange,\n}: WidgetEditorProps<EmailFormSettings>) {\n const update = (partial: Partial<EmailFormSettings>) =>\n onChange({ ...settings, ...partial });\n\n return (\n <div className=\"flex flex-col\">\n <FieldGroup title=\"Content\">\n <TextField\n label=\"Title\"\n value={settings.title}\n onChange={(title) => update({ title })}\n />\n <div className=\"flex flex-col gap-1 text-sm\">\n <span className=\"font-medium text-foreground\">Description</span>\n <Editor\n initialContent={settings.description ?? emptyDoc}\n onChange={(description: any) => update({ description })}\n showToolbar={false}\n editorClassName=\"min-h-[80px]\"\n />\n </div>\n </FieldGroup>\n <FieldGroup title=\"Form\">\n <TextField\n label=\"Button text\"\n value={settings.buttonCaption}\n onChange={(buttonCaption) => update({ buttonCaption })}\n />\n <TextField\n label=\"Success message\"\n value={settings.successMessage}\n onChange={(successMessage) => update({ successMessage })}\n />\n </FieldGroup>\n <FieldGroup title=\"Layout\">\n <SelectField\n label=\"Alignment\"\n value={settings.alignment ?? \"left\"}\n onChange={(alignment) => update({ alignment })}\n options={[\n { label: \"Left\", value: \"left\" },\n { label: \"Center\", value: \"center\" },\n ]}\n />\n </FieldGroup>\n </div>\n );\n}\n","import type { EmailFormSettings } from \"./settings\";\n\nexport const emailFormDefaults: Partial<EmailFormSettings> = {\n title: \"Get product updates in your inbox\",\n buttonCaption: \"Subscribe\",\n successMessage: \"Thanks for subscribing! Check your inbox soon.\",\n alignment: \"left\",\n};\n","import type { Widget } from \"../../models\";\nimport { emailFormMetadata } from \"./metadata\";\nimport { EmailFormWidget } from \"./widget\";\nimport { EmailFormEditor } from \"./editor\";\nimport { emailFormDefaults } from \"./defaults\";\nimport type { EmailFormSettings } from \"./settings\";\n\nexport * from \"./settings\";\n\nexport const EmailForm: Widget<EmailFormSettings> = {\n metadata: emailFormMetadata,\n widget: EmailFormWidget,\n editor: EmailFormEditor,\n getDefaultSettings: () => emailFormDefaults,\n layouts: [\n { id: \"stacked\", name: \"Stacked\" },\n { id: \"split\", name: \"Split\" },\n { id: \"inline\", name: \"Inline\" },\n ],\n};\n","import type { WidgetMetadata } from \"../../models\";\n\nexport const supportFormMetadata: WidgetMetadata = {\n name: \"support-form\",\n displayName: \"Support form\",\n description:\n \"Raises a support ticket, suggesting matching help articles before the visitor submits.\",\n compatibleWith: [\"site\", \"landing\", \"custom\"],\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport clsx from \"clsx\";\nimport type { PageData, ThemeStyle, WidgetProps } from \"../../models\";\nimport type { SupportFormSettings } from \"./settings\";\nimport { TextRenderer } from \"../../components\";\nimport {\n Button,\n Header1,\n Input,\n Label,\n Section,\n Subheader1,\n Text2,\n} from \"../../primitives\";\nimport { cn } from \"../../primitives/lib/utils\";\n\ninterface DocumentationSuggestion {\n documentId: string;\n slug: string;\n title: string | null;\n kind?: \"blog\" | \"doc\" | \"changelog\";\n}\n\nfunction suggestionHref(item: DocumentationSuggestion) {\n if (item.kind === \"blog\") return `/blog/${item.slug}`;\n if (item.kind === \"changelog\") return `/changelog`;\n return `/docs/${item.slug}`;\n}\n\n/** Documentation deflection (architecture.md §6.4/§11.2): searches the\n * team's published docs as the visitor types a subject, before they ever\n * submit a ticket. No-ops in isolated previews with no live team/API. */\nasync function searchDocumentation(\n query: string,\n pageData: PageData,\n): Promise<DocumentationSuggestion[]> {\n if (!pageData.teamId || !pageData.publicApiBaseUrl || query.trim().length < 3)\n return [];\n\n try {\n const res = await fetch(\n `${pageData.publicApiBaseUrl}/public/${pageData.teamId}/content/documentation/search?q=${encodeURIComponent(query)}&k=3`,\n );\n if (!res.ok) return [];\n const body = (await res.json()) as {\n items: DocumentationSuggestion[];\n };\n const seen = new Set<string>();\n return body.items.filter((item) =>\n seen.has(item.documentId) ? false : (seen.add(item.documentId), true),\n );\n } catch {\n return [];\n }\n}\n\n/** Raises a support ticket via FrontLit's public, unauthenticated ticket\n * endpoint (architecture.md §11.2) — one of the three submission doors,\n * source: \"form\". Falls back to a local-only success in isolated previews. */\nasync function submitTicket(\n input: { subject: string; message: string; email: string; name?: string },\n pageData: PageData,\n): Promise<{ success: boolean }> {\n if (!pageData.teamId || !pageData.publicApiBaseUrl) {\n await new Promise((resolve) => setTimeout(resolve, 600));\n return { success: true };\n }\n\n try {\n const res = await fetch(\n `${pageData.publicApiBaseUrl}/public/${pageData.teamId}/tickets`,\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ ...input, source: \"form\" }),\n },\n );\n return { success: res.ok };\n } catch {\n return { success: false };\n }\n}\n\nexport function SupportFormWidget({\n settings: {\n title,\n description,\n buttonCaption = \"Submit ticket\",\n successMessage = \"Thanks — we've got your ticket and will reply by email soon.\",\n alignment = \"left\",\n cssId,\n maxWidth,\n verticalPadding,\n background,\n },\n state: { theme },\n pageData,\n editing,\n nextTheme,\n}: WidgetProps<SupportFormSettings>) {\n const overriddenTheme: ThemeStyle = JSON.parse(JSON.stringify(theme.theme));\n overriddenTheme.structure.page.width = maxWidth || theme.theme.structure.page.width;\n overriddenTheme.structure.section.padding.y =\n verticalPadding || theme.theme.structure.section.padding.y;\n\n const [subject, setSubject] = useState(\"\");\n const [message, setMessage] = useState(\"\");\n const [email, setEmail] = useState(\"\");\n const [name, setName] = useState(\"\");\n const [suggestions, setSuggestions] = useState<DocumentationSuggestion[]>([]);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [success, setSuccess] = useState(false);\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n if (editing) return;\n if (debounceRef.current) clearTimeout(debounceRef.current);\n debounceRef.current = setTimeout(() => {\n searchDocumentation(subject, pageData).then(setSuggestions);\n }, 400);\n return () => {\n if (debounceRef.current) clearTimeout(debounceRef.current);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [subject]);\n\n const onSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (editing) return;\n\n setIsSubmitting(true);\n try {\n const result = await submitTicket(\n { subject, message, email, name: name || undefined },\n pageData,\n );\n if (result.success) {\n setSuccess(true);\n setSubject(\"\");\n setMessage(\"\");\n setEmail(\"\");\n setName(\"\");\n setSuggestions([]);\n }\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const isCentered = alignment === \"center\";\n const inputStyles = overriddenTheme.interactives.input;\n const inputTypography = overriddenTheme.typography.input;\n const cardStyles = overriddenTheme.interactives.card;\n\n return (\n <Section\n theme={overriddenTheme}\n id={cssId}\n background={background}\n nextTheme={nextTheme}\n >\n <div\n className={clsx(\n \"flex flex-col gap-4\",\n isCentered ? \"items-center text-center\" : \"items-start\",\n )}\n >\n <Header1 theme={overriddenTheme}>{title}</Header1>\n {description && (\n <Subheader1 theme={overriddenTheme} component=\"span\">\n <TextRenderer json={description} theme={overriddenTheme} />\n </Subheader1>\n )}\n </div>\n\n {success ? (\n <Text2 theme={overriddenTheme} className=\"mt-4\">\n {successMessage}\n </Text2>\n ) : (\n <form onSubmit={onSubmit} className=\"mt-4 flex w-full max-w-lg flex-col gap-3\">\n <div className=\"flex flex-col gap-1 items-start\">\n <Label theme={overriddenTheme} htmlFor=\"subject\">\n Subject\n </Label>\n <Input\n theme={overriddenTheme}\n id=\"subject\"\n value={subject}\n onChange={(e) => setSubject(e.target.value)}\n placeholder=\"What do you need help with?\"\n required\n className=\"w-full\"\n />\n </div>\n\n {suggestions.length > 0 && (\n <div\n className={cn(\n \"rounded-lg border border-border bg-card p-3 text-sm text-card-foreground shadow-sm\",\n cardStyles.border?.width,\n cardStyles.border?.radius,\n cardStyles.border?.style,\n cardStyles.shadow,\n )}\n >\n <p className=\"mb-1 font-medium\">This might help:</p>\n <ul className=\"list-inside list-disc\">\n {suggestions.map((doc) => (\n <li key={doc.documentId}>\n <a\n href={suggestionHref(doc)}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"underline\"\n >\n {doc.title ?? doc.slug}\n </a>\n </li>\n ))}\n </ul>\n </div>\n )}\n\n <div className=\"flex flex-col gap-1 items-start\">\n <Label theme={overriddenTheme} htmlFor=\"message\">\n Message\n </Label>\n <textarea\n id=\"message\"\n value={message}\n onChange={(e) => setMessage(e.target.value)}\n placeholder=\"Describe the issue…\"\n required\n rows={4}\n className={cn(\n \"w-full border border-input bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n inputTypography.fontFamily,\n inputTypography.fontSize,\n inputTypography.fontWeight,\n inputTypography.lineHeight,\n inputTypography.letterSpacing,\n inputStyles.border?.width,\n inputStyles.border?.style,\n inputStyles.border?.radius,\n inputStyles.shadow,\n inputStyles.custom,\n )}\n />\n </div>\n\n <div className=\"flex flex-col gap-3 sm:!flex-row\">\n <div className=\"flex flex-1 flex-col gap-1 items-start\">\n <Label theme={overriddenTheme} htmlFor=\"email\">\n Email\n </Label>\n <Input\n theme={overriddenTheme}\n id=\"email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"you@example.com\"\n required\n className=\"w-full\"\n />\n </div>\n <div className=\"flex flex-1 flex-col gap-1 items-start\">\n <Label theme={overriddenTheme} htmlFor=\"name\">\n Name (optional)\n </Label>\n <Input\n theme={overriddenTheme}\n id=\"name\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"Your name\"\n className=\"w-full\"\n />\n </div>\n </div>\n\n <Button\n theme={overriddenTheme}\n type=\"submit\"\n disabled={!editing && (isSubmitting || !subject || !message || !email)}\n className=\"self-start\"\n >\n {buttonCaption}\n </Button>\n </form>\n )}\n </Section>\n );\n}\n","import React from \"react\";\nimport type { WidgetEditorProps } from \"../../models\";\nimport type { SupportFormSettings } from \"./settings\";\nimport { Editor, emptyDoc } from \"@frontlit/text-editor\";\nimport { FieldGroup, SelectField, TextField } from \"../_shared/fields\";\n\nexport function SupportFormEditor({\n settings,\n onChange,\n}: WidgetEditorProps<SupportFormSettings>) {\n const update = (partial: Partial<SupportFormSettings>) =>\n onChange({ ...settings, ...partial });\n\n return (\n <div className=\"flex flex-col\">\n <FieldGroup title=\"Content\">\n <TextField\n label=\"Title\"\n value={settings.title}\n onChange={(title) => update({ title })}\n />\n <div className=\"flex flex-col gap-1 text-sm\">\n <span className=\"font-medium text-foreground\">Description</span>\n <Editor\n initialContent={settings.description ?? emptyDoc}\n onChange={(description: any) => update({ description })}\n showToolbar={false}\n editorClassName=\"min-h-[80px]\"\n />\n </div>\n </FieldGroup>\n <FieldGroup title=\"Form\">\n <TextField\n label=\"Button text\"\n value={settings.buttonCaption}\n onChange={(buttonCaption) => update({ buttonCaption })}\n />\n <TextField\n label=\"Success message\"\n value={settings.successMessage}\n onChange={(successMessage) => update({ successMessage })}\n />\n </FieldGroup>\n <FieldGroup title=\"Layout\">\n <SelectField\n label=\"Alignment\"\n value={settings.alignment ?? \"left\"}\n onChange={(alignment) => update({ alignment })}\n options={[\n { label: \"Left\", value: \"left\" },\n { label: \"Center\", value: \"center\" },\n ]}\n />\n </FieldGroup>\n </div>\n );\n}\n","import type { SupportFormSettings } from \"./settings\";\n\nexport const supportFormDefaults: Partial<SupportFormSettings> = {\n title: \"Need help?\",\n buttonCaption: \"Submit ticket\",\n successMessage: \"Thanks — we've got your ticket and will reply by email soon.\",\n alignment: \"left\",\n};\n","import type { Widget } from \"../../models\";\nimport { supportFormMetadata } from \"./metadata\";\nimport { SupportFormWidget } from \"./widget\";\nimport { SupportFormEditor } from \"./editor\";\nimport { supportFormDefaults } from \"./defaults\";\nimport type { SupportFormSettings } from \"./settings\";\n\nexport * from \"./settings\";\n\nexport const SupportForm: Widget<SupportFormSettings> = {\n metadata: supportFormMetadata,\n widget: SupportFormWidget,\n editor: SupportFormEditor,\n getDefaultSettings: () => supportFormDefaults,\n layouts: [{ id: \"stacked\", name: \"Stacked\" }],\n};\n","import type { WidgetMetadata } from \"../../models\";\n\nexport const footerMetadata: WidgetMetadata = {\n name: \"footer\",\n displayName: \"Footer\",\n description: \"The site footer, pinned to the bottom of every page.\",\n compatibleWith: [\"site\", \"landing\", \"blog\", \"post\", \"custom\"],\n};\n","import React from \"react\";\nimport type { WidgetProps, ThemeStyle } from \"../../models\";\nimport type { FooterSettings } from \"./settings\";\nimport { NavLink } from \"../../components\";\nimport {\n Caption,\n Header3,\n Header4,\n Link as PrimitiveLink,\n Section,\n Text2,\n} from \"../../primitives\";\n\nexport function FooterWidget({\n settings: {\n logoText,\n tagline,\n columns = [],\n copyrightText,\n layout = \"columns\",\n cssId,\n maxWidth,\n verticalPadding,\n background,\n },\n state: { theme },\n nextTheme,\n}: WidgetProps<FooterSettings>) {\n const overriddenTheme: ThemeStyle = JSON.parse(JSON.stringify(theme.theme));\n overriddenTheme.structure.page.width = maxWidth || theme.theme.structure.page.width;\n overriddenTheme.structure.section.padding.y =\n verticalPadding || theme.theme.structure.section.padding.y;\n\n return (\n <Section\n theme={overriddenTheme}\n component=\"footer\"\n id={cssId}\n background={background}\n nextTheme={nextTheme}\n className=\"border-t\"\n >\n {layout === \"minimal\" ? (\n <div className=\"flex w-full flex-wrap items-center justify-between gap-4\">\n {logoText && <Header4 theme={overriddenTheme}>{logoText}</Header4>}\n <div className=\"flex flex-wrap items-center gap-x-6 gap-y-2\">\n {columns.flatMap((column) =>\n column.links.map((link) => (\n <NavLink\n key={`${column.id}-${link.id}`}\n href={link.href}\n className=\"no-underline\"\n >\n <PrimitiveLink theme={overriddenTheme} className=\"text-xs\">\n {link.label}\n </PrimitiveLink>\n </NavLink>\n )),\n )}\n {copyrightText && (\n <Caption theme={overriddenTheme}>{copyrightText}</Caption>\n )}\n </div>\n </div>\n ) : layout === \"centered\" ? (\n <div className=\"flex w-full flex-col items-center gap-6 text-center\">\n <div className=\"flex max-w-sm flex-col items-center gap-3\">\n {logoText && <Header3 theme={overriddenTheme}>{logoText}</Header3>}\n {tagline && <Text2 theme={overriddenTheme}>{tagline}</Text2>}\n </div>\n <div className=\"flex flex-wrap justify-center gap-x-6 gap-y-2\">\n {columns.flatMap((column) =>\n column.links.map((link) => (\n <NavLink\n key={`${column.id}-${link.id}`}\n href={link.href}\n className=\"no-underline\"\n >\n <PrimitiveLink theme={overriddenTheme} className=\"text-xs\">\n {link.label}\n </PrimitiveLink>\n </NavLink>\n )),\n )}\n </div>\n </div>\n ) : (\n <div className=\"flex w-full flex-col gap-8 lg:!flex-row lg:justify-between\">\n <div className=\"flex max-w-sm flex-col gap-3\">\n {logoText && <Header3 theme={overriddenTheme}>{logoText}</Header3>}\n {tagline && <Text2 theme={overriddenTheme}>{tagline}</Text2>}\n </div>\n <div className=\"flex flex-col flex-wrap gap-8 lg:!flex-row\">\n {columns.map((column) => (\n <div key={column.id} className=\"flex flex-col gap-3 lg:min-w-[140px]\">\n <Header4 theme={overriddenTheme} className=\"text-sm\">\n {column.title}\n </Header4>\n <div className=\"flex flex-col gap-2\">\n {column.links.map((link) => (\n <NavLink key={link.id} href={link.href} className=\"no-underline\">\n <PrimitiveLink theme={overriddenTheme} className=\"text-xs\">\n {link.label}\n </PrimitiveLink>\n </NavLink>\n ))}\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n {copyrightText && layout !== \"minimal\" && (\n <div\n className={\n layout === \"centered\"\n ? \"mt-8 border-t pt-6 text-center\"\n : \"mt-8 border-t pt-6\"\n }\n >\n <Caption theme={overriddenTheme}>{copyrightText}</Caption>\n </div>\n )}\n </Section>\n );\n}\n","import React from \"react\";\nimport type { WidgetEditorProps } from \"../../models\";\nimport type { FooterColumn, FooterLink, FooterSettings } from \"./settings\";\nimport { generateUniqueId } from \"../../utils\";\nimport { FieldGroup, ListField, TextField } from \"../_shared/fields\";\n\nexport function FooterEditor({\n settings,\n onChange,\n}: WidgetEditorProps<FooterSettings>) {\n const update = (partial: Partial<FooterSettings>) =>\n onChange({ ...settings, ...partial });\n\n return (\n <div className=\"flex flex-col\">\n <FieldGroup title=\"Brand\">\n <TextField\n label=\"Logo text\"\n value={settings.logoText}\n onChange={(logoText) => update({ logoText })}\n />\n <TextField\n label=\"Tagline\"\n value={settings.tagline}\n multiline\n onChange={(tagline) => update({ tagline })}\n />\n </FieldGroup>\n <FieldGroup title=\"Link columns\">\n <ListField<FooterColumn>\n label=\"Columns\"\n items={settings.columns ?? []}\n onChange={(columns) => update({ columns })}\n createItem={() => ({\n id: generateUniqueId(),\n title: \"New column\",\n links: [],\n })}\n addLabel=\"Add column\"\n renderItem={(column, updateColumn, removeColumn) => (\n <>\n <TextField\n label=\"Column title\"\n value={column.title}\n onChange={(title) => updateColumn({ title })}\n />\n <ListField<FooterLink>\n label=\"Links\"\n items={column.links}\n onChange={(links) => updateColumn({ links })}\n createItem={() => ({\n id: generateUniqueId(),\n label: \"New link\",\n href: \"#\",\n })}\n addLabel=\"Add link\"\n renderItem={(link, updateLink, removeLink) => (\n <>\n <TextField\n label=\"Label\"\n value={link.label}\n onChange={(label) => updateLink({ label })}\n />\n <TextField\n label=\"Link\"\n value={link.href}\n onChange={(href) => updateLink({ href })}\n />\n <button\n type=\"button\"\n className=\"self-start text-xs text-destructive\"\n onClick={removeLink}\n >\n Remove link\n </button>\n </>\n )}\n />\n <button\n type=\"button\"\n className=\"self-start text-xs text-destructive\"\n onClick={removeColumn}\n >\n Remove column\n </button>\n </>\n )}\n />\n </FieldGroup>\n <FieldGroup title=\"Copyright\">\n <TextField\n label=\"Copyright text\"\n value={settings.copyrightText}\n onChange={(copyrightText) => update({ copyrightText })}\n />\n </FieldGroup>\n </div>\n );\n}\n","import type { FooterSettings } from \"./settings\";\nimport { generateUniqueId } from \"../../utils\";\n\nexport const footerDefaults: Partial<FooterSettings> = {\n logoText: \"FrontLit\",\n tagline:\n \"Build your website, publish content, support users, and grow your audience from one dashboard.\",\n columns: [\n {\n id: generateUniqueId(),\n title: \"Product\",\n links: [\n {\n id: generateUniqueId(),\n label: \"Features\",\n href: \"/#features\",\n },\n { id: generateUniqueId(), label: \"Pricing\", href: \"/#pricing\" },\n {\n id: generateUniqueId(),\n label: \"Changelog\",\n href: \"/changelog\",\n },\n ],\n },\n {\n id: generateUniqueId(),\n title: \"Resources\",\n links: [\n { id: generateUniqueId(), label: \"Blog\", href: \"/blog\" },\n { id: generateUniqueId(), label: \"Help center\", href: \"/help\" },\n { id: generateUniqueId(), label: \"Docs\", href: \"/docs\" },\n ],\n },\n {\n id: generateUniqueId(),\n title: \"Legal\",\n links: [\n {\n id: generateUniqueId(),\n label: \"Terms of use\",\n href: \"/terms\",\n },\n {\n id: generateUniqueId(),\n label: \"Privacy policy\",\n href: \"/privacy\",\n },\n ],\n },\n ],\n copyrightText: \"© FrontLit. All rights reserved.\",\n};\n","import type { Widget } from \"../../models\";\nimport { footerMetadata } from \"./metadata\";\nimport { FooterWidget } from \"./widget\";\nimport { FooterEditor } from \"./editor\";\nimport { footerDefaults } from \"./defaults\";\nimport type { FooterSettings } from \"./settings\";\n\nexport * from \"./settings\";\n\nexport const Footer: Widget<FooterSettings> = {\n metadata: footerMetadata,\n widget: FooterWidget,\n editor: FooterEditor,\n getDefaultSettings: () => footerDefaults,\n layouts: [\n { id: \"columns\", name: \"Columns\" },\n { id: \"centered\", name: \"Centered\" },\n { id: \"minimal\", name: \"Minimal\" },\n ],\n};\n","import type { WidgetMetadata } from \"../../models\";\n\nexport const richTextMetadata: WidgetMetadata = {\n name: \"rich-text\",\n displayName: \"Rich text\",\n description:\n \"A block of formatted text — paragraphs, headings, lists and links — with no title or media.\",\n compatibleWith: [\"site\", \"landing\", \"blog\", \"post\", \"custom\"],\n};\n","import React from \"react\";\nimport type { ThemeStyle, WidgetProps } from \"../../models\";\nimport type { RichTextSettings } from \"./settings\";\nimport { TextRenderer } from \"../../components\";\nimport { Section, Text1 } from \"../../primitives\";\n\nexport function RichTextWidget({\n settings: { text, alignment = \"left\", cssId, maxWidth, verticalPadding, background },\n state: { theme },\n nextTheme,\n}: WidgetProps<RichTextSettings>) {\n const overriddenTheme: ThemeStyle = JSON.parse(JSON.stringify(theme.theme));\n overriddenTheme.structure.page.width = maxWidth || theme.theme.structure.page.width;\n overriddenTheme.structure.section.padding.y =\n verticalPadding || theme.theme.structure.section.padding.y;\n\n if (!text) return null;\n\n return (\n <Section\n theme={overriddenTheme}\n id={cssId}\n background={background}\n nextTheme={nextTheme}\n >\n <div style={{ textAlign: alignment }}>\n <Text1 theme={overriddenTheme} component=\"span\">\n <TextRenderer json={text} theme={overriddenTheme} />\n </Text1>\n </div>\n </Section>\n );\n}\n","import React from \"react\";\nimport type { WidgetEditorProps } from \"../../models\";\nimport type { RichTextSettings } from \"./settings\";\nimport { Editor, emptyDoc } from \"@frontlit/text-editor\";\nimport { FieldGroup, SelectField } from \"../_shared/fields\";\n\nexport function RichTextEditor({\n settings,\n onChange,\n}: WidgetEditorProps<RichTextSettings>) {\n const update = (partial: Partial<RichTextSettings>) =>\n onChange({ ...settings, ...partial });\n\n return (\n <div className=\"flex flex-col\">\n <FieldGroup title=\"Content\">\n <div className=\"flex flex-col gap-1 text-sm\">\n <span className=\"font-medium text-foreground\">Text</span>\n <Editor\n initialContent={settings.text ?? emptyDoc}\n onChange={(text: any) => update({ text })}\n editorClassName=\"min-h-[160px]\"\n />\n </div>\n <SelectField\n label=\"Alignment\"\n value={settings.alignment ?? \"left\"}\n onChange={(alignment) => update({ alignment })}\n options={[\n { label: \"Left\", value: \"left\" },\n { label: \"Center\", value: \"center\" },\n { label: \"Right\", value: \"right\" },\n ]}\n />\n </FieldGroup>\n </div>\n );\n}\n","import type { RichTextSettings } from \"./settings\";\n\nexport const richTextDefaults: Partial<RichTextSettings> = {\n text: {\n type: \"doc\",\n content: [\n {\n type: \"paragraph\",\n content: [\n {\n type: \"text\",\n text: \"Write anything here — an announcement, a longer explanation, or a passage of prose that doesn't need a title or media.\",\n },\n ],\n },\n ],\n },\n alignment: \"left\",\n};\n","import type { Widget } from \"../../models\";\nimport { richTextMetadata } from \"./metadata\";\nimport { RichTextWidget } from \"./widget\";\nimport { RichTextEditor } from \"./editor\";\nimport { richTextDefaults } from \"./defaults\";\nimport type { RichTextSettings } from \"./settings\";\n\nexport * from \"./settings\";\n\nexport const RichText: Widget<RichTextSettings> = {\n metadata: richTextMetadata,\n widget: RichTextWidget,\n editor: RichTextEditor,\n getDefaultSettings: () => richTextDefaults,\n};\n","import type { WidgetMetadata } from \"../../models\";\n\nexport const gridMetadata: WidgetMetadata = {\n name: \"grid\",\n displayName: \"Grid\",\n description:\n \"A header with a page-level call to action, plus a responsive grid of cards — each with its own icon or image, title, description and link.\",\n compatibleWith: [\"site\", \"landing\", \"blog\", \"post\", \"custom\"],\n};\n","import React from \"react\";\nimport clsx from \"clsx\";\nimport * as Icons from \"lucide-react\";\nimport type { LucideIcon } from \"lucide-react\";\nimport type { ThemeStyle, WidgetProps } from \"../../models\";\nimport { getMediaUrl, getMediaAlt } from \"../../models/media\";\nimport type { GridItem, GridSettings } from \"./settings\";\nimport { Image, NavLink, TextRenderer } from \"../../components\";\nimport {\n Button,\n Header1,\n Header4,\n PageCard,\n PageCardContent,\n Section,\n Subheader1,\n Text2,\n} from \"../../primitives\";\n\nfunction resolveIcon(name?: string): LucideIcon | null {\n if (!name) return null;\n return (Icons as unknown as Record<string, LucideIcon>)[name] ?? null;\n}\n\nfunction GridItemCard({ item, theme }: { item: GridItem; theme: ThemeStyle }) {\n const Icon = resolveIcon(item.icon);\n const mediaUrl = getMediaUrl(item.media);\n const mediaAlt = getMediaAlt(item.media);\n const hasMedia = Boolean(mediaUrl);\n const isOverlay = item.mediaAlignment === \"overlay\";\n const mediaFirst = item.mediaAlignment !== \"bottom\";\n\n if (isOverlay) {\n const card = (\n <PageCard theme={theme} isLink={Boolean(item.buttonAction)}>\n <div className=\"relative aspect-[4/5] w-full overflow-hidden\">\n {hasMedia && (\n <Image\n src={mediaUrl || \"\"}\n alt={mediaAlt}\n className=\"absolute inset-0\"\n width=\"w-full\"\n height=\"h-full\"\n objectFit=\"cover\"\n borderRadius={0}\n />\n )}\n <div className=\"absolute inset-0 bg-gradient-to-t from-black/70 via-black/10 to-transparent\" />\n <div className=\"absolute inset-x-0 bottom-0 p-4\">\n <Header4 theme={theme} className=\"text-white\">\n {item.title}\n </Header4>\n </div>\n </div>\n </PageCard>\n );\n\n return item.buttonAction ? (\n <NavLink href={item.buttonAction} className=\"block\">\n {card}\n </NavLink>\n ) : (\n card\n );\n }\n\n const media = hasMedia ? (\n <div className=\"overflow-hidden rounded-md\">\n <Image src={mediaUrl || \"\"} alt={mediaAlt} />\n </div>\n ) : Icon ? (\n <div className=\"flex h-10 w-10 items-center justify-center rounded-md bg-primary/10 text-primary\">\n <Icon className=\"h-5 w-5\" />\n </div>\n ) : null;\n\n const text = (\n <div className=\"flex flex-col gap-2\">\n <Header4 theme={theme}>{item.title}</Header4>\n {item.description && <Text2 theme={theme}>{item.description}</Text2>}\n {item.buttonAction && item.buttonCaption && (\n <NavLink href={item.buttonAction} className=\"mt-2\">\n <Button theme={theme} variant=\"secondary\" size=\"sm\">\n {item.buttonCaption}\n </Button>\n </NavLink>\n )}\n </div>\n );\n\n return (\n <PageCard theme={theme}>\n <PageCardContent theme={theme} className=\"flex h-full flex-col gap-3\">\n {mediaFirst ? (\n <>\n {media}\n {text}\n </>\n ) : (\n <>\n {text}\n {media}\n </>\n )}\n </PageCardContent>\n </PageCard>\n );\n}\n\nexport function GridWidget({\n settings: {\n title,\n description,\n headerAlignment = \"center\",\n buttonCaption,\n buttonAction,\n items,\n columns = 3,\n cssId,\n maxWidth,\n verticalPadding,\n background,\n },\n state: { theme },\n nextTheme,\n}: WidgetProps<GridSettings>) {\n const overriddenTheme: ThemeStyle = JSON.parse(JSON.stringify(theme.theme));\n overriddenTheme.structure.page.width = maxWidth || theme.theme.structure.page.width;\n overriddenTheme.structure.section.padding.y =\n verticalPadding || theme.theme.structure.section.padding.y;\n\n return (\n <Section\n theme={overriddenTheme}\n id={cssId}\n background={background}\n nextTheme={nextTheme}\n >\n <div className=\"flex flex-col gap-8\">\n <div\n className={clsx(\n \"flex flex-col gap-4\",\n headerAlignment === \"center\" ? \"items-center text-center\" : \"items-start\",\n )}\n >\n <Header1 theme={overriddenTheme}>{title}</Header1>\n {description && (\n <Subheader1 theme={overriddenTheme} component=\"span\">\n <TextRenderer json={description} theme={overriddenTheme} />\n </Subheader1>\n )}\n {buttonAction && buttonCaption && (\n <NavLink href={buttonAction} className=\"mt-2\">\n <Button theme={overriddenTheme}>{buttonCaption}</Button>\n </NavLink>\n )}\n </div>\n {items && items.length > 0 && (\n <div\n className={clsx(\n \"grid grid-cols-1 md:grid-cols-2 gap-6 items-stretch\",\n columns === 3 ? \"lg:grid-cols-3\" : \"lg:grid-cols-2\",\n )}\n >\n {items.map((item, index) => (\n <GridItemCard key={index} item={item} theme={overriddenTheme} />\n ))}\n </div>\n )}\n </div>\n </Section>\n );\n}\n","import React from \"react\";\nimport type { WidgetEditorProps } from \"../../models\";\nimport type { GridItem, GridSettings } from \"./settings\";\nimport { Editor, emptyDoc } from \"@frontlit/text-editor\";\nimport {\n FieldGroup,\n ImageField,\n ListField,\n NumberField,\n SelectField,\n TextField,\n} from \"../_shared/fields\";\n\nexport function GridEditor({ settings, onChange }: WidgetEditorProps<GridSettings>) {\n const update = (partial: Partial<GridSettings>) =>\n onChange({ ...settings, ...partial });\n\n return (\n <div className=\"flex flex-col\">\n <FieldGroup title=\"Header\">\n <TextField\n label=\"Title\"\n value={settings.title}\n onChange={(title) => update({ title })}\n />\n <div className=\"flex flex-col gap-1 text-sm\">\n <span className=\"font-medium text-foreground\">Description</span>\n <Editor\n initialContent={settings.description ?? emptyDoc}\n onChange={(description: any) => update({ description })}\n editorClassName=\"min-h-[100px]\"\n />\n </div>\n <SelectField\n label=\"Header alignment\"\n value={settings.headerAlignment ?? \"center\"}\n onChange={(headerAlignment) => update({ headerAlignment })}\n options={[\n { label: \"Left\", value: \"left\" },\n { label: \"Center\", value: \"center\" },\n ]}\n />\n </FieldGroup>\n <FieldGroup title=\"Call to action\">\n <TextField\n label=\"Button text\"\n value={settings.buttonCaption}\n onChange={(buttonCaption) => update({ buttonCaption })}\n />\n <TextField\n label=\"Button link\"\n value={settings.buttonAction}\n placeholder=\"https://...\"\n onChange={(buttonAction) => update({ buttonAction })}\n />\n </FieldGroup>\n <FieldGroup title=\"Items\">\n <NumberField\n label=\"Columns\"\n value={settings.columns ?? 3}\n min={2}\n max={3}\n onChange={(columns) => update({ columns: columns as 2 | 3 })}\n />\n <ListField<GridItem>\n label=\"Cards\"\n items={settings.items ?? []}\n onChange={(items) => update({ items })}\n createItem={() => ({\n title: \"New item\",\n mediaAlignment: \"top\",\n })}\n addLabel=\"Add card\"\n renderItem={(item, updateItem, remove) => (\n <>\n <TextField\n label=\"Title\"\n value={item.title}\n onChange={(title) => updateItem({ title })}\n />\n <TextField\n label=\"Description\"\n value={item.description}\n multiline\n onChange={(description) => updateItem({ description })}\n />\n <TextField\n label=\"Icon (lucide-react name)\"\n value={item.icon}\n placeholder=\"e.g. Globe\"\n onChange={(icon) => updateItem({ icon })}\n />\n <ImageField\n label=\"Image (overrides icon)\"\n value={item.media}\n onChange={(media) => updateItem({ media })}\n />\n <SelectField\n label=\"Image position\"\n value={item.mediaAlignment ?? \"top\"}\n onChange={(mediaAlignment) => updateItem({ mediaAlignment })}\n options={[\n { label: \"Above title\", value: \"top\" },\n { label: \"Below content\", value: \"bottom\" },\n {\n label: \"Overlay (title over image)\",\n value: \"overlay\",\n },\n ]}\n />\n <TextField\n label=\"Button text\"\n value={item.buttonCaption}\n onChange={(buttonCaption) => updateItem({ buttonCaption })}\n />\n <TextField\n label=\"Button link\"\n value={item.buttonAction}\n placeholder=\"https://...\"\n onChange={(buttonAction) => updateItem({ buttonAction })}\n />\n <button\n type=\"button\"\n className=\"self-start text-xs text-destructive\"\n onClick={remove}\n >\n Remove\n </button>\n </>\n )}\n />\n </FieldGroup>\n </div>\n );\n}\n","import type { GridSettings } from \"./settings\";\n\nexport const gridDefaults: Partial<GridSettings> = {\n title: \"Everything you need, in one place\",\n headerAlignment: \"center\",\n columns: 3,\n items: [\n {\n title: \"Website builder\",\n description: \"Design and publish pages with a drag-and-drop editor.\",\n icon: \"LayoutTemplate\",\n mediaAlignment: \"top\",\n buttonCaption: \"See features\",\n buttonAction: \"/#features\",\n },\n {\n title: \"Blog\",\n description: \"Publish articles and grow your audience.\",\n icon: \"Newspaper\",\n mediaAlignment: \"top\",\n buttonCaption: \"Read articles\",\n buttonAction: \"/blog\",\n },\n {\n title: \"Help desk\",\n description: \"Support your customers with a shared inbox.\",\n icon: \"Headset\",\n mediaAlignment: \"top\",\n buttonCaption: \"Contact us\",\n buttonAction: \"/help\",\n },\n ],\n};\n","import type { Widget } from \"../../models\";\nimport { gridMetadata } from \"./metadata\";\nimport { GridWidget } from \"./widget\";\nimport { GridEditor } from \"./editor\";\nimport { gridDefaults } from \"./defaults\";\nimport type { GridSettings } from \"./settings\";\n\nexport * from \"./settings\";\n\nexport const Grid: Widget<GridSettings> = {\n metadata: gridMetadata,\n widget: GridWidget,\n editor: GridEditor,\n getDefaultSettings: () => gridDefaults,\n};\n","import type { WidgetMetadata } from \"../../models\";\n\nexport const mediaMetadata: WidgetMetadata = {\n name: \"media\",\n displayName: \"Media\",\n description:\n \"A single image or video — YouTube, Vimeo or self-hosted — with an optional click-to-play preview.\",\n compatibleWith: [\"site\", \"landing\", \"blog\", \"post\", \"custom\"],\n};\n","import React from \"react\";\nimport type { ThemeStyle, WidgetProps } from \"../../models\";\nimport { getMediaUrl, getMediaAlt } from \"../../models/media\";\nimport type { MediaSettings } from \"./settings\";\nimport { Image, VideoWithPreview } from \"../../components\";\nimport { isVideo } from \"../../utils\";\nimport { Section } from \"../../primitives\";\nimport { cn } from \"../../primitives/lib/utils\";\n\nconst roundedMap: Record<number, string> = {\n 0: \"rounded-none\",\n 1: \"rounded-sm\",\n 2: \"rounded\",\n 3: \"rounded-md\",\n 4: \"rounded-lg\",\n 5: \"rounded-xl\",\n 6: \"rounded-2xl\",\n 7: \"rounded-3xl\",\n 8: \"rounded-full\",\n};\n\nexport function MediaWidget({\n settings: {\n media,\n youtubeLink,\n mediaRadius = 2,\n aspectRatio = \"16/9\",\n objectFit = \"cover\",\n hasBorder = true,\n playVideoInModal = false,\n cssId,\n maxWidth,\n verticalPadding,\n background,\n },\n state: { theme },\n nextTheme,\n}: WidgetProps<MediaSettings>) {\n const overriddenTheme: ThemeStyle = JSON.parse(JSON.stringify(theme.theme));\n overriddenTheme.structure.page.width = maxWidth || theme.theme.structure.page.width;\n overriddenTheme.structure.section.padding.y =\n verticalPadding || theme.theme.structure.section.padding.y;\n\n const isVideoContent = isVideo(youtubeLink, media);\n\n return (\n <Section\n theme={overriddenTheme}\n id={cssId}\n background={background}\n nextTheme={nextTheme}\n >\n <div\n className={cn(\n \"overflow-hidden\",\n roundedMap[mediaRadius] ?? \"rounded\",\n hasBorder && (overriddenTheme.interactives?.card?.border?.width || \"border\"),\n )}\n >\n {isVideoContent ? (\n <VideoWithPreview\n videoUrl={youtubeLink || getMediaUrl(media) || \"\"}\n title={getMediaAlt(media) || (media as any)?.caption || \"\"}\n thumbnailUrl={(media as any)?.thumbnail || (media as any)?.thumbnailUrl || \"\"}\n aspectRatio={aspectRatio}\n modal={playVideoInModal}\n />\n ) : (\n <Image\n src={getMediaUrl(media) || \"\"}\n alt={getMediaAlt(media)}\n objectFit={objectFit}\n borderRadius={mediaRadius}\n />\n )}\n </div>\n </Section>\n );\n}\n","import React from \"react\";\nimport type { WidgetEditorProps } from \"../../models\";\nimport type { MediaSettings } from \"./settings\";\nimport { isVideo } from \"../../utils\";\nimport {\n FieldGroup,\n ImageField,\n NumberField,\n SelectField,\n TextField,\n ToggleField,\n} from \"../_shared/fields\";\n\nexport function MediaEditor({ settings, onChange }: WidgetEditorProps<MediaSettings>) {\n const update = (partial: Partial<MediaSettings>) =>\n onChange({ ...settings, ...partial });\n const isVideoContent = isVideo(settings.youtubeLink, settings.media);\n\n return (\n <div className=\"flex flex-col\">\n <FieldGroup title=\"Media\">\n <ImageField\n label=\"Image / poster\"\n value={settings.media}\n onChange={(media) => update({ media })}\n />\n <TextField\n label=\"YouTube / Vimeo link\"\n value={settings.youtubeLink}\n placeholder=\"https://youtube.com/watch?v=...\"\n onChange={(youtubeLink) => update({ youtubeLink })}\n />\n {isVideoContent ? (\n <>\n <ToggleField\n label=\"Play video in a pop-up\"\n value={settings.playVideoInModal}\n onChange={(playVideoInModal) => update({ playVideoInModal })}\n />\n <SelectField\n label=\"Aspect ratio\"\n value={settings.aspectRatio ?? \"16/9\"}\n onChange={(aspectRatio) => update({ aspectRatio })}\n options={[\n { label: \"Widescreen (16:9)\", value: \"16/9\" },\n { label: \"Standard (4:3)\", value: \"4/3\" },\n { label: \"Square (1:1)\", value: \"1/1\" },\n { label: \"Vertical (9:16)\", value: \"9/16\" },\n ]}\n />\n </>\n ) : (\n <SelectField\n label=\"Object fit\"\n value={settings.objectFit ?? \"cover\"}\n onChange={(objectFit) => update({ objectFit })}\n options={[\n { label: \"Cover\", value: \"cover\" },\n { label: \"Contain\", value: \"contain\" },\n { label: \"Fill\", value: \"fill\" },\n { label: \"None\", value: \"none\" },\n { label: \"Scale down\", value: \"scale-down\" },\n ]}\n />\n )}\n </FieldGroup>\n <FieldGroup title=\"Appearance\">\n <NumberField\n label=\"Corner radius\"\n value={settings.mediaRadius}\n min={0}\n max={8}\n onChange={(mediaRadius) => update({ mediaRadius })}\n />\n <ToggleField\n label=\"Border\"\n value={settings.hasBorder}\n onChange={(hasBorder) => update({ hasBorder })}\n />\n </FieldGroup>\n </div>\n );\n}\n","import type { MediaSettings } from \"./settings\";\n\nexport const mediaDefaults: Partial<MediaSettings> = {\n mediaRadius: 2,\n aspectRatio: \"16/9\",\n objectFit: \"cover\",\n hasBorder: true,\n playVideoInModal: false,\n};\n","import type { Widget } from \"../../models\";\nimport { mediaMetadata } from \"./metadata\";\nimport { MediaWidget } from \"./widget\";\nimport { MediaEditor } from \"./editor\";\nimport { mediaDefaults } from \"./defaults\";\nimport type { MediaSettings } from \"./settings\";\n\nexport * from \"./settings\";\n\nexport const MediaBlock: Widget<MediaSettings> = {\n metadata: mediaMetadata,\n widget: MediaWidget,\n editor: MediaEditor,\n getDefaultSettings: () => mediaDefaults,\n};\n","import type { WidgetMetadata } from \"../../models\";\n\nexport const marqueeMetadata: WidgetMetadata = {\n name: \"marquee\",\n displayName: \"Marquee\",\n description:\n \"An infinite horizontally-scrolling row of text or icons — useful for logo clouds or highlight tickers.\",\n compatibleWith: [\"site\", \"landing\", \"blog\", \"post\", \"custom\"],\n};\n","\"use client\";\n\nimport React, { useEffect, useId, useRef, useState } from \"react\";\nimport { cn } from \"../../primitives/lib/utils\";\n\n/**\n * Infinite horizontal scroller. Measures the width of one copy of the\n * content, then renders enough duplicate copies to always cover at least\n * twice the container's width, and animates a translateX loop across\n * exactly one content-width — because the duplicates repeat the same\n * sequence, the loop point is visually seamless regardless of how the\n * content width compares to the container width.\n */\nexport function MarqueeTrack({\n children,\n speed,\n direction,\n pauseOnHover,\n}: {\n children: React.ReactNode;\n speed: number;\n direction: \"left\" | \"right\";\n pauseOnHover?: boolean;\n}) {\n const containerRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [containerWidth, setContainerWidth] = useState(0);\n const [contentWidth, setContentWidth] = useState(0);\n const animationName = `pb-marquee-${useId().replace(/[^a-zA-Z0-9]/g, \"\")}`;\n\n useEffect(() => {\n const measure = () => {\n setContainerWidth(containerRef.current?.offsetWidth ?? 0);\n setContentWidth(contentRef.current?.offsetWidth ?? 0);\n };\n measure();\n window.addEventListener(\"resize\", measure);\n return () => window.removeEventListener(\"resize\", measure);\n }, [children, speed]);\n\n const duration = contentWidth > 0 ? contentWidth / speed : 0;\n const duplicatesNeeded =\n contentWidth > 0 ? Math.max(2, Math.ceil((containerWidth * 2) / contentWidth)) : 2;\n\n return (\n <div ref={containerRef} className=\"w-full overflow-hidden\">\n {contentWidth > 0 && (\n <style>{`\n @keyframes ${animationName} {\n from { transform: translateX(0); }\n to { transform: translateX(-${contentWidth}px); }\n }\n `}</style>\n )}\n <div\n className={cn(\n \"inline-flex w-max\",\n pauseOnHover && \"hover:[animation-play-state:paused]\",\n )}\n style={\n contentWidth > 0\n ? {\n animation: `${animationName} ${duration}s linear infinite`,\n animationDirection: direction === \"left\" ? \"reverse\" : \"normal\",\n }\n : undefined\n }\n >\n <div ref={contentRef} className=\"inline-flex shrink-0\">\n {children}\n </div>\n {Array.from({ length: duplicatesNeeded }).map((_, i) => (\n <div key={i} className=\"inline-flex shrink-0\" aria-hidden>\n {children}\n </div>\n ))}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport * as Icons from \"lucide-react\";\nimport type { LucideIcon } from \"lucide-react\";\nimport type { ThemeStyle, WidgetProps } from \"../../models\";\nimport type { MarqueeSettings } from \"./settings\";\nimport { NavLink } from \"../../components\";\nimport { Section } from \"../../primitives\";\nimport { MarqueeTrack } from \"./marquee-track\";\n\nfunction resolveIcon(name?: string): LucideIcon | null {\n if (!name) return null;\n return (Icons as unknown as Record<string, LucideIcon>)[name] ?? null;\n}\n\nexport function MarqueeWidget({\n settings: {\n items = [],\n direction = \"right\",\n speed = 60,\n pauseOnHover = true,\n fadeWidth = 50,\n itemBackgroundColor,\n itemForegroundColor,\n itemBorderColor,\n itemBorderRadius = 12,\n itemBorderWidth = 1,\n itemBorderStyle = \"solid\",\n cssId,\n maxWidth,\n verticalPadding,\n background,\n },\n state: { theme },\n nextTheme,\n}: WidgetProps<MarqueeSettings>) {\n const overriddenTheme: ThemeStyle = JSON.parse(JSON.stringify(theme.theme));\n overriddenTheme.structure.page.width = maxWidth || theme.theme.structure.page.width;\n overriddenTheme.structure.section.padding.y =\n verticalPadding || theme.theme.structure.section.padding.y;\n\n if (items.length === 0) return null;\n\n const itemStyle: React.CSSProperties = {\n backgroundColor: itemBackgroundColor || undefined,\n color: itemForegroundColor || undefined,\n borderColor: itemBorderColor || undefined,\n borderRadius: itemBorderRadius,\n borderWidth: itemBorderStyle === \"none\" ? 0 : itemBorderWidth,\n borderStyle: itemBorderStyle === \"none\" ? undefined : itemBorderStyle,\n };\n\n const renderItem = (item: (typeof items)[number]) => {\n const Icon = resolveIcon(item.icon);\n const content = (\n <div\n className=\"mx-2 flex min-h-[80px] min-w-[160px] items-center justify-center px-6\"\n style={itemStyle}\n >\n {Icon ? (\n <Icon className=\"h-8 w-8\" />\n ) : (\n <span className=\"whitespace-nowrap text-sm font-medium\">{item.text}</span>\n )}\n </div>\n );\n return item.href ? (\n <NavLink key={item.id} href={item.href} openInSameTab={false}>\n {content}\n </NavLink>\n ) : (\n <React.Fragment key={item.id}>{content}</React.Fragment>\n );\n };\n\n return (\n <Section\n theme={overriddenTheme}\n id={cssId}\n background={background}\n nextTheme={nextTheme}\n >\n <div className=\"relative\" aria-hidden=\"true\">\n <MarqueeTrack speed={speed} direction={direction} pauseOnHover={pauseOnHover}>\n {items.map(renderItem)}\n </MarqueeTrack>\n {fadeWidth > 0 && (\n <>\n <div\n className=\"pointer-events-none absolute inset-y-0 left-0 z-10\"\n style={{\n width: fadeWidth,\n background: \"linear-gradient(to right, var(--background), transparent)\",\n }}\n />\n <div\n className=\"pointer-events-none absolute inset-y-0 right-0 z-10\"\n style={{\n width: fadeWidth,\n background: \"linear-gradient(to left, var(--background), transparent)\",\n }}\n />\n </>\n )}\n </div>\n </Section>\n );\n}\n","import React from \"react\";\nimport type { WidgetEditorProps } from \"../../models\";\nimport type { MarqueeItem, MarqueeSettings } from \"./settings\";\nimport { generateUniqueId } from \"../../utils\";\nimport {\n FieldGroup,\n ListField,\n NumberField,\n SelectField,\n TextField,\n ToggleField,\n} from \"../_shared/fields\";\n\nexport function MarqueeEditor({\n settings,\n onChange,\n}: WidgetEditorProps<MarqueeSettings>) {\n const update = (partial: Partial<MarqueeSettings>) =>\n onChange({ ...settings, ...partial });\n\n return (\n <div className=\"flex flex-col\">\n <FieldGroup title=\"Items\">\n <ListField<MarqueeItem>\n label=\"Items\"\n items={settings.items ?? []}\n onChange={(items) => update({ items })}\n createItem={() => ({\n id: generateUniqueId(),\n text: \"New item\",\n })}\n addLabel=\"Add item\"\n renderItem={(item, updateItem, remove) => (\n <>\n <TextField\n label=\"Text\"\n value={item.text}\n onChange={(text) => updateItem({ text })}\n />\n <TextField\n label=\"Icon (lucide-react name)\"\n value={item.icon}\n placeholder=\"e.g. Globe — overrides text\"\n onChange={(icon) => updateItem({ icon })}\n />\n <TextField\n label=\"Link (optional)\"\n value={item.href}\n placeholder=\"https://...\"\n onChange={(href) => updateItem({ href })}\n />\n <button\n type=\"button\"\n className=\"self-start text-xs text-destructive\"\n onClick={remove}\n >\n Remove\n </button>\n </>\n )}\n />\n </FieldGroup>\n <FieldGroup title=\"Scroll\">\n <SelectField\n label=\"Direction\"\n value={settings.direction ?? \"right\"}\n onChange={(direction) => update({ direction })}\n options={[\n { label: \"Right to left\", value: \"right\" },\n { label: \"Left to right\", value: \"left\" },\n ]}\n />\n <NumberField\n label=\"Speed (px/sec)\"\n value={settings.speed}\n min={10}\n max={200}\n onChange={(speed) => update({ speed })}\n />\n <ToggleField\n label=\"Pause on hover\"\n value={settings.pauseOnHover}\n onChange={(pauseOnHover) => update({ pauseOnHover })}\n />\n <NumberField\n label=\"Edge fade width (px)\"\n value={settings.fadeWidth}\n min={0}\n max={200}\n onChange={(fadeWidth) => update({ fadeWidth })}\n />\n </FieldGroup>\n <FieldGroup title=\"Item style\">\n <TextField\n label=\"Background color\"\n value={settings.itemBackgroundColor}\n placeholder=\"#ffffff\"\n onChange={(itemBackgroundColor) => update({ itemBackgroundColor })}\n />\n <TextField\n label=\"Foreground color\"\n value={settings.itemForegroundColor}\n placeholder=\"#000000\"\n onChange={(itemForegroundColor) => update({ itemForegroundColor })}\n />\n <TextField\n label=\"Border color\"\n value={settings.itemBorderColor}\n placeholder=\"#e2e8f0\"\n onChange={(itemBorderColor) => update({ itemBorderColor })}\n />\n <SelectField\n label=\"Border style\"\n value={settings.itemBorderStyle ?? \"solid\"}\n onChange={(itemBorderStyle) => update({ itemBorderStyle })}\n options={[\n { label: \"Solid\", value: \"solid\" },\n { label: \"Dashed\", value: \"dashed\" },\n { label: \"Dotted\", value: \"dotted\" },\n { label: \"Double\", value: \"double\" },\n { label: \"None\", value: \"none\" },\n ]}\n />\n <NumberField\n label=\"Border width\"\n value={settings.itemBorderWidth}\n min={0}\n max={10}\n onChange={(itemBorderWidth) => update({ itemBorderWidth })}\n />\n <NumberField\n label=\"Border radius\"\n value={settings.itemBorderRadius}\n min={0}\n max={50}\n onChange={(itemBorderRadius) => update({ itemBorderRadius })}\n />\n </FieldGroup>\n </div>\n );\n}\n","import type { MarqueeSettings } from \"./settings\";\nimport { generateUniqueId } from \"../../utils\";\n\nexport const marqueeDefaults: Partial<MarqueeSettings> = {\n items: [\n { id: generateUniqueId(), text: \"Website\" },\n { id: generateUniqueId(), text: \"Content\" },\n { id: generateUniqueId(), text: \"Support\" },\n { id: generateUniqueId(), text: \"Engage\" },\n ],\n direction: \"right\",\n speed: 60,\n pauseOnHover: true,\n fadeWidth: 50,\n itemForegroundColor: \"\",\n itemBackgroundColor: \"\",\n itemBorderColor: \"\",\n itemBorderRadius: 12,\n itemBorderWidth: 1,\n itemBorderStyle: \"solid\",\n};\n","import type { Widget } from \"../../models\";\nimport { marqueeMetadata } from \"./metadata\";\nimport { MarqueeWidget } from \"./widget\";\nimport { MarqueeEditor } from \"./editor\";\nimport { marqueeDefaults } from \"./defaults\";\nimport type { MarqueeSettings } from \"./settings\";\n\nexport * from \"./settings\";\n\nexport const Marquee: Widget<MarqueeSettings> = {\n metadata: marqueeMetadata,\n widget: MarqueeWidget,\n editor: MarqueeEditor,\n getDefaultSettings: () => marqueeDefaults,\n};\n","import type { WidgetMetadata } from \"../../models\";\n\nexport const embedMetadata: WidgetMetadata = {\n name: \"embed\",\n displayName: \"Embed\",\n description:\n \"Embed a URL in an iframe, or paste a script/iframe snippet from a third-party tool.\",\n compatibleWith: [\"site\", \"landing\", \"blog\", \"post\", \"custom\"],\n};\n","import React from \"react\";\nimport { Code2 } from \"lucide-react\";\nimport type { ThemeStyle, WidgetProps } from \"../../models\";\nimport type { EmbedSettings } from \"./settings\";\nimport { SandboxedEmbed } from \"../../components\";\nimport { Section } from \"../../primitives\";\n\nconst aspectRatioMap: Record<string, number> = {\n \"16:9\": 16 / 9,\n \"4:3\": 4 / 3,\n \"1:1\": 1,\n};\n\nexport function EmbedWidget({\n settings: {\n contentType = \"url\",\n content,\n aspectRatio = \"default\",\n height = 500,\n cssId,\n maxWidth,\n verticalPadding,\n background,\n },\n state: { theme },\n editing,\n nextTheme,\n}: WidgetProps<EmbedSettings>) {\n const overriddenTheme: ThemeStyle = JSON.parse(JSON.stringify(theme.theme));\n overriddenTheme.structure.page.width = maxWidth || theme.theme.structure.page.width;\n overriddenTheme.structure.section.padding.y =\n verticalPadding || theme.theme.structure.section.padding.y;\n\n if (!content) {\n if (!editing) return null;\n\n return (\n <Section\n theme={overriddenTheme}\n id={cssId}\n background={background}\n nextTheme={nextTheme}\n >\n <div className=\"flex min-h-48 flex-col items-center justify-center gap-3 rounded-lg border border-dashed border-border bg-muted/30 px-6 py-12 text-center\">\n <span className=\"flex h-10 w-10 items-center justify-center rounded-full border border-border bg-background text-muted-foreground\">\n <Code2 className=\"h-4 w-4\" />\n </span>\n <div>\n <p className=\"font-semibold text-foreground\">Embed external content</p>\n <p className=\"mt-1 max-w-md text-sm text-muted-foreground\">\n Paste an embed URL or script snippet in the block settings.\n </p>\n </div>\n </div>\n </Section>\n );\n }\n\n const isScript = contentType === \"script\";\n const ratio = aspectRatio !== \"default\" ? aspectRatioMap[aspectRatio] : undefined;\n\n const containerStyle: React.CSSProperties = ratio\n ? { position: \"relative\", paddingTop: `${100 / ratio}%` }\n : !isScript\n ? { height }\n : {};\n\n const iframeStyle: React.CSSProperties = ratio\n ? { position: \"absolute\", inset: 0, width: \"100%\", height: \"100%\" }\n : isScript\n ? { width: \"100%\", height }\n : { width: \"100%\", height: \"100%\" };\n\n return (\n <Section\n theme={overriddenTheme}\n id={cssId}\n background={background}\n nextTheme={nextTheme}\n >\n <div style={containerStyle}>\n {isScript ? (\n <SandboxedEmbed content={content} style={iframeStyle} />\n ) : (\n <iframe\n src={content}\n style={iframeStyle}\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n title=\"Embedded content\"\n />\n )}\n </div>\n </Section>\n );\n}\n","import React from \"react\";\nimport type { WidgetEditorProps } from \"../../models\";\nimport type { EmbedSettings } from \"./settings\";\nimport { FieldGroup, NumberField, SelectField, TextField } from \"../_shared/fields\";\n\nexport function EmbedEditor({ settings, onChange }: WidgetEditorProps<EmbedSettings>) {\n const update = (partial: Partial<EmbedSettings>) =>\n onChange({ ...settings, ...partial });\n const contentType = settings.contentType ?? \"url\";\n const aspectRatio = settings.aspectRatio ?? \"default\";\n\n return (\n <div className=\"flex flex-col\">\n <div className=\"mx-1 mb-3 rounded-md border border-destructive/40 bg-destructive/5 p-3 text-xs text-destructive\">\n Embedding external content may expose visitors to scripts and trackers you\n don&apos;t control. Only embed sources you trust.\n </div>\n <FieldGroup title=\"Content\">\n <SelectField\n label=\"Type\"\n value={contentType}\n onChange={(value) => update({ contentType: value })}\n options={[\n { label: \"URL\", value: \"url\" },\n { label: \"Script / iframe snippet\", value: \"script\" },\n ]}\n />\n {contentType === \"url\" ? (\n <TextField\n label=\"URL\"\n value={settings.content}\n placeholder=\"https://...\"\n onChange={(content) => update({ content })}\n />\n ) : (\n <TextField\n label=\"Snippet\"\n multiline\n value={settings.content}\n placeholder=\"<script>...</script> or <iframe>...</iframe>\"\n onChange={(content) => update({ content })}\n />\n )}\n </FieldGroup>\n <FieldGroup title=\"Sizing\">\n <SelectField\n label=\"Aspect ratio\"\n value={aspectRatio}\n onChange={(value) => update({ aspectRatio: value })}\n options={[\n { label: \"Default (fixed height)\", value: \"default\" },\n { label: \"Widescreen (16:9)\", value: \"16:9\" },\n { label: \"Standard (4:3)\", value: \"4:3\" },\n { label: \"Square (1:1)\", value: \"1:1\" },\n ]}\n />\n {aspectRatio === \"default\" && (\n <NumberField\n label=\"Height (px)\"\n value={settings.height}\n min={100}\n max={2000}\n onChange={(height) => update({ height })}\n />\n )}\n </FieldGroup>\n </div>\n );\n}\n","import type { EmbedSettings } from \"./settings\";\n\nexport const embedDefaults: Partial<EmbedSettings> = {\n contentType: \"url\",\n content: \"\",\n aspectRatio: \"default\",\n height: 500,\n};\n","import type { Widget } from \"../../models\";\nimport { embedMetadata } from \"./metadata\";\nimport { EmbedWidget } from \"./widget\";\nimport { EmbedEditor } from \"./editor\";\nimport { embedDefaults } from \"./defaults\";\nimport type { EmbedSettings } from \"./settings\";\n\nexport * from \"./settings\";\n\nexport const Embed: Widget<EmbedSettings> = {\n metadata: embedMetadata,\n widget: EmbedWidget,\n editor: EmbedEditor,\n getDefaultSettings: () => embedDefaults,\n};\n","import type { WidgetMetadata } from \"../../models\";\n\nexport const dataSlotMetadata: WidgetMetadata = {\n name: \"data-slot\",\n displayName: \"Data slot\",\n description:\n \"A host-resolved data region. Its data source and presentation belong to the embedding application.\",\n compatibleWith: [\"site\", \"blog\", \"landing\", \"post\", \"custom\"],\n};\n","import React from \"react\";\nimport { LockKeyhole } from \"lucide-react\";\nimport type { ThemeStyle, WidgetDefaultSettings, WidgetProps } from \"../../models\";\nimport { Section } from \"../../primitives\";\n\nexport interface DataSlotSettings extends WidgetDefaultSettings {\n /** Name matched against the host application's data-slot loaders. */\n slot: string;\n}\n\n/**\n * A reserved, host-resolved data region. The host passes its rendered result\n * through `PageRenderer`; the builder shows a generic placeholder instead.\n * Live content uses the same `Section` shell as other blocks so it shares\n * the theme's page width instead of shrink-wrapping to the feed's copy.\n */\nexport function DataSlotWidget({\n data,\n editing,\n settings: { slot, cssId, maxWidth, verticalPadding, background },\n state: { theme },\n nextTheme,\n}: WidgetProps<DataSlotSettings>) {\n const overriddenTheme: ThemeStyle = JSON.parse(JSON.stringify(theme.theme));\n overriddenTheme.structure.page.width = maxWidth || theme.theme.structure.page.width;\n overriddenTheme.structure.section.padding.y =\n verticalPadding || theme.theme.structure.section.padding.y;\n\n if (data !== undefined) {\n return (\n <Section\n theme={overriddenTheme}\n id={cssId}\n background={background}\n nextTheme={nextTheme}\n >\n {data}\n </Section>\n );\n }\n if (!editing) return null;\n\n return (\n <Section\n theme={overriddenTheme}\n id={cssId}\n background={background}\n nextTheme={nextTheme}\n className=\"border-y border-dashed border-border bg-muted/30\"\n >\n <div className=\"flex flex-col items-center gap-3 text-center\">\n <span className=\"flex h-10 w-10 items-center justify-center rounded-full border border-border bg-background text-muted-foreground\">\n <LockKeyhole className=\"h-4 w-4\" />\n </span>\n <div>\n <p className=\"font-semibold text-foreground\">Data slot</p>\n <p className=\"mt-1 text-sm text-muted-foreground\">\n The embedding application resolves data for {String(slot || \"this slot\")}{\" \"}\n here.\n </p>\n </div>\n </div>\n </Section>\n );\n}\n","import type { Widget } from \"../../models\";\nimport { dataSlotMetadata } from \"./metadata\";\nimport { DataSlotWidget, type DataSlotSettings } from \"./widget\";\n\nexport const DataSlot: Widget<DataSlotSettings> = {\n metadata: dataSlotMetadata,\n widget: DataSlotWidget,\n};\n\nexport type { DataSlotSettings } from \"./widget\";\n"]}