@marktiderman/genesis-sites 0.2.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 +89 -5
- 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/chunk-5IXDFFEG.js +465 -0
- package/dist/chunk-5IXDFFEG.js.map +1 -0
- package/dist/{chunk-IXMY4B56.js → chunk-FBQF2L7O.js} +90 -89
- 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/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 +2 -2
- package/dist/index.d.ts +11 -5
- package/dist/index.js +2 -249
- package/dist/index.js.map +1 -1
- package/dist/{registry-D_DCWRTc.d.ts → registry-HBn1X60x.d.ts} +1 -1
- package/dist/sections.d.ts +1 -1
- package/dist/{store-DkSycDhq.d.ts → store-BXiZeZzH.d.ts} +2 -2
- package/dist/supabase.d.ts +3 -3
- package/dist/supabase.js +2 -2
- package/dist/web.d.ts +4 -4
- package/dist/web.js +6 -476
- package/dist/web.js.map +1 -1
- package/package.json +13 -3
- package/dist/assets/sites-forms.4e6aa42497.css +0 -10
- package/dist/assets/sites.e1ffd2708b.css +0 -2
- package/dist/chunk-IXMY4B56.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/editor/asset-picker.tsx","../src/editor/canvas-dom.ts","../src/editor/autosave.ts","../src/editor/data.ts","../src/editor/services.ts","../src/editor/field-components.tsx","../src/editor/fields.ts","../src/editor/config.tsx","../src/editor/overrides.tsx","../src/editor/site-actions.ts","../src/editor/pages-panel.tsx","../src/editor/preview.ts","../src/editor/publish-panel.tsx","../src/editor/site-editor.tsx"],"names":["React","options","jsx","jsxs","Button","Label","Textarea","Switch","React2","React3","Fragment","React4","Input","cn","React5","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","RadioGroup","RadioGroupItem","DialogFooter","usePuck","createUsePuck","React6","Badge","Separator","AlertDialog","AlertDialogContent","AlertDialogHeader","AlertDialogTitle","AlertDialogDescription","AlertDialogFooter","AlertDialogCancel","AlertDialogAction","document","Tabs","TabsList","TabsTrigger","TabsContent"],"mappings":"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","file":"editor.js","sourcesContent":["/**\n * The image picker: upload (through the store's `putAsset`, or the host's\n * own upload), choose from the site's library, or link an https image.\n * Every choice needs alt text, or to be marked decorative, before it can be\n * used: the publish check would refuse it anyway, so the picker asks first.\n */\nimport * as React from \"react\";\nimport { Button } from \"@marktiderman/genesis-ui/button\";\nimport { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from \"@marktiderman/genesis-ui/dialog\";\nimport { Input } from \"@marktiderman/genesis-ui/input\";\nimport { Label } from \"@marktiderman/genesis-ui/label\";\nimport { Switch } from \"@marktiderman/genesis-ui/switch\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@marktiderman/genesis-ui/tabs\";\nimport { Textarea } from \"@marktiderman/genesis-ui/textarea\";\nimport { cn } from \"@marktiderman/genesis-ui/utils\";\nimport type { Asset, SiteStore } from \"../core/store\";\nimport { isSafeImageSrc } from \"../core/urls\";\nimport type { EditorAssets, PickedImage } from \"./services\";\n\n/** Raster images only: the database refuses SVG (it can carry script). */\nexport const IMAGE_TYPES = [\"image/png\", \"image/jpeg\", \"image/webp\", \"image/avif\", \"image/gif\"] as const;\n\nexport interface AssetPickerProps {\n open: boolean;\n siteId: string;\n store: Pick<SiteStore, \"putAsset\">;\n assets?: EditorAssets | undefined;\n current?: PickedImage | undefined;\n /** The field takes only the address; its alt text is a field of its own (a gallery photo). */\n altElsewhere?: boolean | undefined;\n onDone: (image: PickedImage | null) => void;\n}\n\nasync function dimensions(file: Blob): Promise<{ width?: number; height?: number }> {\n try {\n const bitmap = await createImageBitmap(file);\n const out = { width: bitmap.width, height: bitmap.height };\n bitmap.close();\n return out;\n } catch {\n return {};\n }\n}\n\n/** Why an upload can't be used (or null). */\nexport function uploadProblem(file: { type: string; size: number } | null, maxBytes = 10 * 1024 * 1024): string | null {\n if (!file) return \"Choose a file.\";\n if (!(IMAGE_TYPES as readonly string[]).includes(file.type)) return \"Use a PNG, JPEG, WebP, AVIF or GIF image (SVG isn't allowed).\";\n if (file.size > maxBytes) return `That file is over ${Math.round(maxBytes / 1024 / 1024)} MB.`;\n return null;\n}\n\nexport function AssetPicker({ open, siteId, store, assets, current, altElsewhere = false, onDone }: AssetPickerProps) {\n const canUpload = Boolean(assets?.upload || store.putAsset);\n const [tab, setTab] = React.useState(canUpload ? \"upload\" : \"link\");\n const [file, setFile] = React.useState<File | null>(null);\n const [url, setUrl] = React.useState(current?.src ?? \"\");\n const [chosen, setChosen] = React.useState<Asset | null>(null);\n const [alt, setAlt] = React.useState(current?.alt ?? \"\");\n const [decorative, setDecorative] = React.useState(current?.decorative === true);\n const [library, setLibrary] = React.useState<Asset[] | null>(null);\n const [uploaded, setUploaded] = React.useState<Asset[]>([]);\n const [busy, setBusy] = React.useState(false);\n const [error, setError] = React.useState<string | null>(null);\n const id = React.useId();\n\n React.useEffect(() => {\n if (!open) return;\n setFile(null);\n setChosen(null);\n setError(null);\n setUrl(current?.src ?? \"\");\n setAlt(current?.alt ?? \"\");\n setDecorative(current?.decorative === true);\n if (assets?.list) {\n assets.list(siteId).then(setLibrary, (err: unknown) => {\n console.error(\"[genesis-sites/editor] listing assets failed.\", err);\n setLibrary([]);\n });\n }\n }, [open, siteId, assets, current]);\n\n const altOk = altElsewhere || decorative || alt.trim().length > 0;\n // Marked invalid once there is an image to describe, not before.\n const altInvalid = !altOk && (Boolean(file) || Boolean(chosen) || (tab === \"link\" && url.trim().length > 0));\n const all = [...uploaded, ...(library ?? []).filter((a) => !uploaded.some((u) => u.id === a.id))].filter((a) => a.mime.startsWith(\"image/\") && a.mime !== \"image/svg+xml\");\n\n async function use() {\n setError(null);\n if (!altOk) return setError(\"Describe the image, or mark it decorative.\");\n const base = { alt: decorative ? \"\" : alt.trim(), ...(decorative ? { decorative: true } : {}) };\n if (tab === \"upload\") {\n const problem = uploadProblem(file, assets?.maxBytes);\n if (problem || !file) return setError(problem);\n setBusy(true);\n try {\n const size = await dimensions(file);\n const meta = { alt: base.alt, name: file.name, ...size };\n const asset = assets?.upload ? await assets.upload(siteId, file, meta) : await store.putAsset!(siteId, file, meta);\n setUploaded((u) => [asset, ...u]);\n if (!isSafeImageSrc(asset.url)) throw new Error(`The upload's address (${asset.url}) isn't a site path or https URL.`);\n onDone({ src: asset.url, ...base, ...size });\n } catch (err) {\n setError(`The upload failed: ${(err as Error).message}`);\n } finally {\n setBusy(false);\n }\n return;\n }\n if (tab === \"library\") {\n if (!chosen) return setError(\"Choose an image.\");\n // A library is the host's: its addresses get the same check as a link.\n if (!isSafeImageSrc(chosen.url)) return setError(`That image's address (${chosen.url}) isn't a site path or https URL.`);\n return onDone({ src: chosen.url, ...base, ...(chosen.width ? { width: chosen.width } : {}), ...(chosen.height ? { height: chosen.height } : {}) });\n }\n const src = url.trim();\n if (!isSafeImageSrc(src)) return setError(\"Use a site path (/images/photo.jpg) or an https link.\");\n onDone({ src, ...base });\n }\n\n return (\n <Dialog open={open} onOpenChange={(o) => (o ? null : onDone(null))}>\n <DialogContent className=\"sm:max-w-lg\">\n <DialogHeader>\n <DialogTitle>Choose an image</DialogTitle>\n <DialogDescription>Upload one, pick one the site has, or link one. Every image needs alt text unless it's decorative.</DialogDescription>\n </DialogHeader>\n <Tabs defaultValue=\"upload\" value={tab} onValueChange={setTab}>\n <TabsList className=\"grid w-full grid-cols-3\">\n <TabsTrigger value=\"upload\" disabled={!canUpload}>\n Upload\n </TabsTrigger>\n <TabsTrigger value=\"library\">Library</TabsTrigger>\n <TabsTrigger value=\"link\">Link</TabsTrigger>\n </TabsList>\n <TabsContent value=\"upload\" className=\"flex flex-col gap-2 pt-2\">\n <Label htmlFor={`${id}-file`}>Image file</Label>\n <Input id={`${id}-file`} type=\"file\" accept={IMAGE_TYPES.join(\",\")} onChange={(e) => setFile(e.currentTarget.files?.[0] ?? null)} />\n {!canUpload ? <p className=\"text-sm text-muted-foreground\">This site's store doesn't take uploads; link an image instead.</p> : null}\n </TabsContent>\n <TabsContent value=\"library\" className=\"pt-2\">\n {all.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">{library === null && assets?.list ? \"Loading…\" : \"No images yet. Upload one first.\"}</p>\n ) : (\n <div role=\"group\" aria-label=\"Site images\" className=\"grid max-h-64 grid-cols-3 gap-2 overflow-y-auto\">\n {all.map((a) => (\n <button\n key={a.id}\n type=\"button\"\n aria-pressed={chosen?.id === a.id}\n aria-label={a.alt?.trim() || a.path.split(\"/\").pop() || \"Image\"}\n onClick={() => {\n setChosen(a);\n if (a.alt && !alt) setAlt(a.alt);\n }}\n className={cn(\"overflow-hidden rounded-md border-2 focus-visible:outline-2 focus-visible:outline-ring\", chosen?.id === a.id ? \"border-primary\" : \"border-transparent\")}\n >\n {isSafeImageSrc(a.url) ? <img src={a.url} alt={a.alt ?? \"\"} className=\"h-20 w-full object-cover\" /> : <span className=\"p-2 text-xs\">{a.path}</span>}\n </button>\n ))}\n </div>\n )}\n </TabsContent>\n <TabsContent value=\"link\" className=\"flex flex-col gap-2 pt-2\">\n <Label htmlFor={`${id}-url`}>Image address</Label>\n <Input id={`${id}-url`} value={url} placeholder=\"https://… or /images/photo.jpg\" onChange={(e) => setUrl(e.currentTarget.value)} />\n </TabsContent>\n </Tabs>\n {altElsewhere ? (\n <p className=\"text-sm text-muted-foreground\">Describe the image in the item's Alt text field, after you choose it.</p>\n ) : (\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor={`${id}-alt`}>Alt text</Label>\n <Textarea id={`${id}-alt`} rows={2} maxLength={300} value={alt} disabled={decorative} aria-invalid={altInvalid || undefined} aria-describedby={`${id}-alt-hint`} onChange={(e) => setAlt(e.currentTarget.value)} placeholder=\"Two people stretching on mats by a window\" />\n <p id={`${id}-alt-hint`} className={altInvalid ? \"text-sm text-destructive\" : \"text-sm text-muted-foreground\"}>\n {altInvalid ? \"Describe the image, or mark it decorative.\" : \"What someone who can't see the image needs to know.\"}\n </p>\n <div className=\"flex items-center gap-2\">\n <Switch id={`${id}-decorative`} checked={decorative} onCheckedChange={setDecorative} />\n <Label htmlFor={`${id}-decorative`}>Decorative (adds nothing a reader needs)</Label>\n </div>\n </div>\n )}\n {error ? (\n <p role=\"alert\" className=\"text-sm text-destructive\">\n {error}\n </p>\n ) : null}\n <DialogFooter>\n <Button type=\"button\" variant=\"outline\" onClick={() => onDone(null)}>\n Cancel\n </Button>\n <Button type=\"button\" onClick={use} loading={busy} disabled={!altOk}>\n Use image\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","/** Bring a section into view on the canvas (after Add, or \"Show\" on a check). */\nexport function scrollCanvasTo(sectionId: string, from: Document = document): void {\n // Two frames: the section is drawn into the iframe a frame after Puck's state changes.\n requestAnimationFrame(() =>\n requestAnimationFrame(() => {\n const frame = from.querySelector<HTMLIFrameElement>(\"[data-gs-canvas] iframe\");\n frame?.contentDocument?.querySelector(`[data-puck-component=\"${CSS.escape(sectionId)}\"]`)?.scrollIntoView({ block: \"center\", behavior: \"smooth\" });\n }),\n );\n}\n","/**\n * Autosave with compare-and-swap: a document is saved a moment after the\n * last change, naming the revision it started from. When someone else saved\n * first the store answers with their document, and the autosaver stops and\n * waits: the person chooses to load theirs (`reload`) or keep their own\n * (`overwrite`). Nothing is dropped on the way:\n *\n * - a change made while a save is in flight is saved right after it, on the\n * new revision;\n * - during a conflict, edits keep collecting and are what `overwrite` saves;\n * - a failed save (offline, a server error) keeps the change and retries\n * with backoff, and on the next change;\n * - `flush()` saves now and resolves once nothing is waiting (page switch,\n * publish), or rejects when it can't;\n * - `pause()` holds every save (while a publish runs) and `resume()` saves\n * what collected meanwhile, after `rebase` has adopted the new revision.\n *\n * Pure TypeScript with injectable timers, so it is tested without a DOM.\n */\nimport { isConflict, type SaveResult } from \"../core/store\";\nimport { stableHash } from \"../core/theme\";\n\nexport type AutosaveStatus = \"saved\" | \"pending\" | \"saving\" | \"conflict\" | \"error\";\n\nexport interface AutosaveState<T> {\n status: AutosaveStatus;\n /** The revision the next save names. */\n rev: number;\n /** When status is `conflict`: the store's document and revision. */\n conflict: { doc: T; rev: number } | null;\n error: Error | null;\n /** When the last save landed. */\n savedAt: Date | null;\n}\n\nexport interface AutosaverOptions<T> {\n rev: number;\n save: (rev: number, doc: T) => Promise<SaveResult<T>>;\n /** Wait this long after the last change (default 800 ms). */\n delay?: number;\n /** Retry a failed save after this long, doubling up to a minute (default 2 s). */\n retryDelay?: number;\n onState?: (state: AutosaveState<T>) => void;\n /** Two documents are the same save (default: the same content, in any key order). */\n equals?: (a: T, b: T) => boolean;\n setTimer?: (fn: () => void, ms: number) => unknown;\n clearTimer?: (handle: unknown) => void;\n now?: () => Date;\n}\n\n/** Thrown by `flush` when the document can't be saved yet (a conflict, or a failed save). */\nexport class AutosaveBlockedError extends Error {\n constructor(readonly status: AutosaveStatus, message: string) {\n super(message);\n this.name = \"AutosaveBlockedError\";\n }\n}\n\n/**\n * One document's autosave.\n *\n * @stability Beta\n */\nexport class Autosaver<T> {\n private state: AutosaveState<T>;\n /** The newest document not yet saved, or null. */\n private pending: T | null = null;\n /** The last document the store accepted (or loaded). */\n private saved: T | null = null;\n private timer: unknown = null;\n private inFlight: Promise<void> | null = null;\n private retries = 0;\n private waiters: { resolve: () => void; reject: (e: Error) => void }[] = [];\n private disposed = false;\n private paused = false;\n private readonly opts: Required<Pick<AutosaverOptions<T>, \"delay\" | \"retryDelay\" | \"equals\" | \"setTimer\" | \"clearTimer\" | \"now\">> & AutosaverOptions<T>;\n\n constructor(options: AutosaverOptions<T>, initial?: T) {\n this.opts = {\n delay: 800,\n retryDelay: 2000,\n equals: (a, b) => stableHash(a) === stableHash(b),\n setTimer: (fn, ms) => setTimeout(fn, ms),\n clearTimer: (h) => clearTimeout(h as ReturnType<typeof setTimeout>),\n now: () => new Date(),\n ...options,\n };\n this.saved = initial ?? null;\n this.state = { status: \"saved\", rev: options.rev, conflict: null, error: null, savedAt: null };\n }\n\n get current(): AutosaveState<T> {\n return this.state;\n }\n\n /** Is anything not yet in the store (pending, saving, a conflict or a failed save)? */\n get dirty(): boolean {\n return this.pending !== null || this.inFlight !== null || this.state.status === \"conflict\" || this.state.status === \"error\";\n }\n\n /** The document as the person has it: unsaved changes, or the last save. */\n get latest(): T | null {\n return this.pending ?? this.saved;\n }\n\n private set(patch: Partial<AutosaveState<T>>) {\n this.state = { ...this.state, ...patch };\n this.opts.onState?.(this.state);\n }\n\n /** A change: saved after the delay, unless another change comes first. */\n update(doc: T): void {\n if (this.disposed) return;\n if (this.pending === null && this.saved !== null && this.opts.equals(doc, this.saved) && !this.inFlight) return;\n this.pending = doc;\n if (this.state.status === \"conflict\") return; // Kept for `overwrite`; nothing is saved until the person decides.\n if (this.state.status !== \"saving\") this.set({ status: \"pending\" });\n if (this.paused) return; // Saved on `resume`.\n this.schedule(this.opts.delay);\n }\n\n private schedule(ms: number) {\n if (this.timer !== null) this.opts.clearTimer(this.timer);\n this.timer = this.opts.setTimer(() => {\n this.timer = null;\n void this.run();\n }, ms);\n }\n\n private async run(): Promise<void> {\n if (this.inFlight) return this.inFlight; // The in-flight save picks the pending document up when it lands.\n if (this.paused) return; // `resume` runs it, and `flush`'s waiters wait for that.\n if (this.pending === null || this.state.status === \"conflict\" || this.disposed) {\n this.settle();\n return;\n }\n const doc = this.pending;\n const rev = this.state.rev;\n this.pending = null;\n this.set({ status: \"saving\", error: null });\n this.inFlight = (async () => {\n try {\n const result = await this.opts.save(rev, doc);\n if (isConflict(result)) {\n // Theirs is in the store; ours stays the person's, unsaved.\n this.pending = this.pending ?? doc;\n this.set({ status: \"conflict\", conflict: { doc: result.conflict, rev: result.rev } });\n return;\n }\n this.saved = doc;\n this.retries = 0;\n this.set({ rev: result.rev, savedAt: this.opts.now(), status: this.pending !== null ? \"pending\" : \"saved\" });\n } catch (err) {\n this.pending = this.pending ?? doc;\n const delay = Math.min(60_000, this.opts.retryDelay * 2 ** this.retries++);\n this.set({ status: \"error\", error: err instanceof Error ? err : new Error(String(err)) });\n if (!this.disposed) this.schedule(delay);\n } finally {\n this.inFlight = null;\n }\n })();\n await this.inFlight;\n if (this.pending !== null && this.state.status === \"pending\") return this.run();\n this.settle();\n }\n\n private settle() {\n if (this.dirty && this.state.status !== \"conflict\" && this.state.status !== \"error\") return;\n const waiters = this.waiters;\n this.waiters = [];\n for (const w of waiters) {\n if (this.state.status === \"conflict\") w.reject(new AutosaveBlockedError(\"conflict\", \"Someone else saved this first. Load their version or keep yours before going on.\"));\n else if (this.state.status === \"error\") w.reject(new AutosaveBlockedError(\"error\", `The last change couldn't be saved: ${this.state.error?.message ?? \"unknown error\"}`));\n else w.resolve();\n }\n }\n\n /** Save now; resolves when nothing is waiting, rejects on a conflict or a failed save. */\n flush(): Promise<void> {\n if (this.timer !== null) {\n this.opts.clearTimer(this.timer);\n this.timer = null;\n }\n if (!this.dirty) return Promise.resolve();\n if (this.state.status === \"conflict\") return Promise.reject(new AutosaveBlockedError(\"conflict\", \"Someone else saved this first. Load their version or keep yours before going on.\"));\n const done = new Promise<void>((resolve, reject) => this.waiters.push({ resolve, reject }));\n if (this.state.status === \"error\") this.set({ status: \"pending\" });\n void this.run();\n return done;\n }\n\n /** Conflict: take the store's document. Returns it; unsaved changes are discarded. */\n reload(): T | null {\n const conflict = this.state.conflict;\n if (!conflict) return null;\n this.pending = null;\n this.saved = conflict.doc;\n this.set({ status: \"saved\", rev: conflict.rev, conflict: null, error: null });\n this.settle();\n return conflict.doc;\n }\n\n /** Conflict: save this person's document over the store's. */\n overwrite(): Promise<void> {\n const conflict = this.state.conflict;\n if (!conflict) return Promise.resolve();\n this.pending = this.pending ?? this.saved;\n this.set({ status: \"pending\", rev: conflict.rev, conflict: null });\n return this.flush();\n }\n\n /**\n * The store moved on without a conflict (a page move bumped its revision,\n * a publish migrated it): adopt its revision. `doc` replaces the saved\n * copy when given; unsaved changes are kept and saved on the new revision.\n */\n rebase(rev: number, doc?: T): void {\n if (doc !== undefined) this.saved = doc;\n this.set({ rev });\n }\n\n /** Is saving held (`pause`)? */\n get isPaused(): boolean {\n return this.paused;\n }\n\n /**\n * Hold every save, for as long as the store must not change under the\n * caller (a publish). A save already in flight lands; changes keep\n * collecting and are saved on `resume`.\n */\n pause(): void {\n this.paused = true;\n if (this.timer !== null) this.opts.clearTimer(this.timer);\n this.timer = null;\n }\n\n /** Save again: what collected while paused is saved now, on the current revision. */\n resume(): void {\n if (!this.paused) return;\n this.paused = false;\n if (this.disposed) return;\n if (this.pending !== null && this.state.status !== \"conflict\") this.schedule(0);\n else this.settle();\n }\n\n dispose(): void {\n this.disposed = true;\n if (this.timer !== null) this.opts.clearTimer(this.timer);\n this.timer = null;\n }\n}\n","/**\n * Between Genesis documents and Puck's data.\n *\n * A Genesis section node is `{ id, type, v, variant, hidden, hideOn,\n * placeholder, props }`; a Puck item is `{ type, props: { id, ...props } }`.\n * The node's own fields travel in the Puck props under `_` keys (`_variant`,\n * `_hidden`, `_hideOn`, `_v`, `_placeholder`) that no section schema may use,\n * and come back out on save. A page's header and footer (site parts) are\n * slots on Puck's root, so the canvas shows and edits the whole page.\n *\n * The editor's Add picker offers each section's presets: a preset after the\n * first is its own Puck component, `type__n`, and turns back into `type` on\n * save, so stored documents only ever name registered types.\n */\nimport { getSection, type AnySectionDefinition } from \"../core/registry\";\nimport type { PageDoc, SectionNode, Seo, SiteDoc } from \"../core/schemas\";\nimport { stableHash } from \"../core/theme\";\n\n/** Puck's item shape, as far as the editor needs it. */\nexport interface PuckItem {\n type: string;\n props: Record<string, unknown> & { id: string };\n}\n\n/** Puck's page data as the editor builds it. */\nexport interface EditorData {\n root: { props: EditorRootProps };\n content: PuckItem[];\n}\n\nexport interface EditorRootProps {\n title: string;\n hideSiteChrome?: boolean;\n seo?: Seo;\n /** The site header's sections (slot). */\n header: PuckItem[];\n /** The site footer's sections (slot). */\n footer: PuckItem[];\n [key: string]: unknown;\n}\n\n/** Keys a section schema may not use: they carry the node's own fields. */\nexport const NODE_KEYS = [\"_variant\", \"_hidden\", \"_hideOn\", \"_v\", \"_placeholder\"] as const;\n\n/** The Puck component name of a section's preset: `hero` for the first, `hero__1` for the second (`_` never appears in a section type, and Puck builds ids from the name, so it must be id-safe). */\nexport const presetComponentName = (type: string, index: number) => (index === 0 ? type : `${type}__${index}`);\n\n/** The section type a Puck component name stands for. */\nexport const sectionTypeOf = (componentName: string) => componentName.split(\"__\")[0]!;\n\ntype Lookup = (type: string) => AnySectionDefinition | undefined;\ntype SlotKeys = (type: string) => readonly string[];\n\nconst noSlots: SlotKeys = () => [];\n\nconst hideOnValue = (hideOn: readonly string[]): string => (hideOn.includes(\"mobile\") && hideOn.includes(\"desktop\") ? \"both\" : (hideOn[0] ?? \"none\"));\n\n/** A node as a Puck item. Unknown types keep their props, so nothing is lost. */\nexport function nodeToItem(node: SectionNode, slotKeys: SlotKeys = noSlots): PuckItem {\n const props: Record<string, unknown> = { ...structuredClone(node.props) };\n for (const key of slotKeys(node.type)) {\n const nested = props[key];\n if (Array.isArray(nested)) props[key] = nested.map((n) => nodeToItem(n as SectionNode, slotKeys));\n }\n return {\n type: node.type,\n props: {\n ...props,\n id: node.id,\n _v: node.v,\n ...(node.variant ? { _variant: node.variant } : {}),\n _hidden: node.hidden === true,\n _hideOn: node.hideOn?.length ? hideOnValue(node.hideOn) : \"none\",\n ...(node.placeholder ? { _placeholder: true } : {}),\n },\n };\n}\n\n/**\n * Empty optional values out: `\"\"`, and objects left with nothing in them\n * (an optional button whose fields were cleared). A required field that\n * empties is then reported by the section's schema, never saved as `\"\"`.\n * Strings inside arrays stay as they are (an empty one is the schema's to\n * report, not ours to drop).\n */\nexport function pruneEmpty(value: unknown): unknown {\n if (typeof value === \"string\") return value === \"\" ? undefined : value;\n if (Array.isArray(value)) return value.map((v) => (typeof v === \"string\" ? v : (pruneEmpty(v) ?? {})));\n if (value && typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n const pruned = pruneEmpty(v);\n if (pruned !== undefined) out[k] = pruned;\n }\n return Object.keys(out).length ? out : undefined;\n }\n return value;\n}\n\nconst ARRAY_BOOKKEEPING = new Set([\"_arrayId\", \"_originalIndex\", \"_currentIndex\"]);\n\n/** Puck's internal array bookkeeping, which never belongs in a document. */\nfunction stripArrayIds(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(stripArrayIds);\n if (value && typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) if (!ARRAY_BOOKKEEPING.has(k)) out[k] = stripArrayIds(v);\n return out;\n }\n return value;\n}\n\n/**\n * A section id the schema accepts (1–64 letters, digits, `-`, `_`). Puck makes\n * ids for dragged-in and duplicated sections from the component name and a\n * UUID; the same id always maps to the same safe one, so saves stay stable.\n */\nexport function safeSectionId(id: string): string {\n if (/^[A-Za-z0-9_-]{1,64}$/.test(id)) return id;\n const cleaned = id.replace(/[^A-Za-z0-9_-]+/g, \"-\").replace(/^-+/, \"\");\n if (cleaned.length <= 64 && cleaned.length > 0) return cleaned;\n // Too long: keep the start (it names the type) and a hash of the whole, so two long ids don't collide.\n let h = 0x811c9dc5;\n for (let i = 0; i < id.length; i++) h = Math.imul(h ^ id.charCodeAt(i), 0x01000193) >>> 0;\n return `${cleaned.slice(0, 55)}-${h.toString(36)}`.slice(0, 64) || `s${h.toString(36)}`;\n}\n\nexport interface FromItemOptions {\n lookup?: Lookup;\n slotKeys?: SlotKeys;\n /**\n * A hash of the props each template placeholder had when the editor\n * opened it (`placeholderSnapshot`), by section id. A placeholder stays one only while its props are unchanged:\n * editing it clears the flag.\n */\n placeholders?: ReadonlyMap<string, string>;\n}\n\n/** A Puck item as a node. */\nexport function itemToNode(item: PuckItem, options: FromItemOptions = {}): SectionNode {\n const lookup = options.lookup ?? getSection;\n const type = sectionTypeOf(item.type);\n const def = lookup(type);\n const { id, _variant, _hidden, _hideOn, _v, _placeholder, ...rest } = item.props as Record<string, unknown> & { id: string };\n const slotKeys = options.slotKeys ?? noSlots;\n const slots = new Set(slotKeys(type));\n const plain = Object.fromEntries(Object.entries(rest).filter(([k]) => !slots.has(k)));\n const props = (stripArrayIds(pruneEmpty(plain)) ?? {}) as Record<string, unknown>;\n for (const key of slots) {\n const nested = rest[key];\n props[key] = Array.isArray(nested) ? nested.map((n) => itemToNode(n as PuckItem, options)) : [];\n }\n const hideOn: (\"mobile\" | \"desktop\")[] | undefined =\n _hideOn === \"both\" ? [\"mobile\", \"desktop\"] : _hideOn === \"mobile\" || _hideOn === \"desktop\" ? [_hideOn] : undefined;\n const original = options.placeholders?.get(String(id));\n const placeholder = _placeholder === true && original !== undefined && original === placeholderHash(props);\n return {\n id: safeSectionId(String(id)),\n type,\n v: typeof _v === \"number\" ? _v : (def?.version ?? 1),\n ...(typeof _variant === \"string\" ? { variant: _variant } : def ? { variant: def.defaultVariant } : {}),\n ...(_hidden === true ? { hidden: true } : {}),\n ...(hideOn ? { hideOn } : {}),\n ...(placeholder ? { placeholder: true } : {}),\n props,\n };\n}\n\n/** A placeholder's props as `itemToNode` sees them (empty values out), in any key order. */\nconst placeholderHash = (props: Record<string, unknown>) => stableHash(stripArrayIds(pruneEmpty(props)) ?? {});\n\n/** A hash of every placeholder node's props, to tell later whether it was edited. */\nexport function placeholderSnapshot(nodes: readonly SectionNode[], into = new Map<string, string>()): Map<string, string> {\n for (const n of nodes) if (n.placeholder) into.set(n.id, placeholderHash(n.props));\n return into;\n}\n\n/** A page (and its site's header and footer) as the editor's Puck data. */\nexport function toEditorData(page: PageDoc, site: Pick<SiteDoc, \"header\" | \"footer\">, slotKeys: SlotKeys = noSlots): EditorData {\n const { title, hideSiteChrome, ...restRoot } = page.root.props;\n return {\n root: {\n props: {\n ...restRoot,\n title,\n ...(hideSiteChrome ? { hideSiteChrome: true } : {}),\n ...(page.seo ? { seo: structuredClone(page.seo) } : {}),\n header: site.header.map((n) => nodeToItem(n, slotKeys)),\n footer: site.footer.map((n) => nodeToItem(n, slotKeys)),\n },\n },\n content: page.content.map((n) => nodeToItem(n, slotKeys)),\n };\n}\n\nexport interface FromEditorResult {\n page: PageDoc;\n header: SectionNode[];\n footer: SectionNode[];\n}\n\n/** The editor's Puck data back as a page and the site's header and footer. */\nexport function fromEditorData(data: { root?: { props?: Record<string, unknown> }; content?: unknown[] }, options: FromItemOptions = {}): FromEditorResult {\n const rootProps = (data.root?.props ?? {}) as Partial<EditorRootProps>;\n const { header, footer, seo, title, hideSiteChrome, ...restRoot } = rootProps;\n const items = (list: unknown) => (Array.isArray(list) ? (list as PuckItem[]).map((i) => itemToNode(i, options)) : []);\n const cleanSeo = stripArrayIds(pruneEmpty(seo)) as Seo | undefined;\n const extra = (pruneEmpty(restRoot) ?? {}) as Record<string, unknown>;\n const page: PageDoc = {\n schemaVersion: 1,\n root: { props: { ...extra, title: typeof title === \"string\" ? title : \"\", ...(hideSiteChrome === true ? { hideSiteChrome: true } : {}) } },\n content: items(data.content),\n ...(cleanSeo ? { seo: cleanSeo } : {}),\n };\n return { page, header: items(header), footer: items(footer) };\n}\n\n/** The id of the section that gets the page's `h1`: the first visible one that provides it. */\nexport function h1SectionId(content: readonly PuckItem[], lookup: Lookup = getSection): string | null {\n for (const item of content) {\n if (item.props._hidden === true) continue;\n if (lookup(sectionTypeOf(item.type))?.providesH1) return item.props.id;\n }\n return null;\n}\n\n/** How many sections of each type the page holds, in every zone (for the Add picker's limits). */\nexport function countTypes(data: Pick<EditorData, \"content\"> & { root?: { props?: Partial<EditorRootProps> } }): Map<string, number> {\n const counts = new Map<string, number>();\n const add = (items: readonly PuckItem[] | undefined) => {\n for (const item of items ?? []) {\n const type = sectionTypeOf(item.type);\n counts.set(type, (counts.get(type) ?? 0) + 1);\n }\n };\n add(data.content);\n add(data.root?.props?.header);\n add(data.root?.props?.footer);\n return counts;\n}\n","/**\n * What the editor's fields reach for that isn't in Puck's props: the store\n * and site (for uploads), the asset library, and the image picker. Provided\n * by `SiteEditor`; a field rendered outside it says so.\n */\nimport { createContext, useContext } from \"react\";\nimport type { Asset, AssetMeta, SiteStore } from \"../core/store\";\n\n/** The host's asset library, beside the store's `putAsset` uploads. */\nexport interface EditorAssets {\n /** The images and files a site already has (shown in the picker's Library). */\n list?: (siteId: string) => Promise<Asset[]>;\n /** Upload, instead of the store's `putAsset` (for a host that stores files elsewhere). */\n upload?: (siteId: string, file: File, meta: AssetMeta) => Promise<Asset>;\n /** The largest upload, in bytes. Default 10 MB. */\n maxBytes?: number;\n}\n\nexport interface PickedImage {\n src: string;\n alt: string;\n decorative?: boolean;\n width?: number;\n height?: number;\n}\n\nexport interface EditorServices {\n siteId: string;\n store: Pick<SiteStore, \"putAsset\">;\n assets?: EditorAssets;\n /**\n * Open the image picker; resolves with the choice, or null when cancelled. `altElsewhere`: the\n * field only takes the address and its alt text is a field of its own (a gallery photo), so the\n * picker doesn't ask for it.\n */\n pickImage(options?: { current?: PickedImage; altElsewhere?: boolean }): Promise<PickedImage | null>;\n}\n\nexport const EditorServicesContext = createContext<EditorServices | null>(null);\n\nexport function useEditorServices(): EditorServices {\n const services = useContext(EditorServicesContext);\n if (!services) throw new Error(\"genesis-sites/editor: a field was rendered outside <SiteEditor>.\");\n return services;\n}\n","/**\n * The editor's own field controls (Puck custom fields), on Genesis UI: the\n * image picker with alt text, rich text, one-per-line lists, and the\n * honest \"can't be edited here\".\n */\nimport * as React from \"react\";\nimport type { CustomField } from \"@puckeditor/core\";\nimport { Button } from \"@marktiderman/genesis-ui/button\";\nimport { Label } from \"@marktiderman/genesis-ui/label\";\nimport { Switch } from \"@marktiderman/genesis-ui/switch\";\nimport { Textarea } from \"@marktiderman/genesis-ui/textarea\";\nimport { RichTextEditor } from \"@marktiderman/genesis-ui/rich-text-editor\";\nimport type { RichTextDoc } from \"@marktiderman/genesis-ui/rich-text\";\nimport { isSafeImageSrc } from \"../core/urls\";\nimport { useEditorServices, type PickedImage } from \"./services\";\n\ninterface FieldRenderProps<V> {\n field: CustomField<V>;\n name: string;\n id: string;\n value: V;\n onChange: (value: V) => void;\n readOnly?: boolean;\n}\n\ninterface ImageValue {\n src?: string;\n alt?: string;\n decorative?: boolean;\n width?: number;\n height?: number;\n [key: string]: unknown;\n}\n\nfunction Thumb({ src, alt }: { src?: string | undefined; alt: string }) {\n if (!src) return <div className=\"flex h-24 w-full items-center justify-center rounded-md border border-dashed border-border text-sm text-muted-foreground\">No image</div>;\n if (!isSafeImageSrc(src)) return <div className=\"rounded-md border border-destructive p-2 text-sm text-destructive\">This address can't be used for an image: use a site path or an https link.</div>;\n return <img src={src} alt={alt} className=\"h-24 w-full rounded-md border border-border object-cover\" />;\n}\n\n/** An image object: the picker, alt text (required unless decorative), and remove. */\nexport function ImageField({ field, id, value, onChange, readOnly }: FieldRenderProps<ImageValue | undefined>) {\n const services = useEditorServices();\n const image = value ?? {};\n const missingAlt = Boolean(image.src) && !image.alt?.trim() && image.decorative !== true;\n const choose = async () => {\n const picked = await services.pickImage(image.src ? { current: image as PickedImage } : {});\n if (!picked) return;\n // The new image replaces every image attribute (alt, decorative, size, focal point); other props stay.\n const { src: _s, alt: _a, decorative: _d, width: _w, height: _h, focal: _f, ...rest } = image;\n onChange({ ...rest, ...picked });\n };\n return (\n <div className=\"flex flex-col gap-2\" role=\"group\" aria-labelledby={`${id}-label`}>\n <span id={`${id}-label`} className=\"text-sm font-medium\">\n {field.label}\n </span>\n <Thumb src={image.src} alt={image.alt ?? \"\"} />\n <div className=\"flex gap-2\">\n <Button type=\"button\" size=\"sm\" variant=\"outline\" onClick={choose} disabled={readOnly}>\n {image.src ? \"Replace image\" : \"Choose image\"}\n </Button>\n {image.src ? (\n <Button type=\"button\" size=\"sm\" variant=\"ghost\" onClick={() => onChange(undefined)} disabled={readOnly}>\n Remove\n </Button>\n ) : null}\n </div>\n {image.src ? (\n <>\n <Label htmlFor={`${id}-alt`}>Alt text</Label>\n <Textarea\n id={`${id}-alt`}\n value={image.alt ?? \"\"}\n rows={2}\n maxLength={300}\n disabled={readOnly || image.decorative === true}\n aria-invalid={missingAlt || undefined}\n aria-describedby={`${id}-alt-hint`}\n onChange={(e) => onChange({ ...image, alt: e.currentTarget.value })}\n />\n <p id={`${id}-alt-hint`} className={missingAlt ? \"text-sm text-destructive\" : \"text-sm text-muted-foreground\"}>\n {missingAlt ? \"Describe the image, or mark it decorative. A page can't be published without this.\" : \"What someone who can't see the image needs to know.\"}\n </p>\n <div className=\"flex items-center gap-2\">\n <Switch id={`${id}-decorative`} checked={image.decorative === true} disabled={readOnly} onCheckedChange={(on) => onChange({ ...image, decorative: on || undefined, ...(on ? { alt: \"\" } : {}) })} />\n <Label htmlFor={`${id}-decorative`}>Decorative (adds nothing a reader needs)</Label>\n </div>\n </>\n ) : null}\n </div>\n );\n}\n\n/** The `src` of a list item that is itself an image (a gallery photo). Its alt text is the item's next field. */\nexport function ImageSrcField({ field, id, value, onChange, readOnly }: FieldRenderProps<string | undefined>) {\n const services = useEditorServices();\n return (\n <div className=\"flex flex-col gap-2\" role=\"group\" aria-labelledby={`${id}-label`}>\n <span id={`${id}-label`} className=\"text-sm font-medium\">\n {field.label}\n </span>\n <Thumb src={value} alt=\"\" />\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n disabled={readOnly}\n onClick={async () => {\n const picked = await services.pickImage({ altElsewhere: true, ...(value ? { current: { src: value, alt: \"\" } } : {}) });\n if (picked) onChange(picked.src);\n }}\n >\n {value ? \"Replace image\" : \"Choose image\"}\n </Button>\n </div>\n );\n}\n\n/** Rich text: the Genesis editor, with h2 and h3 only (the page has its h1). */\nexport function RichTextField({ field, id, value, onChange, readOnly }: FieldRenderProps<RichTextDoc | undefined>) {\n return (\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor={id}>{field.label}</Label>\n <RichTextEditor id={id} value={value ?? { type: \"doc\", content: [] }} onChange={(doc) => onChange(doc)} readOnly={readOnly} headingLevels={[2, 3]} contentClassName=\"min-h-40\" />\n </div>\n );\n}\n\n/** A list of short strings, one per line. */\nexport function LinesField({ field, id, value, onChange, readOnly }: FieldRenderProps<string[] | undefined>) {\n const max = (field.metadata as { maxItems?: number } | undefined)?.maxItems;\n const [text, setText] = React.useState(() => (value ?? []).join(\"\\n\"));\n const lastSent = React.useRef(value);\n // Puck may hand the list back as a copy: compare by content, or a just-typed newline would vanish.\n React.useEffect(() => {\n if (JSON.stringify(value ?? []) !== JSON.stringify(lastSent.current ?? [])) setText((value ?? []).join(\"\\n\"));\n }, [value]);\n return (\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor={id}>{field.label}</Label>\n <Textarea\n id={id}\n value={text}\n rows={4}\n disabled={readOnly}\n aria-describedby={`${id}-hint`}\n onChange={(e) => {\n const next = e.currentTarget.value;\n setText(next);\n const lines = next.split(\"\\n\").map((l) => l.trim()).filter(Boolean);\n lastSent.current = lines;\n onChange(lines);\n }}\n />\n <p id={`${id}-hint`} className=\"text-sm text-muted-foreground\">\n One per line{max ? `, up to ${max}` : \"\"}.\n </p>\n </div>\n );\n}\n\n/** A prop the editor has no field for: said plainly, never dropped. */\nexport function UnsupportedField({ field }: FieldRenderProps<unknown>) {\n return (\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-sm font-medium\">{field.label}</span>\n <p className=\"text-sm text-muted-foreground\">This can't be edited here yet; it's kept as it is.</p>\n </div>\n );\n}\n","/**\n * Editor fields from a section's JSON Schema (`sectionJsonSchema`, the zod\n * schema's input side), so a new section gets its fields with no editor\n * change:\n *\n * - `x-genesis-kind: \"image\"` (or any object with `src` and `alt`) → the\n * image picker, which asks for alt text;\n * - `x-genesis-kind: \"rich-text\"` → the Genesis rich text editor;\n * - `x-genesis-kind: \"slot\"` → a Puck slot (nested sections);\n * - an enum, or a union of constants → a select;\n * - a boolean → a yes/no radio; a number → a number input;\n * - a string → text, or a textarea when it may run past 160 characters;\n * - an object → its fields (a record keyed by an enum, such as\n * `z.partialRecord(Day, …)`, gets one optional field per key); an array of\n * objects → a list of them; an array of strings → one per line.\n *\n * Anything else gets a field that says it can't be edited here, and a\n * warning in the console, so a gap is visible rather than silent.\n */\nimport type { Field, Fields } from \"@puckeditor/core\";\nimport type { AnySectionDefinition } from \"../core/registry\";\nimport { sectionJsonSchema } from \"../core/registry\";\nimport { NODE_KEYS } from \"./data\";\nimport { ImageField, ImageSrcField, LinesField, RichTextField, UnsupportedField } from \"./field-components\";\n\ntype JsonSchema = Record<string, unknown> & {\n type?: string | string[];\n title?: string;\n properties?: Record<string, JsonSchema>;\n propertyNames?: JsonSchema;\n additionalProperties?: JsonSchema | boolean;\n required?: string[];\n items?: JsonSchema;\n enum?: unknown[];\n const?: unknown;\n anyOf?: JsonSchema[];\n oneOf?: JsonSchema[];\n maxLength?: number;\n minItems?: number;\n maxItems?: number;\n minimum?: number;\n maximum?: number;\n exclusiveMinimum?: number;\n default?: unknown;\n format?: string;\n \"x-genesis-kind\"?: string;\n \"x-genesis-allow\"?: string[];\n};\n\n/** Building-block titles that say what a value is, not what it's for: the key names it better. */\nconst GENERIC_TITLES = new Set([\"Link\", \"Image\", \"Rich text\"]);\n\n/** `primaryCta` → \"Primary CTA\"; `hideOn` → \"Hide on\". */\nexport function humanize(key: string): string {\n const words = key\n .replace(/[_-]+/g, \" \")\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .map((w) => (w === \"href\" ? \"link\" : w === \"cta\" || w === \"seo\" || w === \"faq\" || w === \"url\" ? w.toUpperCase() : w));\n const text = words.join(\" \");\n return text.charAt(0).toUpperCase() + text.slice(1);\n}\n\nconst labelFor = (key: string, schema: JsonSchema) => (schema.title && !GENERIC_TITLES.has(schema.title) ? schema.title : humanize(key));\n\nconst typeOf = (schema: JsonSchema): string | undefined => (Array.isArray(schema.type) ? schema.type.find((t) => t !== \"null\") : schema.type);\n\nexport const isImageSchema = (schema: JsonSchema): boolean =>\n schema[\"x-genesis-kind\"] === \"image\" || (typeOf(schema) === \"object\" && Boolean(schema.properties?.src) && Boolean(schema.properties?.alt));\n\nconst SUMMARY_KEYS = [\"title\", \"name\", \"label\", \"question\", \"heading\", \"value\", \"quote\", \"caption\", \"alt\"];\n\nfunction summaryOf(item: Record<string, unknown> | undefined, index?: number): string {\n for (const key of SUMMARY_KEYS) {\n const v = item?.[key];\n if (typeof v === \"string\" && v.trim()) return v.length > 40 ? `${v.slice(0, 40)}…` : v;\n }\n return `Item ${(index ?? 0) + 1}`;\n}\n\n/** The empty value a new list item starts with, from its schema's defaults. */\nfunction defaultValue(schema: JsonSchema): unknown {\n if (schema.default !== undefined) return structuredClone(schema.default);\n const t = typeOf(schema);\n if (t === \"object\" && schema.properties && !isImageSchema(schema)) {\n const out: Record<string, unknown> = {};\n for (const key of schema.required ?? []) {\n const v = defaultValue(schema.properties[key] ?? {});\n if (v !== undefined) out[key] = v;\n }\n return out;\n }\n if (t === \"string\" && !schema.enum) return \"\";\n if (t === \"array\") return [];\n return undefined;\n}\n\nexport interface FieldContext {\n /** Where a gap is reported: `hero.image`. */\n path: string;\n /** Collected paths no field could be made for. */\n unsupported: string[];\n /** Collected slot keys (top level only). */\n slots: string[];\n /** Section types a slot may hold, when its schema doesn't say. */\n slotAllow?: string[];\n}\n\n/** Select options; an optional value gets an empty choice, named after the schema's default when it has one. */\nfunction options(values: readonly unknown[], required: boolean, fallback?: unknown) {\n const opts = values.map((v) => ({ label: typeof v === \"string\" ? humanize(v) : String(v), value: v as string | number | boolean }));\n const empty = fallback === undefined ? \"None\" : `Default (${typeof fallback === \"string\" ? humanize(fallback).toLowerCase() : String(fallback)})`;\n return required ? opts : [{ label: empty, value: \"\" }, ...opts];\n}\n\n/** One field for one property, or a field that says it can't be edited. */\nexport function fieldFor(key: string, schema: JsonSchema, required: boolean, ctx: FieldContext): Field {\n const label = labelFor(key, schema);\n const path = ctx.path ? `${ctx.path}.${key}` : key;\n const kind = schema[\"x-genesis-kind\"];\n\n if (kind === \"slot\") {\n // Only a section's own props become slots (data.ts reads and writes them at the top level); a slot inside an\n // object or a list item has no path there yet, so it is reported, not edited.\n if (ctx.path !== \"\") {\n ctx.unsupported.push(path);\n return { type: \"custom\", label, render: UnsupportedField };\n }\n ctx.slots.push(key);\n return { type: \"slot\", label, ...((schema[\"x-genesis-allow\"] ?? ctx.slotAllow) ? { allow: schema[\"x-genesis-allow\"] ?? ctx.slotAllow } : {}) };\n }\n if (kind === \"rich-text\") return { type: \"custom\", label, render: RichTextField };\n if (isImageSchema(schema)) return { type: \"custom\", label, render: ImageField, metadata: { required } };\n\n const union = schema.anyOf ?? schema.oneOf;\n if (union) {\n const consts = union.filter((s) => \"const\" in s).map((s) => s.const);\n if (consts.length === union.length && consts.length > 0) return { type: \"select\", label, options: options(consts, required, schema.default) };\n const branch = union.find((s) => typeOf(s) !== \"null\");\n if (branch) return fieldFor(key, { ...branch, title: schema.title ?? branch.title }, required, ctx);\n }\n if (schema.enum) return { type: \"select\", label, options: options(schema.enum, required, schema.default) };\n\n switch (typeOf(schema)) {\n case \"boolean\":\n return {\n type: \"radio\",\n label,\n // Shown when the prop is unset, so the radio says what the section does.\n metadata: { default: schema.default === true },\n options: [\n { label: \"Yes\", value: true },\n { label: \"No\", value: false },\n ],\n };\n case \"number\":\n case \"integer\":\n return {\n type: \"number\",\n label,\n ...(typeof schema.minimum === \"number\" ? { min: schema.minimum } : typeof schema.exclusiveMinimum === \"number\" ? { min: schema.exclusiveMinimum + (typeOf(schema) === \"integer\" ? 1 : 0) } : {}),\n ...(typeof schema.maximum === \"number\" ? { max: schema.maximum } : {}),\n ...(typeOf(schema) === \"integer\" ? { step: 1 } : {}),\n };\n case \"string\":\n return {\n type: schema.format !== \"uri-reference\" && (schema.maxLength ?? 0) > 160 ? \"textarea\" : \"text\",\n label,\n ...(schema.format === \"uri-reference\" ? { placeholder: \"/about, #section or https://…\" } : {}),\n };\n case \"object\": {\n const keyed = enumKeyedProperties(schema);\n if (keyed) return { type: \"object\", label, objectFields: objectFields({ ...schema, properties: keyed, required: [] }, { ...ctx, path }) };\n if (!schema.properties) break;\n return { type: \"object\", label, objectFields: objectFields(schema, { ...ctx, path }) };\n }\n case \"array\": {\n const items = schema.items ?? {};\n if (typeOf(items) === \"string\") return { type: \"custom\", label, render: LinesField, metadata: { maxItems: schema.maxItems } };\n if (typeOf(items) === \"object\" && items.properties) {\n const arrayFields = isImageSchema(items) ? imageItemFields(items, { ...ctx, path: `${path}[]` }) : objectFields(items, { ...ctx, path: `${path}[]` });\n return {\n type: \"array\",\n label,\n arrayFields,\n defaultItemProps: (defaultValue(items) ?? {}) as Record<string, unknown>,\n getItemSummary: (item: Record<string, unknown>, index?: number) => summaryOf(item, index),\n ...(typeof schema.minItems === \"number\" ? { min: schema.minItems } : {}),\n ...(typeof schema.maxItems === \"number\" ? { max: schema.maxItems } : {}),\n };\n }\n break;\n }\n }\n ctx.unsupported.push(path);\n return { type: \"custom\", label, render: UnsupportedField };\n}\n\n/** A record keyed by an enum (`z.partialRecord(Day, Line(20))`): one optional property per key, or null when it isn't one. */\nfunction enumKeyedProperties(schema: JsonSchema): Record<string, JsonSchema> | null {\n const keys = schema.propertyNames?.enum;\n const value = schema.additionalProperties;\n if (schema.properties || !keys?.length || !keys.every((k) => typeof k === \"string\") || !value || typeof value !== \"object\") return null;\n return Object.fromEntries((keys as string[]).map((k) => [k, value]));\n}\n\nfunction objectFields(schema: JsonSchema, ctx: FieldContext): Record<string, Field> {\n const required = new Set(schema.required ?? []);\n const out: Record<string, Field> = {};\n for (const [key, prop] of Object.entries(schema.properties ?? {})) out[key] = fieldFor(key, prop, required.has(key), ctx);\n return out;\n}\n\n/** A list item that is itself an image (a gallery photo): the picker for `src`, then its other fields. */\nfunction imageItemFields(schema: JsonSchema, ctx: FieldContext): Record<string, Field> {\n const out: Record<string, Field> = {\n src: { type: \"custom\", label: \"Image\", render: ImageSrcField },\n alt: { type: \"textarea\", label: \"Alt text (what the image shows)\" },\n decorative: {\n type: \"radio\",\n label: \"Decorative (no alt text needed)\",\n options: [\n { label: \"Yes\", value: true },\n { label: \"No\", value: false },\n ],\n },\n };\n const required = new Set(schema.required ?? []);\n for (const [key, prop] of Object.entries(schema.properties ?? {})) {\n if ([\"src\", \"alt\", \"decorative\", \"width\", \"height\", \"focal\"].includes(key)) continue;\n out[key] = fieldFor(key, prop, required.has(key), ctx);\n }\n return out;\n}\n\nexport interface SectionFields {\n fields: Fields;\n /** Props that hold nested sections (Puck slots). */\n slotKeys: string[];\n /** Props no field could be made for (shown as \"can't be edited here\"). */\n unsupported: string[];\n}\n\nconst warned = new Set<string>();\n\n/**\n * Every field of a section: its layout (variant) first, then its props from\n * the JSON Schema, then where it shows.\n *\n * @stability Beta\n */\nexport function sectionFields(def: AnySectionDefinition, options: { slotAllow?: string[] } = {}): SectionFields {\n const schema = sectionJsonSchema(def) as JsonSchema;\n const ctx: FieldContext = { path: \"\", unsupported: [], slots: [], ...(options.slotAllow ? { slotAllow: options.slotAllow } : {}) };\n const fields: Record<string, Field> = {};\n if (def.variants.length > 1) {\n fields._variant = { type: \"select\", label: \"Layout\", options: def.variants.map((v) => ({ label: v.label, value: v.id })) };\n }\n for (const reserved of NODE_KEYS) {\n if (schema.properties?.[reserved]) throw new Error(`Section \"${def.type}\" has a prop named \"${reserved}\", which the editor reserves.`);\n }\n Object.assign(fields, objectFields(schema, ctx));\n fields._hidden = {\n type: \"radio\",\n label: \"Visibility\",\n options: [\n { label: \"Shown\", value: false },\n { label: \"Hidden (kept, never published)\", value: true },\n ],\n };\n fields._hideOn = {\n type: \"select\",\n label: \"Show on\",\n options: [\n { label: \"Every screen\", value: \"none\" },\n { label: \"Wider screens only\", value: \"mobile\" },\n { label: \"Phones only\", value: \"desktop\" },\n ],\n };\n if (ctx.unsupported.length) {\n const key = `${def.type}:${ctx.unsupported.join(\",\")}`;\n if (!warned.has(key)) {\n warned.add(key);\n console.warn(`[genesis-sites/editor] section \"${def.type}\": no editor field for ${ctx.unsupported.join(\", \")}; those props show as \"can't be edited here\".`);\n }\n }\n return { fields: fields as Fields, slotKeys: ctx.slots, unsupported: ctx.unsupported };\n}\n","/**\n * The Puck config, generated from the section registry: one component per\n * section preset, grouped by category, with fields from each section's JSON\n * Schema and a canvas render that is the section's own server-safe\n * renderer. A section registered tomorrow appears in the editor with no\n * change here.\n */\nimport * as React from \"react\";\nimport type { Config, Fields } from \"@puckeditor/core\";\nimport { migrateNode } from \"../core/migrate\";\nimport { SECTION_CATEGORIES, listSections, type AnySectionDefinition, type RenderContext, type SectionCategory } from \"../core/registry\";\nimport type { MenuItem, PageKind } from \"../core/schemas\";\nimport type { ResolvedForm } from \"../core/forms\";\nimport { itemToNode, presetComponentName, sectionTypeOf, type PuckItem } from \"./data\";\nimport { sectionFields } from \"./fields\";\n\n/** What the Add picker and its limits know about one Puck component. */\nexport interface ComponentInfo {\n type: string;\n /** The preset's name (the Add picker's label). */\n label: string;\n /** The section's own label. */\n sectionLabel: string;\n category: SectionCategory;\n placement: \"header\" | \"body\" | \"footer\";\n limit?: number;\n}\n\n/** What every section on the canvas is told about the page (Puck metadata). */\nexport interface CanvasMetadata {\n site: RenderContext[\"site\"];\n pagePath: string;\n /** Plain objects, not Maps: Puck copies its metadata. */\n forms: Readonly<Record<string, ResolvedForm | null>>;\n /** The section that gets the page's h1. */\n h1Id: string | null;\n /** Template placeholders' original props, by section id. */\n placeholders: Readonly<Record<string, string>>;\n}\n\nexport interface EditorConfigOptions {\n /** The page kind: sections not `enabledOn` it are left out of the picker. */\n kind?: PageKind;\n /** Sections to offer (default: every registered section). */\n sections?: readonly AnySectionDefinition[];\n /** How many of each type the page holds now; read when Puck asks whether one more may be added. */\n counts?: () => ReadonlyMap<string, number>;\n /**\n * Whether the page can't be changed now (a view-only editor, or a publish\n * running). Read with `counts`: a component's own `insert` overrides the\n * global permissions Puck is given, so it has to say no itself.\n */\n readOnly?: () => boolean;\n}\n\nexport interface EditorConfig {\n config: Config;\n /** Puck component name → what it is. */\n components: ReadonlyMap<string, ComponentInfo>;\n /** The props of a section type that hold nested sections. */\n slotKeys: (type: string) => readonly string[];\n}\n\nconst CATEGORY_TITLES: Record<SectionCategory, string> = {\n header: \"Header\",\n intro: \"Openings\",\n content: \"Content\",\n \"social-proof\": \"Social proof\",\n conversion: \"Calls to action\",\n footer: \"Footer\",\n};\n\nconst META = new Set([\"puck\", \"editMode\", \"id\"]);\n\nclass SectionBoundary extends React.Component<{ label: string; children: React.ReactNode }, { error: Error | null }> {\n override state: { error: Error | null } = { error: null };\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n override componentDidCatch(error: Error) {\n console.error(`[genesis-sites/editor] the ${this.props.label} section failed to draw.`, error);\n }\n override render() {\n if (this.state.error) return <Problem title={`The ${this.props.label} section couldn't be drawn`} lines={[this.state.error.message]} />;\n return this.props.children;\n }\n}\n\n/** A notice on the canvas, in plain inline styles: the site stylesheet may not have these classes. */\nfunction Problem({ title, lines }: { title: string; lines: string[] }) {\n return (\n <div role=\"alert\" style={{ margin: \"1rem\", padding: \"1rem 1.25rem\", border: \"2px dashed currentColor\", borderRadius: \"0.5rem\", fontFamily: \"system-ui, sans-serif\", fontSize: \"0.875rem\", lineHeight: 1.5 }}>\n <strong>{title}</strong>\n <ul style={{ margin: \"0.5rem 0 0\", paddingLeft: \"1.25rem\" }}>\n {lines.map((l, i) => (\n <li key={i}>{l}</li>\n ))}\n </ul>\n </div>\n );\n}\n\nfunction Tag({ children }: { children: React.ReactNode }) {\n return (\n <span style={{ position: \"absolute\", top: \"0.5rem\", right: \"0.5rem\", zIndex: 5, padding: \"0.125rem 0.5rem\", borderRadius: \"999px\", background: \"hsl(var(--foreground))\", color: \"hsl(var(--background))\", fontFamily: \"system-ui, sans-serif\", fontSize: \"0.75rem\", fontWeight: 600 }}>\n {children}\n </span>\n );\n}\n\nfunction CanvasSection({ def, componentName, input, slotKeys }: { def: AnySectionDefinition; componentName: string; input: Record<string, unknown>; slotKeys: readonly string[] }) {\n const meta = ((input.puck as { metadata?: CanvasMetadata } | undefined)?.metadata ?? {}) as Partial<CanvasMetadata>;\n const id = String(input.id);\n const props: Record<string, unknown> & { id: string } = { id };\n for (const [k, v] of Object.entries(input)) if (!META.has(k) && !slotKeys.includes(k)) props[k] = v;\n const node = itemToNode({ type: componentName, props } as PuckItem, { ...(meta.placeholders ? { placeholders: new Map(Object.entries(meta.placeholders)) } : {}) });\n const migrated = migrateNode(node);\n const slots = slotKeys.map((key) => {\n const Slot = input[key] as React.ComponentType<{ minEmptyHeight?: number }> | undefined;\n return typeof Slot === \"function\" ? (\n <div key={key} aria-label={`${def.label}: ${key}`} style={{ padding: \"0.5rem\" }}>\n <Slot minEmptyHeight={64} />\n </div>\n ) : null;\n });\n if (!migrated.node) {\n return <Problem title={`Fix the ${def.label} section to show it`} lines={migrated.issues.map((i) => i.message.replace(/^Section \\S+ \\([^)]*\\): /, \"\"))} />;\n }\n const ctx: RenderContext = {\n headingLevel: meta.h1Id === id ? 1 : 2,\n site: meta.site ?? { name: \"\", lang: \"en\", nav: [] as MenuItem[] },\n pagePath: meta.pagePath ?? \"/\",\n href: (href) => href,\n forms: new Map(Object.entries(meta.forms ?? {})),\n mode: \"preview\",\n idPrefix: `gs-${id}`,\n };\n const tags = [node.hidden ? \"Hidden: not published\" : null, node.hideOn?.includes(\"mobile\") ? \"Hidden on phones\" : null, node.hideOn?.includes(\"desktop\") ? \"Phones only\" : null, node.placeholder ? \"Sample content: replace it\" : null].filter(Boolean);\n return (\n <div style={{ position: \"relative\", ...(node.hidden ? { opacity: 0.45 } : {}) }} data-gs-section={def.type}>\n {tags.length ? <Tag>{tags.join(\" · \")}</Tag> : null}\n <SectionBoundary label={def.label}>{def.render({ props: migrated.node.props, variant: migrated.node.variant, node: migrated.node, ctx })}</SectionBoundary>\n {slots}\n </div>\n );\n}\n\n/**\n * The Puck config for one page kind, from the registry.\n *\n * @stability Beta\n */\nexport function createEditorConfig(options: EditorConfigOptions = {}): EditorConfig {\n const sections = (options.sections ?? listSections()).filter((def) => !options.kind || !def.enabledOn || def.enabledOn.includes(options.kind));\n const components: Config[\"components\"] = {};\n const info = new Map<string, ComponentInfo>();\n const slots = new Map<string, readonly string[]>();\n const byCategory = new Map<SectionCategory, string[]>();\n const names = (placement: ComponentInfo[\"placement\"]) => [...info.entries()].filter(([, i]) => i.placement === placement).map(([n]) => n);\n const bodyTypes = sections.filter((d) => (d.placement ?? \"body\") === \"body\").map((d) => d.type);\n\n for (const def of sections) {\n const { fields, slotKeys } = sectionFields(def, { slotAllow: bodyTypes });\n slots.set(def.type, slotKeys);\n const placement = def.placement ?? \"body\";\n def.presets.forEach((preset, i) => {\n const name = presetComponentName(def.type, i);\n info.set(name, { type: def.type, label: preset.name, sectionLabel: def.label, category: def.category, placement, ...(def.limit ? { limit: def.limit } : {}) });\n const list = byCategory.get(def.category) ?? [];\n list.push(name);\n byCategory.set(def.category, list);\n const limit = def.limit;\n components[name] = {\n label: i === 0 ? def.label : `${def.label}: ${preset.name}`,\n fields: fields as Fields,\n defaultProps: { ...structuredClone(preset.props as Record<string, unknown>), _v: def.version, _variant: preset.variant, _hidden: false, _hideOn: \"none\" },\n // Read each time Puck asks (the Add picker), so a section at its limit can't be dragged in.\n permissions: {\n get insert() {\n if (options.readOnly?.()) return false;\n return limit === undefined || (options.counts?.().get(def.type) ?? 0) < limit;\n },\n },\n render: (input: Record<string, unknown>) => <CanvasSection def={def} componentName={name} input={input} slotKeys={slotKeys} />,\n };\n });\n }\n\n const categories: Record<string, { title: string; components: string[] }> = {};\n for (const category of SECTION_CATEGORIES) {\n const list = byCategory.get(category);\n if (list?.length) categories[category] = { title: CATEGORY_TITLES[category], components: list };\n }\n\n const config: Config = {\n categories: { ...categories, other: { visible: false } } as Config[\"categories\"],\n components,\n root: {\n fields: {\n title: { type: \"text\", label: \"Page title\" },\n hideSiteChrome: {\n type: \"radio\",\n label: \"Site header and footer\",\n options: [\n { label: \"Show\", value: false },\n { label: \"Hide (a focused landing page)\", value: true },\n ],\n },\n header: { type: \"slot\", label: \"Site header\", allow: names(\"header\") },\n footer: { type: \"slot\", label: \"Site footer\", allow: names(\"footer\") },\n } as Fields,\n render: ({ children, header: Header, footer: Footer, hideSiteChrome }: { children: React.ReactNode; header?: React.ComponentType<{ minEmptyHeight?: number; style?: React.CSSProperties }>; footer?: React.ComponentType<{ minEmptyHeight?: number; style?: React.CSSProperties }>; hideSiteChrome?: boolean }) => (\n <>\n {!hideSiteChrome && Header ? <Header minEmptyHeight={48} style={{ height: \"auto\" }} /> : null}\n <main id=\"main\">{children}</main>\n {!hideSiteChrome && Footer ? <Footer minEmptyHeight={48} style={{ height: \"auto\" }} /> : null}\n </>\n ),\n },\n };\n return { config, components: info, slotKeys: (type) => slots.get(sectionTypeOf(type)) ?? [] };\n}\n","/**\n * Puck's chrome, drawn with Genesis UI: every field type, field labels, and\n * the Add picker's items (which also enforce each section's limit). So the\n * editor reads as part of the host app, not as stock Puck, and every\n * control has a real label.\n */\nimport * as React from \"react\";\nimport { createUsePuck, type Overrides } from \"@puckeditor/core\";\nimport { Badge } from \"@marktiderman/genesis-ui/badge\";\nimport { Button } from \"@marktiderman/genesis-ui/button\";\nimport { Input } from \"@marktiderman/genesis-ui/input\";\nimport { Label } from \"@marktiderman/genesis-ui/label\";\nimport { RadioGroup, RadioGroupItem } from \"@marktiderman/genesis-ui/radio-group\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@marktiderman/genesis-ui/select\";\nimport { Textarea } from \"@marktiderman/genesis-ui/textarea\";\nimport { cn } from \"@marktiderman/genesis-ui/utils\";\nimport { newSectionId } from \"../core/registry\";\nimport { scrollCanvasTo } from \"./canvas-dom\";\nimport { countTypes, sectionTypeOf, type EditorData } from \"./data\";\nimport type { ComponentInfo } from \"./config\";\n\nconst usePuck = createUsePuck();\n\n/**\n * Is the editor locked (view-only, or a publish holding it)? Puck's\n * permissions stop dragging, but these controls call Puck's raw `dispatch`,\n * which skips them: each control checks this itself.\n */\nexport const EditorLockContext = React.createContext(false);\n\ninterface BaseProps {\n field: { label?: string; placeholder?: string; options?: readonly { label: string; value: unknown }[]; min?: number; max?: number; step?: number; metadata?: unknown };\n name: string;\n id?: string;\n value: unknown;\n onChange: (value: unknown) => void;\n readOnly?: boolean;\n}\n\nconst fieldId = (p: BaseProps) => p.id ?? `gs-field-${p.name.replace(/[^a-zA-Z0-9_-]/g, \"-\")}`;\n\nfunction FieldShell({ id, label, children }: { id: string; label?: string | undefined; children: React.ReactNode }) {\n return (\n <div className=\"flex flex-col gap-1.5 py-1\">\n {label ? <Label htmlFor={id}>{label}</Label> : null}\n {children}\n </div>\n );\n}\n\nfunction TextInput(p: BaseProps) {\n const id = fieldId(p);\n return (\n <FieldShell id={id} label={p.field.label}>\n <Input id={id} name={p.name} value={typeof p.value === \"string\" ? p.value : \"\"} placeholder={p.field.placeholder} disabled={p.readOnly} onChange={(e) => p.onChange(e.currentTarget.value)} />\n </FieldShell>\n );\n}\n\nfunction TextareaInput(p: BaseProps) {\n const id = fieldId(p);\n return (\n <FieldShell id={id} label={p.field.label}>\n <Textarea id={id} name={p.name} rows={3} value={typeof p.value === \"string\" ? p.value : \"\"} placeholder={p.field.placeholder} disabled={p.readOnly} onChange={(e) => p.onChange(e.currentTarget.value)} />\n </FieldShell>\n );\n}\n\nfunction NumberInput(p: BaseProps) {\n const id = fieldId(p);\n return (\n <FieldShell id={id} label={p.field.label}>\n <Input\n id={id}\n name={p.name}\n type=\"number\"\n inputMode=\"decimal\"\n value={typeof p.value === \"number\" ? String(p.value) : \"\"}\n min={p.field.min}\n max={p.field.max}\n step={p.field.step}\n disabled={p.readOnly}\n onChange={(e) => {\n const raw = e.currentTarget.value;\n p.onChange(raw === \"\" ? undefined : Number(raw));\n }}\n />\n </FieldShell>\n );\n}\n\n/** Options carry any value (a number, a boolean); the controls key them by index. */\nconst indexOf = (options: readonly { value: unknown }[], value: unknown) => {\n const i = options.findIndex((o) => o.value === value || (value === undefined && (o.value === \"\" || o.value === false)));\n return i < 0 ? \"\" : String(i);\n};\n\nfunction SelectInput(p: BaseProps) {\n const id = fieldId(p);\n const options = p.field.options ?? [];\n return (\n <FieldShell id={id} label={p.field.label}>\n <Select value={indexOf(options, p.value)} disabled={p.readOnly} onValueChange={(i) => p.onChange(options[Number(i)]?.value)}>\n <SelectTrigger id={id} aria-label={p.field.label}>\n <SelectValue placeholder=\"Choose…\" />\n </SelectTrigger>\n <SelectContent>\n {options.map((o, i) => (\n <SelectItem key={i} value={String(i)}>\n {o.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </FieldShell>\n );\n}\n\nfunction RadioInput(p: BaseProps) {\n const id = fieldId(p);\n const options = p.field.options ?? [];\n // An unset yes/no shows its schema default (fields.ts puts it in metadata).\n const fallback = (p.field.metadata as { default?: unknown } | undefined)?.default;\n const value = p.value === undefined && fallback !== undefined ? fallback : p.value;\n return (\n <div className=\"flex flex-col gap-1.5 py-1\" role=\"group\" aria-labelledby={`${id}-label`}>\n <span id={`${id}-label`} className=\"text-sm font-medium leading-none\">\n {p.field.label}\n </span>\n <RadioGroup value={indexOf(options, value)} disabled={p.readOnly} onValueChange={(i) => p.onChange(options[Number(i)]?.value)} className=\"flex flex-wrap gap-4\" aria-labelledby={`${id}-label`}>\n {options.map((o, i) => (\n <div key={i} className=\"flex items-center gap-2\">\n <RadioGroupItem id={`${id}-${i}`} value={String(i)} />\n <Label htmlFor={`${id}-${i}`} className=\"font-normal\">\n {o.label}\n </Label>\n </div>\n ))}\n </RadioGroup>\n </div>\n );\n}\n\n/**\n * The Add picker's item: the preset's name, its section, and its limit. A\n * section at its limit can't be dragged in; it says why.\n */\nfunction ComponentItem({ name, info, announce }: { name: string; info: ReadonlyMap<string, ComponentInfo>; announce?: ((message: string) => void) | undefined }) {\n const data = usePuck((s) => s.appState.data) as unknown as EditorData;\n const meta = info.get(name);\n const type = sectionTypeOf(name);\n const used = React.useMemo(() => countTypes(data).get(type) ?? 0, [data, type]);\n const full = meta?.limit !== undefined && used >= meta.limit;\n const dispatch = usePuck((s) => s.dispatch);\n const locked = React.useContext(EditorLockContext);\n const label = meta?.label ?? name;\n /** Dragging isn't the only way in (WCAG 2.5.7): the button adds the section at the end of its zone and selects it. */\n const add = () => {\n if (locked) return;\n const zone = meta?.placement === \"header\" ? \"root:header\" : meta?.placement === \"footer\" ? \"root:footer\" : \"root:default-zone\";\n const list = zone === \"root:header\" ? data.root.props.header : zone === \"root:footer\" ? data.root.props.footer : data.content;\n const index = list?.length ?? 0;\n const id = newSectionId(type.replace(/-/g, \"\").slice(0, 6));\n dispatch({ type: \"insert\", componentType: name, destinationIndex: index, destinationZone: zone, id });\n dispatch({ type: \"setUi\", ui: { itemSelector: { index, zone } } });\n scrollCanvasTo(id, ref.current?.ownerDocument);\n announce?.(`${label} added at the end of the ${zone === \"root:header\" ? \"header\" : zone === \"root:footer\" ? \"footer\" : \"page\"}. Its fields are open; Up and Down move it.`);\n };\n // Puck draws each item twice (a static copy under the draggable one): hide the copy from assistive tech.\n const ref = React.useRef<HTMLDivElement>(null);\n React.useEffect(() => {\n const copy = ref.current?.closest<HTMLElement>('[class*=\"draggableBg\"]');\n if (copy) {\n copy.setAttribute(\"aria-hidden\", \"true\");\n copy.inert = true;\n }\n }, []);\n // Puck's wrapper is the drag handle; a section at its limit has `insert` off (config.tsx), so it can't be dragged.\n return (\n <div\n ref={ref}\n className={cn(\n \"flex w-full items-center justify-between gap-2 rounded-md border border-border bg-background px-3 py-2 text-left text-sm text-foreground\",\n full ? \"cursor-not-allowed opacity-60\" : \"cursor-grab hover:border-primary\",\n )}\n title={full ? `A page has at most ${meta?.limit} of these` : `Drag onto the page, or press Add: ${label}`}\n >\n <span className=\"flex min-w-0 flex-col\">\n <span className=\"font-medium\">{label}</span>\n {meta && meta.label !== meta.sectionLabel ? <span className=\"text-xs text-muted-foreground\">{meta.sectionLabel}</span> : null}\n </span>\n {full ? (\n <Badge variant=\"secondary\" className=\"shrink-0\">\n Limit reached\n </Badge>\n ) : (\n <Button type=\"button\" size=\"sm\" variant=\"outline\" className=\"h-7 shrink-0 px-2\" aria-label={`Add ${label}`} disabled={locked} onPointerDown={(e) => e.stopPropagation()} onClick={add}>\n Add\n </Button>\n )}\n </div>\n );\n}\n\n/**\n * Above the selected section's fields: its name and Move up, Move down and\n * Remove buttons, so a section can be placed and removed with the keyboard\n * (Puck's canvas and outline move sections only by dragging).\n */\nfunction SectionActions({ info, announce }: { info: ReadonlyMap<string, ComponentInfo>; announce?: ((message: string) => void) | undefined }) {\n const selected = usePuck((s) => s.selectedItem);\n const getSelectorForId = usePuck((s) => s.getSelectorForId);\n const getItemBySelector = usePuck((s) => s.getItemBySelector);\n const dispatch = usePuck((s) => s.dispatch);\n const locked = React.useContext(EditorLockContext);\n const upRef = React.useRef<HTMLButtonElement>(null);\n const downRef = React.useRef<HTMLButtonElement>(null);\n if (!selected) return null;\n const id = String(selected.props.id);\n const selector = getSelectorForId(id);\n if (!selector) return null;\n const label = info.get(selected.type)?.sectionLabel ?? selected.type;\n const { index, zone } = selector;\n const canUp = index > 0;\n const canDown = Boolean(getItemBySelector({ index: index + 1, zone }));\n const move = (by: -1 | 1) => {\n if (locked) return;\n const to = index + by;\n dispatch({ type: \"reorder\", sourceIndex: index, destinationIndex: to, destinationZone: zone });\n dispatch({ type: \"setUi\", ui: { itemSelector: { index: to, zone } } });\n scrollCanvasTo(id);\n announce?.(`${label} moved ${by < 0 ? \"up\" : \"down\"}, to position ${to + 1}.`);\n // At the top or bottom the pressed button turns off: keep focus on the other one.\n requestAnimationFrame(() => {\n const pressed = by < 0 ? upRef.current : downRef.current;\n if (pressed?.disabled) (by < 0 ? downRef.current : upRef.current)?.focus();\n });\n };\n return (\n <div className=\"mb-2 flex flex-wrap items-center justify-between gap-2 border-b border-border px-1 pb-2\" role=\"group\" aria-label={`${label} section`}>\n <span className=\"text-sm font-semibold\">{label}</span>\n <div className=\"flex gap-1\">\n <Button ref={upRef} type=\"button\" size=\"sm\" variant=\"outline\" disabled={locked || !canUp} onClick={() => move(-1)} aria-label={`Move ${label} up`}>\n Up\n </Button>\n <Button ref={downRef} type=\"button\" size=\"sm\" variant=\"outline\" disabled={locked || !canDown} onClick={() => move(1)} aria-label={`Move ${label} down`}>\n Down\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n aria-label={`Remove ${label}`}\n disabled={locked}\n onClick={() => {\n if (locked) return;\n dispatch({ type: \"remove\", index, zone });\n dispatch({ type: \"setUi\", ui: { itemSelector: null } });\n announce?.(`${label} removed. Undo brings it back.`);\n }}\n >\n Remove\n </Button>\n </div>\n </div>\n );\n}\n\nexport interface GenesisOverrideOptions {\n /** Say what an action did (a section added, moved or removed), for a live region. */\n announce?: (message: string) => void;\n}\n\nexport function genesisOverrides(info: ReadonlyMap<string, ComponentInfo>, extra: Partial<Overrides> = {}, options: GenesisOverrideOptions = {}): Partial<Overrides> {\n return {\n fields: ({ children }) => (\n <>\n <SectionActions info={info} announce={options.announce} />\n {children}\n </>\n ),\n fieldTypes: {\n text: TextInput as never,\n textarea: TextareaInput as never,\n number: NumberInput as never,\n select: SelectInput as never,\n radio: RadioInput as never,\n },\n fieldLabel: ({ children, label, el, className }) => {\n const El = el === \"div\" ? \"div\" : \"label\";\n return (\n <El className={cn(\"flex flex-col gap-1.5 py-1 text-sm font-medium\", className)}>\n <span>{label}</span>\n {children}\n </El>\n );\n },\n drawerItem: ({ name }) => <ComponentItem name={name} info={info} announce={options.announce} />,\n ...extra,\n };\n}\n","/**\n * What the editor's panels do to a site, as plain functions over a\n * `SiteStore`: check and publish, add, move, delete and reorder pages, and\n * the page templates. No React, so each is tested against the memory store.\n */\nimport { PublishBlockedError, prepareRelease, type PublishOptions, type SiteStore } from \"../core/store\";\nimport type { SiteIssue } from \"../core/a11y\";\nimport type { PageDoc, PageKind, PageMeta, Release } from \"../core/schemas\";\nimport { exampleBrands } from \"../core/examples\";\nimport { landingPage, starterSite } from \"../core/templates\";\nimport type { BrandInput } from \"../core/theme\";\nimport { DEFAULT_RESERVED_PATHS, pagePathProblems, type ReservedPaths } from \"../core/urls\";\n\n/** A store the editor can drive. `reorderPages` is optional: without it, page order is the store's. */\nexport type EditorSiteStore = SiteStore & {\n reorderPages?(siteId: string, pageIds: string[]): Promise<void>;\n};\n\nexport interface SiteCheck {\n issues: SiteIssue[];\n /** No errors: the site can be published. */\n publishable: boolean;\n}\n\n/**\n * Run the publish checks on the drafts as they are now (accessibility,\n * contrast, placeholders, paths), without publishing: what the Publish\n * panel lists, errors first.\n *\n * @stability Beta\n */\nexport async function checkSite(store: SiteStore, siteId: string, options: Pick<PublishOptions, \"brand\" | \"reserved\"> = {}): Promise<SiteCheck> {\n const draft = await store.getDraft(siteId);\n if (!draft) return { publishable: false, issues: [{ severity: \"error\", code: \"no-site\", message: `There's no site ${siteId}, or you can't edit it.` }] };\n const metas = await store.listPages(siteId);\n // In parallel: on a remote store each read is a round trip.\n const drafts = await Promise.all(metas.map((meta) => store.getPageDraft(meta.id)));\n const pages: { id: string; path: string; kind: PageKind; doc: PageDoc }[] = [];\n drafts.forEach((p, i) => {\n if (p) pages.push({ id: metas[i]!.id, path: p.path, kind: p.kind, doc: p.doc });\n });\n let issues: SiteIssue[];\n try {\n issues = prepareRelease(draft.site, pages, { reserved: options.reserved ?? DEFAULT_RESERVED_PATHS, ...(options.brand ? { brand: options.brand } : {}) }).issues;\n } catch (err) {\n if (!(err instanceof PublishBlockedError)) {\n // A draft that doesn't even form a snapshot (a schema the store let through): report it, don't throw.\n issues = [{ severity: \"error\", code: \"invalid-draft\", message: `The drafts can't be checked: ${(err as Error).message}` }];\n } else issues = err.issues;\n }\n const sorted = [...issues].sort((a, b) => (a.severity === b.severity ? 0 : a.severity === \"error\" ? -1 : 1));\n return { issues: sorted, publishable: !sorted.some((i) => i.severity === \"error\") };\n}\n\n/** Publish after checking: a site with errors is refused before the store is asked. */\nexport async function publishSite(store: SiteStore, siteId: string, options: { brand: BrandInput; note?: string; reserved?: ReservedPaths }): Promise<{ release: Release } | { blocked: SiteIssue[] }> {\n const check = await checkSite(store, siteId, options);\n if (!check.publishable) return { blocked: check.issues };\n try {\n const release = await store.publish(siteId, { brand: options.brand, ...(options.note?.trim() ? { note: options.note.trim() } : {}), ...(options.reserved ? { reserved: options.reserved } : {}) });\n return { release };\n } catch (err) {\n if (err instanceof PublishBlockedError) return { blocked: err.issues };\n throw err;\n }\n}\n\n/** Why a path can't be a page's here (empty when it can): the pattern, reserved paths, and pages already there. */\nexport function pathProblems(path: string, pages: readonly Pick<PageMeta, \"id\" | \"path\">[], options: { reserved?: ReservedPaths; except?: string } = {}): string[] {\n const problems = pagePathProblems(path, options.reserved ?? DEFAULT_RESERVED_PATHS);\n if (pages.some((p) => p.path === path && p.id !== options.except)) problems.push(`A page is already at ${path}.`);\n return problems;\n}\n\n/** A page's title as a path segment: \"Our classes\" → \"/our-classes\". */\nexport function slugify(title: string): string {\n const slug = title\n .normalize(\"NFKD\")\n .replace(/[̀-ͯ]/g, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .slice(0, 60)\n .replace(/-+$/g, \"\");\n return `/${slug || \"page\"}`;\n}\n\n/**\n * Move a page to a new address. The store writes a 301 from the old path\n * (and rewrites older redirects, so there are no chains). Refuses the home\n * page, reserved paths and a path another page has, before asking the store.\n */\nexport async function renamePage(store: SiteStore, pageId: string, path: string, options: { reserved?: ReservedPaths } = {}): Promise<PageMeta> {\n const current = await store.getPageDraft(pageId);\n if (!current) throw new Error(\"That page no longer exists.\");\n if (current.path === \"/\") throw new Error(\"The home page stays at /.\");\n const pages = await store.listPages(current.siteId);\n const problems = pathProblems(path, pages, { ...options, except: pageId });\n if (problems.length) throw new Error(problems.join(\" \"));\n return store.movePage(pageId, path);\n}\n\n/** A page a person can start from. */\nexport interface PageTemplate {\n id: string;\n label: string;\n description: string;\n kind: PageKind;\n doc(input: { title: string; brand: BrandInput }): PageDoc;\n}\n\nconst blank = (title: string): PageDoc => ({ schemaVersion: 1, root: { props: { title } }, content: [] });\n\n/**\n * The templates the Add page dialog offers: a blank page, the one-click\n * landing page from the brand, and each page of the starter site (about,\n * contact) after its home page.\n *\n * @stability Beta\n */\nexport function pageTemplates(): PageTemplate[] {\n const templates: PageTemplate[] = [\n { id: \"blank\", label: \"Blank page\", description: \"Start empty and add sections.\", kind: \"page\", doc: ({ title }) => blank(title) },\n {\n id: \"landing\",\n label: \"Landing page from your brand\",\n description: \"A hero, what you offer, quotes and a call to action, in one click.\",\n kind: \"landing\",\n doc: ({ title, brand }) => {\n const doc = landingPage({ brand, message: { headline: title } }).pages[0]!.doc;\n return { ...doc, root: { props: { ...doc.root.props, title } } };\n },\n },\n ];\n const starter = starterSite({ brand: exampleBrands.riverside, message: { headline: \"Your headline\" } });\n for (const page of starter.pages.slice(1)) {\n const name = page.doc.root.props.title;\n templates.push({\n id: `starter${page.path.replace(/\\//g, \"-\")}`,\n label: `${name} page`,\n description: `The starter site's ${name.toLowerCase()} page.`,\n kind: page.kind,\n doc: ({ title, brand }) => {\n const fresh = starterSite({ brand, message: { headline: title } }).pages.find((p) => p.path === page.path)!.doc;\n return { ...fresh, root: { props: { ...fresh.root.props, title } } };\n },\n });\n }\n return templates;\n}\n\n/** Move one page up or down the list (through `reorderPages`, when the store has it). */\nexport async function movePageInList(store: EditorSiteStore, siteId: string, pageId: string, by: -1 | 1): Promise<PageMeta[]> {\n if (!store.reorderPages) throw new Error(\"This store keeps pages in its own order.\");\n const pages = await store.listPages(siteId);\n const i = pages.findIndex((p) => p.id === pageId);\n const j = i + by;\n if (i < 0 || j < 0 || j >= pages.length) return pages;\n const ids = pages.map((p) => p.id);\n [ids[i], ids[j]] = [ids[j]!, ids[i]!];\n await store.reorderPages(siteId, ids);\n return store.listPages(siteId);\n}\n","/**\n * The Pages panel: the site's pages (open, add from a template, change an\n * address, delete, reorder) and its menu.\n */\nimport * as React from \"react\";\nimport { ArrowDown, ArrowUp, FileText, Home, Plus, Trash2 } from \"lucide-react\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from \"@marktiderman/genesis-ui/alert-dialog\";\nimport { Button } from \"@marktiderman/genesis-ui/button\";\nimport { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from \"@marktiderman/genesis-ui/dialog\";\nimport { Input } from \"@marktiderman/genesis-ui/input\";\nimport { Label } from \"@marktiderman/genesis-ui/label\";\nimport { RadioGroup, RadioGroupItem } from \"@marktiderman/genesis-ui/radio-group\";\nimport { Separator } from \"@marktiderman/genesis-ui/separator\";\nimport { Switch } from \"@marktiderman/genesis-ui/switch\";\nimport { cn } from \"@marktiderman/genesis-ui/utils\";\nimport type { MenuItem, PageMeta } from \"../core/schemas\";\nimport { isSafeHref, type ReservedPaths } from \"../core/urls\";\nimport { pageTemplates, pathProblems, slugify, type PageTemplate } from \"./site-actions\";\n\nexport interface NewPageRequest {\n title: string;\n path: string;\n template: PageTemplate;\n addToMenu: boolean;\n}\n\nexport interface PagesPanelProps {\n pages: readonly PageMeta[];\n currentId: string | null;\n nav: readonly MenuItem[];\n reserved?: ReservedPaths | undefined;\n canReorder: boolean;\n busy: boolean;\n /** View only: pages open, nothing is added, moved, deleted or renamed, and the menu is a list. */\n readOnly?: boolean | undefined;\n onOpen(pageId: string): void;\n onCreate(request: NewPageRequest): Promise<void>;\n onRename(pageId: string, path: string): Promise<void>;\n onDelete(pageId: string): Promise<void>;\n onReorder(pageId: string, by: -1 | 1): Promise<void>;\n onNavChange(nav: MenuItem[]): void;\n onEditFooter(): void;\n}\n\nfunction AddPageDialog({ open, onOpenChange, pages, reserved, onCreate }: { open: boolean; onOpenChange(open: boolean): void; pages: readonly PageMeta[]; reserved?: ReservedPaths | undefined; onCreate(r: NewPageRequest): Promise<void> }) {\n const templates = React.useMemo(() => pageTemplates(), []);\n const [title, setTitle] = React.useState(\"\");\n const [path, setPath] = React.useState(\"\");\n const [pathEdited, setPathEdited] = React.useState(false);\n const [templateId, setTemplateId] = React.useState(\"blank\");\n const [addToMenu, setAddToMenu] = React.useState(true);\n const [error, setError] = React.useState<string | null>(null);\n const [busy, setBusy] = React.useState(false);\n const id = React.useId();\n React.useEffect(() => {\n if (open) {\n setTitle(\"\");\n setPath(\"\");\n setPathEdited(false);\n setTemplateId(\"blank\");\n setAddToMenu(true);\n setError(null);\n }\n }, [open]);\n const problems = path ? pathProblems(path, pages, { ...(reserved ? { reserved } : {}) }) : [];\n const submit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!title.trim()) return setError(\"Give the page a title.\");\n if (problems.length) return setError(problems.join(\" \"));\n setBusy(true);\n try {\n await onCreate({ title: title.trim(), path, template: templates.find((t) => t.id === templateId)!, addToMenu });\n onOpenChange(false);\n } catch (err) {\n setError((err as Error).message);\n } finally {\n setBusy(false);\n }\n };\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-lg\">\n <form onSubmit={submit} className=\"flex flex-col gap-4\">\n <DialogHeader>\n <DialogTitle>Add a page</DialogTitle>\n <DialogDescription>Start blank, from a template, or with a landing page made from your brand.</DialogDescription>\n </DialogHeader>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor={`${id}-title`}>Title</Label>\n <Input\n id={`${id}-title`}\n value={title}\n maxLength={120}\n autoFocus\n onChange={(e) => {\n const t = e.currentTarget.value;\n setTitle(t);\n if (!pathEdited) setPath(t.trim() ? slugify(t) : \"\");\n }}\n />\n </div>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor={`${id}-path`}>Address</Label>\n <Input\n id={`${id}-path`}\n value={path}\n placeholder=\"/about\"\n aria-invalid={problems.length > 0 || undefined}\n aria-describedby={`${id}-path-hint`}\n onChange={(e) => {\n setPath(e.currentTarget.value);\n setPathEdited(true);\n }}\n />\n <p id={`${id}-path-hint`} className={problems.length ? \"text-sm text-destructive\" : \"text-sm text-muted-foreground\"}>\n {problems.length ? problems.join(\" \") : \"Lowercase letters, digits and hyphens, starting with /.\"}\n </p>\n </div>\n <fieldset className=\"flex flex-col gap-2\">\n <legend className=\"mb-2 text-sm font-medium\">Start from</legend>\n <RadioGroup value={templateId} onValueChange={setTemplateId} className=\"flex flex-col gap-2\">\n {templates.map((t) => (\n <div key={t.id} className=\"flex items-start gap-3 rounded-md border border-border p-3\">\n <RadioGroupItem id={`${id}-t-${t.id}`} value={t.id} className=\"mt-0.5\" aria-describedby={`${id}-t-${t.id}-d`} />\n <div className=\"flex flex-col\">\n <Label htmlFor={`${id}-t-${t.id}`}>{t.label}</Label>\n <span id={`${id}-t-${t.id}-d`} className=\"text-sm text-muted-foreground\">\n {t.description}\n </span>\n </div>\n </div>\n ))}\n </RadioGroup>\n </fieldset>\n <div className=\"flex items-center gap-2\">\n <Switch id={`${id}-menu`} checked={addToMenu} onCheckedChange={setAddToMenu} />\n <Label htmlFor={`${id}-menu`}>Add it to the menu</Label>\n </div>\n {error ? (\n <p role=\"alert\" className=\"text-sm text-destructive\">\n {error}\n </p>\n ) : null}\n <DialogFooter>\n <Button type=\"button\" variant=\"outline\" onClick={() => onOpenChange(false)}>\n Cancel\n </Button>\n <Button type=\"submit\" loading={busy}>\n Add page\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction RenameDialog({ page, pages, reserved, onClose, onRename }: { page: PageMeta | null; pages: readonly PageMeta[]; reserved?: ReservedPaths | undefined; onClose(): void; onRename(id: string, path: string): Promise<void> }) {\n const [path, setPath] = React.useState(\"\");\n const [error, setError] = React.useState<string | null>(null);\n const [busy, setBusy] = React.useState(false);\n const id = React.useId();\n React.useEffect(() => {\n setPath(page?.path ?? \"\");\n setError(null);\n }, [page]);\n if (!page) return null;\n const problems = path && path !== page.path ? pathProblems(path, pages, { except: page.id, ...(reserved ? { reserved } : {}) }) : [];\n return (\n <Dialog open onOpenChange={(o) => (o ? null : onClose())}>\n <DialogContent className=\"sm:max-w-md\">\n <form\n className=\"flex flex-col gap-4\"\n onSubmit={async (e) => {\n e.preventDefault();\n if (path === page.path) return onClose();\n if (problems.length) return setError(problems.join(\" \"));\n setBusy(true);\n try {\n await onRename(page.id, path);\n onClose();\n } catch (err) {\n setError((err as Error).message);\n } finally {\n setBusy(false);\n }\n }}\n >\n <DialogHeader>\n <DialogTitle>Change the address of “{page.title}”</DialogTitle>\n <DialogDescription>The old address, {page.path}, will redirect here, so links and search results keep working.</DialogDescription>\n </DialogHeader>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor={`${id}-path`}>New address</Label>\n <Input id={`${id}-path`} value={path} autoFocus aria-invalid={problems.length > 0 || undefined} aria-describedby={`${id}-hint`} onChange={(e) => setPath(e.currentTarget.value)} />\n <p id={`${id}-hint`} className={problems.length ? \"text-sm text-destructive\" : \"text-sm text-muted-foreground\"}>\n {problems.length ? problems.join(\" \") : \"Lowercase letters, digits and hyphens, starting with /.\"}\n </p>\n </div>\n {error ? (\n <p role=\"alert\" className=\"text-sm text-destructive\">\n {error}\n </p>\n ) : null}\n <DialogFooter>\n <Button type=\"button\" variant=\"outline\" onClick={onClose}>\n Cancel\n </Button>\n <Button type=\"submit\" loading={busy}>\n Change address\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n\n/** Why a menu item can't be saved (empty when it can). */\nexport function menuItemProblems(item: MenuItem): string[] {\n const out: string[] = [];\n if (!item.label.trim()) out.push(\"Needs a label.\");\n else if (item.label.trim().length > 40) out.push(\"At most 40 characters.\");\n if (!isSafeHref(item.href.trim())) out.push(\"Use a site path (/about), a #section, or an https, mailto or tel link.\");\n return out;\n}\n\n/**\n * The menu editor: labels and links, in order. Controlled: the editor keeps\n * the menu as typed (so a link being fixed survives a tab switch) and saves\n * it whenever every item is valid.\n */\nfunction MenuEditor({ nav, pages, busy, onChange }: { nav: readonly MenuItem[]; pages: readonly PageMeta[]; busy: boolean; onChange(nav: MenuItem[]): void }) {\n const items = nav;\n const id = React.useId();\n const list = React.useRef<HTMLOListElement>(null);\n const commit = (next: MenuItem[]) => onChange(next);\n const move = (i: number, by: -1 | 1) => {\n const next = [...items];\n const j = i + by;\n if (j < 0 || j >= next.length) return;\n [next[i], next[j]] = [next[j]!, next[i]!];\n commit(next);\n // Focus follows the item that moved, on the same button, or the other one at an end.\n requestAnimationFrame(() => {\n const same = list.current?.querySelector<HTMLButtonElement>(`[data-menu-move=\"${j}:${by}\"]`);\n (same && !same.disabled ? same : list.current?.querySelector<HTMLButtonElement>(`[data-menu-move=\"${j}:${-by}\"]`))?.focus();\n });\n };\n const unlinked = pages.filter((p) => !items.some((i) => i.href === p.path));\n return (\n <div className=\"flex flex-col gap-3\">\n {items.length === 0 ? <p className=\"text-sm text-muted-foreground\">The menu is empty.</p> : null}\n <ol ref={list} className=\"flex flex-col gap-3\">\n {items.map((item, i) => {\n const problems = menuItemProblems(item);\n return (\n <li key={i} className=\"flex flex-col gap-2 rounded-md border border-border p-2\">\n <div className=\"flex flex-col gap-1\">\n <Label htmlFor={`${id}-${i}-label`} className=\"text-xs\">\n Label\n </Label>\n <Input id={`${id}-${i}-label`} value={item.label} maxLength={40} disabled={busy} onChange={(e) => commit(items.map((x, k) => (k === i ? { ...x, label: e.currentTarget.value } : x)))} />\n </div>\n <div className=\"flex flex-col gap-1\">\n <Label htmlFor={`${id}-${i}-href`} className=\"text-xs\">\n Link\n </Label>\n <Input id={`${id}-${i}-href`} value={item.href} disabled={busy} aria-invalid={problems.length > 0 || undefined} aria-describedby={`${id}-${i}-err`} onChange={(e) => commit(items.map((x, k) => (k === i ? { ...x, href: e.currentTarget.value } : x)))} />\n </div>\n {problems.length ? (\n <p id={`${id}-${i}-err`} className=\"text-xs text-destructive\">\n {problems.join(\" \")} Not saved until fixed.\n </p>\n ) : null}\n <div className=\"flex gap-1\">\n <Button type=\"button\" size=\"icon\" variant=\"ghost\" data-menu-move={`${i}:-1`} aria-label={`Move ${item.label || \"item\"} up`} disabled={busy || i === 0} onClick={() => move(i, -1)}>\n <ArrowUp className=\"h-4 w-4\" />\n </Button>\n <Button type=\"button\" size=\"icon\" variant=\"ghost\" data-menu-move={`${i}:1`} aria-label={`Move ${item.label || \"item\"} down`} disabled={busy || i === items.length - 1} onClick={() => move(i, 1)}>\n <ArrowDown className=\"h-4 w-4\" />\n </Button>\n <Button type=\"button\" size=\"icon\" variant=\"ghost\" aria-label={`Remove ${item.label || \"item\"} from the menu`} disabled={busy} onClick={() => commit(items.filter((_, k) => k !== i))}>\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </div>\n </li>\n );\n })}\n </ol>\n <div className=\"flex flex-wrap gap-2\">\n {unlinked.slice(0, 4).map((p) => (\n <Button key={p.id} type=\"button\" size=\"sm\" variant=\"outline\" disabled={busy || items.length >= 12} onClick={() => commit([...items, { label: p.title.slice(0, 40), href: p.path }])}>\n <Plus className=\"mr-1 h-3 w-3\" /> {p.title}\n </Button>\n ))}\n <Button type=\"button\" size=\"sm\" variant=\"outline\" disabled={busy || items.length >= 12} onClick={() => commit([...items, { label: \"\", href: \"\" }])}>\n <Plus className=\"mr-1 h-3 w-3\" /> Link\n </Button>\n </div>\n </div>\n );\n}\n\nexport function PagesPanel(props: PagesPanelProps) {\n const [adding, setAdding] = React.useState(false);\n const [renaming, setRenaming] = React.useState<PageMeta | null>(null);\n const [deleting, setDeleting] = React.useState<PageMeta | null>(null);\n return (\n <div className=\"flex flex-col gap-4 p-3\">\n <div className=\"flex items-center justify-between\">\n <h2 className=\"text-sm font-semibold\">Pages</h2>\n {props.readOnly ? null : (\n <Button type=\"button\" size=\"sm\" onClick={() => setAdding(true)} disabled={props.busy}>\n <Plus className=\"mr-1 h-4 w-4\" /> Add page\n </Button>\n )}\n </div>\n <ul className=\"flex flex-col gap-1\" aria-label=\"Pages\">\n {props.pages.map((p, i) => {\n const current = p.id === props.currentId;\n return (\n <li key={p.id} className={cn(\"group flex flex-col gap-1 rounded-md border p-2\", current ? \"border-primary bg-muted\" : \"border-transparent hover:border-border\")}>\n <button type=\"button\" className=\"flex items-center gap-2 text-left text-sm focus-visible:outline-2 focus-visible:outline-ring\" aria-current={current ? \"page\" : undefined} onClick={() => props.onOpen(p.id)} disabled={props.busy}>\n {p.path === \"/\" ? <Home aria-hidden className=\"h-4 w-4 shrink-0\" /> : <FileText aria-hidden className=\"h-4 w-4 shrink-0\" />}\n <span className=\"flex min-w-0 flex-col\">\n <span className=\"truncate font-medium\">{p.title}</span>\n <span className=\"truncate text-xs text-muted-foreground\">\n {p.path}\n {p.kind === \"landing\" ? \" · landing\" : \"\"}\n </span>\n </span>\n </button>\n {props.readOnly ? null : (\n <div className=\"flex flex-wrap gap-1\">\n {p.path !== \"/\" ? (\n <Button type=\"button\" size=\"sm\" variant=\"ghost\" disabled={props.busy} onClick={() => setRenaming(p)} aria-label={`Change the address of ${p.title}`}>\n Address\n </Button>\n ) : null}\n {props.canReorder ? (\n <>\n <Button type=\"button\" size=\"icon\" variant=\"ghost\" disabled={props.busy || i === 0} aria-label={`Move ${p.title} up`} onClick={() => props.onReorder(p.id, -1)}>\n <ArrowUp className=\"h-4 w-4\" />\n </Button>\n <Button type=\"button\" size=\"icon\" variant=\"ghost\" disabled={props.busy || i === props.pages.length - 1} aria-label={`Move ${p.title} down`} onClick={() => props.onReorder(p.id, 1)}>\n <ArrowDown className=\"h-4 w-4\" />\n </Button>\n </>\n ) : null}\n {p.path !== \"/\" ? (\n <Button type=\"button\" size=\"icon\" variant=\"ghost\" disabled={props.busy} aria-label={`Delete ${p.title}`} onClick={() => setDeleting(p)}>\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n ) : null}\n </div>\n )}\n </li>\n );\n })}\n </ul>\n <Separator />\n <section aria-labelledby=\"gs-menu-heading\" className=\"flex flex-col gap-2\">\n <h2 id=\"gs-menu-heading\" className=\"text-sm font-semibold\">\n Menu\n </h2>\n {props.readOnly ? (\n props.nav.length ? (\n <ol className=\"flex flex-col gap-1 text-sm\">\n {props.nav.map((n, i) => (\n <li key={i}>\n {n.label} <span className=\"text-xs text-muted-foreground\">{n.href}</span>\n </li>\n ))}\n </ol>\n ) : (\n <p className=\"text-sm text-muted-foreground\">The menu is empty.</p>\n )\n ) : (\n <>\n <p className=\"text-sm text-muted-foreground\">The links in the site's header. Use the arrows to reorder them.</p>\n <MenuEditor nav={props.nav} pages={props.pages} busy={props.busy} onChange={props.onNavChange} />\n </>\n )}\n </section>\n {props.readOnly ? null : (\n <>\n <Separator />\n <section aria-labelledby=\"gs-footer-heading\" className=\"flex flex-col gap-2\">\n <h2 id=\"gs-footer-heading\" className=\"text-sm font-semibold\">\n Footer links\n </h2>\n <p className=\"text-sm text-muted-foreground\">The footer's links and columns are fields of the footer section.</p>\n <Button type=\"button\" size=\"sm\" variant=\"outline\" onClick={props.onEditFooter}>\n Edit the footer\n </Button>\n </section>\n </>\n )}\n\n <AddPageDialog open={adding} onOpenChange={setAdding} pages={props.pages} reserved={props.reserved} onCreate={props.onCreate} />\n <RenameDialog page={renaming} pages={props.pages} reserved={props.reserved} onClose={() => setRenaming(null)} onRename={props.onRename} />\n <AlertDialog open={deleting !== null} onOpenChange={(o) => (o ? null : setDeleting(null))}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Delete “{deleting?.title}”?</AlertDialogTitle>\n <AlertDialogDescription>The page leaves the site at its next publish. Releases already published keep it, so a rollback brings it back.</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Keep it</AlertDialogCancel>\n <AlertDialogAction\n onClick={() => {\n if (deleting) void props.onDelete(deleting.id);\n setDeleting(null);\n }}\n >\n Delete page\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n );\n}\n","/**\n * The editor's view of the real output: the `/web` request handler, run in\n * the browser, renders a page of the drafts (`preview`) or of the live\n * release (`live`) exactly as a visitor gets it. Its stylesheet is inlined\n * so the HTML works as an iframe's `srcdoc`, and its script is left out:\n * the frame is sandboxed with no script and no same-origin access, so\n * nothing an editor typed can run with the editor's privileges.\n *\n * The renderer and its assets load on demand (a separate chunk), so opening\n * the editor doesn't download them until a preview or the canvas needs them.\n */\nimport type { FormsResolver } from \"../core/forms\";\nimport type { SiteStore } from \"../core/store\";\nimport type { BrandInput } from \"../core/theme\";\n\n/** The site stylesheet (every section's classes), for the canvas frame. */\nexport async function loadSiteCss(): Promise<string> {\n const { ASSETS } = await import(\"../web/assets.generated\");\n return ASSETS.css.body;\n}\n\n/** CSS text that can sit inside a `<style>` element. */\nexport const styleText = (css: string) => css.replace(/<\\/style/gi, \"<\\\\/style\");\n\nexport interface PreviewInput {\n store: Pick<SiteStore, \"getLive\" | \"getDraft\" | \"listPages\" | \"getPageDraft\">;\n siteId: string;\n brand: BrandInput;\n path: string;\n mode: \"preview\" | \"live\";\n forms?: FormsResolver;\n}\n\nexport interface PreviewResult {\n status: number;\n /** The page as a self-contained document, or null when the address redirects or isn't the site's. */\n html: string | null;\n /** Where a redirect goes. */\n location?: string;\n}\n\n/**\n * One page through `handleSiteRequest`, as an iframe-ready document.\n *\n * @stability Beta\n */\nexport async function renderPreview(input: PreviewInput): Promise<PreviewResult> {\n const [{ renderSitePageToString }, { ASSETS }] = await Promise.all([import(\"../web/handler\"), import(\"../web/assets.generated\")]);\n const result = await renderSitePageToString(new Request(`https://preview.invalid${input.path}`), {\n store: input.store,\n brand: { getBrand: () => input.brand },\n siteId: input.siteId,\n mode: input.mode,\n unknownPath: \"not-found\",\n csp: false,\n ...(input.forms ? { forms: input.forms } : {}),\n });\n if (!result) return { status: 404, html: null };\n if (result.status >= 300 && result.status < 400) return { status: result.status, html: null, location: result.headers.get(\"location\") ?? \"\" };\n const css = `<style data-gs-inlined=\"\">${styleText(ASSETS.css.body)}</style>`;\n const formsCss = `<style data-gs-inlined=\"\">${styleText(ASSETS.formsCss.body)}</style>`;\n const html = result.html\n .replace(/<link rel=\"stylesheet\" href=\"[^\"]*\\/_gs\\/([^\"]+)\"\\/>/g, (_m, name: string) => (name === ASSETS.css.name ? css : name === ASSETS.formsCss.name ? formsCss : \"\"))\n .replace(/<script type=\"module\" src=\"[^\"]*\\/_gs\\/[^\"]*\"><\\/script>/g, \"\");\n return { status: result.status, html };\n}\n","/**\n * The Publish panel: the checks (errors block, warnings don't), this page's\n * SEO, preview, publish with a note, and the release history with rollback.\n * Rendered inside Puck, so its SEO fields edit the page through Puck's\n * history (undo works) and an issue can select its section.\n */\nimport * as React from \"react\";\nimport { AlertCircle, AlertTriangle, CheckCircle2, ExternalLink, Eye, RotateCcw } from \"lucide-react\";\nimport { createUsePuck } from \"@puckeditor/core\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from \"@marktiderman/genesis-ui/alert-dialog\";\nimport { Badge } from \"@marktiderman/genesis-ui/badge\";\nimport { Button } from \"@marktiderman/genesis-ui/button\";\nimport { Input } from \"@marktiderman/genesis-ui/input\";\nimport { Label } from \"@marktiderman/genesis-ui/label\";\nimport { Separator } from \"@marktiderman/genesis-ui/separator\";\nimport { Switch } from \"@marktiderman/genesis-ui/switch\";\nimport { Textarea } from \"@marktiderman/genesis-ui/textarea\";\nimport type { SiteIssue } from \"../core/a11y\";\nimport type { ReleaseMeta, Seo } from \"../core/schemas\";\nimport { isSafeImageSrc } from \"../core/urls\";\nimport type { EditorRootProps } from \"./data\";\nimport { useEditorServices } from \"./services\";\n\nconst usePuck = createUsePuck();\n\nexport interface PublishPanelProps {\n pagePath: string;\n pageTitle: string;\n siteName: string;\n issues: SiteIssue[] | null;\n checking: boolean;\n publishing: boolean;\n /** Why publishing is off now (unsaved changes, a conflict), or null. */\n blockedReason: string | null;\n releases: readonly ReleaseMeta[];\n liveReleaseId: string | null;\n previewUrl?: ((path: string) => string) | undefined;\n onCheck(): void;\n onPublish(note: string): Promise<boolean>;\n onRollback(releaseId: string): Promise<void>;\n onPreview(mode: \"preview\" | \"live\"): void;\n onOpenPage(pageId: string): void;\n /** A check's \"Show\" selected this section: open its fields and scroll to it. */\n onShowSection(sectionId: string): void;\n currentPageId: string | null;\n /** View only: the checks, previews and history, with no Publish, Roll back or SEO editing. */\n readOnly?: boolean | undefined;\n}\n\nfunction SeoFields({ siteName, pagePath, pageTitle, readOnly }: { siteName: string; pagePath: string; pageTitle: string; readOnly: boolean }) {\n const seo = usePuck((s) => (s.appState.data.root.props as EditorRootProps | undefined)?.seo) as Seo | undefined;\n const root = usePuck((s) => s.appState.data.root);\n const dispatch = usePuck((s) => s.dispatch);\n const services = useEditorServices();\n const id = React.useId();\n const set = (patch: Partial<Seo>) => {\n const next = { ...(seo ?? {}), ...patch } as Record<string, unknown>;\n for (const k of Object.keys(next)) if (next[k] === undefined || next[k] === \"\" || next[k] === false) delete next[k];\n dispatch({ type: \"replaceRoot\", root: { ...root, props: { ...((root.props ?? {}) as Record<string, unknown>), seo: next } as never } });\n };\n const title = seo?.title ?? \"\";\n const description = seo?.description ?? \"\";\n return (\n <section aria-labelledby={`${id}-h`} className=\"flex flex-col gap-3\">\n <h3 id={`${id}-h`} className=\"text-sm font-semibold\">\n Search and sharing for {pagePath}\n </h3>\n <div className=\"rounded-md border border-border p-3 text-sm\" aria-label=\"Search result preview\">\n <p className=\"truncate text-primary\">{title || pageTitle}</p>\n <p className=\"truncate text-xs text-muted-foreground\">\n {siteName} · {pagePath}\n </p>\n <p className=\"line-clamp-2 text-muted-foreground\">{description || \"No description: search engines will pick some text from the page.\"}</p>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor={`${id}-title`}>Search title</Label>\n <Input id={`${id}-title`} value={title} maxLength={70} placeholder={pageTitle} aria-describedby={`${id}-title-n`} disabled={readOnly} onChange={(e) => set({ title: e.currentTarget.value })} />\n <p id={`${id}-title-n`} className=\"text-xs text-muted-foreground\">\n {title.length}/70. Empty uses the page title.\n </p>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor={`${id}-desc`}>Description</Label>\n <Textarea id={`${id}-desc`} rows={3} value={description} maxLength={200} aria-describedby={`${id}-desc-n`} disabled={readOnly} onChange={(e) => set({ description: e.currentTarget.value })} />\n <p id={`${id}-desc-n`} className=\"text-xs text-muted-foreground\">\n {description.length}/200\n </p>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <span className=\"text-sm font-medium\">Share image</span>\n {seo?.ogImage?.src && isSafeImageSrc(seo.ogImage.src) ? <img src={seo.ogImage.src} alt={seo.ogImage.alt ?? \"\"} className=\"h-20 w-full rounded-md border border-border object-cover\" /> : null}\n {readOnly ? (seo?.ogImage ? null : <p className=\"text-sm text-muted-foreground\">None.</p>) : (\n <div className=\"flex gap-2\">\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n onClick={async () => {\n const picked = await services.pickImage(seo?.ogImage ? { current: { src: seo.ogImage.src, alt: seo.ogImage.alt ?? \"\" } } : {});\n if (picked) set({ ogImage: { ...picked, alt: picked.alt } as Seo[\"ogImage\"] });\n }}\n >\n {seo?.ogImage ? \"Replace share image\" : \"Choose share image\"}\n </Button>\n {seo?.ogImage ? (\n <Button type=\"button\" size=\"sm\" variant=\"ghost\" onClick={() => set({ ogImage: undefined })}>\n Remove\n </Button>\n ) : null}\n </div>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n <Switch id={`${id}-noindex`} checked={seo?.noindex === true} disabled={readOnly} onCheckedChange={(on) => set({ noindex: on || undefined })} />\n <Label htmlFor={`${id}-noindex`}>Hide this page from search engines</Label>\n </div>\n </section>\n );\n}\n\nfunction IssueList({ issues, currentPageId, onOpenPage, onShown }: { issues: SiteIssue[]; currentPageId: string | null; onOpenPage(id: string): void; onShown(sectionId: string): void }) {\n const getSelectorForId = usePuck((s) => s.getSelectorForId);\n const dispatch = usePuck((s) => s.dispatch);\n const show = (issue: SiteIssue) => {\n if (issue.pageId && issue.pageId !== currentPageId) return onOpenPage(issue.pageId);\n if (!issue.sectionId) return;\n const selector = getSelectorForId(issue.sectionId);\n if (!selector) return;\n dispatch({ type: \"setUi\", ui: { itemSelector: selector, rightSideBarVisible: true } });\n onShown(issue.sectionId);\n };\n return (\n <ul className=\"flex flex-col gap-2\">\n {issues.map((issue, i) => (\n <li key={i} className=\"flex items-start gap-2 text-sm\">\n {issue.severity === \"error\" ? <AlertCircle aria-label=\"Blocks publishing\" className=\"mt-0.5 h-4 w-4 shrink-0 text-destructive\" /> : <AlertTriangle aria-label=\"Warning\" className=\"mt-0.5 h-4 w-4 shrink-0 text-muted-foreground\" />}\n <span className=\"flex-1\">{issue.message}</span>\n {issue.sectionId || (issue.pageId && issue.pageId !== currentPageId) ? (\n <Button type=\"button\" size=\"sm\" variant=\"ghost\" onClick={() => show(issue)} aria-label={`Show: ${issue.message.length > 80 ? `${issue.message.slice(0, 80)}…` : issue.message}`}>\n Show\n </Button>\n ) : null}\n </li>\n ))}\n </ul>\n );\n}\n\nexport function PublishPanel(props: PublishPanelProps) {\n const [note, setNote] = React.useState(\"\");\n const [rollingBack, setRollingBack] = React.useState<ReleaseMeta | null>(null);\n const id = React.useId();\n const errors = props.issues?.filter((i) => i.severity === \"error\") ?? [];\n const warnings = props.issues?.filter((i) => i.severity === \"warning\") ?? [];\n const live = props.releases.find((r) => r.id === props.liveReleaseId);\n const canPublish = props.issues !== null && errors.length === 0 && !props.blockedReason && !props.checking;\n return (\n <div className=\"flex flex-col gap-4 p-3\">\n <div className=\"flex items-center justify-between gap-2\">\n <h2 className=\"text-sm font-semibold\">Publish</h2>\n {live ? <Badge variant=\"success\">Live: release {live.number}</Badge> : <Badge variant=\"muted\">Not published</Badge>}\n </div>\n\n <section aria-labelledby={`${id}-checks`} aria-busy={props.checking} className=\"flex flex-col gap-2\">\n <div className=\"flex items-center justify-between\">\n <h3 id={`${id}-checks`} className=\"text-sm font-semibold\">\n Checks\n </h3>\n <Button type=\"button\" size=\"sm\" variant=\"ghost\" onClick={props.onCheck} loading={props.checking}>\n Check again\n </Button>\n </div>\n <div role=\"status\" aria-live=\"polite\" className=\"text-sm\">\n {props.issues === null ? (\n <span className=\"text-muted-foreground\">Checking…</span>\n ) : errors.length ? (\n <span className=\"text-destructive\">\n {errors.length} {errors.length === 1 ? \"problem blocks\" : \"problems block\"} publishing.\n </span>\n ) : (\n <span className=\"flex items-center gap-1\">\n <CheckCircle2 aria-hidden className=\"h-4 w-4\" /> Ready to publish{warnings.length ? ` (${warnings.length} ${warnings.length === 1 ? \"suggestion\" : \"suggestions\"})` : \"\"}.\n </span>\n )}\n </div>\n {props.issues?.length ? <IssueList issues={[...errors, ...warnings]} currentPageId={props.currentPageId} onOpenPage={props.onOpenPage} onShown={props.onShowSection} /> : null}\n </section>\n\n <Separator />\n <div className=\"flex flex-wrap gap-2\">\n <Button type=\"button\" size=\"sm\" variant=\"outline\" onClick={() => props.onPreview(\"preview\")}>\n <Eye aria-hidden className=\"mr-1 h-4 w-4\" /> Preview this page\n </Button>\n {live ? (\n <Button type=\"button\" size=\"sm\" variant=\"outline\" onClick={() => props.onPreview(\"live\")}>\n View it live\n </Button>\n ) : null}\n {props.previewUrl ? (\n <Button asChild size=\"sm\" variant=\"ghost\">\n <a href={props.previewUrl(props.pagePath)} target=\"_blank\" rel=\"noreferrer\">\n <ExternalLink aria-hidden className=\"mr-1 h-4 w-4\" /> Preview link\n </a>\n </Button>\n ) : null}\n </div>\n\n {props.readOnly ? null : (\n <form\n className=\"flex flex-col gap-2\"\n onSubmit={async (e) => {\n e.preventDefault();\n if (await props.onPublish(note)) setNote(\"\");\n }}\n >\n <Label htmlFor={`${id}-note`}>What changed (for the release history)</Label>\n <Input id={`${id}-note`} value={note} maxLength={200} placeholder=\"New spring timetable\" onChange={(e) => setNote(e.currentTarget.value)} />\n <Button type=\"submit\" disabled={!canPublish} loading={props.publishing} aria-describedby={`${id}-why`}>\n Publish site\n </Button>\n {props.blockedReason || errors.length ? (\n <p id={`${id}-why`} className=\"text-xs text-muted-foreground\">\n {props.blockedReason ?? \"Fix the problems above to publish.\"}\n </p>\n ) : null}\n </form>\n )}\n\n <Separator />\n <SeoFields siteName={props.siteName} pagePath={props.pagePath} pageTitle={props.pageTitle} readOnly={props.readOnly === true || props.publishing} />\n\n <Separator />\n <section aria-labelledby={`${id}-history`} className=\"flex flex-col gap-2\">\n <h3 id={`${id}-history`} className=\"text-sm font-semibold\">\n Release history\n </h3>\n {props.releases.length === 0 ? <p className=\"text-sm text-muted-foreground\">Nothing published yet.</p> : null}\n <ol className=\"flex flex-col gap-2\">\n {props.releases.map((r) => (\n <li key={r.id} className=\"flex items-start justify-between gap-2 rounded-md border border-border p-2 text-sm\">\n <span className=\"flex flex-col\">\n <span className=\"font-medium\">\n Release {r.number}\n {r.id === props.liveReleaseId ? (\n <Badge variant=\"success\" className=\"ml-2\">\n Live\n </Badge>\n ) : null}\n </span>\n <span className=\"text-xs text-muted-foreground\">{new Date(r.publishedAt ?? r.createdAt).toLocaleString()}</span>\n {r.note ? <span className=\"text-xs\">{r.note}</span> : null}\n </span>\n {r.id !== props.liveReleaseId && !props.readOnly ? (\n <Button type=\"button\" size=\"sm\" variant=\"ghost\" onClick={() => setRollingBack(r)} aria-label={`Roll back to release ${r.number}`}>\n <RotateCcw aria-hidden className=\"mr-1 h-4 w-4\" /> Roll back\n </Button>\n ) : null}\n </li>\n ))}\n </ol>\n </section>\n\n <AlertDialog open={rollingBack !== null} onOpenChange={(o) => (o ? null : setRollingBack(null))}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Roll back to release {rollingBack?.number}?</AlertDialogTitle>\n <AlertDialogDescription>The live site goes back to what release {rollingBack?.number} published, at once. Your drafts don't change; publish again to go forward.</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction\n onClick={() => {\n if (rollingBack) void props.onRollback(rollingBack.id);\n setRollingBack(null);\n }}\n >\n Roll back\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n );\n}\n","/**\n * `<SiteEditor>`: the visual editor for a genesis-sites site.\n *\n * <SiteEditor siteId=\"riverside\" store={store} brand={brand} />\n *\n * Puck runs the canvas, drag and drop, the fields and the history; every\n * panel around it is Genesis UI. The canvas is an iframe drawn by each\n * section's own renderer with the site's stylesheet and the brand's theme;\n * \"Preview\" runs the real `/web` request handler. Drafts autosave by\n * compare-and-swap; publishing runs the checks first, and holds the canvas\n * and the autosaves while it runs. `readOnly` opens a site to look at only.\n */\nimport * as React from \"react\";\nimport { Puck, createUsePuck, type Data, type Permissions } from \"@puckeditor/core\";\nimport { Monitor, Redo2, Smartphone, Tablet, Undo2 } from \"lucide-react\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from \"@marktiderman/genesis-ui/alert-dialog\";\nimport { Alert, AlertDescription, AlertTitle } from \"@marktiderman/genesis-ui/alert\";\nimport { Button } from \"@marktiderman/genesis-ui/button\";\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from \"@marktiderman/genesis-ui/dialog\";\nimport { Spinner } from \"@marktiderman/genesis-ui/spinner\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@marktiderman/genesis-ui/tabs\";\nimport { cn } from \"@marktiderman/genesis-ui/utils\";\nimport { genesisBrand } from \"@marktiderman/genesis-design-system\";\nimport type { FormsResolver, ResolvedForm } from \"../core/forms\";\nimport { migratePage, migrateSite } from \"../core/migrate\";\nimport { PageDoc, SiteDoc, type MenuItem, type PageKind, type PageMeta, type Release, type ReleaseMeta } from \"../core/schemas\";\nimport type { SiteIssue } from \"../core/a11y\";\nimport { brandDisplayName, siteTheme, stableHash, themeCss, type BrandInput } from \"../core/theme\";\nimport type { ReservedPaths } from \"../core/urls\";\nimport { AssetPicker } from \"./asset-picker\";\nimport { scrollCanvasTo } from \"./canvas-dom\";\nimport { Autosaver, type AutosaveState } from \"./autosave\";\nimport { createEditorConfig, type CanvasMetadata } from \"./config\";\nimport { countTypes, fromEditorData, h1SectionId, placeholderSnapshot, toEditorData, type EditorData } from \"./data\";\nimport { EditorLockContext, genesisOverrides } from \"./overrides\";\nimport { PagesPanel, menuItemProblems, type NewPageRequest } from \"./pages-panel\";\nimport { loadSiteCss, renderPreview, styleText } from \"./preview\";\nimport { PublishPanel } from \"./publish-panel\";\nimport { EditorServicesContext, type EditorAssets, type EditorServices, type PickedImage } from \"./services\";\nimport { checkSite, movePageInList, publishSite, renamePage, type EditorSiteStore } from \"./site-actions\";\n\nconst usePuck = createUsePuck();\n\n/** Hashes of what each draft may hold once only our own publish has touched it (`resync`). */\ninterface PublishedDrafts {\n site: string[];\n page: string[];\n}\n\nexport interface SiteEditorProps {\n siteId: string;\n /** Any `SiteStore`: the Supabase one signed in as the editor, or the memory store. */\n store: EditorSiteStore;\n /** The site's brand: the canvas theme, and what a publish checks contrast against. */\n brand: BrandInput;\n /** Resolves form embeds' slugs, for the canvas and preview. */\n forms?: FormsResolver;\n /** The asset library and upload, beside the store's `putAsset`. */\n assets?: EditorAssets;\n /** After each publish. */\n onPublish?: (release: Release) => void;\n /**\n * Whether anything isn't saved yet (waiting, saving, a conflict, a failed save, or a change that\n * can't be saved until it's fixed). Block your app's own navigation while it's true: closing the\n * tab is already guarded, and unmounting the editor saves what it can but can't ask.\n */\n onDirtyChange?: (dirty: boolean) => void;\n /** Paths the site can't use (default: the store's own rule). */\n reserved?: ReservedPaths;\n /** A link to the host's preview route for a page path (opens in a new tab). */\n previewUrl?: (path: string) => string;\n /** Milliseconds after the last change before a save (default 800). */\n autosaveDelay?: number;\n /** The page to open first (default: the home page). */\n initialPageId?: string;\n /**\n * The URL of the package's site stylesheet (`@marktiderman/genesis-sites/sites.css`, for example\n * Vite's `?url` import, or `/_gs/sites.<hash>.css` where `handleSiteRequest` is mounted). Without it\n * the canvas loads the stylesheet from the renderer's bundled assets, a larger download.\n */\n siteStylesheet?: string;\n /**\n * View only: the canvas, fields and SEO can't be changed, there is no Add, no\n * page actions, no Publish and no Roll back, and nothing is ever saved. For\n * someone who may see the drafts but not edit them.\n */\n readOnly?: boolean;\n className?: string;\n}\n\ninterface OpenPage {\n id: string;\n path: string;\n kind: PageKind;\n data: EditorData;\n placeholders: Map<string, string>;\n}\n\ntype Viewport = \"desktop\" | \"tablet\" | \"phone\";\nconst VIEWPORTS: Record<Viewport, { width: number | \"100%\"; label: string }> = {\n desktop: { width: \"100%\", label: \"Desktop\" },\n tablet: { width: 768, label: \"Tablet\" },\n phone: { width: 390, label: \"Phone\" },\n};\n\nconst LOCKED: Permissions = { drag: false, duplicate: false, delete: false, edit: false, insert: false };\nconst UNLOCKED: Permissions = { drag: true, duplicate: true, delete: true, edit: true, insert: true };\n\n/** Save what is waiting, then stop: unmounting can't wait, so this is best effort. */\nfunction saveAndDispose(saver: Autosaver<unknown> | null) {\n if (!saver) return;\n if (!saver.dirty) return saver.dispose();\n saver.resume();\n saver\n .flush()\n .catch((err: unknown) => console.warn(\"[genesis-sites/editor] closed with changes that couldn't be saved.\", err))\n .finally(() => saver.dispose());\n}\n\ntype SaveStatus = AutosaveState<unknown>[\"status\"] | \"invalid\";\n\nconst SAVE_LABEL: Record<SaveStatus, string> = {\n saved: \"All changes saved\",\n pending: \"Unsaved changes\",\n saving: \"Saving…\",\n conflict: \"Someone else saved: choose a version\",\n error: \"Couldn't save; retrying\",\n invalid: \"Not saved: fix the problem shown\",\n};\n\nfunction worst(...states: (AutosaveState<unknown> | null)[]): AutosaveState<unknown>[\"status\"] {\n const order: AutosaveState<unknown>[\"status\"][] = [\"conflict\", \"error\", \"saving\", \"pending\", \"saved\"];\n for (const s of order) if (states.some((x) => x?.status === s)) return s;\n return \"saved\";\n}\n\n/**\n * The site's stylesheet and theme in the canvas iframe. The returned override changes identity\n * when the stylesheet, theme, scheme or language does, and Puck then remounts the frame's root,\n * which is when the effect below runs again (so it depends on `document` only).\n */\nfunction useCanvasFrame(css: string | null, href: string | undefined, theme: string, dark: boolean, lang: string) {\n return React.useCallback(\n ({ children, document }: { children: React.ReactNode; document?: Document }) => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useEffect(() => {\n if (!document) return;\n const nodes: HTMLElement[] = [];\n if (href) {\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = href;\n link.dataset.gsSiteCss = \"\";\n nodes.push(link);\n } else if (css) {\n const site = document.createElement(\"style\");\n site.dataset.gsSiteCss = \"\";\n site.textContent = styleText(css);\n nodes.push(site);\n }\n const vars = document.createElement(\"style\");\n vars.dataset.gsTheme = \"\";\n // Raised above the host app's own :root variables, which Puck copies into the frame (and may copy again later).\n vars.textContent = styleText(theme.replace(/:root/g, \"html:root\"));\n nodes.push(vars);\n for (const n of nodes) document.head.appendChild(n);\n // Puck copies the host app's stylesheets into the frame (its own canvas styles are among them) and copies\n // them again as they change; the site's styles stay last, so the canvas draws what publishes.\n const keepLast = new MutationObserver(() => {\n const last = document.head.lastElementChild;\n if (last && !nodes.includes(last as HTMLElement)) for (const n of nodes) document.head.appendChild(n);\n });\n keepLast.observe(document.head, { childList: true });\n const html = document.documentElement;\n html.lang = lang;\n html.dataset.gsSite = \"\";\n html.classList.toggle(\"dark\", dark);\n document.body.classList.add(\"bg-background\", \"font-sans\", \"text-foreground\", \"antialiased\");\n return () => {\n keepLast.disconnect();\n for (const n of nodes) n.remove();\n };\n }, [document]);\n return <>{children}</>;\n },\n [css, href, theme, dark, lang],\n );\n}\n\nfunction Toolbar({ siteName, pageTitle, titleId, saveStatus, mode, viewport, onViewport, onPreview }: { siteName: string; pageTitle: string; titleId: string; saveStatus: SaveStatus; mode: \"edit\" | \"publishing\" | \"view\"; viewport: Viewport; onViewport(v: Viewport): void; onPreview(): void }) {\n const history = usePuck((s) => s.history);\n const dispatch = usePuck((s) => s.dispatch);\n const choose = (v: Viewport) => {\n onViewport(v);\n dispatch({ type: \"setUi\", ui: (ui) => ({ viewports: { ...ui.viewports, current: { width: VIEWPORTS[v].width, height: \"auto\" } } }) });\n };\n return (\n <header className=\"flex flex-wrap items-center justify-between gap-2 border-b border-border bg-background px-3 py-2\">\n <div className=\"flex min-w-0 flex-col\">\n <span className=\"truncate text-xs text-muted-foreground\">{siteName}</span>\n <span id={titleId} tabIndex={-1} className=\"truncate text-sm font-semibold outline-none focus-visible:ring-2 focus-visible:ring-ring\">\n {pageTitle}\n </span>\n </div>\n <div className=\"flex items-center gap-1\" role=\"toolbar\" aria-label=\"Editor\">\n <Button type=\"button\" size=\"icon\" variant=\"ghost\" aria-label=\"Undo\" title=\"Undo (Ctrl+Z)\" disabled={mode !== \"edit\" || !history.hasPast} onClick={() => history.back()}>\n <Undo2 className=\"h-4 w-4\" />\n </Button>\n <Button type=\"button\" size=\"icon\" variant=\"ghost\" aria-label=\"Redo\" title=\"Redo (Ctrl+Shift+Z)\" disabled={mode !== \"edit\" || !history.hasFuture} onClick={() => history.forward()}>\n <Redo2 className=\"h-4 w-4\" />\n </Button>\n <span className=\"mx-1 h-6 w-px bg-border\" aria-hidden />\n {([\"desktop\", \"tablet\", \"phone\"] as const).map((v) => {\n const Icon = v === \"desktop\" ? Monitor : v === \"tablet\" ? Tablet : Smartphone;\n return (\n <Button key={v} type=\"button\" size=\"icon\" variant={viewport === v ? \"secondary\" : \"ghost\"} aria-label={`${VIEWPORTS[v].label} width`} aria-pressed={viewport === v} onClick={() => choose(v)}>\n <Icon className=\"h-4 w-4\" />\n </Button>\n );\n })}\n </div>\n <div className=\"flex items-center gap-2\">\n <span role=\"status\" className={cn(\"text-xs\", saveStatus === \"conflict\" || saveStatus === \"error\" || saveStatus === \"invalid\" ? \"text-destructive\" : \"text-muted-foreground\")}>\n {mode === \"view\" ? \"View only\" : mode === \"publishing\" ? \"Publishing…\" : SAVE_LABEL[saveStatus]}\n </span>\n <Button type=\"button\" size=\"sm\" variant=\"outline\" onClick={onPreview}>\n Preview\n </Button>\n </div>\n </header>\n );\n}\n\n/** Selects the footer's first section (from the Pages panel's \"Edit the footer\"). */\nfunction useSelectFooter() {\n const dispatch = usePuck((s) => s.dispatch);\n const getSelectorForId = usePuck((s) => s.getSelectorForId);\n const footer = usePuck((s) => (s.appState.data.root.props as EditorData[\"root\"][\"props\"] | undefined)?.footer);\n return () => {\n const first = footer?.[0];\n const selector = first ? getSelectorForId(first.props.id) : undefined;\n if (selector) dispatch({ type: \"setUi\", ui: { itemSelector: selector, rightSideBarVisible: true } });\n };\n}\n\n/** Selecting a section on the canvas opens its fields. */\nfunction SelectionWatcher({ onSelect }: { onSelect(): void }) {\n const selected = usePuck((s) => s.selectedItem?.props.id as string | undefined);\n React.useEffect(() => {\n if (selected) onSelect();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selected]);\n return null;\n}\n\nfunction PagesTab(props: Omit<React.ComponentProps<typeof PagesPanel>, \"onEditFooter\"> & { onFooter(): void }) {\n const selectFooter = useSelectFooter();\n return (\n <PagesPanel\n {...props}\n onEditFooter={() => {\n selectFooter();\n props.onFooter();\n }}\n />\n );\n}\n\n/**\n * The visual editor.\n *\n * @stability Beta\n */\nexport function SiteEditor({ siteId, store, brand, forms, assets, onPublish, reserved, previewUrl, autosaveDelay, initialPageId, siteStylesheet, readOnly = false, onDirtyChange, className }: SiteEditorProps) {\n const [loadError, setLoadError] = React.useState<string | null>(null);\n const [site, setSite] = React.useState<SiteDoc | null>(null);\n const [pages, setPages] = React.useState<PageMeta[]>([]);\n const [open, setOpen] = React.useState<OpenPage | null>(null);\n const [editorKey, setEditorKey] = React.useState(0);\n const [siteState, setSiteState] = React.useState<AutosaveState<SiteDoc> | null>(null);\n const [pageState, setPageState] = React.useState<AutosaveState<PageDoc> | null>(null);\n const [invalid, setInvalid] = React.useState<string | null>(null);\n const [busy, setBusy] = React.useState(false);\n const [notice, setNotice] = React.useState<{ tone: \"error\" | \"info\"; text: string } | null>(null);\n const [css, setCss] = React.useState<string | null>(null);\n const [h1Id, setH1Id] = React.useState<string | null>(null);\n const [formMap, setFormMap] = React.useState<ReadonlyMap<string, ResolvedForm | null>>(new Map());\n const [issues, setIssues] = React.useState<SiteIssue[] | null>(null);\n const [checking, setChecking] = React.useState(false);\n const [publishing, setPublishing] = React.useState(false);\n const [releases, setReleases] = React.useState<ReleaseMeta[]>([]);\n const [liveId, setLiveId] = React.useState<string | null>(null);\n const [leftTab, setLeftTab] = React.useState(readOnly ? \"outline\" : \"add\");\n const [rightTab, setRightTab] = React.useState(\"edit\");\n const [viewport, setViewport] = React.useState<Viewport>(\"desktop\");\n const [picker, setPicker] = React.useState<{ current?: PickedImage; altElsewhere?: boolean; resolve(v: PickedImage | null): void } | null>(null);\n const [preview, setPreview] = React.useState<{ mode: \"preview\" | \"live\"; path: string; html: string | null; note?: string } | null>(null);\n\n const siteSaver = React.useRef<Autosaver<SiteDoc> | null>(null);\n const pageSaver = React.useRef<Autosaver<PageDoc> | null>(null);\n /** The page `pageSaver` saves: a change from an editor still showing another page is never fed to it. */\n const pageSaverFor = React.useRef<string | null>(null);\n const counts = React.useRef<ReadonlyMap<string, number>>(new Map());\n const focusTitle = React.useRef(false);\n const titleId = React.useId();\n const [announcement, setAnnouncement] = React.useState(\"\");\n /** The menu as typed, while it has a link that can't be saved yet (null: the saved menu). */\n const [menuDraft, setMenuDraft] = React.useState<MenuItem[] | null>(null);\n\n // Nothing changes on the canvas while a publish runs, or ever in view-only mode.\n const locked = readOnly || publishing;\n const lockedRef = React.useRef(locked);\n lockedRef.current = locked;\n\n const kind = open?.kind ?? \"page\";\n const editor = React.useMemo(() => createEditorConfig({ kind, counts: () => counts.current, readOnly: () => lockedRef.current }), [kind]);\n // Slot props of every registered section, whatever the page kind, for reading and writing documents.\n const slotKeys = React.useMemo(() => createEditorConfig().slotKeys, []);\n const theme = React.useMemo(() => {\n try {\n return siteTheme(brand, site?.theme ?? {});\n } catch (err) {\n console.error(\"[genesis-sites/editor] the brand can't make a theme; the canvas uses Genesis's default.\", err);\n return siteTheme({ ...genesisBrand, name: brandDisplayName(brand) }, site?.theme ?? {});\n }\n }, [brand, site?.theme]);\n const iframe = useCanvasFrame(css, siteStylesheet, themeCss(theme), theme.colorScheme === \"dark\", site?.lang ?? \"en\");\n\n // ── Loading ───────────────────────────────────────────────────────────────\n const loadPage = React.useCallback(\n async (pageId: string, siteDoc: SiteDoc) => {\n const draft = await store.getPageDraft(pageId);\n if (!draft) throw new Error(\"That page no longer exists, or you can't edit it.\");\n // Edits made to the page being left while this one loaded: save them before letting go of its saver.\n const previous = pageSaver.current;\n if (previous) {\n try {\n await previous.flush();\n } catch (err) {\n throw new Error(`The page you're leaving has a change that isn't saved: ${(err as Error).message}`);\n }\n previous.dispose();\n }\n const saver = readOnly ? null : new Autosaver<PageDoc>({ rev: draft.rev, save: (rev, doc) => store.savePageDraft(pageId, rev, doc), delay: autosaveDelay ?? 800, onState: setPageState }, draft.doc);\n pageSaver.current = saver;\n pageSaverFor.current = pageId;\n setPageState(saver?.current ?? null);\n const placeholders = placeholderSnapshot(draft.doc.content);\n placeholderSnapshot(siteDoc.header, placeholders);\n placeholderSnapshot(siteDoc.footer, placeholders);\n const data = toEditorData(draft.doc, siteDoc, slotKeys);\n counts.current = countTypes(data);\n setH1Id(h1SectionId(data.content));\n setInvalid(null);\n setOpen({ id: pageId, path: draft.path, kind: draft.kind, data, placeholders });\n setEditorKey((k) => k + 1);\n },\n [store, autosaveDelay, slotKeys, readOnly],\n );\n\n const refreshPublishing = React.useCallback(async () => {\n const [list, live] = await Promise.all([store.listReleases(siteId), store.getLive(siteId)]);\n setReleases(list);\n setLiveId(live?.id ?? null);\n }, [store, siteId]);\n\n React.useEffect(() => {\n let cancelled = false;\n (async () => {\n try {\n const draft = await store.getDraft(siteId);\n if (!draft) throw new Error(`There's no site \"${siteId}\", or you can't edit it.`);\n const list = await store.listPages(siteId);\n if (cancelled) return;\n siteSaver.current?.dispose();\n const saver = readOnly ? null : new Autosaver<SiteDoc>({ rev: draft.rev, save: (rev, doc) => store.saveSiteDraft(siteId, rev, doc), delay: autosaveDelay ?? 800, onState: setSiteState }, draft.site);\n siteSaver.current = saver;\n setSiteState(saver?.current ?? null);\n setSite(draft.site);\n setPages(list);\n const first = list.find((p) => p.id === initialPageId) ?? list.find((p) => p.path === \"/\") ?? list[0];\n if (first) await loadPage(first.id, draft.site);\n await refreshPublishing();\n } catch (err) {\n if (!cancelled) setLoadError((err as Error).message);\n }\n })();\n if (!siteStylesheet) loadSiteCss().then(setCss, (err: unknown) => console.error(\"[genesis-sites/editor] the site stylesheet didn't load; the canvas is unstyled.\", err));\n return () => {\n cancelled = true;\n // Leaving (or switching site) mid-edit: what is waiting still goes to the store.\n saveAndDispose(siteSaver.current as Autosaver<unknown> | null);\n saveAndDispose(pageSaver.current as Autosaver<unknown> | null);\n siteSaver.current = null;\n pageSaver.current = null;\n };\n // Reload only for another site, store or mode.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [siteId, store, readOnly]);\n\n // Nothing unsaved is lost by closing the tab without being asked.\n const menuInvalid = menuDraft !== null && !menuDraft.every((i) => menuItemProblems(i).length === 0);\n React.useEffect(() => {\n const guard = (e: BeforeUnloadEvent) => {\n if (siteSaver.current?.dirty || pageSaver.current?.dirty || invalid || menuInvalid) {\n e.preventDefault();\n e.returnValue = \"\";\n }\n };\n window.addEventListener(\"beforeunload\", guard);\n return () => window.removeEventListener(\"beforeunload\", guard);\n }, [invalid, menuInvalid]);\n\n // Tell the host when there are unsaved changes, so it can ask before a route change.\n const dirty = !readOnly && (worst(siteState, pageState) !== \"saved\" || Boolean(invalid) || menuInvalid);\n const dirtyReported = React.useRef(false);\n const onDirtyChangeRef = React.useRef(onDirtyChange);\n onDirtyChangeRef.current = onDirtyChange;\n React.useEffect(() => {\n if (dirty === dirtyReported.current) return;\n dirtyReported.current = dirty;\n onDirtyChangeRef.current?.(dirty);\n }, [dirty]);\n\n // Forms on the page, for the canvas.\n const formSlugs = React.useMemo(() => {\n const slugs = new Set<string>();\n for (const item of open?.data.content ?? []) if (item.type.startsWith(\"form-embed\") && typeof item.props.form === \"string\") slugs.add(item.props.form);\n return [...slugs].sort().join(\",\");\n }, [open]);\n React.useEffect(() => {\n if (!forms || !formSlugs) return;\n let cancelled = false;\n Promise.all(formSlugs.split(\",\").map(async (slug) => [slug, await Promise.resolve(forms(slug, { siteId, pagePath: open?.path ?? \"/\", mode: \"preview\" })).catch(() => null)] as const)).then((entries) => {\n if (!cancelled) setFormMap(new Map(entries));\n });\n return () => {\n cancelled = true;\n };\n }, [forms, formSlugs, siteId, open?.path]);\n\n // ── Changes ───────────────────────────────────────────────────────────────\n const onChange = React.useCallback(\n (data: Data) => {\n // An editor still showing the page being left (between a page switch and the remount) saves nothing.\n if (!open || !site || readOnly || pageSaverFor.current !== open.id) return;\n const editorData = data as unknown as EditorData;\n counts.current = countTypes(editorData);\n setH1Id(h1SectionId(editorData.content ?? []));\n const result = fromEditorData(data as never, { slotKeys: slotKeys, placeholders: open.placeholders });\n const page = PageDoc.safeParse(result.page);\n const current = siteSaver.current?.latest ?? site;\n const nextSite = SiteDoc.safeParse({ ...current, header: result.header, footer: result.footer });\n const problems = [\n ...(page.success ? [] : page.error.issues.map((i) => (i.path.join(\".\") === \"root.props.title\" ? \"The page needs a title.\" : `${i.path.join(\".\")}: ${i.message}`))),\n ...(nextSite.success ? [] : nextSite.error.issues.map((i) => `Site ${i.path.join(\".\")}: ${i.message}`)),\n ];\n setInvalid(problems.length ? problems.join(\" \") : null);\n if (page.success) {\n // The parsed document, so what is stored has the schema's key order and an unchanged page compares equal.\n pageSaver.current?.update(page.data);\n const title = page.data.root.props.title;\n setPages((list) => (list.some((p) => p.id === open.id && p.title !== title) ? list.map((p) => (p.id === open.id ? { ...p, title } : p)) : list));\n }\n if (nextSite.success && (stableHash(current.header) !== stableHash(nextSite.data.header) || stableHash(current.footer) !== stableHash(nextSite.data.footer))) {\n siteSaver.current?.update(nextSite.data);\n setSite(nextSite.data);\n }\n },\n [open, site, slotKeys, readOnly],\n );\n\n const onNavChange = React.useCallback(\n (nav: MenuItem[]) => {\n const current = siteSaver.current?.latest ?? site;\n if (!current || readOnly) return;\n const next = SiteDoc.safeParse({ ...current, nav });\n if (!next.success) return setNotice({ tone: \"error\", text: `The menu can't be saved: ${next.error.issues[0]?.message ?? \"invalid\"}` });\n siteSaver.current?.update(next.data);\n setSite(next.data);\n },\n [site, readOnly],\n );\n\n /** The menu editor's every edit: kept as typed, and saved whenever every link is valid. */\n const onMenuEdit = React.useCallback(\n (items: MenuItem[]) => {\n // The menu stays as typed (a space after a word survives); the saved copy is trimmed.\n setMenuDraft(items);\n if (items.every((i) => menuItemProblems(i).length === 0)) onNavChange(items.map((i) => ({ label: i.label.trim(), href: i.href.trim() })));\n },\n [onNavChange],\n );\n\n /** Save everything now; false (with a notice) when something can't be. */\n const flushAll = React.useCallback(async (): Promise<boolean> => {\n if (invalid) {\n setNotice({ tone: \"error\", text: `Fix this first: ${invalid}` });\n return false;\n }\n if (menuInvalid) {\n setNotice({ tone: \"error\", text: \"Fix the menu first: a link there can't be saved yet.\" });\n return false;\n }\n try {\n await Promise.all([pageSaver.current?.flush(), siteSaver.current?.flush()]);\n return true;\n } catch (err) {\n setNotice({ tone: \"error\", text: (err as Error).message });\n return false;\n }\n }, [invalid, menuInvalid]);\n\n /**\n * The store moved documents on (a move, a create, a publish, someone else's save): take its\n * documents and revisions, and redraw the canvas when what it shows changed. Callers save\n * everything first; a document that still has unsaved changes keeps its old revision, so its\n * next save meets a conflict instead of overwriting what the store has.\n *\n * `published`: after our own publish, the hashes of what each draft may hold if only the publish\n * touched it (the draft as it was, or migrated). A document with unsaved changes then saves them on\n * the new revision only when the store's draft is one of those; anything else is someone else's\n * save, so it keeps its old revision and its next save meets the conflict.\n */\n const resync = React.useCallback(async (options: { published?: PublishedDrafts } = {}) => {\n const [draft, list] = await Promise.all([store.getDraft(siteId), store.listPages(siteId)]);\n setPages(list);\n let redraw = false;\n let siteDoc = siteSaver.current?.latest ?? site;\n // Our own publish moved the revisions on with the content we saved: edits made meanwhile save on top.\n if (draft && siteSaver.current?.dirty && options.published?.site.includes(stableHash(draft.site))) siteSaver.current.rebase(draft.rev);\n if (draft && siteSaver.current && !siteSaver.current.dirty) {\n const ours = siteSaver.current.latest;\n // Key order differs once the store has parsed a document: compare by content.\n redraw = stableHash([ours?.header, ours?.footer]) !== stableHash([draft.site.header, draft.site.footer]);\n siteSaver.current.rebase(draft.rev, draft.site);\n setSite(draft.site);\n setMenuDraft(null);\n siteDoc = draft.site;\n }\n let pageDoc = pageSaver.current?.latest ?? null;\n if (open && pageSaver.current && pageSaverFor.current === open.id) {\n const p = await store.getPageDraft(open.id);\n if (p && pageSaver.current.dirty) {\n if (options.published?.page.includes(stableHash(p.doc))) pageSaver.current.rebase(p.rev);\n } else if (p && !pageSaver.current.dirty) {\n if (stableHash(p.doc) !== stableHash(pageSaver.current.latest)) redraw = true;\n pageSaver.current.rebase(p.rev, p.doc);\n pageDoc = p.doc;\n }\n if (p && p.path !== open.path) setOpen((o) => (o ? { ...o, path: p.path } : o));\n }\n if (redraw && open && pageDoc && siteDoc) {\n const data = toEditorData(pageDoc, siteDoc, slotKeys);\n const placeholders = placeholderSnapshot([...pageDoc.content, ...siteDoc.header, ...siteDoc.footer]);\n setOpen((o) => (o ? { ...o, data, placeholders } : o));\n setEditorKey((k) => k + 1);\n }\n return { draft, list };\n }, [store, siteId, open, site, slotKeys]);\n\n const runCheck = React.useCallback(async () => {\n if (!(await flushAll())) return;\n setChecking(true);\n try {\n const result = await checkSite(store, siteId, { brand, ...(reserved ? { reserved } : {}) });\n setIssues(result.issues);\n } catch (err) {\n setIssues([{ severity: \"error\", code: \"check-failed\", message: `The checks couldn't run: ${(err as Error).message}` }]);\n } finally {\n setChecking(false);\n }\n }, [flushAll, store, siteId, brand, reserved]);\n\n // Re-check a moment after the drafts settle, while the Publish tab is open.\n const settled = worst(siteState, pageState) === \"saved\" && !invalid;\n React.useEffect(() => {\n if (rightTab !== \"publish\" || !settled) return;\n const t = setTimeout(() => void runCheck(), 600);\n return () => clearTimeout(t);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rightTab, settled, siteState?.rev, pageState?.rev]);\n\n // ── Pages ─────────────────────────────────────────────────────────────────\n const openPage = async (pageId: string) => {\n if (pageId === open?.id) return;\n if (!(await flushAll())) return;\n setBusy(true);\n try {\n focusTitle.current = true;\n await loadPage(pageId, siteSaver.current?.latest ?? site!);\n } catch (err) {\n setNotice({ tone: \"error\", text: (err as Error).message });\n } finally {\n setBusy(false);\n }\n };\n\n /**\n * A store operation that moves a revision on (add, move or delete a page): the panels and\n * canvas are inert meanwhile, so no edit lands on the revision being replaced.\n */\n const holding = async <T,>(fn: () => Promise<T>): Promise<T> => {\n setBusy(true);\n try {\n return await fn();\n } finally {\n setBusy(false);\n }\n };\n\n const createPage = (request: NewPageRequest) => holding(() => createPageNow(request));\n const createPageNow = async (request: NewPageRequest) => {\n if (!(await flushAll())) throw new Error(\"Save your changes first.\");\n const doc = request.template.doc({ title: request.title, brand });\n const meta = await store.createPage(siteId, { path: request.path, kind: request.template.kind, doc });\n const { draft } = await resync();\n let menuNote = \"\";\n if (request.addToMenu && draft) {\n const nav = [...draft.site.nav, { label: request.title.slice(0, 40), href: request.path }];\n if (nav.length <= 12) {\n onNavChange(nav);\n await siteSaver.current?.flush().catch(() => undefined);\n } else menuNote = \" The menu is full (12 links), so it isn't in the menu.\";\n }\n focusTitle.current = true;\n await loadPage(meta.id, siteSaver.current?.latest ?? draft?.site ?? site!);\n setNotice({ tone: \"info\", text: `Added ${request.title} at ${request.path}.${menuNote}` });\n };\n\n const rename = (pageId: string, path: string) => holding(() => renameNow(pageId, path));\n const renameNow = async (pageId: string, path: string) => {\n if (!(await flushAll())) throw new Error(\"Save your changes first.\");\n const before = pages.find((p) => p.id === pageId)?.path;\n const moved = await renamePage(store, pageId, path, reserved ? { reserved } : {});\n const { draft } = await resync();\n // Menu links to the old address follow the page.\n if (draft && before && draft.site.nav.some((n) => n.href === before)) onNavChange(draft.site.nav.map((n) => (n.href === before ? { ...n, href: moved.path } : n)));\n setNotice({ tone: \"info\", text: `Moved to ${moved.path}. ${before} now redirects there.` });\n };\n\n const remove = async (pageId: string) => {\n if (!(await flushAll())) return;\n setBusy(true);\n try {\n const gone = pages.find((p) => p.id === pageId);\n await store.deletePage(pageId);\n const { draft, list } = await resync();\n if (draft && gone && draft.site.nav.some((n) => n.href === gone.path)) onNavChange(draft.site.nav.filter((n) => n.href !== gone.path));\n focusTitle.current = true;\n if (pageId === open?.id) {\n const home = list.find((p) => p.path === \"/\") ?? list[0];\n if (home && draft) await loadPage(home.id, siteSaver.current?.latest ?? draft.site);\n } else focusPageTitle();\n setNotice({ tone: \"info\", text: `Deleted ${gone?.title ?? \"the page\"}.` });\n } catch (err) {\n setNotice({ tone: \"error\", text: (err as Error).message });\n } finally {\n setBusy(false);\n }\n };\n\n const reorder = async (pageId: string, by: -1 | 1) => {\n try {\n setPages(await movePageInList(store, siteId, pageId, by));\n } catch (err) {\n setNotice({ tone: \"error\", text: (err as Error).message });\n }\n };\n\n // ── Publishing ────────────────────────────────────────────────────────────\n /**\n * What the drafts may hold after our publish, if nobody else saves meanwhile: each draft as the\n * store has it now, or migrated (a publish re-saves migrated drafts). Read only while the store\n * still has what this editor last saved (the same revision), so another editor's save is never\n * taken for ours.\n */\n const publishedDrafts = async (): Promise<PublishedDrafts> => {\n const pageId = open && pageSaverFor.current === open.id ? open.id : null;\n const [draft, page] = await Promise.all([store.getDraft(siteId), pageId ? store.getPageDraft(pageId) : null]);\n const siteRev = siteSaver.current?.current.rev;\n const pageRev = pageSaver.current?.current.rev;\n return {\n site: draft && draft.rev === siteRev ? [stableHash(draft.site), stableHash(migrateSite(draft.site).site)] : [],\n page: page && page.rev === pageRev ? [stableHash(page.doc), stableHash(migratePage(page.doc).doc)] : [],\n };\n };\n\n const publish = async (note: string): Promise<boolean> => {\n if (readOnly) return false;\n // The canvas locks first, so nothing typed now misses the flush or lands mid-publish.\n lockedRef.current = true;\n setPublishing(true);\n const savers = [siteSaver.current, pageSaver.current] as (Autosaver<unknown> | null)[];\n let held = false;\n let published: PublishedDrafts = { site: [], page: [] };\n try {\n if (!(await flushAll())) return false;\n // A store's publish re-saves migrated drafts on their revisions: no autosave may race it.\n for (const s of savers) s?.pause();\n held = true;\n published = await publishedDrafts();\n const result = await publishSite(store, siteId, { brand, note, ...(reserved ? { reserved } : {}) });\n if (\"blocked\" in result) {\n setIssues(result.blocked);\n setNotice({ tone: \"error\", text: \"Not published: fix the problems the checks list.\" });\n return false;\n }\n await refreshPublishing();\n setNotice({ tone: \"info\", text: `Published release ${result.release.number}.` });\n onPublish?.(result.release);\n return true;\n } catch (err) {\n setNotice({ tone: \"error\", text: `Publishing failed: ${(err as Error).message}` });\n return false;\n } finally {\n // Adopt the revisions the publish left (it may have re-saved drafts, even if it then failed), then save\n // anything that collected meanwhile on them.\n if (held) await resync({ published }).catch((err: unknown) => console.error(\"[genesis-sites/editor] couldn't reload the drafts after publishing.\", err));\n for (const s of savers) s?.resume();\n setPublishing(false);\n }\n };\n\n const rollback = async (releaseId: string) => {\n if (readOnly) return;\n try {\n const release = await store.rollback(siteId, releaseId);\n await refreshPublishing();\n setNotice({ tone: \"info\", text: `The live site is release ${release.number} again.` });\n } catch (err) {\n setNotice({ tone: \"error\", text: `Rolling back failed: ${(err as Error).message}` });\n }\n };\n\n const showPreview = async (mode: \"preview\" | \"live\") => {\n if (!open) return;\n if (mode === \"preview\" && !(await flushAll())) return;\n setPreview({ mode, path: open.path, html: null });\n try {\n const result = await renderPreview({ store, siteId, brand, path: open.path, mode, ...(forms ? { forms } : {}) });\n setPreview({\n mode,\n path: open.path,\n html: result.html,\n ...(result.html ? {} : { note: result.location ? `This address redirects to ${result.location}.` : mode === \"live\" ? \"This page isn't on the live site.\" : \"This page couldn't be drawn.\" }),\n });\n } catch (err) {\n setPreview({ mode, path: open.path, html: null, note: `The preview failed: ${(err as Error).message}` });\n }\n };\n\n // ── Conflicts ─────────────────────────────────────────────────────────────\n const conflict = pageState?.status === \"conflict\" ? \"page\" : siteState?.status === \"conflict\" ? \"site\" : null;\n const resolveConflict = async (choice: \"reload\" | \"overwrite\") => {\n if (!open || !site) return;\n if (choice === \"overwrite\") {\n const saver = conflict === \"page\" ? pageSaver.current : siteSaver.current;\n await (saver as Autosaver<unknown> | null)?.overwrite().catch((err: Error) => setNotice({ tone: \"error\", text: err.message }));\n return;\n }\n if (conflict === \"site\") {\n const theirs = siteSaver.current?.reload();\n if (theirs) {\n setSite(theirs);\n setMenuDraft(null);\n const page = pageSaver.current?.latest;\n if (page) {\n const placeholders = placeholderSnapshot(page.content);\n placeholderSnapshot(theirs.header, placeholders);\n placeholderSnapshot(theirs.footer, placeholders);\n setOpen({ ...open, data: toEditorData(page, theirs, slotKeys), placeholders });\n }\n setEditorKey((k) => k + 1);\n }\n } else {\n const theirs = pageSaver.current?.reload();\n if (theirs) {\n const siteDoc = siteSaver.current?.latest ?? site;\n setPages((list) => list.map((p) => (p.id === open.id ? { ...p, title: theirs.root.props.title } : p)));\n setOpen({ ...open, data: toEditorData(theirs, siteDoc, slotKeys), placeholders: placeholderSnapshot([...theirs.content, ...siteDoc.header, ...siteDoc.footer]) });\n setEditorKey((k) => k + 1);\n }\n }\n };\n\n // ── Focus and announcements ───────────────────────────────────────────────\n /** After a page opens or goes, focus lands on the page's name in the toolbar, not on nothing. */\n function focusPageTitle() {\n requestAnimationFrame(() => document.getElementById(titleId)?.focus());\n }\n // A remounted canvas starts at Puck's default width, so the viewport buttons do too.\n React.useEffect(() => setViewport(\"desktop\"), [editorKey]);\n React.useEffect(() => {\n if (!focusTitle.current) return;\n focusTitle.current = false;\n focusPageTitle();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [editorKey]);\n const announce = React.useCallback((message: string) => {\n // Cleared first so the same message twice is announced twice.\n setAnnouncement(\"\");\n requestAnimationFrame(() => setAnnouncement(message));\n }, []);\n\n /**\n * Puck deletes the selected section on Delete or Backspace unless focus is in a text field. In the\n * side panels focus is often on a button, radio or switch: those keys must not remove a section there.\n */\n const keepDeleteInPanel = (e: React.KeyboardEvent) => {\n if (e.key !== \"Delete\" && e.key !== \"Backspace\") return;\n const target = e.target as HTMLElement;\n const textEntry = target.closest(\"textarea, [contenteditable=''], [contenteditable='true']\") || (target instanceof HTMLInputElement && ![\"button\", \"checkbox\", \"radio\", \"submit\", \"reset\", \"file\", \"range\", \"color\"].includes(target.type));\n // Puck skips its delete when the event is already handled (defaultPrevented); on a button or radio these keys do nothing else.\n if (!textEntry) e.preventDefault();\n };\n\n // ── Services for fields ───────────────────────────────────────────────────\n const services = React.useMemo<EditorServices>(\n () => ({\n siteId,\n store,\n ...(assets ? { assets } : {}),\n pickImage: (opts) => new Promise((resolve) => setPicker({ ...(opts?.current ? { current: opts.current } : {}), ...(opts?.altElsewhere ? { altElsewhere: true } : {}), resolve })),\n }),\n [siteId, store, assets],\n );\n\n const metadata = React.useMemo<CanvasMetadata>(\n () => ({\n site: { name: site?.name ?? \"\", lang: site?.lang ?? \"en\", nav: site?.nav ?? [], ...(brand && \"logo\" in brand && brand.logo ? { logo: { src: brand.logo.src, alt: brand.logo.alt?.trim() || brandDisplayName(brand) } } : {}) },\n pagePath: open?.path ?? \"/\",\n forms: Object.fromEntries(formMap),\n h1Id,\n placeholders: Object.fromEntries(open?.placeholders ?? []),\n }),\n [site?.name, site?.lang, site?.nav, brand, open?.path, open?.placeholders, formMap, h1Id],\n );\n\n const overrides = React.useMemo(() => genesisOverrides(editor.components, { iframe: iframe as never }, { announce }), [editor.components, iframe, announce]);\n // Puck merges these into what it has, so both states are passed in full.\n const permissions = locked ? LOCKED : UNLOCKED;\n\n if (loadError) {\n return (\n <Alert variant=\"destructive\" className={className}>\n <AlertTitle>The editor couldn't open this site</AlertTitle>\n <AlertDescription>{loadError}</AlertDescription>\n </Alert>\n );\n }\n if (!site || !open) {\n return (\n <div className={cn(\"flex h-full min-h-64 items-center justify-center gap-2 text-sm text-muted-foreground\", className)} role=\"status\">\n <Spinner /> Opening the editor…\n </div>\n );\n }\n\n const saveStatus: SaveStatus = invalid || menuInvalid ? \"invalid\" : worst(siteState, pageState);\n const pageMeta = pages.find((p) => p.id === open.id);\n const pageTitle = pageMeta?.title ?? open.data.root.props.title;\n const blockedReason = invalid ? `Fix this first: ${invalid}` : conflict ? \"Choose a version in the conflict first.\" : null;\n\n return (\n <EditorServicesContext.Provider value={services}>\n <EditorLockContext.Provider value={locked}>\n <div className={cn(\"flex h-full min-h-0 flex-col bg-background text-foreground\", className)} data-gs-editor=\"\">\n <Puck\n key={editorKey}\n config={editor.config}\n data={open.data as unknown as Data}\n onChange={onChange}\n permissions={permissions}\n overrides={overrides}\n metadata={metadata as unknown as Record<string, unknown>}\n iframe={{ enabled: true, waitForStyles: true }}\n viewports={[\n { width: 390, label: \"Phone\", icon: \"Smartphone\" },\n { width: 768, label: \"Tablet\", icon: \"Tablet\" },\n { width: \"100%\", label: \"Desktop\", icon: \"Monitor\" },\n ]}\n headerTitle={site.name}\n >\n <div className=\"flex h-full min-h-0 flex-col\">\n <SelectionWatcher onSelect={() => setRightTab(\"edit\")} />\n <p role=\"status\" className=\"sr-only\">\n {announcement}\n </p>\n <Toolbar siteName={site.name} pageTitle={`${pageTitle} (${open.path})`} titleId={titleId} saveStatus={saveStatus} mode={readOnly ? \"view\" : publishing ? \"publishing\" : \"edit\"} viewport={viewport} onViewport={setViewport} onPreview={() => void showPreview(\"preview\")} />\n {readOnly ? (\n <p role=\"note\" className=\"border-b border-border bg-muted px-3 py-2 text-sm\" data-gs-view-only=\"\">\n View only: you can look through this site's pages, but not change or publish them.\n </p>\n ) : null}\n {notice || invalid ? (\n <div className=\"flex flex-col gap-2 border-b border-border px-3 py-2\">\n {invalid ? (\n <p role=\"alert\" className=\"text-sm text-destructive\">\n Not saved yet: {invalid}\n </p>\n ) : null}\n {notice ? (\n <div role={notice.tone === \"error\" ? \"alert\" : \"status\"} className={cn(\"flex items-center justify-between gap-2 text-sm\", notice.tone === \"error\" ? \"text-destructive\" : \"text-foreground\")}>\n <span>{notice.text}</span>\n <Button type=\"button\" size=\"sm\" variant=\"ghost\" onClick={() => setNotice(null)} aria-label=\"Dismiss\">\n Dismiss\n </Button>\n </div>\n ) : null}\n </div>\n ) : null}\n <div className=\"grid min-h-0 flex-1 grid-cols-1 lg:grid-cols-[17rem_minmax(0,1fr)_20rem]\" inert={busy || undefined} aria-busy={busy || undefined}>\n <aside className=\"flex min-h-0 flex-col border-b border-border lg:border-b-0 lg:border-r\" aria-label=\"Sections and pages\" onKeyDown={keepDeleteInPanel}>\n <Tabs defaultValue=\"add\" value={leftTab} onValueChange={setLeftTab} className=\"flex min-h-0 flex-1 flex-col\">\n <TabsList className={cn(\"m-2 grid\", readOnly ? \"grid-cols-2\" : \"grid-cols-3\")}>\n {readOnly ? null : <TabsTrigger value=\"add\">Add</TabsTrigger>}\n <TabsTrigger value=\"outline\">Outline</TabsTrigger>\n <TabsTrigger value=\"pages\">Pages</TabsTrigger>\n </TabsList>\n {readOnly ? null : (\n <TabsContent value=\"add\" className=\"mt-0 min-h-0 flex-1 overflow-y-auto px-2 pb-4\" data-gs-drawer=\"\">\n <p className=\"px-1 pb-2 text-xs text-muted-foreground\">{publishing ? \"Publishing: sections can be added again in a moment.\" : \"Drag a section onto the page, or press Add to put it at the end.\"}</p>\n <Puck.Components />\n </TabsContent>\n )}\n <TabsContent value=\"outline\" className=\"mt-0 min-h-0 flex-1 overflow-y-auto px-2 pb-4\">\n <Puck.Outline />\n </TabsContent>\n <TabsContent value=\"pages\" className=\"mt-0 min-h-0 flex-1 overflow-y-auto\">\n <PagesTab\n pages={pages}\n currentId={open.id}\n nav={menuDraft ?? site.nav}\n reserved={reserved}\n canReorder={Boolean(store.reorderPages)}\n busy={busy || publishing}\n readOnly={readOnly}\n onOpen={(id) => void openPage(id)}\n onCreate={createPage}\n onRename={rename}\n onDelete={remove}\n onReorder={reorder}\n onNavChange={onMenuEdit}\n onFooter={() => setRightTab(\"edit\")}\n />\n </TabsContent>\n </Tabs>\n </aside>\n {/* A region, not <main>: the editor sits inside the host app's own main landmark. */}\n <section className=\"relative min-h-[28rem] min-w-0 bg-muted\" aria-label=\"Page canvas\" data-gs-canvas=\"\">\n <Puck.Preview />\n </section>\n <aside className=\"flex min-h-0 flex-col border-t border-border lg:border-l lg:border-t-0\" aria-label=\"Section settings and publishing\" onKeyDown={keepDeleteInPanel}>\n <Tabs defaultValue=\"edit\" value={rightTab} onValueChange={setRightTab} className=\"flex min-h-0 flex-1 flex-col\">\n <TabsList className=\"m-2 grid grid-cols-2\">\n <TabsTrigger value=\"edit\">Edit</TabsTrigger>\n <TabsTrigger value=\"publish\">{readOnly ? \"Releases\" : \"Publish\"}</TabsTrigger>\n </TabsList>\n <TabsContent value=\"edit\" className=\"mt-0 min-h-0 flex-1 overflow-y-auto px-2 pb-4\" data-gs-fields=\"\">\n <Puck.Fields />\n </TabsContent>\n <TabsContent value=\"publish\" className=\"mt-0 min-h-0 flex-1 overflow-y-auto\">\n <PublishPanel\n pagePath={open.path}\n pageTitle={pageTitle}\n siteName={site.name}\n issues={issues}\n checking={checking}\n publishing={publishing}\n blockedReason={blockedReason}\n releases={releases}\n liveReleaseId={liveId}\n previewUrl={previewUrl}\n currentPageId={open.id}\n readOnly={readOnly}\n onCheck={() => void runCheck()}\n onPublish={publish}\n onRollback={rollback}\n onPreview={(mode) => void showPreview(mode)}\n onOpenPage={(id) => void openPage(id)}\n onShowSection={(id) => {\n setRightTab(\"edit\");\n scrollCanvasTo(id);\n }}\n />\n </TabsContent>\n </Tabs>\n </aside>\n </div>\n </div>\n </Puck>\n\n <AssetPicker\n open={picker !== null}\n siteId={siteId}\n store={store}\n assets={assets}\n current={picker?.current}\n altElsewhere={picker?.altElsewhere}\n onDone={(image) => {\n picker?.resolve(image);\n setPicker(null);\n }}\n />\n\n <AlertDialog open={conflict !== null}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{conflict === \"page\" ? \"Someone else saved this page\" : \"Someone else saved the site's header, footer or menu\"}</AlertDialogTitle>\n <AlertDialogDescription>\n Their changes reached the server while you were editing. Load their version (your unsaved changes here are dropped), or keep yours (theirs are replaced).\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel onClick={() => void resolveConflict(\"reload\")}>Load their version</AlertDialogCancel>\n <AlertDialogAction onClick={() => void resolveConflict(\"overwrite\")}>Keep mine</AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n\n <Dialog open={preview !== null} onOpenChange={(o) => (o ? null : setPreview(null))}>\n <DialogContent className=\"flex h-[90vh] w-[95vw] max-w-6xl flex-col sm:max-w-6xl\">\n <DialogHeader>\n <DialogTitle>{preview?.mode === \"live\" ? `Live: ${preview.path}` : `Preview: ${preview?.path}`}</DialogTitle>\n <DialogDescription>{preview?.mode === \"live\" ? \"What visitors get now, from the published release.\" : \"Your drafts, drawn by the same renderer the live site uses.\"}</DialogDescription>\n </DialogHeader>\n {preview?.html ? (\n <iframe title={`${preview.mode === \"live\" ? \"Live page\" : \"Preview\"} of ${preview.path}`} srcDoc={preview.html} sandbox=\"\" className=\"min-h-0 w-full flex-1 rounded-md border border-border bg-background\" />\n ) : preview?.note ? (\n <p className=\"text-sm\">{preview.note}</p>\n ) : (\n <div role=\"status\" className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Spinner /> Drawing the page…\n </div>\n )}\n </DialogContent>\n </Dialog>\n </div>\n </EditorLockContext.Provider>\n </EditorServicesContext.Provider>\n );\n}\n"]}
|