@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/utils/debounce.ts","../src/utils/color-mode.ts","../src/starter.ts","../src/builder/top-bar.tsx","../src/builder/preview-frame.tsx","../src/builder/block-picker.tsx","../src/builder/panel-header.tsx","../src/builder/settings-panel.tsx","../src/builder/controls/page-builder-property-header.tsx","../src/builder/controls/page-builder-slider.tsx","../src/builder/controls/color-selector.tsx","../src/builder/controls/max-width-selector.tsx","../src/builder/controls/vertical-padding-selector.tsx","../src/builder/controls/content-padding-selector.tsx","../src/builder/controls/pattern-presets.ts","../src/builder/controls/section-background-panel.tsx","../src/blocks/_shared/design-fields.tsx","../src/builder/block-settings.tsx","../src/builder/theme-editor/theme-card.tsx","../src/builder/theme-editor/ui.tsx","../src/builder/theme-editor/tailwind-to-human-readable.ts","../src/builder/theme-editor/typography-selector.tsx","../src/builder/theme-editor/interactive-selector.tsx","../src/builder/theme-editor/structure-selector.tsx","../src/builder/theme-editor/index.tsx","../src/builder/seo-editor.tsx","../src/builder/page-builder.tsx"],"names":["jsx","jsxs","X","React","Palette","useState","Check","PanelInput","PanelSelect","ChevronDown","Button","Fragment","ImageUploadDialog","ImageIcon","useRef","useEffect","useMemo","LayoutTemplate"],"mappings":"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","file":"chunk-KQKSLI3L.js","sourcesContent":["export function debounce(fn: (...args: any[]) => void, wait: number) {\n let timeout: ReturnType<typeof setTimeout>;\n\n return function (...args: any[]) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n fn(...args);\n }, wait);\n };\n}\n","export type ColorMode = \"light\" | \"dark\" | \"system\";\nexport type ResolvedColorMode = \"light\" | \"dark\";\n\nexport function resolveColorMode(\n mode: ColorMode,\n systemPrefersDark: boolean,\n): ResolvedColorMode {\n if (mode === \"system\") return systemPrefersDark ? \"dark\" : \"light\";\n return mode;\n}\n\n/** Flip the painted palette. First click leaves \"system\" for an explicit side. */\nexport function toggleColorMode(resolved: ResolvedColorMode): ResolvedColorMode {\n return resolved === \"dark\" ? \"light\" : \"dark\";\n}\n","import type { Theme, WidgetInstance } from \"./models\";\nimport { generateUniqueId } from \"./utils\";\nimport { themes } from \"./primitives\";\nimport { blockRegistry } from \"./registry\";\n\n/**\n * Creates a new widget instance for the given block name, seeded with that\n * block's default settings.\n */\nexport function createWidgetInstance(\n name: string,\n overrides?: Record<string, unknown>,\n): WidgetInstance {\n const definition = blockRegistry[name];\n return {\n widgetId: generateUniqueId(),\n name,\n deletable: ![\"header\", \"footer\", \"data-slot\"].includes(name),\n moveable: ![\"header\", \"footer\"].includes(name),\n shared: [\"header\", \"footer\"].includes(name),\n settings: {\n ...(definition?.getDefaultSettings?.() ?? {}),\n ...(overrides ?? {}),\n },\n };\n}\n\n/** Ensures a builder layout always has one locked header and footer.\n * API validation remains the hard boundary; this repair keeps legacy/empty\n * initial layouts usable and prevents the UI from ever presenting a page\n * without its shared navigation shell. */\nexport function ensureRequiredSharedWidgets(\n layout: WidgetInstance[],\n): WidgetInstance[] {\n const header =\n layout.find((widget) => widget.name === \"header\") ?? createWidgetInstance(\"header\");\n const footer =\n layout.find((widget) => widget.name === \"footer\") ?? createWidgetInstance(\"footer\");\n const body = layout.filter((widget) => ![\"header\", \"footer\"].includes(widget.name));\n\n return [\n {\n ...header,\n name: \"header\",\n deletable: false,\n moveable: false,\n shared: true,\n },\n ...body,\n {\n ...footer,\n name: \"footer\",\n deletable: false,\n moveable: false,\n shared: true,\n },\n ];\n}\n\n/** The default theme new pages start out with. */\nexport function getDefaultTheme(): Theme {\n return themes[0];\n}\n\n/**\n * A complete, ready-to-render landing page layout showcasing every\n * available block — used both as the FrontLit marketing landing page and\n * as the page builder demo's starting point.\n */\nexport function createDefaultLayout(): WidgetInstance[] {\n return ensureRequiredSharedWidgets([\n createWidgetInstance(\"header\", { ctaHref: \"/builder\" }),\n createWidgetInstance(\"hero\", { buttonAction: \"/builder\" }),\n createWidgetInstance(\"featured\"),\n createWidgetInstance(\"content\"),\n createWidgetInstance(\"pricing\"),\n createWidgetInstance(\"faq\"),\n createWidgetInstance(\"email-form\"),\n createWidgetInstance(\"footer\"),\n ]);\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { Globe, Monitor, Palette, Plus, Smartphone, Tablet } from \"lucide-react\";\nimport { Button } from \"../primitives/components/ui/button\";\nimport { cn } from \"../primitives/lib/utils\";\nimport { ThemeModeSwitcher } from \"../components/theme-mode-switcher\";\nimport { toggleColorMode, type ResolvedColorMode } from \"../utils\";\n\nexport type PreviewDevice = \"mobile\" | \"tablet\" | \"desktop\";\n\nconst DEVICES: Array<{\n key: PreviewDevice;\n label: string;\n icon: React.ComponentType<{ className?: string }>;\n}> = [\n { key: \"mobile\", label: \"Mobile preview\", icon: Smartphone },\n { key: \"tablet\", label: \"Tablet preview\", icon: Tablet },\n { key: \"desktop\", label: \"Desktop preview\", icon: Monitor },\n];\n\nexport function BuilderTopBar({\n resolvedMode,\n onModeChange,\n device,\n onDeviceChange,\n onOpenTheme,\n onOpenSeo,\n onAddBlock,\n allowThemeEditing = true,\n}: {\n resolvedMode: ResolvedColorMode;\n onModeChange: (mode: ResolvedColorMode) => void;\n device: PreviewDevice;\n onDeviceChange: (device: PreviewDevice) => void;\n onOpenTheme: () => void;\n onOpenSeo: () => void;\n onAddBlock: () => void;\n allowThemeEditing?: boolean;\n}) {\n return (\n <header className=\"flex h-14 w-full shrink-0 items-center justify-between border-b bg-background px-4\">\n <div className=\"flex items-center gap-3\">\n <span className=\"text-sm font-semibold text-foreground\">Page builder</span>\n </div>\n <div className=\"flex items-center gap-4\">\n <div\n className=\"flex items-center gap-0.5 rounded-md border border-border p-0.5\"\n role=\"group\"\n aria-label=\"Preview device\"\n >\n {DEVICES.map(({ key, label, icon: Icon }) => (\n <button\n key={key}\n type=\"button\"\n title={label}\n aria-label={label}\n aria-pressed={device === key}\n className={cn(\n \"inline-flex h-7 w-7 items-center justify-center rounded-sm transition-colors\",\n device === key\n ? \"bg-muted text-foreground\"\n : \"text-muted-foreground hover:text-foreground\",\n )}\n onClick={() => onDeviceChange(key)}\n >\n <Icon className=\"h-4 w-4\" />\n </button>\n ))}\n </div>\n <div\n className=\"h-6 w-px bg-border\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n />\n <div className=\"flex items-center gap-2\">\n <ThemeModeSwitcher\n resolved={resolvedMode}\n onToggle={() => onModeChange(toggleColorMode(resolvedMode))}\n />\n {allowThemeEditing && (\n <Button\n variant=\"outline\"\n size=\"icon\"\n title=\"Theme\"\n aria-label=\"Edit theme\"\n onClick={onOpenTheme}\n >\n <Palette className=\"h-4 w-4\" />\n </Button>\n )}\n <Button\n variant=\"outline\"\n size=\"icon\"\n title=\"SEO\"\n aria-label=\"Edit SEO settings\"\n onClick={onOpenSeo}\n >\n <Globe className=\"h-4 w-4\" />\n </Button>\n </div>\n <div\n className=\"h-6 w-px bg-border\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n />\n <Button\n size=\"sm\"\n className=\"gap-2 whitespace-nowrap\"\n title=\"Add a new block to the page\"\n onClick={onAddBlock}\n >\n <Plus className=\"h-4 w-4\" />\n Add block\n </Button>\n </div>\n </header>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nconst COPIED_ATTR = \"data-pb-preview-style\";\n\nconst THEME_FONT_VARS = [\n \"--font-sans\",\n \"--font-mono\",\n \"--font-inter\",\n \"--font-open-sans\",\n \"--font-source-sans-3\",\n \"--font-noto-sans\",\n \"--font-roboto\",\n \"--font-mulish\",\n \"--font-nunito\",\n \"--font-work-sans\",\n \"--font-merriweather\",\n \"--font-alegreya\",\n \"--font-playfair-display\",\n \"--font-roboto-slab\",\n \"--font-source-serif-4\",\n \"--font-montserrat\",\n \"--font-poppins\",\n \"--font-raleway\",\n \"--font-rubik\",\n \"--font-oswald\",\n \"--font-bebas-neue\",\n \"--font-lato\",\n \"--font-pt-sans\",\n \"--font-quicksand\",\n];\n\nfunction readCssVar(sourceDoc: Document, name: string): string {\n const view = sourceDoc.defaultView;\n if (!view) return \"\";\n const html = view\n .getComputedStyle(sourceDoc.documentElement)\n .getPropertyValue(name)\n .trim();\n if (html) return html;\n return view.getComputedStyle(sourceDoc.body).getPropertyValue(name).trim();\n}\n\n/**\n * next/font sets --font-* on the host layout, not inside the iframe. Copy\n * those variables so `font-inter` etc. resolve to the same faces as the host.\n */\nfunction syncFontVariables(sourceDoc: Document, targetDoc: Document) {\n const root = targetDoc.documentElement;\n for (const name of THEME_FONT_VARS) {\n const value = readCssVar(sourceDoc, name);\n if (value) root.style.setProperty(name, value);\n else root.style.removeProperty(name);\n }\n}\n\n/**\n * Mirrors the parent document's stylesheets into the iframe so Tailwind\n * utilities (and next/font @font-face rules) apply to the portaled canvas.\n */\nfunction syncStyles(sourceDoc: Document, targetDoc: Document) {\n targetDoc.head.querySelectorAll(`[${COPIED_ATTR}]`).forEach((node) => node.remove());\n sourceDoc.querySelectorAll('style, link[rel=\"stylesheet\"]').forEach((node) => {\n const clone = node.cloneNode(true) as HTMLElement;\n clone.setAttribute(COPIED_ATTR, \"\");\n targetDoc.head.appendChild(clone);\n });\n syncFontVariables(sourceDoc, targetDoc);\n}\n\n/**\n * Renders children inside a same-origin iframe via a React portal. Unlike a\n * width-constrained div, the iframe is its own viewport, so `md:`/`lg:`\n * media queries respond to the frame's width — giving a faithful device\n * preview. Interactivity is preserved: React attaches event listeners to\n * the portal container, so clicks and hovers inside the frame work as usual.\n */\nexport function PreviewFrame({\n className,\n title = \"Page preview\",\n children,\n}: {\n className?: string;\n title?: string;\n children: React.ReactNode;\n}) {\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const [mountNode, setMountNode] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n const iframe = iframeRef.current;\n if (!iframe) return;\n\n let observer: MutationObserver | undefined;\n\n const init = () => {\n const doc = iframe.contentDocument;\n if (!doc) return;\n if (!doc.getElementById(\"pb-preview-base\")) {\n const base = doc.createElement(\"style\");\n base.id = \"pb-preview-base\";\n base.textContent = \"html,body{margin:0;height:100%;}\";\n doc.head.appendChild(base);\n }\n syncStyles(document, doc);\n // Re-sync when the host app adds/updates styles (route\n // transitions, dev-mode HMR, lazily loaded chunks).\n observer?.disconnect();\n observer = new MutationObserver(() => syncStyles(document, doc));\n observer.observe(document.head, {\n childList: true,\n subtree: true,\n characterData: true,\n });\n setMountNode(doc.body);\n };\n\n // about:blank documents are usually ready synchronously, but Chrome\n // can replace the document with a second load event — init on both.\n if (iframe.contentDocument?.readyState === \"complete\") init();\n iframe.addEventListener(\"load\", init);\n return () => {\n iframe.removeEventListener(\"load\", init);\n observer?.disconnect();\n };\n }, []);\n\n return (\n <iframe ref={iframeRef} title={title} className={className}>\n {mountNode ? createPortal(children, mountNode) : null}\n </iframe>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport * as Icons from \"lucide-react\";\nimport type { Widget } from \"../models\";\n\nfunction resolveIcon(name?: string): React.ComponentType<{ className?: string }> {\n if (name && name in Icons) {\n return (\n Icons as unknown as Record<string, React.ComponentType<{ className?: string }>>\n )[name];\n }\n return Icons.LayoutTemplate;\n}\n\nexport function BlockPicker({\n blocks,\n onPick,\n onClose,\n}: {\n blocks: Widget<any>[];\n onPick: (name: string) => void;\n onClose: () => void;\n}) {\n return (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/40 p-4\"\n onClick={onClose}\n >\n <div\n className=\"flex max-h-[80vh] w-full max-w-lg flex-col overflow-hidden rounded-lg border border-border bg-background shadow-xl\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex items-center justify-between border-b border-border px-4 py-3\">\n <h3 className=\"text-sm font-semibold text-foreground\">Add a block</h3>\n <button\n type=\"button\"\n aria-label=\"Close\"\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n onClick={onClose}\n >\n <Icons.X className=\"h-4 w-4\" />\n </button>\n </div>\n <div className=\"grid grid-cols-2 gap-2 overflow-y-auto p-4 sm:grid-cols-3\">\n {blocks.map((block) => {\n const Icon = resolveIcon(block.metadata.icon);\n return (\n <button\n key={block.metadata.name}\n type=\"button\"\n className=\"flex flex-col items-center gap-2 rounded-md border border-border p-4 text-center transition-colors hover:border-primary hover:bg-muted\"\n onClick={() => onPick(block.metadata.name)}\n >\n <Icon className=\"h-6 w-6 text-foreground\" />\n <span className=\"text-xs font-medium text-foreground\">\n {block.metadata.displayName}\n </span>\n </button>\n );\n })}\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { Layers3, X, type LucideIcon } from \"lucide-react\";\nimport { Button } from \"../primitives/components/ui/button\";\n\ninterface PanelHeaderProps {\n title: string;\n onClose: () => void;\n eyebrow?: string;\n description?: string;\n icon?: LucideIcon;\n}\n\nexport function PanelHeader({\n title,\n onClose,\n eyebrow = \"Settings\",\n description,\n icon: Icon = Layers3,\n}: PanelHeaderProps) {\n return (\n <div className=\"sticky top-0 z-10 border-b border-border/80 bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/80\">\n <div className=\"flex items-start gap-3 px-5 py-4\">\n <div className=\"mt-0.5 flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border border-primary/15 bg-primary/10 text-primary\">\n <Icon className=\"h-4 w-4\" aria-hidden=\"true\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-[10px] font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n {eyebrow}\n </p>\n <h2 className=\"mt-1 truncate text-base font-semibold tracking-tight text-foreground\">\n {title}\n </h2>\n {description && (\n <p className=\"mt-1 line-clamp-2 text-xs leading-5 text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"-mr-2 -mt-1 h-8 w-8 shrink-0 rounded-lg text-muted-foreground hover:bg-muted hover:text-foreground\"\n aria-label={`Close ${title} settings`}\n onClick={onClose}\n >\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { PanelHeader } from \"./panel-header\";\nimport type { LucideIcon } from \"lucide-react\";\n\nexport function SettingsPanel({\n title,\n onClose,\n children,\n eyebrow,\n description,\n icon,\n}: {\n title: string;\n onClose: () => void;\n children: React.ReactNode;\n eyebrow?: string;\n description?: string;\n icon?: LucideIcon;\n}) {\n return (\n <aside className=\"flex h-full min-h-0 w-[min(360px,calc(100vw-2rem))] max-w-full shrink-0 flex-col overflow-hidden rounded-2xl border border-border/80 bg-background shadow-lg shadow-foreground/5\">\n <PanelHeader\n title={title}\n onClose={onClose}\n eyebrow={eyebrow}\n description={description}\n icon={icon}\n />\n <div className=\"min-h-0 min-w-0 flex-1 overflow-x-hidden overflow-y-auto\">\n <div className=\"min-w-0 px-5 py-5\">{children}</div>\n </div>\n </aside>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { HelpCircle } from \"lucide-react\";\n\n/**\n * Label row for a page-builder design control. Ported from CourseLit's\n * PageBuilderPropertyHeader; the tooltip is rendered via the native `title`\n * attribute so no tooltip dependency is needed.\n */\nexport function PageBuilderPropertyHeader({\n label,\n tooltip,\n}: {\n label: string;\n tooltip?: string;\n}) {\n return (\n <div className=\"flex grow items-center gap-1.5\">\n <h2 className=\"text-xs font-semibold text-foreground\">{label}</h2>\n {tooltip && (\n <span title={tooltip} className=\"inline-flex cursor-help\">\n <HelpCircle className=\"h-3.5 w-3.5 text-muted-foreground\" />\n </span>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../../primitives/lib/utils\";\nimport { PageBuilderPropertyHeader } from \"./page-builder-property-header\";\n\n/**\n * Slider with a paired numeric input, ported from CourseLit's\n * PageBuilderSlider. Uses a native range input instead of Radix Slider so it\n * adds no dependencies.\n */\nexport function PageBuilderSlider({\n title,\n min,\n max,\n value,\n onChange,\n tooltip,\n className,\n allowsReset = false,\n unit = \"px\",\n}: {\n title: string;\n min: number;\n max: number;\n value: number;\n onChange: (value?: number) => void;\n tooltip?: string;\n className?: string;\n allowsReset?: boolean;\n unit?: string;\n}) {\n return (\n <div className={cn(\"flex flex-col gap-2.5\", className)}>\n <div className=\"flex items-center justify-between gap-3\">\n <PageBuilderPropertyHeader label={title} tooltip={tooltip} />\n <div className=\"flex items-center gap-1.5\">\n <input\n type=\"number\"\n inputMode=\"numeric\"\n min={min}\n max={max}\n value={Number.isFinite(value) ? value : 0}\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 {allowsReset && (\n <button\n type=\"button\"\n title=\"Reset\"\n className=\"inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n onClick={(e) => {\n e.preventDefault();\n onChange();\n }}\n >\n <X className=\"h-3 w-3 text-muted-foreground hover:text-foreground\" />\n </button>\n )}\n </div>\n </div>\n <input\n type=\"range\"\n min={min}\n max={max}\n step={1}\n value={Number.isFinite(value) ? value : min}\n onChange={(e) => onChange(Number(e.currentTarget.value))}\n aria-label={title}\n className=\"h-1.5 w-full cursor-pointer accent-primary\"\n />\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../../primitives/lib/utils\";\nimport { PageBuilderPropertyHeader } from \"./page-builder-property-header\";\n\n/**\n * Color picker ported from CourseLit's ColorSelector. Uses a native\n * `<input type=\"color\">` swatch paired with a hex text input — no\n * dependencies on a color-picker library.\n */\nexport function ColorSelector({\n title,\n value,\n onChange,\n tooltip,\n className,\n allowReset = true,\n description,\n}: {\n title: string;\n value: string;\n onChange: (value?: string) => void;\n tooltip?: string;\n className?: string;\n allowReset?: boolean;\n description?: string;\n}) {\n const [localValue, setLocalValue] = React.useState(value);\n\n React.useEffect(() => {\n setLocalValue(value);\n }, [value]);\n\n const handleChange = (newValue: string) => {\n setLocalValue(newValue);\n onChange(newValue);\n };\n\n // Native color inputs only accept #rrggbb; fall back to black otherwise.\n const swatchValue = /^#[0-9a-fA-F]{6}$/.test(localValue) ? localValue : \"#000000\";\n\n return (\n <div className={cn(\"flex min-w-0 items-center justify-between gap-2\", className)}>\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <PageBuilderPropertyHeader label={title} tooltip={tooltip} />\n {description && (\n <p className=\"break-words text-xs text-muted-foreground\">{description}</p>\n )}\n </div>\n <div className=\"flex shrink-0 items-center gap-1.5\">\n <input\n type=\"color\"\n value={swatchValue}\n onChange={(e) => handleChange(e.currentTarget.value)}\n className=\"h-7 w-9 shrink-0 cursor-pointer rounded-md border border-input bg-background p-0.5\"\n aria-label={`${title} swatch`}\n />\n <input\n type=\"text\"\n value={localValue ?? \"\"}\n placeholder=\"#000000\"\n onChange={(e) => handleChange(e.currentTarget.value)}\n className=\"h-7 w-20 min-w-0 rounded-md border border-input bg-background px-2 py-1 text-xs text-foreground outline-none focus:ring-2 focus:ring-ring/20\"\n aria-label={`${title} hex value`}\n />\n {allowReset && (\n <button\n type=\"button\"\n title=\"Reset\"\n className=\"inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-md hover:bg-muted/50\"\n onClick={(e) => {\n e.preventDefault();\n setLocalValue(\"\");\n onChange();\n }}\n >\n <X className=\"h-3 w-3 text-muted-foreground hover:text-foreground\" />\n </button>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport type { ThemeStyle } from \"../../models\";\nimport { PageBuilderSlider } from \"./page-builder-slider\";\n\ntype PageWidth = ThemeStyle[\"structure\"][\"page\"][\"width\"];\n\n// Map of numeric values to Tailwind max-width classes\nconst MAX_WIDTH_MAP: Record<number, PageWidth> = {\n 1: \"max-w-2xl\",\n 2: \"max-w-3xl\",\n 3: \"max-w-4xl\",\n 4: \"max-w-5xl\",\n 5: \"max-w-6xl\",\n};\n\nexport function getMaxWidthTWClass(value: number): PageWidth {\n const roundedValue = Math.max(1, Math.min(5, Math.round(value)));\n return MAX_WIDTH_MAP[roundedValue] || MAX_WIDTH_MAP[5];\n}\n\ninterface MaxWidthSelectorProps {\n value?: PageWidth;\n onChange: (width?: PageWidth) => void;\n className?: string;\n /**\n * The value actually applied when `value` is unset — the active\n * theme's own page width. Without this the slider could display a\n * width that doesn't match what's really rendered.\n */\n themeDefault?: PageWidth;\n}\n\nexport function MaxWidthSelector({\n value,\n onChange,\n className = \"\",\n themeDefault,\n}: MaxWidthSelectorProps) {\n // Find the numeric value from the current Tailwind class, falling back\n // to the theme's own default (what's actually rendered) rather than a\n // hardcoded guess.\n const numericValue =\n Object.entries(MAX_WIDTH_MAP).find(\n ([_, v]) => v === (value ?? themeDefault),\n )?.[0] || \"5\";\n\n const handleChange = (newValue?: number) => {\n if (newValue === undefined) {\n onChange();\n return;\n }\n onChange(getMaxWidthTWClass(newValue));\n };\n\n return (\n <PageBuilderSlider\n title=\"Maximum width\"\n max={5}\n min={1}\n onChange={handleChange}\n value={parseInt(numericValue)}\n tooltip=\"Maximum width of the content\"\n className={className}\n allowsReset={true}\n unit=\"\"\n />\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport type { ThemeStyle } from \"../../models\";\nimport { PageBuilderSlider } from \"./page-builder-slider\";\n\ntype VerticalPadding = ThemeStyle[\"structure\"][\"section\"][\"padding\"][\"y\"];\n\n// Map of numeric values to Tailwind padding classes\nconst PADDING_MAP: Record<number, VerticalPadding> = {\n 0: \"py-0\",\n 1: \"py-4\",\n 2: \"py-6\",\n 3: \"py-8\",\n 4: \"py-10\",\n 5: \"py-12\",\n 6: \"py-16\",\n 7: \"py-20\",\n 8: \"py-24\",\n 9: \"py-32\",\n 10: \"py-40\",\n 11: \"py-48\",\n 12: \"py-56\",\n 13: \"py-64\",\n};\n\nexport function getVerticalPaddingTWClass(value: number): VerticalPadding {\n const roundedValue = Math.max(0, Math.min(13, Math.round(value)));\n return PADDING_MAP[roundedValue] || PADDING_MAP[5];\n}\n\ninterface VerticalPaddingSelectorProps {\n value?: VerticalPadding;\n onChange: (padding?: VerticalPadding) => void;\n className?: string;\n /**\n * The value actually applied when `value` is unset — the active\n * theme's own section padding. Without this the slider would default\n * to displaying 0 regardless of the real (usually much larger) padding\n * in effect, misleading the user into thinking nothing is applied.\n */\n themeDefault?: VerticalPadding;\n}\n\nexport function VerticalPaddingSelector({\n value,\n onChange,\n className = \"\",\n themeDefault,\n}: VerticalPaddingSelectorProps) {\n // Find the numeric value from the current Tailwind class, falling back\n // to the theme's own default (what's actually rendered) rather than 0.\n const numericValue =\n Object.entries(PADDING_MAP).find(([_, v]) => v === (value ?? themeDefault))?.[0] ||\n \"6\";\n\n const handleChange = (newValue?: number) => {\n if (newValue === undefined) {\n onChange();\n return;\n }\n onChange(getVerticalPaddingTWClass(newValue));\n };\n\n return (\n <PageBuilderSlider\n title=\"Vertical padding\"\n max={13}\n min={0}\n onChange={handleChange}\n value={parseInt(numericValue)}\n tooltip=\"Vertical padding of the section\"\n className={className}\n unit=\"\"\n />\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { PageBuilderSlider } from \"./page-builder-slider\";\n\ninterface ContentPaddingProps {\n value: number;\n onChange: (padding?: number) => void;\n className?: string;\n min?: number;\n max?: number;\n variant?: \"vertical\" | \"horizontal\";\n}\n\nexport function ContentPaddingSelector({\n value,\n onChange,\n className = \"\",\n variant = \"horizontal\",\n min,\n max,\n}: ContentPaddingProps) {\n const tooltip =\n variant === \"horizontal\"\n ? \"Width of the actual content. It affects only desktop class displays\"\n : \"Space on the top and bottom of the content. It affects only desktop class displays\";\n\n const defaultMax = variant === \"horizontal\" ? 100 : 200;\n const defaultMin = variant === \"horizontal\" ? 10 : 16;\n\n return (\n <PageBuilderSlider\n title={variant === \"horizontal\" ? \"Content width\" : \"Vertical padding\"}\n max={max || defaultMax}\n min={min || defaultMin}\n onChange={onChange}\n value={value}\n tooltip={tooltip}\n className={className}\n />\n );\n}\n","import type { SectionBackground } from \"../../models\";\n\nfunction svgToDataUri(svg: string): string {\n return `url(\"data:image/svg+xml,${encodeURIComponent(svg)}\")`;\n}\n\nexport type PatternPresetCategory = \"tile\" | \"glow\";\n\nexport interface PatternPreset {\n id: string;\n label: string;\n /** Grouping for the preset filter chips in the background panel. */\n category: PatternPresetCategory;\n /** Short blurb for tooltips / a11y. */\n description?: string;\n /**\n * Fields merged into the background's \"gradient\" (pattern) settings.\n * Light-mode pattern first; dark variants use lower-opacity white\n * strokes so the same tile reads on dark section colors.\n */\n apply: Pick<\n SectionBackground,\n | \"backgroundImage\"\n | \"backgroundImageDark\"\n | \"gradientBackgroundSize\"\n | \"gradientBackgroundPosition\"\n | \"gradientBackgroundRepeat\"\n | \"gradientMaskImage\"\n >;\n}\n\n// ─── SVG tile helpers ───────────────────────────────────────────────────────\n// Stroke / fill colors are low-contrast so patterns sit behind content\n// without fighting it. Dark-mode twins use white at similar opacity.\n\nconst light = {\n soft: \"rgba(0,0,0,0.06)\",\n mid: \"rgba(0,0,0,0.09)\",\n firm: \"rgba(0,0,0,0.12)\",\n strong: \"rgba(0,0,0,0.16)\",\n} as const;\n\nconst dark = {\n soft: \"rgba(255,255,255,0.06)\",\n mid: \"rgba(255,255,255,0.09)\",\n firm: \"rgba(255,255,255,0.12)\",\n strong: \"rgba(255,255,255,0.16)\",\n} as const;\n\nfunction dotsSvg(fill: string, size = 16, r = 1.35) {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${size}\" height=\"${size}\"><circle cx=\"${size / 4}\" cy=\"${size / 4}\" r=\"${r}\" fill=\"${fill}\"/></svg>`;\n}\n\nfunction gridSvg(stroke: string, size = 32) {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${size}\" height=\"${size}\"><path d=\"M${size} 0H0V${size}\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"1\"/></svg>`;\n}\n\nfunction diagonalSvg(stroke: string, size = 24) {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${size}\" height=\"${size}\"><path d=\"M0 ${size} ${size} 0M-${size / 4} ${size / 4} ${size / 4}-${size / 4}M${size * 0.75} ${size * 1.25} ${size * 1.25} ${size * 0.75}\" stroke=\"${stroke}\" stroke-width=\"1\"/></svg>`;\n}\n\nfunction contourSvg(stroke: string) {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"300\" height=\"150\"><g fill=\"none\" stroke=\"${stroke}\" stroke-width=\"1\">\n<path d=\"M0,15 Q37.5,-5 75,15 T150,15 T225,15 T300,15\"/>\n<path d=\"M0,45 Q37.5,25 75,45 T150,45 T225,45 T300,45\"/>\n<path d=\"M0,75 Q37.5,55 75,75 T150,75 T225,75 T300,75\"/>\n<path d=\"M0,105 Q37.5,85 75,105 T150,105 T225,105 T300,105\"/>\n<path d=\"M0,135 Q37.5,115 75,135 T150,135 T225,135 T300,135\"/>\n</g></svg>`;\n}\n\nfunction plusSvg(stroke: string, size = 24) {\n const mid = size / 2;\n const arm = size * 0.22;\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${size}\" height=\"${size}\"><path d=\"M${mid} ${mid - arm}v${arm * 2}M${mid - arm} ${mid}h${arm * 2}\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"1.25\" stroke-linecap=\"round\"/></svg>`;\n}\n\nfunction graphPaperSvg(minor: string, major: string, size = 80) {\n const step = size / 4;\n const lines: string[] = [];\n for (let i = 1; i < 4; i++) {\n lines.push(`M${i * step} 0V${size}`, `M0 ${i * step}H${size}`);\n }\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${size}\" height=\"${size}\">\n<path d=\"${lines.join(\"\")}\" fill=\"none\" stroke=\"${minor}\" stroke-width=\"1\"/>\n<path d=\"M${size} 0H0V${size}\" fill=\"none\" stroke=\"${major}\" stroke-width=\"1\"/>\n</svg>`;\n}\n\nfunction hexSvg(stroke: string, size = 56) {\n // Pointy-top hex that tiles on a rectangular grid with slight overlap feel\n const w = size;\n const h = Math.round(size * 0.866);\n // Simplified repeating hex outline\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${w}\" height=\"${h}\"><path d=\"M${w * 0.25} 0 L${w * 0.75} 0 L${w} ${h / 2} L${w * 0.75} ${h} L${w * 0.25} ${h} L0 ${h / 2} Z\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"1\"/></svg>`;\n}\n\nfunction chevronSvg(stroke: string, size = 28) {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${size}\" height=\"${size}\"><path d=\"M0 ${size * 0.35} L${size / 2} ${size * 0.65} L${size} ${size * 0.35}\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\n}\n\nfunction verticalLinesSvg(stroke: string, size = 12) {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${size}\" height=\"${size}\"><path d=\"M1 0V${size}\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"1\"/></svg>`;\n}\n\nfunction horizontalLinesSvg(stroke: string, size = 14) {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${size}\" height=\"${size}\"><path d=\"M0 1H${size}\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"1\"/></svg>`;\n}\n\nfunction crosshatchSvg(stroke: string, size = 20) {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${size}\" height=\"${size}\"><path d=\"M0 ${size} ${size} 0M-${size / 4} ${size / 4} ${size / 4}-${size / 4}M${size * 0.75} ${size * 1.25} ${size * 1.25} ${size * 0.75}M0 0 ${size} ${size}M-${size / 4} ${size * 0.75} ${size / 4} ${size * 1.25}M${size * 0.75} ${-size / 4} ${size * 1.25} ${size / 4}\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"1\"/></svg>`;\n}\n\nfunction diamondSvg(stroke: string, size = 28) {\n const m = size / 2;\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${size}\" height=\"${size}\"><path d=\"M${m} 1 L${size - 1} ${m} L${m} ${size - 1} L1 ${m} Z\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"1\"/></svg>`;\n}\n\nfunction wavesSvg(stroke: string) {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"120\" height=\"40\"><path d=\"M0 20 Q15 0 30 20 T60 20 T90 20 T120 20\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"1.25\"/></svg>`;\n}\n\nfunction concentricSvg(stroke: string, size = 64) {\n const c = size / 2;\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${size}\" height=\"${size}\">\n<circle cx=\"${c}\" cy=\"${c}\" r=\"${size * 0.18}\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"1\"/>\n<circle cx=\"${c}\" cy=\"${c}\" r=\"${size * 0.32}\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"1\"/>\n<circle cx=\"${c}\" cy=\"${c}\" r=\"${size * 0.46}\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"1\"/>\n</svg>`;\n}\n\nfunction isometricSvg(stroke: string, size = 48) {\n // Classic isometric cube outline tile\n const s = size;\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${s}\" height=\"${s * 0.866}\">\n<path d=\"M${s / 2} 0 L${s} ${s * 0.2165} L${s / 2} ${s * 0.433} L0 ${s * 0.2165} Z M${s / 2} ${s * 0.433} V${s * 0.866} M0 ${s * 0.2165} V${s * 0.65} L${s / 2} ${s * 0.866} L${s} ${s * 0.65} V${s * 0.2165}\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"1\"/>\n</svg>`;\n}\n\nfunction trianglesSvg(stroke: string, size = 36) {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${size}\" height=\"${Math.round(size * 0.866)}\"><path d=\"M${size / 2} 1 L${size - 1} ${size * 0.866 - 1} L1 ${size * 0.866 - 1} Z\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"1\"/></svg>`;\n}\n\nfunction scatterDotsSvg(fill: string, size = 48) {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${size}\" height=\"${size}\">\n<circle cx=\"8\" cy=\"10\" r=\"1.2\" fill=\"${fill}\"/>\n<circle cx=\"22\" cy=\"6\" r=\"0.9\" fill=\"${fill}\"/>\n<circle cx=\"38\" cy=\"14\" r=\"1.5\" fill=\"${fill}\"/>\n<circle cx=\"14\" cy=\"28\" r=\"1\" fill=\"${fill}\"/>\n<circle cx=\"30\" cy=\"24\" r=\"0.8\" fill=\"${fill}\"/>\n<circle cx=\"42\" cy=\"36\" r=\"1.1\" fill=\"${fill}\"/>\n<circle cx=\"6\" cy=\"40\" r=\"0.95\" fill=\"${fill}\"/>\n<circle cx=\"24\" cy=\"42\" r=\"1.3\" fill=\"${fill}\"/>\n</svg>`;\n}\n\nfunction brickSvg(stroke: string, w = 40, h = 20) {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${w}\" height=\"${h * 2}\">\n<path d=\"M0 0H${w}V${h}H0Z M0 ${h}H${w / 2}V${h * 2}H0Z M${w / 2} ${h}H${w}V${h * 2}H${w / 2}Z\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"1\"/>\n</svg>`;\n}\n\nfunction scalesSvg(stroke: string, size = 32) {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${size}\" height=\"${size * 0.6}\"><path d=\"M0 ${size * 0.6} A${size / 2} ${size * 0.55} 0 0 1 ${size} ${size * 0.6}\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"1\"/></svg>`;\n}\n\nfunction dashedGridSvg(stroke: string, size = 28) {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${size}\" height=\"${size}\"><path d=\"M${size} 0H0V${size}\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"1\" stroke-dasharray=\"3 4\"/></svg>`;\n}\n\nfunction circuitSvg(stroke: string, size = 64) {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${size}\" height=\"${size}\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"1\" stroke-linecap=\"round\">\n<path d=\"M8 8H28V28H8Z\"/>\n<path d=\"M36 12H52V20H36Z\"/>\n<path d=\"M12 36H20V52H12Z\"/>\n<path d=\"M28 8V4M8 16H4M28 20H36M20 28V36M44 20V36H36\"/>\n<circle cx=\"36\" cy=\"36\" r=\"3\"/>\n<circle cx=\"52\" cy=\"44\" r=\"2.5\"/>\n<path d=\"M39 36H49M52 41.5V36\"/>\n</svg>`;\n}\n\nfunction zigZagSvg(stroke: string, size = 24) {\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${size}\" height=\"${size}\"><path d=\"M0 ${size / 2} L${size / 4} ${size * 0.2} L${size / 2} ${size / 2} L${size * 0.75} ${size * 0.8} L${size} ${size / 2}\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"1.25\" stroke-linejoin=\"round\"/></svg>`;\n}\n\n/** Build a light + dark SVG pattern preset. */\nfunction svgPattern(\n id: string,\n label: string,\n lightSvg: string,\n darkSvg: string,\n size: string,\n description?: string,\n extras?: Partial<PatternPreset[\"apply\"]>,\n): PatternPreset {\n return {\n id,\n label,\n category: \"tile\",\n description,\n apply: {\n backgroundImage: svgToDataUri(lightSvg),\n backgroundImageDark: svgToDataUri(darkSvg),\n gradientBackgroundSize: size,\n gradientBackgroundRepeat: \"repeat\",\n gradientBackgroundPosition: \"0 0\",\n gradientMaskImage: undefined,\n ...extras,\n },\n };\n}\n\n/** Full-bleed CSS gradient / mesh presets (no tiling). */\nfunction cssPattern(\n id: string,\n label: string,\n lightCss: string,\n darkCss: string,\n description?: string,\n extras?: Partial<PatternPreset[\"apply\"]>,\n): PatternPreset {\n return {\n id,\n label,\n category: \"glow\",\n description,\n apply: {\n backgroundImage: lightCss,\n backgroundImageDark: darkCss,\n gradientBackgroundSize: \"100% 100%\",\n gradientBackgroundRepeat: \"no-repeat\",\n gradientBackgroundPosition: \"center\",\n gradientMaskImage: undefined,\n ...extras,\n },\n };\n}\n\n/**\n * Ready-made background patterns for the \"Pattern\" tab of the section\n * background panel — a preset picker over the same free-CSS\n * `backgroundImage` / size / repeat fields, so choosing one is a single\n * click instead of hand-writing an SVG data URI. Tiled patterns include\n * dark-mode twins; mesh/glow presets use full-bleed CSS gradients.\n *\n * Tune any field afterwards under Advanced, or bring your own CSS.\n */\nexport const PATTERN_PRESETS: PatternPreset[] = [\n // ── Classic tiles ────────────────────────────────────────────────────\n svgPattern(\n \"dots\",\n \"Dots\",\n dotsSvg(light.firm),\n dotsSvg(dark.firm),\n \"16px 16px\",\n \"Subtle dot grid — the default SaaS texture\",\n ),\n svgPattern(\n \"dots-fine\",\n \"Fine dots\",\n dotsSvg(light.mid, 10, 0.9),\n dotsSvg(dark.mid, 10, 0.9),\n \"10px 10px\",\n \"Tighter, quieter polka texture\",\n ),\n svgPattern(\n \"scatter\",\n \"Scatter\",\n scatterDotsSvg(light.firm),\n scatterDotsSvg(dark.firm),\n \"48px 48px\",\n \"Organic, uneven speckles\",\n ),\n svgPattern(\n \"grid\",\n \"Grid\",\n gridSvg(light.mid),\n gridSvg(dark.mid),\n \"32px 32px\",\n \"Clean square lattice\",\n ),\n svgPattern(\n \"graph-paper\",\n \"Graph paper\",\n graphPaperSvg(light.soft, light.firm),\n graphPaperSvg(dark.soft, dark.firm),\n \"80px 80px\",\n \"Notebook-style minor + major grid\",\n ),\n svgPattern(\n \"dashed-grid\",\n \"Dashed grid\",\n dashedGridSvg(light.mid),\n dashedGridSvg(dark.mid),\n \"28px 28px\",\n \"Soft technical grid with dashed strokes\",\n ),\n svgPattern(\n \"diagonal\",\n \"Diagonal lines\",\n diagonalSvg(light.mid),\n diagonalSvg(dark.mid),\n \"24px 24px\",\n \"Classic hatch at 45°\",\n ),\n svgPattern(\n \"crosshatch\",\n \"Crosshatch\",\n crosshatchSvg(light.soft),\n crosshatchSvg(dark.soft),\n \"20px 20px\",\n \"Crossed diagonals for richer grain\",\n ),\n svgPattern(\n \"plus\",\n \"Plus marks\",\n plusSvg(light.firm),\n plusSvg(dark.firm),\n \"24px 24px\",\n \"Cross / plus marks — popular on product pages\",\n ),\n svgPattern(\n \"vertical\",\n \"Pinstripe\",\n verticalLinesSvg(light.mid),\n verticalLinesSvg(dark.mid),\n \"12px 12px\",\n \"Editorial vertical lines\",\n ),\n svgPattern(\n \"horizontal\",\n \"Ruled lines\",\n horizontalLinesSvg(light.mid),\n horizontalLinesSvg(dark.mid),\n \"14px 14px\",\n \"Horizontal notebook rules\",\n ),\n svgPattern(\n \"zigzag\",\n \"Zigzag\",\n zigZagSvg(light.mid),\n zigZagSvg(dark.mid),\n \"24px 24px\",\n \"Continuous zigzag band\",\n ),\n svgPattern(\n \"chevron\",\n \"Chevron\",\n chevronSvg(light.mid),\n chevronSvg(dark.mid),\n \"28px 28px\",\n \"Stacked chevrons for motion\",\n ),\n svgPattern(\n \"diamond\",\n \"Diamonds\",\n diamondSvg(light.mid),\n diamondSvg(dark.mid),\n \"28px 28px\",\n \"Geometric diamond lattice\",\n ),\n svgPattern(\n \"triangles\",\n \"Triangles\",\n trianglesSvg(light.mid),\n trianglesSvg(dark.mid),\n \"36px 31px\",\n \"Tessellated triangle outlines\",\n ),\n svgPattern(\n \"hexagon\",\n \"Hexagons\",\n hexSvg(light.mid),\n hexSvg(dark.mid),\n \"56px 48px\",\n \"Honeycomb / tech hex grid\",\n ),\n svgPattern(\n \"isometric\",\n \"Isometric\",\n isometricSvg(light.mid),\n isometricSvg(dark.mid),\n \"48px 42px\",\n \"3D cube lattice\",\n ),\n svgPattern(\n \"waves\",\n \"Waves\",\n wavesSvg(light.mid),\n wavesSvg(dark.mid),\n \"120px 40px\",\n \"Gentle repeating sine waves\",\n ),\n svgPattern(\n \"contour\",\n \"Contour\",\n contourSvg(light.soft),\n contourSvg(dark.soft),\n \"300px 150px\",\n \"Topographic contour strokes\",\n ),\n svgPattern(\n \"concentric\",\n \"Ripples\",\n concentricSvg(light.soft),\n concentricSvg(dark.soft),\n \"64px 64px\",\n \"Concentric circle tiles\",\n ),\n svgPattern(\n \"scales\",\n \"Scales\",\n scalesSvg(light.mid),\n scalesSvg(dark.mid),\n \"32px 19px\",\n \"Fish-scale / arc tile\",\n ),\n svgPattern(\n \"brick\",\n \"Brick\",\n brickSvg(light.mid),\n brickSvg(dark.mid),\n \"40px 40px\",\n \"Offset brick running bond\",\n ),\n svgPattern(\n \"circuit\",\n \"Circuit\",\n circuitSvg(light.mid),\n circuitSvg(dark.mid),\n \"64px 64px\",\n \"Tech / PCB-inspired traces\",\n ),\n\n // ── Full-bleed CSS (modern hero / marketing) ─────────────────────────\n cssPattern(\n \"soft-mesh\",\n \"Soft mesh\",\n `radial-gradient(at 20% 20%, rgba(99,102,241,0.18) 0px, transparent 50%), radial-gradient(at 80% 10%, rgba(236,72,153,0.14) 0px, transparent 45%), radial-gradient(at 50% 80%, rgba(34,211,238,0.12) 0px, transparent 50%), radial-gradient(at 90% 70%, rgba(250,204,21,0.1) 0px, transparent 40%)`,\n `radial-gradient(at 20% 20%, rgba(99,102,241,0.28) 0px, transparent 50%), radial-gradient(at 80% 10%, rgba(236,72,153,0.22) 0px, transparent 45%), radial-gradient(at 50% 80%, rgba(34,211,238,0.18) 0px, transparent 50%), radial-gradient(at 90% 70%, rgba(250,204,21,0.12) 0px, transparent 40%)`,\n \"Colorful soft blobs — modern marketing hero\",\n ),\n cssPattern(\n \"aurora\",\n \"Aurora\",\n `linear-gradient(135deg, rgba(56,189,248,0.2), transparent 50%), linear-gradient(225deg, rgba(167,139,250,0.22), transparent 50%), linear-gradient(45deg, rgba(52,211,153,0.15), transparent 40%)`,\n `linear-gradient(135deg, rgba(56,189,248,0.28), transparent 50%), linear-gradient(225deg, rgba(167,139,250,0.3), transparent 50%), linear-gradient(45deg, rgba(52,211,153,0.2), transparent 40%)`,\n \"Layered aurora bands\",\n ),\n cssPattern(\n \"spotlight\",\n \"Spotlight\",\n `radial-gradient(ellipse 80% 60% at 50% -10%, rgba(99,102,241,0.22), transparent 55%)`,\n `radial-gradient(ellipse 80% 60% at 50% -10%, rgba(129,140,248,0.35), transparent 55%)`,\n \"Top-centered spotlight glow\",\n ),\n cssPattern(\n \"bottom-glow\",\n \"Bottom glow\",\n `radial-gradient(ellipse 70% 50% at 50% 110%, rgba(14,165,233,0.2), transparent 55%)`,\n `radial-gradient(ellipse 70% 50% at 50% 110%, rgba(56,189,248,0.28), transparent 55%)`,\n \"Soft light rising from the bottom edge\",\n ),\n cssPattern(\n \"corner-glow\",\n \"Corner glow\",\n `radial-gradient(ellipse 60% 50% at 0% 0%, rgba(244,63,94,0.16), transparent 50%), radial-gradient(ellipse 50% 45% at 100% 100%, rgba(59,130,246,0.16), transparent 50%)`,\n `radial-gradient(ellipse 60% 50% at 0% 0%, rgba(251,113,133,0.25), transparent 50%), radial-gradient(ellipse 50% 45% at 100% 100%, rgba(96,165,250,0.25), transparent 50%)`,\n \"Opposite-corner color accents\",\n ),\n cssPattern(\n \"horizon\",\n \"Horizon fade\",\n `linear-gradient(180deg, transparent 0%, rgba(15,23,42,0.04) 55%, rgba(15,23,42,0.08) 100%)`,\n `linear-gradient(180deg, transparent 0%, rgba(255,255,255,0.04) 55%, rgba(255,255,255,0.1) 100%)`,\n \"Gentle vertical vignette toward the base\",\n ),\n cssPattern(\n \"diagonal-fade\",\n \"Diagonal fade\",\n `linear-gradient(135deg, rgba(99,102,241,0.12) 0%, transparent 45%, rgba(236,72,153,0.1) 100%)`,\n `linear-gradient(135deg, rgba(129,140,248,0.2) 0%, transparent 45%, rgba(244,114,182,0.16) 100%)`,\n \"Two-tone diagonal wash\",\n ),\n svgPattern(\n \"grid-fade\",\n \"Fading grid\",\n gridSvg(light.firm, 40),\n gridSvg(dark.firm, 40),\n \"40px 40px\",\n \"Grid that softens toward the edges\",\n {\n gradientMaskImage:\n \"radial-gradient(ellipse at center, black 25%, transparent 75%)\",\n },\n ),\n];\n","\"use client\";\n\nimport React, { useMemo, useState } from \"react\";\nimport {\n Check,\n ChevronDown,\n ExternalLink,\n ImageIcon,\n Palette,\n Pin,\n Sparkles,\n} from \"lucide-react\";\nimport type {\n BackgroundRepeat,\n BlendMode,\n SectionBackground,\n SectionBackgroundOverlay,\n} from \"../../models\";\nimport { getMediaUrl } from \"../../models/media\";\nimport { ImageUploadDialog } from \"@frontlit/media-uploader\";\nimport { cn } from \"../../primitives/lib/utils\";\nimport { Switch } from \"../../primitives/components/ui/switch\";\nimport { ColorSelector } from \"./color-selector\";\nimport { PageBuilderSlider } from \"./page-builder-slider\";\nimport { PATTERN_PRESETS, type PatternPresetCategory } from \"./pattern-presets\";\n\ninterface SectionBackgroundPanelProps {\n value?: SectionBackground;\n onChange: (value: SectionBackground) => void;\n className?: string;\n}\n\nconst BG_TYPES = [\n {\n type: \"color\" as const,\n label: \"Color\",\n description: \"Solid fill\",\n icon: Palette,\n },\n {\n type: \"image\" as const,\n label: \"Image\",\n description: \"Photo or asset\",\n icon: ImageIcon,\n },\n {\n type: \"gradient\" as const,\n label: \"Pattern\",\n description: \"Texture or glow\",\n icon: Sparkles,\n },\n];\n\nconst BLEND_MODES: { label: string; value: BlendMode }[] = [\n { label: \"Normal\", value: \"normal\" },\n { label: \"Multiply\", value: \"multiply\" },\n { label: \"Screen\", value: \"screen\" },\n { label: \"Overlay\", value: \"overlay\" },\n { label: \"Darken\", value: \"darken\" },\n { label: \"Lighten\", value: \"lighten\" },\n { label: \"Color Dodge\", value: \"color-dodge\" },\n { label: \"Color Burn\", value: \"color-burn\" },\n { label: \"Hard Light\", value: \"hard-light\" },\n { label: \"Soft Light\", value: \"soft-light\" },\n { label: \"Difference\", value: \"difference\" },\n { label: \"Exclusion\", value: \"exclusion\" },\n { label: \"Hue\", value: \"hue\" },\n { label: \"Saturation\", value: \"saturation\" },\n { label: \"Color\", value: \"color\" },\n { label: \"Luminosity\", value: \"luminosity\" },\n];\n\nconst BACKGROUND_REPEAT_OPTIONS: {\n label: string;\n value: BackgroundRepeat;\n}[] = [\n { label: \"No repeat\", value: \"no-repeat\" },\n { label: \"Repeat\", value: \"repeat\" },\n { label: \"Repeat X\", value: \"repeat-x\" },\n { label: \"Repeat Y\", value: \"repeat-y\" },\n { label: \"Space\", value: \"space\" },\n { label: \"Round\", value: \"round\" },\n];\n\nconst PATTERN_FILTERS: {\n id: \"all\" | PatternPresetCategory;\n label: string;\n}[] = [\n { id: \"all\", label: \"All\" },\n { id: \"tile\", label: \"Tiles\" },\n { id: \"glow\", label: \"Glows\" },\n];\n\nconst fieldLabelClass = \"text-xs font-semibold tracking-tight text-foreground\";\nconst fieldHintClass = \"text-[11px] leading-relaxed text-muted-foreground break-words\";\nconst controlClass =\n \"box-border h-9 w-full min-w-0 max-w-full rounded-lg border border-input bg-muted/20 px-3 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\";\nconst textareaClass =\n \"box-border min-h-[4.5rem] w-full min-w-0 max-w-full resize-y rounded-lg border border-input bg-muted/20 px-3 py-2 font-mono text-[11px] leading-relaxed text-foreground outline-none transition-colors placeholder:text-muted-foreground/70 focus:border-ring focus:bg-background focus:ring-2 focus:ring-ring/20 break-all\";\n\nfunction FieldLabel({\n htmlFor,\n children,\n hint,\n trailing,\n}: {\n htmlFor?: string;\n children: React.ReactNode;\n hint?: string;\n trailing?: React.ReactNode;\n}) {\n return (\n <div className=\"flex min-w-0 items-start justify-between gap-2\">\n <div className=\"min-w-0 flex-1 space-y-0.5\">\n <label htmlFor={htmlFor} className={fieldLabelClass}>\n {children}\n </label>\n {hint ? <p className={fieldHintClass}>{hint}</p> : null}\n </div>\n {trailing ? <div className=\"shrink-0 pt-0.5\">{trailing}</div> : null}\n </div>\n );\n}\n\nfunction PanelInput(props: React.InputHTMLAttributes<HTMLInputElement>) {\n return <input {...props} className={cn(controlClass, props.className)} />;\n}\n\nfunction PanelTextarea(props: React.TextareaHTMLAttributes<HTMLTextAreaElement>) {\n return (\n <textarea\n {...props}\n className={cn(textareaClass, props.className)}\n spellCheck={false}\n />\n );\n}\n\nfunction PanelSelect<T extends string>({\n id,\n title,\n hint,\n value,\n onChange,\n options,\n}: {\n id?: string;\n title: string;\n hint?: string;\n value: T;\n onChange: (value: T) => void;\n options: { label: string; value: T }[];\n}) {\n return (\n <div className=\"space-y-2\">\n <FieldLabel htmlFor={id} hint={hint}>\n {title}\n </FieldLabel>\n <select\n id={id}\n className={cn(controlClass, \"cursor-pointer appearance-none pr-8\")}\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 </div>\n );\n}\n\nfunction SectionCard({\n title,\n description,\n children,\n className,\n}: {\n title?: string;\n description?: string;\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <div\n className={cn(\n \"min-w-0 max-w-full overflow-hidden rounded-xl border border-border/70 bg-card/40 p-3 shadow-sm\",\n className,\n )}\n >\n {(title || description) && (\n <div className=\"mb-3 space-y-0.5\">\n {title ? (\n <p className=\"text-xs font-semibold text-foreground\">{title}</p>\n ) : null}\n {description ? <p className={fieldHintClass}>{description}</p> : null}\n </div>\n )}\n {children}\n </div>\n );\n}\n\nfunction CollapsibleCard({\n title,\n description,\n defaultOpen = false,\n children,\n}: {\n title: string;\n description?: string;\n defaultOpen?: boolean;\n children: React.ReactNode;\n}) {\n const [open, setOpen] = useState(defaultOpen);\n\n return (\n <div className=\"min-w-0 max-w-full overflow-hidden rounded-xl border border-border/70 bg-card/40 shadow-sm\">\n <button\n type=\"button\"\n className=\"flex w-full min-w-0 items-center gap-3 px-3 py-2.5 text-left transition-colors hover:bg-muted/30\"\n aria-expanded={open}\n onClick={() => setOpen((v) => !v)}\n >\n <div className=\"min-w-0 flex-1 space-y-0.5\">\n <p className=\"text-xs font-semibold text-foreground\">{title}</p>\n {description ? <p className={fieldHintClass}>{description}</p> : null}\n </div>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200\",\n open && \"rotate-180\",\n )}\n aria-hidden\n />\n </button>\n {open ? (\n <div className=\"min-w-0 space-y-4 border-t border-border/60 px-3 py-3\">\n {children}\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction FixedBackgroundToggle({\n checked,\n onChange,\n}: {\n checked: boolean;\n onChange: (fixed: boolean) => void;\n}) {\n return (\n <SectionCard>\n <div className=\"flex min-w-0 items-start gap-3\">\n <span\n className={cn(\n \"mt-0.5 inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-lg border\",\n checked\n ? \"border-primary/30 bg-primary/10 text-primary\"\n : \"border-border/70 bg-muted/30 text-muted-foreground\",\n )}\n >\n <Pin className=\"h-3.5 w-3.5\" aria-hidden />\n </span>\n <div className=\"min-w-0 flex-1 space-y-1\">\n <div className=\"flex items-center justify-between gap-3\">\n <label\n htmlFor=\"bg-fixed-toggle\"\n className=\"text-xs font-semibold text-foreground\"\n >\n Fixed background\n </label>\n <Switch\n id=\"bg-fixed-toggle\"\n checked={checked}\n onCheckedChange={onChange}\n aria-describedby=\"bg-fixed-hint\"\n />\n </div>\n <p id=\"bg-fixed-hint\" className={fieldHintClass}>\n Keep the background still while the page scrolls — content moves over a\n static surface.\n </p>\n </div>\n </div>\n </SectionCard>\n );\n}\n\nfunction BackgroundPreview({ value }: { value: SectionBackground }) {\n const imageUrl =\n value.type === \"image\" ? (getMediaUrl(value.media) ?? undefined) : undefined;\n\n const previewStyle: React.CSSProperties = (() => {\n if (value.type === \"color\") {\n return {\n backgroundColor: value.backgroundColor || \"var(--muted)\",\n };\n }\n if (value.type === \"image\") {\n return {\n backgroundColor: \"var(--muted)\",\n backgroundImage: imageUrl ? `url(${imageUrl})` : undefined,\n backgroundSize: value.backgroundSize || \"cover\",\n backgroundPosition: value.backgroundPosition || \"center\",\n backgroundRepeat: value.backgroundRepeat || \"no-repeat\",\n };\n }\n return {\n backgroundColor: \"var(--background)\",\n backgroundImage: value.backgroundImage,\n backgroundSize: value.gradientBackgroundSize || \"cover\",\n backgroundPosition: value.gradientBackgroundPosition || \"center\",\n backgroundRepeat: value.gradientBackgroundRepeat || \"no-repeat\",\n WebkitMaskImage: value.gradientMaskImage,\n maskImage: value.gradientMaskImage,\n };\n })();\n\n const typeLabel = BG_TYPES.find((t) => t.type === value.type)?.label ?? \"Background\";\n\n return (\n <div className=\"min-w-0 max-w-full overflow-hidden rounded-xl border border-border/70 shadow-sm\">\n <div className=\"relative h-14 w-full max-w-full\" style={previewStyle}>\n {value.type === \"image\" && imageUrl && (value.blur || 0) > 0 ? (\n <div\n className=\"absolute inset-0\"\n style={{\n backdropFilter: `blur(${value.blur}px)`,\n }}\n />\n ) : null}\n {value.type === \"image\" && value.overlay?.color ? (\n <div\n className=\"absolute inset-0\"\n style={{\n backgroundColor: value.overlay.color,\n opacity: (value.overlay.opacity || 0) / 10,\n mixBlendMode: value.overlay.blendMode || \"normal\",\n }}\n />\n ) : null}\n {value.type === \"image\" && !imageUrl ? (\n <div className=\"absolute inset-0 flex items-center justify-center gap-1.5 text-[11px] text-muted-foreground\">\n <ImageIcon className=\"h-3.5 w-3.5\" aria-hidden />\n No image yet\n </div>\n ) : null}\n {value.type === \"gradient\" && !value.backgroundImage ? (\n <div className=\"absolute inset-0 flex items-center justify-center gap-1.5 text-[11px] text-muted-foreground\">\n <Sparkles className=\"h-3.5 w-3.5\" aria-hidden />\n Choose a pattern\n </div>\n ) : null}\n </div>\n <div className=\"flex items-center justify-between gap-2 border-t border-border/60 bg-muted/20 px-3 py-1.5\">\n <span className=\"text-[10px] font-semibold uppercase tracking-[0.14em] text-muted-foreground\">\n Preview\n </span>\n <span className=\"text-[11px] font-medium text-foreground\">{typeLabel}</span>\n </div>\n </div>\n );\n}\n\n/**\n * Section background editor for the Design tab. Segmented type switcher,\n * live preview, and card-grouped controls that write into the same\n * `SectionBackground` model as before.\n */\nexport function SectionBackgroundPanel({\n value = { type: \"color\" },\n onChange,\n className,\n}: SectionBackgroundPanelProps) {\n const [patternFilter, setPatternFilter] = useState<\"all\" | PatternPresetCategory>(\n \"all\",\n );\n\n const handleTypeChange = (type: SectionBackground[\"type\"]) => {\n onChange({ ...value, type });\n };\n\n const handleBackgroundChange = (updates: Partial<SectionBackground>) => {\n onChange({ ...value, ...updates });\n };\n\n const handleOverlayChange = (overlayUpdates: Partial<SectionBackgroundOverlay>) => {\n onChange({\n ...value,\n overlay: {\n color: \"\",\n blendMode: \"normal\",\n opacity: 0,\n ...value.overlay,\n ...overlayUpdates,\n },\n });\n };\n\n const filteredPresets = useMemo(\n () =>\n patternFilter === \"all\"\n ? PATTERN_PRESETS\n : PATTERN_PRESETS.filter((p) => p.category === patternFilter),\n [patternFilter],\n );\n\n return (\n <div className={cn(\"min-w-0 max-w-full space-y-3\", className)}>\n {/* Type switcher */}\n <div\n role=\"tablist\"\n aria-label=\"Background type\"\n className=\"grid min-w-0 grid-cols-3 gap-1.5\"\n >\n {BG_TYPES.map((tab) => {\n const Icon = tab.icon;\n const active = value.type === tab.type;\n return (\n <button\n key={tab.type}\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n className={cn(\n \"group flex min-w-0 flex-col items-start gap-1 rounded-xl border px-2 py-2 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40\",\n active\n ? \"border-primary/50 bg-primary/8 shadow-sm\"\n : \"border-border/80 bg-muted/15 text-muted-foreground hover:border-primary/30 hover:bg-muted/40 hover:text-foreground\",\n )}\n onClick={() => handleTypeChange(tab.type)}\n >\n <span\n className={cn(\n \"inline-flex h-6 w-6 items-center justify-center rounded-md border transition-colors\",\n active\n ? \"border-primary/30 bg-primary/15 text-primary\"\n : \"border-border/70 bg-background text-muted-foreground group-hover:text-foreground\",\n )}\n >\n <Icon className=\"h-3.5 w-3.5\" aria-hidden />\n </span>\n <span className=\"min-w-0 space-y-0.5\">\n <span\n className={cn(\n \"block truncate text-xs font-semibold leading-none\",\n active ? \"text-foreground\" : \"text-inherit\",\n )}\n >\n {tab.label}\n </span>\n <span className=\"block truncate text-[10px] leading-tight text-muted-foreground\">\n {tab.description}\n </span>\n </span>\n </button>\n );\n })}\n </div>\n\n <BackgroundPreview value={value} />\n\n {value.type === \"color\" && (\n <SectionCard\n title=\"Fill colors\"\n description=\"Solid section background for light and dark appearance.\"\n >\n <div className=\"space-y-4\">\n <ColorSelector\n title=\"Light mode\"\n value={value.backgroundColor || \"\"}\n onChange={(color) =>\n handleBackgroundChange({\n backgroundColor: color,\n })\n }\n allowReset={true}\n />\n <div className=\"border-t border-border/50 pt-4\">\n <ColorSelector\n title=\"Dark mode\"\n value={value.backgroundColorDark || \"\"}\n onChange={(color) =>\n handleBackgroundChange({\n backgroundColorDark: color,\n })\n }\n allowReset={true}\n description=\"Optional override when the page is in dark mode\"\n />\n </div>\n </div>\n </SectionCard>\n )}\n\n {value.type === \"image\" && (\n <div className=\"space-y-3\">\n <FixedBackgroundToggle\n checked={value.backgroundAttachment === \"fixed\"}\n onChange={(fixed) =>\n handleBackgroundChange({\n backgroundAttachment: fixed ? \"fixed\" : \"scroll\",\n })\n }\n />\n\n <SectionCard\n title=\"Source\"\n description=\"Upload an image or paste a public URL for the section backdrop.\"\n >\n <div className=\"space-y-3\">\n {getMediaUrl(value.media) ? (\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={getMediaUrl(value.media)!}\n alt=\"Background preview\"\n className=\"h-full w-full object-cover\"\n />\n </div>\n <div className=\"flex items-center gap-2\">\n <ImageUploadDialog\n title=\"Change background image\"\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 handleBackgroundChange({\n media: {\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 >\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={() => handleBackgroundChange({ media: undefined })}\n >\n Remove\n </button>\n </div>\n </div>\n ) : (\n <ImageUploadDialog\n title=\"Choose background image\"\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 handleBackgroundChange({\n media: {\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 >\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\n <div className=\"space-y-1.5 pt-1\">\n <FieldLabel htmlFor=\"background-image-url\">Or paste image URL</FieldLabel>\n <div className=\"relative\">\n <ImageIcon\n className=\"pointer-events-none absolute left-3 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground\"\n aria-hidden\n />\n <PanelInput\n id=\"background-image-url\"\n value={getMediaUrl(value.media) || \"\"}\n onChange={(e) =>\n handleBackgroundChange({\n media: e.target.value\n ? { file: e.target.value, url: e.target.value }\n : undefined,\n })\n }\n placeholder=\"https://example.com/background.jpg\"\n className=\"pl-9\"\n />\n </div>\n </div>\n </div>\n </SectionCard>\n\n <SectionCard title=\"Effects\">\n <PageBuilderSlider\n title=\"Blur\"\n min={0}\n max={20}\n value={value.blur || 0}\n onChange={(blur) => handleBackgroundChange({ blur: blur || 0 })}\n unit=\"px\"\n tooltip=\"Softens the image behind the content\"\n />\n </SectionCard>\n\n <CollapsibleCard\n title=\"Overlay\"\n description=\"Tint the image for contrast with text\"\n >\n <ColorSelector\n title=\"Overlay color\"\n value={value.overlay?.color || \"\"}\n onChange={(color) => handleOverlayChange({ color: color || \"\" })}\n />\n <ColorSelector\n title=\"Dark mode overlay\"\n value={value.overlay?.colorDark || \"\"}\n onChange={(color) => handleOverlayChange({ colorDark: color })}\n allowReset={true}\n description=\"Optional overlay when dark mode is active\"\n />\n <PageBuilderSlider\n title=\"Opacity\"\n min={0}\n max={10}\n value={value.overlay?.opacity || 0}\n onChange={(opacity) =>\n handleOverlayChange({\n opacity: opacity || 0,\n })\n }\n unit=\"\"\n tooltip=\"0 is invisible, 10 is fully solid\"\n />\n <PanelSelect\n id=\"overlay-blend-mode\"\n title=\"Blend mode\"\n value={value.overlay?.blendMode || \"normal\"}\n onChange={(mode) => handleOverlayChange({ blendMode: mode })}\n options={BLEND_MODES}\n />\n </CollapsibleCard>\n\n <CollapsibleCard\n title=\"Advanced\"\n description=\"Size, position, repeat, and CSS mask\"\n >\n <div className=\"space-y-2\">\n <FieldLabel\n htmlFor=\"image-background-size\"\n hint=\"e.g. cover, contain, 100%\"\n >\n Background size\n </FieldLabel>\n <PanelInput\n id=\"image-background-size\"\n value={value.backgroundSize || \"\"}\n onChange={(e) =>\n handleBackgroundChange({\n backgroundSize: e.target.value,\n })\n }\n placeholder=\"cover\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <FieldLabel\n htmlFor=\"image-background-position\"\n hint=\"e.g. center, top left, 50% 50%\"\n >\n Background position\n </FieldLabel>\n <PanelInput\n id=\"image-background-position\"\n value={value.backgroundPosition || \"\"}\n onChange={(e) =>\n handleBackgroundChange({\n backgroundPosition: e.target.value,\n })\n }\n placeholder=\"center\"\n />\n </div>\n\n <PanelSelect\n id=\"image-background-repeat\"\n title=\"Background repeat\"\n value={value.backgroundRepeat || \"no-repeat\"}\n onChange={(repeat) =>\n handleBackgroundChange({\n backgroundRepeat: repeat,\n })\n }\n options={BACKGROUND_REPEAT_OPTIONS}\n />\n\n <div className=\"space-y-2\">\n <FieldLabel\n htmlFor=\"mask-image\"\n hint=\"CSS mask to fade or crop the image\"\n trailing={\n <a\n href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/mask-image\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1 text-[10px] font-medium text-muted-foreground underline-offset-2 hover:text-foreground hover:underline\"\n >\n Docs\n <ExternalLink className=\"h-3 w-3\" aria-hidden />\n </a>\n }\n >\n Mask image\n </FieldLabel>\n <PanelTextarea\n id=\"mask-image\"\n value={value.maskImage || \"\"}\n onChange={(e) =>\n handleBackgroundChange({\n maskImage: e.target.value || undefined,\n })\n }\n placeholder=\"linear-gradient(black, transparent)\"\n rows={2}\n />\n </div>\n </CollapsibleCard>\n </div>\n )}\n\n {value.type === \"gradient\" && (\n <div className=\"space-y-3\">\n <FixedBackgroundToggle\n checked={value.backgroundAttachment === \"fixed\"}\n onChange={(fixed) =>\n handleBackgroundChange({\n backgroundAttachment: fixed ? \"fixed\" : \"scroll\",\n })\n }\n />\n\n <SectionCard\n title=\"Presets\"\n description=\"One click fills the CSS fields below — edit anytime.\"\n >\n <div className=\"mb-3 flex flex-wrap gap-1.5\">\n {PATTERN_FILTERS.map((filter) => {\n const active = patternFilter === filter.id;\n return (\n <button\n key={filter.id}\n type=\"button\"\n className={cn(\n \"rounded-full px-2.5 py-1 text-[11px] font-semibold transition-colors\",\n active\n ? \"bg-primary text-primary-foreground shadow-sm\"\n : \"bg-muted/50 text-muted-foreground hover:bg-muted hover:text-foreground\",\n )}\n onClick={() => setPatternFilter(filter.id)}\n >\n {filter.label}\n </button>\n );\n })}\n </div>\n\n <div className=\"grid max-h-52 min-w-0 grid-cols-3 gap-1.5 overflow-x-hidden overflow-y-auto\">\n {filteredPresets.map((preset) => {\n const isSelected =\n value.backgroundImage === preset.apply.backgroundImage;\n return (\n <button\n key={preset.id}\n type=\"button\"\n title={preset.description ?? preset.label}\n aria-pressed={isSelected}\n className={cn(\n \"group relative flex min-w-0 flex-col overflow-hidden rounded-lg border text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40\",\n isSelected\n ? \"border-primary/55 bg-primary/5 shadow-sm\"\n : \"border-border/80 bg-muted/10 hover:border-primary/35 hover:bg-muted/30\",\n )}\n onClick={() => handleBackgroundChange(preset.apply)}\n >\n <span\n className=\"relative h-12 w-full max-w-full bg-background\"\n style={{\n backgroundImage: preset.apply.backgroundImage,\n backgroundSize: preset.apply.gradientBackgroundSize,\n backgroundRepeat: preset.apply.gradientBackgroundRepeat,\n backgroundPosition: preset.apply.gradientBackgroundPosition,\n WebkitMaskImage: preset.apply.gradientMaskImage,\n maskImage: preset.apply.gradientMaskImage,\n }}\n aria-hidden\n >\n {isSelected ? (\n <span className=\"absolute right-1 top-1 flex h-3.5 w-3.5 items-center justify-center rounded-full bg-primary text-primary-foreground shadow-sm\">\n <Check className=\"h-2.5 w-2.5\" aria-hidden />\n </span>\n ) : null}\n </span>\n <span className=\"truncate border-t border-border/60 px-1 py-1 text-[10px] font-semibold leading-tight text-foreground\">\n {preset.label}\n </span>\n </button>\n );\n })}\n </div>\n </SectionCard>\n\n <SectionCard\n title=\"Custom CSS\"\n description=\"Override or hand-author background-image values.\"\n >\n <div className=\"min-w-0 space-y-3.5\">\n <div className=\"min-w-0 space-y-2\">\n <FieldLabel\n htmlFor=\"gradient-css\"\n hint=\"CSS background-image — gradients, SVG data URIs, etc.\"\n >\n Light mode\n </FieldLabel>\n <PanelTextarea\n id=\"gradient-css\"\n value={value.backgroundImage || \"\"}\n onChange={(e) =>\n handleBackgroundChange({\n backgroundImage: e.target.value,\n })\n }\n placeholder=\"linear-gradient(45deg, #ff0000, #0000ff)\"\n rows={3}\n />\n </div>\n\n <div className=\"min-w-0 space-y-2\">\n <FieldLabel\n htmlFor=\"gradient-css-dark\"\n hint=\"Optional dark appearance override\"\n >\n Dark mode\n </FieldLabel>\n <PanelTextarea\n id=\"gradient-css-dark\"\n value={value.backgroundImageDark || \"\"}\n onChange={(e) =>\n handleBackgroundChange({\n backgroundImageDark: e.target.value || undefined,\n })\n }\n placeholder=\"linear-gradient(45deg, #333333, #666666)\"\n rows={3}\n />\n </div>\n </div>\n </SectionCard>\n\n <CollapsibleCard\n title=\"Advanced\"\n description=\"Tile size, position, repeat, and mask\"\n >\n <div className=\"space-y-2\">\n <FieldLabel\n htmlFor=\"gradient-background-size\"\n hint=\"e.g. 24px 24px, cover, 100% 100%\"\n >\n Background size\n </FieldLabel>\n <PanelInput\n id=\"gradient-background-size\"\n value={value.gradientBackgroundSize || \"\"}\n onChange={(e) =>\n handleBackgroundChange({\n gradientBackgroundSize: e.target.value,\n })\n }\n placeholder=\"cover\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <FieldLabel\n htmlFor=\"gradient-background-position\"\n hint=\"e.g. center, 0 0, top left\"\n >\n Background position\n </FieldLabel>\n <PanelInput\n id=\"gradient-background-position\"\n value={value.gradientBackgroundPosition || \"\"}\n onChange={(e) =>\n handleBackgroundChange({\n gradientBackgroundPosition: e.target.value,\n })\n }\n placeholder=\"center\"\n />\n </div>\n\n <PanelSelect\n id=\"gradient-background-repeat\"\n title=\"Background repeat\"\n value={value.gradientBackgroundRepeat || \"no-repeat\"}\n onChange={(repeat) =>\n handleBackgroundChange({\n gradientBackgroundRepeat: repeat,\n })\n }\n options={BACKGROUND_REPEAT_OPTIONS}\n />\n\n <div className=\"space-y-2\">\n <FieldLabel\n htmlFor=\"gradient-mask-image\"\n hint=\"CSS mask to fade edges or vignette\"\n trailing={\n <a\n href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/mask-image\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1 text-[10px] font-medium text-muted-foreground underline-offset-2 hover:text-foreground hover:underline\"\n >\n Docs\n <ExternalLink className=\"h-3 w-3\" aria-hidden />\n </a>\n }\n >\n Mask image\n </FieldLabel>\n <PanelTextarea\n id=\"gradient-mask-image\"\n value={value.gradientMaskImage || \"\"}\n onChange={(e) =>\n handleBackgroundChange({\n gradientMaskImage: e.target.value || undefined,\n })\n }\n placeholder=\"linear-gradient(black, transparent)\"\n rows={2}\n />\n </div>\n </CollapsibleCard>\n\n <div className=\"flex gap-2.5 rounded-xl border border-border/60 bg-muted/25 px-3 py-2.5\">\n <div className=\"mt-0.5 flex h-6 w-6 shrink-0 items-center justify-center rounded-md bg-primary/10 text-primary\">\n <Sparkles className=\"h-3.5 w-3.5\" aria-hidden />\n </div>\n <p className=\"text-[11px] leading-relaxed text-muted-foreground\">\n Need more inspiration? Browse{\" \"}\n <a\n href=\"https://patterncraft.fun\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"font-medium text-foreground underline decoration-border underline-offset-2 hover:decoration-foreground\"\n >\n PatternCraft\n </a>{\" \"}\n or{\" \"}\n <a\n href=\"https://magicpattern.design/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"font-medium text-foreground underline decoration-border underline-offset-2 hover:decoration-foreground\"\n >\n MagicPattern\n </a>{\" \"}\n and paste the CSS into Custom CSS.\n </p>\n </div>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport type { ThemeStyle, WidgetDefaultSettings } from \"../../models\";\nimport {\n MaxWidthSelector,\n SectionBackgroundPanel,\n VerticalPaddingSelector,\n} from \"../../builder/controls\";\nimport { FieldGroup } from \"./fields\";\n\n/**\n * Shared design settings group rendered in the block panel's Design tab.\n * Exposes the common section controls (max width, vertical padding,\n * background) that each block's widget already passes through to the\n * Section primitive. All settings are optional so existing pages keep\n * rendering unchanged.\n */\nexport function DesignFieldGroup<T extends WidgetDefaultSettings>({\n settings,\n theme,\n update,\n}: {\n settings: T;\n /** Active theme, used so unset sliders display what's actually applied. */\n theme?: ThemeStyle;\n update: (partial: Partial<WidgetDefaultSettings>) => void;\n}) {\n return (\n <FieldGroup title=\"Section styling\">\n <MaxWidthSelector\n value={settings.maxWidth}\n themeDefault={theme?.structure?.page?.width}\n onChange={(maxWidth) => update({ maxWidth })}\n />\n <VerticalPaddingSelector\n value={settings.verticalPadding}\n themeDefault={theme?.structure?.section?.padding?.y}\n onChange={(verticalPadding) => update({ verticalPadding })}\n />\n <div className=\"flex min-w-0 max-w-full flex-col gap-3\">\n <div className=\"min-w-0 space-y-0.5\">\n <p className=\"text-xs font-semibold text-foreground\">Background</p>\n <p className=\"text-[11px] leading-relaxed text-muted-foreground\">\n Color, image, or pattern for this section surface.\n </p>\n </div>\n <SectionBackgroundPanel\n value={settings.background}\n onChange={(background) => update({ background })}\n />\n </div>\n </FieldGroup>\n );\n}\n","\"use client\";\n\nimport React, { useState } from \"react\";\nimport { Brush, Check, FilePenLine } from \"lucide-react\";\nimport type { Theme, Widget, WidgetInstance } from \"../models\";\nimport { cn } from \"../primitives/lib/utils\";\nimport { DesignFieldGroup } from \"../blocks/_shared/design-fields\";\n\nconst TABS = [\n { key: \"data\", label: \"Data\" },\n { key: \"design\", label: \"Design\" },\n] as const;\n\ntype Tab = (typeof TABS)[number][\"key\"];\n\n/**\n * The block settings panel body: a Data tab hosting the block's own editor\n * (content fields) and a Design tab hosting the shared section design\n * controls (max width, vertical padding, background). Mount with\n * `key={instance.widgetId}` so the tab selection resets per block.\n */\nexport function BlockSettings({\n instance,\n definition,\n theme,\n onChange,\n}: {\n instance: WidgetInstance;\n definition: Widget<any>;\n theme: Theme;\n onChange: (settings: Record<string, unknown>) => void;\n}) {\n const [tab, setTab] = useState<Tab>(\"data\");\n const Editor = definition.editor;\n const DesignEditor = definition.designEditor;\n const settings = instance.settings ?? {};\n\n return (\n <div className=\"flex min-w-0 max-w-full flex-col\">\n <div\n role=\"tablist\"\n aria-label=\"Block settings sections\"\n className=\"grid min-w-0 grid-cols-2 border-b border-border/80\"\n >\n {TABS.map(({ key, label }) => {\n const Icon = key === \"data\" ? FilePenLine : Brush;\n return (\n <button\n key={key}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab === key}\n className={cn(\n \"relative inline-flex h-11 min-w-0 items-center justify-center gap-2 text-xs font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40\",\n tab === key\n ? \"text-foreground after:absolute after:inset-x-3 after:-bottom-px after:h-0.5 after:rounded-full after:bg-primary\"\n : \"text-muted-foreground hover:text-foreground\",\n )}\n onClick={() => setTab(key)}\n >\n <Icon className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n {label}\n </button>\n );\n })}\n </div>\n <div className=\"pt-5\">\n {tab === \"data\" && Editor && (\n <Editor settings={settings as any} theme={theme} onChange={onChange} />\n )}\n </div>\n {tab === \"design\" && (\n <div className=\"min-w-0 max-w-full space-y-5 pt-5\">\n <div>\n <p className=\"text-sm font-semibold text-foreground\">Refine the look</p>\n <p className=\"mt-1 text-xs leading-5 text-muted-foreground\">\n Adjust layout and surface styles for this block.\n </p>\n </div>\n {definition.layouts && definition.layouts.length > 0 && (\n <div className=\"space-y-3 text-sm\">\n <div>\n <p className=\"text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground\">\n Layout\n </p>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n Choose how this block is arranged.\n </p>\n </div>\n <div\n className=\"grid gap-2.5\"\n style={{\n gridTemplateColumns: \"repeat(auto-fill, minmax(112px, 1fr))\",\n }}\n >\n {definition.layouts.map((layout, index) => {\n const active =\n (settings.layout as string | undefined) === layout.id ||\n (settings.layout == null && index === 0);\n return (\n <button\n key={layout.id}\n type=\"button\"\n aria-pressed={active}\n className={cn(\n \"group relative flex min-h-16 items-center justify-between gap-2 rounded-xl border px-3 py-2.5 text-left text-xs font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n active\n ? \"border-primary/60 bg-primary/8 text-foreground shadow-sm\"\n : \"border-border bg-muted/20 text-muted-foreground hover:border-primary/35 hover:bg-muted/60 hover:text-foreground\",\n )}\n onClick={() =>\n onChange({\n ...settings,\n layout: layout.id,\n })\n }\n >\n <span>{layout.name}</span>\n {active && (\n <span className=\"flex h-5 w-5 shrink-0 items-center justify-center rounded-full bg-primary text-primary-foreground\">\n <Check className=\"h-3 w-3\" aria-hidden=\"true\" />\n </span>\n )}\n </button>\n );\n })}\n </div>\n </div>\n )}\n {DesignEditor && (\n <DesignEditor\n settings={settings as any}\n theme={theme}\n onChange={onChange}\n />\n )}\n <DesignFieldGroup\n settings={settings as any}\n theme={theme.theme}\n update={(partial) => onChange({ ...settings, ...partial })}\n />\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { Check, Pencil } from \"lucide-react\";\nimport { cn } from \"../../primitives/lib/utils\";\n\nfunction CardButton({\n label,\n disabled,\n onClick,\n children,\n}: {\n label: string;\n disabled?: boolean;\n onClick?: () => void;\n children: React.ReactNode;\n}) {\n return (\n <button\n type=\"button\"\n title={label}\n aria-label={label}\n disabled={disabled}\n className={cn(\n \"inline-flex h-8 w-8 items-center justify-center rounded-md border border-input bg-background shadow-sm transition-colors\",\n disabled ? \"cursor-not-allowed opacity-60\" : \"hover:bg-muted\",\n )}\n onClick={(e) => {\n e.stopPropagation();\n onClick?.();\n }}\n >\n {children}\n </button>\n );\n}\n\n/**\n * Theme card ported from CourseLit's ThemeCard: theme name and actions on\n * top, a row of palette swatches below. Clicking the card previews the\n * theme on the canvas without applying it. The pencil opens the theme for\n * editing (copying it first when it's a system theme); the check applies\n * the theme to the page.\n */\nexport function ThemeCard({\n name,\n palette,\n selected = false,\n active = false,\n onPreview,\n onUse,\n onEdit,\n className,\n}: {\n name: string;\n palette: string[];\n /** Whether this theme is currently painted on the canvas (preview). */\n selected?: boolean;\n /** Whether this theme is the one actually applied to the site. */\n active?: boolean;\n onPreview?: () => void;\n onUse?: () => void;\n onEdit?: () => void;\n className?: string;\n}) {\n return (\n <div\n role=\"button\"\n tabIndex={0}\n aria-pressed={selected}\n aria-label={`Preview ${name}`}\n className={cn(\n \"flex w-full cursor-pointer flex-col gap-2 rounded-lg bg-background p-2 text-left transition-colors\",\n selected\n ? \"border-2 border-primary shadow-md\"\n : \"border border-muted shadow-none hover:bg-muted\",\n className,\n )}\n onClick={onPreview}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n onPreview?.();\n }\n }}\n >\n <div className=\"flex min-h-[32px] items-center justify-between gap-2\">\n <span className=\"truncate text-sm font-semibold text-foreground\">{name}</span>\n <div className=\"flex shrink-0 items-center gap-1\">\n {onEdit && (\n <CardButton label={`Edit ${name}`} onClick={onEdit}>\n <Pencil className=\"h-4 w-4\" />\n </CardButton>\n )}\n {onUse && (\n <CardButton label={`Use ${name}`} disabled={active} onClick={onUse}>\n <Check className=\"h-4 w-4\" />\n </CardButton>\n )}\n </div>\n </div>\n <div className=\"flex gap-2\">\n {palette.map((color, i) => (\n <span\n key={i}\n className=\"h-4 w-4 rounded-full border\"\n style={{ backgroundColor: color }}\n />\n ))}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"../../primitives/lib/utils\";\nimport type { TailwindOption } from \"./tailwind-to-human-readable\";\n\n/**\n * Shared, dependency-free widgets for the theme editor. These replace the\n * Radix-based Accordion/Select/Label/Input widgets CourseLit's theme editor\n * used from components-library, styled to match its aesthetic.\n */\n\nexport function PanelLabel({\n htmlFor,\n children,\n}: {\n htmlFor?: string;\n children: React.ReactNode;\n}) {\n return (\n <label htmlFor={htmlFor} className=\"text-xs font-medium text-foreground\">\n {children}\n </label>\n );\n}\n\nexport function PanelInput(props: React.InputHTMLAttributes<HTMLInputElement>) {\n const { className, ...rest } = props;\n return (\n <input\n {...rest}\n className={cn(\n \"h-8 w-full rounded-md border border-input bg-background px-2 text-xs text-foreground outline-none focus:ring-2 focus:ring-ring\",\n className,\n )}\n />\n );\n}\n\nexport function PanelSelect({\n title,\n value,\n onChange,\n options,\n placeholder = \"Select…\",\n}: {\n title: string;\n value: string;\n onChange: (value: string) => void;\n options: readonly TailwindOption[];\n placeholder?: string;\n}) {\n return (\n <div className=\"space-y-1.5\">\n <PanelLabel>{title}</PanelLabel>\n <select\n className=\"h-8 w-full rounded-md border border-input bg-background px-2 text-xs text-foreground outline-none focus:ring-2 focus:ring-ring\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n >\n {!value && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </div>\n );\n}\n\n/**\n * Collapsible section styled after CourseLit's bordered AccordionItem, built\n * on a native `<details>` element instead of Radix Accordion.\n */\nexport function AccordionSection({\n title,\n children,\n defaultOpen = false,\n}: {\n title: string;\n children: React.ReactNode;\n defaultOpen?: boolean;\n}) {\n return (\n <details className=\"group rounded-md border\" open={defaultOpen}>\n <summary className=\"flex cursor-pointer select-none items-center justify-between rounded-t-md px-2 py-3 text-xs font-semibold transition-colors hover:bg-muted group-open:border-b [&::-webkit-details-marker]:hidden\">\n {title}\n <ChevronDown className=\"h-4 w-4 text-muted-foreground transition-transform group-open:rotate-180\" />\n </summary>\n <div className=\"px-2 pb-4 pt-2\">{children}</div>\n </details>\n );\n}\n","export interface TailwindOption {\n label: string;\n value: string;\n}\n\nexport const paddingOptions = {\n x: [\n { label: \"None\", value: \"px-0\" },\n { label: \"Extra Small\", value: \"px-4\" },\n { label: \"Small\", value: \"px-6\" },\n { label: \"Medium\", value: \"px-8\" },\n { label: \"Large\", value: \"px-10\" },\n { label: \"Extra Large\", value: \"px-12\" },\n { label: \"2X Large\", value: \"px-16\" },\n { label: \"3X Large\", value: \"px-20\" },\n { label: \"4X Large\", value: \"px-24\" },\n { label: \"5X Large\", value: \"px-32\" },\n { label: \"6X Large\", value: \"px-40\" },\n { label: \"7X Large\", value: \"px-48\" },\n { label: \"8X Large\", value: \"px-56\" },\n { label: \"9X Large\", value: \"px-64\" },\n ],\n y: [\n { label: \"None\", value: \"py-0\" },\n { label: \"Extra Small\", value: \"py-4\" },\n { label: \"Small\", value: \"py-6\" },\n { label: \"Medium\", value: \"py-8\" },\n { label: \"Large\", value: \"py-10\" },\n { label: \"Extra Large\", value: \"py-12\" },\n { label: \"2X Large\", value: \"py-16\" },\n { label: \"3X Large\", value: \"py-20\" },\n { label: \"4X Large\", value: \"py-24\" },\n { label: \"5X Large\", value: \"py-32\" },\n { label: \"6X Large\", value: \"py-40\" },\n { label: \"7X Large\", value: \"py-48\" },\n { label: \"8X Large\", value: \"py-56\" },\n { label: \"9X Large\", value: \"py-64\" },\n ],\n} as const;\n\nexport const borderWidthOptions: TailwindOption[] = [\n { label: \"None\", value: \"border-0\" },\n { label: \"Light\", value: \"border\" },\n { label: \"Medium\", value: \"border-2\" },\n { label: \"Heavy\", value: \"border-4\" },\n { label: \"Extra Heavy\", value: \"border-8\" },\n];\n\nexport const borderStyleOptions: TailwindOption[] = [\n { label: \"None\", value: \"border-none\" },\n { label: \"Solid\", value: \"border-solid\" },\n { label: \"Dashed\", value: \"border-dashed\" },\n { label: \"Dotted\", value: \"border-dotted\" },\n { label: \"Double\", value: \"border-double\" },\n { label: \"Hidden\", value: \"border-hidden\" },\n];\n\nexport const borderRadiusOptions: TailwindOption[] = [\n { label: \"None\", value: \"rounded-none\" },\n { label: \"Small\", value: \"rounded-sm\" },\n { label: \"Default\", value: \"rounded\" },\n { label: \"Medium\", value: \"rounded-md\" },\n { label: \"Large\", value: \"rounded-lg\" },\n { label: \"Extra Large\", value: \"rounded-xl\" },\n { label: \"2X Large\", value: \"rounded-2xl\" },\n { label: \"3X Large\", value: \"rounded-3xl\" },\n { label: \"Full\", value: \"rounded-full\" },\n];\n\nexport const shadowOptions: TailwindOption[] = [\n { label: \"None\", value: \"shadow-none\" },\n { label: \"Extra Small\", value: \"shadow-2xs\" },\n { label: \"Small\", value: \"shadow-xs\" },\n { label: \"Default\", value: \"shadow-sm\" },\n { label: \"Medium\", value: \"shadow-md\" },\n { label: \"Large\", value: \"shadow-lg\" },\n { label: \"Extra Large\", value: \"shadow-xl\" },\n { label: \"2X Large\", value: \"shadow-2xl\" },\n];\n\nexport const fontSizeOptions: TailwindOption[] = [\n { label: \"Extra Small\", value: \"text-xs\" },\n { label: \"Small\", value: \"text-sm\" },\n { label: \"Base\", value: \"text-base\" },\n { label: \"Large\", value: \"text-lg\" },\n { label: \"Extra Large\", value: \"text-xl\" },\n { label: \"2X Large\", value: \"text-2xl\" },\n { label: \"3X Large\", value: \"text-3xl\" },\n { label: \"4X Large\", value: \"text-4xl\" },\n { label: \"5X Large\", value: \"text-5xl\" },\n { label: \"6X Large\", value: \"text-6xl\" },\n { label: \"7X Large\", value: \"text-7xl\" },\n { label: \"8X Large\", value: \"text-8xl\" },\n { label: \"9X Large\", value: \"text-9xl\" },\n];\n\nexport const fontWeightOptions: TailwindOption[] = [\n { label: \"Thin\", value: \"font-thin\" },\n { label: \"Extra Light\", value: \"font-extralight\" },\n { label: \"Light\", value: \"font-light\" },\n { label: \"Normal\", value: \"font-normal\" },\n { label: \"Medium\", value: \"font-medium\" },\n { label: \"Semi Bold\", value: \"font-semibold\" },\n { label: \"Bold\", value: \"font-bold\" },\n { label: \"Extra Bold\", value: \"font-extrabold\" },\n { label: \"Black\", value: \"font-black\" },\n];\n\nexport const lineHeightOptions: TailwindOption[] = [\n { label: \"None\", value: \"leading-none\" },\n { label: \"Tight\", value: \"leading-tight\" },\n { label: \"Snug\", value: \"leading-snug\" },\n { label: \"Normal\", value: \"leading-normal\" },\n { label: \"Relaxed\", value: \"leading-relaxed\" },\n { label: \"Loose\", value: \"leading-loose\" },\n];\n\nexport const letterSpacingOptions: TailwindOption[] = [\n { label: \"Tighter\", value: \"tracking-tighter\" },\n { label: \"Tight\", value: \"tracking-tight\" },\n { label: \"Normal\", value: \"tracking-normal\" },\n { label: \"Wide\", value: \"tracking-wide\" },\n { label: \"Wider\", value: \"tracking-wider\" },\n { label: \"Widest\", value: \"tracking-widest\" },\n];\n\nexport const textAlignOptions: TailwindOption[] = [\n { label: \"Left\", value: \"text-left\" },\n { label: \"Center\", value: \"text-center\" },\n { label: \"Right\", value: \"text-right\" },\n { label: \"Justify\", value: \"text-justify\" },\n];\n\nexport const textTransformOptions: TailwindOption[] = [\n { label: \"None\", value: \"normal-case\" },\n { label: \"Uppercase\", value: \"uppercase\" },\n { label: \"Lowercase\", value: \"lowercase\" },\n { label: \"Capitalize\", value: \"capitalize\" },\n];\n\nexport const fontFamilyOptions = {\n Sans: [\n { label: \"Inter\", value: \"font-inter\" },\n { label: \"Open Sans\", value: \"font-open-sans\" },\n { label: \"Source Sans 3\", value: \"font-source-sans-3\" },\n { label: \"Noto Sans\", value: \"font-noto-sans\" },\n { label: \"Roboto\", value: \"font-roboto\" },\n { label: \"Mulish\", value: \"font-mulish\" },\n { label: \"Nunito\", value: \"font-nunito\" },\n { label: \"Work Sans\", value: \"font-work-sans\" },\n ],\n Serif: [\n { label: \"Merriweather\", value: \"font-merriweather\" },\n { label: \"Alegreya\", value: \"font-alegreya\" },\n { label: \"Playfair Display\", value: \"font-playfair-display\" },\n { label: \"Roboto Slab\", value: \"font-roboto-slab\" },\n { label: \"Source Serif 4\", value: \"font-source-serif-4\" },\n ],\n Display: [\n { label: \"Montserrat\", value: \"font-montserrat\" },\n { label: \"Poppins\", value: \"font-poppins\" },\n { label: \"Raleway\", value: \"font-raleway\" },\n { label: \"Rubik\", value: \"font-rubik\" },\n { label: \"Oswald\", value: \"font-oswald\" },\n { label: \"Bebas Neue\", value: \"font-bebas-neue\" },\n ],\n Modern: [\n { label: \"Lato\", value: \"font-lato\" },\n { label: \"PT Sans\", value: \"font-pt-sans\" },\n { label: \"Quicksand\", value: \"font-quicksand\" },\n ],\n} as const;\n","\"use client\";\n\nimport React from \"react\";\nimport type { Typography } from \"../../models\";\nimport { cn } from \"../../primitives/lib/utils\";\nimport { PanelLabel, PanelSelect } from \"./ui\";\nimport {\n fontSizeOptions,\n fontWeightOptions,\n lineHeightOptions,\n letterSpacingOptions,\n textTransformOptions,\n fontFamilyOptions,\n} from \"./tailwind-to-human-readable\";\n\ninterface TypographySelectorProps {\n value: Typography;\n onChange: (value: Typography) => void;\n}\n\n/**\n * Per-role typography editor ported from CourseLit's TypographySelector,\n * using native selects (with `<optgroup>` for font categories) instead of\n * Radix Select.\n */\nexport function TypographySelector({ value, onChange }: TypographySelectorProps) {\n const update = (patch: Partial<Typography>) => onChange({ ...value, ...patch });\n\n return (\n <div className=\"space-y-6 p-2\">\n <div className=\"h-[100px] overflow-auto rounded-lg border p-2\">\n <div className=\"flex flex-col space-y-2\">\n <PanelLabel>Preview</PanelLabel>\n <p\n className={cn(\n value?.fontFamily || \"\",\n value?.fontSize || \"\",\n value?.fontWeight || \"\",\n value?.lineHeight || \"\",\n value?.letterSpacing || \"\",\n value?.textTransform || \"normal-case\",\n )}\n >\n The quick brown fox jumps over the lazy dog\n </p>\n </div>\n </div>\n <div className=\"space-y-6\">\n <div className=\"space-y-1.5\">\n <PanelLabel>Font Family</PanelLabel>\n <select\n className=\"h-8 w-full rounded-md border border-input bg-background px-2 text-xs text-foreground outline-none focus:ring-2 focus:ring-ring\"\n value={value?.fontFamily || \"\"}\n onChange={(e) => update({ fontFamily: e.target.value })}\n >\n {!value?.fontFamily && (\n <option value=\"\" disabled>\n Select font family\n </option>\n )}\n {Object.entries(fontFamilyOptions).map(([category, fonts]) => (\n <optgroup key={category} label={category}>\n {fonts.map((font) => (\n <option key={font.value} value={font.value}>\n {font.label}\n </option>\n ))}\n </optgroup>\n ))}\n </select>\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <PanelSelect\n title=\"Font Size\"\n value={value?.fontSize || \"\"}\n onChange={(v) => update({ fontSize: v as Typography[\"fontSize\"] })}\n options={fontSizeOptions}\n placeholder=\"Select size\"\n />\n <PanelSelect\n title=\"Font Weight\"\n value={value?.fontWeight || \"\"}\n onChange={(v) =>\n update({\n fontWeight: v as Typography[\"fontWeight\"],\n })\n }\n options={fontWeightOptions}\n placeholder=\"Select weight\"\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <PanelSelect\n title=\"Line Height\"\n value={value?.lineHeight || \"\"}\n onChange={(v) =>\n update({\n lineHeight: v as Typography[\"lineHeight\"],\n })\n }\n options={lineHeightOptions}\n placeholder=\"Select line height\"\n />\n <PanelSelect\n title=\"Letter Spacing\"\n value={value?.letterSpacing || \"\"}\n onChange={(v) =>\n update({\n letterSpacing: v as Typography[\"letterSpacing\"],\n })\n }\n options={letterSpacingOptions}\n placeholder=\"Select spacing\"\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <PanelSelect\n title=\"Text Transform\"\n value={value?.textTransform || \"normal-case\"}\n onChange={(v) =>\n update({\n textTransform: v as Typography[\"textTransform\"],\n })\n }\n options={textTransformOptions}\n placeholder=\"Select transform\"\n />\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { Info } from \"lucide-react\";\nimport type { Border, Padding, Shadow, ThemeStyle } from \"../../models\";\nimport {\n Button,\n PageCard,\n PageCardContent,\n PageCardHeader,\n Input as PageInput,\n Link as PageLink,\n} from \"../../primitives\";\nimport { AccordionSection, PanelInput, PanelLabel, PanelSelect } from \"./ui\";\nimport {\n paddingOptions,\n borderWidthOptions,\n borderStyleOptions,\n borderRadiusOptions,\n shadowOptions,\n} from \"./tailwind-to-human-readable\";\n\nexport type InteractiveType = \"button\" | \"link\" | \"card\" | \"input\";\n\nexport const interactiveDisplayNames: Record<string, string> = {\n button: \"Button\",\n link: \"Link\",\n card: \"Card\",\n input: \"Input\",\n} as const;\n\ninterface InteractiveSelectorProps {\n type: InteractiveType;\n theme: ThemeStyle;\n onChange: (theme: ThemeStyle) => void;\n}\n\n/**\n * Button/link/card/input style editor ported from CourseLit's\n * InteractiveSelector, with native accordions/selects instead of Radix.\n */\nexport function InteractiveSelector({\n type,\n theme,\n onChange,\n}: InteractiveSelectorProps) {\n const value = theme.interactives[type] as {\n padding?: Padding;\n border?: Border;\n shadow?: Shadow;\n textShadow?: string;\n custom?: string;\n };\n\n const updateInteractive = (patch: Record<string, unknown>) => {\n onChange({\n ...theme,\n interactives: {\n ...theme.interactives,\n [type]: {\n ...value,\n ...patch,\n },\n },\n });\n };\n\n const renderDemo = () => {\n switch (type) {\n case \"button\":\n return <Button theme={theme}>Preview</Button>;\n case \"link\":\n return <PageLink theme={theme}>Demo Link</PageLink>;\n case \"card\":\n return (\n <PageCard theme={theme}>\n <PageCardContent theme={theme}>\n <PageCardHeader theme={theme}>Card Title</PageCardHeader>\n <div>Card content goes here</div>\n </PageCardContent>\n </PageCard>\n );\n case \"input\":\n return <PageInput theme={theme} type=\"text\" placeholder=\"Demo Input\" />;\n default:\n return null;\n }\n };\n\n const renderPaddingConfig = (\n allowedPaddingX?: string[],\n allowedPaddingY?: string[],\n ) => {\n const filteredPaddingX = allowedPaddingX\n ? paddingOptions.x.filter((option) => allowedPaddingX.includes(option.value))\n : paddingOptions.x;\n const filteredPaddingY = allowedPaddingY\n ? paddingOptions.y.filter((option) => allowedPaddingY.includes(option.value))\n : paddingOptions.y;\n\n return (\n <AccordionSection title=\"Padding\">\n <div className=\"grid grid-cols-2 gap-4\">\n <PanelSelect\n title=\"Padding X\"\n value={value?.padding?.x || \"\"}\n onChange={(newValue) =>\n updateInteractive({\n padding: {\n ...value?.padding,\n x: newValue as Padding[\"x\"],\n },\n })\n }\n options={filteredPaddingX}\n placeholder=\"Select padding\"\n />\n <PanelSelect\n title=\"Padding Y\"\n value={value?.padding?.y || \"\"}\n onChange={(newValue) =>\n updateInteractive({\n padding: {\n ...value?.padding,\n y: newValue as Padding[\"y\"],\n },\n })\n }\n options={filteredPaddingY}\n placeholder=\"Select padding\"\n />\n </div>\n </AccordionSection>\n );\n };\n\n const renderBorderConfig = () => (\n <AccordionSection title=\"Border\">\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-2 gap-4\">\n <PanelSelect\n title=\"Border Radius\"\n value={value?.border?.radius || \"\"}\n onChange={(newValue) =>\n updateInteractive({\n border: {\n ...value?.border,\n radius: newValue as Border[\"radius\"],\n },\n })\n }\n options={borderRadiusOptions}\n placeholder=\"Select radius\"\n />\n <PanelSelect\n title=\"Border Style\"\n value={value?.border?.style || \"\"}\n onChange={(newValue) =>\n updateInteractive({\n border: {\n ...value?.border,\n style: newValue as Border[\"style\"],\n },\n })\n }\n options={borderStyleOptions}\n placeholder=\"Select style\"\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <PanelSelect\n title=\"Border Width\"\n value={value?.border?.width || \"\"}\n onChange={(newValue) =>\n updateInteractive({\n border: {\n ...value?.border,\n width: newValue as Border[\"width\"],\n },\n })\n }\n options={borderWidthOptions}\n placeholder=\"Select width\"\n />\n </div>\n </div>\n </AccordionSection>\n );\n\n const renderBoxShadowConfig = () => {\n if (type === \"link\") {\n return null;\n }\n return (\n <AccordionSection title=\"Shadow\">\n <PanelSelect\n title=\"Shadow\"\n value={value?.shadow || \"\"}\n onChange={(newValue) => updateInteractive({ shadow: newValue as Shadow })}\n options={shadowOptions}\n placeholder=\"Select shadow\"\n />\n </AccordionSection>\n );\n };\n\n const renderTextShadowConfig = () => {\n if (type !== \"link\") {\n return null;\n }\n return (\n <AccordionSection title=\"Text Shadow\">\n <div className=\"space-y-1.5\">\n <PanelLabel>Text Shadow</PanelLabel>\n <PanelInput\n value={value?.textShadow || \"\"}\n placeholder=\"0px 0px 0px 0px rgba(0, 0, 0, 0.1)\"\n onChange={(e) => updateInteractive({ textShadow: e.target.value })}\n />\n </div>\n </AccordionSection>\n );\n };\n\n const renderCustomClassesConfig = () => (\n <AccordionSection title=\"Advanced\">\n <div className=\"space-y-2\">\n <PanelLabel>Custom classes</PanelLabel>\n <PanelInput\n value={value?.custom || \"\"}\n onChange={(e) => updateInteractive({ custom: e.target.value })}\n placeholder=\"Enter Tailwind classes\"\n />\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n <Info className=\"h-4 w-4 shrink-0\" />\n <span>Use any supported Tailwind class here.</span>\n </div>\n </div>\n </AccordionSection>\n );\n\n const renderConfig = () => {\n switch (type) {\n case \"button\":\n case \"input\":\n return (\n <>\n {renderPaddingConfig(\n [\"px-0\", \"px-4\", \"px-6\", \"px-8\", \"px-10\"],\n [\"py-0\", \"py-4\", \"py-6\", \"py-8\", \"py-10\"],\n )}\n {renderBorderConfig()}\n {renderBoxShadowConfig()}\n {renderCustomClassesConfig()}\n </>\n );\n case \"link\":\n return (\n <>\n {renderTextShadowConfig()}\n {renderCustomClassesConfig()}\n </>\n );\n case \"card\":\n return (\n <>\n {renderPaddingConfig([\n \"px-0\",\n \"px-4\",\n \"px-6\",\n \"px-8\",\n \"px-10\",\n \"px-12\",\n \"px-16\",\n \"px-20\",\n \"px-24\",\n \"px-32\",\n ])}\n {renderBorderConfig()}\n {renderBoxShadowConfig()}\n {renderCustomClassesConfig()}\n </>\n );\n default:\n return null;\n }\n };\n\n return (\n <div className=\"space-y-6 p-2\">\n <div className=\"min-h-[100px] overflow-auto rounded-lg border p-2\">\n <div className=\"flex flex-col space-y-2\">\n <PanelLabel>Preview</PanelLabel>\n {renderDemo()}\n </div>\n </div>\n <div className=\"space-y-4\">{renderConfig()}</div>\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport type { ThemeStyle } from \"../../models\";\nimport { MaxWidthSelector, VerticalPaddingSelector } from \"../controls\";\nimport { PanelSelect } from \"./ui\";\nimport { paddingOptions } from \"./tailwind-to-human-readable\";\n\nexport const structureDisplayNames: Record<string, string> = {\n page: \"Page\",\n section: \"Section\",\n} as const;\n\ninterface StructureSelectorProps {\n type: \"page\" | \"section\";\n theme: ThemeStyle;\n onChange: (theme: ThemeStyle) => void;\n}\n\ntype SectionPadding = ThemeStyle[\"structure\"][\"section\"][\"padding\"];\n\n/**\n * Page width / section padding editor ported from CourseLit's\n * StructureSelector, reusing FrontLit's slider-based width/padding controls.\n */\nexport function StructureSelector({ type, theme, onChange }: StructureSelectorProps) {\n if (type === \"page\") {\n const pageValue = theme.structure.page;\n return (\n <div className=\"space-y-6 p-2\">\n <MaxWidthSelector\n value={pageValue?.width}\n onChange={(width) => {\n if (!width) return;\n onChange({\n ...theme,\n structure: {\n ...theme.structure,\n page: { width },\n },\n });\n }}\n />\n </div>\n );\n }\n\n const sectionValue = theme.structure.section;\n const updatePadding = (patch: Partial<SectionPadding>) => {\n onChange({\n ...theme,\n structure: {\n ...theme.structure,\n section: {\n ...sectionValue,\n padding: {\n ...sectionValue?.padding,\n ...patch,\n },\n },\n },\n });\n };\n\n return (\n <div className=\"space-y-6 p-2\">\n <PanelSelect\n title=\"Horizontal Padding\"\n value={sectionValue?.padding?.x || \"\"}\n onChange={(x) => updatePadding({ x: x as SectionPadding[\"x\"] })}\n options={paddingOptions.x}\n placeholder=\"Select padding\"\n />\n <VerticalPaddingSelector\n value={sectionValue?.padding?.y}\n onChange={(y) => {\n if (!y) return;\n updatePadding({ y });\n }}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useCallback, useState } from \"react\";\nimport {\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n Columns3,\n Palette,\n SquareMousePointer,\n Type,\n} from \"lucide-react\";\nimport type { Theme, ThemeStyle, Typography } from \"../../models\";\nimport { cn } from \"../../primitives/lib/utils\";\nimport { generateUniqueId } from \"../../utils\";\nimport { ColorSelector } from \"../controls\";\nimport { ThemeCard } from \"./theme-card\";\nimport { TypographySelector } from \"./typography-selector\";\nimport {\n InteractiveSelector,\n interactiveDisplayNames,\n type InteractiveType,\n} from \"./interactive-selector\";\nimport { StructureSelector, structureDisplayNames } from \"./structure-selector\";\nimport { AccordionSection, PanelInput, PanelLabel } from \"./ui\";\n\ntype Section = {\n id: string;\n label: string;\n icon: React.ReactNode;\n};\n\ntype NavigationItem = {\n id: string;\n label: string;\n};\n\nconst sections: Section[] = [\n {\n id: \"colors\",\n label: \"Colors\",\n icon: <Palette className=\"h-4 w-4\" />,\n },\n {\n id: \"typography\",\n label: \"Typography\",\n icon: <Type className=\"h-4 w-4\" />,\n },\n {\n id: \"interactives\",\n label: \"Interactives\",\n icon: <SquareMousePointer className=\"h-4 w-4\" />,\n },\n {\n id: \"structure\",\n label: \"Structure\",\n icon: <Columns3 className=\"h-4 w-4\" />,\n },\n];\n\nconst typographyDisplayNames: Record<string, string> = {\n header1: \"Header 1\",\n header2: \"Header 2\",\n header3: \"Header 3\",\n header4: \"Header 4\",\n preheader: \"Preheader\",\n subheader1: \"Subheader 1\",\n subheader2: \"Subheader 2\",\n text1: \"Text 1\",\n text2: \"Text 2\",\n caption: \"Caption\",\n link: \"Link\",\n button: \"Button Text\",\n input: \"Input Text\",\n} as const;\n\nconst typographyCategories: { name: string; items: string[] }[] = [\n {\n name: \"Headers\",\n items: [\"header1\", \"header2\", \"header3\", \"header4\", \"preheader\"],\n },\n {\n name: \"Subheaders\",\n items: [\"subheader1\", \"subheader2\"],\n },\n {\n name: \"Body Text\",\n items: [\"text1\", \"text2\", \"caption\"],\n },\n {\n name: \"Interactive Elements\",\n items: [\"link\", \"button\", \"input\"],\n },\n];\n\ntype ColorName = keyof ThemeStyle[\"colors\"][\"light\"];\n\nconst colorCategories: {\n key: string;\n label: string;\n colors: { name: ColorName; displayName: string }[];\n}[] = [\n {\n key: \"primary\",\n label: \"Primary Colors\",\n colors: [\n { name: \"primary\", displayName: \"Primary\" },\n { name: \"primaryForeground\", displayName: \"Primary Foreground\" },\n ],\n },\n {\n key: \"secondary\",\n label: \"Secondary Colors\",\n colors: [\n { name: \"secondary\", displayName: \"Secondary\" },\n {\n name: \"secondaryForeground\",\n displayName: \"Secondary Foreground\",\n },\n ],\n },\n {\n key: \"accent\",\n label: \"Accent Colors\",\n colors: [\n { name: \"accent\", displayName: \"Accent\" },\n { name: \"accentForeground\", displayName: \"Accent Foreground\" },\n ],\n },\n {\n key: \"base\",\n label: \"Base Colors\",\n colors: [\n { name: \"background\", displayName: \"Background\" },\n { name: \"foreground\", displayName: \"Foreground\" },\n ],\n },\n {\n key: \"card\",\n label: \"Card Colors\",\n colors: [\n { name: \"card\", displayName: \"Card\" },\n { name: \"cardForeground\", displayName: \"Card Foreground\" },\n ],\n },\n {\n key: \"popover\",\n label: \"Popover Colors\",\n colors: [\n { name: \"popover\", displayName: \"Popover\" },\n { name: \"popoverForeground\", displayName: \"Popover Foreground\" },\n ],\n },\n {\n key: \"muted\",\n label: \"Muted Colors\",\n colors: [\n { name: \"muted\", displayName: \"Muted\" },\n { name: \"mutedForeground\", displayName: \"Muted Foreground\" },\n ],\n },\n {\n key: \"border\",\n label: \"Border & Input Colors\",\n colors: [\n { name: \"border\", displayName: \"Border\" },\n { name: \"input\", displayName: \"Input\" },\n { name: \"ring\", displayName: \"Ring\" },\n ],\n },\n {\n key: \"destructive\",\n label: \"Destructive Colors\",\n colors: [{ name: \"destructive\", displayName: \"Destructive\" }],\n },\n {\n key: \"shadows\",\n label: \"Shadow Styles\",\n colors: [\n { name: \"shadow2xs\", displayName: \"Shadow 2XS\" },\n { name: \"shadowXs\", displayName: \"Shadow XS\" },\n { name: \"shadowSm\", displayName: \"Shadow SM\" },\n { name: \"shadowMd\", displayName: \"Shadow MD\" },\n { name: \"shadowLg\", displayName: \"Shadow LG\" },\n { name: \"shadowXl\", displayName: \"Shadow XL\" },\n { name: \"shadow2xl\", displayName: \"Shadow 2XL\" },\n ],\n },\n];\n\nconst paletteColorOrder: ColorName[] = [\"primary\", \"accent\", \"secondary\", \"border\"];\n\nfunction capitalize(value: string): string {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\n\n/**\n * Picks a name for a copy of `baseName`: \"X - Copy\", then \"X - Copy 2\",\n * \"X - Copy 3\", … — mirroring CourseLit's server-side copy naming.\n */\nfunction copyName(baseName: string, taken: string[]): string {\n const base = `${baseName} - Copy`;\n if (!taken.includes(base)) return base;\n let counter = 2;\n while (taken.includes(`${base} ${counter}`)) counter++;\n return `${base} ${counter}`;\n}\n\nexport interface ThemeEditorProps {\n /** Theme currently painted on the canvas (applied, or a local preview). */\n theme: Theme;\n /** Id of the theme actually applied to the site. */\n appliedThemeId: string;\n /** Built-in themes; read-only, editing one creates a custom copy. */\n systemThemes: Theme[];\n /** The user's own themes; edited in place. */\n customThemes: Theme[];\n colorMode: \"light\" | \"dark\";\n onColorModeChange: (mode: \"light\" | \"dark\") => void;\n /** Paint a theme on the canvas without applying it. */\n onPreview: (theme: Theme) => void;\n /** Apply a theme to the page. */\n onApply: (theme: Theme) => void;\n /** Persist a change to the custom themes collection. */\n onCustomThemesChange: (themes: Theme[]) => void;\n}\n\n/**\n * Visual theme editor ported from CourseLit's page-editor theme editor.\n * Themes are listed in two groups — system and custom. Clicking a card\n * previews it on the canvas without applying it. Each card also offers\n * \"use\" (check) and \"edit\" (pencil). Editing a system theme first copies\n * it into the custom collection (\"X - Copy\"), so system themes stay\n * pristine; custom themes are edited in place. The host app persists both\n * the applied theme and the custom collection via the builder's `onChange`.\n */\nexport function ThemeEditor({\n theme,\n appliedThemeId,\n systemThemes,\n customThemes,\n colorMode,\n onColorModeChange,\n onPreview,\n onApply,\n onCustomThemesChange,\n}: ThemeEditorProps) {\n const [navigationStack, setNavigationStack] = useState<NavigationItem[]>([]);\n const [collapsedCategories, setCollapsedCategories] = useState<\n Record<string, boolean>\n >(() => {\n const initial: Record<string, boolean> = {};\n typographyCategories.forEach((category) => {\n initial[category.name] = true;\n });\n return initial;\n });\n\n const navigateTo = useCallback((item: NavigationItem) => {\n setNavigationStack((prev) => [...prev, item]);\n }, []);\n\n const navigateBack = useCallback(() => {\n setNavigationStack((prev) => prev.slice(0, -1));\n }, []);\n\n const toggleCategory = useCallback((categoryName: string) => {\n setCollapsedCategories((prev) => ({\n ...prev,\n [categoryName]: !prev[categoryName],\n }));\n }, []);\n\n /**\n * Applies an edited style to the theme being edited (always a custom\n * theme — `startEditing` guarantees it) and persists it in the custom\n * themes collection.\n */\n const applyStyle = useCallback(\n (style: ThemeStyle) => {\n const updated = { ...theme, theme: style };\n onApply(updated);\n onCustomThemesChange(\n customThemes.map((t) => (t.id === updated.id ? updated : t)),\n );\n },\n [theme, customThemes, onApply, onCustomThemesChange],\n );\n\n /**\n * Opens a theme for editing. System themes are copied into the custom\n * collection first (\"X - Copy\"), so the original stays pristine; the\n * copy (or the custom theme itself) becomes the applied theme.\n */\n const startEditing = useCallback(\n (themeItem: Theme, isSystem: boolean) => {\n let target = themeItem;\n if (isSystem) {\n const takenNames = [...systemThemes, ...customThemes].map((t) => t.name);\n target = {\n id: generateUniqueId(),\n name: copyName(themeItem.name, takenNames),\n theme: JSON.parse(JSON.stringify(themeItem.theme)),\n };\n onCustomThemesChange([...customThemes, target]);\n }\n onApply(target);\n setNavigationStack([{ id: \"categories\", label: target.name }]);\n },\n [systemThemes, customThemes, onApply, onCustomThemesChange],\n );\n\n const renderDrillButton = (label: string, onClick: () => void) => (\n <button\n key={label}\n onClick={onClick}\n className=\"group flex w-full items-center justify-between rounded-md px-3 py-2 text-xs transition-colors hover:bg-muted\"\n >\n <span className=\"transition-colors group-hover:text-foreground\">{label}</span>\n <ChevronRight className=\"h-4 w-4 text-muted-foreground transition-colors group-hover:text-foreground\" />\n </button>\n );\n\n const renderThemeCard = (themeItem: Theme, isSystem: boolean) => (\n <ThemeCard\n key={themeItem.id}\n name={themeItem.name}\n palette={paletteColorOrder\n .map((key) => themeItem.theme.colors.light[key])\n .filter(Boolean)}\n selected={themeItem.id === theme.id}\n active={themeItem.id === appliedThemeId}\n onPreview={() => onPreview(themeItem)}\n onUse={() => onApply(themeItem)}\n onEdit={() => startEditing(themeItem, isSystem)}\n />\n );\n\n const renderRootView = () => (\n <div className=\"space-y-4\">\n <div className=\"text-sm font-medium text-muted-foreground\">System Themes</div>\n <div className=\"space-y-2\">\n {systemThemes.map((themeItem) => renderThemeCard(themeItem, true))}\n </div>\n <hr className=\"my-4 border-muted\" />\n <div className=\"text-sm font-medium text-muted-foreground\">Custom Themes</div>\n <div className=\"space-y-2\">\n {customThemes.length === 0 ? (\n <div className=\"text-sm text-muted-foreground\">No custom themes yet</div>\n ) : (\n customThemes.map((themeItem) => renderThemeCard(themeItem, false))\n )}\n </div>\n </div>\n );\n\n const renderCategoriesView = () => (\n <div className=\"space-y-1\">\n {sections.map((section) => (\n <button\n key={section.id}\n onClick={() =>\n navigateTo({\n id: section.id,\n label: section.label,\n })\n }\n className=\"group flex w-full items-center justify-between rounded-md px-3 py-2 text-sm transition-colors hover:bg-muted\"\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"text-muted-foreground transition-colors group-hover:text-foreground\">\n {section.icon}\n </div>\n <span className=\"transition-colors group-hover:text-foreground\">\n {section.label}\n </span>\n </div>\n <ChevronRight className=\"h-4 w-4 text-muted-foreground transition-colors group-hover:text-foreground\" />\n </button>\n ))}\n </div>\n );\n\n const renderColorsView = () => {\n const colors = theme.theme.colors[colorMode];\n\n const updateColor = (name: ColorName, value: string) => {\n applyStyle({\n ...theme.theme,\n colors: {\n ...theme.theme.colors,\n [colorMode]: {\n ...theme.theme.colors[colorMode],\n [name]: value,\n },\n },\n });\n };\n\n return (\n <div className=\"space-y-4\">\n <div\n role=\"tablist\"\n className=\"grid w-full grid-cols-2 rounded-md border border-input bg-muted p-0.5\"\n >\n {([\"light\", \"dark\"] as const).map((mode) => (\n <button\n key={mode}\n type=\"button\"\n role=\"tab\"\n aria-selected={colorMode === mode}\n className={cn(\n \"rounded-sm px-2 py-1 text-xs font-medium transition-colors\",\n colorMode === mode\n ? \"bg-background text-foreground shadow-sm\"\n : \"text-muted-foreground hover:text-foreground\",\n )}\n onClick={() => onColorModeChange(mode)}\n >\n {capitalize(mode)}\n </button>\n ))}\n </div>\n <div className=\"space-y-4\">\n {colorCategories.map((category) => (\n <AccordionSection key={category.key} title={category.label}>\n <div className=\"flex flex-col gap-3\">\n {category.colors.map((color) =>\n category.key === \"shadows\" ? (\n <div key={color.name} className=\"space-y-1.5\">\n <PanelLabel>{color.displayName}</PanelLabel>\n <PanelInput\n value={colors[color.name]}\n onChange={(e) => updateColor(color.name, e.target.value)}\n />\n </div>\n ) : (\n <ColorSelector\n key={color.name}\n title={color.displayName}\n value={colors[color.name]}\n onChange={(value) => updateColor(color.name, value ?? \"\")}\n allowReset={false}\n />\n ),\n )}\n </div>\n </AccordionSection>\n ))}\n </div>\n </div>\n );\n };\n\n const renderTypographyList = () => (\n <div className=\"space-y-1\">\n {typographyCategories.map((category) => (\n <div key={category.name} className=\"mb-2\">\n <button\n type=\"button\"\n className=\"flex w-full items-center rounded px-2 py-1.5 text-sm transition-colors hover:bg-muted\"\n onClick={() => toggleCategory(category.name)}\n >\n <ChevronDown\n className={cn(\n \"mr-2 h-4 w-4 transition-transform\",\n collapsedCategories[category.name] ? \"rotate-[-90deg]\" : \"rotate-0\",\n )}\n />\n <span className=\"text-sm font-medium text-muted-foreground\">\n {category.name}\n </span>\n </button>\n {!collapsedCategories[category.name] && (\n <div>\n {category.items.map((typography) =>\n renderDrillButton(\n typographyDisplayNames[typography] || capitalize(typography),\n () =>\n navigateTo({\n id: typography,\n label:\n typographyDisplayNames[typography] || capitalize(typography),\n }),\n ),\n )}\n </div>\n )}\n </div>\n ))}\n </div>\n );\n\n const renderInteractivesList = () => (\n <div className=\"space-y-1\">\n {Object.keys(interactiveDisplayNames).map((interactive) =>\n renderDrillButton(\n interactiveDisplayNames[interactive] || capitalize(interactive),\n () =>\n navigateTo({\n id: interactive,\n label: interactiveDisplayNames[interactive] || capitalize(interactive),\n }),\n ),\n )}\n </div>\n );\n\n const renderStructureList = () => (\n <div className=\"space-y-1\">\n {Object.keys(structureDisplayNames).map((structure) =>\n renderDrillButton(\n structureDisplayNames[structure] || capitalize(structure),\n () =>\n navigateTo({\n id: structure,\n label: structureDisplayNames[structure] || capitalize(structure),\n }),\n ),\n )}\n </div>\n );\n\n const getCurrentView = () => {\n const currentItem = navigationStack[navigationStack.length - 1];\n const parentItem = navigationStack[navigationStack.length - 2];\n\n if (!currentItem) {\n return renderRootView();\n }\n\n if (parentItem?.id === \"typography\" && currentItem.id in theme.theme.typography) {\n const key = currentItem.id as keyof ThemeStyle[\"typography\"];\n return (\n <TypographySelector\n value={theme.theme.typography[key]}\n onChange={(value: Typography) =>\n applyStyle({\n ...theme.theme,\n typography: {\n ...theme.theme.typography,\n [key]: value,\n },\n })\n }\n />\n );\n }\n\n if (\n parentItem?.id === \"interactives\" &&\n currentItem.id in theme.theme.interactives\n ) {\n return (\n <InteractiveSelector\n type={currentItem.id as InteractiveType}\n theme={theme.theme}\n onChange={applyStyle}\n />\n );\n }\n\n if (parentItem?.id === \"structure\" && currentItem.id in theme.theme.structure) {\n return (\n <StructureSelector\n type={currentItem.id as \"page\" | \"section\"}\n theme={theme.theme}\n onChange={applyStyle}\n />\n );\n }\n\n switch (currentItem.id) {\n case \"categories\":\n return renderCategoriesView();\n case \"colors\":\n return renderColorsView();\n case \"typography\":\n return renderTypographyList();\n case \"interactives\":\n return renderInteractivesList();\n case \"structure\":\n return renderStructureList();\n default:\n return <p className=\"text-xs text-muted-foreground\">Coming soon</p>;\n }\n };\n\n return (\n <div>\n {navigationStack.length === 0 && (\n <div className=\"space-y-4\">{getCurrentView()}</div>\n )}\n {navigationStack.length > 0 && (\n <>\n <div className=\"flex items-center gap-2 pb-2\">\n <button\n onClick={navigateBack}\n className=\"flex items-center rounded-md p-1 transition-colors hover:bg-muted focus:outline-none\"\n aria-label=\"Back\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </button>\n <span className=\"text-sm font-medium text-muted-foreground\">\n {navigationStack[navigationStack.length - 1].label}\n </span>\n </div>\n <div className=\"py-2\">{getCurrentView()}</div>\n </>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { ImageIcon } from \"lucide-react\";\nimport { ImageUploadDialog } from \"@frontlit/media-uploader\";\nimport type { PageSeo } from \"../models\";\nimport { getMediaUrl } from \"../models/media\";\nimport { FieldGroup, TextField, ToggleField } from \"../blocks/_shared/fields\";\n\n/**\n * Page-level SEO settings panel. Like the block and theme editors, changes\n * apply live — the host app persists them via the builder's `onChange`.\n */\nexport function SeoEditor({\n seo,\n onChange,\n}: {\n seo: PageSeo;\n onChange: (seo: PageSeo) => void;\n}) {\n const update = (next: Partial<PageSeo>) => onChange({ ...seo, ...next });\n const imageUrl = getMediaUrl(seo.socialImage);\n\n return (\n <div className=\"flex flex-col\">\n <FieldGroup title=\"Search results\">\n <TextField\n label=\"Title\"\n value={seo.title}\n placeholder=\"Page title\"\n onChange={(title) => update({ title })}\n />\n <TextField\n label=\"Description\"\n multiline\n value={seo.description}\n placeholder=\"A short summary of this page\"\n onChange={(description) => update({ description })}\n />\n <ToggleField\n label=\"Search engine visibility\"\n value={seo.robotsAllowed ?? true}\n onChange={(robotsAllowed) => update({ robotsAllowed })}\n />\n </FieldGroup>\n <FieldGroup title=\"Social card image\">\n {imageUrl ? (\n <div className=\"space-y-2\">\n <img\n src={imageUrl}\n alt=\"Social card preview\"\n className=\"aspect-[1200/630] w-full rounded-md border border-border object-cover\"\n />\n <div className=\"flex items-center gap-2\">\n <ImageUploadDialog\n title=\"Change social card image\"\n description=\"Upload an image or pick 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 update({\n socialImage: {\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 >\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={() => update({ socialImage: undefined })}\n >\n Remove\n </button>\n </div>\n </div>\n ) : (\n <ImageUploadDialog\n title=\"Choose social card image\"\n description=\"Upload an image or pick 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 update({\n socialImage: {\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 >\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 <TextField\n label=\"Or paste image URL\"\n value={imageUrl ?? \"\"}\n placeholder=\"https://...\"\n onChange={(url) =>\n update({\n socialImage: url ? { url, file: url } : undefined,\n })\n }\n />\n <p className=\"text-xs text-muted-foreground\">\n Shown when the page is shared on social networks. Recommended size 1200×630.\n </p>\n </FieldGroup>\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { LayoutTemplate } from \"lucide-react\";\nimport type { PageData, PageSeo, Theme, WidgetInstance } from \"../models\";\nimport { PageRenderer } from \"../renderer\";\nimport { getAddableBlocks, getWidget } from \"../registry\";\nimport {\n createDefaultLayout,\n createWidgetInstance,\n ensureRequiredSharedWidgets,\n getDefaultTheme,\n} from \"../starter\";\nimport { debounce, resolveColorMode, type ColorMode } from \"../utils\";\nimport { themes } from \"../primitives\";\nimport { cn } from \"../primitives/lib/utils\";\nimport type { PageBuilderLinkComponent } from \"../components/nav-link\";\nimport { BuilderTopBar, type PreviewDevice } from \"./top-bar\";\nimport { PreviewFrame } from \"./preview-frame\";\nimport { BlockPicker } from \"./block-picker\";\nimport { SettingsPanel } from \"./settings-panel\";\nimport { BlockSettings } from \"./block-settings\";\nimport { ThemeEditor } from \"./theme-editor\";\nimport { SeoEditor } from \"./seo-editor\";\n\nexport interface PageBuilderState {\n layout: WidgetInstance[];\n theme: Theme;\n seo: PageSeo;\n /** The user's own themes, created/edited from the theme panel. */\n customThemes: Theme[];\n}\n\nexport interface PageBuilderProps {\n initialLayout?: WidgetInstance[];\n initialTheme?: Theme;\n initialSeo?: PageSeo;\n /**\n * Themes offered in the theme panel, categorized like CourseLit's\n * backend sends them: read-only `system` themes and the user's own\n * `custom` themes. Defaults to the built-in presets and no custom\n * themes. Editing a system theme copies it into the custom collection,\n * which flows back to the host via `onChange`.\n */\n themes?: { system?: Theme[]; custom?: Theme[] };\n pageData?: PageData;\n onChange?: (state: PageBuilderState) => void;\n /** Whether the editor may alter team-wide theme data. */\n allowThemeEditing?: boolean;\n /**\n * Optional host link (e.g. Next.js `Link`) forwarded to the live\n * preview's `PageRenderer`. Omit it to render native `<a>` tags.\n */\n linkComponent?: PageBuilderLinkComponent;\n className?: string;\n}\n\n/**\n * What the right-hand settings panel is currently showing. Structured as a\n * union so richer modes (e.g. a full theme editor, SEO, fonts) can slot in\n * later without changing the shell.\n */\ntype PanelState =\n | { mode: \"block\"; widgetId: string }\n | { mode: \"theme\" }\n | { mode: \"seo\" }\n | null;\n\n/**\n * A self-contained, client-side WYSIWYG page builder: pick a theme, add/\n * remove/reorder blocks, and edit each block's settings from the side\n * panel. Holds all state in memory (via `onChange`, the host app decides\n * whether/how to persist it) — there is no backend dependency.\n */\nexport function PageBuilder({\n initialLayout,\n initialTheme,\n initialSeo,\n themes: providedThemes,\n pageData,\n onChange,\n allowThemeEditing = true,\n linkComponent,\n className,\n}: PageBuilderProps) {\n const [layout, setLayout] = useState<WidgetInstance[]>(() =>\n initialLayout ? ensureRequiredSharedWidgets(initialLayout) : createDefaultLayout(),\n );\n const [theme, setTheme] = useState<Theme>(() => initialTheme ?? getDefaultTheme());\n const [previewTheme, setPreviewTheme] = useState<Theme | null>(null);\n const paintedTheme = previewTheme ?? theme;\n const [seo, setSeo] = useState<PageSeo>(() => initialSeo ?? { robotsAllowed: true });\n const systemThemes = providedThemes?.system ?? themes;\n const [customThemes, setCustomThemes] = useState<Theme[]>(\n () => providedThemes?.custom ?? [],\n );\n const [mode, setMode] = useState<ColorMode>(\"system\");\n const [systemPrefersDark, setSystemPrefersDark] = useState(false);\n const [device, setDevice] = useState<PreviewDevice>(\"desktop\");\n const [panel, setPanel] = useState<PanelState>(null);\n const [insertAfter, setInsertAfter] = useState<string | \"end\" | null>(null);\n const [movedWidgetId, setMovedWidgetId] = useState<string | null>(null);\n const movedTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n return () => {\n if (movedTimeoutRef.current) clearTimeout(movedTimeoutRef.current);\n };\n }, []);\n\n useEffect(() => {\n const media = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const apply = () => setSystemPrefersDark(media.matches);\n apply();\n media.addEventListener(\"change\", apply);\n return () => media.removeEventListener(\"change\", apply);\n }, []);\n\n const resolvedMode = resolveColorMode(mode, systemPrefersDark);\n\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const emitChange = useMemo(\n () => debounce((state: PageBuilderState) => onChangeRef.current?.(state), 500),\n [],\n );\n\n useEffect(() => {\n emitChange({ layout, theme, seo, customThemes });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [layout, theme, seo, customThemes]);\n\n const addableBlocks = useMemo(() => getAddableBlocks(), []);\n\n function updateWidgetSettings(widgetId: string, settings: Record<string, unknown>) {\n setLayout((prev) =>\n prev.map((widget) =>\n widget.widgetId === widgetId ? { ...widget, settings } : widget,\n ),\n );\n }\n\n function moveWidget(widgetId: string, direction: -1 | 1) {\n const index = layout.findIndex((w) => w.widgetId === widgetId);\n if (\n index === -1 ||\n [\"header\", \"footer\"].includes(layout[index].name) ||\n !layout[index].moveable\n ) {\n return;\n }\n const targetIndex = index + direction;\n if (\n targetIndex < 0 ||\n targetIndex >= layout.length ||\n [\"header\", \"footer\"].includes(layout[targetIndex].name)\n ) {\n return;\n }\n setLayout((prev) => {\n const next = prev.slice();\n [next[index], next[targetIndex]] = [next[targetIndex], next[index]];\n return next;\n });\n if (movedTimeoutRef.current) clearTimeout(movedTimeoutRef.current);\n setMovedWidgetId(widgetId);\n movedTimeoutRef.current = setTimeout(() => setMovedWidgetId(null), 1500);\n }\n\n function deleteWidget(widgetId: string) {\n setLayout((prev) => {\n const widget = prev.find((item) => item.widgetId === widgetId);\n if (!widget || !widget.deletable || [\"header\", \"footer\"].includes(widget.name)) {\n return prev;\n }\n return prev.filter((item) => item.widgetId !== widgetId);\n });\n setPanel((current) =>\n current?.mode === \"block\" && current.widgetId === widgetId ? null : current,\n );\n }\n\n function addWidget(name: string) {\n const instance = createWidgetInstance(name);\n setLayout((prev) => {\n if (insertAfter === \"end\" || insertAfter === null) {\n const footerIndex = prev.findIndex((w) => w.name === \"footer\");\n if (footerIndex === -1) return [...prev, instance];\n return [...prev.slice(0, footerIndex), instance, ...prev.slice(footerIndex)];\n }\n const afterIndex = prev.findIndex((w) => w.widgetId === insertAfter);\n if (afterIndex === -1) return [...prev, instance];\n return [\n ...prev.slice(0, afterIndex + 1),\n instance,\n ...prev.slice(afterIndex + 1),\n ];\n });\n setInsertAfter(null);\n // Newly added blocks should immediately reveal their settings. This is\n // especially important for intentionally empty blocks such as Embed:\n // without a configured URL or snippet they have no public rendering.\n setPanel({ mode: \"block\", widgetId: instance.widgetId });\n }\n\n const selectedWidgetId = panel?.mode === \"block\" ? panel.widgetId : null;\n const selectedInstance = layout.find((w) => w.widgetId === selectedWidgetId);\n const selectedDefinition = selectedInstance\n ? getWidget(selectedInstance.name)\n : undefined;\n\n const showBlockPanel = Boolean(\n panel?.mode === \"block\" && selectedInstance && selectedDefinition?.editor,\n );\n const showThemePanel = allowThemeEditing && panel?.mode === \"theme\";\n const showSeoPanel = panel?.mode === \"seo\";\n const panelOpen = showBlockPanel || showThemePanel || showSeoPanel;\n\n function closePanel() {\n setPreviewTheme(null);\n setPanel(null);\n }\n\n return (\n <div\n className={cn(\n // Same token scope as PageRenderer. Builder chrome (top bar,\n // add-block overlay, device-frame pattern) lives outside the\n // canvas but still uses bg-background / --muted-foreground.\n \"pb-theme flex h-full w-full flex-col overflow-hidden bg-background text-foreground\",\n resolvedMode === \"dark\" && \"dark\",\n className,\n )}\n >\n <BuilderTopBar\n resolvedMode={resolvedMode}\n onModeChange={setMode}\n device={device}\n onDeviceChange={setDevice}\n onOpenTheme={() => setPanel({ mode: \"theme\" })}\n onOpenSeo={() => setPanel({ mode: \"seo\" })}\n onAddBlock={() => setInsertAfter(\"end\")}\n allowThemeEditing={allowThemeEditing}\n />\n <div className=\"flex min-h-0 w-full min-w-0 flex-1 gap-4 overflow-hidden bg-muted/10 p-4\">\n <div\n className={cn(\n \"flex min-h-0 min-w-0 justify-center overflow-hidden rounded-xl border bg-background/98 shadow-sm backdrop-blur supports-[backdrop-filter]:bg-background/80\",\n panelOpen ? \"flex-1\" : \"w-full\",\n )}\n style={{\n backgroundImage:\n \"radial-gradient(color-mix(in srgb, var(--muted-foreground) 25%, transparent) 1px, transparent 1px)\",\n backgroundSize: \"14px 14px\",\n }}\n >\n <PreviewFrame\n className={cn(\n \"h-full w-full max-w-full transition-[max-width] duration-300\",\n device === \"mobile\" && \"max-w-[390px] border-x\",\n device === \"tablet\" && \"max-w-[768px] border-x\",\n )}\n >\n <PageRenderer\n layout={layout}\n theme={paintedTheme}\n pageData={pageData}\n nextTheme={resolvedMode}\n themeMode={mode}\n onThemeModeChange={setMode}\n editing\n selectedWidgetId={selectedWidgetId ?? undefined}\n highlightedWidgetId={movedWidgetId ?? undefined}\n onSelectWidget={(id) => setPanel({ mode: \"block\", widgetId: id })}\n onMoveWidgetUp={(id) => moveWidget(id, -1)}\n onMoveWidgetDown={(id) => moveWidget(id, 1)}\n onDeleteWidget={deleteWidget}\n onAddWidgetBelow={(id) => setInsertAfter(id)}\n linkComponent={linkComponent}\n />\n </PreviewFrame>\n </div>\n {showBlockPanel && selectedInstance && selectedDefinition?.editor && (\n <SettingsPanel\n title={selectedDefinition.metadata.displayName}\n eyebrow=\"Block settings\"\n description={selectedDefinition.metadata.description}\n icon={LayoutTemplate}\n onClose={closePanel}\n >\n <BlockSettings\n key={selectedInstance.widgetId}\n instance={selectedInstance}\n definition={selectedDefinition}\n theme={theme}\n onChange={(settings) =>\n updateWidgetSettings(selectedInstance.widgetId, settings)\n }\n />\n </SettingsPanel>\n )}\n {showThemePanel && (\n <SettingsPanel title=\"Theme\" onClose={closePanel}>\n <ThemeEditor\n theme={paintedTheme}\n appliedThemeId={theme.id}\n systemThemes={systemThemes}\n customThemes={customThemes}\n colorMode={resolvedMode}\n onColorModeChange={setMode}\n onPreview={setPreviewTheme}\n onApply={(next) => {\n setPreviewTheme(null);\n setTheme(next);\n }}\n onCustomThemesChange={setCustomThemes}\n />\n </SettingsPanel>\n )}\n {showSeoPanel && (\n <SettingsPanel title=\"SEO\" onClose={closePanel}>\n <SeoEditor seo={seo} onChange={setSeo} />\n </SettingsPanel>\n )}\n </div>\n {insertAfter !== null && (\n <BlockPicker\n blocks={addableBlocks}\n onPick={addWidget}\n onClose={() => setInsertAfter(null)}\n />\n )}\n </div>\n );\n}\n"]}