@arbidocs/blocks 0.3.142 → 0.3.143

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 +0,0 @@
1
- {"version":3,"sources":["../src/theme/tokens.ts","../src/theme/fontPairings.ts","../src/theme/store.ts","../src/lib/format.ts","../src/theme/ThemeEditor.tsx","../src/lib/testid.ts","../src/components/SectionHeading.tsx","../src/components/assetResolver.tsx","../src/components/BlockImage.tsx","../src/components/Hero.tsx","../src/components/blockLink.tsx","../src/components/FeatureGrid.tsx","../src/components/Testimonial.tsx","../src/components/CTABanner.tsx","../src/components/LogoCloud.tsx","../src/components/FAQ.tsx","../src/components/RichTextBlock.tsx","../src/components/Callout.tsx","../src/components/AvatarBlock.tsx","../src/components/Navbar.tsx","../src/components/Footer.tsx","../src/components/ListBlock.tsx","../src/components/Columns.tsx","../src/components/Spacer.tsx","../src/components/Container.tsx","../src/components/PricingTable.tsx","../src/components/Tabs.tsx","../src/components/Accordion.tsx","../src/components/Gallery.tsx","../src/components/VideoEmbed.tsx","../src/components/ContactForm.tsx","../src/components/Banner.tsx","../src/components/MediaText.tsx","../src/components/TeamGrid.tsx","../src/components/Steps.tsx","../src/components/TestimonialGrid.tsx"],"names":["tid","jsxs","jsx","cn","Card","TONE_SURFACE","Button","ArrowRight","Avatar","AvatarImage","AvatarFallback","SIZE","Check","useState","ChevronDown","COLS","ASPECT","Fragment","Quote"],"mappings":"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","file":"chunk-ETIYX2MO.js","sourcesContent":["/**\n * The theme-token model. Firm-agnostic: the token *catalog*, default values and\n * presets are supplied by the consuming app (via {@link createThemeStore}); this\n * module owns the shared types and the logic for writing tokens onto the live\n * document.\n *\n * There are two emit models, selected per-app by {@link ThemeEmitMode}:\n *\n * - `'flat'` (default): each colour key is written as an inline `--color-<key>`\n * custom property on `<html>`, plus `--font-*` / `--radius`. Inline styles\n * override the compiled `@theme` defaults, so an edit previews live across the\n * whole app (and the @arbidocs AI kit) and reverts cleanly. Apps whose CSS sets\n * `--color-*` HEX directly rely on this.\n *\n * - `'cssVars'`: each colour key is written as a raw\n * HSL-triplet custom property (`--<key>: <h s l>`) into an injected\n * `<style id=\"arbi-theme-vars\">` appended to `<head>`. The monolith's source\n * of truth is HSL triplets wrapped as `hsl(var(--x))`, with a real `.dark`\n * variant; writing resolved hex inline would pin the colour and defeat both\n * the indirection and the dark-class swap. The injected sheet is *unlayered*,\n * so it wins over the monolith's `@layer base` `colors.css` at equal\n * specificity, and a `:root { light } / :root.dark { dark }` structure keeps\n * the dark cascade alive.\n */\n\nexport interface ColorToken {\n /** Key without the `--color-` prefix, e.g. \"primary\" → `--color-primary`. */\n key: string\n label: string\n /** Grouping id for the panel layout (e.g. \"shadcn\" | \"brand\" | \"ai\"). */\n group: string\n}\n\nexport interface ThemeFonts {\n display: string\n sans: string\n}\n\nexport interface ThemeTokens {\n /** Colour values keyed by token key (hex). */\n colors: Record<string, string>\n fonts: ThemeFonts\n /** Base radius in rem. */\n radius: number\n}\n\nexport interface ThemePreset {\n id: string\n label: string\n tokens: ThemeTokens\n}\n\n/** How a theme is written onto the document. See the module doc for the models. */\nexport type ThemeEmitMode = 'flat' | 'cssVars'\n\nexport interface ApplyThemeOptions {\n /** Emit model. Defaults to `'flat'`. */\n mode?: ThemeEmitMode\n /**\n * `cssVars` mode only: dark-variant colour values keyed by token key. Emitted\n * under `:root.dark`. When omitted, only `:root` is emitted — note that an\n * overridden light token then also applies in dark (the injected `:root` is\n * unlayered and beats the app's own `.dark` rules), so a firm with a dark mode\n * MUST supply this for every editable token to keep dark mode intact.\n */\n dark?: Record<string, string>\n /** `flat` mode only: target element. Defaults to `document.documentElement`. */\n root?: HTMLElement\n}\n\n/** Id of the injected `<style>` that carries the `cssVars`-mode custom properties. */\nexport const THEME_STYLE_ID = 'arbi-theme-vars'\n\nconst TRIPLET_RE = /^-?\\d+(?:\\.\\d+)?\\s+-?\\d+(?:\\.\\d+)?%\\s+-?\\d+(?:\\.\\d+)?%$/\n\nfunction parseRgb(color: string): { r: number; g: number; b: number } | null {\n if (color.startsWith('#')) {\n let hex = color.slice(1)\n if (hex.length === 3) {\n hex = hex\n .split('')\n .map((ch) => ch + ch)\n .join('')\n }\n if (hex.length === 6 && /^[0-9a-fA-F]{6}$/.test(hex)) {\n return {\n r: parseInt(hex.slice(0, 2), 16),\n g: parseInt(hex.slice(2, 4), 16),\n b: parseInt(hex.slice(4, 6), 16),\n }\n }\n return null\n }\n const m = color.match(/^rgba?\\(\\s*([\\d.]+)[\\s,]+([\\d.]+)[\\s,]+([\\d.]+)/i)\n if (m) return { r: Number(m[1]), g: Number(m[2]), b: Number(m[3]) }\n return null\n}\n\nfunction rgbToHslTriplet(r: number, g: number, b: number): string {\n const rn = r / 255\n const gn = g / 255\n const bn = b / 255\n const max = Math.max(rn, gn, bn)\n const min = Math.min(rn, gn, bn)\n const l = (max + min) / 2\n const d = max - min\n let h = 0\n let s = 0\n if (d !== 0) {\n s = d / (1 - Math.abs(2 * l - 1))\n switch (max) {\n case rn:\n h = 60 * (((gn - bn) / d) % 6)\n break\n case gn:\n h = 60 * ((bn - rn) / d + 2)\n break\n default:\n h = 60 * ((rn - gn) / d + 4)\n break\n }\n }\n if (h < 0) h += 360\n return `${Math.round(h)} ${Math.round(s * 100)}% ${Math.round(l * 100)}%`\n}\n\n/**\n * Convert a colour to the monolith's `H S% L%` HSL-triplet format.\n *\n * Handles `#rgb` / `#rrggbb`, `rgb()` / `rgba()`, and passes an existing triplet\n * through untouched (so a firm can seed exact `colors.css` triplets for a\n * byte-identical no-op). Values it cannot parse — notably `oklch(...)`, which the\n * status tokens use — are returned unchanged so they remain usable as a raw\n * custom-property value; converting those cleanly is out of scope.\n */\nexport function toHslTriplet(color: string): string {\n const c = color.trim()\n if (TRIPLET_RE.test(c)) return c\n const rgb = parseRgb(c)\n if (!rgb) return c\n return rgbToHslTriplet(rgb.r, rgb.g, rgb.b)\n}\n\nfunction renderTripletBlock(colors: Record<string, string>): string {\n return Object.entries(colors)\n .map(([key, value]) => ` --${key}: ${toHslTriplet(value)};`)\n .join('\\n')\n}\n\nfunction emitCssVars(theme: ThemeTokens, dark?: Record<string, string>): void {\n if (typeof document === 'undefined') return\n const meta = [\n ` --font-display: ${theme.fonts.display};`,\n ` --font-sans: ${theme.fonts.sans};`,\n ` --radius: ${theme.radius}rem;`,\n ].join('\\n')\n let css = `:root {\\n${renderTripletBlock(theme.colors)}\\n${meta}\\n}`\n if (dark) {\n css += `\\n:root.dark {\\n${renderTripletBlock(dark)}\\n}`\n }\n let style = document.getElementById(THEME_STYLE_ID) as HTMLStyleElement | null\n if (!style) {\n style = document.createElement('style')\n style.id = THEME_STYLE_ID\n document.head.appendChild(style)\n }\n style.textContent = css\n}\n\nfunction removeCssVars(): void {\n if (typeof document === 'undefined') return\n document.getElementById(THEME_STYLE_ID)?.remove()\n}\n\nfunction normalizeOptions(optionsOrRoot: ApplyThemeOptions | HTMLElement): ApplyThemeOptions {\n if (typeof HTMLElement !== 'undefined' && optionsOrRoot instanceof HTMLElement) {\n return { root: optionsOrRoot }\n }\n return optionsOrRoot as ApplyThemeOptions\n}\n\n/**\n * Write a theme onto the live document.\n *\n * In `flat` mode (default) writes inline `--color-<key>` / `--font-*` / `--radius`\n * on `document.documentElement` (or a supplied root). In `cssVars` mode writes\n * raw HSL-triplet vars into an injected `<style#arbi-theme-vars>` (see the module\n * doc). The legacy `applyThemeVars(theme, rootElement)` call form still works.\n */\nexport function applyThemeVars(\n theme: ThemeTokens,\n optionsOrRoot: ApplyThemeOptions | HTMLElement = {}\n): void {\n const { mode = 'flat', dark, root = document.documentElement } = normalizeOptions(optionsOrRoot)\n\n if (mode === 'cssVars') {\n emitCssVars(theme, dark)\n return\n }\n\n for (const [key, value] of Object.entries(theme.colors)) {\n root.style.setProperty(`--color-${key}`, value)\n }\n root.style.setProperty('--font-display', theme.fonts.display)\n root.style.setProperty('--font-sans', theme.fonts.sans)\n root.style.setProperty('--radius', `${theme.radius}rem`)\n}\n\n/**\n * Set ONLY the typography vars, as inline styles on the root element.\n *\n * Typography is often chosen independently of colour — an app may let a reader\n * pick a typeface while its palette is owned elsewhere. Writing the two vars\n * inline (rather than through `applyThemeVars`) keeps this orthogonal in two\n * ways: it touches no colour or radius token, and an inline style outranks any\n * selector, so a font choice survives a `cssVars`-mode theme that emits its own\n * `:root` block (the ARBI studio's theme editor does exactly that).\n */\nexport function applyFontVars(\n fonts: ThemeFonts,\n root: HTMLElement = document.documentElement\n): void {\n root.style.setProperty('--font-display', fonts.display)\n root.style.setProperty('--font-sans', fonts.sans)\n}\n\n/** Undo {@link applyFontVars}, reverting to the stylesheet's own font tokens. */\nexport function clearFontVars(root: HTMLElement = document.documentElement): void {\n root.style.removeProperty('--font-display')\n root.style.removeProperty('--font-sans')\n}\n\n/**\n * Remove a theme's overrides, reverting to the stylesheet defaults.\n *\n * In `flat` mode removes the inline overrides for the theme's keys. In `cssVars`\n * mode removes the injected `<style#arbi-theme-vars>` in full (restoring the\n * app's own `colors.css` exactly).\n */\nexport function clearThemeVars(\n theme: ThemeTokens,\n optionsOrRoot: ApplyThemeOptions | HTMLElement = {}\n): void {\n const { mode = 'flat', root = document.documentElement } = normalizeOptions(optionsOrRoot)\n\n if (mode === 'cssVars') {\n removeCssVars()\n return\n }\n\n for (const key of Object.keys(theme.colors)) {\n root.style.removeProperty(`--color-${key}`)\n }\n root.style.removeProperty('--font-display')\n root.style.removeProperty('--font-sans')\n root.style.removeProperty('--radius')\n}\n","/**\n * Curated typography pairings — the choice a user actually makes.\n *\n * A pairing is a display face + a body face that are known to sit well together,\n * so picking typography means picking a *look*, not authoring two CSS font\n * stacks. The raw stacks remain editable for power users.\n *\n * DATA ONLY. This module names families; it never loads them, so the kit takes no\n * font dependency. Web fonts are self-hosted per app (`@fontsource-variable/*`\n * imported from the app's entry or stylesheet); `fontPackages()` reports exactly\n * which packages a set of pairings needs. A pairing whose family an app has not\n * imported does not error — it falls back down its own stack — so an app that\n * offers a pairing must also ship its fonts.\n */\n\nexport interface FontPairing {\n id: string\n /** Shown in the picker, e.g. \"Newsreader / Inter\". */\n label: string\n /** One line on the character of the pairing. */\n description: string\n /** Font stack for headings (`--font-display`). */\n display: string\n /** Font stack for body copy (`--font-sans`). */\n sans: string\n /**\n * The npm packages an app must install + import to actually render this\n * pairing, e.g. `['@fontsource-variable/inter']`. Empty when the pairing uses\n * only system faces.\n */\n packages: string[]\n}\n\n/** Fallback tails, so a missing web font degrades to something sane. */\nconst SERIF_TAIL = 'ui-serif, Georgia, serif'\nconst SANS_TAIL = 'ui-sans-serif, system-ui, sans-serif'\n\n/**\n * The shipped catalog. Every entry uses variable fonts (one file per family)\n * rather than per-weight static files.\n */\nexport const FONT_PAIRINGS: FontPairing[] = [\n {\n id: 'system',\n label: 'System',\n description: 'The reader’s own interface font. Loads nothing.',\n display: SANS_TAIL,\n sans: SANS_TAIL,\n packages: [],\n },\n {\n id: 'newsreader-inter',\n label: 'Newsreader / Inter',\n description: 'Editorial serif headlines over a neutral, highly legible body.',\n display: `\"Newsreader Variable\", ${SERIF_TAIL}`,\n sans: `\"Inter Variable\", ${SANS_TAIL}`,\n packages: ['@fontsource-variable/newsreader', '@fontsource-variable/inter'],\n },\n {\n id: 'fraunces-inter',\n label: 'Fraunces / Inter',\n description: 'Characterful, slightly literary display with a quiet body.',\n display: `\"Fraunces Variable\", ${SERIF_TAIL}`,\n sans: `\"Inter Variable\", ${SANS_TAIL}`,\n packages: ['@fontsource-variable/fraunces', '@fontsource-variable/inter'],\n },\n {\n id: 'source-serif-inter',\n label: 'Source Serif / Inter',\n description: 'A workhorse serif for headings; sober and institutional.',\n display: `\"Source Serif 4 Variable\", ${SERIF_TAIL}`,\n sans: `\"Inter Variable\", ${SANS_TAIL}`,\n packages: ['@fontsource-variable/source-serif-4', '@fontsource-variable/inter'],\n },\n {\n id: 'inter',\n label: 'Inter',\n description: 'One neutral grotesque throughout. Product-like, no contrast.',\n display: `\"Inter Variable\", ${SANS_TAIL}`,\n sans: `\"Inter Variable\", ${SANS_TAIL}`,\n packages: ['@fontsource-variable/inter'],\n },\n {\n id: 'montserrat-nunito',\n label: 'Montserrat / Nunito',\n description: 'Geometric headings over a rounded body. ARBI’s historic look.',\n display: `\"Montserrat Variable\", ${SANS_TAIL}`,\n sans: `\"Nunito Variable\", ${SANS_TAIL}`,\n packages: ['@fontsource-variable/montserrat', '@fontsource-variable/nunito'],\n },\n]\n\n/** Look a pairing up by id. Returns undefined for an unknown id. */\nexport function getFontPairing(id: string): FontPairing | undefined {\n return FONT_PAIRINGS.find((p) => p.id === id)\n}\n\n/**\n * The pairing whose stacks match `fonts`, or undefined when the stacks have been\n * hand-edited away from every preset. Lets a picker show \"Custom\" honestly.\n */\nexport function matchFontPairing(fonts: {\n display: string\n sans: string\n}): FontPairing | undefined {\n return FONT_PAIRINGS.find((p) => p.display === fonts.display && p.sans === fonts.sans)\n}\n\n/** Every npm package needed to render the given pairings (deduped). */\nexport function fontPackages(pairings: FontPairing[] = FONT_PAIRINGS): string[] {\n return [...new Set(pairings.flatMap((p) => p.packages))].sort()\n}\n","/**\n * The shared theme store factory. A firm calls {@link createThemeStore} once\n * with its token catalog, default values and presets; the returned bundle (a\n * zustand hook + metadata) is the single source of truth consumed by every\n * theme surface (the back-office builder panel and the studio drawer), so the\n * token model, presets and apply logic live in exactly one place.\n */\nimport { create, type UseBoundStore, type StoreApi } from 'zustand'\nimport { persist } from 'zustand/middleware'\nimport {\n applyThemeVars,\n type ColorToken,\n type ThemeEmitMode,\n type ThemeFonts,\n type ThemePreset,\n type ThemeTokens,\n} from './tokens'\nimport { getFontPairing } from './fontPairings'\n\nexport interface ThemeState extends ThemeTokens {\n activePresetId: string | null\n setColor: (key: string, value: string) => void\n setFont: (which: keyof ThemeFonts, value: string) => void\n /** Apply a curated pairing, setting the display and body faces together. */\n setFontPairing: (pairingId: string) => void\n setRadius: (radius: number) => void\n applyPreset: (presetId: string) => void\n reset: () => void\n /** Snapshot of the editable tokens (for export / live apply). */\n snapshot: () => ThemeTokens\n}\n\nexport interface ThemeStoreConfig {\n /** The editable token catalog (keys + labels + groups). */\n tokens: ColorToken[]\n /** Group id → heading, for the grouped panel layout. */\n groupLabels: Record<string, string>\n /** Shipped defaults (the firm's brand values). */\n defaultTheme: ThemeTokens\n /** Starting points the user can apply then fine-tune. */\n presets: ThemePreset[]\n /** localStorage key for persistence (namespaced per firm). */\n storageKey: string\n /**\n * How edits are written onto the document. Defaults to `'flat'` (inline\n * `--color-*`). `'cssVars'` emits raw HSL-triplet vars into an injected\n * `<style>` so an app's own `hsl(var(--x))` indirection + `.dark` variant\n * survive. See {@link applyThemeVars}.\n */\n mode?: ThemeEmitMode\n /**\n * `cssVars` mode only: the dark-variant colour values keyed by token key,\n * emitted under `:root.dark`. Required (per editable token) for any firm with a\n * dark mode, otherwise a light-token override leaks into dark.\n */\n darkColors?: Record<string, string>\n}\n\nexport interface ThemeBundle extends ThemeStoreConfig {\n useStore: UseBoundStore<StoreApi<ThemeState>>\n}\n\n/** Build a firm-branded theme store bundle. */\nexport function createThemeStore(config: ThemeStoreConfig): ThemeBundle {\n const { defaultTheme, presets, storageKey } = config\n\n const useStore = create<ThemeState>()(\n persist(\n (set, get) => ({\n ...defaultTheme,\n activePresetId: presets[0]?.id ?? null,\n\n setColor: (key, value) =>\n set((s) => ({ colors: { ...s.colors, [key]: value }, activePresetId: null })),\n\n setFont: (which, value) =>\n set((s) => ({ fonts: { ...s.fonts, [which]: value }, activePresetId: null })),\n\n // A pairing sets both faces together — that is the whole point of it.\n // Unknown ids are ignored rather than clearing the typography.\n setFontPairing: (pairingId) => {\n const pairing = getFontPairing(pairingId)\n if (!pairing) return\n set({ fonts: { display: pairing.display, sans: pairing.sans } })\n },\n\n setRadius: (radius) => set({ radius, activePresetId: null }),\n\n applyPreset: (presetId) => {\n const preset = presets.find((p) => p.id === presetId)\n if (!preset) return\n set({\n colors: { ...preset.tokens.colors },\n fonts: { ...preset.tokens.fonts },\n radius: preset.tokens.radius,\n activePresetId: presetId,\n })\n },\n\n reset: () =>\n set({\n colors: { ...defaultTheme.colors },\n fonts: { ...defaultTheme.fonts },\n radius: defaultTheme.radius,\n activePresetId: presets[0]?.id ?? null,\n }),\n\n snapshot: () => {\n const { colors, fonts, radius } = get()\n return { colors, fonts, radius }\n },\n }),\n { name: storageKey }\n )\n )\n\n return { ...config, useStore }\n}\n\n/** Apply a bundle's current store to the live document, honouring its emit mode. */\nexport function applyStoredTheme(bundle: ThemeBundle): void {\n const { colors, fonts, radius } = bundle.useStore.getState()\n applyThemeVars({ colors, fonts, radius }, { mode: bundle.mode, dark: bundle.darkColors })\n}\n","/**\n * Firm-app formatting helpers — currency, initials, dates, durations and\n * percentages. UK-oriented defaults (en-GB / GBP / \"d MMM yyyy\") suit an English\n * law firm; nothing here is firm-branded, so every firm app shares them.\n *\n * Dependency-free on purpose (uses the platform `Intl` APIs) so the package\n * stays light and needs no date library.\n */\n\n/** Format a number as GBP, e.g. £1,240,000 or £12.4k depending on `compact`. */\nexport function gbp(value: number, compact = false): string {\n return new Intl.NumberFormat('en-GB', {\n style: 'currency',\n currency: 'GBP',\n maximumFractionDigits: compact && Math.abs(value) >= 1000 ? 1 : 0,\n notation: compact ? 'compact' : 'standard',\n }).format(value)\n}\n\n/** Initials from a person's name, e.g. \"Amara N. Okafor\" -> \"AO\". */\nexport function initials(name: string): string {\n const parts = name.trim().split(/\\s+/)\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase()\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase()\n}\n\n/**\n * Parse an ISO string. Date-only strings (\"2026-03-12\") are read as LOCAL\n * midnight (matching date-fns `parseISO`), not UTC, so day-level maths and\n * formatting don't drift across time zones.\n */\nfunction parseIso(iso: string): Date {\n const dateOnly = /^\\d{4}-\\d{2}-\\d{2}$/.test(iso)\n const d = new Date(dateOnly ? `${iso}T00:00:00` : iso)\n if (Number.isNaN(d.getTime())) throw new Error(`Invalid ISO date: ${iso}`)\n return d\n}\n\n/** \"12 Mar 2026\" */\nexport function fmtDate(iso: string): string {\n try {\n return new Intl.DateTimeFormat('en-GB', {\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n }).format(parseIso(iso))\n } catch {\n return iso\n }\n}\n\n/** \"12 Mar 2026, 14:30\" */\nexport function fmtDateTime(iso: string): string {\n try {\n return new Intl.DateTimeFormat('en-GB', {\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n }).format(parseIso(iso))\n } catch {\n return iso\n }\n}\n\nconst RELATIVE_UNITS: Array<[Intl.RelativeTimeFormatUnit, number]> = [\n ['year', 31_536_000],\n ['month', 2_592_000],\n ['week', 604_800],\n ['day', 86_400],\n ['hour', 3_600],\n ['minute', 60],\n ['second', 1],\n]\n\n/** \"3 days ago\" / \"in 2 hours\" — largest whole unit, like date-fns strict. */\nexport function fromNow(iso: string, from: Date = new Date()): string {\n try {\n const diffSeconds = (parseIso(iso).getTime() - from.getTime()) / 1000\n const abs = Math.abs(diffSeconds)\n const rtf = new Intl.RelativeTimeFormat('en-GB', { numeric: 'always' })\n for (const [unit, secs] of RELATIVE_UNITS) {\n if (abs >= secs || unit === 'second') {\n const value = Math.round(diffSeconds / secs)\n return rtf.format(value, unit)\n }\n }\n return rtf.format(0, 'second')\n } catch {\n return iso\n }\n}\n\n/** Signed day count to a date from a reference day. Negative = overdue. */\nexport function daysUntil(iso: string, from: Date = new Date()): number {\n try {\n const target = parseIso(iso)\n // Compare calendar days at local midnight, ignoring time-of-day.\n const a = Date.UTC(target.getFullYear(), target.getMonth(), target.getDate())\n const b = Date.UTC(from.getFullYear(), from.getMonth(), from.getDate())\n return Math.round((a - b) / 86_400_000)\n } catch {\n return 0\n }\n}\n\n/** Compact hours, e.g. 12.5h */\nexport function hrs(n: number): string {\n return `${n.toFixed(1)}h`\n}\n\n/** Percentage with no decimals, e.g. 82% */\nexport function pct(n: number): string {\n return `${Math.round(n)}%`\n}\n\n/**\n * Page references for a set of cited pages: \"p 2\", \"pp 2, 5\", \"pp 2–4, 9\".\n *\n * Pages, not passage counts — the page is what a reader turns to; how many\n * passages sit inside it is detail they did not ask for. Consecutive pages\n * collapse into a range, the same way a contiguous run of passages collapses\n * into a single mark in the viewer.\n */\nexport function formatPageRefs(pages: number[]): string {\n const sorted = [...new Set(pages)].sort((a, b) => a - b)\n if (sorted.length === 0) return ''\n const parts: string[] = []\n let start = sorted[0]\n let end = sorted[0]\n for (const page of sorted.slice(1)) {\n if (page === end + 1) {\n end = page\n continue\n }\n parts.push(start === end ? `${start}` : `${start}–${end}`)\n start = end = page\n }\n parts.push(start === end ? `${start}` : `${start}–${end}`)\n return `${sorted.length === 1 ? 'p' : 'pp'} ${parts.join(', ')}`\n}\n","/**\n * The one theme editor, shared by every surface. `variant=\"panel\"` is the roomy\n * back-office layout (grouped token cards + a live preview); `variant=\"drawer\"`\n * is the compact slide-over beside the studio canvas. Both drive the same\n * {@link ThemeBundle} store, so there is a single token model, preset list and\n * apply path. Firm-agnostic: chrome uses only universal surface tokens and the\n * preview renders the theme's own swatches, so it needs no brand-specific\n * component variants.\n */\nimport { useEffect, useState } from 'react'\nimport { RotateCcw, Palette, Save, Check } from 'lucide-react'\nimport { Card, CardHeader, CardTitle, CardContent, Input } from '@arbidocs/react/ui'\nimport { applyThemeVars } from './tokens'\nimport { FONT_PAIRINGS, matchFontPairing } from './fontPairings'\nimport type { ThemeBundle } from './store'\n\nexport interface ThemeEditorProps {\n /** The firm's theme store bundle (from createThemeStore). */\n bundle: ThemeBundle\n variant?: 'panel' | 'drawer'\n /** Firm identity shown in the panel's live-preview header. */\n preview?: { title: string; subtitle?: string }\n /** Optional persistence side-channel (e.g. save theme to ARBI); returns a \"via\" label. */\n onSave?: () => Promise<string | void>\n /** Stable testid namespace, e.g. \"builder-theme\" | \"studio-theme\". */\n testIdPrefix?: string\n}\n\nexport function ThemeEditor({\n bundle,\n variant = 'panel',\n preview,\n onSave,\n testIdPrefix = 'theme',\n}: ThemeEditorProps) {\n const { useStore, tokens, presets, groupLabels, mode, darkColors } = bundle\n const colors = useStore((s) => s.colors)\n const fonts = useStore((s) => s.fonts)\n const radius = useStore((s) => s.radius)\n const activePresetId = useStore((s) => s.activePresetId)\n const setColor = useStore((s) => s.setColor)\n const setFont = useStore((s) => s.setFont)\n const setFontPairing = useStore((s) => s.setFontPairing)\n const setRadius = useStore((s) => s.setRadius)\n const applyPreset = useStore((s) => s.applyPreset)\n const reset = useStore((s) => s.reset)\n\n const [saving, setSaving] = useState(false)\n const [savedVia, setSavedVia] = useState<string | null>(null)\n\n // Live preview: reflect every token change onto the running app, using the\n // firm's emit mode (flat inline vars, or injected HSL-triplet cssVars).\n useEffect(() => {\n applyThemeVars({ colors, fonts, radius }, { mode, dark: darkColors })\n }, [colors, fonts, radius, mode, darkColors])\n\n const tid = (suffix: string) => `${testIdPrefix}-${suffix}`\n const groups = [...new Set(tokens.map((t) => t.group))]\n\n const save = async () => {\n if (!onSave) return\n setSaving(true)\n const via = await onSave()\n setSavedVia(typeof via === 'string' ? via : 'saved')\n setSaving(false)\n }\n\n // ── Presets row ────────────────────────────────────────────────────────────\n const Presets = (\n <div className=\"flex flex-wrap items-center gap-2\">\n {presets.map((p) => (\n <button\n key={p.id}\n type=\"button\"\n onClick={() => applyPreset(p.id)}\n className={`rounded-full border px-3 py-1 text-xs font-medium transition-colors ${\n activePresetId === p.id\n ? 'border-primary bg-primary text-primary-foreground'\n : 'border-border text-foreground hover:border-primary'\n }`}\n data-testid={tid(`preset-${p.id}`)}\n >\n {p.label}\n </button>\n ))}\n <button\n type=\"button\"\n onClick={reset}\n className=\"ml-auto inline-flex items-center gap-1.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n data-testid={tid('reset')}\n >\n <RotateCcw className=\"size-3\" /> Reset\n </button>\n </div>\n )\n\n // ── A single colour control ─────────────────────────────────────────────────\n // A plain function (not a component) so it inlines into the parent tree: this\n // avoids remounting the inputs on every keystroke (which would drop focus).\n const colorRow = (k: string, label: string) => (\n <div key={k} className=\"flex items-center gap-3\">\n <input\n type=\"color\"\n value={colors[k] ?? '#000000'}\n onChange={(e) => setColor(k, e.target.value)}\n className=\"size-9 shrink-0 cursor-pointer rounded-md border border-border bg-transparent\"\n aria-label={label}\n data-testid={tid(`color-${k}`)}\n />\n <div className=\"min-w-0 flex-1\">\n <span className=\"block text-xs text-muted-foreground\">{label}</span>\n <Input\n value={colors[k] ?? ''}\n onChange={(e) => setColor(k, e.target.value)}\n className=\"bg-card placeholder:text-muted-foreground/70 focus-visible:border-ring/60 focus-visible:ring-2 focus-visible:ring-ring/50 h-7 font-mono text-xs\"\n data-testid={tid(`hex-${k}`)}\n />\n </div>\n </div>\n )\n\n // ── Typography + radius ─────────────────────────────────────────────────────\n // The pairing picker is the primary control; the raw stacks below stay for\n // anyone who needs a face the catalog doesn't carry. Editing a stack by hand\n // drops the selection to \"Custom\" rather than silently mismatching.\n const activePairing = matchFontPairing(fonts)\n const Typography = (\n <div className=\"space-y-4\">\n <div>\n <span className=\"block text-xs text-muted-foreground\">Typeface</span>\n <select\n value={activePairing?.id ?? ''}\n onChange={(e) => setFontPairing(e.target.value)}\n className=\"mt-1 h-8 w-full rounded-md border border-border bg-card px-2 text-xs text-foreground focus-visible:border-ring/60 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50\"\n data-testid={tid('font-pairing')}\n >\n {!activePairing && <option value=\"\">Custom</option>}\n {FONT_PAIRINGS.map((pairing) => (\n <option key={pairing.id} value={pairing.id}>\n {pairing.label}\n </option>\n ))}\n </select>\n <p className=\"mt-1 text-[11px] text-muted-foreground\">\n {activePairing?.description ?? 'Hand-edited font stacks.'}\n </p>\n </div>\n <div>\n <span className=\"block text-xs text-muted-foreground\">Display font stack</span>\n <Input\n value={fonts.display}\n onChange={(e) => setFont('display', e.target.value)}\n className=\"bg-card placeholder:text-muted-foreground/70 focus-visible:border-ring/60 focus-visible:ring-2 focus-visible:ring-ring/50 mt-1 font-mono text-xs\"\n data-testid={tid('font-display')}\n />\n </div>\n <div>\n <span className=\"block text-xs text-muted-foreground\">Body font stack</span>\n <Input\n value={fonts.sans}\n onChange={(e) => setFont('sans', e.target.value)}\n className=\"bg-card placeholder:text-muted-foreground/70 focus-visible:border-ring/60 focus-visible:ring-2 focus-visible:ring-ring/50 mt-1 font-mono text-xs\"\n data-testid={tid('font-sans')}\n />\n </div>\n <div>\n <span className=\"block text-xs text-muted-foreground\">Base radius — {radius}rem</span>\n <input\n type=\"range\"\n min={0}\n max={1.5}\n step={0.125}\n value={radius}\n onChange={(e) => setRadius(Number(e.target.value))}\n className=\"mt-2 w-full accent-[color:var(--color-primary)]\"\n data-testid={tid('radius')}\n />\n </div>\n </div>\n )\n\n // ── Live preview (panel only) — renders the theme's own swatches ────────────\n const Preview = (\n <Card variant=\"elevated\" className=\"rounded-xl\" data-testid={tid('preview')}>\n <CardHeader>\n <CardTitle className=\"text-base\">Live preview</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <div className=\"rounded-[var(--radius)] bg-primary p-4 text-primary-foreground\">\n <p className=\"font-display text-lg font-semibold\">{preview?.title ?? 'Preview'}</p>\n {preview?.subtitle && <p className=\"text-xs opacity-80\">{preview.subtitle}</p>}\n </div>\n <div className=\"grid grid-cols-6 gap-1.5\">\n {tokens.map((t) => (\n <div\n key={t.key}\n title={t.label}\n className=\"aspect-square rounded-md border border-border\"\n style={{ background: `var(--color-${t.key})` }}\n />\n ))}\n </div>\n <div className=\"rounded-[var(--radius)] border border-border bg-[color:var(--color-ai-accent-soft,var(--color-accent))] p-3\">\n <p className=\"text-sm font-medium text-[color:var(--color-ai-accent,var(--color-primary))]\">\n AI action surface\n </p>\n <p className=\"text-xs text-muted-foreground\">Themed by the AI-kit accent tokens.</p>\n </div>\n </CardContent>\n </Card>\n )\n\n const SaveBar = onSave && (\n <div className=\"mt-6 flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => void save()}\n disabled={saving}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-primary px-3 py-2 text-sm font-medium text-primary-foreground hover:opacity-90 disabled:opacity-60\"\n data-testid={tid('save')}\n >\n {savedVia ? <Check className=\"size-4\" /> : <Save className=\"size-4\" />}\n {saving ? 'Saving…' : savedVia ? 'Saved' : 'Save theme'}\n </button>\n {savedVia && (\n <span className=\"text-xs text-muted-foreground\" data-testid={tid('via')}>\n stored via {savedVia}\n </span>\n )}\n </div>\n )\n\n // ── Drawer layout — compact, single column ──────────────────────────────────\n if (variant === 'drawer') {\n return (\n <div className=\"flex h-full flex-col overflow-y-auto bg-card p-5\" data-testid={testIdPrefix}>\n <div className=\"mb-4 flex items-center justify-between\">\n <h2 className=\"font-display text-lg font-semibold text-foreground\">Theme</h2>\n </div>\n {Presets}\n <p className=\"mt-5 mb-2 text-[10px] font-semibold uppercase tracking-[0.14em] text-muted-foreground\">\n Colours\n </p>\n <div className=\"space-y-3\">{tokens.map((t) => colorRow(t.key, t.label))}</div>\n <p className=\"mt-6 mb-2 text-[10px] font-semibold uppercase tracking-[0.14em] text-muted-foreground\">\n Typography &amp; shape\n </p>\n {Typography}\n {SaveBar}\n </div>\n )\n }\n\n // ── Panel layout — grouped cards + live preview ─────────────────────────────\n return (\n <div className=\"grid gap-6 lg:grid-cols-[1fr_320px]\" data-testid={testIdPrefix}>\n <div className=\"space-y-6\">\n <Card variant=\"elevated\" className=\"rounded-xl\">\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <Palette className=\"size-4 text-[color:var(--color-primary)]\" /> Presets\n </CardTitle>\n </CardHeader>\n <CardContent>{Presets}</CardContent>\n </Card>\n\n {groups.map((group) => (\n <Card\n key={group}\n variant=\"elevated\"\n className=\"rounded-xl\"\n data-testid={tid(`group-${group}`)}\n >\n <CardHeader>\n <CardTitle className=\"text-base\">{groupLabels[group] ?? group}</CardTitle>\n </CardHeader>\n <CardContent className=\"grid gap-3 sm:grid-cols-2\">\n {tokens.filter((t) => t.group === group).map((t) => colorRow(t.key, t.label))}\n </CardContent>\n </Card>\n ))}\n\n <Card variant=\"elevated\" className=\"rounded-xl\">\n <CardHeader>\n <CardTitle className=\"text-base\">Typography &amp; shape</CardTitle>\n </CardHeader>\n <CardContent>{Typography}</CardContent>\n </Card>\n {SaveBar}\n </div>\n\n <div className=\"lg:sticky lg:top-4 lg:self-start\">{Preview}</div>\n </div>\n )\n}\n","/**\n * Compose a stable, kebab-case data-testid from parts.\n * Convention: {area}-{element}[-{qualifier}...]\n * tid(\"matters\", \"row\", \"CLM-2026-0042\") -> \"matters-row-clm-2026-0042\"\n * Keeps Playwright selectors predictable across a firm app.\n */\nexport function tid(...parts: Array<string | number | undefined | false>): string {\n return parts\n .filter((p): p is string | number => p !== undefined && p !== false && p !== '')\n .map((p) =>\n String(p)\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n )\n .join('-')\n}\n","import { cn } from '@arbidocs/react/ui'\n\n/** Editorial heading block for marketing sections: eyebrow + title + lead. */\nexport function SectionHeading({\n eyebrow,\n title,\n lead,\n align = 'left',\n className,\n invert,\n eyebrowClassName,\n}: {\n eyebrow?: string\n title: string\n lead?: string\n align?: 'left' | 'center'\n className?: string\n invert?: boolean\n /** Override the eyebrow styling (e.g. a firm brand accent). Default: token classes. */\n eyebrowClassName?: string\n}) {\n return (\n <div className={cn('max-w-3xl', align === 'center' && 'mx-auto text-center', className)}>\n {eyebrow && (\n <p\n className={cn(\n 'mb-3 text-xs font-semibold uppercase tracking-wider',\n eyebrowClassName ?? (invert ? 'text-background/60' : 'text-muted-foreground')\n )}\n >\n {eyebrow}\n </p>\n )}\n <h2\n className={cn(\n 'font-display text-3xl font-semibold tracking-tight text-balance sm:text-4xl',\n invert ? 'text-background' : 'text-foreground'\n )}\n >\n {title}\n </h2>\n {lead && (\n <p\n className={cn(\n 'mt-4 text-lg leading-relaxed',\n invert ? 'text-background/70' : 'text-muted-foreground'\n )}\n >\n {lead}\n </p>\n )}\n </div>\n )\n}\n","/**\n * Asset resolution for the editor canvas — the SDK-free half.\n *\n * An image block's stored `src` is one of three things: a **workspace asset ref**\n * while authoring (an `asset:<docId>` string), a plain URL, or — once published —\n * an inlined `data:` URI (see the studio publish/materialize step). Only inside\n * the authenticated Studio can an asset ref be resolved to displayable bytes (via\n * the thumbnail endpoint).\n *\n * So the resolver is **injected, not imported**. This module knows only that\n * *some* component can turn a `docId` into pixels; the Studio supplies\n * `AssetThumb` from `./assetImage`, which is where the SDK and React Query live.\n * Everywhere else — the pure coverage guard, the unauthenticated public renderer,\n * a marketing site importing `@arbidocs/blocks/site` — the context is empty and\n * `src` renders verbatim. Importing the resolver here instead would drag the SDK\n * into every website block: a dead code path still pins the module graph, because\n * neither kit package declares `sideEffects`.\n *\n * Refs are **explicitly prefixed** (`asset:`) rather than bare ext_ids so the\n * publish walk can distinguish an image source from any other token-like prop\n * (block ids, `\"left\"`, icon names…) with zero false positives.\n */\nimport { createContext, useContext, type ComponentType, type ReactNode } from 'react'\n\n/** Marks a stored image value as a workspace asset ref rather than a URL. */\nexport const ASSET_REF_PREFIX = 'asset:'\n\n/** Wrap a workspace document ext_id as a storable asset ref. */\nexport function asAssetRef(docId: string): string {\n return `${ASSET_REF_PREFIX}${docId}`\n}\n\n/** The workspace document ext_id behind an asset ref (`asset:doc-1` → `doc-1`). */\nexport function assetRefId(src: string): string {\n return src.slice(ASSET_REF_PREFIX.length)\n}\n\n/** What a resolver component receives. `AssetThumb` in `./assetImage` implements it. */\nexport interface AssetRenderProps {\n docId: string\n alt?: string\n className?: string\n testId?: string\n}\n\n/** Renders a workspace asset ext_id as an image. */\nexport type AssetRenderer = ComponentType<AssetRenderProps>\n\n/**\n * The injected resolver, or `null` where asset refs cannot be resolved (the\n * public renderer, tests, any unauthenticated page).\n */\nexport const AssetResolverContext = createContext<AssetRenderer | null>(null)\n\nexport function AssetResolverProvider({\n render,\n children,\n}: {\n /** Typically `AssetThumb` from `./assetImage`. */\n render: AssetRenderer\n children: ReactNode\n}) {\n return <AssetResolverContext.Provider value={render}>{children}</AssetResolverContext.Provider>\n}\n\n/** The active resolver, or `null` when asset refs must render verbatim. */\nexport function useAssetRenderer(): AssetRenderer | null {\n return useContext(AssetResolverContext)\n}\n\n/** True only where a bare asset ext_id can be resolved (the authenticated Studio). */\nexport function useAssetResolverActive(): boolean {\n return useAssetRenderer() !== null\n}\n\n/**\n * Is `src` a workspace asset ref (`asset:<docId>`) rather than an already-\n * renderable URL / `data:` URI? Only prefixed refs need resolution.\n */\nexport function isAssetRef(src: string | undefined): src is string {\n return !!src && src.startsWith(ASSET_REF_PREFIX)\n}\n","import { ImageIcon } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { assetRefId, isAssetRef, useAssetRenderer } from './assetResolver'\n\nexport type BlockImageAspect = '16:9' | '4:3' | '1:1' | '21:9' | '4:5'\nexport type BlockImageRounded = 'none' | 'md' | 'lg' | 'full'\n\nexport interface BlockImageProps {\n src?: string\n alt?: string\n aspect?: BlockImageAspect\n rounded?: BlockImageRounded\n /** Editorial \"photo frame\" treatment: a matte border ring + soft shadow. */\n framed?: boolean\n className?: string\n testId?: string\n}\n\nconst ASPECT: Record<BlockImageAspect, string> = {\n '16:9': 'aspect-video',\n '4:3': 'aspect-[4/3]',\n '1:1': 'aspect-square',\n '21:9': 'aspect-[21/9]',\n '4:5': 'aspect-[4/5]',\n}\n\nconst ROUNDED: Record<BlockImageRounded, string> = {\n none: 'rounded-none',\n md: 'rounded-md',\n lg: 'rounded-xl',\n full: 'rounded-full',\n}\n\n/**\n * Image with a graceful, self-contained fallback: when `src` is empty it renders a\n * token-clean gradient placeholder (no network needed) so the palette always looks\n * good in the editor and in demos. Token-only classes so it themes per firm.\n */\nexport function BlockImage({\n src,\n alt = '',\n aspect = '16:9',\n rounded = 'lg',\n framed,\n className,\n testId,\n}: BlockImageProps) {\n const shape = cn(\n ASPECT[aspect] ?? ASPECT['16:9'],\n ROUNDED[rounded] ?? ROUNDED.lg,\n framed && 'ring-1 ring-border shadow-xl'\n )\n // In the Studio a resolver is injected and an `asset:` ref resolves to its\n // thumbnail; elsewhere there is none, and `src` is already a URL / data-URI\n // that renders verbatim (the publish step inlines refs).\n const AssetRenderer = useAssetRenderer()\n if (AssetRenderer && isAssetRef(src)) {\n return (\n <AssetRenderer\n docId={assetRefId(src)}\n alt={alt}\n className={cn('w-full object-cover', shape, className)}\n testId={testId}\n />\n )\n }\n if (src && !isAssetRef(src)) {\n return (\n <img\n src={src}\n alt={alt}\n className={cn('w-full object-cover', shape, className)}\n data-testid={testId}\n />\n )\n }\n return (\n <div\n className={cn(\n 'flex w-full items-center justify-center overflow-hidden border border-border',\n 'bg-gradient-to-br from-muted via-card to-accent text-muted-foreground',\n shape,\n className\n )}\n data-testid={testId}\n aria-label={alt || 'Image placeholder'}\n role=\"img\"\n >\n <ImageIcon className=\"size-8 opacity-60\" />\n </div>\n )\n}\n","import type { CSSProperties, ReactNode } from 'react'\nimport { ArrowRight } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { BlockImage } from './BlockImage'\n\nexport type HeroTone = 'default' | 'muted' | 'ink'\nexport type HeroAlign = 'left' | 'center'\n\nexport interface HeroCta {\n label?: string\n href?: string\n}\n\nexport interface HeroProps {\n eyebrow?: string\n title: string\n /** A word/phrase within the title to accent (rendered in the primary colour). */\n emphasis?: string\n subtitle?: string\n primaryCta?: HeroCta\n secondaryCta?: HeroCta\n align?: HeroAlign\n tone?: HeroTone\n /** Side visual (ignored when `backgroundImage` is set). */\n imageUrl?: string\n /** Full-bleed background image URL/data-URI. Turns the hero into a cover band. */\n backgroundImage?: string\n /** Darkening scrim over the background image, for legible copy. Default true. */\n overlay?: boolean\n /** Override the eyebrow styling (e.g. a firm brand accent). Default: token classes. */\n eyebrowClassName?: string\n testId?: string\n}\n\nconst TONE_SURFACE: Record<HeroTone, string> = {\n default: 'bg-background text-foreground',\n muted: 'bg-muted text-foreground',\n ink: 'bg-foreground text-background',\n}\n\n/** Highlight each occurrence of `emphasis` inside `title` with the accent colour. */\nfunction renderTitle(title: string, emphasis?: string): ReactNode {\n if (!emphasis || !title.includes(emphasis)) return title\n const parts = title.split(emphasis)\n return parts.map((part, i) => (\n <span key={i}>\n {part}\n {i < parts.length - 1 && <span className=\"text-primary\">{emphasis}</span>}\n </span>\n ))\n}\n\n/** Editorial marketing hero: eyebrow, headline, subtitle, two CTAs and a visual. */\nexport function Hero({\n eyebrow,\n title,\n emphasis,\n subtitle,\n primaryCta,\n secondaryCta,\n align = 'left',\n tone = 'default',\n imageUrl,\n backgroundImage,\n overlay = true,\n eyebrowClassName,\n testId,\n}: HeroProps) {\n // Over a background image the surface is dark, so copy reads on-background.\n const onDark = Boolean(backgroundImage) || tone === 'ink'\n const subtle = onDark ? 'text-background/70' : 'text-muted-foreground'\n const eyebrowClass = eyebrowClassName ?? (onDark ? 'text-background/60' : 'text-muted-foreground')\n const centered = align === 'center' || Boolean(backgroundImage)\n\n const heading = renderTitle(title, emphasis)\n\n const copy = (\n <div\n className={cn(\n 'max-w-2xl',\n centered && 'mx-auto text-center',\n backgroundImage && 'text-background'\n )}\n >\n {eyebrow && (\n <p className={cn('mb-4 text-sm font-semibold uppercase tracking-wider', eyebrowClass)}>\n {eyebrow}\n </p>\n )}\n <h1 className=\"text-4xl font-semibold tracking-tight text-balance sm:text-5xl\">{heading}</h1>\n {subtitle && <p className={cn('mt-6 text-lg leading-relaxed', subtle)}>{subtitle}</p>}\n {(primaryCta?.label || secondaryCta?.label) && (\n <div\n className={cn('mt-8 flex flex-col gap-3 sm:flex-row', centered && 'sm:justify-center')}\n >\n {primaryCta?.label && (\n <Button asChild size=\"lg\">\n <a href={primaryCta.href || '#'}>\n {primaryCta.label}\n <ArrowRight className=\"size-4\" />\n </a>\n </Button>\n )}\n {secondaryCta?.label && (\n <Button\n asChild\n size=\"lg\"\n variant=\"outline\"\n className={cn(\n onDark &&\n 'border-background/35 bg-transparent text-background hover:bg-background/10 hover:text-background'\n )}\n >\n <a href={secondaryCta.href || '#'}>{secondaryCta.label}</a>\n </Button>\n )}\n </div>\n )}\n </div>\n )\n\n // Full-bleed cover hero: background image + optional scrim + centered copy.\n if (backgroundImage) {\n const bgStyle: CSSProperties = {\n backgroundImage: `url(\"${backgroundImage}\")`,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n }\n return (\n <section\n className=\"relative isolate overflow-hidden\"\n style={bgStyle}\n data-testid={testId}\n data-bg={testId && `${testId}-bg`}\n >\n {overlay && <div className=\"absolute inset-0 bg-black/55\" aria-hidden />}\n <div className=\"relative mx-auto max-w-7xl px-5 py-28 lg:px-8 lg:py-36\">{copy}</div>\n </section>\n )\n }\n\n return (\n <section className={cn(TONE_SURFACE[tone] ?? TONE_SURFACE.default)} data-testid={testId}>\n <div className=\"mx-auto max-w-7xl px-5 py-20 lg:px-8 lg:py-28\">\n {centered ? (\n <div className=\"flex flex-col items-center gap-12\">\n {copy}\n {imageUrl && (\n <BlockImage\n src={imageUrl}\n aspect=\"16:9\"\n rounded=\"lg\"\n className=\"w-full max-w-4xl\"\n testId={testId && `${testId}-image`}\n />\n )}\n </div>\n ) : (\n <div className=\"grid items-center gap-12 lg:grid-cols-2\">\n {copy}\n <BlockImage\n src={imageUrl}\n aspect=\"4:5\"\n rounded=\"lg\"\n testId={testId && `${testId}-image`}\n />\n </div>\n )}\n </div>\n </section>\n )\n}\n","import type { ComponentType, ReactNode } from 'react'\n\n/**\n * Firm-agnostic link injection for marketing blocks. A card that navigates to a\n * detail page renders an internal `<a href>` by default, but a consuming app can\n * inject its router's link (e.g. react-router's `Link`, adapted to `href`) via\n * `linkComponent` so navigation stays in-SPA. When no `href` is given the block\n * renders its children unwrapped, so this is fully opt-in and backward compatible.\n */\nexport type BlockLinkComponent = ComponentType<{\n href: string\n className?: string\n children: ReactNode\n}>\n\nexport interface BlockLinkProps {\n href?: string\n linkComponent?: BlockLinkComponent\n className?: string\n children: ReactNode\n}\n\nexport function BlockLink({ href, linkComponent: Link, className, children }: BlockLinkProps) {\n if (!href) return <>{children}</>\n if (Link) {\n return (\n <Link href={href} className={className}>\n {children}\n </Link>\n )\n }\n return (\n <a href={href} className={className}>\n {children}\n </a>\n )\n}\n","import type { LucideIcon } from 'lucide-react'\nimport { Card, cn } from '@arbidocs/react/ui'\nimport { BlockLink, type BlockLinkComponent } from './blockLink'\n\nexport interface FeatureItem {\n icon?: LucideIcon\n title: string\n description?: string\n /** When set, the card becomes a link to this destination. */\n href?: string\n}\n\nexport interface FeatureGridProps {\n columns?: '2' | '3'\n items: FeatureItem[]\n /** Inject a router link (adapted to `href`) so linked cards navigate in-SPA. */\n linkComponent?: BlockLinkComponent\n testId?: string\n}\n\nconst COLS: Record<'2' | '3', string> = {\n '2': 'sm:grid-cols-2',\n '3': 'sm:grid-cols-2 lg:grid-cols-3',\n}\n\n/** Responsive grid of icon + title + description feature cards. */\nexport function FeatureGrid({ columns = '3', items, linkComponent, testId }: FeatureGridProps) {\n return (\n <div className={cn('grid gap-5', COLS[columns] ?? COLS['3'])} data-testid={testId}>\n {(items ?? []).map((item, i) => {\n const Icon = item.icon\n return (\n <BlockLink\n key={i}\n href={item.href}\n linkComponent={linkComponent}\n className={cn('block h-full', item.href && 'group')}\n >\n <Card\n variant=\"outline\"\n className={cn(\n 'h-full p-6',\n item.href && 'transition-colors group-hover:border-primary/40'\n )}\n data-testid={testId && `${testId}-item-${i}`}\n >\n {Icon && (\n <span className=\"mb-4 inline-flex size-10 items-center justify-center rounded-lg bg-primary/10 text-primary\">\n <Icon className=\"size-5\" />\n </span>\n )}\n <h3 className=\"text-lg font-semibold tracking-tight\">{item.title}</h3>\n {item.description && (\n <p className=\"mt-2 text-sm leading-relaxed text-muted-foreground\">\n {item.description}\n </p>\n )}\n </Card>\n </BlockLink>\n )\n })}\n </div>\n )\n}\n","import { Quote } from 'lucide-react'\nimport { Avatar, AvatarFallback, AvatarImage, Card } from '@arbidocs/react/ui'\nimport { initials } from '../lib/format'\n\nexport interface TestimonialProps {\n quote: string\n author?: string\n role?: string\n avatarUrl?: string\n testId?: string\n}\n\n/** A single pull-quote testimonial with an author and optional avatar. */\nexport function Testimonial({ quote, author, role, avatarUrl, testId }: TestimonialProps) {\n return (\n <Card variant=\"outline\" className=\"mx-auto max-w-3xl p-8 text-center\" data-testid={testId}>\n <Quote className=\"mx-auto size-8 text-primary/40\" aria-hidden />\n <blockquote className=\"mt-4 text-xl font-medium leading-relaxed text-balance\">\n {quote}\n </blockquote>\n {(author || avatarUrl) && (\n <div className=\"mt-6 flex items-center justify-center gap-3\">\n {(avatarUrl || author) && (\n <Avatar>\n {avatarUrl && <AvatarImage src={avatarUrl} alt={author ?? ''} />}\n <AvatarFallback>{initials(author || '?')}</AvatarFallback>\n </Avatar>\n )}\n <div className=\"text-left\">\n {author && <p className=\"text-sm font-semibold\">{author}</p>}\n {role && <p className=\"text-sm text-muted-foreground\">{role}</p>}\n </div>\n </div>\n )}\n </Card>\n )\n}\n","import type { CSSProperties } from 'react'\nimport { ArrowRight } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\n\nexport type CTABannerTone = 'default' | 'muted' | 'ink'\n\nexport interface CTABannerProps {\n title: string\n subtitle?: string\n cta?: { label?: string; href?: string }\n tone?: CTABannerTone\n /** Full-bleed background image URL/data-URI. Overrides the tone surface. */\n backgroundImage?: string\n /** Darkening scrim over the background image. Default true. */\n overlay?: boolean\n testId?: string\n}\n\nconst TONE_SURFACE: Record<CTABannerTone, string> = {\n default: 'bg-primary text-primary-foreground',\n muted: 'bg-muted text-foreground',\n ink: 'bg-foreground text-background',\n}\n\n/** Full-width call-to-action banner. */\nexport function CTABanner({\n title,\n subtitle,\n cta,\n tone = 'default',\n backgroundImage,\n overlay = true,\n testId,\n}: CTABannerProps) {\n const onImage = Boolean(backgroundImage)\n const subtle = onImage\n ? 'text-white/80'\n : tone === 'default'\n ? 'text-primary-foreground/80'\n : tone === 'ink'\n ? 'text-background/70'\n : 'text-muted-foreground'\n const bgStyle: CSSProperties | undefined = backgroundImage\n ? {\n backgroundImage: `url(\"${backgroundImage}\")`,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n }\n : undefined\n return (\n <div\n className={cn(\n 'relative isolate overflow-hidden rounded-2xl px-8 py-14 text-center',\n onImage ? 'text-white' : (TONE_SURFACE[tone] ?? TONE_SURFACE.default)\n )}\n style={bgStyle}\n data-testid={testId}\n >\n {onImage && overlay && <div className=\"absolute inset-0 bg-black/55\" aria-hidden />}\n <div className=\"relative\">\n <h2 className=\"text-3xl font-semibold tracking-tight text-balance sm:text-4xl\">{title}</h2>\n {subtitle && <p className={cn('mx-auto mt-4 max-w-2xl text-lg', subtle)}>{subtitle}</p>}\n {cta?.label && (\n <div className=\"mt-8\">\n <Button\n asChild\n size=\"lg\"\n variant={tone === 'default' && !onImage ? 'secondary' : 'default'}\n >\n <a href={cta.href || '#'}>\n {cta.label}\n <ArrowRight className=\"size-4\" />\n </a>\n </Button>\n </div>\n )}\n </div>\n </div>\n )\n}\n","export interface LogoItem {\n label: string\n}\n\nexport interface LogoCloudProps {\n items: LogoItem[]\n testId?: string\n}\n\n/**\n * Text-based \"logo\" wall — brand names rendered as muted pill marks. Self-contained\n * (no external images) so the palette looks complete offline.\n */\nexport function LogoCloud({ items, testId }: LogoCloudProps) {\n return (\n <div className=\"flex flex-wrap items-center justify-center gap-4\" data-testid={testId}>\n {(items ?? []).map((item, i) => (\n <span\n key={i}\n className=\"rounded-md border border-border bg-muted px-5 py-2.5 text-sm font-semibold uppercase tracking-wide text-muted-foreground\"\n data-testid={testId && `${testId}-item-${i}`}\n >\n {item.label}\n </span>\n ))}\n </div>\n )\n}\n","import { ChevronDown } from 'lucide-react'\n\nexport interface FaqItem {\n question: string\n answer?: string\n}\n\nexport interface FAQProps {\n items: FaqItem[]\n testId?: string\n}\n\n/**\n * Accessible disclosure list. Built on native `<details>`/`<summary>` so it works\n * without client state (correct in the Puck preview and static renders) and stays\n * keyboard-accessible. Token-only styling.\n */\nexport function FAQ({ items, testId }: FAQProps) {\n return (\n <div className=\"mx-auto max-w-3xl divide-y divide-border\" data-testid={testId}>\n {(items ?? []).map((item, i) => (\n <details key={i} className=\"group py-4\" data-testid={testId && `${testId}-item-${i}`}>\n <summary className=\"flex cursor-pointer list-none items-center justify-between gap-4 text-left text-base font-medium\">\n {item.question}\n <ChevronDown className=\"size-4 shrink-0 text-muted-foreground transition-transform group-open:rotate-180\" />\n </summary>\n {item.answer && (\n <p className=\"mt-3 text-sm leading-relaxed text-muted-foreground\">{item.answer}</p>\n )}\n </details>\n ))}\n </div>\n )\n}\n","import { AiMarkdown } from '@arbidocs/react/ui'\n\nexport interface RichTextBlockProps {\n content: string\n testId?: string\n}\n\n/**\n * Prose block. Reuses the shared markdown renderer (`AiMarkdown`) so long-form copy\n * gets the one house style for headings, lists, tables and emphasis — token-clean\n * and themeable per firm.\n */\nexport function RichTextBlock({ content, testId }: RichTextBlockProps) {\n return (\n <div className=\"mx-auto max-w-3xl\" data-testid={testId}>\n <AiMarkdown>{content ?? ''}</AiMarkdown>\n </div>\n )\n}\n","import type { LucideIcon } from 'lucide-react'\nimport { AlertTriangle, CheckCircle2, Info, XCircle } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport type CalloutVariant = 'info' | 'success' | 'warning' | 'danger'\n\nexport interface CalloutProps {\n variant?: CalloutVariant\n title?: string\n body?: string\n testId?: string\n}\n\nconst STYLES: Record<CalloutVariant, { wrap: string; icon: string; Icon: LucideIcon }> = {\n info: { wrap: 'border-primary/30 bg-primary/5', icon: 'text-primary', Icon: Info },\n success: { wrap: 'border-success/30 bg-success/10', icon: 'text-success', Icon: CheckCircle2 },\n warning: { wrap: 'border-warning/40 bg-warning/10', icon: 'text-warning', Icon: AlertTriangle },\n danger: {\n wrap: 'border-destructive/30 bg-destructive/10',\n icon: 'text-destructive',\n Icon: XCircle,\n },\n}\n\n/** Inline notice box in one of four semantic tones. */\nexport function Callout({ variant = 'info', title, body, testId }: CalloutProps) {\n const style = STYLES[variant] ?? STYLES.info\n const Icon = style.Icon\n return (\n <div\n className={cn('flex gap-3 rounded-lg border p-4 text-foreground', style.wrap)}\n data-testid={testId}\n role=\"note\"\n >\n <Icon className={cn('mt-0.5 size-5 shrink-0', style.icon)} aria-hidden />\n <div className=\"min-w-0\">\n {title && <p className=\"font-semibold\">{title}</p>}\n {body && <p className=\"text-sm leading-relaxed text-muted-foreground\">{body}</p>}\n </div>\n </div>\n )\n}\n","import { Avatar, AvatarFallback, AvatarImage, cn } from '@arbidocs/react/ui'\nimport { initials } from '../lib/format'\n\nexport type AvatarBlockSize = 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface AvatarBlockProps {\n src?: string\n name?: string\n size?: AvatarBlockSize\n testId?: string\n}\n\nconst SIZE: Record<AvatarBlockSize, string> = {\n sm: 'size-8 text-xs',\n md: 'size-10 text-sm',\n lg: 'size-14 text-base',\n xl: 'size-20 text-xl',\n}\n\n/** Avatar with an initials fallback when no image is supplied. */\nexport function AvatarBlock({ src, name = '', size = 'md', testId }: AvatarBlockProps) {\n return (\n <Avatar className={cn(SIZE[size] ?? SIZE.md)} data-testid={testId}>\n {src && <AvatarImage src={src} alt={name} />}\n <AvatarFallback className=\"font-semibold\">{initials(name || '?')}</AvatarFallback>\n </Avatar>\n )\n}\n","import { Button } from '@arbidocs/react/ui'\n\nexport interface NavLink {\n label: string\n href?: string\n}\n\nexport interface NavbarProps {\n brand: string\n links: NavLink[]\n cta?: { label?: string; href?: string }\n testId?: string\n}\n\n/** Marketing top navigation: brand, inline links and an optional CTA button. */\nexport function Navbar({ brand, links, cta, testId }: NavbarProps) {\n return (\n <header className=\"border-b border-border bg-background\" data-testid={testId}>\n <nav className=\"mx-auto flex max-w-7xl items-center justify-between gap-6 px-5 py-4 lg:px-8\">\n <span className=\"text-lg font-semibold tracking-tight\">{brand}</span>\n <div className=\"hidden items-center gap-6 md:flex\">\n {(links ?? []).map((link, i) => (\n <a\n key={i}\n href={link.href || '#'}\n className=\"text-sm font-medium text-muted-foreground transition-colors hover:text-foreground\"\n data-testid={testId && `${testId}-link-${i}`}\n >\n {link.label}\n </a>\n ))}\n </div>\n {cta?.label && (\n <Button asChild size=\"sm\">\n <a href={cta.href || '#'}>{cta.label}</a>\n </Button>\n )}\n </nav>\n </header>\n )\n}\n","export interface FooterLink {\n label: string\n href?: string\n}\n\nexport interface FooterColumn {\n heading: string\n links: FooterLink[]\n}\n\nexport interface FooterProps {\n columns: FooterColumn[]\n copyright?: string\n testId?: string\n}\n\n/** Site footer: a row of link columns plus a copyright line. */\nexport function Footer({ columns, copyright, testId }: FooterProps) {\n return (\n <footer className=\"border-t border-border bg-muted text-foreground\" data-testid={testId}>\n <div className=\"mx-auto max-w-7xl px-5 py-14 lg:px-8\">\n <div className=\"grid gap-8 sm:grid-cols-2 lg:grid-cols-4\">\n {(columns ?? []).map((col, i) => (\n <div key={i} data-testid={testId && `${testId}-col-${i}`}>\n <h3 className=\"text-sm font-semibold tracking-tight\">{col.heading}</h3>\n <ul className=\"mt-4 space-y-2\">\n {(col.links ?? []).map((link, j) => (\n <li key={j}>\n <a\n href={link.href || '#'}\n className=\"text-sm text-muted-foreground transition-colors hover:text-foreground\"\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n {copyright && (\n <p className=\"mt-12 border-t border-border pt-6 text-sm text-muted-foreground\">\n {copyright}\n </p>\n )}\n </div>\n </footer>\n )\n}\n","import { cn } from '@arbidocs/react/ui'\n\nexport interface ListItem {\n text: string\n}\n\nexport interface ListBlockProps {\n ordered?: boolean\n items: ListItem[]\n testId?: string\n}\n\n/** Ordered or unordered prose list. Token-clean. */\nexport function ListBlock({ ordered = false, items, testId }: ListBlockProps) {\n const list = items ?? []\n const className = cn(\n 'mx-auto max-w-3xl space-y-2 pl-5 text-foreground',\n ordered ? 'list-decimal' : 'list-disc'\n )\n const content = list.map((item, i) => (\n <li key={i} className=\"leading-relaxed marker:text-muted-foreground\">\n {item.text}\n </li>\n ))\n return ordered ? (\n <ol className={className} data-testid={testId}>\n {content}\n </ol>\n ) : (\n <ul className={className} data-testid={testId}>\n {content}\n </ul>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport type ColumnsCount = 2 | 3 | 4\nexport type ColumnsGap = 'sm' | 'md' | 'lg'\n\nexport interface ColumnsProps {\n count?: ColumnsCount\n gap?: ColumnsGap\n columns: ReactNode[]\n testId?: string\n}\n\nconst GRID: Record<ColumnsCount, string> = {\n 2: 'sm:grid-cols-2',\n 3: 'sm:grid-cols-2 lg:grid-cols-3',\n 4: 'sm:grid-cols-2 lg:grid-cols-4',\n}\n\nconst GAP: Record<ColumnsGap, string> = {\n sm: 'gap-3',\n md: 'gap-6',\n lg: 'gap-10',\n}\n\n/** Responsive N-column row. Each column hosts a nested Puck slot. */\nexport function Columns({ count = 3, gap = 'md', columns, testId }: ColumnsProps) {\n return (\n <div\n className={cn('grid grid-cols-1', GRID[count] ?? GRID[3], GAP[gap] ?? GAP.md)}\n data-testid={testId}\n >\n {columns.map((col, i) => (\n <div key={i} data-testid={testId && `${testId}-col-${i}`}>\n {col}\n </div>\n ))}\n </div>\n )\n}\n","import { cn } from '@arbidocs/react/ui'\n\nexport type SpacerSize = 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface SpacerProps {\n size?: SpacerSize\n testId?: string\n}\n\nconst SIZE: Record<SpacerSize, string> = {\n sm: 'h-4',\n md: 'h-8',\n lg: 'h-16',\n xl: 'h-24',\n}\n\n/** Vertical whitespace. */\nexport function Spacer({ size = 'md', testId }: SpacerProps) {\n return <div className={cn('w-full', SIZE[size] ?? SIZE.md)} data-testid={testId} aria-hidden />\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport type ContainerWidth = 'narrow' | 'default' | 'wide' | 'full'\nexport type ContainerPadding = 'none' | 'sm' | 'md' | 'lg'\n\nexport interface ContainerProps {\n width?: ContainerWidth\n padding?: ContainerPadding\n children: ReactNode\n testId?: string\n}\n\nconst WIDTH: Record<ContainerWidth, string> = {\n narrow: 'max-w-3xl',\n default: 'max-w-5xl',\n wide: 'max-w-7xl',\n full: 'max-w-none',\n}\n\nconst PADDING: Record<ContainerPadding, string> = {\n none: 'px-0 py-0',\n sm: 'px-4 py-6',\n md: 'px-5 py-12 lg:px-8',\n lg: 'px-5 py-20 lg:px-8',\n}\n\n/** Max-width wrapper that centres and pads a nested Puck slot. */\nexport function Container({ width = 'default', padding = 'md', children, testId }: ContainerProps) {\n return (\n <div\n className={cn(\n 'mx-auto w-full',\n WIDTH[width] ?? WIDTH.default,\n PADDING[padding] ?? PADDING.md\n )}\n data-testid={testId}\n >\n {children}\n </div>\n )\n}\n","import { Check } from 'lucide-react'\nimport { Button, Card, cn } from '@arbidocs/react/ui'\n\nexport interface PricingPlan {\n name: string\n price: string\n period?: string\n description?: string\n features?: string[]\n cta?: { label?: string; href?: string }\n /** Highlight this plan as the recommended one. */\n featured?: boolean\n}\n\nexport interface PricingTableProps {\n plans: PricingPlan[]\n testId?: string\n}\n\n/** A row of pricing plan cards with feature lists and a CTA per plan. */\nexport function PricingTable({ plans, testId }: PricingTableProps) {\n return (\n <div\n className={cn('grid gap-6', (plans?.length ?? 0) >= 3 ? 'md:grid-cols-3' : 'sm:grid-cols-2')}\n data-testid={testId}\n >\n {(plans ?? []).map((plan, i) => (\n <Card\n key={i}\n variant={plan.featured ? 'elevated' : 'outline'}\n className={cn('flex h-full flex-col p-6', plan.featured && 'ring-2 ring-primary')}\n data-testid={testId && `${testId}-item-${i}`}\n >\n <h3 className=\"text-lg font-semibold tracking-tight\">{plan.name}</h3>\n <div className=\"mt-3 flex items-baseline gap-1\">\n <span className=\"text-3xl font-semibold tracking-tight\">{plan.price}</span>\n {plan.period && <span className=\"text-sm text-muted-foreground\">/{plan.period}</span>}\n </div>\n {plan.description && (\n <p className=\"mt-2 text-sm leading-relaxed text-muted-foreground\">{plan.description}</p>\n )}\n {plan.features && plan.features.length > 0 && (\n <ul className=\"mt-5 flex-1 space-y-2\">\n {plan.features.map((f, j) => (\n <li key={j} className=\"flex items-start gap-2 text-sm\">\n <Check className=\"mt-0.5 size-4 shrink-0 text-primary\" />\n <span>{f}</span>\n </li>\n ))}\n </ul>\n )}\n {plan.cta?.label && (\n <Button asChild className=\"mt-6 w-full\" variant={plan.featured ? 'default' : 'outline'}>\n <a href={plan.cta.href || '#'}>{plan.cta.label}</a>\n </Button>\n )}\n </Card>\n ))}\n </div>\n )\n}\n","import { useState } from 'react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport interface TabItem {\n label: string\n content: string\n}\n\nexport interface TabsProps {\n items: TabItem[]\n testId?: string\n}\n\n/** A simple tabbed panel: a row of tab buttons over the active tab's content. */\nexport function Tabs({ items, testId }: TabsProps) {\n const [active, setActive] = useState(0)\n const list = items ?? []\n const current = list[Math.min(active, Math.max(list.length - 1, 0))]\n return (\n <div data-testid={testId}>\n <div className=\"flex flex-wrap gap-1 border-b border-border\" role=\"tablist\">\n {list.map((t, i) => {\n const selected = i === active\n return (\n <button\n key={i}\n type=\"button\"\n role=\"tab\"\n aria-selected={selected}\n onClick={() => setActive(i)}\n className={cn(\n '-mb-px border-b-2 px-4 py-2 text-sm font-medium transition-colors',\n selected\n ? 'border-primary text-foreground'\n : 'border-transparent text-muted-foreground hover:text-foreground'\n )}\n data-testid={testId && `${testId}-tab-${i}`}\n >\n {t.label}\n </button>\n )\n })}\n </div>\n {current && (\n <div\n role=\"tabpanel\"\n className=\"pt-5 text-sm leading-relaxed text-muted-foreground\"\n data-testid={testId && `${testId}-panel`}\n >\n {current.content}\n </div>\n )}\n </div>\n )\n}\n","import { useState } from 'react'\nimport { ChevronDown } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport interface AccordionItem {\n title: string\n content: string\n}\n\nexport interface AccordionProps {\n items: AccordionItem[]\n /** Allow multiple panels open at once. Default false (single-open). */\n allowMultiple?: boolean\n testId?: string\n}\n\n/** A stack of collapsible title/content panels. */\nexport function Accordion({ items, allowMultiple = false, testId }: AccordionProps) {\n const [open, setOpen] = useState<number[]>([])\n const toggle = (i: number) =>\n setOpen((prev) =>\n prev.includes(i) ? prev.filter((n) => n !== i) : allowMultiple ? [...prev, i] : [i]\n )\n return (\n <div className=\"divide-y divide-border border-y border-border\" data-testid={testId}>\n {(items ?? []).map((item, i) => {\n const isOpen = open.includes(i)\n return (\n <div key={i} data-testid={testId && `${testId}-item-${i}`}>\n <button\n type=\"button\"\n aria-expanded={isOpen}\n onClick={() => toggle(i)}\n className=\"flex w-full items-center justify-between gap-4 py-4 text-left text-base font-medium\"\n data-testid={testId && `${testId}-trigger-${i}`}\n >\n {item.title}\n <ChevronDown\n className={cn('size-4 shrink-0 transition-transform', isOpen && 'rotate-180')}\n />\n </button>\n {isOpen && (\n <p\n className=\"pb-4 text-sm leading-relaxed text-muted-foreground\"\n data-testid={testId && `${testId}-content-${i}`}\n >\n {item.content}\n </p>\n )}\n </div>\n )\n })}\n </div>\n )\n}\n","import { cn } from '@arbidocs/react/ui'\nimport { BlockImage, type BlockImageProps } from './BlockImage'\n\nexport interface GalleryImage {\n src?: string\n alt?: string\n caption?: string\n}\n\nexport interface GalleryProps {\n images: GalleryImage[]\n columns?: '2' | '3' | '4'\n aspect?: BlockImageProps['aspect']\n rounded?: BlockImageProps['rounded']\n testId?: string\n}\n\nconst COLS: Record<'2' | '3' | '4', string> = {\n '2': 'grid-cols-2',\n '3': 'grid-cols-2 sm:grid-cols-3',\n '4': 'grid-cols-2 sm:grid-cols-4',\n}\n\n/** A responsive image grid. Each tile previews via BlockImage with a caption. */\nexport function Gallery({\n images,\n columns = '3',\n aspect = '1:1',\n rounded = 'lg',\n testId,\n}: GalleryProps) {\n return (\n <div className={cn('grid gap-4', COLS[columns] ?? COLS['3'])} data-testid={testId}>\n {(images ?? []).map((img, i) => (\n <figure key={i} data-testid={testId && `${testId}-item-${i}`}>\n <BlockImage\n src={img.src}\n alt={img.alt}\n aspect={aspect}\n rounded={rounded}\n testId={testId && `${testId}-item-${i}-image`}\n />\n {img.caption && (\n <figcaption className=\"mt-1.5 text-xs text-muted-foreground\">{img.caption}</figcaption>\n )}\n </figure>\n ))}\n </div>\n )\n}\n","import { cn } from '@arbidocs/react/ui'\n\nexport type VideoAspect = '16:9' | '4:3' | '1:1'\n\nexport interface VideoEmbedProps {\n /** A YouTube / Vimeo / Loom page URL, or a direct video file URL. */\n url: string\n title?: string\n aspect?: VideoAspect\n rounded?: boolean\n testId?: string\n}\n\nconst ASPECT: Record<VideoAspect, string> = {\n '16:9': 'aspect-video',\n '4:3': 'aspect-[4/3]',\n '1:1': 'aspect-square',\n}\n\n/**\n * Resolve a shareable video URL to an embeddable iframe src. Supports YouTube,\n * Vimeo and Loom; returns null for anything else (rendered as a `<video>`).\n */\nexport function toEmbedUrl(url: string): string | null {\n if (!url) return null\n const yt = url.match(/(?:youtube\\.com\\/watch\\?v=|youtu\\.be\\/|youtube\\.com\\/embed\\/)([\\w-]{11})/)\n if (yt) return `https://www.youtube.com/embed/${yt[1]}`\n const vimeo = url.match(/vimeo\\.com\\/(?:video\\/)?(\\d+)/)\n if (vimeo) return `https://player.vimeo.com/video/${vimeo[1]}`\n const loom = url.match(/loom\\.com\\/(?:share|embed)\\/([\\w-]+)/)\n if (loom) return `https://www.loom.com/embed/${loom[1]}`\n return null\n}\n\n/** Embed a video from a YouTube/Vimeo/Loom link or a direct file, in a set aspect. */\nexport function VideoEmbed({\n url,\n title,\n aspect = '16:9',\n rounded = true,\n testId,\n}: VideoEmbedProps) {\n const embed = toEmbedUrl(url)\n const frame = cn(\n 'w-full overflow-hidden border border-border bg-muted',\n ASPECT[aspect] ?? ASPECT['16:9'],\n rounded && 'rounded-lg'\n )\n return (\n <div className={frame} data-testid={testId}>\n {embed ? (\n <iframe\n src={embed}\n title={title || 'Embedded video'}\n className=\"size-full\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n data-testid={testId && `${testId}-iframe`}\n />\n ) : url ? (\n <video src={url} controls className=\"size-full\" data-testid={testId && `${testId}-video`} />\n ) : null}\n </div>\n )\n}\n","import { useState, type FormEvent } from 'react'\nimport { Button, cn } from '@arbidocs/react/ui'\n\nexport interface ContactField {\n name: string\n label: string\n type?: 'text' | 'email' | 'tel' | 'textarea'\n required?: boolean\n}\n\nexport interface ContactFormProps {\n fields: ContactField[]\n submitLabel?: string\n /** Optional POST endpoint. When set, the form submits natively to it. */\n action?: string\n /** Message shown after a client-side (no-action) submit. */\n successMessage?: string\n testId?: string\n}\n\n/** A configurable lead/contact form. Posts to `action`, or confirms client-side. */\nexport function ContactForm({\n fields,\n submitLabel = 'Send',\n action,\n successMessage = 'Thanks — we’ll be in touch shortly.',\n testId,\n}: ContactFormProps) {\n const [sent, setSent] = useState(false)\n const list = fields ?? []\n\n const onSubmit = (e: FormEvent<HTMLFormElement>) => {\n // With an action we let the browser POST natively; otherwise confirm inline.\n if (!action) {\n e.preventDefault()\n setSent(true)\n }\n }\n\n if (sent) {\n return (\n <p\n className=\"rounded-lg border border-border bg-muted p-6 text-center text-sm text-foreground\"\n role=\"status\"\n data-testid={testId && `${testId}-success`}\n >\n {successMessage}\n </p>\n )\n }\n\n return (\n <form\n action={action}\n method={action ? 'post' : undefined}\n onSubmit={onSubmit}\n className=\"mx-auto flex max-w-xl flex-col gap-4\"\n data-testid={testId}\n >\n {list.map((f, i) => {\n const inputClass =\n 'w-full rounded-md border border-border bg-card px-3 py-2 text-sm text-foreground outline-none focus:border-primary'\n return (\n <label key={i} className=\"flex flex-col gap-1.5 text-left\">\n <span className=\"text-sm font-medium\">{f.label}</span>\n {f.type === 'textarea' ? (\n <textarea\n name={f.name}\n required={f.required}\n rows={4}\n className={inputClass}\n data-testid={testId && `${testId}-field-${f.name}`}\n />\n ) : (\n <input\n name={f.name}\n type={f.type || 'text'}\n required={f.required}\n className={inputClass}\n data-testid={testId && `${testId}-field-${f.name}`}\n />\n )}\n </label>\n )\n })}\n <Button\n type=\"submit\"\n className={cn('mt-1 self-start')}\n data-testid={testId && `${testId}-submit`}\n >\n {submitLabel}\n </Button>\n </form>\n )\n}\n","import { ArrowRight } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport type BannerTone = 'primary' | 'muted' | 'ink'\n\nexport interface BannerProps {\n text: string\n cta?: { label?: string; href?: string }\n tone?: BannerTone\n testId?: string\n}\n\nconst TONE: Record<BannerTone, string> = {\n primary: 'bg-primary text-primary-foreground',\n muted: 'bg-muted text-foreground',\n ink: 'bg-foreground text-background',\n}\n\n/** A slim full-width announcement strip with optional inline CTA. */\nexport function Banner({ text, cta, tone = 'primary', testId }: BannerProps) {\n return (\n <div\n className={cn('w-full px-5 py-2.5 text-center text-sm', TONE[tone] ?? TONE.primary)}\n data-testid={testId}\n >\n <span className=\"font-medium\">{text}</span>\n {cta?.label && (\n <a\n href={cta.href || '#'}\n className=\"ml-2 inline-flex items-center gap-1 font-semibold underline underline-offset-4\"\n data-testid={testId && `${testId}-cta`}\n >\n {cta.label}\n <ArrowRight className=\"size-3.5\" />\n </a>\n )}\n </div>\n )\n}\n","import { ArrowRight } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { BlockImage } from './BlockImage'\n\nexport interface MediaTextProps {\n eyebrow?: string\n title: string\n body?: string\n imageUrl?: string\n /** Which side the media sits on (desktop). */\n mediaSide?: 'left' | 'right'\n cta?: { label?: string; href?: string }\n testId?: string\n}\n\n/** A split media-and-copy row: an image on one side, prose + CTA on the other. */\nexport function MediaText({\n eyebrow,\n title,\n body,\n imageUrl,\n mediaSide = 'left',\n cta,\n testId,\n}: MediaTextProps) {\n const media = (\n <BlockImage src={imageUrl} aspect=\"4:3\" rounded=\"lg\" testId={testId && `${testId}-image`} />\n )\n const copy = (\n <div>\n {eyebrow && (\n <p className=\"mb-3 text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n {eyebrow}\n </p>\n )}\n <h2 className=\"text-3xl font-semibold tracking-tight text-balance\">{title}</h2>\n {body && <p className=\"mt-4 text-lg leading-relaxed text-muted-foreground\">{body}</p>}\n {cta?.label && (\n <Button asChild className=\"mt-6\">\n <a href={cta.href || '#'}>\n {cta.label}\n <ArrowRight className=\"size-4\" />\n </a>\n </Button>\n )}\n </div>\n )\n return (\n <div className=\"grid items-center gap-10 lg:grid-cols-2\" data-testid={testId}>\n {mediaSide === 'right' ? (\n <>\n {copy}\n {media}\n </>\n ) : (\n <>\n {media}\n {copy}\n </>\n )}\n </div>\n )\n}\n","import { Avatar, AvatarFallback, AvatarImage, Card, cn } from '@arbidocs/react/ui'\nimport { initials } from '../lib/format'\nimport { BlockLink, type BlockLinkComponent } from './blockLink'\n\nexport interface TeamMember {\n name: string\n role?: string\n bio?: string\n avatarUrl?: string\n /** When set, the card becomes a link to this person's detail page. */\n href?: string\n}\n\nexport interface TeamGridProps {\n members: TeamMember[]\n columns?: '2' | '3' | '4'\n /** Inject a router link (adapted to `href`) so linked cards navigate in-SPA. */\n linkComponent?: BlockLinkComponent\n testId?: string\n}\n\nconst COLS: Record<'2' | '3' | '4', string> = {\n '2': 'sm:grid-cols-2',\n '3': 'sm:grid-cols-2 lg:grid-cols-3',\n '4': 'sm:grid-cols-2 lg:grid-cols-4',\n}\n\n/** A grid of people cards: avatar, name, role and an optional short bio. */\nexport function TeamGrid({ members, columns = '3', linkComponent, testId }: TeamGridProps) {\n return (\n <div className={cn('grid gap-6', COLS[columns] ?? COLS['3'])} data-testid={testId}>\n {(members ?? []).map((m, i) => (\n <BlockLink\n key={i}\n href={m.href}\n linkComponent={linkComponent}\n className={cn('block h-full', m.href && 'group')}\n >\n <Card\n variant=\"outline\"\n className={cn(\n 'flex h-full flex-col items-center p-6 text-center',\n m.href && 'transition-colors group-hover:border-primary/40'\n )}\n data-testid={testId && `${testId}-item-${i}`}\n >\n <Avatar className=\"size-20\">\n {m.avatarUrl && <AvatarImage src={m.avatarUrl} alt={m.name} />}\n <AvatarFallback>{initials(m.name || '?')}</AvatarFallback>\n </Avatar>\n <h3 className=\"mt-4 text-base font-semibold tracking-tight\">{m.name}</h3>\n {m.role && <p className=\"text-sm text-primary\">{m.role}</p>}\n {m.bio && <p className=\"mt-2 text-sm leading-relaxed text-muted-foreground\">{m.bio}</p>}\n </Card>\n </BlockLink>\n ))}\n </div>\n )\n}\n","import { cn } from '@arbidocs/react/ui'\n\nexport interface StepItem {\n title: string\n description?: string\n}\n\nexport interface StepsProps {\n steps: StepItem[]\n /** `timeline` draws a connected vertical rail; `numbered` is a horizontal grid. */\n variant?: 'numbered' | 'timeline'\n testId?: string\n}\n\n/** A process / how-it-works sequence, as numbered cards or a vertical timeline. */\nexport function Steps({ steps, variant = 'numbered', testId }: StepsProps) {\n const list = steps ?? []\n if (variant === 'timeline') {\n return (\n <ol className=\"relative ml-3 border-l border-border\" data-testid={testId}>\n {list.map((s, i) => (\n <li key={i} className=\"mb-8 ml-6 last:mb-0\" data-testid={testId && `${testId}-item-${i}`}>\n <span className=\"absolute -left-3 flex size-6 items-center justify-center rounded-full bg-primary text-xs font-semibold text-primary-foreground\">\n {i + 1}\n </span>\n <h3 className=\"text-base font-semibold tracking-tight\">{s.title}</h3>\n {s.description && (\n <p className=\"mt-1 text-sm leading-relaxed text-muted-foreground\">{s.description}</p>\n )}\n </li>\n ))}\n </ol>\n )\n }\n return (\n <div\n className={cn('grid gap-6', list.length >= 4 ? 'md:grid-cols-4' : 'sm:grid-cols-3')}\n data-testid={testId}\n >\n {list.map((s, i) => (\n <div key={i} data-testid={testId && `${testId}-item-${i}`}>\n <span className=\"flex size-9 items-center justify-center rounded-full bg-primary/10 text-sm font-semibold text-primary\">\n {i + 1}\n </span>\n <h3 className=\"mt-4 text-base font-semibold tracking-tight\">{s.title}</h3>\n {s.description && (\n <p className=\"mt-2 text-sm leading-relaxed text-muted-foreground\">{s.description}</p>\n )}\n </div>\n ))}\n </div>\n )\n}\n","import { Quote } from 'lucide-react'\nimport { Avatar, AvatarFallback, AvatarImage, Card, cn } from '@arbidocs/react/ui'\nimport { initials } from '../lib/format'\n\nexport interface TestimonialItem {\n quote: string\n author?: string\n role?: string\n avatarUrl?: string\n}\n\nexport interface TestimonialGridProps {\n items: TestimonialItem[]\n columns?: '2' | '3'\n testId?: string\n}\n\nconst COLS: Record<'2' | '3', string> = {\n '2': 'sm:grid-cols-2',\n '3': 'sm:grid-cols-2 lg:grid-cols-3',\n}\n\n/** A grid of multiple pull-quote testimonials. */\nexport function TestimonialGrid({ items, columns = '3', testId }: TestimonialGridProps) {\n return (\n <div className={cn('grid gap-6', COLS[columns] ?? COLS['3'])} data-testid={testId}>\n {(items ?? []).map((t, i) => (\n <Card\n key={i}\n variant=\"outline\"\n className=\"flex h-full flex-col p-6\"\n data-testid={testId && `${testId}-item-${i}`}\n >\n <Quote className=\"size-6 text-primary/40\" aria-hidden />\n <blockquote className=\"mt-3 flex-1 text-base leading-relaxed\">{t.quote}</blockquote>\n {(t.author || t.avatarUrl) && (\n <div className=\"mt-5 flex items-center gap-3\">\n <Avatar className=\"size-9\">\n {t.avatarUrl && <AvatarImage src={t.avatarUrl} alt={t.author ?? ''} />}\n <AvatarFallback>{initials(t.author || '?')}</AvatarFallback>\n </Avatar>\n <div>\n {t.author && <p className=\"text-sm font-semibold\">{t.author}</p>}\n {t.role && <p className=\"text-xs text-muted-foreground\">{t.role}</p>}\n </div>\n </div>\n )}\n </Card>\n ))}\n </div>\n )\n}\n"]}