@realiizlabs/admin 0.8.2 → 0.9.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/forms-ui/ChipsInput.tsx","../../src/forms-ui/controls.tsx","../../src/forms-ui/Field.tsx","../../src/forms-ui/md/table.ts","../../src/forms-ui/md/edits.ts","../../src/forms-ui/md/icons.tsx","../../src/forms-ui/md/TableGrid.tsx","../../src/forms-ui/MarkdownEditor.tsx","../../src/forms-ui/issues.ts","../../src/forms-ui/values.ts","../../src/forms-ui/ContentForm.tsx"],"names":["jsx","jsxs","useState","useRef","useEffect","Fragment","useCallback"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * ChipsInput — tags as chips. Enter or comma adds, × or Backspace-on-empty\n * removes. The value is a string[]; the schema's length/regex rules still run\n * on submit, this is only a nicer way to type them.\n */\n\nimport { useState, type KeyboardEvent } from \"react\";\n\nexport function ChipsInput({ id, name, value, onChange, onBlur, placeholder, invalid, max }: {\n id: string;\n name: string;\n value: string[];\n onChange: (v: string[]) => void;\n onBlur: () => void;\n placeholder?: string;\n invalid?: boolean;\n /** When the schema says exactly N, show \"n of N\". */\n max?: number;\n}) {\n const [draft, setDraft] = useState(\"\");\n\n const commit = () => {\n const parts = draft.split(\",\").map((s) => s.trim()).filter(Boolean);\n if (parts.length) onChange([...value, ...parts.filter((p) => !value.includes(p))]);\n setDraft(\"\");\n };\n\n const onKey = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" || e.key === \",\") {\n e.preventDefault();\n commit();\n } else if (e.key === \"Backspace\" && draft === \"\" && value.length) {\n onChange(value.slice(0, -1));\n }\n };\n\n return (\n <div className={[\"realiiz-chips\", invalid && \"realiiz-form__control--invalid\"].filter(Boolean).join(\" \")} data-name={name}>\n {value.map((tag) => (\n <span key={tag} className=\"realiiz-chip\">\n {tag}\n <button type=\"button\" aria-label={`Remove ${tag}`} onClick={() => onChange(value.filter((t) => t !== tag))}>×</button>\n </span>\n ))}\n <input\n id={id}\n type=\"text\"\n className=\"realiiz-chips__input\"\n value={draft}\n placeholder={value.length ? \"\" : placeholder}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={onKey}\n onBlur={() => { commit(); onBlur(); }}\n aria-invalid={invalid || undefined}\n />\n {typeof max === \"number\" && <span className=\"realiiz-chips__count\">{value.length} of {max}</span>}\n </div>\n );\n}\n","/**\n * One control per InputKind. Dumb: value in, change out. Field.tsx owns the\n * label, helper row and error; ContentForm owns state.\n */\n\nimport type { FieldSpec } from \"../forms\";\nimport type { ControlValue } from \"./values\";\n\nexport interface ControlProps {\n id: string;\n spec: FieldSpec;\n value: ControlValue;\n invalid: boolean;\n options?: string[] | \"loading\";\n onChange: (v: ControlValue) => void;\n onBlur: () => void;\n}\n\nexport function Control(p: ControlProps) {\n const cls = [\"realiiz-form__control\", p.invalid && \"realiiz-form__control--invalid\"].filter(Boolean).join(\" \");\n const common = {\n id: p.id,\n name: p.spec.name,\n \"aria-invalid\": p.invalid || undefined,\n \"aria-describedby\": p.invalid ? `${p.id}-error` : undefined,\n onBlur: p.onBlur,\n } as const;\n const str = typeof p.value === \"string\" ? p.value : \"\";\n\n if (p.options === \"loading\") {\n return <div className={cls} aria-busy=\"true\" style={{ color: \"var(--_muted)\" }}>Loading options…</div>;\n }\n\n if (p.options || p.spec.input === \"select\") {\n return (\n <select {...common} className={cls} value={str} onChange={(e) => p.onChange(e.target.value)}>\n {!p.spec.required && <option value=\"\">—</option>}\n {(p.options ?? []).map((o) => (\n <option key={o} value={o}>{o}</option>\n ))}\n </select>\n );\n }\n\n switch (p.spec.input) {\n case \"textarea\":\n return (\n <textarea {...common} className={`${cls} realiiz-form__control--textarea`} value={str}\n placeholder={p.spec.placeholder} onChange={(e) => p.onChange(e.target.value)} />\n );\n case \"boolean\":\n return (\n <input {...common} type=\"checkbox\" checked={p.value === true} onChange={(e) => p.onChange(e.target.checked)} />\n );\n case \"image\":\n return (\n <input {...common} type=\"file\" accept=\"image/*\" className={cls}\n onChange={(e) => p.onChange(e.target.files?.[0] ?? null)} />\n );\n case \"date\":\n return <input {...common} type=\"date\" className={cls} value={str} onChange={(e) => p.onChange(e.target.value)} />;\n case \"number\":\n return (\n <input {...common} type=\"number\" inputMode=\"numeric\" className={cls} value={str}\n min={p.spec.constraints.min} max={p.spec.constraints.max}\n step={p.spec.constraints.format === \"int\" ? 1 : undefined}\n placeholder={p.spec.placeholder} onChange={(e) => p.onChange(e.target.value)} />\n );\n case \"url\":\n return (\n <input {...common} type=\"url\" className={cls} value={str} placeholder={p.spec.placeholder ?? \"https://\"}\n onChange={(e) => p.onChange(e.target.value)} />\n );\n default:\n return (\n <input {...common} type=\"text\" className={cls} value={str} placeholder={p.spec.placeholder}\n maxLength={p.spec.constraints.max} onChange={(e) => p.onChange(e.target.value)} />\n );\n }\n}\n","/**\n * Field anatomy: label (+ required marker) → control → helper row (length\n * gauge / character count) → error text. The error sits under the control,\n * never in a tooltip — the audience is a non-technical client.\n */\n\nimport type { FieldSpec } from \"../forms\";\nimport type { FieldIssue } from \"./issues\";\nimport type { ReactNode } from \"react\";\nimport { ChipsInput } from \"./ChipsInput\";\nimport { Control } from \"./controls\";\nimport type { ControlValue } from \"./values\";\n\nexport interface FieldProps {\n formId: string;\n spec: FieldSpec;\n value: ControlValue;\n current?: string;\n issues: FieldIssue[];\n options?: string[] | \"loading\";\n onChange: (v: ControlValue) => void;\n onBlur: () => void;\n /** How to draw a label that has help text — e.g. the site's own tooltip component. */\n renderLabel?: LabelRenderer;\n}\n\nexport type LabelRenderer = (label: string, help: string) => ReactNode;\n\n/** Fallback when the host has no tooltip component: dotted underline + the browser's own title bubble. */\nconst defaultLabel: LabelRenderer = (label, help) => <span className=\"realiiz-form__help\" title={help}>{label}</span>;\n\n/**\n * Advisory length gauge. The bar is the whole scale (a bit past the max so\n * \"over\" has room to show), a green band marks the target range, and the fill\n * grows with the text in the state's colour: grey while short, green in range,\n * red past it. The words repeat only what the bar can't: the count and a verdict.\n */\nexport function LengthGauge({ length: raw, range, suffix }: { length: number; range: [number, number]; suffix?: string }) {\n const [min, max] = range;\n // The suffix is what the site adds on render (\" — Realiiz\"), so it counts once there is something to add it to.\n const length = raw === 0 ? 0 : raw + (suffix?.length ?? 0);\n const state = length === 0 ? \"empty\" : length < min ? \"short\" : length <= max ? \"ok\" : \"over\";\n const scale = Math.round(max * 1.3);\n const pct = (n: number) => `${Math.min(100, (n / scale) * 100)}%`;\n const verdict =\n state === \"ok\" ? \"good length\"\n : state === \"over\" ? `over ${max} — may be cut off`\n : `aim for ${min}–${max}`;\n const incl = suffix && length > 0 ? ` incl. “${suffix.trim()}”` : \"\";\n return (\n <span className={`realiiz-gauge realiiz-gauge--${state}`} title={`Recommended ${min}–${max} characters${suffix ? ` including “${suffix.trim()}”` : \"\"}`}>\n <span className=\"realiiz-gauge__bar\" aria-hidden=\"true\">\n <span className=\"realiiz-gauge__zone\" style={{ left: pct(min), width: `calc(${pct(max)} - ${pct(min)})` }} />\n <span className=\"realiiz-gauge__fill\" style={{ width: pct(length) }} />\n </span>\n <span className=\"realiiz-gauge__text\">\n <b>{length}</b> characters{incl} · {verdict}\n </span>\n </span>\n );\n}\n\nexport function Field(p: FieldProps) {\n const id = `${p.formId}-${p.spec.name}`;\n const invalid = p.issues.length > 0;\n const max = p.spec.constraints.max;\n const isText = p.spec.input === \"text\" || p.spec.input === \"textarea\";\n const len = typeof p.value === \"string\" ? p.value.length : 0;\n const isCheck = p.spec.input === \"boolean\";\n const isTags = p.spec.input === \"tags\";\n const labelText = p.spec.help ? (p.renderLabel ?? defaultLabel)(p.spec.label, p.spec.help) : p.spec.label;\n\n const control = isTags ? (\n <ChipsInput\n id={id}\n name={p.spec.name}\n value={Array.isArray(p.value) ? p.value : []}\n onChange={(v) => p.onChange(v)}\n onBlur={p.onBlur}\n placeholder={p.spec.placeholder}\n invalid={invalid}\n max={p.spec.constraints.exact ?? p.spec.constraints.max}\n />\n ) : (\n <Control id={id} spec={p.spec} value={p.value} invalid={invalid} options={p.options} onChange={p.onChange} onBlur={p.onBlur} />\n );\n\n return (\n <div className={`realiiz-form__field realiiz-form__field--${p.spec.input}`} data-field={p.spec.name}>\n {isCheck ? (\n <label className=\"realiiz-form__check\" htmlFor={id}>\n {control}\n <span>{labelText}{p.spec.required && <span className=\"realiiz-form__required\" aria-hidden=\"true\">*</span>}</span>\n </label>\n ) : (\n <>\n <label className=\"realiiz-form__label\" htmlFor={id}>\n {labelText}\n {p.spec.required && <span className=\"realiiz-form__required\" aria-hidden=\"true\">*</span>}\n </label>\n {control}\n </>\n )}\n {p.spec.input === \"image\" && p.current && !(p.value instanceof File) && (\n <div className=\"realiiz-form__current\">Current: {p.current}</div>\n )}\n {isText && (p.spec.recommended || typeof max === \"number\") && (\n <div className=\"realiiz-form__helper\">\n {p.spec.recommended ? (\n <LengthGauge length={len} range={p.spec.recommended} suffix={p.spec.suffix} />\n ) : (\n <span />\n )}\n {typeof max === \"number\" && <span className=\"realiiz-form__count\">{len} / {max}</span>}\n </div>\n )}\n {invalid && (\n <div className=\"realiiz-form__error\" id={`${id}-error`}>\n {p.issues.map((i, n) => <div key={n}>{i.message}</div>)}\n </div>\n )}\n </div>\n );\n}\n","/**\n * Markdown tables as data — ported from the surveillance-review report editor.\n *\n * `tableAt` finds the table under the caret (header + separator required),\n * `renderTable` writes one back padded to an even grid so the source is\n * readable, and `applyTableOp` does the four row/column edits. Pure functions\n * over the textarea's string; no DOM.\n */\n\nexport type Align = \"l\" | \"L\" | \"c\" | \"r\";\nexport type TableOp = \"rowAfter\" | \"rowDel\" | \"colAfter\" | \"colDel\";\n\nexport interface TableAt {\n start: number;\n end: number;\n rows: string[][];\n align: Align[];\n /** Row index of the caret; header and separator both count as 0. */\n row: number;\n col: number;\n}\n\nconst ROW = /^\\s*\\|.*\\|\\s*$/;\nconst SEP = /^\\s*\\|[\\s:|-]+\\|\\s*$/;\n\nexport function tableCells(line: string): string[] {\n return line.trim().replace(/^\\|/, \"\").replace(/\\|$/, \"\").split(/(?<!\\\\)\\|/).map((c) => c.trim());\n}\n\nexport function tableAt(v: string, pos: number): TableAt | null {\n const lines = v.split(\"\\n\");\n let i = 0, off = 0;\n while (i < lines.length && pos > off + lines[i].length) { off += lines[i].length + 1; i++; }\n if (i >= lines.length || !ROW.test(lines[i])) return null;\n let s = i, e = i;\n while (s > 0 && ROW.test(lines[s - 1])) s--;\n while (e < lines.length - 1 && ROW.test(lines[e + 1])) e++;\n if (e - s < 1 || !SEP.test(lines[s + 1])) return null;\n const start = lines.slice(0, s).reduce((n, l) => n + l.length + 1, 0);\n const end = start + lines.slice(s, e + 1).join(\"\\n\").length;\n // \"L\" is an explicit left-align (:---) kept distinct from the default so we never rewrite a line the user typed.\n const align = tableCells(lines[s + 1]).map((c): Align =>\n c.startsWith(\":\") && c.endsWith(\":\") ? \"c\" : c.endsWith(\":\") ? \"r\" : c.startsWith(\":\") ? \"L\" : \"l\");\n const rows = lines.slice(s, e + 1).filter((_, n) => n !== 1).map(tableCells);\n const col = Math.max(0, (lines[i].slice(0, pos - off).match(/(?<!\\\\)\\|/g) || []).length - 1);\n const row = i - s <= 1 ? 0 : i - s - 1;\n return { start, end, rows, align, row, col };\n}\n\nexport function renderTable(rows: string[][], align: Align[]): string {\n const cols = Math.max(...rows.map((r) => r.length));\n const w: number[] = [];\n for (let c = 0; c < cols; c++) w[c] = Math.max(3, ...rows.map((r) => (r[c] || \"\").length));\n const pad = (t: string | undefined, c: number) => (t || \"\").padEnd(w[c]);\n const line = (r: string[]) => \"| \" + Array.from({ length: cols }, (_, c) => pad(r[c], c)).join(\" | \") + \" |\";\n const sep = \"|\" + Array.from({ length: cols }, (_, c) =>\n align[c] === \"c\" ? \":\" + \"-\".repeat(w[c]) + \":\"\n : align[c] === \"r\" ? \" \" + \"-\".repeat(w[c] - 1) + \": \"\n : align[c] === \"L\" ? \":\" + \"-\".repeat(w[c] - 1) + \" \"\n : \" \" + \"-\".repeat(w[c]) + \" \").join(\"|\") + \"|\";\n return [line(rows[0]), sep, ...rows.slice(1).map(line)].join(\"\\n\");\n}\n\n/** A new table: header placeholders (\"Column 1\"…) plus `rows` empty body rows. */\nexport function newTable(rows: number, cols: number): { text: string; firstHeader: string } {\n const head = Array.from({ length: cols }, (_, i) => `Column ${i + 1}`);\n const grid = [head, ...Array.from({ length: rows }, () => Array<string>(cols).fill(\"\"))];\n return { text: renderTable(grid, Array<Align>(cols).fill(\"l\")), firstHeader: head[0] };\n}\n\nexport type TableEdit = { text: string; a: number; b: number } | { error: string };\n\nexport function applyTableOp(v: string, pos: number, op: TableOp): TableEdit | null {\n const t = tableAt(v, pos);\n if (!t) return null;\n const rows = t.rows.map((r) => r.slice());\n const cols = Math.max(...rows.map((r) => r.length));\n const align = t.align.slice();\n if (op === \"rowAfter\") {\n rows.splice(Math.max(1, t.row + 1), 0, Array<string>(cols).fill(\"\"));\n } else if (op === \"rowDel\") {\n if (t.row === 0 || rows.length <= 2) return { error: \"A table needs its header row and at least one row below it.\" };\n rows.splice(t.row, 1);\n } else if (op === \"colAfter\") {\n rows.forEach((r) => { while (r.length < cols) r.push(\"\"); r.splice(t.col + 1, 0, \"\"); });\n align.splice(t.col + 1, 0, \"l\");\n } else if (op === \"colDel\") {\n if (cols <= 1) return { error: \"That's the last column — delete the table instead.\" };\n rows.forEach((r) => r.splice(t.col, 1));\n align.splice(t.col, 1);\n }\n const out = renderTable(rows, align);\n return { text: v.slice(0, t.start) + out + v.slice(t.end), a: t.start, b: t.start + out.length };\n}\n","/**\n * Toolbar edits — pure functions (text, selStart, selEnd) → { text, a, b }.\n *\n * Every formatting tool TOGGLES, like the surveillance-review report editor:\n * bold on bold text un-bolds; H2 on an H2 line removes it; H3 on an H2 line\n * swaps it; link anywhere inside a link removes it. `activeTools` reports which\n * of them the caret is currently \"in\", so the buttons can light up and say what\n * they're about to do.\n */\n\nimport { newTable } from \"./table\";\n\nexport type Edit = { text: string; a: number; b: number };\nexport type Apply = (s: string, a: number, b: number) => Edit;\n\n/** Inline marks: wrapped selection → unwrap; selection inside markers → unwrap; else wrap. */\nexport const toggleWrap = (mark: string, placeholder = \"text\"): Apply =>\n (s, a, b) => {\n const sel = s.slice(a, b);\n const n = mark.length;\n if (sel.length >= 2 * n && sel.startsWith(mark) && sel.endsWith(mark)) {\n const inner = sel.slice(n, sel.length - n);\n return { text: s.slice(0, a) + inner + s.slice(b), a, b: a + inner.length };\n }\n if (s.slice(a - n, a) === mark && s.slice(b, b + n) === mark) {\n return { text: s.slice(0, a - n) + sel + s.slice(b + n), a: a - n, b: a - n + sel.length };\n }\n const body = sel || placeholder;\n return { text: s.slice(0, a) + mark + body + mark + s.slice(b), a: a + n, b: a + n + body.length };\n };\n\n/** Every line prefix a line tool might own; setting one strips any other in the family. */\nexport const PREFIX_RE = /^(#{1,6}\\s+|[-*+]\\s+|\\d+[.)]\\s+|>\\s?)/;\n\nconst lineSpan = (s: string, a: number, b: number) => {\n const start = s.lastIndexOf(\"\\n\", a - 1) + 1;\n const endIdx = s.indexOf(\"\\n\", Math.max(b, a));\n return { start, end: endIdx === -1 ? s.length : endIdx };\n};\n\n/** Line tools: if every selected line already has THIS prefix, remove it; otherwise replace whatever prefix they have. */\nexport const toggleLines = (prefix: string | ((i: number) => string), matches: (line: string) => boolean): Apply =>\n (s, a, b) => {\n const { start, end } = lineSpan(s, a, b);\n const lines = s.slice(start, end).split(\"\\n\");\n const allOn = lines.every((l) => l.trim() === \"\" || matches(l));\n const out = lines.map((l, i) => {\n const bare = l.replace(PREFIX_RE, \"\");\n return allOn ? bare : (typeof prefix === \"string\" ? prefix : prefix(i)) + bare;\n });\n const replaced = out.join(\"\\n\");\n return { text: s.slice(0, start) + replaced + s.slice(end), a: start, b: start + replaced.length };\n };\n\nconst LINK_RE = /\\[([^\\]\\n]*)\\]\\(([^)\\n]*)\\)/g;\n\n/** The `[label](url)` that contains [a,b], or null. Images (`![..](..)`) don't count. */\nexport function linkAt(s: string, a: number, b: number): { from: number; to: number; label: string } | null {\n for (const m of s.matchAll(LINK_RE)) {\n if (s[m.index - 1] === \"!\") continue;\n const from = m.index, to = from + m[0].length;\n if (a >= from && b <= to) return { from, to, label: m[1] };\n if (from > b) break;\n }\n return null;\n}\n\n/** Link: any selection or caret inside a link removes it (label kept); otherwise link the selection and select the URL. */\nexport const toggleLink: Apply = (s, a, b) => {\n const hit = linkAt(s, a, b);\n if (hit) return { text: s.slice(0, hit.from) + hit.label + s.slice(hit.to), a: hit.from, b: hit.from + hit.label.length };\n const label = s.slice(a, b) || \"link text\";\n const urlStart = a + label.length + 3;\n return { text: s.slice(0, a) + `[${label}](https://)` + s.slice(b), a: urlStart, b: urlStart + 8 };\n};\n\n/** Image: `![description](https://)` with the URL selected for typing or pasting. */\nexport const insertImage: Apply = (s, a, b) => {\n const alt = s.slice(a, b) || \"description\";\n const urlStart = a + alt.length + 4;\n return { text: s.slice(0, a) + `![${alt}](https://)` + s.slice(b), a: urlStart, b: urlStart + 8 };\n};\n\n/** Inline separator between details, e.g. `email · phone`. */\nexport const insertDot: Apply = (s, a, b) => {\n const t = \" · \";\n return { text: s.slice(0, a) + t + s.slice(b), a: a + t.length, b: a + t.length };\n};\n\n/** Needs a blank line before it or the paragraph above swallows the block. */\nconst blockBefore = (s: string, a: number) => (a === 0 || s.slice(0, a).endsWith(\"\\n\\n\") ? \"\" : s.slice(0, a).endsWith(\"\\n\") ? \"\\n\" : \"\\n\\n\");\n\nexport const insertRule: Apply = (s, a, b) => {\n const before = blockBefore(s, a);\n const t = before + \"---\\n\\n\";\n return { text: s.slice(0, a) + t + s.slice(b), a: a + t.length, b: a + t.length };\n};\n\n/** Table of `rows` body rows × `cols`; lands with the first header selected so typing replaces it. */\nexport const insertTable = (rows: number, cols: number): Apply => (s, a, b) => {\n const { text, firstHeader } = newTable(rows, cols);\n const before = blockBefore(s, a);\n const t = before + text + \"\\n\";\n const at = a + before.length + text.indexOf(firstHeader);\n return { text: s.slice(0, a) + t + s.slice(b), a: at, b: at + firstHeader.length };\n};\n\n/**\n * Tooltip term — an MDX component, so opt-in per site: `<Term definition=\"…\">word</Term>`.\n * Select a word → wrapped with the caret inside the empty quotes, ready for the\n * definition. Anywhere inside an existing Term → unwrapped back to the word.\n */\nexport const toggleTerm = (component = \"Term\", attr = \"definition\"): Apply => (s, a, b) => {\n const re = new RegExp(`<${component}\\\\s+${attr}=\"([^\"]*)\"\\\\s*>([\\\\s\\\\S]*?)</${component}>`, \"g\");\n for (const m of s.matchAll(re)) {\n const from = m.index, to = from + m[0].length;\n if (a >= from && b <= to) return { text: s.slice(0, from) + m[2] + s.slice(to), a: from, b: from + m[2].length };\n if (from > b) break;\n }\n const word = s.slice(a, b) || \"term\";\n const open = `<${component} ${attr}=\"`;\n const text = s.slice(0, a) + open + `\">${word}</${component}>` + s.slice(b);\n return { text, a: a + open.length, b: a + open.length };\n};\n\nexport interface Tool { id: string; title: string; apply: Apply }\n\nexport const TOOLS: Tool[] = [\n { id: \"bold\", title: \"Bold — ⌘B\", apply: toggleWrap(\"**\") },\n { id: \"italic\", title: \"Italic — ⌘I\", apply: toggleWrap(\"_\") },\n { id: \"h2\", title: \"Section heading\", apply: toggleLines(\"## \", (l) => /^##\\s/.test(l)) },\n { id: \"h3\", title: \"Sub-heading\", apply: toggleLines(\"### \", (l) => /^###\\s/.test(l)) },\n { id: \"ul\", title: \"Bulleted list\", apply: toggleLines(\"- \", (l) => /^[-*+]\\s/.test(l)) },\n { id: \"ol\", title: \"Numbered list\", apply: toggleLines((i) => `${i + 1}. `, (l) => /^\\d+[.)]\\s/.test(l)) },\n { id: \"quote\", title: \"Quote\", apply: toggleLines(\"> \", (l) => /^>/.test(l)) },\n { id: \"link\", title: \"Link\", apply: toggleLink },\n { id: \"code\", title: \"Inline code\", apply: toggleWrap(\"`\", \"code\") },\n { id: \"image\", title: \"Image\", apply: insertImage },\n { id: \"dot\", title: \"Separator between details ( · )\", apply: insertDot },\n { id: \"rule\", title: \"Divider line across the page\", apply: insertRule },\n];\n\nexport const toolById = (id: string): Tool => TOOLS.find((t) => t.id === id)!;\n\n/** Which toggle tools the caret is currently inside, so their buttons can light up. */\nexport function activeTools(s: string, a: number, b: number): Set<string> {\n const on = new Set<string>();\n const sel = s.slice(a, b);\n const wrapped = (m: string) =>\n (s.slice(a - m.length, a) === m && s.slice(b, b + m.length) === m) ||\n (sel.length >= 2 * m.length && sel.startsWith(m) && sel.endsWith(m));\n if (wrapped(\"**\") || spanAt(s, a, b, /\\*\\*[^*\\n]+\\*\\*/g, 2)) on.add(\"bold\");\n if (wrapped(\"_\") || spanAt(s, a, b, /(?<![\\w_])_[^_\\n]+_(?![\\w_])/g, 1)) on.add(\"italic\");\n if (wrapped(\"`\") || spanAt(s, a, b, /`[^`\\n]+`/g, 1)) on.add(\"code\");\n if (linkAt(s, a, b)) on.add(\"link\");\n if (spanAt(s, a, b, /<([A-Z][\\w]*)\\s[^>]*>[\\s\\S]*?<\\/\\1>/g, 0)) on.add(\"term\");\n const { start, end } = lineSpan(s, a, a);\n const line = s.slice(start, end);\n if (/^##\\s/.test(line)) on.add(\"h2\");\n else if (/^###\\s/.test(line)) on.add(\"h3\");\n else if (/^[-*+]\\s/.test(line)) on.add(\"ul\");\n else if (/^\\d+[.)]\\s/.test(line)) on.add(\"ol\");\n else if (/^>/.test(line)) on.add(\"quote\");\n return on;\n}\n\n/** True when [a,b] lies strictly inside the content of a span matched by `re` (pad = marker length). */\nfunction spanAt(s: string, a: number, b: number, re: RegExp, pad: number): boolean {\n for (const m of s.matchAll(re)) {\n const from = m.index, to = from + m[0].length;\n if (a >= from + pad && b <= to - pad) return true;\n if (from > b) break;\n }\n return false;\n}\n","/**\n * Toolbar glyphs — drawn, not typed, like the report editor: \"H\", \"1.\" and a\n * quotation mark as characters next to real icons is two visual languages for\n * one job. B and I stay as letters because the letterform IS the icon.\n */\n\nimport type { ReactNode } from \"react\";\n\nconst Svg = ({ children, fill = \"none\" }: { children: ReactNode; fill?: string }) => (\n <svg className=\"realiiz-md__ico\" viewBox=\"0 0 24 24\" fill={fill} stroke=\"currentColor\" strokeWidth=\"1.9\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n {children}\n </svg>\n);\n\nexport const MD_ICONS: Record<string, ReactNode> = {\n bold: <b>B</b>,\n italic: <i>I</i>,\n h2: <Svg><path d=\"M6 5v14\" /><path d=\"M14 5v14\" /><path d=\"M6 12h8\" /><path d=\"M17.5 19v-6.5l-1.6 1.2\" /></Svg>,\n h3: <Svg><path d=\"M5 5v14\" /><path d=\"M12 5v14\" /><path d=\"M5 12h7\" /><path d=\"M16 12.5h3.5l-2 2.2a1.9 1.9 0 1 1-1.5 3.2\" /></Svg>,\n ul: (\n <Svg>\n <line x1=\"9\" y1=\"6.5\" x2=\"20\" y2=\"6.5\" /><line x1=\"9\" y1=\"12\" x2=\"20\" y2=\"12\" /><line x1=\"9\" y1=\"17.5\" x2=\"20\" y2=\"17.5\" />\n <circle cx=\"4.6\" cy=\"6.5\" r=\"1.3\" fill=\"currentColor\" stroke=\"none\" /><circle cx=\"4.6\" cy=\"12\" r=\"1.3\" fill=\"currentColor\" stroke=\"none\" /><circle cx=\"4.6\" cy=\"17.5\" r=\"1.3\" fill=\"currentColor\" stroke=\"none\" />\n </Svg>\n ),\n ol: (\n <Svg>\n <line x1=\"10\" y1=\"6.5\" x2=\"20\" y2=\"6.5\" /><line x1=\"10\" y1=\"12\" x2=\"20\" y2=\"12\" /><line x1=\"10\" y1=\"17.5\" x2=\"20\" y2=\"17.5\" />\n <path d=\"M4 5.6 5.2 5v3.4\" /><path d=\"M3.6 11.2h1.8L3.6 13.7h1.9\" /><path d=\"M3.7 16.3h1.7v1.2H4.2h1.2v1.2H3.7\" />\n </Svg>\n ),\n quote: (\n <Svg>\n <path d=\"M9 7c-2.4 0-4 1.7-4 4 0 1.9 1.3 3.2 3 3.2.4 0 .8-.1 1-.2-.3 1.4-1.5 2.6-3 3l.7 1.5c2.8-.8 4.8-3.3 4.8-6.6C11.5 8.7 10.5 7 9 7z\" fill=\"currentColor\" stroke=\"none\" />\n <path d=\"M18 7c-2.4 0-4 1.7-4 4 0 1.9 1.3 3.2 3 3.2.4 0 .8-.1 1-.2-.3 1.4-1.5 2.6-3 3l.7 1.5c2.8-.8 4.8-3.3 4.8-6.6C20.5 8.7 19.5 7 18 7z\" fill=\"currentColor\" stroke=\"none\" />\n </Svg>\n ),\n link: <Svg><path d=\"M10 13a5 5 0 0 0 7.5.5l2.5-2.5a5 5 0 0 0-7-7l-1.5 1.4\" /><path d=\"M14 11a5 5 0 0 0-7.5-.5L4 13a5 5 0 0 0 7 7l1.4-1.4\" /></Svg>,\n code: <Svg><path d=\"m8 7-5 5 5 5\" /><path d=\"m16 7 5 5-5 5\" /><path d=\"m14 4-4 16\" /></Svg>,\n // A tooltip: a tall speech bubble with an \"i\" — what the reader will actually see on the page.\n term: (\n <Svg>\n <path d=\"M5 2.5h14a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2h-4.5L12 21.5 9.5 17.5H5a2 2 0 0 1-2-2v-11a2 2 0 0 1 2-2z\" />\n <path d=\"M12 9v4.5\" />\n <circle cx=\"12\" cy=\"6.2\" r=\".9\" fill=\"currentColor\" stroke=\"none\" />\n </Svg>\n ),\n image: <Svg><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" /><circle cx=\"8.5\" cy=\"8.5\" r=\"1.6\" /><path d=\"m21 15-5-5L5 21\" /></Svg>,\n dot: <span className=\"realiiz-md__dot\">·</span>,\n rule: <Svg><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" /></Svg>,\n table: <Svg><rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\" /><line x1=\"3\" y1=\"9.5\" x2=\"21\" y2=\"9.5\" /><line x1=\"3\" y1=\"15\" x2=\"21\" y2=\"15\" /><line x1=\"12\" y1=\"9.5\" x2=\"12\" y2=\"20\" /></Svg>,\n expand: <Svg><path d=\"M9 3H3v6\" /><path d=\"M15 21h6v-6\" /><path d=\"M3 3l7 7\" /><path d=\"M21 21l-7-7\" /></Svg>,\n contract: <Svg><path d=\"M4 10h6V4\" /><path d=\"M20 14h-6v6\" /><path d=\"M3 3l7 7\" /><path d=\"M21 21l-7-7\" /></Svg>,\n};\n","/**\n * Table size picker — point at a 6×6 grid instead of typing two numbers.\n * The count is body rows; the header is always added on top.\n */\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { MD_ICONS } from \"./icons\";\n\nconst MAX = 6;\n\nexport function TableGrid({ onPick }: { onPick: (rows: number, cols: number) => void }) {\n const [open, setOpen] = useState(false);\n const [hot, setHot] = useState<[number, number]>([0, 0]);\n const wrap = useRef<HTMLSpanElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const away = (e: MouseEvent) => { if (!wrap.current?.contains(e.target as Node)) setOpen(false); };\n const esc = (e: globalThis.KeyboardEvent) => { if (e.key === \"Escape\") setOpen(false); };\n document.addEventListener(\"mousedown\", away);\n document.addEventListener(\"keydown\", esc);\n return () => { document.removeEventListener(\"mousedown\", away); document.removeEventListener(\"keydown\", esc); };\n }, [open]);\n\n const [r, c] = hot;\n const label = r && c ? `${c} column${c === 1 ? \"\" : \"s\"} × ${r} row${r === 1 ? \"\" : \"s\"}` : \"Pick a size\";\n\n return (\n <span className={[\"realiiz-md__tgwrap\", open && \"is-open\"].filter(Boolean).join(\" \")} ref={wrap}>\n <button type=\"button\" data-tool=\"table\" data-tip=\"New table — pick a size\" aria-label=\"Insert a table\" aria-expanded={open} onClick={() => setOpen((o) => !o)}>\n {MD_ICONS.table}\n </button>\n {open && (\n <span className=\"realiiz-md__tgrid\" role=\"dialog\" aria-label=\"Table size\" onMouseLeave={() => setHot([0, 0])}>\n <span className=\"realiiz-md__tgcells\">\n {Array.from({ length: MAX * MAX }, (_, n) => {\n const rr = Math.floor(n / MAX) + 1, cc = (n % MAX) + 1;\n return (\n <i\n key={n}\n className={rr <= r && cc <= c ? \"hot\" : undefined}\n onMouseEnter={() => setHot([rr, cc])}\n onClick={() => { setOpen(false); onPick(rr, cc); }}\n aria-label={`${cc} × ${rr}`}\n role=\"button\"\n />\n );\n })}\n </span>\n <span className=\"realiiz-md__tglab\">{label}</span>\n </span>\n )}\n </span>\n );\n}\n","/**\n * MarkdownEditor — a plain textarea with the report editor's toolbar and a real preview.\n *\n * Shape borrowed from the surveillance-review report editor: a segmented\n * \"Edit Markdown | Preview\" control, one toolbar row (format · link · Insert:\n * image, separator, divider, table) with buttons that TOGGLE and light up when\n * the caret sits in text of that kind, row/column controls that appear only\n * while the caret is in a table, and an Expand button that fills the window\n * (pure CSS, Esc to come back). No rich-text model — the text is the truth.\n *\n * An existing post opens in Preview (read first, then edit); a blank body opens\n * in Edit. Preview is delegated: `renderPreview(markdown)` is supplied by the\n * host site and runs its real pipeline, so what you see is what the blog\n * renders. Without it, the Preview tab is hidden.\n *\n * Edits go through execCommand(\"insertText\") when the browser allows it so the\n * native undo stack survives (assigning .value wipes it); otherwise onChange.\n */\n\nimport { useCallback, useEffect, useRef, useState, type KeyboardEvent } from \"react\";\nimport { activeTools, insertTable, toggleTerm, toolById, type Apply, type Edit, type Tool } from \"./md/edits\";\nimport { applyTableOp, tableAt, type TableOp } from \"./md/table\";\nimport { MD_ICONS } from \"./md/icons\";\nimport { TableGrid } from \"./md/TableGrid\";\n\nexport { TOOLS } from \"./md/edits\";\n\nexport interface MarkdownEditorProps {\n id: string;\n name?: string;\n value: string;\n onChange: (v: string) => void;\n placeholder?: string;\n /** Host-supplied renderer returning HTML. Errors should be returned as `{ error }`. */\n renderPreview?: (markdown: string) => Promise<{ html: string } | { error: string }>;\n /** Extra class on the preview body, e.g. the site's own prose class so it matches the blog. */\n previewClassName?: string;\n minHeight?: number;\n /**\n * Name of the site's tooltip MDX component, e.g. \"Term\" → a toolbar button that wraps the\n * selection as `<Term definition=\"\">word</Term>`. Off unless the site has such a component.\n */\n termComponent?: string;\n}\n\nconst FORMAT = [\"bold\", \"italic\"] as const;\nconst BLOCK = [\"h2\", \"h3\", \"ul\", \"ol\", \"quote\"] as const;\nconst INLINE = [\"link\", \"code\"] as const;\nconst INSERT = [\"image\", \"dot\", \"rule\"] as const;\nconst TABLE_OPS: { op: TableOp; label: string; tip: string }[] = [\n { op: \"rowAfter\", label: \"+ Row\", tip: \"Insert a row below this one\" },\n { op: \"rowDel\", label: \"− Row\", tip: \"Delete this row\" },\n { op: \"colAfter\", label: \"+ Col\", tip: \"Insert a column to the right\" },\n { op: \"colDel\", label: \"− Col\", tip: \"Delete this column\" },\n];\n\nexport function MarkdownEditor({ id, name = \"body\", value, onChange, placeholder, renderPreview, previewClassName, minHeight = 320, termComponent }: MarkdownEditorProps) {\n const [mode, setMode] = useState<\"edit\" | \"preview\">(() => (renderPreview && value.trim() ? \"preview\" : \"edit\"));\n const [preview, setPreview] = useState<{ html: string } | { error: string } | null>(null);\n const [loading, setLoading] = useState(false);\n const [expanded, setExpanded] = useState(false);\n const [on, setOn] = useState<Set<string>>(() => new Set());\n const [inTable, setInTable] = useState(false);\n const [note, setNote] = useState<string | null>(null);\n const ta = useRef<HTMLTextAreaElement>(null);\n\n const sync = useCallback(() => {\n const el = ta.current;\n if (!el) return;\n setOn(activeTools(el.value, el.selectionStart, el.selectionEnd));\n setInTable(Boolean(tableAt(el.value, el.selectionStart)));\n }, []);\n\n const commit = (edit: Edit) => {\n const el = ta.current;\n if (!el) return;\n const { text, a, b } = edit;\n // Replace only the changed span through insertText so undo keeps working; fall back to a plain set.\n const from = commonPrefix(el.value, text);\n const oldTail = el.value.length - from, newTail = text.length - from;\n const suffix = commonSuffix(el.value.slice(from), text.slice(from));\n const oldEnd = from + oldTail - suffix, newEnd = from + newTail - suffix;\n let ok = false;\n el.focus();\n el.setSelectionRange(from, oldEnd);\n try { ok = document.execCommand(\"insertText\", false, text.slice(from, newEnd)); } catch { ok = false; }\n if (!ok || el.value !== text) onChange(text);\n requestAnimationFrame(() => { el.setSelectionRange(a, b); sync(); });\n };\n\n const run = (apply: Apply) => {\n const el = ta.current;\n if (!el) return;\n commit(apply(value, el.selectionStart, el.selectionEnd));\n };\n\n const runTable = (op: TableOp) => {\n const el = ta.current;\n if (!el) return;\n const r = applyTableOp(value, el.selectionStart, op);\n if (!r) return;\n if (\"error\" in r) { setNote(r.error); return; }\n setNote(null);\n commit(r);\n };\n\n const onKey = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Escape\" && expanded) { e.preventDefault(); setExpanded(false); return; }\n if (!(e.metaKey || e.ctrlKey)) return;\n if (e.key === \"b\") { e.preventDefault(); run(toolById(\"bold\").apply); }\n if (e.key === \"i\") { e.preventDefault(); run(toolById(\"italic\").apply); }\n if (e.key === \"k\") { e.preventDefault(); run(toolById(\"link\").apply); }\n };\n\n useEffect(() => {\n if (!expanded) return;\n const prev = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n const esc = (e: globalThis.KeyboardEvent) => { if (e.key === \"Escape\") setExpanded(false); };\n document.addEventListener(\"keydown\", esc);\n return () => { document.body.style.overflow = prev; document.removeEventListener(\"keydown\", esc); };\n }, [expanded]);\n\n useEffect(() => {\n if (mode !== \"preview\" || !renderPreview) return;\n let live = true;\n setLoading(true);\n renderPreview(value)\n .then((r) => { if (live) setPreview(r); })\n .catch((err: unknown) => { if (live) setPreview({ error: err instanceof Error ? err.message : String(err) }); })\n .finally(() => { if (live) setLoading(false); });\n return () => { live = false; };\n }, [mode, value, renderPreview]);\n\n const termTool: Tool | null = termComponent\n ? { id: \"term\", title: `Tooltip — wraps the selection in <${termComponent}>`, apply: toggleTerm(termComponent) }\n : null;\n\n const btn = (toolId: string) => {\n const t = toolId === \"term\" && termTool ? termTool : toolById(toolId);\n return (\n <button key={t.id} type=\"button\" data-tool={t.id} data-tip={t.title} aria-label={t.title} aria-pressed={on.has(t.id) || undefined} className={on.has(t.id) ? \"on\" : undefined} onMouseDown={(e) => e.preventDefault()} onClick={() => run(t.apply)}>\n {MD_ICONS[t.id]}\n </button>\n );\n };\n\n return (\n <div className={[\"realiiz-md\", expanded && \"realiiz-md--fs\"].filter(Boolean).join(\" \")}>\n {renderPreview && (\n <span className=\"realiiz-md__mode\" role=\"tablist\" aria-label=\"Editor mode\">\n <button type=\"button\" role=\"tab\" aria-selected={mode === \"edit\"} onClick={() => setMode(\"edit\")}>Edit Markdown</button>\n <button type=\"button\" role=\"tab\" aria-selected={mode === \"preview\"} onClick={() => setMode(\"preview\")}>Preview</button>\n </span>\n )}\n\n <div className=\"realiiz-md__panel\">\n <div className=\"realiiz-md__head\">\n {mode === \"edit\" && (\n <span className=\"realiiz-md__tools\" role=\"toolbar\" aria-label=\"Formatting\">\n {FORMAT.map(btn)}\n <span className=\"realiiz-md__sep\" />\n {BLOCK.map(btn)}\n <span className=\"realiiz-md__sep\" />\n {INLINE.map(btn)}\n {termTool && btn(\"term\")}\n {inTable && (\n <>\n <span className=\"realiiz-md__sep\" />\n {TABLE_OPS.map((t) => (\n <button key={t.op} type=\"button\" data-tbl-op={t.op} data-tip={t.tip} aria-label={t.tip} onMouseDown={(e) => e.preventDefault()} onClick={() => runTable(t.op)}>{t.label}</button>\n ))}\n </>\n )}\n <span className=\"realiiz-md__insert\">\n <span className=\"realiiz-md__lab\">Insert</span>\n {INSERT.map(btn)}\n <TableGrid onPick={(r, c) => run(insertTable(r, c))} />\n </span>\n </span>\n )}\n <span className=\"realiiz-md__spacer\" />\n <button\n type=\"button\"\n className=\"realiiz-md__expand\"\n data-tip={expanded ? \"Back to the normal layout — or press Esc\" : \"Fill the window — Esc to come back\"}\n aria-label={expanded ? \"Exit\" : \"Expand\"}\n onClick={() => setExpanded((x) => !x)}\n >\n {expanded ? MD_ICONS.contract : MD_ICONS.expand}\n </button>\n </div>\n\n {mode === \"edit\" ? (\n <textarea\n ref={ta}\n id={id}\n name={name}\n className=\"realiiz-form__control realiiz-form__control--body realiiz-md__ta\"\n style={expanded ? undefined : { minHeight }}\n value={value}\n placeholder={placeholder}\n onChange={(e) => { onChange(e.target.value); sync(); }}\n onSelect={sync}\n onKeyUp={sync}\n onClick={sync}\n onKeyDown={onKey}\n spellCheck\n />\n ) : (\n <div className=\"realiiz-md__preview\" style={expanded ? undefined : { minHeight }} aria-live=\"polite\" aria-busy={loading}>\n {loading && <div className=\"realiiz-md__loading\">Rendering…</div>}\n {!loading && preview && \"error\" in preview && (\n <div className=\"realiiz-form__alert\" role=\"alert\">Couldn&apos;t render: {preview.error}</div>\n )}\n {!loading && preview && \"html\" in preview && (\n <div className={[\"realiiz-prose\", previewClassName].filter(Boolean).join(\" \")} dangerouslySetInnerHTML={{ __html: preview.html }} />\n )}\n </div>\n )}\n </div>\n {note && <div className=\"realiiz-form__helper realiiz-md__note\" role=\"status\">{note}</div>}\n </div>\n );\n}\n\nfunction commonPrefix(a: string, b: string): number {\n const n = Math.min(a.length, b.length);\n let i = 0;\n while (i < n && a[i] === b[i]) i++;\n return i;\n}\nfunction commonSuffix(a: string, b: string): number {\n const n = Math.min(a.length, b.length);\n let i = 0;\n while (i < n && a[a.length - 1 - i] === b[b.length - 1 - i]) i++;\n return i;\n}\n","/**\n * zod issue → { field, key, message }. Pure.\n *\n * The key matches FieldSpec.messages so the schema's own per-check wording is\n * what the client reads. Observed on zod 4.5.4 (see the ADMIN-02b brief):\n * too_small / too_big origin string|array → min_length / max_length\n * origin number → greater_than / less_than\n * when the spec has `exact` → length_equals\n * invalid_format format regex|url|… → that format\n * invalid_type + format safeint (from .int()) → int\n * custom → custom\n * unrecognized_keys path [] , keys: [...] → form-level\n */\n\nimport type { FieldSpec } from \"../forms\";\n\nexport interface FieldIssue {\n /** null for form-level issues. */\n field: string | null;\n key: string;\n message: string;\n}\n\ninterface ZodIssueLike {\n code: string;\n path: PropertyKey[];\n message: string;\n origin?: string;\n format?: string;\n keys?: string[];\n}\n\nexport function mapIssues(issues: ZodIssueLike[], specs: FieldSpec[]): FieldIssue[] {\n const byName = new Map(specs.map((s) => [s.name, s]));\n return issues.map((issue) => {\n const field = typeof issue.path[0] === \"string\" ? issue.path[0] : null;\n const spec = field ? byName.get(field) : undefined;\n const key = keyFor(issue, spec);\n const message =\n (spec?.messages[key] ?? (issue.code === \"unrecognized_keys\" ? unknownKeysMessage(issue) : undefined)) ??\n issue.message;\n return { field, key, message };\n });\n}\n\nfunction keyFor(issue: ZodIssueLike, spec?: FieldSpec): string {\n const numeric = issue.origin === \"number\" || issue.origin === \"int\";\n switch (issue.code) {\n case \"too_small\":\n if (spec?.constraints.exact !== undefined) return \"length_equals\";\n return numeric ? \"greater_than\" : \"min_length\";\n case \"too_big\":\n if (spec?.constraints.exact !== undefined) return \"length_equals\";\n return numeric ? \"less_than\" : \"max_length\";\n case \"invalid_format\":\n return issue.format ?? \"format\";\n case \"invalid_type\":\n return issue.format === \"safeint\" || issue.format === \"int32\" ? \"int\" : \"invalid_type\";\n default:\n return issue.code;\n }\n}\n\nfunction unknownKeysMessage(issue: ZodIssueLike): string {\n const keys = issue.keys ?? [];\n return `This file has ${keys.length === 1 ? \"a field\" : \"fields\"} the site does not recognise: ${keys.join(\", \")}. It was probably edited by hand — remove or rename ${keys.length === 1 ? \"it\" : \"them\"} to continue.`;\n}\n\n/** Group by field for rendering. */\nexport function groupIssues(list: FieldIssue[]): { byField: Map<string, FieldIssue[]>; formLevel: FieldIssue[] } {\n const byField = new Map<string, FieldIssue[]>();\n const formLevel: FieldIssue[] = [];\n for (const i of list) {\n if (i.field === null) formLevel.push(i);\n else byField.set(i.field, [...(byField.get(i.field) ?? []), i]);\n }\n return { byField, formLevel };\n}\n","/**\n * Control strings ↔ frontmatter values. Pure.\n *\n * Controls hold strings (or booleans / Files). The schema wants typed values.\n * `toControl` seeds a control from an existing frontmatter value — including\n * a Date from a previously-parsed file — and `toValue` assembles what goes to\n * safeParse. Anything the schema then coerces (dates) is the schema's business.\n */\n\nimport type { FieldSpec } from \"../forms\";\n\nexport type ControlValue = string | string[] | boolean | File | null;\nexport type FormState = Record<string, ControlValue>;\n\n/** Stand-in path for an image chosen but not yet uploaded — replaced by ADMIN-06. */\nexport const PENDING_UPLOAD_PREFIX = \"pending-upload/\";\n\nexport function toControl(spec: FieldSpec, raw: unknown): ControlValue {\n if (raw === undefined || raw === null) return spec.input === \"boolean\" ? false : \"\";\n switch (spec.input) {\n case \"boolean\":\n return Boolean(raw);\n case \"date\": {\n // <input type=\"date\"> only accepts YYYY-MM-DD; frontmatter often carries a full ISO stamp.\n if (raw instanceof Date) return raw.toISOString().slice(0, 10);\n const s = String(raw);\n return /^\\d{4}-\\d{2}-\\d{2}/.test(s) ? s.slice(0, 10) : s;\n }\n case \"tags\":\n return Array.isArray(raw) ? raw.map(String) : String(raw).split(\",\").map((t) => t.trim()).filter(Boolean);\n default:\n return String(raw);\n }\n}\n\n/** Build the object that goes to schema.safeParse. Empty optional fields are omitted. */\nexport function toFrontmatter(\n specs: FieldSpec[],\n state: FormState,\n hiddenValues: Record<string, unknown>,\n): { frontmatter: Record<string, unknown>; files: Record<string, File> } {\n const frontmatter: Record<string, unknown> = { ...hiddenValues };\n const files: Record<string, File> = {};\n\n for (const spec of specs) {\n if (spec.role === \"hidden\" || spec.role === \"body\") continue;\n const v = state[spec.name];\n\n if (spec.input === \"boolean\") {\n if (v === true) frontmatter[spec.name] = true;\n else if (spec.required) frontmatter[spec.name] = false;\n continue;\n }\n if (v instanceof File) {\n files[spec.name] = v;\n frontmatter[spec.name] = PENDING_UPLOAD_PREFIX + v.name;\n continue;\n }\n if (Array.isArray(v)) {\n if (v.length || spec.required) frontmatter[spec.name] = v;\n continue;\n }\n const s = typeof v === \"string\" ? v.trim() : \"\";\n if (s === \"\") {\n // Required fields are sent empty so the schema's own \"is required\" message fires.\n if (spec.required) frontmatter[spec.name] = spec.input === \"tags\" ? [] : \"\";\n continue;\n }\n switch (spec.input) {\n case \"number\": {\n const n = Number(s);\n frontmatter[spec.name] = Number.isNaN(n) ? s : n;\n break;\n }\n case \"tags\":\n frontmatter[spec.name] = s.split(\",\").map((t) => t.trim()).filter(Boolean);\n break;\n default:\n frontmatter[spec.name] = s;\n }\n }\n return { frontmatter, files };\n}\n","/**\n * ContentForm — a ContentTypeEntry in, validated { frontmatter, body, files } out.\n *\n * Validation runs on submit. After the first failed submit it also re-runs on\n * blur, so the client watches the error clear as they fix it. Before that\n * first submit the form stays quiet — nagging someone who hasn't finished\n * typing is the wrong default for this audience.\n *\n * The schema is the only judge. This component never decides what is valid;\n * it assembles values, calls entry.schema.safeParse, and maps issues back to\n * fields with the schema's own messages.\n */\n\nimport { useCallback, useEffect, useId, useMemo, useRef, useState, type FormEvent, type ReactNode } from \"react\";\nimport type { ContentTypeEntry, FieldSpec } from \"../forms\";\nimport { walkSchema } from \"../forms\";\nimport { Field, type LabelRenderer } from \"./Field\";\nimport { MarkdownEditor, type MarkdownEditorProps } from \"./MarkdownEditor\";\nimport { groupIssues, mapIssues, type FieldIssue } from \"./issues\";\nimport { FORM_CSS } from \"./styles\";\nimport { toControl, toFrontmatter, type ControlValue, type FormState } from \"./values\";\n\nexport interface ContentFormSubmission {\n frontmatter: Record<string, unknown>;\n body: string;\n files: Record<string, File>;\n}\n\nexport interface ContentFormProps {\n entry: ContentTypeEntry;\n initialValues?: Record<string, unknown>;\n initialBody?: string;\n onSubmit: (s: ContentFormSubmission) => void | Promise<void>;\n onCancel?: () => void;\n submitLabel?: string;\n className?: string;\n /**\n * Show the MDX body textarea (the content below the frontmatter). Default\n * true — most types have a body. Pass false for frontmatter-only types such\n * as venues. Independent of entry.body, which names a frontmatter FIELD\n * that should be edited as long text.\n */\n showBody?: boolean;\n bodyLabel?: string;\n /** Host-supplied Markdown/MDX renderer for the Preview tab. Without it the editor is edit-only. */\n renderPreview?: MarkdownEditorProps[\"renderPreview\"];\n previewClassName?: string;\n /** Site tooltip MDX component name (e.g. \"Term\") to expose as a toolbar button. */\n termComponent?: string;\n /**\n * Put Cancel/Save in a bar that the host can pin to the bottom of the page\n * (`.realiiz-form__bar`; the shell makes it sticky). The bar also reports\n * \"Unsaved changes\" / \"No changes yet\", or `status` when the host supplies one.\n */\n stickyBar?: boolean;\n status?: ReactNode;\n /** Extra controls in the bar, before Cancel/Save — e.g. a link to review a pending change. */\n barExtra?: ReactNode;\n /** Rendered after the fields and before the bar — the right place for a quiet destructive action (remove this item). */\n footer?: ReactNode;\n /** Draw a field label that has `.meta({ help })` — pass the site's tooltip component so labels explain themselves. */\n renderLabel?: LabelRenderer;\n /**\n * Fill `target` from `source` while the person types, until they edit `target`\n * themselves — e.g. { source: \"title\", target: \"slug\" } for a web address.\n * Only kicks in when `target` started empty (a new item), never on an existing one.\n */\n derive?: { source: string; target: string; transform?: (value: string) => string };\n /**\n * Warn before leaving with unsaved edits: the browser's own prompt on close/reload,\n * and a confirm on in-app link clicks (which never fire beforeunload). Default true.\n */\n guardUnsaved?: boolean;\n}\n\nconst LEAVE_MESSAGE = \"You have unsaved changes. Leave this page and lose them?\";\n\n/** \"Hello, World! 2026\" → \"hello-world-2026\" — the same rule the blog's slug regex enforces. */\nexport function slugify(s: string): string {\n return s\n .normalize(\"NFKD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n\ntype SafeParse = { success: true; data: unknown } | { success: false; error: { issues: Parameters<typeof mapIssues>[0] } };\n\nexport function ContentForm({ entry, initialValues = {}, initialBody = \"\", onSubmit, onCancel, submitLabel = \"Save\", className, showBody = true, bodyLabel = \"Content\", renderPreview, previewClassName, termComponent, stickyBar = false, status, barExtra, footer, renderLabel, derive, guardUnsaved = true }: ContentFormProps) {\n const formId = useId();\n const specs = useMemo(() => walkSchema(entry.schema, entry), [entry]);\n const visible = useMemo(() => specs.filter((s) => s.role !== \"hidden\" && s.role !== \"body\"), [specs]);\n const bodySpec = specs.find((s) => s.role === \"body\");\n // Main section first, then each registry group in its own fieldset, fields in the group's order.\n const sections = useMemo(() => {\n const groups = entry.groups ?? [];\n const grouped = new Set(groups.flatMap((g) => g.fields));\n const byName = new Map(visible.map((s) => [s.name, s]));\n const main = { label: entry.singular ?? entry.label, fields: visible.filter((s) => !grouped.has(s.name)) };\n const rest = groups\n .map((g) => ({ label: g.label, fields: g.fields.map((n) => byName.get(n)).filter((s): s is FieldSpec => Boolean(s)) }))\n .filter((g) => g.fields.length > 0);\n return [main, ...rest];\n }, [visible, entry.groups, entry.label, entry.singular]);\n\n const initialState = useMemo<FormState>(() => Object.fromEntries(specs.map((s) => [s.name, toControl(s, initialValues[s.name])])), [specs, initialValues]);\n const [state, setState] = useState<FormState>(initialState);\n // Derivation runs only while the target is untouched AND started empty (a new item).\n const [deriving, setDeriving] = useState(() => Boolean(derive && !initialState[derive.target]));\n const update = (name: string, v: ControlValue) =>\n setState((st) => {\n const next = { ...st, [name]: v };\n if (derive && deriving && name === derive.source && typeof v === \"string\") {\n next[derive.target] = (derive.transform ?? slugify)(v);\n }\n return next;\n });\n const onFieldChange = (name: string, v: ControlValue) => {\n if (derive && deriving && name === derive.target) setDeriving(false);\n update(name, v);\n };\n const [body, setBody] = useState(initialBody);\n const dirty = body !== initialBody || specs.some((s) => !sameValue(state[s.name], initialState[s.name]));\n const [issues, setIssues] = useState<FieldIssue[]>([]);\n const [attempted, setAttempted] = useState(false);\n const [submitting, setSubmitting] = useState(false);\n const [options, setOptions] = useState<Record<string, string[] | \"loading\">>({});\n\n // Hidden fields (and any initial key with no spec) ride through untouched.\n const hiddenValues = useMemo(() => {\n const shown = new Set(visible.map((s) => s.name));\n if (bodySpec) shown.add(bodySpec.name);\n return Object.fromEntries(Object.entries(initialValues).filter(([k]) => !shown.has(k)));\n }, [initialValues, visible, bodySpec]);\n\n // Resolve function option sources once, on mount.\n useEffect(() => {\n let live = true;\n for (const s of visible) {\n if (typeof s.options !== \"function\") continue;\n setOptions((o) => ({ ...o, [s.name]: \"loading\" }));\n Promise.resolve(s.options()).then((list) => {\n if (live) setOptions((o) => ({ ...o, [s.name]: list }));\n });\n }\n return () => {\n live = false;\n };\n }, [visible]);\n\n // Leaving with edits: native prompt for close/reload, a confirm for same-app links (client routers skip beforeunload).\n const leaving = useRef(false);\n useEffect(() => {\n if (!guardUnsaved || !dirty || submitting) return;\n const onUnload = (e: BeforeUnloadEvent) => { if (!leaving.current) { e.preventDefault(); e.returnValue = LEAVE_MESSAGE; } };\n const onClick = (e: MouseEvent) => {\n const a = (e.target as HTMLElement | null)?.closest?.(\"a[href]\") as HTMLAnchorElement | null;\n if (!a || a.target === \"_blank\" || e.defaultPrevented || e.metaKey || e.ctrlKey) return;\n if (a.origin !== window.location.origin) return;\n if (!window.confirm(LEAVE_MESSAGE)) { e.preventDefault(); e.stopPropagation(); }\n else leaving.current = true;\n };\n window.addEventListener(\"beforeunload\", onUnload);\n document.addEventListener(\"click\", onClick, true);\n return () => { window.removeEventListener(\"beforeunload\", onUnload); document.removeEventListener(\"click\", onClick, true); };\n }, [guardUnsaved, dirty, submitting]);\n\n const validate = useCallback((): SafeParse => {\n const { frontmatter } = toFrontmatter(specs, state, hiddenValues);\n const result = (entry.schema as { safeParse: (v: unknown) => SafeParse }).safeParse(frontmatter);\n setIssues(result.success ? [] : mapIssues(result.error.issues, specs));\n return result;\n }, [entry.schema, specs, state, hiddenValues]);\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault();\n if (submitting) return;\n setAttempted(true);\n const result = validate();\n if (!result.success) return;\n const { files } = toFrontmatter(specs, state, hiddenValues);\n setSubmitting(true);\n try {\n await onSubmit({ frontmatter: result.data as Record<string, unknown>, body, files });\n } finally {\n setSubmitting(false);\n }\n };\n\n const { byField, formLevel } = groupIssues(issues);\n const optionsFor = (s: FieldSpec) => options[s.name] ?? (Array.isArray(s.options) ? s.options : undefined);\n\n return (\n <form className={[\"realiiz-form\", className].filter(Boolean).join(\" \")} onSubmit={handleSubmit} noValidate data-realiiz-content-form={entry.id}>\n <style>{FORM_CSS}</style>\n\n {formLevel.length > 0 && (\n <div className=\"realiiz-form__alert\" role=\"alert\">\n <strong>This can't be saved yet.</strong>\n <ul>{formLevel.map((i, n) => <li key={n}>{i.message}</li>)}</ul>\n </div>\n )}\n\n {sections.map((sec) => (\n <fieldset key={sec.label}>\n <legend>{sec.label}</legend>\n {sec.fields.map((s) => (\n <Field key={s.name} formId={formId} spec={s} value={state[s.name]} issues={byField.get(s.name) ?? []}\n current={typeof initialValues[s.name] === \"string\" ? (initialValues[s.name] as string) : undefined}\n options={optionsFor(s)}\n renderLabel={renderLabel}\n onChange={(v: ControlValue) => onFieldChange(s.name, v)}\n onBlur={() => { if (attempted) validate(); }} />\n ))}\n </fieldset>\n ))}\n\n {(showBody || bodySpec) && (\n <fieldset>\n <legend>{bodySpec?.label ?? bodyLabel}</legend>\n {/* The legend already names this section; the label stays for assistive tech only. */}\n <label className=\"realiiz-form__label realiiz-sr-only\" htmlFor={`${formId}-body`}>{bodySpec?.label ?? bodyLabel}</label>\n <MarkdownEditor\n id={`${formId}-body`}\n value={body}\n onChange={setBody}\n placeholder={bodySpec?.placeholder ?? \"Write in Markdown. Headings with ##, links as [text](url).\"}\n renderPreview={renderPreview}\n previewClassName={previewClassName}\n termComponent={termComponent}\n />\n </fieldset>\n )}\n\n {/* Sole child of its own box: a server-created element dropped straight into this children array trips React's key check. */}\n {footer && <div className=\"realiiz-form__footer\">{footer}</div>}\n\n <div className={stickyBar ? \"realiiz-form__bar\" : \"realiiz-form__actions\"} data-dirty={dirty || undefined}>\n {stickyBar && (\n <span className=\"realiiz-form__status\" role=\"status\">\n {status ?? (dirty ? \"Unsaved changes\" : \"No changes yet\")}\n </span>\n )}\n {stickyBar && barExtra}\n {onCancel && <button type=\"button\" className=\"realiiz-form__button\" onClick={onCancel}>Cancel</button>}\n <button type=\"submit\" className=\"realiiz-form__button realiiz-form__button--primary\" disabled={submitting}>\n {submitting ? `${submitLabel}…` : submitLabel}\n </button>\n </div>\n </form>\n );\n}\n\nfunction sameValue(a: ControlValue | undefined, b: ControlValue | undefined): boolean {\n if (Array.isArray(a) && Array.isArray(b)) return a.length === b.length && a.every((v, i) => v === b[i]);\n return a === b;\n}\n"]}
1
+ {"version":3,"sources":["../../src/forms-ui/ChipsInput.tsx","../../src/forms-ui/controls.tsx","../../src/forms-ui/images.ts","../../src/forms-ui/md/upload.ts","../../src/forms-ui/ImageInput.tsx","../../src/forms-ui/Field.tsx","../../src/forms-ui/md/table.ts","../../src/forms-ui/md/edits.ts","../../src/forms-ui/md/icons.tsx","../../src/forms-ui/md/TableGrid.tsx","../../src/forms-ui/MarkdownEditor.tsx","../../src/forms-ui/issues.ts","../../src/forms-ui/values.ts","../../src/forms-ui/ContentForm.tsx"],"names":["jsx","jsxs","useState","useRef","useEffect","useCallback","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * ChipsInput — tags as chips. Enter or comma adds, × or Backspace-on-empty\n * removes. The value is a string[]; the schema's length/regex rules still run\n * on submit, this is only a nicer way to type them.\n */\n\nimport { useState, type KeyboardEvent } from \"react\";\n\nexport function ChipsInput({ id, name, value, onChange, onBlur, placeholder, invalid, max }: {\n id: string;\n name: string;\n value: string[];\n onChange: (v: string[]) => void;\n onBlur: () => void;\n placeholder?: string;\n invalid?: boolean;\n /** When the schema says exactly N, show \"n of N\". */\n max?: number;\n}) {\n const [draft, setDraft] = useState(\"\");\n\n const commit = () => {\n const parts = draft.split(\",\").map((s) => s.trim()).filter(Boolean);\n if (parts.length) onChange([...value, ...parts.filter((p) => !value.includes(p))]);\n setDraft(\"\");\n };\n\n const onKey = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\" || e.key === \",\") {\n e.preventDefault();\n commit();\n } else if (e.key === \"Backspace\" && draft === \"\" && value.length) {\n onChange(value.slice(0, -1));\n }\n };\n\n return (\n <div className={[\"realiiz-chips\", invalid && \"realiiz-form__control--invalid\"].filter(Boolean).join(\" \")} data-name={name}>\n {value.map((tag) => (\n <span key={tag} className=\"realiiz-chip\">\n {tag}\n <button type=\"button\" aria-label={`Remove ${tag}`} onClick={() => onChange(value.filter((t) => t !== tag))}>×</button>\n </span>\n ))}\n <input\n id={id}\n type=\"text\"\n className=\"realiiz-chips__input\"\n value={draft}\n placeholder={value.length ? \"\" : placeholder}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={onKey}\n onBlur={() => { commit(); onBlur(); }}\n aria-invalid={invalid || undefined}\n />\n {typeof max === \"number\" && <span className=\"realiiz-chips__count\">{value.length} of {max}</span>}\n </div>\n );\n}\n","/**\n * One control per InputKind. Dumb: value in, change out. Field.tsx owns the\n * label, helper row and error; ContentForm owns state.\n */\n\nimport type { FieldSpec } from \"../forms\";\nimport type { ControlValue } from \"./values\";\n\nexport interface ControlProps {\n id: string;\n spec: FieldSpec;\n value: ControlValue;\n invalid: boolean;\n options?: string[] | \"loading\";\n onChange: (v: ControlValue) => void;\n onBlur: () => void;\n}\n\nexport function Control(p: ControlProps) {\n const cls = [\"realiiz-form__control\", p.invalid && \"realiiz-form__control--invalid\"].filter(Boolean).join(\" \");\n const common = {\n id: p.id,\n name: p.spec.name,\n \"aria-invalid\": p.invalid || undefined,\n \"aria-describedby\": p.invalid ? `${p.id}-error` : undefined,\n onBlur: p.onBlur,\n } as const;\n const str = typeof p.value === \"string\" ? p.value : \"\";\n\n if (p.options === \"loading\") {\n return <div className={cls} aria-busy=\"true\" style={{ color: \"var(--_muted)\" }}>Loading options…</div>;\n }\n\n if (p.options || p.spec.input === \"select\") {\n return (\n <select {...common} className={cls} value={str} onChange={(e) => p.onChange(e.target.value)}>\n {!p.spec.required && <option value=\"\">—</option>}\n {(p.options ?? []).map((o) => (\n <option key={o} value={o}>{o}</option>\n ))}\n </select>\n );\n }\n\n switch (p.spec.input) {\n case \"textarea\":\n return (\n <textarea {...common} className={`${cls} realiiz-form__control--textarea`} value={str}\n placeholder={p.spec.placeholder} onChange={(e) => p.onChange(e.target.value)} />\n );\n case \"boolean\":\n return (\n <input {...common} type=\"checkbox\" checked={p.value === true} onChange={(e) => p.onChange(e.target.checked)} />\n );\n case \"image\":\n // Without a host picker (Field.onPickImage) an image field is its path, typed by hand.\n return <input {...common} type=\"text\" className={cls} value={str} placeholder={p.spec.placeholder ?? \"/images/picture.webp\"} onChange={(e) => p.onChange(e.target.value)} />;\n case \"date\":\n return <input {...common} type=\"date\" className={cls} value={str} onChange={(e) => p.onChange(e.target.value)} />;\n case \"number\":\n return (\n <input {...common} type=\"number\" inputMode=\"numeric\" className={cls} value={str}\n min={p.spec.constraints.min} max={p.spec.constraints.max}\n step={p.spec.constraints.format === \"int\" ? 1 : undefined}\n placeholder={p.spec.placeholder} onChange={(e) => p.onChange(e.target.value)} />\n );\n case \"url\":\n return (\n <input {...common} type=\"url\" className={cls} value={str} placeholder={p.spec.placeholder ?? \"https://\"}\n onChange={(e) => p.onChange(e.target.value)} />\n );\n default:\n return (\n <input {...common} type=\"text\" className={cls} value={str} placeholder={p.spec.placeholder}\n maxLength={p.spec.constraints.max} onChange={(e) => p.onChange(e.target.value)} />\n );\n }\n}\n","/**\n * Picked images beside the form state. An image FIELD's value stays a path\n * string (what the frontmatter wants); the shrunk bytes for a newly chosen\n * picture live here until submit, keyed by field name, with an object URL for\n * the preview and the previous path so Remove can restore it.\n *\n * The host decides the path and does the shrinking (`onPickImage`) because it\n * knows the slug and the size rules; this hook only keeps the result.\n */\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nexport interface PickedImage {\n path: string;\n blob: Blob;\n previewUrl: string;\n width?: number;\n height?: number;\n /** The field's value before this pick, restored by Remove. */\n previous: string;\n}\n\nexport type PickResult = { path: string; blob: Blob; previewUrl?: string; width?: number; height?: number };\nexport type PickImage = (field: string, file: File) => Promise<PickResult>;\n\nexport type SubmittedImages = Record<string, { path: string; blob: Blob }>;\n\nexport function useImages() {\n const [images, setImages] = useState<Record<string, PickedImage>>({});\n const latest = useRef(images);\n latest.current = images;\n const urls = useRef(new Set<string>());\n\n useEffect(() => {\n const set = urls.current;\n return () => { for (const u of set) URL.revokeObjectURL(u); };\n }, []);\n\n const keep = useCallback((field: string, r: PickResult, previous: string): PickedImage => {\n const previewUrl = r.previewUrl ?? URL.createObjectURL(r.blob);\n if (!r.previewUrl) urls.current.add(previewUrl);\n const picked: PickedImage = { path: r.path, blob: r.blob, previewUrl, width: r.width, height: r.height, previous };\n setImages((m) => ({ ...m, [field]: picked }));\n return picked;\n }, []);\n\n /** Drop the pick; returns the value to put back in the field. */\n const remove = useCallback((field: string): string | undefined => {\n const previous = latest.current[field]?.previous;\n setImages((m) => {\n const rest = { ...m };\n delete rest[field];\n return rest;\n });\n return previous;\n }, []);\n\n const toSubmission = useCallback((): SubmittedImages => {\n return Object.fromEntries(Object.entries(images).map(([k, v]) => [k, { path: v.path, blob: v.blob }]));\n }, [images]);\n\n return { images, keep, remove, toSubmission };\n}\n\n/** \"214 KB\" / \"1.3 MB\" for the detail line. */\nexport function formatBytes(n: number): string {\n if (n < 1024 * 1024) return `${Math.max(1, Math.round(n / 1024))} KB`;\n return `${(n / (1024 * 1024)).toFixed(1)} MB`;\n}\n","/**\n * Getting a picture out of the browser and into a handler — shared by the\n * ImageInput control and the editor's toolbar. Three doors, one exit: a file\n * picker, a drop, or a paste, each yielding the first image File it finds.\n * No shrinking or naming here — that is the host's `onPick`/`onUploadImage`.\n */\n\nimport type { ClipboardEvent, DragEvent } from \"react\";\n\nexport const IMAGE_ACCEPT = \"image/jpeg,image/png,image/webp,image/gif\";\n\n/** Open the OS file picker and resolve with the chosen file (undefined if dismissed). */\nexport function pickFile(accept = IMAGE_ACCEPT): Promise<File | undefined> {\n return new Promise((resolve) => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = accept;\n input.style.display = \"none\";\n document.body.appendChild(input);\n const done = () => { resolve(input.files?.[0]); input.remove(); };\n input.addEventListener(\"change\", done, { once: true });\n // Dismissing the picker fires no change event; window focus returning is the best signal.\n window.addEventListener(\"focus\", () => setTimeout(() => { if (document.body.contains(input)) done(); }, 400), { once: true });\n input.click();\n });\n}\n\nexport function imageFromDrop(e: DragEvent): File | undefined {\n return Array.from(e.dataTransfer?.files ?? []).find((f) => f.type.startsWith(\"image/\"));\n}\n\nexport function imageFromPaste(e: ClipboardEvent): File | undefined {\n const item = Array.from(e.clipboardData?.items ?? []).find((i) => i.kind === \"file\" && i.type.startsWith(\"image/\"));\n return item?.getAsFile() ?? undefined;\n}\n\n/** The sentence for the person when a handler throws — MediaError carries its own. */\nexport function messageOf(err: unknown): string {\n if (err && typeof err === \"object\" && (err as { name?: string }).name === \"MediaError\") return (err as Error).message;\n return \"That picture couldn’t be prepared. Try a different file.\";\n}\n","/**\n * ImageInput — the picture control for an image field.\n *\n * Empty: a dashed drop zone with \"Choose a picture\", \"or drag one here\", and the\n * size hint. With a value: a thumbnail (the current path, or the freshly shrunk\n * picture from its object URL) plus the detail line \"1600 × 900 · 214 KB\",\n * Replace, and — for a new pick — Remove, which restores the previous path.\n * Paste works anywhere on the control. The host's `onPick` shrinks and names the\n * file; this component shows \"Shrinking…\" meanwhile and any MediaError after.\n */\n\nimport { useRef, useState, type DragEvent, type ClipboardEvent } from \"react\";\nimport type { PickedImage } from \"./images\";\nimport { formatBytes } from \"./images\";\nimport { imageFromDrop, imageFromPaste, messageOf, pickFile } from \"./md/upload\";\n\nexport const IMAGE_HINT = \"JPG, PNG or WebP, up to 10MB. We shrink it for the web.\";\n\nexport interface ImageInputProps {\n id: string;\n name: string;\n /** The field's current value — a path such as /blog/my-post.webp, or \"\". */\n value: string;\n picked?: PickedImage;\n invalid?: boolean;\n disabled?: boolean;\n onPick: (file: File) => Promise<void>;\n onRemove?: () => void;\n onBlur?: () => void;\n}\n\nexport function ImageInput(p: ImageInputProps) {\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [over, setOver] = useState(false);\n const zone = useRef<HTMLDivElement>(null);\n\n const take = async (file: File | undefined) => {\n if (!file || busy || p.disabled) return;\n setBusy(true);\n setError(null);\n try {\n await p.onPick(file);\n } catch (err) {\n setError(messageOf(err));\n } finally {\n setBusy(false);\n }\n };\n\n const choose = async () => take(await pickFile());\n const onDrop = (e: DragEvent) => { e.preventDefault(); setOver(false); void take(imageFromDrop(e)); };\n const onPaste = (e: ClipboardEvent) => { const f = imageFromPaste(e); if (f) { e.preventDefault(); void take(f); } };\n\n const src = p.picked?.previewUrl ?? (p.value || null);\n const detail = p.picked\n ? [p.picked.width && p.picked.height ? `${p.picked.width} × ${p.picked.height}` : null, formatBytes(p.picked.blob.size)].filter(Boolean).join(\" · \")\n : p.value;\n\n return (\n <div\n ref={zone}\n className={[\"realiiz-image\", over && \"realiiz-image--over\", p.invalid && \"realiiz-image--invalid\", busy && \"realiiz-image--busy\"].filter(Boolean).join(\" \")}\n data-field={p.name}\n onDragOver={(e) => { e.preventDefault(); if (!over) setOver(true); }}\n onDragLeave={() => setOver(false)}\n onDrop={onDrop}\n onPaste={onPaste}\n onBlur={p.onBlur}\n tabIndex={-1}\n >\n {/* the real value travels in the form state; this input exists for the label's htmlFor and assistive tech */}\n <input id={p.id} name={p.name} type=\"text\" value={p.value} readOnly className=\"realiiz-sr-only\" aria-busy={busy || undefined} />\n\n {src ? (\n <div className=\"realiiz-image__has\">\n <img src={src} alt=\"\" className=\"realiiz-image__thumb\" data-testid=\"realiiz-image-thumb\" />\n <div className=\"realiiz-image__meta\">\n <div className=\"realiiz-image__detail\">{busy ? \"Shrinking…\" : detail}</div>\n <div className=\"realiiz-image__actions\">\n <button type=\"button\" className=\"realiiz-form__button\" onClick={choose} disabled={busy || p.disabled}>Replace</button>\n {p.picked && p.onRemove && (\n <button type=\"button\" className=\"realiiz-image__remove\" onClick={p.onRemove} disabled={busy}>Remove</button>\n )}\n </div>\n </div>\n </div>\n ) : (\n <div className=\"realiiz-image__empty\">\n <PictureIcon />\n <button type=\"button\" className=\"realiiz-form__button\" onClick={choose} disabled={busy || p.disabled}>\n {busy ? \"Shrinking…\" : \"Choose a picture\"}\n </button>\n <span className=\"realiiz-image__or\">or drag one here</span>\n </div>\n )}\n <div className=\"realiiz-image__hint\">{IMAGE_HINT}</div>\n {error && <div className=\"realiiz-form__error\" role=\"alert\">{error}</div>}\n </div>\n );\n}\n\nfunction PictureIcon() {\n return (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\" className=\"realiiz-image__icon\">\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\" />\n <circle cx=\"9\" cy=\"10\" r=\"1.6\" />\n <path d=\"M21 16l-5-5-8 8\" />\n </svg>\n );\n}\n","/**\n * Field anatomy: label (+ required marker) → control → helper row (length\n * gauge / character count) → error text. The error sits under the control,\n * never in a tooltip — the audience is a non-technical client.\n */\n\nimport type { FieldSpec } from \"../forms\";\nimport type { FieldIssue } from \"./issues\";\nimport type { ReactNode } from \"react\";\nimport { ChipsInput } from \"./ChipsInput\";\nimport { Control } from \"./controls\";\nimport { ImageInput } from \"./ImageInput\";\nimport type { PickedImage } from \"./images\";\nimport type { ControlValue } from \"./values\";\n\nexport interface FieldProps {\n formId: string;\n spec: FieldSpec;\n value: ControlValue;\n issues: FieldIssue[];\n options?: string[] | \"loading\";\n onChange: (v: ControlValue) => void;\n onBlur: () => void;\n /** How to draw a label that has help text — e.g. the site's own tooltip component. */\n renderLabel?: LabelRenderer;\n /** Image fields: the freshly picked picture (if any), and how to pick/remove one. Without onPickImage the field is a plain text path. */\n picked?: PickedImage;\n onPickImage?: (file: File) => Promise<void>;\n onRemoveImage?: () => void;\n}\n\nexport type LabelRenderer = (label: string, help: string) => ReactNode;\n\n/** Fallback when the host has no tooltip component: dotted underline + the browser's own title bubble. */\nconst defaultLabel: LabelRenderer = (label, help) => <span className=\"realiiz-form__help\" title={help}>{label}</span>;\n\n/**\n * Advisory length gauge. The bar is the whole scale (a bit past the max so\n * \"over\" has room to show), a green band marks the target range, and the fill\n * grows with the text in the state's colour: grey while short, green in range,\n * red past it. The words repeat only what the bar can't: the count and a verdict.\n */\nexport function LengthGauge({ length: raw, range, suffix }: { length: number; range: [number, number]; suffix?: string }) {\n const [min, max] = range;\n // The suffix is what the site adds on render (\" — Realiiz\"), so it counts once there is something to add it to.\n const length = raw === 0 ? 0 : raw + (suffix?.length ?? 0);\n const state = length === 0 ? \"empty\" : length < min ? \"short\" : length <= max ? \"ok\" : \"over\";\n const scale = Math.round(max * 1.3);\n const pct = (n: number) => `${Math.min(100, (n / scale) * 100)}%`;\n const verdict =\n state === \"ok\" ? \"good length\"\n : state === \"over\" ? `over ${max} — may be cut off`\n : `aim for ${min}–${max}`;\n const incl = suffix && length > 0 ? ` incl. “${suffix.trim()}”` : \"\";\n return (\n <span className={`realiiz-gauge realiiz-gauge--${state}`} title={`Recommended ${min}–${max} characters${suffix ? ` including “${suffix.trim()}”` : \"\"}`}>\n <span className=\"realiiz-gauge__bar\" aria-hidden=\"true\">\n <span className=\"realiiz-gauge__zone\" style={{ left: pct(min), width: `calc(${pct(max)} - ${pct(min)})` }} />\n <span className=\"realiiz-gauge__fill\" style={{ width: pct(length) }} />\n </span>\n <span className=\"realiiz-gauge__text\">\n <b>{length}</b> characters{incl} · {verdict}\n </span>\n </span>\n );\n}\n\nexport function Field(p: FieldProps) {\n const id = `${p.formId}-${p.spec.name}`;\n const invalid = p.issues.length > 0;\n const max = p.spec.constraints.max;\n const isText = p.spec.input === \"text\" || p.spec.input === \"textarea\";\n const len = typeof p.value === \"string\" ? p.value.length : 0;\n const isCheck = p.spec.input === \"boolean\";\n const isTags = p.spec.input === \"tags\";\n const labelText = p.spec.help ? (p.renderLabel ?? defaultLabel)(p.spec.label, p.spec.help) : p.spec.label;\n\n const control = p.spec.input === \"image\" && p.onPickImage ? (\n <ImageInput\n id={id}\n name={p.spec.name}\n value={typeof p.value === \"string\" ? p.value : \"\"}\n picked={p.picked}\n invalid={invalid}\n onPick={p.onPickImage}\n onRemove={p.onRemoveImage}\n onBlur={p.onBlur}\n />\n ) : isTags ? (\n <ChipsInput\n id={id}\n name={p.spec.name}\n value={Array.isArray(p.value) ? p.value : []}\n onChange={(v) => p.onChange(v)}\n onBlur={p.onBlur}\n placeholder={p.spec.placeholder}\n invalid={invalid}\n max={p.spec.constraints.exact ?? p.spec.constraints.max}\n />\n ) : (\n <Control id={id} spec={p.spec} value={p.value} invalid={invalid} options={p.options} onChange={p.onChange} onBlur={p.onBlur} />\n );\n\n return (\n <div className={`realiiz-form__field realiiz-form__field--${p.spec.input}`} data-field={p.spec.name}>\n {isCheck ? (\n <label className=\"realiiz-form__check\" htmlFor={id}>\n {control}\n <span>{labelText}{p.spec.required && <span className=\"realiiz-form__required\" aria-hidden=\"true\">*</span>}</span>\n </label>\n ) : (\n <>\n <label className=\"realiiz-form__label\" htmlFor={id}>\n {labelText}\n {p.spec.required && <span className=\"realiiz-form__required\" aria-hidden=\"true\">*</span>}\n </label>\n {control}\n </>\n )}\n {isText && (p.spec.recommended || typeof max === \"number\") && (\n <div className=\"realiiz-form__helper\">\n {p.spec.recommended ? (\n <LengthGauge length={len} range={p.spec.recommended} suffix={p.spec.suffix} />\n ) : (\n <span />\n )}\n {typeof max === \"number\" && <span className=\"realiiz-form__count\">{len} / {max}</span>}\n </div>\n )}\n {invalid && (\n <div className=\"realiiz-form__error\" id={`${id}-error`}>\n {p.issues.map((i, n) => <div key={n}>{i.message}</div>)}\n </div>\n )}\n </div>\n );\n}\n","/**\n * Markdown tables as data — ported from the surveillance-review report editor.\n *\n * `tableAt` finds the table under the caret (header + separator required),\n * `renderTable` writes one back padded to an even grid so the source is\n * readable, and `applyTableOp` does the four row/column edits. Pure functions\n * over the textarea's string; no DOM.\n */\n\nexport type Align = \"l\" | \"L\" | \"c\" | \"r\";\nexport type TableOp = \"rowAfter\" | \"rowDel\" | \"colAfter\" | \"colDel\";\n\nexport interface TableAt {\n start: number;\n end: number;\n rows: string[][];\n align: Align[];\n /** Row index of the caret; header and separator both count as 0. */\n row: number;\n col: number;\n}\n\nconst ROW = /^\\s*\\|.*\\|\\s*$/;\nconst SEP = /^\\s*\\|[\\s:|-]+\\|\\s*$/;\n\nexport function tableCells(line: string): string[] {\n return line.trim().replace(/^\\|/, \"\").replace(/\\|$/, \"\").split(/(?<!\\\\)\\|/).map((c) => c.trim());\n}\n\nexport function tableAt(v: string, pos: number): TableAt | null {\n const lines = v.split(\"\\n\");\n let i = 0, off = 0;\n while (i < lines.length && pos > off + lines[i].length) { off += lines[i].length + 1; i++; }\n if (i >= lines.length || !ROW.test(lines[i])) return null;\n let s = i, e = i;\n while (s > 0 && ROW.test(lines[s - 1])) s--;\n while (e < lines.length - 1 && ROW.test(lines[e + 1])) e++;\n if (e - s < 1 || !SEP.test(lines[s + 1])) return null;\n const start = lines.slice(0, s).reduce((n, l) => n + l.length + 1, 0);\n const end = start + lines.slice(s, e + 1).join(\"\\n\").length;\n // \"L\" is an explicit left-align (:---) kept distinct from the default so we never rewrite a line the user typed.\n const align = tableCells(lines[s + 1]).map((c): Align =>\n c.startsWith(\":\") && c.endsWith(\":\") ? \"c\" : c.endsWith(\":\") ? \"r\" : c.startsWith(\":\") ? \"L\" : \"l\");\n const rows = lines.slice(s, e + 1).filter((_, n) => n !== 1).map(tableCells);\n const col = Math.max(0, (lines[i].slice(0, pos - off).match(/(?<!\\\\)\\|/g) || []).length - 1);\n const row = i - s <= 1 ? 0 : i - s - 1;\n return { start, end, rows, align, row, col };\n}\n\nexport function renderTable(rows: string[][], align: Align[]): string {\n const cols = Math.max(...rows.map((r) => r.length));\n const w: number[] = [];\n for (let c = 0; c < cols; c++) w[c] = Math.max(3, ...rows.map((r) => (r[c] || \"\").length));\n const pad = (t: string | undefined, c: number) => (t || \"\").padEnd(w[c]);\n const line = (r: string[]) => \"| \" + Array.from({ length: cols }, (_, c) => pad(r[c], c)).join(\" | \") + \" |\";\n const sep = \"|\" + Array.from({ length: cols }, (_, c) =>\n align[c] === \"c\" ? \":\" + \"-\".repeat(w[c]) + \":\"\n : align[c] === \"r\" ? \" \" + \"-\".repeat(w[c] - 1) + \": \"\n : align[c] === \"L\" ? \":\" + \"-\".repeat(w[c] - 1) + \" \"\n : \" \" + \"-\".repeat(w[c]) + \" \").join(\"|\") + \"|\";\n return [line(rows[0]), sep, ...rows.slice(1).map(line)].join(\"\\n\");\n}\n\n/** A new table: header placeholders (\"Column 1\"…) plus `rows` empty body rows. */\nexport function newTable(rows: number, cols: number): { text: string; firstHeader: string } {\n const head = Array.from({ length: cols }, (_, i) => `Column ${i + 1}`);\n const grid = [head, ...Array.from({ length: rows }, () => Array<string>(cols).fill(\"\"))];\n return { text: renderTable(grid, Array<Align>(cols).fill(\"l\")), firstHeader: head[0] };\n}\n\nexport type TableEdit = { text: string; a: number; b: number } | { error: string };\n\nexport function applyTableOp(v: string, pos: number, op: TableOp): TableEdit | null {\n const t = tableAt(v, pos);\n if (!t) return null;\n const rows = t.rows.map((r) => r.slice());\n const cols = Math.max(...rows.map((r) => r.length));\n const align = t.align.slice();\n if (op === \"rowAfter\") {\n rows.splice(Math.max(1, t.row + 1), 0, Array<string>(cols).fill(\"\"));\n } else if (op === \"rowDel\") {\n if (t.row === 0 || rows.length <= 2) return { error: \"A table needs its header row and at least one row below it.\" };\n rows.splice(t.row, 1);\n } else if (op === \"colAfter\") {\n rows.forEach((r) => { while (r.length < cols) r.push(\"\"); r.splice(t.col + 1, 0, \"\"); });\n align.splice(t.col + 1, 0, \"l\");\n } else if (op === \"colDel\") {\n if (cols <= 1) return { error: \"That's the last column — delete the table instead.\" };\n rows.forEach((r) => r.splice(t.col, 1));\n align.splice(t.col, 1);\n }\n const out = renderTable(rows, align);\n return { text: v.slice(0, t.start) + out + v.slice(t.end), a: t.start, b: t.start + out.length };\n}\n","/**\n * Toolbar edits — pure functions (text, selStart, selEnd) → { text, a, b }.\n *\n * Every formatting tool TOGGLES, like the surveillance-review report editor:\n * bold on bold text un-bolds; H2 on an H2 line removes it; H3 on an H2 line\n * swaps it; link anywhere inside a link removes it. `activeTools` reports which\n * of them the caret is currently \"in\", so the buttons can light up and say what\n * they're about to do.\n */\n\nimport { newTable } from \"./table\";\n\nexport type Edit = { text: string; a: number; b: number };\nexport type Apply = (s: string, a: number, b: number) => Edit;\n\n/** Inline marks: wrapped selection → unwrap; selection inside markers → unwrap; else wrap. */\nexport const toggleWrap = (mark: string, placeholder = \"text\"): Apply =>\n (s, a, b) => {\n const sel = s.slice(a, b);\n const n = mark.length;\n if (sel.length >= 2 * n && sel.startsWith(mark) && sel.endsWith(mark)) {\n const inner = sel.slice(n, sel.length - n);\n return { text: s.slice(0, a) + inner + s.slice(b), a, b: a + inner.length };\n }\n if (s.slice(a - n, a) === mark && s.slice(b, b + n) === mark) {\n return { text: s.slice(0, a - n) + sel + s.slice(b + n), a: a - n, b: a - n + sel.length };\n }\n const body = sel || placeholder;\n return { text: s.slice(0, a) + mark + body + mark + s.slice(b), a: a + n, b: a + n + body.length };\n };\n\n/** Every line prefix a line tool might own; setting one strips any other in the family. */\nexport const PREFIX_RE = /^(#{1,6}\\s+|[-*+]\\s+|\\d+[.)]\\s+|>\\s?)/;\n\nconst lineSpan = (s: string, a: number, b: number) => {\n const start = s.lastIndexOf(\"\\n\", a - 1) + 1;\n const endIdx = s.indexOf(\"\\n\", Math.max(b, a));\n return { start, end: endIdx === -1 ? s.length : endIdx };\n};\n\n/** Line tools: if every selected line already has THIS prefix, remove it; otherwise replace whatever prefix they have. */\nexport const toggleLines = (prefix: string | ((i: number) => string), matches: (line: string) => boolean): Apply =>\n (s, a, b) => {\n const { start, end } = lineSpan(s, a, b);\n const lines = s.slice(start, end).split(\"\\n\");\n const allOn = lines.every((l) => l.trim() === \"\" || matches(l));\n const out = lines.map((l, i) => {\n const bare = l.replace(PREFIX_RE, \"\");\n return allOn ? bare : (typeof prefix === \"string\" ? prefix : prefix(i)) + bare;\n });\n const replaced = out.join(\"\\n\");\n return { text: s.slice(0, start) + replaced + s.slice(end), a: start, b: start + replaced.length };\n };\n\nconst LINK_RE = /\\[([^\\]\\n]*)\\]\\(([^)\\n]*)\\)/g;\n\n/** The `[label](url)` that contains [a,b], or null. Images (`![..](..)`) don't count. */\nexport function linkAt(s: string, a: number, b: number): { from: number; to: number; label: string } | null {\n for (const m of s.matchAll(LINK_RE)) {\n if (s[m.index - 1] === \"!\") continue;\n const from = m.index, to = from + m[0].length;\n if (a >= from && b <= to) return { from, to, label: m[1] };\n if (from > b) break;\n }\n return null;\n}\n\n/** Link: any selection or caret inside a link removes it (label kept); otherwise link the selection and select the URL. */\nexport const toggleLink: Apply = (s, a, b) => {\n const hit = linkAt(s, a, b);\n if (hit) return { text: s.slice(0, hit.from) + hit.label + s.slice(hit.to), a: hit.from, b: hit.from + hit.label.length };\n const label = s.slice(a, b) || \"link text\";\n const urlStart = a + label.length + 3;\n return { text: s.slice(0, a) + `[${label}](https://)` + s.slice(b), a: urlStart, b: urlStart + 8 };\n};\n\n/** Image: `![description](https://)` with the URL selected for typing or pasting. */\nexport const insertImage: Apply = (s, a, b) => {\n const alt = s.slice(a, b) || \"description\";\n const urlStart = a + alt.length + 4;\n return { text: s.slice(0, a) + `![${alt}](https://)` + s.slice(b), a: urlStart, b: urlStart + 8 };\n};\n\n/** Inline separator between details, e.g. `email · phone`. */\nexport const insertDot: Apply = (s, a, b) => {\n const t = \" · \";\n return { text: s.slice(0, a) + t + s.slice(b), a: a + t.length, b: a + t.length };\n};\n\n/** Needs a blank line before it or the paragraph above swallows the block. */\nconst blockBefore = (s: string, a: number) => (a === 0 || s.slice(0, a).endsWith(\"\\n\\n\") ? \"\" : s.slice(0, a).endsWith(\"\\n\") ? \"\\n\" : \"\\n\\n\");\n\nexport const insertRule: Apply = (s, a, b) => {\n const before = blockBefore(s, a);\n const t = before + \"---\\n\\n\";\n return { text: s.slice(0, a) + t + s.slice(b), a: a + t.length, b: a + t.length };\n};\n\n/** Table of `rows` body rows × `cols`; lands with the first header selected so typing replaces it. */\nexport const insertTable = (rows: number, cols: number): Apply => (s, a, b) => {\n const { text, firstHeader } = newTable(rows, cols);\n const before = blockBefore(s, a);\n const t = before + text + \"\\n\";\n const at = a + before.length + text.indexOf(firstHeader);\n return { text: s.slice(0, a) + t + s.slice(b), a: at, b: at + firstHeader.length };\n};\n\n/**\n * Tooltip term — an MDX component, so opt-in per site: `<Term definition=\"…\">word</Term>`.\n * Select a word → wrapped with the caret inside the empty quotes, ready for the\n * definition. Anywhere inside an existing Term → unwrapped back to the word.\n */\nexport const toggleTerm = (component = \"Term\", attr = \"definition\"): Apply => (s, a, b) => {\n const re = new RegExp(`<${component}\\\\s+${attr}=\"([^\"]*)\"\\\\s*>([\\\\s\\\\S]*?)</${component}>`, \"g\");\n for (const m of s.matchAll(re)) {\n const from = m.index, to = from + m[0].length;\n if (a >= from && b <= to) return { text: s.slice(0, from) + m[2] + s.slice(to), a: from, b: from + m[2].length };\n if (from > b) break;\n }\n const word = s.slice(a, b) || \"term\";\n const open = `<${component} ${attr}=\"`;\n const text = s.slice(0, a) + open + `\">${word}</${component}>` + s.slice(b);\n return { text, a: a + open.length, b: a + open.length };\n};\n\nexport interface Tool { id: string; title: string; apply: Apply }\n\nexport const TOOLS: Tool[] = [\n { id: \"bold\", title: \"Bold — ⌘B\", apply: toggleWrap(\"**\") },\n { id: \"italic\", title: \"Italic — ⌘I\", apply: toggleWrap(\"_\") },\n { id: \"h2\", title: \"Section heading\", apply: toggleLines(\"## \", (l) => /^##\\s/.test(l)) },\n { id: \"h3\", title: \"Sub-heading\", apply: toggleLines(\"### \", (l) => /^###\\s/.test(l)) },\n { id: \"ul\", title: \"Bulleted list\", apply: toggleLines(\"- \", (l) => /^[-*+]\\s/.test(l)) },\n { id: \"ol\", title: \"Numbered list\", apply: toggleLines((i) => `${i + 1}. `, (l) => /^\\d+[.)]\\s/.test(l)) },\n { id: \"quote\", title: \"Quote\", apply: toggleLines(\"> \", (l) => /^>/.test(l)) },\n { id: \"link\", title: \"Link\", apply: toggleLink },\n { id: \"code\", title: \"Inline code\", apply: toggleWrap(\"`\", \"code\") },\n { id: \"image\", title: \"Image\", apply: insertImage },\n { id: \"dot\", title: \"Separator between details ( · )\", apply: insertDot },\n { id: \"rule\", title: \"Divider line across the page\", apply: insertRule },\n];\n\nexport const toolById = (id: string): Tool => TOOLS.find((t) => t.id === id)!;\n\n/** Which toggle tools the caret is currently inside, so their buttons can light up. */\nexport function activeTools(s: string, a: number, b: number): Set<string> {\n const on = new Set<string>();\n const sel = s.slice(a, b);\n const wrapped = (m: string) =>\n (s.slice(a - m.length, a) === m && s.slice(b, b + m.length) === m) ||\n (sel.length >= 2 * m.length && sel.startsWith(m) && sel.endsWith(m));\n if (wrapped(\"**\") || spanAt(s, a, b, /\\*\\*[^*\\n]+\\*\\*/g, 2)) on.add(\"bold\");\n if (wrapped(\"_\") || spanAt(s, a, b, /(?<![\\w_])_[^_\\n]+_(?![\\w_])/g, 1)) on.add(\"italic\");\n if (wrapped(\"`\") || spanAt(s, a, b, /`[^`\\n]+`/g, 1)) on.add(\"code\");\n if (linkAt(s, a, b)) on.add(\"link\");\n if (spanAt(s, a, b, /<([A-Z][\\w]*)\\s[^>]*>[\\s\\S]*?<\\/\\1>/g, 0)) on.add(\"term\");\n const { start, end } = lineSpan(s, a, a);\n const line = s.slice(start, end);\n if (/^##\\s/.test(line)) on.add(\"h2\");\n else if (/^###\\s/.test(line)) on.add(\"h3\");\n else if (/^[-*+]\\s/.test(line)) on.add(\"ul\");\n else if (/^\\d+[.)]\\s/.test(line)) on.add(\"ol\");\n else if (/^>/.test(line)) on.add(\"quote\");\n return on;\n}\n\n/** True when [a,b] lies strictly inside the content of a span matched by `re` (pad = marker length). */\nfunction spanAt(s: string, a: number, b: number, re: RegExp, pad: number): boolean {\n for (const m of s.matchAll(re)) {\n const from = m.index, to = from + m[0].length;\n if (a >= from + pad && b <= to - pad) return true;\n if (from > b) break;\n }\n return false;\n}\n","/**\n * Toolbar glyphs — drawn, not typed, like the report editor: \"H\", \"1.\" and a\n * quotation mark as characters next to real icons is two visual languages for\n * one job. B and I stay as letters because the letterform IS the icon.\n */\n\nimport type { ReactNode } from \"react\";\n\nconst Svg = ({ children, fill = \"none\" }: { children: ReactNode; fill?: string }) => (\n <svg className=\"realiiz-md__ico\" viewBox=\"0 0 24 24\" fill={fill} stroke=\"currentColor\" strokeWidth=\"1.9\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n {children}\n </svg>\n);\n\nexport const MD_ICONS: Record<string, ReactNode> = {\n bold: <b>B</b>,\n italic: <i>I</i>,\n h2: <Svg><path d=\"M6 5v14\" /><path d=\"M14 5v14\" /><path d=\"M6 12h8\" /><path d=\"M17.5 19v-6.5l-1.6 1.2\" /></Svg>,\n h3: <Svg><path d=\"M5 5v14\" /><path d=\"M12 5v14\" /><path d=\"M5 12h7\" /><path d=\"M16 12.5h3.5l-2 2.2a1.9 1.9 0 1 1-1.5 3.2\" /></Svg>,\n ul: (\n <Svg>\n <line x1=\"9\" y1=\"6.5\" x2=\"20\" y2=\"6.5\" /><line x1=\"9\" y1=\"12\" x2=\"20\" y2=\"12\" /><line x1=\"9\" y1=\"17.5\" x2=\"20\" y2=\"17.5\" />\n <circle cx=\"4.6\" cy=\"6.5\" r=\"1.3\" fill=\"currentColor\" stroke=\"none\" /><circle cx=\"4.6\" cy=\"12\" r=\"1.3\" fill=\"currentColor\" stroke=\"none\" /><circle cx=\"4.6\" cy=\"17.5\" r=\"1.3\" fill=\"currentColor\" stroke=\"none\" />\n </Svg>\n ),\n ol: (\n <Svg>\n <line x1=\"10\" y1=\"6.5\" x2=\"20\" y2=\"6.5\" /><line x1=\"10\" y1=\"12\" x2=\"20\" y2=\"12\" /><line x1=\"10\" y1=\"17.5\" x2=\"20\" y2=\"17.5\" />\n <path d=\"M4 5.6 5.2 5v3.4\" /><path d=\"M3.6 11.2h1.8L3.6 13.7h1.9\" /><path d=\"M3.7 16.3h1.7v1.2H4.2h1.2v1.2H3.7\" />\n </Svg>\n ),\n quote: (\n <Svg>\n <path d=\"M9 7c-2.4 0-4 1.7-4 4 0 1.9 1.3 3.2 3 3.2.4 0 .8-.1 1-.2-.3 1.4-1.5 2.6-3 3l.7 1.5c2.8-.8 4.8-3.3 4.8-6.6C11.5 8.7 10.5 7 9 7z\" fill=\"currentColor\" stroke=\"none\" />\n <path d=\"M18 7c-2.4 0-4 1.7-4 4 0 1.9 1.3 3.2 3 3.2.4 0 .8-.1 1-.2-.3 1.4-1.5 2.6-3 3l.7 1.5c2.8-.8 4.8-3.3 4.8-6.6C20.5 8.7 19.5 7 18 7z\" fill=\"currentColor\" stroke=\"none\" />\n </Svg>\n ),\n link: <Svg><path d=\"M10 13a5 5 0 0 0 7.5.5l2.5-2.5a5 5 0 0 0-7-7l-1.5 1.4\" /><path d=\"M14 11a5 5 0 0 0-7.5-.5L4 13a5 5 0 0 0 7 7l1.4-1.4\" /></Svg>,\n code: <Svg><path d=\"m8 7-5 5 5 5\" /><path d=\"m16 7 5 5-5 5\" /><path d=\"m14 4-4 16\" /></Svg>,\n // A tooltip: a tall speech bubble with an \"i\" — what the reader will actually see on the page.\n term: (\n <Svg>\n <path d=\"M5 2.5h14a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2h-4.5L12 21.5 9.5 17.5H5a2 2 0 0 1-2-2v-11a2 2 0 0 1 2-2z\" />\n <path d=\"M12 9v4.5\" />\n <circle cx=\"12\" cy=\"6.2\" r=\".9\" fill=\"currentColor\" stroke=\"none\" />\n </Svg>\n ),\n image: <Svg><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" /><circle cx=\"8.5\" cy=\"8.5\" r=\"1.6\" /><path d=\"m21 15-5-5L5 21\" /></Svg>,\n dot: <span className=\"realiiz-md__dot\">·</span>,\n rule: <Svg><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" /></Svg>,\n table: <Svg><rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\" /><line x1=\"3\" y1=\"9.5\" x2=\"21\" y2=\"9.5\" /><line x1=\"3\" y1=\"15\" x2=\"21\" y2=\"15\" /><line x1=\"12\" y1=\"9.5\" x2=\"12\" y2=\"20\" /></Svg>,\n expand: <Svg><path d=\"M9 3H3v6\" /><path d=\"M15 21h6v-6\" /><path d=\"M3 3l7 7\" /><path d=\"M21 21l-7-7\" /></Svg>,\n contract: <Svg><path d=\"M4 10h6V4\" /><path d=\"M20 14h-6v6\" /><path d=\"M3 3l7 7\" /><path d=\"M21 21l-7-7\" /></Svg>,\n};\n","/**\n * Table size picker — point at a 6×6 grid instead of typing two numbers.\n * The count is body rows; the header is always added on top.\n */\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { MD_ICONS } from \"./icons\";\n\nconst MAX = 6;\n\nexport function TableGrid({ onPick }: { onPick: (rows: number, cols: number) => void }) {\n const [open, setOpen] = useState(false);\n const [hot, setHot] = useState<[number, number]>([0, 0]);\n const wrap = useRef<HTMLSpanElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const away = (e: MouseEvent) => { if (!wrap.current?.contains(e.target as Node)) setOpen(false); };\n const esc = (e: globalThis.KeyboardEvent) => { if (e.key === \"Escape\") setOpen(false); };\n document.addEventListener(\"mousedown\", away);\n document.addEventListener(\"keydown\", esc);\n return () => { document.removeEventListener(\"mousedown\", away); document.removeEventListener(\"keydown\", esc); };\n }, [open]);\n\n const [r, c] = hot;\n const label = r && c ? `${c} column${c === 1 ? \"\" : \"s\"} × ${r} row${r === 1 ? \"\" : \"s\"}` : \"Pick a size\";\n\n return (\n <span className={[\"realiiz-md__tgwrap\", open && \"is-open\"].filter(Boolean).join(\" \")} ref={wrap}>\n <button type=\"button\" data-tool=\"table\" data-tip=\"New table — pick a size\" aria-label=\"Insert a table\" aria-expanded={open} onClick={() => setOpen((o) => !o)}>\n {MD_ICONS.table}\n </button>\n {open && (\n <span className=\"realiiz-md__tgrid\" role=\"dialog\" aria-label=\"Table size\" onMouseLeave={() => setHot([0, 0])}>\n <span className=\"realiiz-md__tgcells\">\n {Array.from({ length: MAX * MAX }, (_, n) => {\n const rr = Math.floor(n / MAX) + 1, cc = (n % MAX) + 1;\n return (\n <i\n key={n}\n className={rr <= r && cc <= c ? \"hot\" : undefined}\n onMouseEnter={() => setHot([rr, cc])}\n onClick={() => { setOpen(false); onPick(rr, cc); }}\n aria-label={`${cc} × ${rr}`}\n role=\"button\"\n />\n );\n })}\n </span>\n <span className=\"realiiz-md__tglab\">{label}</span>\n </span>\n )}\n </span>\n );\n}\n","/**\n * MarkdownEditor — a plain textarea with the report editor's toolbar and a real preview.\n *\n * Shape borrowed from the surveillance-review report editor: a segmented\n * \"Edit Markdown | Preview\" control, one toolbar row (format · link · Insert:\n * image, separator, divider, table) with buttons that TOGGLE and light up when\n * the caret sits in text of that kind, row/column controls that appear only\n * while the caret is in a table, and an Expand button that fills the window\n * (pure CSS, Esc to come back). No rich-text model — the text is the truth.\n *\n * An existing post opens in Preview (read first, then edit); a blank body opens\n * in Edit. Preview is delegated: `renderPreview(markdown)` is supplied by the\n * host site and runs its real pipeline, so what you see is what the blog\n * renders. Without it, the Preview tab is hidden.\n *\n * Edits go through execCommand(\"insertText\") when the browser allows it so the\n * native undo stack survives (assigning .value wipes it); otherwise onChange.\n */\n\nimport { useCallback, useEffect, useRef, useState, type ClipboardEvent, type DragEvent, type KeyboardEvent } from \"react\";\nimport { activeTools, insertTable, toggleTerm, toolById, type Apply, type Edit, type Tool } from \"./md/edits\";\nimport { applyTableOp, tableAt, type TableOp } from \"./md/table\";\nimport { MD_ICONS } from \"./md/icons\";\nimport { TableGrid } from \"./md/TableGrid\";\nimport { imageFromDrop, imageFromPaste, messageOf, pickFile } from \"./md/upload\";\n\nexport { TOOLS } from \"./md/edits\";\n\nexport interface MarkdownEditorProps {\n id: string;\n name?: string;\n value: string;\n onChange: (v: string) => void;\n placeholder?: string;\n /** Host-supplied renderer returning HTML. Errors should be returned as `{ error }`. */\n renderPreview?: (markdown: string) => Promise<{ html: string } | { error: string }>;\n /** Extra class on the preview body, e.g. the site's own prose class so it matches the blog. */\n previewClassName?: string;\n minHeight?: number;\n /**\n * Name of the site's tooltip MDX component, e.g. \"Term\" → a toolbar button that wraps the\n * selection as `<Term definition=\"\">word</Term>`. Off unless the site has such a component.\n */\n termComponent?: string;\n /**\n * Upload a picture for the body: shrink, name and hand back its final path and a\n * preview URL. When set, the toolbar Image button opens a file picker (and drop or\n * paste of an image onto the text does the same) and inserts ![description](path).\n */\n onUploadImage?: (file: File) => Promise<{ path: string; previewUrl: string }>;\n /** Paths of not-yet-committed pictures → object URLs, applied to <img src> in the preview. */\n previewSrc?: Record<string, string>;\n}\n\nconst FORMAT = [\"bold\", \"italic\"] as const;\nconst BLOCK = [\"h2\", \"h3\", \"ul\", \"ol\", \"quote\"] as const;\nconst INLINE = [\"link\", \"code\"] as const;\nconst INSERT = [\"image\", \"dot\", \"rule\"] as const;\nconst TABLE_OPS: { op: TableOp; label: string; tip: string }[] = [\n { op: \"rowAfter\", label: \"+ Row\", tip: \"Insert a row below this one\" },\n { op: \"rowDel\", label: \"− Row\", tip: \"Delete this row\" },\n { op: \"colAfter\", label: \"+ Col\", tip: \"Insert a column to the right\" },\n { op: \"colDel\", label: \"− Col\", tip: \"Delete this column\" },\n];\n\nexport function MarkdownEditor({ id, name = \"body\", value, onChange, placeholder, renderPreview, previewClassName, minHeight = 320, termComponent, onUploadImage, previewSrc }: MarkdownEditorProps) {\n const [mode, setMode] = useState<\"edit\" | \"preview\">(() => (renderPreview && value.trim() ? \"preview\" : \"edit\"));\n const [preview, setPreview] = useState<{ html: string } | { error: string } | null>(null);\n const [loading, setLoading] = useState(false);\n const [expanded, setExpanded] = useState(false);\n const [on, setOn] = useState<Set<string>>(() => new Set());\n const [inTable, setInTable] = useState(false);\n const [note, setNote] = useState<string | null>(null);\n const [uploading, setUploading] = useState(false);\n const ta = useRef<HTMLTextAreaElement>(null);\n\n const sync = useCallback(() => {\n const el = ta.current;\n if (!el) return;\n setOn(activeTools(el.value, el.selectionStart, el.selectionEnd));\n setInTable(Boolean(tableAt(el.value, el.selectionStart)));\n }, []);\n\n const commit = (edit: Edit) => {\n const el = ta.current;\n if (!el) return;\n const { text, a, b } = edit;\n // Replace only the changed span through insertText so undo keeps working; fall back to a plain set.\n const from = commonPrefix(el.value, text);\n const oldTail = el.value.length - from, newTail = text.length - from;\n const suffix = commonSuffix(el.value.slice(from), text.slice(from));\n const oldEnd = from + oldTail - suffix, newEnd = from + newTail - suffix;\n let ok = false;\n el.focus();\n el.setSelectionRange(from, oldEnd);\n try { ok = document.execCommand(\"insertText\", false, text.slice(from, newEnd)); } catch { ok = false; }\n if (!ok || el.value !== text) onChange(text);\n requestAnimationFrame(() => { el.setSelectionRange(a, b); sync(); });\n };\n\n const run = (apply: Apply) => {\n const el = ta.current;\n if (!el) return;\n commit(apply(value, el.selectionStart, el.selectionEnd));\n };\n\n const runTable = (op: TableOp) => {\n const el = ta.current;\n if (!el) return;\n const r = applyTableOp(value, el.selectionStart, op);\n if (!r) return;\n if (\"error\" in r) { setNote(r.error); return; }\n setNote(null);\n commit(r);\n };\n\n /** Toolbar Image (with a host uploader), or a picture dropped/pasted onto the text. */\n const upload = async (file: File | undefined) => {\n const el = ta.current;\n if (!file || !onUploadImage || !el || uploading) return;\n setUploading(true);\n setNote(null);\n const a = el.selectionStart, b = el.selectionEnd;\n try {\n const { path } = await onUploadImage(file);\n const alt = value.slice(a, b) || \"description\";\n const text = value.slice(0, a) + `![${alt}](${path})` + value.slice(b);\n commit({ text, a: a + 2, b: a + 2 + alt.length });\n } catch (err) {\n setNote(messageOf(err));\n } finally {\n setUploading(false);\n }\n };\n const onDrop = (e: DragEvent<HTMLTextAreaElement>) => { const f = imageFromDrop(e); if (f && onUploadImage) { e.preventDefault(); void upload(f); } };\n const onPaste = (e: ClipboardEvent<HTMLTextAreaElement>) => { const f = imageFromPaste(e); if (f && onUploadImage) { e.preventDefault(); void upload(f); } };\n\n const onKey = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Escape\" && expanded) { e.preventDefault(); setExpanded(false); return; }\n if (!(e.metaKey || e.ctrlKey)) return;\n if (e.key === \"b\") { e.preventDefault(); run(toolById(\"bold\").apply); }\n if (e.key === \"i\") { e.preventDefault(); run(toolById(\"italic\").apply); }\n if (e.key === \"k\") { e.preventDefault(); run(toolById(\"link\").apply); }\n };\n\n useEffect(() => {\n if (!expanded) return;\n const prev = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n const esc = (e: globalThis.KeyboardEvent) => { if (e.key === \"Escape\") setExpanded(false); };\n document.addEventListener(\"keydown\", esc);\n return () => { document.body.style.overflow = prev; document.removeEventListener(\"keydown\", esc); };\n }, [expanded]);\n\n useEffect(() => {\n if (mode !== \"preview\" || !renderPreview) return;\n let live = true;\n setLoading(true);\n renderPreview(value)\n .then((r) => { if (live) setPreview(\"html\" in r ? { html: swapPreviewSrc(r.html, previewSrc) } : r); })\n .catch((err: unknown) => { if (live) setPreview({ error: err instanceof Error ? err.message : String(err) }); })\n .finally(() => { if (live) setLoading(false); });\n return () => { live = false; };\n }, [mode, value, renderPreview, previewSrc]);\n\n const termTool: Tool | null = termComponent\n ? { id: \"term\", title: `Tooltip — wraps the selection in <${termComponent}>`, apply: toggleTerm(termComponent) }\n : null;\n\n const btn = (toolId: string) => {\n const t = toolId === \"term\" && termTool ? termTool : toolById(toolId);\n const uploads = t.id === \"image\" && Boolean(onUploadImage);\n const title = uploads ? (uploading ? \"Shrinking…\" : \"Picture — choose a file, or drop/paste one into the text\") : t.title;\n return (\n <button key={t.id} type=\"button\" data-tool={t.id} data-tip={title} aria-label={title} aria-pressed={on.has(t.id) || undefined} aria-busy={uploads && uploading ? true : undefined} className={on.has(t.id) ? \"on\" : undefined} disabled={uploads && uploading} onMouseDown={(e) => e.preventDefault()} onClick={() => (uploads ? pickFile().then(upload) : run(t.apply))}>\n {MD_ICONS[t.id]}\n </button>\n );\n };\n\n return (\n <div className={[\"realiiz-md\", expanded && \"realiiz-md--fs\"].filter(Boolean).join(\" \")}>\n {renderPreview && (\n <span className=\"realiiz-md__mode\" role=\"tablist\" aria-label=\"Editor mode\">\n <button type=\"button\" role=\"tab\" aria-selected={mode === \"edit\"} onClick={() => setMode(\"edit\")}>Edit Markdown</button>\n <button type=\"button\" role=\"tab\" aria-selected={mode === \"preview\"} onClick={() => setMode(\"preview\")}>Preview</button>\n </span>\n )}\n\n <div className=\"realiiz-md__panel\">\n <div className=\"realiiz-md__head\">\n {mode === \"edit\" && (\n <span className=\"realiiz-md__tools\" role=\"toolbar\" aria-label=\"Formatting\">\n {FORMAT.map(btn)}\n <span className=\"realiiz-md__sep\" />\n {BLOCK.map(btn)}\n <span className=\"realiiz-md__sep\" />\n {INLINE.map(btn)}\n {termTool && btn(\"term\")}\n {inTable && (\n <>\n <span className=\"realiiz-md__sep\" />\n {TABLE_OPS.map((t) => (\n <button key={t.op} type=\"button\" data-tbl-op={t.op} data-tip={t.tip} aria-label={t.tip} onMouseDown={(e) => e.preventDefault()} onClick={() => runTable(t.op)}>{t.label}</button>\n ))}\n </>\n )}\n <span className=\"realiiz-md__insert\">\n <span className=\"realiiz-md__lab\">Insert</span>\n {INSERT.map(btn)}\n <TableGrid onPick={(r, c) => run(insertTable(r, c))} />\n </span>\n </span>\n )}\n <span className=\"realiiz-md__spacer\" />\n <button\n type=\"button\"\n className=\"realiiz-md__expand\"\n data-tip={expanded ? \"Back to the normal layout — or press Esc\" : \"Fill the window — Esc to come back\"}\n aria-label={expanded ? \"Exit\" : \"Expand\"}\n onClick={() => setExpanded((x) => !x)}\n >\n {expanded ? MD_ICONS.contract : MD_ICONS.expand}\n </button>\n </div>\n\n {mode === \"edit\" ? (\n <textarea\n ref={ta}\n id={id}\n name={name}\n className=\"realiiz-form__control realiiz-form__control--body realiiz-md__ta\"\n style={expanded ? undefined : { minHeight }}\n value={value}\n placeholder={placeholder}\n onChange={(e) => { onChange(e.target.value); sync(); }}\n onSelect={sync}\n onKeyUp={sync}\n onClick={sync}\n onKeyDown={onKey}\n onDrop={onDrop}\n onPaste={onPaste}\n spellCheck\n />\n ) : (\n <div className=\"realiiz-md__preview\" style={expanded ? undefined : { minHeight }} aria-live=\"polite\" aria-busy={loading}>\n {loading && <div className=\"realiiz-md__loading\">Rendering…</div>}\n {!loading && preview && \"error\" in preview && (\n <div className=\"realiiz-form__alert\" role=\"alert\">Couldn&apos;t render: {preview.error}</div>\n )}\n {!loading && preview && \"html\" in preview && (\n <div className={[\"realiiz-prose\", previewClassName].filter(Boolean).join(\" \")} dangerouslySetInnerHTML={{ __html: preview.html }} />\n )}\n </div>\n )}\n </div>\n {(note || uploading) && <div className=\"realiiz-form__helper realiiz-md__note\" role=\"status\">{uploading ? \"Shrinking…\" : note}</div>}\n </div>\n );\n}\n\n/** Point <img src=\"/blog/x/y.webp\"> at its object URL while the file exists only in this browser. */\nexport function swapPreviewSrc(html: string, map?: Record<string, string>): string {\n if (!map || Object.keys(map).length === 0) return html;\n return html.replace(/(<img\\b[^>]*\\bsrc=\")([^\"]+)(\")/g, (m, pre: string, src: string, post: string) => (map[src] ? `${pre}${map[src]}${post}` : m));\n}\n\nfunction commonPrefix(a: string, b: string): number {\n const n = Math.min(a.length, b.length);\n let i = 0;\n while (i < n && a[i] === b[i]) i++;\n return i;\n}\nfunction commonSuffix(a: string, b: string): number {\n const n = Math.min(a.length, b.length);\n let i = 0;\n while (i < n && a[a.length - 1 - i] === b[b.length - 1 - i]) i++;\n return i;\n}\n","/**\n * zod issue → { field, key, message }. Pure.\n *\n * The key matches FieldSpec.messages so the schema's own per-check wording is\n * what the client reads. Observed on zod 4.5.4 (see the ADMIN-02b brief):\n * too_small / too_big origin string|array → min_length / max_length\n * origin number → greater_than / less_than\n * when the spec has `exact` → length_equals\n * invalid_format format regex|url|… → that format\n * invalid_type + format safeint (from .int()) → int\n * custom → custom\n * unrecognized_keys path [] , keys: [...] → form-level\n */\n\nimport type { FieldSpec } from \"../forms\";\n\nexport interface FieldIssue {\n /** null for form-level issues. */\n field: string | null;\n key: string;\n message: string;\n}\n\ninterface ZodIssueLike {\n code: string;\n path: PropertyKey[];\n message: string;\n origin?: string;\n format?: string;\n keys?: string[];\n}\n\nexport function mapIssues(issues: ZodIssueLike[], specs: FieldSpec[]): FieldIssue[] {\n const byName = new Map(specs.map((s) => [s.name, s]));\n return issues.map((issue) => {\n const field = typeof issue.path[0] === \"string\" ? issue.path[0] : null;\n const spec = field ? byName.get(field) : undefined;\n const key = keyFor(issue, spec);\n const message =\n (spec?.messages[key] ?? (issue.code === \"unrecognized_keys\" ? unknownKeysMessage(issue) : undefined)) ??\n issue.message;\n return { field, key, message };\n });\n}\n\nfunction keyFor(issue: ZodIssueLike, spec?: FieldSpec): string {\n const numeric = issue.origin === \"number\" || issue.origin === \"int\";\n switch (issue.code) {\n case \"too_small\":\n if (spec?.constraints.exact !== undefined) return \"length_equals\";\n return numeric ? \"greater_than\" : \"min_length\";\n case \"too_big\":\n if (spec?.constraints.exact !== undefined) return \"length_equals\";\n return numeric ? \"less_than\" : \"max_length\";\n case \"invalid_format\":\n return issue.format ?? \"format\";\n case \"invalid_type\":\n return issue.format === \"safeint\" || issue.format === \"int32\" ? \"int\" : \"invalid_type\";\n default:\n return issue.code;\n }\n}\n\nfunction unknownKeysMessage(issue: ZodIssueLike): string {\n const keys = issue.keys ?? [];\n return `This file has ${keys.length === 1 ? \"a field\" : \"fields\"} the site does not recognise: ${keys.join(\", \")}. It was probably edited by hand — remove or rename ${keys.length === 1 ? \"it\" : \"them\"} to continue.`;\n}\n\n/** Group by field for rendering. */\nexport function groupIssues(list: FieldIssue[]): { byField: Map<string, FieldIssue[]>; formLevel: FieldIssue[] } {\n const byField = new Map<string, FieldIssue[]>();\n const formLevel: FieldIssue[] = [];\n for (const i of list) {\n if (i.field === null) formLevel.push(i);\n else byField.set(i.field, [...(byField.get(i.field) ?? []), i]);\n }\n return { byField, formLevel };\n}\n","/**\n * Control strings ↔ frontmatter values. Pure.\n *\n * Controls hold strings (or booleans / string arrays). The schema wants typed\n * values. An image field holds its PATH as a string; the picked bytes live\n * beside the form state (ContentForm `images`) and never pass through here.\n * `toControl` seeds a control from an existing frontmatter value — including\n * a Date from a previously-parsed file — and `toValue` assembles what goes to\n * safeParse. Anything the schema then coerces (dates) is the schema's business.\n */\n\nimport type { FieldSpec } from \"../forms\";\n\nexport type ControlValue = string | string[] | boolean | null;\nexport type FormState = Record<string, ControlValue>;\n\nexport function toControl(spec: FieldSpec, raw: unknown): ControlValue {\n if (raw === undefined || raw === null) return spec.input === \"boolean\" ? false : \"\";\n switch (spec.input) {\n case \"boolean\":\n return Boolean(raw);\n case \"date\": {\n // <input type=\"date\"> only accepts YYYY-MM-DD; frontmatter often carries a full ISO stamp.\n if (raw instanceof Date) return raw.toISOString().slice(0, 10);\n const s = String(raw);\n return /^\\d{4}-\\d{2}-\\d{2}/.test(s) ? s.slice(0, 10) : s;\n }\n case \"tags\":\n return Array.isArray(raw) ? raw.map(String) : String(raw).split(\",\").map((t) => t.trim()).filter(Boolean);\n default:\n return String(raw);\n }\n}\n\n/** Build the object that goes to schema.safeParse. Empty optional fields are omitted. */\nexport function toFrontmatter(\n specs: FieldSpec[],\n state: FormState,\n hiddenValues: Record<string, unknown>,\n): Record<string, unknown> {\n const frontmatter: Record<string, unknown> = { ...hiddenValues };\n\n for (const spec of specs) {\n if (spec.role === \"hidden\" || spec.role === \"body\") continue;\n const v = state[spec.name];\n\n if (spec.input === \"boolean\") {\n if (v === true) frontmatter[spec.name] = true;\n else if (spec.required) frontmatter[spec.name] = false;\n continue;\n }\n if (Array.isArray(v)) {\n if (v.length || spec.required) frontmatter[spec.name] = v;\n continue;\n }\n const s = typeof v === \"string\" ? v.trim() : \"\";\n if (s === \"\") {\n // Required fields are sent empty so the schema's own \"is required\" message fires.\n if (spec.required) frontmatter[spec.name] = spec.input === \"tags\" ? [] : \"\";\n continue;\n }\n switch (spec.input) {\n case \"number\": {\n const n = Number(s);\n frontmatter[spec.name] = Number.isNaN(n) ? s : n;\n break;\n }\n case \"tags\":\n frontmatter[spec.name] = s.split(\",\").map((t) => t.trim()).filter(Boolean);\n break;\n default:\n frontmatter[spec.name] = s;\n }\n }\n return frontmatter;\n}\n","/**\n * ContentForm — a ContentTypeEntry in, validated { frontmatter, body, images } out.\n *\n * Validation runs on submit. After the first failed submit it also re-runs on\n * blur, so the client watches the error clear as they fix it. Before that\n * first submit the form stays quiet — nagging someone who hasn't finished\n * typing is the wrong default for this audience.\n *\n * The schema is the only judge. This component never decides what is valid;\n * it assembles values, calls entry.schema.safeParse, and maps issues back to\n * fields with the schema's own messages.\n */\n\nimport { useCallback, useEffect, useId, useMemo, useRef, useState, type FormEvent, type ReactNode } from \"react\";\nimport type { ContentTypeEntry, FieldSpec } from \"../forms\";\nimport { walkSchema } from \"../forms\";\nimport { Field, type LabelRenderer } from \"./Field\";\nimport { MarkdownEditor, type MarkdownEditorProps } from \"./MarkdownEditor\";\nimport { groupIssues, mapIssues, type FieldIssue } from \"./issues\";\nimport { FORM_CSS } from \"./styles\";\nimport { toControl, toFrontmatter, type ControlValue, type FormState } from \"./values\";\nimport { useImages, type PickImage, type SubmittedImages } from \"./images\";\n\nexport interface ContentFormSubmission {\n frontmatter: Record<string, unknown>;\n body: string;\n /** Newly picked pictures by field name — the frontmatter already holds each one's final path. */\n images: SubmittedImages;\n}\n\nexport interface ContentFormProps {\n entry: ContentTypeEntry;\n initialValues?: Record<string, unknown>;\n initialBody?: string;\n onSubmit: (s: ContentFormSubmission) => void | Promise<void>;\n onCancel?: () => void;\n submitLabel?: string;\n className?: string;\n /**\n * Show the MDX body textarea (the content below the frontmatter). Default\n * true — most types have a body. Pass false for frontmatter-only types such\n * as venues. Independent of entry.body, which names a frontmatter FIELD\n * that should be edited as long text.\n */\n showBody?: boolean;\n bodyLabel?: string;\n /** Host-supplied Markdown/MDX renderer for the Preview tab. Without it the editor is edit-only. */\n renderPreview?: MarkdownEditorProps[\"renderPreview\"];\n previewClassName?: string;\n /** Site tooltip MDX component name (e.g. \"Term\") to expose as a toolbar button. */\n termComponent?: string;\n /**\n * Image fields: shrink and name a chosen file (the host knows the slug and the\n * size rules) and hand back { path, blob, previewUrl?, width?, height? }. The\n * field's value becomes `path`; the blob rides along in the submission. Without\n * this, image fields are plain text paths.\n */\n onPickImage?: PickImage;\n /** Editor toolbar Image button: upload a picture for the body and return its path + preview URL. */\n onUploadImage?: MarkdownEditorProps[\"onUploadImage\"];\n /** Paths of not-yet-committed pictures → object URLs, so the Preview tab shows them. */\n previewSrc?: MarkdownEditorProps[\"previewSrc\"];\n /**\n * Put Cancel/Save in a bar that the host can pin to the bottom of the page\n * (`.realiiz-form__bar`; the shell makes it sticky). The bar also reports\n * \"Unsaved changes\" / \"No changes yet\", or `status` when the host supplies one.\n */\n stickyBar?: boolean;\n status?: ReactNode;\n /** Extra controls in the bar, before Cancel/Save — e.g. a link to review a pending change. */\n barExtra?: ReactNode;\n /** Rendered after the fields and before the bar — the right place for a quiet destructive action (remove this item). */\n footer?: ReactNode;\n /** Draw a field label that has `.meta({ help })` — pass the site's tooltip component so labels explain themselves. */\n renderLabel?: LabelRenderer;\n /**\n * Fill `target` from `source` while the person types, until they edit `target`\n * themselves — e.g. { source: \"title\", target: \"slug\" } for a web address.\n * Only kicks in when `target` started empty (a new item), never on an existing one.\n */\n derive?: { source: string; target: string; transform?: (value: string) => string };\n /**\n * Warn before leaving with unsaved edits: the browser's own prompt on close/reload,\n * and a confirm on in-app link clicks (which never fire beforeunload). Default true.\n */\n guardUnsaved?: boolean;\n}\n\nconst LEAVE_MESSAGE = \"You have unsaved changes. Leave this page and lose them?\";\n\n/** \"Hello, World! 2026\" → \"hello-world-2026\" — the same rule the blog's slug regex enforces. */\nexport function slugify(s: string): string {\n return s\n .normalize(\"NFKD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n\ntype SafeParse = { success: true; data: unknown } | { success: false; error: { issues: Parameters<typeof mapIssues>[0] } };\n\nexport function ContentForm({ entry, initialValues = {}, initialBody = \"\", onSubmit, onCancel, submitLabel = \"Save\", className, showBody = true, bodyLabel = \"Content\", renderPreview, previewClassName, termComponent, onPickImage, onUploadImage, previewSrc, stickyBar = false, status, barExtra, footer, renderLabel, derive, guardUnsaved = true }: ContentFormProps) {\n const formId = useId();\n const specs = useMemo(() => walkSchema(entry.schema, entry), [entry]);\n const visible = useMemo(() => specs.filter((s) => s.role !== \"hidden\" && s.role !== \"body\"), [specs]);\n const bodySpec = specs.find((s) => s.role === \"body\");\n // Main section first, then each registry group in its own fieldset, fields in the group's order.\n const sections = useMemo(() => {\n const groups = entry.groups ?? [];\n const grouped = new Set(groups.flatMap((g) => g.fields));\n const byName = new Map(visible.map((s) => [s.name, s]));\n const main = { label: entry.singular ?? entry.label, fields: visible.filter((s) => !grouped.has(s.name)) };\n const rest = groups\n .map((g) => ({ label: g.label, fields: g.fields.map((n) => byName.get(n)).filter((s): s is FieldSpec => Boolean(s)) }))\n .filter((g) => g.fields.length > 0);\n return [main, ...rest];\n }, [visible, entry.groups, entry.label, entry.singular]);\n\n const initialState = useMemo<FormState>(() => Object.fromEntries(specs.map((s) => [s.name, toControl(s, initialValues[s.name])])), [specs, initialValues]);\n const [state, setState] = useState<FormState>(initialState);\n // Derivation runs only while the target is untouched AND started empty (a new item).\n const [deriving, setDeriving] = useState(() => Boolean(derive && !initialState[derive.target]));\n const update = (name: string, v: ControlValue) =>\n setState((st) => {\n const next = { ...st, [name]: v };\n if (derive && deriving && name === derive.source && typeof v === \"string\") {\n next[derive.target] = (derive.transform ?? slugify)(v);\n }\n return next;\n });\n const onFieldChange = (name: string, v: ControlValue) => {\n if (derive && deriving && name === derive.target) setDeriving(false);\n update(name, v);\n };\n const [body, setBody] = useState(initialBody);\n const pictures = useImages();\n const pickImage = onPickImage\n ? (field: string) => async (file: File) => {\n const r = await onPickImage(field, file);\n pictures.keep(field, r, typeof state[field] === \"string\" ? (state[field] as string) : \"\");\n onFieldChange(field, r.path);\n }\n : undefined;\n const removeImage = (field: string) => () => {\n const previous = pictures.remove(field);\n onFieldChange(field, previous ?? \"\");\n };\n const dirty = body !== initialBody || specs.some((s) => !sameValue(state[s.name], initialState[s.name]));\n const [issues, setIssues] = useState<FieldIssue[]>([]);\n const [attempted, setAttempted] = useState(false);\n const [submitting, setSubmitting] = useState(false);\n const [options, setOptions] = useState<Record<string, string[] | \"loading\">>({});\n\n // Hidden fields (and any initial key with no spec) ride through untouched.\n const hiddenValues = useMemo(() => {\n const shown = new Set(visible.map((s) => s.name));\n if (bodySpec) shown.add(bodySpec.name);\n return Object.fromEntries(Object.entries(initialValues).filter(([k]) => !shown.has(k)));\n }, [initialValues, visible, bodySpec]);\n\n // Resolve function option sources once, on mount.\n useEffect(() => {\n let live = true;\n for (const s of visible) {\n if (typeof s.options !== \"function\") continue;\n setOptions((o) => ({ ...o, [s.name]: \"loading\" }));\n Promise.resolve(s.options()).then((list) => {\n if (live) setOptions((o) => ({ ...o, [s.name]: list }));\n });\n }\n return () => {\n live = false;\n };\n }, [visible]);\n\n // Leaving with edits: native prompt for close/reload, a confirm for same-app links (client routers skip beforeunload).\n const leaving = useRef(false);\n useEffect(() => {\n if (!guardUnsaved || !dirty || submitting) return;\n const onUnload = (e: BeforeUnloadEvent) => { if (!leaving.current) { e.preventDefault(); e.returnValue = LEAVE_MESSAGE; } };\n const onClick = (e: MouseEvent) => {\n const a = (e.target as HTMLElement | null)?.closest?.(\"a[href]\") as HTMLAnchorElement | null;\n if (!a || a.target === \"_blank\" || e.defaultPrevented || e.metaKey || e.ctrlKey) return;\n if (a.origin !== window.location.origin) return;\n if (!window.confirm(LEAVE_MESSAGE)) { e.preventDefault(); e.stopPropagation(); }\n else leaving.current = true;\n };\n window.addEventListener(\"beforeunload\", onUnload);\n document.addEventListener(\"click\", onClick, true);\n return () => { window.removeEventListener(\"beforeunload\", onUnload); document.removeEventListener(\"click\", onClick, true); };\n }, [guardUnsaved, dirty, submitting]);\n\n const validate = useCallback((): SafeParse => {\n const frontmatter = toFrontmatter(specs, state, hiddenValues);\n const result = (entry.schema as { safeParse: (v: unknown) => SafeParse }).safeParse(frontmatter);\n setIssues(result.success ? [] : mapIssues(result.error.issues, specs));\n return result;\n }, [entry.schema, specs, state, hiddenValues]);\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault();\n if (submitting) return;\n setAttempted(true);\n const result = validate();\n if (!result.success) return;\n setSubmitting(true);\n try {\n await onSubmit({ frontmatter: result.data as Record<string, unknown>, body, images: pictures.toSubmission() });\n } finally {\n setSubmitting(false);\n }\n };\n\n const { byField, formLevel } = groupIssues(issues);\n const optionsFor = (s: FieldSpec) => options[s.name] ?? (Array.isArray(s.options) ? s.options : undefined);\n\n return (\n <form className={[\"realiiz-form\", className].filter(Boolean).join(\" \")} onSubmit={handleSubmit} noValidate data-realiiz-content-form={entry.id}>\n <style>{FORM_CSS}</style>\n\n {formLevel.length > 0 && (\n <div className=\"realiiz-form__alert\" role=\"alert\">\n <strong>This can't be saved yet.</strong>\n <ul>{formLevel.map((i, n) => <li key={n}>{i.message}</li>)}</ul>\n </div>\n )}\n\n {sections.map((sec) => (\n <fieldset key={sec.label}>\n <legend>{sec.label}</legend>\n {sec.fields.map((s) => (\n <Field key={s.name} formId={formId} spec={s} value={state[s.name]} issues={byField.get(s.name) ?? []}\n options={optionsFor(s)}\n renderLabel={renderLabel}\n picked={pictures.images[s.name]}\n onPickImage={pickImage?.(s.name)}\n onRemoveImage={removeImage(s.name)}\n onChange={(v: ControlValue) => onFieldChange(s.name, v)}\n onBlur={() => { if (attempted) validate(); }} />\n ))}\n </fieldset>\n ))}\n\n {(showBody || bodySpec) && (\n <fieldset>\n <legend>{bodySpec?.label ?? bodyLabel}</legend>\n {/* The legend already names this section; the label stays for assistive tech only. */}\n <label className=\"realiiz-form__label realiiz-sr-only\" htmlFor={`${formId}-body`}>{bodySpec?.label ?? bodyLabel}</label>\n <MarkdownEditor\n id={`${formId}-body`}\n value={body}\n onChange={setBody}\n placeholder={bodySpec?.placeholder ?? \"Write in Markdown. Headings with ##, links as [text](url).\"}\n renderPreview={renderPreview}\n previewClassName={previewClassName}\n termComponent={termComponent}\n onUploadImage={onUploadImage}\n previewSrc={previewSrc}\n />\n </fieldset>\n )}\n\n {/* Sole child of its own box: a server-created element dropped straight into this children array trips React's key check. */}\n {footer && <div className=\"realiiz-form__footer\">{footer}</div>}\n\n <div className={stickyBar ? \"realiiz-form__bar\" : \"realiiz-form__actions\"} data-dirty={dirty || undefined}>\n {stickyBar && (\n <span className=\"realiiz-form__status\" role=\"status\">\n {status ?? (dirty ? \"Unsaved changes\" : \"No changes yet\")}\n </span>\n )}\n {stickyBar && barExtra}\n {onCancel && <button type=\"button\" className=\"realiiz-form__button\" onClick={onCancel}>Cancel</button>}\n <button type=\"submit\" className=\"realiiz-form__button realiiz-form__button--primary\" disabled={submitting}>\n {submitting ? `${submitLabel}…` : submitLabel}\n </button>\n </div>\n </form>\n );\n}\n\nfunction sameValue(a: ControlValue | undefined, b: ControlValue | undefined): boolean {\n if (Array.isArray(a) && Array.isArray(b)) return a.length === b.length && a.every((v, i) => v === b[i]);\n return a === b;\n}\n"]}