@marktiderman/genesis-sites 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +241 -13
- package/dist/assets/islands.77d11f5697.js +1 -0
- package/dist/assets/sites-forms.732cc7e0c1.css +10 -0
- package/dist/assets/sites-forms.css +1 -1
- package/dist/assets/sites.716b4ac1a5.css +2 -0
- package/dist/assets/sites.css +1 -1
- package/dist/assets.generated-QSB7EJWX.js +3 -0
- package/dist/assets.generated-QSB7EJWX.js.map +1 -0
- package/dist/blocks.d.ts +1 -1
- package/dist/blocks.js +5 -1
- package/dist/blocks.js.map +1 -1
- package/dist/chunk-3VKTBE7S.js +69 -0
- package/dist/chunk-3VKTBE7S.js.map +1 -0
- package/dist/chunk-5IXDFFEG.js +465 -0
- package/dist/chunk-5IXDFFEG.js.map +1 -0
- package/dist/chunk-C375ZPU2.js +2241 -0
- package/dist/chunk-C375ZPU2.js.map +1 -0
- package/dist/{chunk-GA7U3CIN.js → chunk-FBQF2L7O.js} +317 -97
- package/dist/chunk-FBQF2L7O.js.map +1 -0
- package/dist/chunk-H6ED3K4R.js +18 -0
- package/dist/chunk-H6ED3K4R.js.map +1 -0
- package/dist/chunk-KPOX7D4S.js +250 -0
- package/dist/chunk-KPOX7D4S.js.map +1 -0
- package/dist/chunk-VZUDRPFG.js +13 -0
- package/dist/chunk-VZUDRPFG.js.map +1 -0
- package/dist/{chunk-KEF3V5ZN.js → chunk-ZGWGQGT2.js} +169 -73
- package/dist/chunk-ZGWGQGT2.js.map +1 -0
- package/dist/editor.d.ts +526 -0
- package/dist/editor.js +2480 -0
- package/dist/editor.js.map +1 -0
- package/dist/handler-QHH453YG.js +9 -0
- package/dist/handler-QHH453YG.js.map +1 -0
- package/dist/import.d.ts +130 -0
- package/dist/import.js +330 -0
- package/dist/import.js.map +1 -0
- package/dist/index.d.ts +47 -8
- package/dist/index.js +5 -250
- package/dist/index.js.map +1 -1
- package/dist/{registry-CdgVymsu.d.ts → registry-HBn1X60x.d.ts} +274 -8
- package/dist/sections.d.ts +422 -6
- package/dist/sections.js +4 -2
- package/dist/{store-BzGw2i5J.d.ts → store-BXiZeZzH.d.ts} +119 -53
- package/dist/supabase.d.ts +5 -5
- package/dist/supabase.js +115 -6
- package/dist/supabase.js.map +1 -1
- package/dist/web.d.ts +26 -8
- package/dist/web.js +7 -353
- package/dist/web.js.map +1 -1
- package/migrations/0001_genesis_sites.sql +64 -6
- package/migrations/0002_genesis_sites_posts.sql +404 -0
- package/migrations/tests/0001_genesis_sites.test.sql +30 -1
- package/migrations/tests/0002_genesis_sites_posts.test.sql +242 -0
- package/package.json +28 -10
- package/dist/assets/islands.230b20b9c4.js +0 -1
- package/dist/assets/sites-forms.5e6ebf31c3.css +0 -10
- package/dist/assets/sites.b28b796c6f.css +0 -2
- package/dist/chunk-43XUAO63.js +0 -1255
- package/dist/chunk-43XUAO63.js.map +0 -1
- package/dist/chunk-GA7U3CIN.js.map +0 -1
- package/dist/chunk-KEF3V5ZN.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sections/shared.tsx","../src/sections/cta.tsx","../src/sections/faq.tsx","../src/sections/features.tsx","../src/sections/footer.tsx","../src/sections/form-header.tsx","../src/sections/light-form.tsx","../src/sections/form-embed.tsx","../src/sections/gallery.tsx","../src/sections/hero.tsx","../src/sections/logos.tsx","../src/sections/nav.tsx","../src/sections/pricing.tsx","../src/sections/rich-text.tsx","../src/sections/stats.tsx","../src/sections/testimonials.tsx","../src/sections/index.ts"],"names":["onAccent","z","inverted","jsx","jsxs","BandLead","schema","cn","Band","buttonVariants","Check","RichTextView","COLS"],"mappings":"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","file":"chunk-43XUAO63.js","sourcesContent":["/**\n * What every section is drawn with: headings at the level the page gives\n * them, links that are checked again when they render, images with alt text\n * and sizes, and the band that wraps a section. Server-safe: no state, no\n * effects. Classes are written out in full so the stylesheet build finds\n * them.\n */\nimport * as React from \"react\";\nimport { z } from \"zod\";\nimport { Band, BandLead, Display, type BandProps } from \"@marktiderman/genesis-ui/band\";\nimport { buttonVariants } from \"@marktiderman/genesis-ui/button\";\nimport { cn } from \"@marktiderman/genesis-ui/utils\";\nimport {\n Activity,\n Award,\n Calendar,\n Check,\n Clock,\n Dumbbell,\n Heart,\n Leaf,\n Mail,\n MapPin,\n MessageCircle,\n Phone,\n Shield,\n Smile,\n Sparkles,\n Star,\n Target,\n Trophy,\n Users,\n Zap,\n type LucideIcon,\n} from \"lucide-react\";\nimport type { RenderContext } from \"../core/registry\";\nimport type { Image, Link, SectionNode, Surface } from \"../core/schemas\";\nimport { isExternalHref, isSafeHref, isSafeImageSrc } from \"../core/urls\";\n\n// ── Props shared by section schemas ─────────────────────────────────────────\n\n/** An in-page anchor (`#contact`): lowercase letters, digits and hyphens. */\nexport const Anchor = z\n .string()\n .regex(/^[a-z][a-z0-9-]{0,39}$/, \"An anchor is lowercase letters, digits and hyphens.\")\n .optional()\n .meta({ title: \"Anchor (for #links)\" });\n\nexport const ICONS = {\n activity: Activity,\n award: Award,\n calendar: Calendar,\n check: Check,\n clock: Clock,\n dumbbell: Dumbbell,\n heart: Heart,\n leaf: Leaf,\n mail: Mail,\n \"map-pin\": MapPin,\n message: MessageCircle,\n phone: Phone,\n shield: Shield,\n smile: Smile,\n sparkles: Sparkles,\n star: Star,\n target: Target,\n trophy: Trophy,\n users: Users,\n zap: Zap,\n} satisfies Record<string, LucideIcon>;\nexport type IconName = keyof typeof ICONS;\nexport const IconName = z.enum(Object.keys(ICONS) as [IconName, ...IconName[]]).meta({ title: \"Icon\" });\n\n// ── Links ───────────────────────────────────────────────────────────────────\n\n/**\n * A stored link as it prints: checked again (a document that skipped the\n * schema can't smuggle `javascript:` in), with the host's base path on site\n * paths. An unsafe link renders as an inert `#` and is logged.\n */\nexport function resolveHref(href: string, ctx: RenderContext): string {\n if (!isSafeHref(href)) {\n console.error(`[genesis-sites] refused an unsafe link on ${ctx.pagePath}: ${JSON.stringify(String(href).slice(0, 80))}`);\n return \"#\";\n }\n return ctx.href(href);\n}\n\nfunction linkAttrs(link: Link, ctx: RenderContext) {\n const href = resolveHref(link.href, ctx);\n const external = isExternalHref(href);\n return {\n href,\n ...(external && link.newTab ? { target: \"_blank\", rel: \"noopener noreferrer\" } : external ? { rel: \"noopener\" } : {}),\n };\n}\n\nexport type ButtonTone = \"primary\" | \"secondary\" | \"outline\" | \"inverse\" | \"ghost\";\n\nconst TONE: Record<ButtonTone, string> = {\n primary: buttonVariants({ variant: \"default\", size: \"lg\" }),\n secondary: buttonVariants({ variant: \"secondary\", size: \"lg\" }),\n outline: buttonVariants({ variant: \"outline\", size: \"lg\" }),\n // On an accent or inverse band: the band's foreground as the button, its background as the text.\n inverse: cn(buttonVariants({ variant: \"default\", size: \"lg\" }), \"bg-background text-foreground hover:bg-background/90\"),\n ghost: buttonVariants({ variant: \"ghost\", size: \"lg\" }),\n};\n\n/** A link drawn as a button: at least 44px tall, with the focus ring. */\nexport function ButtonLink({ link, ctx, tone = \"primary\", className }: { link: Link; ctx: RenderContext; tone?: ButtonTone; className?: string }) {\n return (\n <a {...linkAttrs(link, ctx)} className={cn(TONE[tone], \"min-h-11\", className)} data-gs-event=\"cta\">\n {link.label}\n {link.newTab && isExternalHref(link.href) ? <span className=\"sr-only\"> (opens in a new tab)</span> : null}\n </a>\n );\n}\n\n/** A text link: underlined, at least 24px tall (WCAG 2.5.8). */\nexport function TextLink({ link, ctx, className }: { link: Link; ctx: RenderContext; className?: string }) {\n return (\n <a\n {...linkAttrs(link, ctx)}\n className={cn(\"inline-flex min-h-6 items-center rounded-sm underline-offset-4 hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\", className)}\n >\n {link.label}\n {link.newTab && isExternalHref(link.href) ? <span className=\"sr-only\"> (opens in a new tab)</span> : null}\n </a>\n );\n}\n\nexport function Actions({ primary, secondary, ctx, onAccent, className }: { primary?: Link; secondary?: Link; ctx: RenderContext; onAccent?: boolean; className?: string }) {\n if (!primary && !secondary) return null;\n return (\n <div className={cn(\"flex flex-col gap-3 sm:flex-row sm:flex-wrap\", className)}>\n {primary ? <ButtonLink link={primary} ctx={ctx} tone={onAccent ? \"inverse\" : \"primary\"} /> : null}\n {secondary ? <ButtonLink link={secondary} ctx={ctx} tone={onAccent ? \"ghost\" : \"outline\"} className={onAccent ? \"border border-current hover:bg-transparent hover:underline\" : undefined} /> : null}\n </div>\n );\n}\n\n// ── Images ──────────────────────────────────────────────────────────────────\n\nexport interface SiteImageProps {\n image: Image;\n className?: string;\n /** `sizes` for the browser's pick; the image is one source here (image CDN transforms are V1). */\n sizes?: string;\n /** The page's largest image (a hero): loaded eagerly, at high priority. */\n priority?: boolean;\n ctx: RenderContext;\n}\n\n/** An image with alt text (empty when decorative), its size to stop layout shift, and lazy loading below the fold. */\nexport function SiteImage({ image, className, sizes, priority, ctx }: SiteImageProps) {\n if (!isSafeImageSrc(image.src)) {\n console.error(`[genesis-sites] refused an unsafe image source on ${ctx.pagePath}.`);\n return null;\n }\n const src = image.src.startsWith(\"/\") ? ctx.href(image.src) : image.src;\n return (\n <img\n src={src}\n alt={image.decorative ? \"\" : image.alt}\n {...(image.width ? { width: image.width } : {})}\n {...(image.height ? { height: image.height } : {})}\n {...(sizes ? { sizes } : {})}\n loading={priority ? \"eager\" : \"lazy\"}\n decoding={priority ? \"sync\" : \"async\"}\n {...(priority ? { fetchPriority: \"high\" as const } : {})}\n style={image.focal ? { objectPosition: `${image.focal.x}% ${image.focal.y}%` } : undefined}\n className={className}\n />\n );\n}\n\n// ── Headings and bands ──────────────────────────────────────────────────────\n\n/** The section's title, at the level the page gives it (h1 for the page's main heading). */\nexport function SectionTitle({ ctx, id, size, className, children }: { ctx: RenderContext; id: string; size?: \"xl\" | \"lg\" | \"md\" | \"sm\"; className?: string; children: React.ReactNode }) {\n return (\n <Display as={ctx.headingLevel === 1 ? \"h1\" : \"h2\"} id={id} size={size ?? (ctx.headingLevel === 1 ? \"xl\" : \"lg\")} className={className}>\n {children}\n </Display>\n );\n}\n\n/** An item's title inside a section: one level below the section's. */\nexport function ItemTitle({ ctx, className, children }: { ctx: RenderContext; className?: string; children: React.ReactNode }) {\n const Tag = ctx.headingLevel === 1 ? \"h2\" : \"h3\";\n return <Tag className={cn(\"font-display text-lg font-semibold leading-snug\", className)}>{children}</Tag>;\n}\n\nexport const titleId = (ctx: RenderContext, part = \"title\") => `${ctx.idPrefix}-${part}`;\n\nconst HIDE_ON: Record<string, string> = { mobile: \"max-md:hidden\", desktop: \"md:hidden\" };\n\n/** Classes and attributes for a section's band: its anchor, `hideOn`, and the name from its title. */\nexport function bandAttrs(node: SectionNode, ctx: RenderContext, anchor: string | undefined, labelled = true): Partial<BandProps> & Record<string, unknown> {\n const hide = (node.hideOn ?? []).map((h) => HIDE_ON[h]).filter(Boolean).join(\" \");\n return {\n ...(anchor ? { id: anchor } : {}),\n ...(labelled ? { \"aria-labelledby\": titleId(ctx) } : {}),\n \"data-gs-section\": node.type,\n \"data-gs-variant\": node.variant,\n className: cn(anchor ? \"scroll-mt-20\" : undefined, hide || undefined),\n };\n}\n\n/** The band a body section sits on, named by its title. */\nexport function SectionBand({\n node,\n ctx,\n anchor,\n surface = \"base\",\n spacing = \"md\",\n width = \"lg\",\n labelled = true,\n className,\n children,\n}: {\n node: SectionNode;\n ctx: RenderContext;\n anchor?: string | undefined;\n surface?: Surface;\n spacing?: BandProps[\"spacing\"];\n width?: BandProps[\"width\"];\n labelled?: boolean;\n className?: string;\n children: React.ReactNode;\n}) {\n const attrs = bandAttrs(node, ctx, anchor, labelled);\n return (\n <Band {...attrs} as={labelled ? \"section\" : \"div\"} surface={surface} spacing={spacing} width={width} className={cn(attrs.className as string | undefined, className)}>\n {children}\n </Band>\n );\n}\n\n/** A section's heading block: an eyebrow, the title and a lead, centred or left. */\nexport function SectionIntro({\n ctx,\n eyebrow,\n heading,\n body,\n align = \"center\",\n tone = \"muted\",\n size,\n}: {\n ctx: RenderContext;\n eyebrow?: string | undefined;\n heading?: string | undefined;\n body?: string | undefined;\n align?: \"center\" | \"left\";\n tone?: \"muted\" | \"inherit\";\n size?: \"xl\" | \"lg\" | \"md\" | \"sm\";\n}) {\n if (!heading && !body) return null;\n return (\n <div className={cn(\"flex max-w-3xl flex-col gap-4\", align === \"center\" ? \"mx-auto items-center text-center\" : \"items-start text-left\")}>\n {eyebrow ? <p className=\"text-sm font-semibold uppercase tracking-wider\">{eyebrow}</p> : null}\n {heading ? (\n <SectionTitle ctx={ctx} id={titleId(ctx)} size={size}>\n {heading}\n </SectionTitle>\n ) : null}\n {body ? <BandLead tone={tone}>{body}</BandLead> : null}\n </div>\n );\n}\n\n/** A section with no visible title still needs a name: a visually hidden one. */\nexport function HiddenTitle({ ctx, children }: { ctx: RenderContext; children: React.ReactNode }) {\n const Tag = ctx.headingLevel === 1 ? \"h1\" : \"h2\";\n return (\n <Tag id={titleId(ctx)} className=\"sr-only\">\n {children}\n </Tag>\n );\n}\n\nexport const onAccent = (surface: Surface | undefined) => surface === \"accent\" || surface === \"inverse\";\n","import { z } from \"zod\";\nimport { BandLead } from \"@marktiderman/genesis-ui/band\";\nimport { defineSection } from \"../core/registry\";\nimport { Copy, Line, Link, Surface } from \"../core/schemas\";\nimport { Actions, Anchor, SectionBand, SectionTitle, onAccent, titleId } from \"./shared\";\n\nconst schema = z.object({\n heading: Line(90),\n body: Copy(320).optional(),\n primaryCta: Link,\n secondaryCta: Link.optional(),\n surface: Surface.default(\"accent\"),\n anchor: Anchor,\n});\n\nexport const ctaSection = defineSection({\n type: \"cta\",\n version: 1,\n label: \"Call to action\",\n description: \"One clear next step: a heading, a line and a button.\",\n category: \"conversion\",\n schema,\n variants: [\n { id: \"banner\", label: \"Full-width banner\" },\n { id: \"card\", label: \"Card\" },\n { id: \"split\", label: \"Text left, buttons right\" },\n ],\n defaultVariant: \"banner\",\n presets: [\n { name: \"Banner\", variant: \"banner\", props: { heading: \"Ready to start?\", primaryCta: { label: \"Get started\", href: \"#contact\" }, surface: \"accent\" } },\n { name: \"Card\", variant: \"card\", props: { heading: \"Questions? We're here.\", primaryCta: { label: \"Contact us\", href: \"/contact\" }, surface: \"muted\" } },\n ],\n render: ({ props, variant, node, ctx }) => {\n if (variant === \"card\") {\n // The card carries the colour; the band stays the page's.\n const inverted = onAccent(props.surface);\n const card =\n props.surface === \"accent\" ? \"bg-primary text-primary-foreground\" : props.surface === \"inverse\" ? \"bg-foreground text-background\" : props.surface === \"muted\" ? \"bg-muted\" : \"border border-border\";\n return (\n <SectionBand node={node} ctx={ctx} anchor={props.anchor} width=\"md\">\n <div className={`flex flex-col items-center gap-6 rounded-2xl px-6 py-12 text-center sm:px-12 ${card}`}>\n <SectionTitle ctx={ctx} id={titleId(ctx)} size=\"lg\">\n {props.heading}\n </SectionTitle>\n {props.body ? <BandLead tone={inverted ? \"inherit\" : \"muted\"}>{props.body}</BandLead> : null}\n <Actions primary={props.primaryCta} secondary={props.secondaryCta} ctx={ctx} onAccent={inverted} className=\"sm:justify-center\" />\n </div>\n </SectionBand>\n );\n }\n const inverted = onAccent(props.surface);\n if (variant === \"split\") {\n return (\n <SectionBand node={node} ctx={ctx} anchor={props.anchor} surface={props.surface}>\n <div className=\"flex flex-col gap-8 md:flex-row md:items-center md:justify-between\">\n <div className=\"flex max-w-2xl flex-col gap-3\">\n <SectionTitle ctx={ctx} id={titleId(ctx)} size=\"lg\">\n {props.heading}\n </SectionTitle>\n {props.body ? <BandLead tone={inverted ? \"inherit\" : \"muted\"}>{props.body}</BandLead> : null}\n </div>\n <Actions primary={props.primaryCta} secondary={props.secondaryCta} ctx={ctx} onAccent={inverted} className=\"shrink-0\" />\n </div>\n </SectionBand>\n );\n }\n return (\n <SectionBand node={node} ctx={ctx} anchor={props.anchor} surface={props.surface}>\n <div className=\"mx-auto flex max-w-3xl flex-col items-center gap-6 text-center\">\n <SectionTitle ctx={ctx} id={titleId(ctx)} size=\"lg\">\n {props.heading}\n </SectionTitle>\n {props.body ? <BandLead tone={inverted ? \"inherit\" : \"muted\"}>{props.body}</BandLead> : null}\n <Actions primary={props.primaryCta} secondary={props.secondaryCta} ctx={ctx} onAccent={inverted} className=\"sm:justify-center\" />\n </div>\n </SectionBand>\n );\n },\n});\n","import { z } from \"zod\";\nimport { ChevronDown } from \"lucide-react\";\nimport { defineSection } from \"../core/registry\";\nimport { Copy, Line, Surface } from \"../core/schemas\";\nimport { Anchor, ItemTitle, SectionBand, SectionIntro, onAccent } from \"./shared\";\n\nconst schema = z.object({\n heading: Line(90),\n body: Copy(320).optional(),\n items: z\n .array(z.object({ question: Line(160), answer: Copy(1200).min(1) }))\n .min(1)\n .max(30),\n surface: Surface.default(\"base\"),\n anchor: Anchor,\n});\n\n/** Answers keep their line breaks as paragraphs. */\nfunction Answer({ text, muted }: { text: string; muted: boolean }) {\n return (\n <div className={muted ? \"flex flex-col gap-3 text-muted-foreground\" : \"flex flex-col gap-3\"}>\n {text.split(/\\n{2,}/).map((p, i) => (\n <p key={i} className=\"whitespace-pre-line\">\n {p}\n </p>\n ))}\n </div>\n );\n}\n\nexport const faqSection = defineSection({\n type: \"faq\",\n version: 1,\n label: \"FAQ\",\n description: \"Questions and answers. Works without script: each answer opens in place.\",\n category: \"content\",\n schema,\n variants: [\n { id: \"accordion\", label: \"Questions that open\" },\n { id: \"list\", label: \"All answers shown, two columns\" },\n ],\n defaultVariant: \"accordion\",\n presets: [\n {\n name: \"FAQ\",\n variant: \"accordion\",\n props: { heading: \"Questions\", items: [{ question: \"A question people ask?\", answer: \"A short, direct answer.\" }, { question: \"Another question?\", answer: \"Another answer.\" }] },\n },\n ],\n render: ({ props, variant, node, ctx }) => {\n const inverted = onAccent(props.surface);\n const intro = <SectionIntro ctx={ctx} heading={props.heading} body={props.body} tone={inverted ? \"inherit\" : \"muted\"} />;\n if (variant === \"list\") {\n return (\n <SectionBand node={node} ctx={ctx} anchor={props.anchor} surface={props.surface}>\n {intro}\n <div className=\"mt-12 grid gap-x-12 gap-y-10 md:grid-cols-2\">\n {props.items.map((item, i) => (\n <div key={i} className=\"flex flex-col gap-2\">\n <ItemTitle ctx={ctx}>{item.question}</ItemTitle>\n <Answer text={item.answer} muted={!inverted} />\n </div>\n ))}\n </div>\n </SectionBand>\n );\n }\n return (\n <SectionBand node={node} ctx={ctx} anchor={props.anchor} surface={props.surface} width=\"md\">\n {intro}\n <div className=\"mx-auto mt-10 flex max-w-3xl flex-col divide-y divide-border border-y border-border\">\n {props.items.map((item, i) => (\n <details key={i} className=\"group\">\n <summary className=\"flex min-h-11 cursor-pointer list-none items-center justify-between gap-4 rounded-sm py-4 text-left font-display text-lg font-semibold focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring [&::-webkit-details-marker]:hidden\">\n <span>{item.question}</span>\n <ChevronDown aria-hidden=\"true\" className=\"size-5 shrink-0 transition-transform group-open:rotate-180 motion-reduce:transition-none\" />\n </summary>\n <div className=\"pb-5\">\n <Answer text={item.answer} muted={!inverted} />\n </div>\n </details>\n ))}\n </div>\n </SectionBand>\n );\n },\n});\n","import { z } from \"zod\";\nimport { cn } from \"@marktiderman/genesis-ui/utils\";\nimport { defineSection } from \"../core/registry\";\nimport { Copy, Image, Line, Link, Surface } from \"../core/schemas\";\nimport { Anchor, ICONS, IconName, ItemTitle, SectionBand, SectionIntro, SiteImage, TextLink, onAccent } from \"./shared\";\n\nconst Item = z.object({\n title: Line(60),\n body: Copy(320),\n icon: IconName.optional(),\n image: Image.optional(),\n link: Link.optional(),\n});\n\nconst schema = z.object({\n eyebrow: Line(60).optional(),\n heading: Line(90),\n body: Copy(320).optional(),\n items: z.array(Item).min(1).max(12),\n columns: z.union([z.literal(2), z.literal(3), z.literal(4)]).default(3),\n surface: Surface.default(\"base\"),\n anchor: Anchor,\n});\n\nconst COLUMNS = { 2: \"sm:grid-cols-2\", 3: \"sm:grid-cols-2 lg:grid-cols-3\", 4: \"sm:grid-cols-2 lg:grid-cols-4\" } as const;\n\nexport const featuresSection = defineSection({\n type: \"features\",\n version: 1,\n label: \"Features\",\n description: \"What you offer: a few items, each with a title, a line of copy and an icon or image.\",\n category: \"content\",\n schema,\n variants: [\n { id: \"grid\", label: \"Cards in a grid\" },\n { id: \"list\", label: \"Icon list\" },\n { id: \"alternating\", label: \"Image and text, alternating\" },\n ],\n defaultVariant: \"grid\",\n presets: [\n {\n name: \"Three features\",\n variant: \"grid\",\n props: {\n heading: \"What you get\",\n items: [\n { title: \"First thing\", body: \"Why it matters.\", icon: \"check\" },\n { title: \"Second thing\", body: \"Why it matters.\", icon: \"star\" },\n { title: \"Third thing\", body: \"Why it matters.\", icon: \"heart\" },\n ],\n },\n },\n {\n name: \"Feature list\",\n variant: \"list\",\n props: { heading: \"Why people choose us\", columns: 2, items: [{ title: \"A reason\", body: \"In a sentence.\", icon: \"check\" }, { title: \"Another reason\", body: \"In a sentence.\", icon: \"check\" }] },\n },\n ],\n render: ({ props, variant, node, ctx }) => {\n const inverted = onAccent(props.surface);\n const intro = <SectionIntro ctx={ctx} eyebrow={props.eyebrow} heading={props.heading} body={props.body} tone={inverted ? \"inherit\" : \"muted\"} />;\n const Icon = (name?: keyof typeof ICONS) => {\n if (!name) return null;\n const Glyph = ICONS[name];\n return (\n <span aria-hidden=\"true\" className={cn(\"inline-flex size-11 shrink-0 items-center justify-center rounded-lg\", inverted ? \"bg-background text-foreground\" : \"bg-primary text-primary-foreground\")}>\n <Glyph className=\"size-5\" />\n </span>\n );\n };\n\n if (variant === \"alternating\") {\n return (\n <SectionBand node={node} ctx={ctx} anchor={props.anchor} surface={props.surface}>\n {intro}\n <ul className=\"mt-12 flex flex-col gap-12 md:gap-16\">\n {props.items.map((item, i) => (\n <li key={i} className=\"grid items-center gap-8 md:grid-cols-2 md:gap-12\">\n <div className={cn(\"flex flex-col gap-3\", i % 2 === 1 && \"md:order-2\")}>\n {Icon(item.icon)}\n <ItemTitle ctx={ctx} className=\"text-2xl\">\n {item.title}\n </ItemTitle>\n <p className={inverted ? undefined : \"text-muted-foreground\"}>{item.body}</p>\n {item.link ? <TextLink link={item.link} ctx={ctx} className=\"font-medium underline\" /> : null}\n </div>\n {item.image ? (\n <SiteImage image={item.image} ctx={ctx} sizes=\"(min-width: 768px) 50vw, 100vw\" className=\"aspect-[4/3] w-full rounded-xl object-cover\" />\n ) : (\n <div aria-hidden=\"true\" className=\"hidden aspect-[4/3] w-full rounded-xl bg-muted md:block\" />\n )}\n </li>\n ))}\n </ul>\n </SectionBand>\n );\n }\n if (variant === \"list\") {\n return (\n <SectionBand node={node} ctx={ctx} anchor={props.anchor} surface={props.surface}>\n {intro}\n <ul className={cn(\"mt-12 grid gap-x-10 gap-y-8\", props.columns >= 2 && \"sm:grid-cols-2\", props.columns >= 3 && \"lg:grid-cols-3\")}>\n {props.items.map((item, i) => (\n <li key={i} className=\"flex gap-4\">\n {Icon(item.icon ?? \"check\")}\n <div className=\"flex flex-col gap-1\">\n <ItemTitle ctx={ctx}>{item.title}</ItemTitle>\n <p className={inverted ? undefined : \"text-muted-foreground\"}>{item.body}</p>\n {item.link ? <TextLink link={item.link} ctx={ctx} className=\"font-medium underline\" /> : null}\n </div>\n </li>\n ))}\n </ul>\n </SectionBand>\n );\n }\n return (\n <SectionBand node={node} ctx={ctx} anchor={props.anchor} surface={props.surface}>\n {intro}\n <ul className={cn(\"mt-12 grid gap-6\", COLUMNS[props.columns])}>\n {props.items.map((item, i) => (\n <li key={i} className=\"flex flex-col gap-3 rounded-xl border border-border bg-background p-6 text-foreground\">\n {item.image ? <SiteImage image={item.image} ctx={ctx} sizes=\"(min-width: 1024px) 33vw, (min-width: 640px) 50vw, 100vw\" className=\"aspect-video w-full rounded-lg object-cover\" /> : Icon(item.icon)}\n <ItemTitle ctx={ctx}>{item.title}</ItemTitle>\n <p className=\"text-muted-foreground\">{item.body}</p>\n {item.link ? <TextLink link={item.link} ctx={ctx} className=\"mt-auto font-medium underline\" /> : null}\n </li>\n ))}\n </ul>\n </SectionBand>\n );\n },\n});\n","import { z } from \"zod\";\nimport { Band } from \"@marktiderman/genesis-ui/band\";\nimport { cn } from \"@marktiderman/genesis-ui/utils\";\nimport { defineSection } from \"../core/registry\";\nimport { Copy, Line, Link, Surface } from \"../core/schemas\";\nimport { TextLink, bandAttrs } from \"./shared\";\n\nconst schema = z.object({\n tagline: Copy(200).optional(),\n columns: z\n .array(z.object({ heading: Line(40), links: z.array(Link).min(1).max(8) }))\n .max(4)\n .default([]),\n links: z.array(Link).max(12).default([]),\n copyright: Line(120).optional(),\n surface: Surface.default(\"inverse\"),\n});\n\nexport const footerSection = defineSection({\n type: \"footer\",\n version: 1,\n label: \"Footer\",\n description: \"The site's footer: links, a line about you and the copyright.\",\n category: \"footer\",\n placement: \"footer\",\n limit: 1,\n schema,\n variants: [\n { id: \"simple\", label: \"Links in a row\" },\n { id: \"columns\", label: \"Link columns\" },\n { id: \"minimal\", label: \"One line\" },\n ],\n defaultVariant: \"simple\",\n presets: [\n { name: \"Footer\", variant: \"simple\", props: { links: [{ label: \"Contact\", href: \"/contact\" }], copyright: \"© Your business\" } },\n { name: \"Footer with columns\", variant: \"columns\", props: { columns: [{ heading: \"Visit\", links: [{ label: \"Contact\", href: \"/contact\" }] }], copyright: \"© Your business\" } },\n ],\n render: ({ props, variant, node, ctx }) => {\n const attrs = bandAttrs(node, ctx, undefined, false);\n const quiet = props.surface === \"base\" || props.surface === \"muted\" ? \"text-muted-foreground\" : undefined;\n const name = <p className=\"font-display text-lg font-bold\">{ctx.site.name}</p>;\n const copyright = props.copyright ? <p className={cn(\"text-sm\", quiet)}>{props.copyright}</p> : null;\n const row = (links: z.output<typeof schema>[\"links\"]) =>\n links.length ? (\n <nav aria-label=\"Footer\">\n <ul className=\"flex flex-wrap gap-x-6 gap-y-2\">\n {links.map((link, i) => (\n <li key={i}>\n <TextLink link={link} ctx={ctx} className=\"text-sm underline\" />\n </li>\n ))}\n </ul>\n </nav>\n ) : null;\n\n if (variant === \"minimal\") {\n return (\n <Band {...attrs} as=\"footer\" surface={props.surface} spacing=\"sm\">\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n {copyright ?? name}\n {row(props.links)}\n </div>\n </Band>\n );\n }\n if (variant === \"columns\") {\n return (\n <Band {...attrs} as=\"footer\" surface={props.surface} spacing=\"md\">\n <div className=\"grid gap-10 md:grid-cols-[2fr_repeat(3,1fr)]\">\n <div className=\"flex flex-col gap-3\">\n {name}\n {props.tagline ? <p className={cn(\"max-w-sm\", quiet)}>{props.tagline}</p> : null}\n </div>\n {props.columns.map((col, i) => (\n <nav key={i} aria-label={col.heading} className=\"flex flex-col gap-3\">\n <p className=\"text-sm font-semibold uppercase tracking-wider\">{col.heading}</p>\n <ul className=\"flex flex-col gap-1\">\n {col.links.map((link, j) => (\n <li key={j}>\n <TextLink link={link} ctx={ctx} className=\"text-sm underline\" />\n </li>\n ))}\n </ul>\n </nav>\n ))}\n </div>\n <div className=\"mt-10 flex flex-col gap-4 border-t border-current/20 pt-6 sm:flex-row sm:items-center sm:justify-between\">\n {copyright}\n {row(props.links)}\n </div>\n </Band>\n );\n }\n return (\n <Band {...attrs} as=\"footer\" surface={props.surface} spacing=\"sm\">\n <div className=\"flex flex-col gap-6 md:flex-row md:items-start md:justify-between\">\n <div className=\"flex flex-col gap-2\">\n {name}\n {props.tagline ? <p className={cn(\"max-w-md\", quiet)}>{props.tagline}</p> : null}\n </div>\n {row(props.links)}\n </div>\n {copyright ? <div className=\"mt-6\">{copyright}</div> : null}\n </Band>\n );\n },\n});\n","/**\n * The embedded form's header. forms-web's own header opens with an `h1`\n * (right for a form that is the whole page); on a site page the section's\n * title is the heading, so the form's title is an `h3` under it. The server\n * render and the form island both use this, so the island hydrates the same\n * markup.\n */\nimport type { HeaderSlotProps } from \"@marktiderman/genesis-forms-web\";\n\nexport function SiteFormHeader({ title, description, requiredNote }: HeaderSlotProps) {\n return (\n <header className=\"flex flex-col gap-1\">\n <h3 className=\"text-lg font-semibold\">{title}</h3>\n {description ? <p className=\"text-muted-foreground\">{description}</p> : null}\n {requiredNote ? (\n <p className=\"text-sm text-muted-foreground\">\n <span aria-hidden=\"true\">* </span>\n {requiredNote}\n </p>\n ) : null}\n </header>\n );\n}\n\nexport const siteFormSlots = { header: SiteFormHeader };\n","/**\n * The light form: a genesis-forms definition drawn as a plain HTML `<form>`,\n * for the forms a site page usually carries (a contact or sign-up form). The\n * islands loader sends it as JSON (`{ form, answers }`, answers keyed by\n * field id, as the engine's `answers()` gives them), so the page loads no\n * React and no form bundle. The browser checks required fields, emails,\n * numbers and dates; the host's endpoint checks the answers again\n * (`validateSubmission`), as it must for any form.\n *\n * A form that needs the engine (logic, pages, recall, hidden inputs, host\n * option lists, \"Other\" options, focus layout, saved progress, anonymous\n * mode, or a field type this file doesn't draw) gets forms-web's `<Form>`\n * and the form island instead: see `isLightForm`.\n */\nimport type { Block, FieldBlock, FormDefinition } from \"@marktiderman/genesis-forms\";\nimport { choiceOptions } from \"@marktiderman/genesis-forms\";\nimport { buttonVariants } from \"@marktiderman/genesis-ui/button\";\nimport { Input } from \"@marktiderman/genesis-ui/input\";\nimport { Textarea } from \"@marktiderman/genesis-ui/textarea\";\nimport { cn } from \"@marktiderman/genesis-ui/utils\";\n\n/** The field types the light form draws, and how the islands loader reads each one's answer. */\nconst KINDS = {\n \"short-text\": \"text\",\n \"long-text\": \"text\",\n email: \"text\",\n phone: \"text\",\n date: \"text\",\n number: \"number\",\n \"single-choice\": \"single\",\n dropdown: \"single\",\n \"multi-choice\": \"multi\",\n \"yes-no\": \"yes-no\",\n consent: \"consent\",\n} as const;\ntype LightType = keyof typeof KINDS;\n\nconst hasRecall = (text: unknown) => typeof text === \"string\" && text.includes(\"{{\");\n\nfunction lightField(block: Block): boolean {\n if (block.kind === \"page-break\") return false;\n if (block.kind === \"content\") return (block.type === \"heading\" || block.type === \"text\") && !hasRecall(block.text);\n if (!(block.type in KINDS)) return false;\n if (hasRecall(block.label) || hasRecall(block.description) || hasRecall(block.placeholder)) return false;\n const props = block.props ?? {};\n if (props.optionsFrom !== undefined || props.other !== undefined) return false;\n return true;\n}\n\n/** Can this form be drawn as a plain HTML form (no engine on the page)? */\nexport function isLightForm(form: FormDefinition): boolean {\n if (form.layout?.mode === \"focus\") return false;\n if (form.logic?.length || form.hidden?.length) return false;\n if (form.settings?.anonymous || form.settings?.saveProgress) return false;\n return form.blocks.length > 0 && form.blocks.every(lightField);\n}\n\nconst control = \"text-base\";\nconst choiceInput = \"size-5 shrink-0 accent-[hsl(var(--primary))]\";\nconst choiceRow = \"flex min-h-11 items-center gap-3 rounded-md px-1\";\n\nfunction str(value: unknown): string | undefined {\n return typeof value === \"string\" && value ? value : typeof value === \"number\" ? String(value) : undefined;\n}\n\nfunction FieldControl({ field, id, describedBy }: { field: FieldBlock; id: string; describedBy?: string }) {\n const type = field.type as LightType;\n const props = field.props ?? {};\n const common = {\n id,\n name: field.id,\n required: field.required === true,\n ...(field.placeholder ? { placeholder: field.placeholder } : {}),\n ...(describedBy ? { \"aria-describedby\": describedBy } : {}),\n };\n switch (type) {\n case \"short-text\":\n return <Input {...common} type=\"text\" maxLength={500} className={control} />;\n case \"long-text\":\n return <Textarea {...common} maxLength={5000} rows={4} className={control} />;\n case \"email\":\n return <Input {...common} type=\"email\" autoComplete=\"email\" inputMode=\"email\" maxLength={320} className={control} />;\n case \"phone\":\n return <Input {...common} type=\"tel\" autoComplete=\"tel\" inputMode=\"tel\" maxLength={40} className={control} />;\n case \"date\":\n return <Input {...common} type=\"date\" {...(str(props.min) ? { min: str(props.min) } : {})} {...(str(props.max) ? { max: str(props.max) } : {})} className={control} />;\n case \"number\":\n return (\n <Input\n {...common}\n type=\"number\"\n inputMode=\"decimal\"\n {...(str(props.min) ? { min: str(props.min) } : {})}\n {...(str(props.max) ? { max: str(props.max) } : {})}\n step={str(props.step) ?? \"any\"}\n className={control}\n />\n );\n case \"dropdown\":\n return (\n <select\n {...common}\n defaultValue=\"\"\n className=\"flex h-11 w-full rounded-md border border-input bg-background px-3 text-base focus-visible:outline-2 focus-visible:outline-ring\"\n >\n <option value=\"\" disabled={field.required === true}>\n {field.placeholder || \"Choose one\"}\n </option>\n {choiceOptions(field).map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n </select>\n );\n default:\n return null;\n }\n}\n\n/** A question drawn as a group of radios or checkboxes (a `fieldset`, its label the `legend`). */\nfunction ChoiceGroup({ field, id, describedBy }: { field: FieldBlock; id: string; describedBy?: string }) {\n const type = field.type as LightType;\n const required = field.required === true;\n const options =\n type === \"yes-no\"\n ? [\n { value: \"yes\", label: \"Yes\" },\n { value: \"no\", label: \"No\" },\n ]\n : choiceOptions(field).map((o) => ({ value: o.value, label: o.label }));\n const multi = type === \"multi-choice\";\n return (\n <fieldset className=\"flex flex-col gap-1\" {...(describedBy ? { \"aria-describedby\": describedBy } : {})} data-gs-field={field.id} data-gs-kind={KINDS[type]} {...(required ? { \"data-gs-required\": \"\" } : {})}>\n <legend className=\"mb-1 font-medium\">\n {field.label}\n {required ? <RequiredMark /> : null}\n </legend>\n {field.description ? (\n <p id={`${id}-desc`} className=\"mb-1 text-sm text-muted-foreground\">\n {field.description}\n </p>\n ) : null}\n {options.map((o, i) => (\n <label key={o.value} className={choiceRow}>\n <input\n type={multi ? \"checkbox\" : \"radio\"}\n name={field.id}\n value={o.value}\n className={choiceInput}\n // Radios carry `required` natively; \"at least one checkbox\" is checked by the island.\n {...(required && !multi && i === 0 ? { required: true } : {})}\n />\n <span>{o.label}</span>\n </label>\n ))}\n </fieldset>\n );\n}\n\nfunction RequiredMark() {\n return (\n <>\n <span aria-hidden=\"true\" className=\"text-muted-foreground\">\n {\" \"}\n *\n </span>\n <span className=\"sr-only\"> (required)</span>\n </>\n );\n}\n\nfunction FieldRow({ field, idPrefix }: { field: FieldBlock; idPrefix: string }) {\n const id = `${idPrefix}-${field.id}`;\n const type = field.type as LightType;\n const describedBy = field.description ? `${id}-desc` : undefined;\n if (type === \"single-choice\" || type === \"multi-choice\" || type === \"yes-no\") return <ChoiceGroup field={field} id={id} {...(describedBy ? { describedBy } : {})} />;\n if (type === \"consent\") {\n const text = str(field.props?.text) ?? field.label;\n return (\n <div className=\"flex flex-col gap-1\" data-gs-field={field.id} data-gs-kind=\"consent\">\n <label className={cn(choiceRow, \"items-start py-1\")}>\n <input id={id} type=\"checkbox\" name={field.id} value=\"true\" required={field.required === true} className={cn(choiceInput, \"mt-0.5\")} {...(describedBy ? { \"aria-describedby\": describedBy } : {})} />\n <span>\n {text}\n {field.required ? <RequiredMark /> : null}\n </span>\n </label>\n {field.description ? (\n <p id={`${id}-desc`} className=\"text-sm text-muted-foreground\">\n {field.description}\n </p>\n ) : null}\n </div>\n );\n }\n return (\n <div className=\"flex flex-col gap-2\" data-gs-field={field.id} data-gs-kind={KINDS[type]}>\n <label htmlFor={id} className=\"font-medium\">\n {field.label}\n {field.required ? <RequiredMark /> : null}\n </label>\n {field.description ? (\n <p id={`${id}-desc`} className=\"-mt-1 text-sm text-muted-foreground\">\n {field.description}\n </p>\n ) : null}\n <FieldControl field={field} id={id} {...(describedBy ? { describedBy } : {})} />\n </div>\n );\n}\n\nexport interface LightFormProps {\n form: FormDefinition;\n slug: string;\n /** Where the answers go: the host's endpoint (a site path, already prefixed, or an https URL). */\n submitUrl: string;\n submitLabel?: string;\n /** Makes ids unique on the page. */\n idPrefix: string;\n}\n\n/**\n * A genesis-forms definition as a plain HTML form. Server-rendered; the\n * islands loader sends it. Without script the browser posts the fields to\n * `submitUrl` as an ordinary form, so an endpoint that also reads\n * `application/x-www-form-urlencoded` works with JavaScript off.\n */\nexport function LightForm({ form, slug, submitUrl, submitLabel, idPrefix }: LightFormProps) {\n const ending = form.endings?.[0];\n // Field ids are the form's; this suffix keeps the status's id apart from any of them.\n const statusId = `${idPrefix}--gs-status`;\n return (\n <form\n method=\"post\"\n action={submitUrl}\n data-gs-island=\"light-form\"\n data-gs-form={slug}\n data-gs-sent={ending ? `${ending.title}${ending.description ? ` ${ending.description}` : \"\"}` : \"Thanks. We got it.\"}\n className=\"flex flex-col gap-5 text-left\"\n >\n <input type=\"hidden\" name=\"form\" value={slug} />\n <div className=\"flex flex-col gap-1\">\n <h3 className=\"text-lg font-semibold\">{form.title}</h3>\n {form.description ? <p className=\"text-muted-foreground\">{form.description}</p> : null}\n {form.blocks.some((b) => b.kind === \"field\" && b.required) ? (\n <p className=\"text-sm text-muted-foreground\">\n <span aria-hidden=\"true\">* </span>Required\n </p>\n ) : null}\n </div>\n {form.blocks.map((block) => {\n if (block.kind === \"content\") {\n return block.type === \"heading\" ? (\n <h4 key={block.id} className=\"font-semibold\">\n {block.text}\n </h4>\n ) : (\n <p key={block.id} className=\"text-muted-foreground\">\n {block.text}\n </p>\n );\n }\n if (block.kind === \"field\") return <FieldRow key={block.id} field={block} idPrefix={idPrefix} />;\n return null;\n })}\n <p id={statusId} role=\"status\" aria-live=\"polite\" data-gs-status=\"\" className=\"min-h-6 text-sm font-medium\" />\n <button type=\"submit\" className={cn(buttonVariants({ size: \"lg\" }), \"min-h-11 self-start px-8\")}>\n {submitLabel || \"Send\"}\n </button>\n </form>\n );\n}\n","import { z } from \"zod\";\nimport { BandLead } from \"@marktiderman/genesis-ui/band\";\nimport { cn } from \"@marktiderman/genesis-ui/utils\";\nimport { parseForm } from \"@marktiderman/genesis-forms\";\nimport { Form } from \"@marktiderman/genesis-forms-web\";\nimport type { ResolvedForm } from \"../core/forms\";\nimport { defineSection, type RenderContext } from \"../core/registry\";\nimport { Copy, Line, Surface } from \"../core/schemas\";\nimport { safeJsonForHtml } from \"../core/seo\";\nimport { isSafeHref } from \"../core/urls\";\nimport { siteFormSlots } from \"./form-header\";\nimport { LightForm, isLightForm } from \"./light-form\";\nimport { Anchor, SectionBand, SectionTitle, onAccent, titleId } from \"./shared\";\n\nconst schema = z.object({\n heading: Line(90),\n body: Copy(400).optional(),\n /** The form's slug, which the host's forms resolver knows. */\n form: z.string().regex(/^[a-z0-9][a-z0-9-]{0,79}$/, \"A form slug is lowercase letters, digits and hyphens.\"),\n surface: Surface.default(\"base\"),\n anchor: Anchor.default(\"contact\"),\n});\n\n/**\n * How a resolved form draws: `light` (a plain HTML form the islands loader\n * sends), `island` (forms-web's `<Form>`, made live by the form bundle),\n * `embed` (an iframe), or null (it can't be shown).\n */\nexport function formDrawMode(resolved: ResolvedForm | null | undefined): \"light\" | \"island\" | \"embed\" | null {\n if (!resolved) return null;\n if (resolved.kind === \"embed\") return \"embed\";\n const parsed = parseForm(resolved.definition);\n if (!parsed.ok) return null;\n return isLightForm(parsed.form) ? \"light\" : \"island\";\n}\n\n/** The form itself, from the host's resolver: server-rendered with an island, or an iframe. */\nfunction EmbeddedForm({ slug, heading, ctx }: { slug: string; heading: string; ctx: RenderContext }) {\n const resolved = ctx.forms.get(slug);\n if (!resolved) {\n console.error(`[genesis-sites] the form \"${slug}\" on ${ctx.pagePath} is unknown to the host's forms resolver; the form embed renders nothing.`);\n return ctx.mode === \"preview\" ? (\n <p role=\"status\" className=\"rounded-lg border border-dashed border-border p-6 text-center\">\n The form “{slug}” isn't available. Check its slug, or that the app passes a forms resolver.\n </p>\n ) : null;\n }\n if (resolved.kind === \"embed\") {\n if (!isSafeHref(resolved.url) || !resolved.url.startsWith(\"https://\")) {\n console.error(`[genesis-sites] refused the form embed URL for \"${slug}\": it must be https.`);\n return null;\n }\n return (\n <iframe\n src={resolved.url}\n title={resolved.title || heading}\n loading=\"lazy\"\n referrerPolicy=\"strict-origin-when-cross-origin\"\n sandbox=\"allow-forms allow-scripts allow-same-origin allow-popups\"\n style={{ height: `${Math.min(Math.max(resolved.height ?? 640, 200), 4000)}px` }}\n className=\"w-full rounded-xl border border-border bg-background\"\n />\n );\n }\n const parsed = parseForm(resolved.definition);\n if (!parsed.ok) {\n console.error(`[genesis-sites] the form \"${slug}\" isn't a valid genesis-forms definition: ${parsed.issues.map((i) => `${i.path} ${i.message}`).join(\"; \")}`);\n return null;\n }\n if (!isSafeHref(resolved.submitUrl) || !(resolved.submitUrl.startsWith(\"/\") || resolved.submitUrl.startsWith(\"https://\"))) {\n console.error(`[genesis-sites] the form \"${slug}\" has no usable submitUrl (a site path or an https URL).`);\n return null;\n }\n const submitUrl = resolved.submitUrl.startsWith(\"/\") ? ctx.href(resolved.submitUrl) : resolved.submitUrl;\n if (isLightForm(parsed.form)) {\n // The usual case: a plain HTML form the islands loader sends. No React on the page.\n return (\n <div className=\"rounded-xl border border-border bg-background p-4 text-foreground sm:p-6\">\n <LightForm form={parsed.form} slug={slug} submitUrl={submitUrl} idPrefix={ctx.idPrefix} {...(resolved.submitLabel ? { submitLabel: resolved.submitLabel } : {})} />\n </div>\n );\n }\n return (\n // The island: the islands script loads the form bundle only on pages that have one,\n // reads the definition from the JSON beside it and makes the server-rendered form live.\n <div\n data-gs-island=\"form\"\n data-gs-form={slug}\n data-gs-submit={submitUrl}\n {...(resolved.layout ? { \"data-gs-layout\": resolved.layout } : {})}\n {...(resolved.submitLabel ? { \"data-gs-submit-label\": resolved.submitLabel } : {})}\n className=\"rounded-xl border border-border bg-background p-4 text-foreground sm:p-6\"\n >\n <div data-gs-form-root=\"\">\n <Form form={parsed.form} layout={resolved.layout ?? \"classic\"} presentation=\"embedded\" slots={siteFormSlots} {...(resolved.submitLabel ? { submitLabel: resolved.submitLabel } : {})} />\n </div>\n <script type=\"application/json\" data-gs-form-definition=\"\" dangerouslySetInnerHTML={{ __html: safeJsonForHtml(parsed.form) }} />\n <noscript>\n <p className=\"mt-4 text-sm\">This form needs JavaScript. Turn it on to send it.</p>\n </noscript>\n </div>\n );\n}\n\nexport const formEmbedSection = defineSection({\n type: \"form-embed\",\n version: 1,\n label: \"Form\",\n description: \"A genesis-forms form (by slug, through the app's forms resolver) or a hosted form in a frame.\",\n category: \"conversion\",\n schema,\n variants: [\n { id: \"card\", label: \"Form in a card\" },\n { id: \"split\", label: \"Copy left, form right\" },\n ],\n defaultVariant: \"card\",\n presets: [\n { name: \"Contact form\", variant: \"split\", props: { heading: \"Get in touch\", body: \"Tell us a little about yourself.\", form: \"contact\", anchor: \"contact\" } },\n { name: \"Form card\", variant: \"card\", props: { heading: \"Book a free session\", form: \"contact\", anchor: \"contact\" } },\n ],\n render: ({ props, variant, node, ctx }) => {\n const inverted = onAccent(props.surface);\n const copy = (\n <div className={cn(\"flex flex-col gap-4\", variant === \"card\" && \"items-center text-center\")}>\n <SectionTitle ctx={ctx} id={titleId(ctx)} size=\"lg\">\n {props.heading}\n </SectionTitle>\n {props.body ? <BandLead tone={inverted ? \"inherit\" : \"muted\"}>{props.body}</BandLead> : null}\n </div>\n );\n if (variant === \"split\") {\n return (\n <SectionBand node={node} ctx={ctx} anchor={props.anchor} surface={props.surface}>\n <div className=\"grid gap-10 md:grid-cols-2 md:gap-12\">\n {copy}\n <EmbeddedForm slug={props.form} heading={props.heading} ctx={ctx} />\n </div>\n </SectionBand>\n );\n }\n return (\n <SectionBand node={node} ctx={ctx} anchor={props.anchor} surface={props.surface} width=\"sm\">\n {copy}\n <div className=\"mt-8\">\n <EmbeddedForm slug={props.form} heading={props.heading} ctx={ctx} />\n </div>\n </SectionBand>\n );\n },\n});\n","import { z } from \"zod\";\nimport { defineSection } from \"../core/registry\";\nimport { Copy, Image, Line, Surface } from \"../core/schemas\";\nimport { Anchor, HiddenTitle, SectionBand, SectionIntro, SiteImage, onAccent } from \"./shared\";\n\nconst schema = z.object({\n heading: Line(90).optional(),\n body: Copy(320).optional(),\n images: z.array(Image.extend({ caption: Line(140).optional() })).min(1).max(24),\n surface: Surface.default(\"base\"),\n anchor: Anchor,\n});\n\nexport const gallerySection = defineSection({\n type: \"gallery\",\n version: 1,\n label: \"Gallery\",\n description: \"Photos in an even grid or a masonry layout, each with alt text.\",\n category: \"content\",\n schema,\n variants: [\n { id: \"grid\", label: \"Even grid\" },\n { id: \"masonry\", label: \"Masonry\" },\n ],\n defaultVariant: \"grid\",\n presets: [\n {\n name: \"Photo grid\",\n variant: \"grid\",\n props: { heading: \"Inside\", images: [{ src: \"/photo-1.jpg\", alt: \"Describe the photo\" }, { src: \"/photo-2.jpg\", alt: \"Describe the photo\" }, { src: \"/photo-3.jpg\", alt: \"Describe the photo\" }] },\n },\n ],\n render: ({ props, variant, node, ctx }) => {\n const intro = props.heading ? <SectionIntro ctx={ctx} heading={props.heading} body={props.body} tone={onAccent(props.surface) ? \"inherit\" : \"muted\"} /> : <HiddenTitle ctx={ctx}>Gallery</HiddenTitle>;\n const masonry = variant === \"masonry\";\n return (\n <SectionBand node={node} ctx={ctx} anchor={props.anchor} surface={props.surface}>\n {intro}\n <ul className={masonry ? \"mt-10 columns-1 gap-4 sm:columns-2 lg:columns-3 [&>li]:mb-4 [&>li]:break-inside-avoid\" : \"mt-10 grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\"}>\n {props.images.map((image, i) => (\n <li key={i}>\n <figure className=\"flex flex-col gap-2\">\n <SiteImage\n image={image}\n ctx={ctx}\n sizes=\"(min-width: 1024px) 33vw, (min-width: 640px) 50vw, 100vw\"\n className={masonry ? \"w-full rounded-lg\" : \"aspect-square w-full rounded-lg object-cover\"}\n />\n {image.caption ? <figcaption className=\"text-sm\">{image.caption}</figcaption> : null}\n </figure>\n </li>\n ))}\n </ul>\n </SectionBand>\n );\n },\n});\n","import { z } from \"zod\";\nimport { BandLead } from \"@marktiderman/genesis-ui/band\";\nimport { defineSection } from \"../core/registry\";\nimport { Copy, Image, Line, Link } from \"../core/schemas\";\nimport { Actions, Anchor, SectionBand, SectionTitle, SiteImage, titleId } from \"./shared\";\n\nconst schema = z.object({\n eyebrow: Line(60).optional(),\n heading: Line(90),\n body: Copy(320).optional(),\n primaryCta: Link.optional(),\n secondaryCta: Link.optional(),\n image: Image.optional(),\n anchor: Anchor,\n});\n\nexport const heroSection = defineSection({\n type: \"hero\",\n version: 1,\n label: \"Hero\",\n description: \"The page's opening: its main heading, a line of copy and up to two buttons.\",\n category: \"intro\",\n limit: 1,\n providesH1: true,\n schema,\n variants: [\n { id: \"centered\", label: \"Centred\" },\n { id: \"split\", label: \"Text and image side by side\" },\n { id: \"image-bg\", label: \"Text over an image\" },\n ],\n defaultVariant: \"centered\",\n presets: [\n {\n name: \"Centred hero\",\n variant: \"centered\",\n props: { heading: \"Say what you do, for whom\", body: \"One or two sentences on why it matters.\", primaryCta: { label: \"Get started\", href: \"#contact\" } },\n },\n {\n name: \"Hero with image\",\n variant: \"split\",\n props: { heading: \"Say what you do, for whom\", body: \"One or two sentences on why it matters.\", primaryCta: { label: \"Get started\", href: \"#contact\" } },\n },\n ],\n render: ({ props, variant, node, ctx }) => {\n const intro = (align: \"center\" | \"left\", tone: \"muted\" | \"inherit\" = \"muted\") => (\n <div className={align === \"center\" ? \"mx-auto flex max-w-3xl flex-col items-center gap-6 text-center\" : \"flex flex-col items-start gap-6\"}>\n {props.eyebrow ? <p className=\"text-sm font-semibold uppercase tracking-wider\">{props.eyebrow}</p> : null}\n <SectionTitle ctx={ctx} id={titleId(ctx)} size=\"xl\">\n {props.heading}\n </SectionTitle>\n {props.body ? <BandLead tone={tone}>{props.body}</BandLead> : null}\n <Actions primary={props.primaryCta} secondary={props.secondaryCta} ctx={ctx} onAccent={tone === \"inherit\"} className={align === \"center\" ? \"sm:justify-center\" : undefined} />\n </div>\n );\n\n if (variant === \"image-bg\" && props.image) {\n return (\n <SectionBand node={node} ctx={ctx} anchor={props.anchor} surface=\"inverse\" spacing=\"lg\" className=\"isolate overflow-hidden\">\n <SiteImage image={{ ...props.image, decorative: true }} ctx={ctx} priority sizes=\"100vw\" className=\"absolute inset-0 -z-10 h-full w-full object-cover\" />\n {/* A scrim in the inverse band's own colour keeps the text at the band's contrast whatever the image. */}\n <div aria-hidden=\"true\" className=\"absolute inset-0 -z-10 bg-foreground/80\" />\n {intro(\"center\", \"inherit\")}\n </SectionBand>\n );\n }\n if (variant === \"split\") {\n return (\n <SectionBand node={node} ctx={ctx} anchor={props.anchor} spacing=\"lg\">\n <div className=\"grid items-center gap-10 md:grid-cols-2 md:gap-12\">\n {intro(\"left\")}\n {props.image ? (\n <SiteImage image={props.image} ctx={ctx} priority sizes=\"(min-width: 768px) 50vw, 100vw\" className=\"aspect-[4/3] w-full rounded-xl object-cover\" />\n ) : (\n <div aria-hidden=\"true\" className=\"hidden aspect-[4/3] w-full rounded-xl bg-muted md:block\" />\n )}\n </div>\n </SectionBand>\n );\n }\n return (\n <SectionBand node={node} ctx={ctx} anchor={props.anchor} spacing=\"lg\">\n {intro(\"center\")}\n </SectionBand>\n );\n },\n});\n","import { z } from \"zod\";\nimport { cn } from \"@marktiderman/genesis-ui/utils\";\nimport { defineSection } from \"../core/registry\";\nimport { Href, Image, Line, Surface } from \"../core/schemas\";\nimport { Anchor, HiddenTitle, SectionBand, SectionIntro, SiteImage, onAccent, resolveHref } from \"./shared\";\n\nconst schema = z.object({\n heading: Line(90).optional(),\n items: z\n .array(\n z.object({\n /** The organisation's name: the logo's alt text when the logo has none. */\n name: Line(80),\n image: Image,\n href: Href.optional(),\n }),\n )\n .min(1)\n .max(24),\n surface: Surface.default(\"base\"),\n anchor: Anchor,\n});\n\nexport const logosSection = defineSection({\n type: \"logos\",\n version: 1,\n label: \"Logos\",\n description: \"Partners, clients or press, as a row or grid of logos.\",\n category: \"social-proof\",\n schema,\n variants: [\n { id: \"row\", label: \"One row\" },\n { id: \"grid\", label: \"Grid\" },\n ],\n defaultVariant: \"row\",\n presets: [\n {\n name: \"Logo row\",\n variant: \"row\",\n props: { heading: \"Trusted by\", items: [{ name: \"Partner\", image: { src: \"/logo-partner.svg\", alt: \"Partner\" } }] },\n },\n ],\n render: ({ props, variant, node, ctx }) => {\n const intro = props.heading ? <SectionIntro ctx={ctx} heading={props.heading} size=\"md\" tone={onAccent(props.surface) ? \"inherit\" : \"muted\"} /> : <HiddenTitle ctx={ctx}>Logos</HiddenTitle>;\n return (\n <SectionBand node={node} ctx={ctx} anchor={props.anchor} surface={props.surface} spacing=\"sm\">\n {intro}\n <ul className={cn(\"items-center\", props.heading && \"mt-8\", variant === \"grid\" ? \"grid grid-cols-2 gap-8 sm:grid-cols-3 lg:grid-cols-4\" : \"flex flex-wrap justify-center gap-x-10 gap-y-6\")}>\n {props.items.map((item, i) => {\n const img = <SiteImage image={{ ...item.image, alt: item.image.alt || item.name, decorative: false }} ctx={ctx} sizes=\"160px\" className=\"mx-auto h-10 w-auto max-w-40 object-contain\" />;\n return (\n <li key={i} className=\"flex justify-center\">\n {item.href ? (\n <a href={resolveHref(item.href, ctx)} className=\"inline-flex min-h-11 items-center rounded-md focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\">\n {img}\n </a>\n ) : (\n img\n )}\n </li>\n );\n })}\n </ul>\n </SectionBand>\n );\n },\n});\n","import { z } from \"zod\";\nimport { Band } from \"@marktiderman/genesis-ui/band\";\nimport { cn } from \"@marktiderman/genesis-ui/utils\";\nimport { Menu } from \"lucide-react\";\nimport { defineSection, type RenderContext } from \"../core/registry\";\nimport { Image, Link, type MenuItem } from \"../core/schemas\";\nimport { ButtonLink, SiteImage, bandAttrs, resolveHref } from \"./shared\";\n\nconst schema = z.object({\n /** Replaces the brand's logo in the header. */\n logo: Image.optional(),\n /** Show the site's name beside the logo (always shown when there is no logo). */\n showName: z.boolean().default(true),\n cta: Link.optional(),\n});\ntype NavProps = z.output<typeof schema>;\n\nfunction isCurrent(item: MenuItem, ctx: RenderContext): boolean {\n return item.href === ctx.pagePath;\n}\n\nfunction Brand({ props, ctx }: { props: NavProps; ctx: RenderContext }) {\n const logo = props.logo ?? (ctx.site.logo ? { src: ctx.site.logo.src, alt: ctx.site.logo.alt, decorative: false } : undefined);\n const showName = props.showName || !logo;\n return (\n <a\n href={ctx.href(\"/\")}\n className=\"inline-flex min-h-11 items-center gap-3 rounded-md font-display text-lg font-bold tracking-tight focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\"\n >\n {logo ? <SiteImage image={{ ...logo, alt: showName ? \"\" : logo.alt || ctx.site.name, decorative: showName }} ctx={ctx} priority className=\"h-8 w-auto\" /> : null}\n {showName ? <span>{ctx.site.name}</span> : null}\n <span className=\"sr-only\">, home</span>\n </a>\n );\n}\n\nfunction Items({ ctx, className, itemClassName }: { ctx: RenderContext; className?: string; itemClassName?: string }) {\n return (\n <ul className={className}>\n {ctx.site.nav.map((item) => (\n <li key={`${item.label}-${item.href}`}>\n <a\n href={resolveHref(item.href, ctx)}\n {...(isCurrent(item, ctx) ? { \"aria-current\": \"page\" as const } : {})}\n className={cn(\n \"inline-flex min-h-11 items-center rounded-md px-3 text-sm font-medium hover:bg-muted focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring aria-[current=page]:underline aria-[current=page]:underline-offset-8\",\n itemClassName,\n )}\n >\n {item.label}\n </a>\n </li>\n ))}\n </ul>\n );\n}\n\nfunction NavSection({ props, variant, node, ctx }: { props: NavProps; variant: string; node: Parameters<typeof bandAttrs>[0]; ctx: RenderContext }) {\n const attrs = bandAttrs(node, ctx, undefined, false);\n const hasMenu = variant !== \"minimal\" && ctx.site.nav.length > 0;\n const centered = variant === \"centered\";\n return (\n <Band {...attrs} as=\"header\" spacing=\"none\" className={cn(\"border-b border-border\", attrs.className as string | undefined)}>\n <div className={cn(\"relative flex min-h-16 flex-wrap items-center justify-between gap-x-4 gap-y-2 py-2\", centered && \"md:flex-col md:justify-center md:py-4\")}>\n <Brand props={props} ctx={ctx} />\n {hasMenu ? (\n <nav aria-label=\"Main\" className={cn(\"flex items-center gap-2\", centered && \"md:w-full md:justify-center\")}>\n <Items ctx={ctx} className=\"hidden items-center gap-1 md:flex\" />\n {props.cta ? <ButtonLink link={props.cta} ctx={ctx} className=\"hidden md:inline-flex\" /> : null}\n {/* Phones: a disclosure that works without script; the islands script closes it on Escape and on a link. */}\n <details className=\"group md:hidden\" data-gs-island=\"menu\">\n <summary className=\"flex min-h-11 min-w-11 cursor-pointer list-none items-center justify-center rounded-md border border-border focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring [&::-webkit-details-marker]:hidden\">\n <Menu aria-hidden=\"true\" className=\"size-5\" />\n <span className=\"sr-only\">Menu</span>\n </summary>\n <div className=\"absolute inset-x-0 top-full z-50 border-b border-border bg-background px-4 pb-4 shadow-lg\">\n <Items ctx={ctx} className=\"flex flex-col py-2\" itemClassName=\"w-full\" />\n {props.cta ? <ButtonLink link={props.cta} ctx={ctx} className=\"w-full\" /> : null}\n </div>\n </details>\n </nav>\n ) : props.cta ? (\n <ButtonLink link={props.cta} ctx={ctx} />\n ) : null}\n </div>\n </Band>\n );\n}\n\nexport const navSection = defineSection({\n type: \"nav\",\n version: 1,\n label: \"Navigation\",\n description: \"The site's header: logo, menu and a button. On phones the menu folds into a button.\",\n category: \"header\",\n placement: \"header\",\n limit: 1,\n schema,\n variants: [\n { id: \"simple\", label: \"Logo left, menu right\" },\n { id: \"centered\", label: \"Logo centred, menu below\" },\n { id: \"minimal\", label: \"Logo and button only\" },\n ],\n defaultVariant: \"simple\",\n presets: [\n { name: \"Header with menu\", variant: \"simple\", props: { showName: true, cta: { label: \"Get started\", href: \"#contact\" } } },\n { name: \"Centred header\", variant: \"centered\", props: { showName: true } },\n { name: \"Landing page header\", variant: \"minimal\", props: { showName: true, cta: { label: \"Get started\", href: \"#contact\" } } },\n ],\n render: (input) => <NavSection {...input} />,\n});\n","import { z } from \"zod\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"@marktiderman/genesis-ui/utils\";\nimport { defineSection } from \"../core/registry\";\nimport { Copy, Line, Link, Surface } from \"../core/schemas\";\nimport { Anchor, ButtonLink, ItemTitle, SectionBand, SectionIntro, onAccent } from \"./shared\";\n\nconst Tier = z.object({\n name: Line(40),\n price: Line(20),\n /** \"per month\", \"per session\". */\n period: Line(30).optional(),\n description: Copy(200).optional(),\n features: z.array(Line(100)).max(12).default([]),\n cta: Link.optional(),\n highlighted: z.boolean().optional(),\n});\n\nconst schema = z.object({\n heading: Line(90),\n body: Copy(320).optional(),\n tiers: z.array(Tier).min(1).max(4),\n note: Copy(300).optional(),\n surface: Surface.default(\"base\"),\n anchor: Anchor,\n});\n\nconst COLS = { 1: \"max-w-md mx-auto\", 2: \"md:grid-cols-2 max-w-4xl mx-auto\", 3: \"md:grid-cols-3\", 4: \"md:grid-cols-2 lg:grid-cols-4\" } as const;\n\nexport const pricingSection = defineSection({\n type: \"pricing\",\n version: 1,\n label: \"Pricing\",\n description: \"Up to four plans with a price, what's included and a button.\",\n category: \"conversion\",\n schema,\n variants: [\n { id: \"cards\", label: \"Plan cards\" },\n { id: \"compact\", label: \"Compact list\" },\n ],\n defaultVariant: \"cards\",\n presets: [\n {\n name: \"Three plans\",\n variant: \"cards\",\n props: {\n heading: \"Plans\",\n tiers: [\n { name: \"Starter\", price: \"$29\", period: \"per month\", features: [\"One thing\", \"Another thing\"], cta: { label: \"Choose Starter\", href: \"#contact\" } },\n { name: \"Regular\", price: \"$59\", period: \"per month\", features: [\"Everything in Starter\", \"More\"], cta: { label: \"Choose Regular\", href: \"#contact\" }, highlighted: true },\n { name: \"Unlimited\", price: \"$99\", period: \"per month\", features: [\"Everything\", \"Most\"], cta: { label: \"Choose Unlimited\", href: \"#contact\" } },\n ],\n },\n },\n ],\n render: ({ props, variant, node, ctx }) => {\n const inverted = onAccent(props.surface);\n const intro = <SectionIntro ctx={ctx} heading={props.heading} body={props.body} tone={inverted ? \"inherit\" : \"muted\"} />;\n const note = props.note ? <p className={cn(\"mt-8 text-center text-sm\", !inverted && \"text-muted-foreground\")}>{props.note}</p> : null;\n\n if (variant === \"compact\") {\n return (\n <SectionBand node={node} ctx={ctx} anchor={props.anchor} surface={props.surface} width=\"md\">\n {intro}\n <ul className=\"mx-auto mt-10 flex max-w-3xl flex-col divide-y divide-border rounded-xl border border-border bg-background text-foreground\">\n {props.tiers.map((tier, i) => (\n <li key={i} className=\"flex flex-col gap-4 p-6 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"flex flex-col gap-1\">\n <ItemTitle ctx={ctx}>{tier.name}</ItemTitle>\n {tier.description ? <p className=\"text-sm text-muted-foreground\">{tier.description}</p> : null}\n </div>\n <div className=\"flex items-center gap-4\">\n <p>\n <span className=\"font-display text-2xl font-bold\">{tier.price}</span>\n {tier.period ? <span className=\"text-sm text-muted-foreground\"> {tier.period}</span> : null}\n </p>\n {tier.cta ? <ButtonLink link={tier.cta} ctx={ctx} tone={tier.highlighted ? \"primary\" : \"outline\"} /> : null}\n </div>\n </li>\n ))}\n </ul>\n {note}\n </SectionBand>\n );\n }\n return (\n <SectionBand node={node} ctx={ctx} anchor={props.anchor} surface={props.surface}>\n {intro}\n <ul className={cn(\"mt-12 grid gap-6\", COLS[props.tiers.length as 1 | 2 | 3 | 4])}>\n {props.tiers.map((tier, i) => (\n <li\n key={i}\n className={cn(\n \"flex flex-col gap-6 rounded-2xl border bg-background p-8 text-foreground\",\n tier.highlighted ? \"border-2 border-primary shadow-lg\" : \"border-border\",\n )}\n >\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <ItemTitle ctx={ctx}>{tier.name}</ItemTitle>\n {tier.highlighted ? <span className=\"rounded-full bg-primary px-3 py-1 text-xs font-semibold text-primary-foreground\">Most popular</span> : null}\n </div>\n {tier.description ? <p className=\"text-sm text-muted-foreground\">{tier.description}</p> : null}\n </div>\n <p>\n <span className=\"font-display text-4xl font-bold\">{tier.price}</span>\n {tier.period ? <span className=\"text-muted-foreground\"> {tier.period}</span> : null}\n </p>\n {tier.features.length ? (\n <ul className=\"flex flex-col gap-3\">\n {tier.features.map((f, j) => (\n <li key={j} className=\"flex gap-3\">\n <Check aria-hidden=\"true\" className=\"mt-0.5 size-5 shrink-0\" />\n <span>{f}</span>\n </li>\n ))}\n </ul>\n ) : null}\n {tier.cta ? <ButtonLink link={tier.cta} ctx={ctx} tone={tier.highlighted ? \"primary\" : \"outline\"} className=\"mt-auto w-full\" /> : null}\n </li>\n ))}\n </ul>\n {note}\n </SectionBand>\n );\n },\n});\n","import { z } from \"zod\";\nimport { RichText as RichTextView, richTextClassName, type RichTextDoc } from \"@marktiderman/genesis-ui/rich-text\";\nimport { cn } from \"@marktiderman/genesis-ui/utils\";\nimport { defineSection } from \"../core/registry\";\nimport { Line, RichText, Surface } from \"../core/schemas\";\nimport { Anchor, SectionBand, SectionIntro, onAccent } from \"./shared\";\n\nconst schema = z.object({\n heading: Line(90).optional(),\n body: RichText,\n surface: Surface.default(\"base\"),\n anchor: Anchor,\n});\n\nexport const richTextSection = defineSection({\n type: \"rich-text\",\n version: 1,\n label: \"Text\",\n description: \"Long copy with headings, lists, links and quotes. Sanitised when it renders.\",\n category: \"content\",\n schema,\n variants: [\n { id: \"narrow\", label: \"Reading width\" },\n { id: \"wide\", label: \"Wide\" },\n ],\n defaultVariant: \"narrow\",\n presets: [\n {\n name: \"Text\",\n variant: \"narrow\",\n props: {\n body: {\n type: \"doc\",\n content: [\n { type: \"heading\", attrs: { level: 2 }, content: [{ type: \"text\", text: \"A heading\" }] },\n { type: \"paragraph\", content: [{ type: \"text\", text: \"Write here.\" }] },\n ],\n },\n },\n },\n ],\n render: ({ props, variant, node, ctx }) => {\n // Without a title of its own the band is a plain block of copy, not a named region.\n const intro = props.heading ? <SectionIntro ctx={ctx} heading={props.heading} align=\"left\" tone={onAccent(props.surface) ? \"inherit\" : \"muted\"} /> : null;\n return (\n <SectionBand node={node} ctx={ctx} anchor={props.anchor} surface={props.surface} width={variant === \"wide\" ? \"lg\" : \"prose\"} labelled={Boolean(props.heading)}>\n {intro}\n {/* genesis-ui's RichText sanitizes the document (links, embeds) and never sets raw HTML. */}\n <RichTextView\n value={props.body as unknown as RichTextDoc}\n headingLevels={props.heading ? [3, 4] : [2, 3, 4]}\n className={cn(richTextClassName, \"text-base sm:text-lg [&_h2]:font-display [&_h2]:text-2xl [&_h3]:font-display [&_h3]:text-xl\", props.heading && \"mt-6\")}\n />\n </SectionBand>\n );\n },\n});\n","import { z } from \"zod\";\nimport { cn } from \"@marktiderman/genesis-ui/utils\";\nimport { defineSection } from \"../core/registry\";\nimport { Copy, Line, Surface } from \"../core/schemas\";\nimport { Anchor, HiddenTitle, SectionBand, SectionIntro, onAccent } from \"./shared\";\n\nconst schema = z.object({\n heading: Line(90).optional(),\n body: Copy(320).optional(),\n items: z\n .array(z.object({ value: Line(16), label: Line(60) }))\n .min(1)\n .max(6),\n surface: Surface.default(\"muted\"),\n anchor: Anchor,\n});\n\nconst COLS = { 1: \"\", 2: \"sm:grid-cols-2\", 3: \"sm:grid-cols-3\", 4: \"sm:grid-cols-2 lg:grid-cols-4\", 5: \"sm:grid-cols-3 lg:grid-cols-5\", 6: \"sm:grid-cols-3 lg:grid-cols-6\" } as const;\n\nexport const statsSection = defineSection({\n type: \"stats\",\n version: 1,\n label: \"Stats\",\n description: \"A few numbers that matter, each with a label.\",\n category: \"social-proof\",\n schema,\n variants: [\n { id: \"row\", label: \"In a row\" },\n { id: \"cards\", label: \"Cards\" },\n ],\n defaultVariant: \"row\",\n presets: [\n {\n name: \"Three numbers\",\n variant: \"row\",\n props: { items: [{ value: \"12\", label: \"years open\" }, { value: \"40+\", label: \"classes a week\" }, { value: \"6\", label: \"coaches\" }] },\n },\n ],\n render: ({ props, variant, node, ctx }) => {\n const inverted = onAccent(props.surface);\n const intro = props.heading ? <SectionIntro ctx={ctx} heading={props.heading} body={props.body} tone={inverted ? \"inherit\" : \"muted\"} /> : <HiddenTitle ctx={ctx}>In numbers</HiddenTitle>;\n const cards = variant === \"cards\";\n return (\n <SectionBand node={node} ctx={ctx} anchor={props.anchor} surface={props.surface}>\n {intro}\n <dl className={cn(\"grid gap-6 text-center\", COLS[props.items.length as 1 | 2 | 3 | 4 | 5 | 6], props.heading && \"mt-10\")}>\n {props.items.map((item, i) => (\n <div key={i} className={cn(\"flex flex-col-reverse gap-1\", cards && \"rounded-xl border border-border bg-background p-6 text-foreground\")}>\n <dt className={cn(\"text-sm font-medium\", !inverted || cards ? \"text-muted-foreground\" : undefined)}>{item.label}</dt>\n <dd className=\"font-display text-4xl font-bold tracking-tight sm:text-5xl\">{item.value}</dd>\n </div>\n ))}\n </dl>\n </SectionBand>\n );\n },\n});\n","import { z } from \"zod\";\nimport { cn } from \"@marktiderman/genesis-ui/utils\";\nimport { defineSection } from \"../core/registry\";\nimport { Copy, Image, Line, Surface } from \"../core/schemas\";\nimport { Anchor, HiddenTitle, SectionBand, SectionIntro, SiteImage, onAccent } from \"./shared\";\n\nconst Quote = z.object({\n quote: Copy(500).min(1),\n name: Line(80),\n role: Line(80).optional(),\n avatar: Image.optional(),\n});\n\nconst schema = z.object({\n heading: Line(90).optional(),\n body: Copy(320).optional(),\n items: z.array(Quote).min(1).max(12),\n surface: Surface.default(\"muted\"),\n anchor: Anchor,\n});\n\nexport const testimonialsSection = defineSection({\n type: \"testimonials\",\n version: 1,\n label: \"Testimonials\",\n description: \"Quotes from real people, with their permission.\",\n category: \"social-proof\",\n schema,\n variants: [\n { id: \"grid\", label: \"Quotes in a grid\" },\n { id: \"single\", label: \"One large quote\" },\n ],\n defaultVariant: \"grid\",\n presets: [\n { name: \"Quotes\", variant: \"grid\", props: { heading: \"What people say\", items: [{ quote: \"A quote, in their words.\", name: \"Their name\" }] } },\n { name: \"One quote\", variant: \"single\", props: { items: [{ quote: \"A quote, in their words.\", name: \"Their name\", role: \"Who they are\" }] } },\n ],\n render: ({ props, variant, node, ctx }) => {\n const inverted = onAccent(props.surface);\n const muted = inverted ? undefined : \"text-muted-foreground\";\n const person = (item: z.output<typeof Quote>, large = false) => (\n <figcaption className=\"flex items-center gap-3\">\n {item.avatar ? <SiteImage image={item.avatar} ctx={ctx} sizes=\"48px\" className={cn(\"rounded-full object-cover\", large ? \"size-14\" : \"size-11\")} /> : null}\n <span className=\"flex flex-col text-left\">\n <span className=\"font-semibold\">{item.name}</span>\n {item.role ? <span className={cn(\"text-sm\", muted)}>{item.role}</span> : null}\n </span>\n </figcaption>\n );\n const intro = props.heading ? <SectionIntro ctx={ctx} heading={props.heading} body={props.body} tone={inverted ? \"inherit\" : \"muted\"} /> : <HiddenTitle ctx={ctx}>Testimonials</HiddenTitle>;\n\n if (variant === \"single\") {\n const item = props.items[0]!;\n return (\n <SectionBand node={node} ctx={ctx} anchor={props.anchor} surface={props.surface} width=\"md\">\n {intro}\n <figure className={cn(\"mx-auto flex max-w-3xl flex-col items-center gap-8 text-center\", props.heading && \"mt-10\")}>\n <blockquote className=\"font-display text-2xl font-medium leading-snug text-balance sm:text-3xl\">\n <p>“{item.quote}”</p>\n </blockquote>\n {person(item, true)}\n </figure>\n </SectionBand>\n );\n }\n return (\n <SectionBand node={node} ctx={ctx} anchor={props.anchor} surface={props.surface}>\n {intro}\n <ul className={cn(\"grid gap-6 sm:grid-cols-2 lg:grid-cols-3\", props.heading && \"mt-12\")}>\n {props.items.map((item, i) => (\n <li key={i}>\n <figure className=\"flex h-full flex-col justify-between gap-6 rounded-xl border border-border bg-background p-6 text-foreground\">\n <blockquote className=\"leading-relaxed\">\n <p>“{item.quote}”</p>\n </blockquote>\n {person(item)}\n </figure>\n </li>\n ))}\n </ul>\n </SectionBand>\n );\n },\n});\n","/**\n * @marktiderman/genesis-sites/sections: the built-in section catalog.\n *\n * Importing this module registers the 13 built-in sections (unless a host\n * registered a replacement first, with `{ replace: true }`). Each is\n * server-safe React on genesis-ui's `Band` and `Display`, mobile first, with\n * 2–4 variants and presets for the editor's Add picker.\n *\n * @packageDocumentation\n */\nimport { registerBuiltInSection, type AnySectionDefinition } from \"../core/registry\";\nimport { ctaSection } from \"./cta\";\nimport { faqSection } from \"./faq\";\nimport { featuresSection } from \"./features\";\nimport { footerSection } from \"./footer\";\nimport { formEmbedSection } from \"./form-embed\";\nimport { gallerySection } from \"./gallery\";\nimport { heroSection } from \"./hero\";\nimport { logosSection } from \"./logos\";\nimport { navSection } from \"./nav\";\nimport { pricingSection } from \"./pricing\";\nimport { richTextSection } from \"./rich-text\";\nimport { statsSection } from \"./stats\";\nimport { testimonialsSection } from \"./testimonials\";\n\n/** The built-in sections, in the editor's order. */\nexport const builtInSections: readonly AnySectionDefinition[] = Object.freeze([\n navSection,\n heroSection,\n featuresSection,\n ctaSection,\n testimonialsSection,\n faqSection,\n pricingSection,\n logosSection,\n statsSection,\n gallerySection,\n richTextSection,\n formEmbedSection,\n footerSection,\n] as AnySectionDefinition[]);\n\nfor (const def of builtInSections) registerBuiltInSection(def);\n\nexport {\n ctaSection,\n faqSection,\n featuresSection,\n footerSection,\n formEmbedSection,\n gallerySection,\n heroSection,\n logosSection,\n navSection,\n pricingSection,\n richTextSection,\n statsSection,\n testimonialsSection,\n};\nexport { ICONS, IconName, Anchor, ButtonLink, TextLink, SiteImage, SectionBand, SectionIntro, SectionTitle, ItemTitle, HiddenTitle, resolveHref, titleId } from \"./shared\";\nexport { SiteFormHeader, siteFormSlots } from \"./form-header\";\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/migrate.ts","../src/core/theme.ts","../src/core/a11y.ts","../src/core/store.ts"],"names":["p"],"mappings":"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","file":"chunk-GA7U3CIN.js","sourcesContent":["/**\n * Props migrations. A section node records the props version it was written\n * at (`v`); its definition declares the current `version` and a pure\n * function per step. `migrateNode` runs `migrations[v + 1 .. version]` and\n * checks the result against the section's schema. The editor and the\n * renderer both read through it, and a publish writes the migrated props\n * into the release, so old drafts keep working after a section changes.\n */\nimport type { PageDoc, SectionNode, SiteDoc } from \"./schemas\";\nimport { getSection, type AnySectionDefinition } from \"./registry\";\n\nexport interface MigrationIssue {\n severity: \"error\" | \"warning\";\n code: \"unknown-section\" | \"newer-version\" | \"migration-failed\" | \"invalid-props\" | \"unknown-variant\";\n sectionId: string;\n type: string;\n message: string;\n}\n\nexport interface MigratedNode {\n /** The node at the current version with parsed props, or null when it can't be rendered. */\n node: (SectionNode & { variant: string }) | null;\n /** Whether anything changed (the version, the props or the variant). */\n changed: boolean;\n issues: MigrationIssue[];\n}\n\n/** Bring one node up to its section's current version and check its props. */\nexport function migrateNode(node: SectionNode, lookup: (type: string) => AnySectionDefinition | undefined = getSection): MigratedNode {\n const def = lookup(node.type);\n const where = { sectionId: node.id, type: node.type };\n if (!def) {\n return {\n node: null,\n changed: false,\n issues: [{ ...where, severity: \"error\", code: \"unknown-section\", message: `No section \"${node.type}\" is registered; section ${node.id} can't be shown.` }],\n };\n }\n if (node.v > def.version) {\n return {\n node: null,\n changed: false,\n issues: [\n {\n ...where,\n severity: \"error\",\n code: \"newer-version\",\n message: `Section ${node.id} was saved by a newer \"${node.type}\" (v${node.v}) than this code knows (v${def.version}).`,\n },\n ],\n };\n }\n let props: Record<string, unknown> = node.props;\n for (let n = node.v + 1; n <= def.version; n++) {\n const step = def.migrations?.[n];\n try {\n props = step ? step(structuredClone(props)) : props;\n } catch (err) {\n return {\n node: null,\n changed: false,\n issues: [{ ...where, severity: \"error\", code: \"migration-failed\", message: `Migrating section ${node.id} to v${n} failed: ${(err as Error).message}` }],\n };\n }\n }\n const parsed = def.schema.safeParse(props);\n if (!parsed.success) {\n return {\n node: null,\n changed: false,\n issues: [\n {\n ...where,\n severity: \"error\",\n code: \"invalid-props\",\n message: `Section ${node.id} (${def.label}): ${parsed.error.issues.map((i) => `${i.path.join(\".\") || \"props\"}: ${i.message}`).join(\"; \")}`,\n },\n ],\n };\n }\n const issues: MigrationIssue[] = [];\n let variant = node.variant ?? def.defaultVariant;\n if (!def.variants.some((v) => v.id === variant)) {\n issues.push({ ...where, severity: \"warning\", code: \"unknown-variant\", message: `Section ${node.id} asks for variant \"${variant}\", which \"${node.type}\" doesn't have; showing \"${def.defaultVariant}\".` });\n variant = def.defaultVariant;\n }\n const next = { ...node, v: def.version, variant, props: parsed.data as Record<string, unknown> };\n const changed = node.v !== def.version || variant !== node.variant || JSON.stringify(parsed.data) !== JSON.stringify(node.props);\n return { node: next, changed, issues };\n}\n\nexport interface MigratedPage {\n doc: PageDoc;\n changed: boolean;\n issues: MigrationIssue[];\n}\n\n/**\n * Migrate every node of a page. Nodes that can't be shown stay in the\n * document unchanged (an editor must not lose them) and are reported.\n */\nexport function migratePage(doc: PageDoc, lookup?: (type: string) => AnySectionDefinition | undefined): MigratedPage {\n const issues: MigrationIssue[] = [];\n let changed = false;\n const content = doc.content.map((node) => {\n const m = migrateNode(node, lookup);\n issues.push(...m.issues);\n if (m.node && m.changed) changed = true;\n return m.node ?? node;\n });\n return { doc: changed ? { ...doc, content } : doc, changed, issues };\n}\n\nexport function migrateSite(site: SiteDoc, lookup?: (type: string) => AnySectionDefinition | undefined): { site: SiteDoc; changed: boolean; issues: MigrationIssue[] } {\n const issues: MigrationIssue[] = [];\n let changed = false;\n const run = (nodes: SectionNode[]) =>\n nodes.map((node) => {\n const m = migrateNode(node, lookup);\n issues.push(...m.issues);\n if (m.node && m.changed) changed = true;\n return m.node ?? node;\n });\n const header = run(site.header);\n const footer = run(site.footer);\n return { site: changed ? { ...site, header, footer } : site, changed, issues };\n}\n","/**\n * A site's theme, from its brand: one `<style>` of CSS variables per site.\n *\n * The brand comes from the host (`BrandSource`) at render time, never copied\n * into the site. A publish checks the brand's colours and records its hash;\n * a page rendered with a different brand (edited since) is served with a\n * short cache and a warning until the site is published again, which checks\n * the new colours and purges the old pages. It\n * may be a full `CanonicalBrand` or the minimal shape a brand screen collects\n * (`SiteBrand`: a name, a primary colour for light and dark, a heading and a\n * body font from a fixed list, a logo).\n *\n * The variables are design-system `themeFromBrand(brand).variables` (the\n * brand's scales, `--color-*`) plus the genesis-ui roles the sections are\n * styled with (`--primary`, `--background`, `--font-display`, ...), so the\n * one shared stylesheet serves every brand. Foregrounds are picked for\n * contrast: the text on a primary button is whichever of the brand's light\n * or dark text reads better, and the focus ring falls back to the text\n * colour when the primary is too faint on the page.\n */\nimport { genesisBrand, themeFromBrand, type CanonicalBrand } from \"@marktiderman/genesis-design-system\";\nimport type { FontChoice, SiteDoc, TokenOverrides } from \"./schemas\";\n\n/** The minimal brand: what a brand screen collects. */\nexport interface SiteBrand {\n name: string;\n colors: {\n /** The primary colour in light mode, as #rrggbb. */\n primary: string;\n /** The primary in dark mode. Default: the light primary, lightened. */\n primaryDark?: string;\n };\n fonts?: { heading?: FontChoice; body?: FontChoice };\n /** The logo, shown in the header and footer and named in JSON-LD. */\n logo?: { src: string; alt?: string };\n}\n\n/** What a `BrandSource` may return: the minimal brand, or a full design-system brand (with an optional logo). */\nexport type BrandInput = SiteBrand | (CanonicalBrand & { logo?: { src: string; alt?: string }; displayName?: string });\n\n/** The host's brand, read at render time. */\nexport interface BrandSource {\n getBrand(siteId: string): Promise<BrandInput | null> | BrandInput | null;\n}\n\nexport interface FontInfo {\n label: string;\n /** The CSS font stack. */\n stack: string;\n /** The Google Fonts `family=` value, when it isn't a system font. */\n google?: string;\n}\n\n/** The fonts a brand or site may choose. */\nexport const FONT_CHOICES: Readonly<Record<FontChoice, FontInfo>> = Object.freeze({\n system: { label: \"System\", stack: 'ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif' },\n inter: { label: \"Inter\", stack: \"Inter, ui-sans-serif, system-ui, sans-serif\", google: \"Inter:wght@400;500;600;700\" },\n \"dm-sans\": { label: \"DM Sans\", stack: '\"DM Sans\", ui-sans-serif, system-ui, sans-serif', google: \"DM+Sans:wght@400;500;700\" },\n \"work-sans\": { label: \"Work Sans\", stack: '\"Work Sans\", ui-sans-serif, system-ui, sans-serif', google: \"Work+Sans:wght@400;500;700\" },\n montserrat: { label: \"Montserrat\", stack: \"Montserrat, ui-sans-serif, system-ui, sans-serif\", google: \"Montserrat:wght@400;600;700\" },\n poppins: { label: \"Poppins\", stack: \"Poppins, ui-sans-serif, system-ui, sans-serif\", google: \"Poppins:wght@400;600;700\" },\n \"space-grotesk\": { label: \"Space Grotesk\", stack: '\"Space Grotesk\", ui-sans-serif, system-ui, sans-serif', google: \"Space+Grotesk:wght@400;500;700\" },\n \"source-serif\": { label: \"Source Serif\", stack: '\"Source Serif 4\", Georgia, serif', google: \"Source+Serif+4:wght@400;600;700\" },\n merriweather: { label: \"Merriweather\", stack: \"Merriweather, Georgia, serif\", google: \"Merriweather:wght@400;700\" },\n \"playfair-display\": { label: \"Playfair Display\", stack: '\"Playfair Display\", Georgia, serif', google: \"Playfair+Display:wght@400;600;700\" },\n lora: { label: \"Lora\", stack: \"Lora, Georgia, serif\", google: \"Lora:wght@400;600;700\" },\n});\n\nconst RADIUS: Record<NonNullable<TokenOverrides[\"radius\"]>, string> = { none: \"0rem\", sm: \"0.25rem\", md: \"0.5rem\", lg: \"0.75rem\", full: \"1.25rem\" };\n\n// ── Colour maths ────────────────────────────────────────────────────────────\n\nconst HEX = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i;\n\n/** `#abc` / `#aabbcc` → [r, g, b] (0–255). Throws on anything else. */\nexport function parseHex(hex: string): [number, number, number] {\n if (!HEX.test(hex)) throw new Error(`\"${hex}\" is not a #rgb or #rrggbb colour.`);\n const h = hex.length === 4 ? [...hex.slice(1)].map((c) => c + c).join(\"\") : hex.slice(1);\n return [parseInt(h.slice(0, 2), 16), parseInt(h.slice(2, 4), 16), parseInt(h.slice(4, 6), 16)];\n}\n\nconst toHex = (rgb: [number, number, number]) => `#${rgb.map((c) => Math.round(Math.max(0, Math.min(255, c))).toString(16).padStart(2, \"0\")).join(\"\")}`;\n\n/** WCAG relative luminance. */\nexport function luminance(hex: string): number {\n const [r, g, b] = parseHex(hex).map((c) => {\n const s = c / 255;\n return s <= 0.04045 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;\n }) as [number, number, number];\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n}\n\n/** WCAG contrast ratio (1–21) of two colours. */\nexport function contrastRatio(a: string, b: string): number {\n const la = luminance(a);\n const lb = luminance(b);\n return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05);\n}\n\n/** Mix a colour toward white (`amount` > 0) or black (< 0), 0–1. */\nexport function mix(hex: string, amount: number): string {\n const target = amount >= 0 ? 255 : 0;\n const t = Math.abs(amount);\n return toHex(parseHex(hex).map((c) => c + (target - c) * t) as [number, number, number]);\n}\n\n/** `#4f46e5` → `243 75% 59%`: the HSL triplet genesis-ui's variables hold. */\nexport function hexToHslTriplet(hex: string): string {\n const [r, g, b] = parseHex(hex).map((c) => c / 255) as [number, number, number];\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h = 0;\n let s = 0;\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n if (max === r) h = (g - b) / d + (g < b ? 6 : 0);\n else if (max === g) h = (b - r) / d + 2;\n else h = (r - g) / d + 4;\n h *= 60;\n }\n const round = (n: number) => Math.round(n * 10) / 10;\n return `${round(h)} ${round(s * 100)}% ${round(l * 100)}%`;\n}\n\n/** Whichever of `a` and `b` reads better on `background`. */\nfunction readableOn(background: string, a: string, b: string): string {\n return contrastRatio(background, a) >= contrastRatio(background, b) ? a : b;\n}\n\n// ── Brand → canonical brand ─────────────────────────────────────────────────\n\nexport function isSiteBrand(brand: BrandInput): brand is SiteBrand {\n return typeof (brand as SiteBrand).colors === \"object\" && !(\"neutral\" in brand);\n}\n\n/** The minimal brand as a design-system brand (Genesis's neutrals and status colours, the brand's primary and fonts). */\nexport function toCanonicalBrand(brand: BrandInput): CanonicalBrand {\n if (!isSiteBrand(brand)) {\n const { logo: _logo, displayName: _displayName, ...canonical } = brand as CanonicalBrand & { logo?: unknown; displayName?: unknown };\n return canonical;\n }\n const primary = brand.colors.primary.toLowerCase();\n parseHex(primary);\n const primaryDark = (brand.colors.primaryDark ?? mix(primary, 0.35)).toLowerCase();\n parseHex(primaryDark);\n const heading = FONT_CHOICES[brand.fonts?.heading ?? \"inter\"] ?? FONT_CHOICES.inter;\n const body = FONT_CHOICES[brand.fonts?.body ?? \"inter\"] ?? FONT_CHOICES.inter;\n return {\n ...genesisBrand,\n name: brand.name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-|-$/g, \"\") || \"site\",\n accent: { DEFAULT: primary, light: primary, dark: primaryDark },\n typography: {\n fontFamily: { body: body.stack.split(/,\\s*/), display: heading.stack.split(/,\\s*/) },\n },\n };\n}\n\n/** The brand's display name: the minimal brand's `name`, a canonical brand's `displayName` or `name`. */\nexport function brandDisplayName(brand: BrandInput): string {\n return isSiteBrand(brand) ? brand.name : ((brand as { displayName?: string }).displayName ?? brand.name);\n}\n\n// ── The theme ───────────────────────────────────────────────────────────────\n\nexport interface ThemePair {\n /** What the pair is, for an accessibility issue: \"body text on the page\". */\n name: string;\n mode: \"light\" | \"dark\";\n foreground: string;\n background: string;\n /** The ratio it must reach: 4.5 for text, 3 for the focus ring. */\n minimum: number;\n}\n\nexport interface SiteTheme {\n light: Record<string, string>;\n dark: Record<string, string>;\n colorScheme: \"light\" | \"dark\" | \"auto\";\n /** The fonts the site uses, to load. */\n fonts: FontInfo[];\n /** The colour pairs the sections draw, for the contrast check. */\n pairs: ThemePair[];\n /** Hash of the brand and overrides it was made from (recorded on a release). */\n brandHash: string;\n}\n\ninterface ModeColours {\n background: string;\n foreground: string;\n muted: string;\n mutedForeground: string;\n primary: string;\n primaryForeground: string;\n ring: string;\n border: string;\n}\n\nfunction modeColours(brand: CanonicalBrand, mode: \"light\" | \"dark\"): ModeColours {\n const n = brand.neutral;\n const light = mode === \"light\";\n const background = (light ? brand.surface.light : brand.surface.dark) ?? brand.surface.DEFAULT;\n const foreground = (light ? brand.text.light : brand.text.dark) ?? brand.text.DEFAULT;\n const primary = (light ? brand.accent.light : brand.accent.dark) ?? brand.accent.DEFAULT;\n const muted = light ? (n[\"100\"] ?? mix(background, -0.04)) : (n[\"800\"] ?? mix(background, 0.08));\n // One step darker (lighter in dark mode) than shadcn's default, so quiet copy reaches 4.5:1 on a muted band too.\n const mutedForeground = light ? (n[\"600\"] ?? mix(foreground, 0.3)) : (n[\"400\"] ?? mix(foreground, -0.3));\n const border = light ? (n[\"200\"] ?? mix(background, -0.1)) : (n[\"700\"] ?? mix(background, 0.15));\n // White or the darkest neutral, whichever reads better; black when neither\n // reaches 4.5:1 (white or black always does, at worst about 4.58:1).\n let primaryForeground = readableOn(primary, \"#ffffff\", n[\"900\"] ?? \"#09090b\");\n if (contrastRatio(primary, primaryForeground) < 4.5) primaryForeground = readableOn(primary, \"#ffffff\", \"#000000\");\n const ring = contrastRatio(primary, background) >= 3 ? primary : foreground;\n return { background, foreground, muted, mutedForeground, primary, primaryForeground, ring, border };\n}\n\nfunction roleVars(c: ModeColours): Record<string, string> {\n const hsl = hexToHslTriplet;\n return {\n \"--background\": hsl(c.background),\n \"--foreground\": hsl(c.foreground),\n \"--card\": hsl(c.background),\n \"--card-foreground\": hsl(c.foreground),\n \"--popover\": hsl(c.background),\n \"--popover-foreground\": hsl(c.foreground),\n \"--primary\": hsl(c.primary),\n \"--primary-foreground\": hsl(c.primaryForeground),\n \"--secondary\": hsl(c.muted),\n \"--secondary-foreground\": hsl(c.foreground),\n \"--muted\": hsl(c.muted),\n \"--muted-foreground\": hsl(c.mutedForeground),\n \"--accent\": hsl(c.muted),\n \"--accent-foreground\": hsl(c.foreground),\n \"--border\": hsl(c.border),\n \"--input\": hsl(c.border),\n \"--ring\": hsl(c.ring),\n };\n}\n\nfunction pairsFor(c: ModeColours, mode: \"light\" | \"dark\"): ThemePair[] {\n return [\n { name: \"body text on the page\", mode, foreground: c.foreground, background: c.background, minimum: 4.5 },\n { name: \"quiet text on the page\", mode, foreground: c.mutedForeground, background: c.background, minimum: 4.5 },\n { name: \"quiet text on a muted band\", mode, foreground: c.mutedForeground, background: c.muted, minimum: 4.5 },\n { name: \"body text on a muted band\", mode, foreground: c.foreground, background: c.muted, minimum: 4.5 },\n { name: \"button and accent-band text on the primary colour\", mode, foreground: c.primaryForeground, background: c.primary, minimum: 4.5 },\n { name: \"text on an inverse band\", mode, foreground: c.background, background: c.foreground, minimum: 4.5 },\n { name: \"the focus ring on the page\", mode, foreground: c.ring, background: c.background, minimum: 3 },\n ];\n}\n\n/** FNV-1a, 32 bits twice: a short, stable hash for cache keys and release records (not for security). */\nexport function stableHash(value: unknown): string {\n const text = JSON.stringify(value, (_k, v) => (v && typeof v === \"object\" && !Array.isArray(v) ? Object.fromEntries(Object.entries(v).sort(([a], [b]) => (a < b ? -1 : 1))) : v));\n let h1 = 0x811c9dc5;\n let h2 = 0x01000193 ^ text.length;\n for (let i = 0; i < text.length; i++) {\n const c = text.charCodeAt(i);\n h1 = Math.imul(h1 ^ c, 0x01000193) >>> 0;\n h2 = Math.imul(h2 ^ c, 0x5bd1e995) >>> 0;\n }\n return h1.toString(16).padStart(8, \"0\") + h2.toString(16).padStart(8, \"0\");\n}\n\n/**\n * The site's theme: variables for light and dark, the fonts to load, the\n * pairs the contrast check reads, and a hash of what it was made from.\n *\n * @stability Beta\n */\nexport function siteTheme(brand: BrandInput, theme: Partial<SiteDoc[\"theme\"]> = {}): SiteTheme {\n const canonical = toCanonicalBrand(brand);\n const overrides = theme.overrides ?? {};\n const base = themeFromBrand(canonical).variables;\n const fontStack = (family: \"body\" | \"display\") => canonical.typography?.fontFamily?.[family]?.join(\", \");\n const headingFont = overrides.headingFont ? FONT_CHOICES[overrides.headingFont] : undefined;\n const bodyFont = overrides.bodyFont ? FONT_CHOICES[overrides.bodyFont] : undefined;\n const fontVars: Record<string, string> = {};\n const sans = bodyFont?.stack ?? fontStack(\"body\");\n const display = headingFont?.stack ?? fontStack(\"display\") ?? sans;\n if (sans) fontVars[\"--font-sans\"] = sans;\n if (display) fontVars[\"--font-display\"] = display;\n if (overrides.radius) fontVars[\"--radius\"] = RADIUS[overrides.radius];\n\n const light = modeColours(canonical, \"light\");\n const dark = modeColours(canonical, \"dark\");\n const usedFonts = new Map<string, FontInfo>();\n for (const stack of [sans, display]) {\n const info = Object.values(FONT_CHOICES).find((f) => f.stack === stack);\n if (info) usedFonts.set(info.label, info);\n }\n const colorScheme = theme.colorScheme ?? \"light\";\n const pairs = colorScheme === \"light\" ? pairsFor(light, \"light\") : colorScheme === \"dark\" ? pairsFor(dark, \"dark\") : [...pairsFor(light, \"light\"), ...pairsFor(dark, \"dark\")];\n return {\n light: { ...base.light, ...roleVars(light), ...fontVars },\n dark: { ...base.dark, ...roleVars(dark), ...fontVars },\n colorScheme,\n fonts: [...usedFonts.values()],\n pairs,\n brandHash: stableHash({ brand: canonical, overrides, colorScheme }),\n };\n}\n\n/** A CSS value from the theme, made safe to print inside a `<style>`: no `<`, braces or semicolons. */\nfunction cssValue(value: string): string {\n return value.replace(/[<>{};\\\\]/g, \"\");\n}\n\nfunction block(selector: string, vars: Record<string, string>): string {\n const lines = Object.entries(vars)\n .filter(([name]) => /^--[a-z0-9-]+$/i.test(name))\n .map(([name, value]) => `${name}:${cssValue(value)}`);\n return `${selector}{${lines.join(\";\")}}`;\n}\n\n/** The site's `<style>` body: the light variables on `:root`, the dark ones by scheme. */\nexport function themeCss(theme: SiteTheme): string {\n if (theme.colorScheme === \"dark\") return block(\":root\", theme.dark) + \":root{color-scheme:dark}\";\n if (theme.colorScheme === \"auto\") {\n return `${block(\":root\", theme.light)}:root{color-scheme:light dark}@media (prefers-color-scheme: dark){${block(\":root\", theme.dark)}}`;\n }\n return block(\":root\", theme.light) + \":root{color-scheme:light}\";\n}\n","/**\n * Publish checks: what must be true before a release goes live. Each check\n * returns issues; any `error` blocks the publish (`isPublishable`), and\n * `warning`s are shown but don't.\n *\n * Accessibility (WCAG 2.2 AA) that a document can prove:\n * - one `h1` per page: the renderer gives it to the first section that\n * `providesH1` (the hero), or prints the page title as a visually hidden\n * `h1`; a second hero is over its limit;\n * - heading order inside rich text (no skipped levels);\n * - every image has alt text or is marked decorative (1.1.1);\n * - every colour pair the sections draw reaches 4.5:1 for text and 3:1 for\n * the focus ring (1.4.3, 1.4.11).\n *\n * The rest is the renderer's job and is pinned by its tests: visible focus,\n * 24px targets (2.5.8), landmarks, a skip link, link text.\n *\n * And content rules: unknown or invalid sections, sections over their\n * limit or on the wrong kind of page, template placeholders still showing,\n * duplicate or reserved paths, a site with no home page.\n */\nimport { migrateNode } from \"./migrate\";\nimport { getSection, type AnySectionDefinition } from \"./registry\";\nimport type { PageKind, ReleasePage, ReleaseSnapshot, SectionNode, SiteDoc } from \"./schemas\";\nimport { contrastRatio, type SiteTheme } from \"./theme\";\nimport { isReservedPath, pagePathProblems, type ReservedPaths } from \"./urls\";\n\nexport interface SiteIssue {\n severity: \"error\" | \"warning\";\n code: string;\n message: string;\n pageId?: string;\n path?: string;\n sectionId?: string;\n}\n\nexport const isPublishable = (issues: readonly SiteIssue[]) => !issues.some((i) => i.severity === \"error\");\n\ntype Lookup = (type: string) => AnySectionDefinition | undefined;\n\n/** Every object in a props tree that looks like an image (`{ src, alt?, decorative? }`), with its path. */\nfunction images(value: unknown, path: string[] = []): { path: string; image: { src: unknown; alt?: unknown; decorative?: unknown } }[] {\n if (!value || typeof value !== \"object\") return [];\n if (Array.isArray(value)) return value.flatMap((v, i) => images(v, [...path, String(i)]));\n const record = value as Record<string, unknown>;\n const found = typeof record.src === \"string\" && (\"alt\" in record || \"decorative\" in record || /\\.(png|jpe?g|webp|avif|gif|svg)(\\?|$)/i.test(record.src))\n ? [{ path: path.join(\".\"), image: record as { src: unknown; alt?: unknown; decorative?: unknown } }]\n : [];\n return [...found, ...Object.entries(record).flatMap(([k, v]) => (k === \"src\" ? [] : images(v, [...path, k])))];\n}\n\n/** Heading levels in a rich text document, in order. */\nfunction richTextHeadings(value: unknown): number[] {\n if (!value || typeof value !== \"object\") return [];\n if (Array.isArray(value)) return value.flatMap(richTextHeadings);\n const node = value as { type?: unknown; attrs?: { level?: unknown }; content?: unknown };\n if (node.type === \"heading\") return typeof node.attrs?.level === \"number\" ? [node.attrs.level] : [];\n // A rich text node's children are in `content`; any other object is props: look in every value.\n if (node.type === \"doc\" || typeof node.type === \"string\") return richTextHeadings(node.content);\n return Object.values(value).flatMap(richTextHeadings);\n}\n\ninterface NodeContext {\n where: \"header\" | \"body\" | \"footer\";\n kind?: PageKind;\n page?: ReleasePage;\n}\n\nfunction nodeIssues(node: SectionNode, ctx: NodeContext, lookup: Lookup): SiteIssue[] {\n const base = { ...(ctx.page ? { pageId: ctx.page.id, path: ctx.page.path } : {}), sectionId: node.id };\n const at = ctx.page ? `${ctx.page.path}` : `the site ${ctx.where}`;\n const migrated = migrateNode(node, lookup);\n const issues: SiteIssue[] = migrated.issues.map((i) => ({ ...base, severity: i.severity, code: i.code, message: `${at}: ${i.message}` }));\n const def = lookup(node.type);\n if (!def || !migrated.node) return issues;\n if (node.placeholder) {\n issues.push({ ...base, severity: \"error\", code: \"placeholder\", message: `${at}: the ${def.label} section still has the template's sample content. Replace it, or hide the section.` });\n }\n const placement = def.placement ?? \"body\";\n if (placement !== ctx.where) {\n issues.push({ ...base, severity: \"error\", code: \"placement\", message: `${at}: a ${def.label} section belongs in the ${placement === \"body\" ? \"page\" : `site ${placement}`}, not the ${ctx.where === \"body\" ? \"page\" : `site ${ctx.where}`}.` });\n }\n if (ctx.kind && def.enabledOn && !def.enabledOn.includes(ctx.kind)) {\n issues.push({ ...base, severity: \"error\", code: \"enabled-on\", message: `${at}: a ${def.label} section can't go on a ${ctx.kind} page.` });\n }\n for (const { path, image } of images(migrated.node.props)) {\n const alt = typeof image.alt === \"string\" ? image.alt.trim() : \"\";\n if (!alt && image.decorative !== true) {\n issues.push({ ...base, severity: \"error\", code: \"image-alt\", message: `${at}: an image in the ${def.label} section (${path || \"image\"}) needs alt text, or to be marked decorative.` });\n }\n }\n const levels = richTextHeadings(migrated.node.props);\n for (let i = 0; i < levels.length; i++) {\n const level = levels[i]!;\n const previous = i === 0 ? 2 : levels[i - 1]!;\n if (level === 1) issues.push({ ...base, severity: \"error\", code: \"heading-h1\", message: `${at}: rich text can't hold a level 1 heading; the page has one already.` });\n else if (level > previous + 1) {\n issues.push({ ...base, severity: \"error\", code: \"heading-order\", message: `${at}: a level ${level} heading follows a level ${previous} in the ${def.label} section; don't skip a level.` });\n }\n }\n return issues;\n}\n\n/** Issues on one page: its sections, limits and the h1. */\nexport function checkPage(page: ReleasePage, lookup: Lookup = getSection, reserved?: ReservedPaths): SiteIssue[] {\n const issues: SiteIssue[] = [];\n const base = { pageId: page.id, path: page.path };\n for (const problem of pagePathProblems(page.path, reserved)) issues.push({ ...base, severity: \"error\", code: \"path\", message: `${page.path}: ${problem}` });\n const visible = page.doc.content.filter((n) => !n.hidden);\n const counts = new Map<string, number>();\n let h1 = 0;\n for (const node of visible) {\n issues.push(...nodeIssues(node, { where: \"body\", kind: page.kind, page }, lookup));\n counts.set(node.type, (counts.get(node.type) ?? 0) + 1);\n if (lookup(node.type)?.providesH1) h1++;\n }\n for (const [type, count] of counts) {\n const def = lookup(type);\n if (def?.limit && count > def.limit) {\n issues.push({ ...base, severity: \"error\", code: \"limit\", message: `${page.path}: ${count} ${def.label} sections; a page has at most ${def.limit}.` });\n }\n }\n if (h1 === 0) {\n issues.push({ ...base, severity: \"warning\", code: \"no-h1\", message: `${page.path}: no hero, so the page title \"${page.doc.root.props.title}\" becomes its hidden main heading.` });\n }\n if (!page.doc.seo?.description) {\n issues.push({ ...base, severity: \"warning\", code: \"seo-description\", message: `${page.path}: no description for search results and link previews.` });\n }\n return issues;\n}\n\n/** Issues with the site's own parts: header, footer, redirects. */\nexport function checkSiteDoc(site: SiteDoc, lookup: Lookup = getSection): SiteIssue[] {\n const issues: SiteIssue[] = [];\n for (const node of site.header.filter((n) => !n.hidden)) issues.push(...nodeIssues(node, { where: \"header\" }, lookup));\n for (const node of site.footer.filter((n) => !n.hidden)) issues.push(...nodeIssues(node, { where: \"footer\" }, lookup));\n const froms = new Set<string>();\n for (const r of site.redirects) {\n if (froms.has(r.from)) issues.push({ severity: \"error\", code: \"redirect-duplicate\", path: r.from, message: `Two redirects from ${r.from}.` });\n froms.add(r.from);\n if (r.to === r.from) issues.push({ severity: \"error\", code: \"redirect-loop\", path: r.from, message: `The redirect from ${r.from} points at itself.` });\n }\n return issues;\n}\n\n/** Colour pairs below their minimum (1.4.3 text, 1.4.11 focus ring). */\nexport function checkContrast(theme: SiteTheme): SiteIssue[] {\n return theme.pairs\n .map((pair) => ({ pair, ratio: contrastRatio(pair.foreground, pair.background) }))\n .filter(({ pair, ratio }) => ratio < pair.minimum)\n .map(({ pair, ratio }) => ({\n severity: \"error\" as const,\n code: \"contrast\",\n message: `In ${pair.mode} mode, ${pair.name} is ${ratio.toFixed(2)}:1 (${pair.foreground} on ${pair.background}); it needs ${pair.minimum}:1. Adjust the brand colours.`,\n }));\n}\n\nexport interface CheckReleaseOptions {\n /** The brand's theme: adds the contrast check. */\n theme?: SiteTheme;\n lookup?: Lookup;\n reserved?: ReservedPaths;\n}\n\n/**\n * Everything a publish checks, for a whole release.\n *\n * @stability Beta\n */\nexport function checkRelease(snapshot: ReleaseSnapshot, options: CheckReleaseOptions = {}): SiteIssue[] {\n const lookup = options.lookup ?? getSection;\n const issues: SiteIssue[] = [...checkSiteDoc(snapshot.site, lookup)];\n const paths = new Map<string, string>();\n for (const page of snapshot.pages) {\n const other = paths.get(page.path);\n if (other) issues.push({ severity: \"error\", code: \"path-duplicate\", pageId: page.id, path: page.path, message: `Two pages at ${page.path}.` });\n paths.set(page.path, page.id);\n issues.push(...checkPage(page, lookup, options.reserved));\n }\n if (!paths.has(\"/\")) issues.push({ severity: \"error\", code: \"no-home\", message: \"The site has no home page (a page at /).\" });\n for (const r of snapshot.site.redirects) {\n // Redirects answer before pages, so the page there could never be reached.\n if (paths.has(r.from)) issues.push({ severity: \"error\", code: \"redirect-shadows-page\", path: r.from, message: `The redirect from ${r.from} hides the page there; remove the redirect.` });\n const target = r.to.split(/[?#]/)[0]!;\n if (r.to.startsWith(\"/\") && !paths.has(target)) {\n issues.push({ severity: \"warning\", code: \"redirect-to-missing-page\", path: r.from, message: `The redirect from ${r.from} goes to ${target}, where there's no page (was it deleted?).` });\n }\n if (options.reserved !== undefined ? isReservedPath(r.from, options.reserved) : isReservedPath(r.from)) {\n issues.push({ severity: \"error\", code: \"redirect-reserved\", path: r.from, message: `${r.from} is reserved for the app; a site can't redirect it.` });\n }\n }\n if (options.theme) issues.push(...checkContrast(options.theme));\n return issues;\n}\n\n/**\n * A rendered page's outline, from its HTML: one `h1`, no skipped heading\n * level, every `<img>` with an `alt` attribute. For tests and for hosts that\n * want to audit what was actually served.\n */\nexport function checkHtmlOutline(html: string): SiteIssue[] {\n const issues: SiteIssue[] = [];\n const body = html.replace(/<script\\b[\\s\\S]*?<\\/script>/gi, \"\").replace(/<style\\b[\\s\\S]*?<\\/style>/gi, \"\");\n const levels = [...body.matchAll(/<h([1-6])\\b/gi)].map((m) => Number(m[1]));\n const h1 = levels.filter((l) => l === 1).length;\n if (h1 !== 1) issues.push({ severity: \"error\", code: \"h1-count\", message: `The page has ${h1} h1 elements; it needs exactly one.` });\n if (levels[0] !== undefined && levels[0] !== 1) issues.push({ severity: \"error\", code: \"heading-order\", message: `The first heading is an h${levels[0]}, not the h1.` });\n for (let i = 1; i < levels.length; i++) {\n if (levels[i]! > levels[i - 1]! + 1) issues.push({ severity: \"error\", code: \"heading-order\", message: `An h${levels[i]} follows an h${levels[i - 1]}.` });\n }\n for (const m of body.matchAll(/<img\\b[^>]*>/gi)) {\n if (!/\\salt=/.test(m[0])) issues.push({ severity: \"error\", code: \"image-alt\", message: `An image has no alt attribute: ${m[0].slice(0, 120)}` });\n }\n return issues;\n}\n","/**\n * Where sites live: the `SiteStore` contract, the publish pipeline every\n * store shares, cache invalidation, and an in-memory store for tests, demos\n * and previews. `@marktiderman/genesis-sites/supabase` has the Postgres one.\n */\nimport { checkRelease, isPublishable, type SiteIssue } from \"./a11y\";\nimport { migratePage, migrateSite } from \"./migrate\";\nimport {\n PageDoc,\n ReleaseSnapshot,\n SiteDoc,\n type PageKind,\n type PageMeta,\n type Release,\n type ReleaseMeta,\n type ReleasePage,\n type SiteDocInput,\n} from \"./schemas\";\nimport { redirectsAfterMove } from \"./seo\";\nimport { siteTheme, type BrandInput } from \"./theme\";\nimport { DEFAULT_RESERVED_PATHS, validatePagePath, type ReservedPaths } from \"./urls\";\n\nexport type SaveResult<T> = { rev: number } | { conflict: T; rev: number };\n\nexport const isConflict = <T>(result: SaveResult<T>): result is { conflict: T; rev: number } => \"conflict\" in result;\n\nexport interface AssetMeta {\n alt?: string;\n width?: number;\n height?: number;\n /** The file's name, for the storage key. */\n name?: string;\n}\n\nexport interface Asset {\n id: string;\n siteId: string;\n /** The storage key: always `sites/<siteId>/...`, so storage policies can scope by site. */\n path: string;\n /** Where the browser loads it. */\n url: string;\n mime: string;\n alt: string | null;\n width: number | null;\n height: number | null;\n}\n\nexport interface PublishOptions {\n note?: string;\n /** The brand to check contrast against (and record the hash of). Required: a publish without it is blocked. */\n brand?: BrandInput | null;\n reserved?: ReservedPaths;\n}\n\nexport interface NewPage {\n path: string;\n kind?: PageKind;\n doc: PageDoc;\n}\n\nexport interface SiteDraft {\n site: SiteDoc;\n rev: number;\n}\n\nexport interface PageDraft {\n doc: PageDoc;\n rev: number;\n siteId: string;\n path: string;\n kind: PageKind;\n}\n\n/**\n * A site's storage.\n *\n * Drafts change by compare-and-swap on a revision: a save names the revision\n * it started from and gets the new one, or the current document when someone\n * saved first. A publish checks the drafts (`checkRelease`) and freezes them\n * into an immutable release that the live site points at; a rollback moves\n * the pointer back. `getLive` is the public read and needs no session.\n *\n * @stability Beta\n */\nexport interface SiteStore {\n /** The release the live site serves, or null (not published, archived, or unknown). */\n getLive(siteId: string): Promise<Release | null>;\n getDraft(siteId: string): Promise<SiteDraft | null>;\n saveSiteDraft(siteId: string, rev: number, site: SiteDoc): Promise<SaveResult<SiteDoc>>;\n listPages(siteId: string): Promise<PageMeta[]>;\n getPageDraft(pageId: string): Promise<PageDraft | null>;\n savePageDraft(pageId: string, rev: number, doc: PageDoc): Promise<SaveResult<PageDoc>>;\n createPage(siteId: string, page: NewPage): Promise<PageMeta>;\n /** Move a page to a new path; the old path redirects to it (301). */\n movePage(pageId: string, path: string): Promise<PageMeta>;\n deletePage(pageId: string): Promise<void>;\n publish(siteId: string, options?: PublishOptions): Promise<Release>;\n rollback(siteId: string, releaseId: string): Promise<Release>;\n listReleases(siteId: string): Promise<ReleaseMeta[]>;\n putAsset?(siteId: string, file: Blob, meta?: AssetMeta): Promise<Asset>;\n}\n\n/** A publish the checks refused: `issues` lists why. */\nexport class PublishBlockedError extends Error {\n constructor(readonly issues: SiteIssue[]) {\n const errors = issues.filter((i) => i.severity === \"error\");\n super(`The site can't be published yet:\\n${errors.map((i) => ` - ${i.message}`).join(\"\\n\")}`);\n this.name = \"PublishBlockedError\";\n }\n}\n\n/** Someone saved first; the store's current document is in the result of the save that raised this. */\nexport class SiteConflictError extends Error {\n constructor(message = \"Someone else changed this site; reload it and try again.\") {\n super(message);\n this.name = \"SiteConflictError\";\n }\n}\n\nexport interface PreparedRelease {\n snapshot: ReleaseSnapshot;\n issues: SiteIssue[];\n /** Drafts whose props a migration changed: a store saves these before it publishes. */\n migratedPages: { id: string; doc: PageDoc }[];\n migratedSite: SiteDoc | null;\n brandHash: string | null;\n}\n\n/**\n * The publish pipeline every store shares: migrate every node, freeze the\n * drafts into a snapshot, and check it. Throws `PublishBlockedError` when a\n * check fails. Pages come in the order they are listed.\n *\n * @stability Beta\n */\nexport function prepareRelease(\n site: SiteDoc,\n pages: readonly { id: string; path: string; kind: PageKind; doc: PageDoc }[],\n options: PublishOptions = {},\n): PreparedRelease {\n const migratedSite = migrateSite(site);\n const migratedPages: { id: string; doc: PageDoc }[] = [];\n const releasePages: ReleasePage[] = pages.map((p) => {\n const m = migratePage(p.doc);\n if (m.changed) migratedPages.push({ id: p.id, doc: m.doc });\n return { id: p.id, path: p.path, kind: p.kind, doc: m.doc };\n });\n // A hidden section stays in the draft, never in the release: a release is public.\n const visible = <T extends { hidden?: boolean | undefined }>(nodes: T[]) => nodes.filter((n) => !n.hidden);\n const snapshot: ReleaseSnapshot = ReleaseSnapshot.parse({\n schemaVersion: 1,\n site: { ...migratedSite.site, header: visible(migratedSite.site.header), footer: visible(migratedSite.site.footer) },\n pages: releasePages.map((p) => ({ ...p, doc: { ...p.doc, content: visible(p.doc.content) } })),\n });\n const theme = options.brand ? siteTheme(options.brand, snapshot.site.theme) : undefined;\n const issues = checkRelease(snapshot, { ...(theme ? { theme } : {}), reserved: options.reserved ?? DEFAULT_RESERVED_PATHS });\n // The contrast check needs the brand: without it a publish can't show its colours are readable.\n if (!theme) issues.push({ severity: \"error\", code: \"brand-missing\", message: \"Publish with the site's brand (`brand`), so its colours can be checked for contrast.\" });\n if (!isPublishable(issues)) throw new PublishBlockedError(issues);\n return { snapshot, issues, migratedPages, migratedSite: migratedSite.changed ? migratedSite.site : null, brandHash: theme?.brandHash ?? null };\n}\n\n/** The cache tag every response of a site carries (`Vercel-Cache-Tag`). */\nexport function siteCacheTag(siteId: string): string {\n return `site:${siteId}`;\n}\n\n/** The cache tag of every page that embeds a form: purge it when the host changes that form. */\nexport function formCacheTag(slug: string): string {\n return `form:${slug}`;\n}\n\n/** Why a site's cache is being purged. */\nexport interface InvalidationInfo {\n siteId: string;\n action: \"publish\" | \"rollback\";\n}\n\n/**\n * A store that purges the site's cached pages after every publish and\n * rollback: `invalidate` gets `[\"site:<id>\"]` and what happened.\n *\n * Mind what your CDN's purge does. On Vercel, `invalidateByTag` marks pages\n * stale, so each cached URL serves the old release once more while it\n * regenerates (no stampede); `dangerouslyDeleteByTag` drops them, so the\n * next request waits for a render. Use the delete for a rollback that takes\n * something down:\n *\n * withCacheInvalidation(store, (tags, { action }) =>\n * action === \"rollback\" ? dangerouslyDeleteByTag(tags) : invalidateByTag(tags));\n *\n * Archiving a site goes through your own server or the database (the\n * `genesis_sites` notification), so purge there too. A failed purge is\n * logged and rethrown, so the editor shows that the live site may be stale.\n *\n * @stability Beta\n */\nexport function withCacheInvalidation(store: SiteStore, invalidate: (tags: string[], info: InvalidationInfo) => Promise<void> | void): SiteStore {\n const purge = async (siteId: string, action: InvalidationInfo[\"action\"]) => {\n try {\n await invalidate([siteCacheTag(siteId)], { siteId, action });\n } catch (err) {\n console.error(`[genesis-sites] published site ${siteId}, but purging its cache failed; the old pages may be served until their cache expires.`, err);\n throw err;\n }\n };\n return {\n ...store,\n getLive: (id) => store.getLive(id),\n getDraft: (id) => store.getDraft(id),\n saveSiteDraft: (id, rev, site) => store.saveSiteDraft(id, rev, site),\n listPages: (id) => store.listPages(id),\n getPageDraft: (id) => store.getPageDraft(id),\n savePageDraft: (id, rev, doc) => store.savePageDraft(id, rev, doc),\n createPage: (id, page) => store.createPage(id, page),\n movePage: (id, path) => store.movePage(id, path),\n deletePage: (id) => store.deletePage(id),\n listReleases: (id) => store.listReleases(id),\n ...(store.putAsset ? { putAsset: store.putAsset.bind(store) } : {}),\n async publish(siteId, options) {\n const release = await store.publish(siteId, options);\n await purge(siteId, \"publish\");\n return release;\n },\n async rollback(siteId, releaseId) {\n const release = await store.rollback(siteId, releaseId);\n await purge(siteId, \"rollback\");\n return release;\n },\n };\n}\n\n// ── In memory ───────────────────────────────────────────────────────────────\n\nexport interface NewSite {\n id?: string;\n /** The site document (defaults applied). */\n site: SiteDocInput;\n pages: { id?: string; path: string; kind?: PageKind; doc: PageDoc }[];\n}\n\nexport interface MemorySiteStore extends SiteStore {\n createSite(input: NewSite): Promise<{ siteId: string; pageIds: string[] }>;\n /** Archive (or bring back) a site: an archived site serves nothing. */\n setStatus(siteId: string, status: \"draft\" | \"live\" | \"archived\"): Promise<void>;\n}\n\ninterface MemSite {\n id: string;\n site: SiteDoc;\n rev: number;\n liveReleaseId: string | null;\n status: \"draft\" | \"live\" | \"archived\";\n}\ninterface MemPage {\n id: string;\n siteId: string;\n path: string;\n kind: PageKind;\n doc: PageDoc;\n rev: number;\n sort: number;\n deleted: boolean;\n}\n\nexport interface MemoryStoreOptions {\n reserved?: ReservedPaths;\n /** Who may edit (default: everyone). Mirrors the database's `can_edit` hook, for tests. */\n canEdit?: (siteId: string) => boolean;\n now?: () => Date;\n}\n\nconst clone = <T>(value: T): T => structuredClone(value);\n\n/**\n * An in-memory `SiteStore`: the same rules as the database (compare-and-swap\n * revisions, path checks, redirects on move, immutable releases), for tests,\n * demos and local previews. Documents are copied in and out, so callers\n * can't change stored state by mutating what they hold.\n *\n * @stability Beta\n */\nexport function createMemorySiteStore(options: MemoryStoreOptions = {}): MemorySiteStore {\n const reserved = options.reserved ?? DEFAULT_RESERVED_PATHS;\n const now = options.now ?? (() => new Date());\n const sites = new Map<string, MemSite>();\n const pages = new Map<string, MemPage>();\n const releases = new Map<string, Release>();\n let seq = 0;\n const id = (prefix: string) => `${prefix}_${(++seq).toString(36).padStart(4, \"0\")}`;\n\n const editable = (siteId: string): MemSite => {\n const s = sites.get(siteId);\n if (!s) throw new Error(`No site ${siteId}.`);\n if (options.canEdit && !options.canEdit(siteId)) throw new Error(`Not allowed to edit site ${siteId}.`);\n return s;\n };\n const livePages = (siteId: string) => [...pages.values()].filter((p) => p.siteId === siteId && !p.deleted).sort((a, b) => a.sort - b.sort || a.path.localeCompare(b.path));\n const meta = (p: MemPage): PageMeta => ({ id: p.id, siteId: p.siteId, path: p.path, kind: p.kind, title: p.doc.root.props.title, sort: p.sort, rev: p.rev });\n const releaseMeta = ({ snapshot: _s, ...m }: Release): ReleaseMeta => clone(m);\n const pathTaken = (siteId: string, path: string, except?: string) => livePages(siteId).some((p) => p.path === path && p.id !== except);\n\n const store: MemorySiteStore = {\n async createSite(input) {\n const siteId = input.id ?? id(\"site\");\n if (sites.has(siteId)) throw new Error(`Site ${siteId} exists.`);\n const site = SiteDoc.parse(input.site);\n sites.set(siteId, { id: siteId, site, rev: 1, liveReleaseId: null, status: \"draft\" });\n const pageIds: string[] = [];\n input.pages.forEach((p, i) => {\n validatePagePath(p.path, reserved);\n if (pathTaken(siteId, p.path)) throw new Error(`Two pages at ${p.path}.`);\n const pageId = p.id ?? id(\"page\");\n pages.set(pageId, { id: pageId, siteId, path: p.path, kind: p.kind ?? \"page\", doc: PageDoc.parse(clone(p.doc)), rev: 1, sort: i, deleted: false });\n pageIds.push(pageId);\n });\n return { siteId, pageIds };\n },\n async setStatus(siteId, status) {\n editable(siteId).status = status;\n },\n async getLive(siteId) {\n const s = sites.get(siteId);\n if (!s || s.status !== \"live\" || !s.liveReleaseId) return null;\n const r = releases.get(s.liveReleaseId);\n return r ? clone(r) : null;\n },\n async getDraft(siteId) {\n const s = sites.get(siteId);\n if (!s || (options.canEdit && !options.canEdit(siteId))) return null;\n return { site: clone(s.site), rev: s.rev };\n },\n async saveSiteDraft(siteId, rev, doc) {\n const s = editable(siteId);\n if (s.rev !== rev) return { conflict: clone(s.site), rev: s.rev };\n s.site = SiteDoc.parse(clone(doc));\n s.rev += 1;\n return { rev: s.rev };\n },\n async listPages(siteId) {\n if (options.canEdit && !options.canEdit(siteId)) return [];\n return livePages(siteId).map(meta);\n },\n async getPageDraft(pageId) {\n const p = pages.get(pageId);\n if (!p || p.deleted || (options.canEdit && !options.canEdit(p.siteId))) return null;\n return { doc: clone(p.doc), rev: p.rev, siteId: p.siteId, path: p.path, kind: p.kind };\n },\n async savePageDraft(pageId, rev, doc) {\n const p = pages.get(pageId);\n if (!p || p.deleted) throw new Error(`No page ${pageId}.`);\n editable(p.siteId);\n if (p.rev !== rev) return { conflict: clone(p.doc), rev: p.rev };\n p.doc = PageDoc.parse(clone(doc));\n p.rev += 1;\n return { rev: p.rev };\n },\n async createPage(siteId, page) {\n const s = editable(siteId);\n validatePagePath(page.path, reserved);\n if (pathTaken(siteId, page.path)) throw new Error(`A page is already at ${page.path}.`);\n const pageId = id(\"page\");\n const sort = Math.max(-1, ...livePages(siteId).map((p) => p.sort)) + 1;\n const p: MemPage = { id: pageId, siteId, path: page.path, kind: page.kind ?? \"page\", doc: PageDoc.parse(clone(page.doc)), rev: 1, sort, deleted: false };\n pages.set(pageId, p);\n // A page now lives at this path: a redirect away from it would hide it.\n if (s.site.redirects.some((r) => r.from === page.path)) {\n s.site = { ...s.site, redirects: s.site.redirects.filter((r) => r.from !== page.path) };\n s.rev += 1;\n }\n return meta(p);\n },\n async movePage(pageId, path) {\n const p = pages.get(pageId);\n if (!p || p.deleted) throw new Error(`No page ${pageId}.`);\n const s = editable(p.siteId);\n validatePagePath(path, reserved);\n if (p.path === \"/\") throw new Error(\"The home page stays at /.\");\n if (pathTaken(p.siteId, path, pageId)) throw new Error(`A page is already at ${path}.`);\n const from = p.path;\n p.path = path;\n p.rev += 1;\n s.site = { ...s.site, redirects: redirectsAfterMove(s.site.redirects, from, path) };\n s.rev += 1;\n return meta(p);\n },\n async deletePage(pageId) {\n const p = pages.get(pageId);\n if (!p || p.deleted) return;\n editable(p.siteId);\n if (p.path === \"/\") throw new Error(\"The home page can't be deleted; replace its content instead.\");\n p.deleted = true;\n },\n async publish(siteId, opts = {}) {\n const s = editable(siteId);\n const list = livePages(siteId);\n const prepared = prepareRelease(s.site, list, { reserved, ...opts });\n for (const { id: pid, doc } of prepared.migratedPages) {\n const p = pages.get(pid)!;\n p.doc = doc;\n p.rev += 1;\n }\n if (prepared.migratedSite) {\n s.site = prepared.migratedSite;\n s.rev += 1;\n }\n const number = Math.max(0, ...[...releases.values()].filter((r) => r.siteId === siteId).map((r) => r.number)) + 1;\n const at = now().toISOString();\n const release: Release = {\n id: id(\"rel\"),\n siteId,\n number,\n note: opts.note ?? null,\n createdAt: at,\n publishedAt: at,\n brandHash: prepared.brandHash,\n snapshot: Object.freeze(clone(prepared.snapshot)) as ReleaseSnapshot,\n };\n releases.set(release.id, release);\n s.liveReleaseId = release.id;\n s.status = \"live\";\n return clone(release);\n },\n async rollback(siteId, releaseId) {\n const s = editable(siteId);\n const r = releases.get(releaseId);\n if (!r || r.siteId !== siteId) throw new Error(`Release ${releaseId} isn't one of site ${siteId}'s.`);\n s.liveReleaseId = r.id;\n s.status = \"live\";\n return clone(r);\n },\n async listReleases(siteId) {\n if (options.canEdit && !options.canEdit(siteId)) return [];\n return [...releases.values()].filter((r) => r.siteId === siteId).sort((a, b) => b.number - a.number).map(releaseMeta);\n },\n async putAsset(siteId, file, assetMeta = {}) {\n editable(siteId);\n const assetId = id(\"asset\");\n const name = (assetMeta.name ?? \"file\").toLowerCase().replace(/[^a-z0-9.]+/g, \"-\").slice(0, 80) || \"file\";\n const path = `sites/${siteId}/${assetId}-${name}`;\n return { id: assetId, siteId, path, url: `/${path}`, mime: file.type || \"application/octet-stream\", alt: assetMeta.alt ?? null, width: assetMeta.width ?? null, height: assetMeta.height ?? null };\n },\n };\n return store;\n}\n"]}
|