@theokit/ui 0.13.0 → 0.14.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.
Files changed (48) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/README.md +5 -5
  3. package/dist/chunk-DMVWZWU5.js +62 -0
  4. package/dist/chunk-DMVWZWU5.js.map +1 -0
  5. package/dist/{chunk-M6JIC5PU.js → chunk-ETMMPUFO.js} +3 -3
  6. package/dist/{chunk-M6JIC5PU.js.map → chunk-ETMMPUFO.js.map} +1 -1
  7. package/dist/{chunk-VT7VSYH5.js → chunk-KE773ODY.js} +4 -4
  8. package/dist/{chunk-VT7VSYH5.js.map → chunk-KE773ODY.js.map} +1 -1
  9. package/dist/{chunk-BYZ6OFH4.js → chunk-KPYORAP6.js} +6 -6
  10. package/dist/chunk-KPYORAP6.js.map +1 -0
  11. package/dist/chunk-UCGROAS4.js +61 -0
  12. package/dist/chunk-UCGROAS4.js.map +1 -0
  13. package/dist/{chunk-LKRNUSKZ.js → chunk-W6KORCLX.js} +4 -4
  14. package/dist/chunk-W6KORCLX.js.map +1 -0
  15. package/dist/components.css +1 -1
  16. package/dist/composites/metric-card/index.js +5 -0
  17. package/dist/composites/metric-card/index.js.map +1 -0
  18. package/dist/composites/stability-bundle-viewer/index.js +1 -1
  19. package/dist/composites/status-indicator/index.js +4 -0
  20. package/dist/composites/status-indicator/index.js.map +1 -0
  21. package/dist/index.d.ts +165 -40
  22. package/dist/index.js +863 -612
  23. package/dist/index.js.map +1 -1
  24. package/dist/{plugin-D5xmXqYb.d.ts → plugin-Atb0VKtr.d.ts} +1 -1
  25. package/dist/preset-v3-legacy.js +1 -1
  26. package/dist/preset-v3-legacy.js.map +1 -1
  27. package/dist/primitives/gateway-status-indicator/index.js +1 -1
  28. package/dist/primitives/run-status-pill/index.js +1 -1
  29. package/dist/primitives/update-banner/index.js +1 -1
  30. package/dist/slide/index.d.ts +2 -2
  31. package/dist/slide/plugins/emoji/index.d.ts +1 -1
  32. package/dist/slide/plugins/math/index.d.ts +1 -1
  33. package/dist/slide/plugins/mermaid/index.d.ts +1 -1
  34. package/dist/slide/plugins/shiki/index.d.ts +1 -1
  35. package/dist/slide-deck/index.d.ts +1 -1
  36. package/dist/tokens-v4.css +77 -41
  37. package/dist/tokens.css +158 -73
  38. package/dist/whiteboard/index.d.ts +2 -2
  39. package/package.json +18 -2
  40. package/registry/index.json +12 -0
  41. package/registry/r/metric-card.json +23 -0
  42. package/registry/r/safe-href.json +1 -1
  43. package/registry/r/status-indicator.json +20 -0
  44. package/registry/r/tailwind-preset.json +1 -1
  45. package/registry/r/theme-provider.json +6 -6
  46. package/registry/r/tokens.json +1 -1
  47. package/dist/chunk-BYZ6OFH4.js.map +0 -1
  48. package/dist/chunk-LKRNUSKZ.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/themes/density.ts","../src/themes/theme-provider.tsx","../src/themes/theme-script.tsx","../src/themes/theme-switcher.tsx","../src/themes/violet-forge.ts","../src/themes/classic-paper.ts","../src/themes/aurora-terminal.ts","../src/themes/define.ts","../src/themes/color.ts","../src/themes/vercel-mono.ts","../src/themes/github-dark.ts","../src/themes/dracula.ts","../src/themes/one-dark.ts","../src/themes/anthropic-style.ts","../src/themes/openai-style.ts","../src/themes/linear-glass.ts","../src/themes/index.ts","../src/theo-ui-provider.tsx"],"names":["createContext","STYLE_ELEMENT_ID","safe","value","active","useContext","jsx"],"mappings":"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","file":"index.js","sourcesContent":["\"use client\";\n\n/**\n * `useDensity()` — runtime control of the global UI density.\n *\n * FAANG-modern dashboards (Vercel / Linear / Stripe) ship at \"comfortable\"\n * density: form controls at 36px, body text 14px, card padding 20px. For\n * dense surfaces (data tables, agent tool lists, admin grids) `compact` mode\n * tightens form controls to 32px without touching `sm`/`lg` props the\n * consumer already passed. Spacious mode bumps the default up to 44px for\n * accessibility-first surfaces.\n *\n * Mechanism (EC-1 fix from edge-case review 2026-05-22):\n * - ThemeProvider sets `data-density=\"{value}\"` on `<html>`.\n * - A `<style id=\"theo-ui-density-vars\">` block defines CSS custom\n * properties under each `[data-density=...]` selector:\n * --theo-control-h, --theo-control-px\n * - Form-control `cva` variants for the `md` tier read from these vars:\n * `md: \"h-[var(--theo-control-h,2.25rem)] px-[var(--theo-control-px,0.875rem)] text-body-sm\"`\n * - `sm` and `lg` variants stay hardcoded → explicit `size` prop always\n * wins over density.\n *\n * Plan: `.claude/knowledge-base/plans/faang-density-tightening-plan.md` T4.1.\n */\nimport { createContext, useContext } from \"react\";\n\nexport type Density = \"compact\" | \"comfortable\" | \"spacious\";\n\nexport interface DensityContextValue {\n density: Density;\n setDensity: (next: Density) => void;\n}\n\nexport const DensityContext = createContext<DensityContextValue | undefined>(undefined);\n\nconst STYLE_ELEMENT_ID = \"theo-ui-density-vars\";\n\nconst DENSITY_CSS = `[data-density=\"compact\"] { --theo-control-h: 2rem; --theo-control-px: 0.75rem; }\n[data-density=\"comfortable\"] { --theo-control-h: 2.25rem; --theo-control-px: 0.875rem; }\n[data-density=\"spacious\"] { --theo-control-h: 2.75rem; --theo-control-px: 1rem; }\n`;\n\n/**\n * Inject (idempotent) the density CSS variable definitions into the document\n * head. Returns true if the style tag was newly created. Safe to call on\n * every ThemeProvider mount — duplicates are skipped.\n */\nexport function injectDensityCss(): boolean {\n if (typeof document === \"undefined\") return false;\n if (document.getElementById(STYLE_ELEMENT_ID)) return false;\n const style = document.createElement(\"style\");\n style.id = STYLE_ELEMENT_ID;\n style.textContent = DENSITY_CSS;\n document.head.appendChild(style);\n return true;\n}\n\n/**\n * Read the current density from the active ThemeProvider context. Throws\n * outside the provider so misuse fails loud — analogous to `useTheme`.\n */\nexport function useDensity(): DensityContextValue {\n const ctx = useContext(DensityContext);\n if (!ctx) {\n throw new Error(\"useDensity must be used inside <ThemeProvider>.\");\n }\n return ctx;\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { JSX, ReactNode } from \"react\";\nimport { safeHref } from \"../lib/safe-href.js\";\nimport { type Density, DensityContext, injectDensityCss } from \"./density.js\";\nimport type { ColorScale, Theme, ThemeMode } from \"./types.js\";\n\ninterface ThemeContextValue {\n /** Active theme (full descriptor). */\n theme: Theme;\n /** Active mode: light or dark. */\n mode: ThemeMode;\n /** All available themes. */\n themes: Theme[];\n /** Swap the active theme by name. */\n setTheme: (name: string) => void;\n /** Set light/dark explicitly. */\n setMode: (mode: ThemeMode) => void;\n /** Toggle light <> dark. */\n toggleMode: () => void;\n /** Register an additional theme at runtime. */\n registerTheme: (theme: Theme) => void;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | undefined>(undefined);\n\nconst STYLE_ELEMENT_ID = \"theo-ui-theme-vars\";\n\n// T3.2 (SEC-001): allowlist validators for theme values. injectThemeCss\n// interpolates theme name + color values + font families into a <style>\n// textContent. Without validation, a theme object from an untrusted source\n// (e.g., a feature-flag service, a CMS) could inject arbitrary CSS via\n// closing the declaration with `}` or smuggling `url(...)` for exfiltration.\n// We reject rather than escape: themes are code, not user input. Invalid\n// values cause a dev-time throw (caller sees the problem); production\n// silently substitutes a safe fallback so a misconfigured theme can't\n// crash the app.\n\n// Color values. Multiple accepted shapes:\n// 1. Hex: `#fff`, `#0a0a0a`, `#0a0a0aff`.\n// 2. Fully-parenthesized CSS color functions: `oklch(...)`, `rgb(...)`,\n// `hsl(...)`, etc. Inner content restricted to digits/dots/spaces/\n// percent/slash/comma/dash/plus — no semicolons, no braces, no `url(`.\n// 3. HSL-component split (shadcn-ui convention used by the built-in\n// themes): `\"0 0% 100%\"`, `\"262 83% 58%\"` — space-separated numeric\n// components consumed via `hsl(var(--token))` in stylesheets.\n// 4. `var(--token)` references, optionally with a fallback value that\n// contains no parens/braces/semicolons.\n// 5. CSS keywords: `transparent`, `currentColor`, `inherit`, `initial`,\n// `unset`.\nconst COLOR_VALUE_PATTERN =\n /^(#[0-9a-fA-F]{3,8}|(?:oklch|oklab|rgb|rgba|hsl|hsla|lab|lch|color)\\(\\s*[\\d.\\s%,/+\\-]+\\s*\\)|-?\\d+(?:\\.\\d+)?%?(?:\\s+-?\\d+(?:\\.\\d+)?%?){1,3}|var\\(--[a-zA-Z0-9-]+(?:\\s*,\\s*[^();{}]+)?\\)|transparent|currentColor|inherit|initial|unset)$/;\n\n// Font family: word chars, spaces, commas, hyphens, dots, quotes. Excludes\n// parens (blocks `url(...)`) and semicolons (blocks declaration breakouts).\nconst FONT_FAMILY_PATTERN = /^[\\w\\s,\"'\\-.]+$/;\n\n// Theme name: kebab-case identifier. Excludes anything that could break out\n// of an attribute selector or inject additional rules.\nconst THEME_NAME_PATTERN = /^[a-z][a-z0-9-]*$/;\n\nconst IS_DEV = typeof process === \"undefined\" || process.env.NODE_ENV !== \"production\";\n\nfunction rejectOrFallback(scope: string, value: string, fallback: string): string {\n if (IS_DEV) {\n throw new Error(\n `[@theokit/ui] invalid ${scope} value: ${JSON.stringify(value)}. Theme values must match the allowlist (see src/themes/theme-provider.tsx). Refusing to inject potentially unsafe CSS.`,\n );\n }\n return fallback;\n}\n\nfunction validatedColor(token: string, value: string): string {\n if (COLOR_VALUE_PATTERN.test(value)) return value;\n return rejectOrFallback(`color \"${token}\"`, value, \"transparent\");\n}\n\nfunction validatedFontFamily(slot: string, value: string): string {\n if (FONT_FAMILY_PATTERN.test(value)) return value;\n return rejectOrFallback(`fontFamily \"${slot}\"`, value, \"inherit\");\n}\n\nfunction validatedThemeName(value: string): string {\n if (THEME_NAME_PATTERN.test(value)) return value;\n return rejectOrFallback(\"theme.name\", value, \"invalid-theme\");\n}\n\nfunction colorScaleToCss(name: string, mode: ThemeMode, colors: ColorScale): string {\n const safeName = validatedThemeName(name);\n const selector =\n mode === \"light\"\n ? `[data-theme=\"${safeName}\"]`\n : `[data-theme=\"${safeName}\"].dark, [data-theme=\"${safeName}\"][data-mode=\"dark\"]`;\n const decls = Object.entries(colors)\n .map(([token, value]) => ` --${token}: ${validatedColor(token, value)};`)\n .join(\"\\n\");\n return `${selector} {\\n${decls}\\n}`;\n}\n\nfunction fontsToCss(name: string, fonts: Theme[\"fonts\"]): string {\n const safeName = validatedThemeName(name);\n const display = validatedFontFamily(\"display\", fonts.display);\n const body = validatedFontFamily(\"body\", fonts.body);\n const mono = validatedFontFamily(\"mono\", fonts.mono);\n return `[data-theme=\"${safeName}\"] {\\n --font-display: ${display};\\n --font-body: ${body};\\n --font-mono: ${mono};\\n}`;\n}\n\nfunction injectThemeCss(themes: Theme[]): void {\n if (typeof document === \"undefined\") return;\n let style = document.getElementById(STYLE_ELEMENT_ID) as HTMLStyleElement | null;\n if (!style) {\n style = document.createElement(\"style\");\n style.id = STYLE_ELEMENT_ID;\n document.head.appendChild(style);\n }\n const blocks: string[] = [];\n for (const theme of themes) {\n blocks.push(fontsToCss(theme.name, theme.fonts));\n blocks.push(colorScaleToCss(theme.name, \"light\", theme.light));\n blocks.push(colorScaleToCss(theme.name, \"dark\", theme.dark));\n }\n style.textContent = blocks.join(\"\\n\\n\");\n}\n\n/**\n * loadThemeFonts — idempotently inject `<link rel=\"stylesheet\">` for each\n * font URL declared by the theme.\n *\n * T4.2: the previous implementation kept a module-level `Set` to track\n * already-injected URLs. That singleton broke test isolation (state\n * leaked across renders) and silently skipped injection in micro-frontend\n * setups with multiple `<ThemeProvider>` mounts. Replaced with a DOM\n * check: we query `document.head` for an existing link with the same\n * `href` before appending a new one. The DOM is the single source of\n * truth; no shared state across instances.\n */\nfunction loadThemeFonts(theme: Theme): void {\n if (typeof document === \"undefined\") return;\n if (!theme.fontUrls) return;\n for (const url of theme.fontUrls) {\n // Re-audit NEW-001 (SSRF, LOW): defang dangerous protocols on\n // consumer-provided font URLs. Built-in themes use\n // fonts.googleapis.com/gstatic.com — safe. registerTheme accepts\n // arbitrary objects at runtime; a malicious theme could try to inject\n // javascript:/data:text/html via fontUrls. safeHref returns undefined\n // for dangerous protocols, which we skip silently.\n const safe = safeHref(url);\n if (!safe) continue;\n if (document.head.querySelector(`link[rel=\"stylesheet\"][href=\"${CSS.escape(safe)}\"]`)) {\n continue;\n }\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = safe;\n document.head.appendChild(link);\n }\n}\n\ninterface ThemeProviderProps {\n children: ReactNode;\n /**\n * Theme to start with. Must match the `name` of an entry in `themes`.\n * Defaults to `\"violet-forge\"` for backward compat — if you don't pass\n * `violet-forge` in `themes`, set this prop explicitly.\n */\n defaultTheme?: string;\n /** Mode to start with. Defaults to `\"dark\"` (library is dark-first). */\n defaultMode?: ThemeMode;\n /**\n * Available themes. **Required**: ThemeProvider does not auto-include any\n * built-in theme since v0.1.0-next.0 — pass `builtinThemes` for all three\n * Violet Forge defaults, or your own array for a slimmer bundle.\n *\n * Migration: consumers previously calling `<ThemeProvider>` without this\n * prop now must pass `themes={builtinThemes}` (or use `<TheoUIProvider>`\n * which defaults to `builtinThemes` for you).\n */\n themes: Theme[];\n /**\n * Persist selection in localStorage under this key. Pass `null` to disable.\n * Default: \"theo-ui:theme\".\n */\n storageKey?: string | null;\n /**\n * Initial density. Drives `data-density` on `<html>` and the `--theo-control-h`\n * / `--theo-control-px` CSS vars consumed by form-control `md` variants.\n * Defaults to `\"comfortable\"` (36px controls — FAANG-tier modern density).\n * Plan: faang-density-tightening (D3).\n */\n defaultDensity?: Density;\n}\n\n/**\n * Storage failure diagnostic — dev-only one-line warn so engineers see\n * something when localStorage throws (Safari private mode, blocked\n * third-party cookies, sandboxed iframes). In production we stay silent;\n * runtime behavior is fail-safe (state still lives in memory).\n *\n * Per HIGH-006: silent catches diverge from the \"fail loud\" principle\n * declared in the global CLAUDE.md. We accept silence in prod because the\n * fallback is correct, but we surface a single warn per call site in dev.\n */\nfunction warnStorageFailure(scope: string, err: unknown): void {\n if (typeof process === \"undefined\" || process.env.NODE_ENV === \"production\") return;\n // biome-ignore lint/suspicious/noConsole: dev-only diagnostic for storage failures (HIGH-006)\n console.warn(`[@theokit/ui] theme storage failure (${scope}):`, err);\n}\n\n/**\n * ThemeProvider — central registry + runtime switcher for Theo themes.\n *\n * Behavior:\n * 1. On mount, injects a `<style id=\"theo-ui-theme-vars\">` element with\n * one CSS block per theme (`[data-theme=\"<name>\"] { --token: ... }`).\n * 2. Sets `data-theme` and `data-mode` on `<html>` so any element nested\n * below inherits the right tokens (the Tailwind config consumes them).\n * 3. Lazy-loads theme font URLs by injecting `<link rel=\"stylesheet\">`.\n * 4. Optionally persists choice in localStorage.\n */\nfunction ThemeProvider({\n children,\n defaultTheme = \"violet-forge\",\n defaultMode = \"dark\",\n themes: themesProp,\n storageKey = \"theo-ui:theme\",\n defaultDensity = \"comfortable\",\n}: ThemeProviderProps): JSX.Element {\n // Themes prop is required since v0.1.0-next.0 — see migration note in\n // the JSDoc on ThemeProviderProps. Pass `builtinThemes` for the legacy\n // default behavior (violet-forge + classic-paper + aurora-terminal), or\n // an array of your own. Empty array is rejected: ThemeProvider has no\n // valid state without at least one registered theme.\n if (!themesProp || themesProp.length === 0) {\n throw new Error(\n \"<ThemeProvider> requires the `themes` prop with at least one Theme. \" +\n \"Pass `themes={builtinThemes}` for the Violet Forge defaults (importable \" +\n \"via the package barrel), or use <TheoUIProvider> which sets this for you.\",\n );\n }\n\n // T3.2 (SEC-001): eager validation. Calling validatedColor/FontFamily/\n // ThemeName here ensures CSS-injection attempts throw at construction\n // time rather than inside the deferred useEffect that injects the\n // <style>. Production-mode fallbacks keep the app rendering even if a\n // theme has bad values.\n //\n // Re-audit NEW-3: wrapped in useMemo so the validation cost (O(themes *\n // tokens), ~60 ops per built-in theme) only runs when themesProp's\n // reference changes — not on every parent re-render. Consumers passing\n // inline array literals (`themes={[violetForge, classicPaper]}`) would\n // otherwise pay this on every parent update.\n const mergedThemes = useMemo<Theme[]>(() => {\n for (const t of themesProp) {\n validatedThemeName(t.name);\n validatedFontFamily(\"display\", t.fonts.display);\n validatedFontFamily(\"body\", t.fonts.body);\n validatedFontFamily(\"mono\", t.fonts.mono);\n for (const [token, value] of Object.entries(t.light)) {\n validatedColor(token, value);\n }\n for (const [token, value] of Object.entries(t.dark)) {\n validatedColor(token, value);\n }\n }\n // Dedup by theme name; last writer wins (allows registerTheme override).\n const map = new Map<string, Theme>();\n for (const t of themesProp) map.set(t.name, t);\n return Array.from(map.values());\n }, [themesProp]);\n\n const [themes, setThemes] = useState<Theme[]>(mergedThemes);\n\n // Re-sync state when the `themes` prop changes between renders. Avoids the\n // common pitfall where the user passes a different array later and the\n // initial-state-only seed silently ignores the change.\n useEffect(() => {\n setThemes(mergedThemes);\n }, [mergedThemes]);\n\n // SSR-safe initialization (0.6.3-next.0 hydration-mismatch fix).\n //\n // Previously: `useState(() => localStorage.getItem(…))`. The initializer\n // ran on BOTH server (no `window`, returned default) AND client at\n // hydration time (with `window`, returned the stored value). The two\n // results disagreed → React threw a hydration error on every page load\n // for any user who had previously changed themes, and re-rendered the\n // entire tree from scratch — defeating SSR.\n //\n // Fix: initialize with the SSR default ALWAYS. Promote to the stored\n // value in a post-mount `useEffect` below. The 1-frame visual flicker\n // is mitigated by the optional `<ThemeScript>` component, which sets\n // `data-theme` / `data-mode` / `data-density` on `<html>` before React\n // hydrates — see `theme-script.tsx`.\n //\n // The `hydratedRef` flag below guards the persist effect so that\n // first-mount writes (with the SSR default values) don't clobber the\n // user's stored preference in the brief window between mount and the\n // post-mount hydration effect.\n const [themeName, setThemeName] = useState<string>(defaultTheme);\n const [mode, setModeState] = useState<ThemeMode>(defaultMode);\n const [density, setDensityState] = useState<Density>(defaultDensity);\n\n // First-run guard for the persist effect below. On initial mount the\n // state is the SSR-safe default; we MUST NOT clobber the user's stored\n // preference with that default before the post-mount hydration effect\n // can promote it. After the first persist-effect call returns early,\n // every subsequent change (post-hydration setState OR user-driven)\n // persists normally.\n const skipFirstPersistRef = useRef(true);\n\n // Post-mount hydration: read localStorage and promote stored values to\n // state. Runs ONCE on mount. If `storageKey` is null or no value is\n // stored, this is a no-op — state stays at the SSR defaults.\n useEffect(() => {\n if (typeof window === \"undefined\" || !storageKey) return;\n try {\n const storedName = window.localStorage.getItem(`${storageKey}:name`);\n const storedMode = window.localStorage.getItem(`${storageKey}:mode`);\n const storedDensity = window.localStorage.getItem(`${storageKey}:density`);\n if (storedName) setThemeName(storedName);\n if (storedMode === \"dark\" || storedMode === \"light\") setModeState(storedMode);\n if (\n storedDensity === \"compact\" ||\n storedDensity === \"comfortable\" ||\n storedDensity === \"spacious\"\n ) {\n setDensityState(storedDensity);\n }\n } catch (err) {\n warnStorageFailure(\"read theme + mode + density\", err);\n }\n }, [storageKey]);\n\n // Inject CSS vars whenever the themes list changes.\n useEffect(() => {\n injectThemeCss(themes);\n }, [themes]);\n\n // Apply data-theme + data-mode + data-density to <html>, load fonts,\n // inject density CSS vars.\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n const active = themes.find((t) => t.name === themeName) ?? themes[0];\n if (!active) return;\n document.documentElement.setAttribute(\"data-theme\", active.name);\n document.documentElement.setAttribute(\"data-mode\", mode);\n document.documentElement.setAttribute(\"data-density\", density);\n document.documentElement.classList.toggle(\"dark\", mode === \"dark\");\n loadThemeFonts(active);\n injectDensityCss();\n }, [themeName, mode, density, themes]);\n\n // Persist on change.\n //\n // The first run is SKIPPED via `skipFirstPersistRef`: state at mount\n // is the SSR-safe default. If we wrote it to storage immediately,\n // we'd clobber the user's stored preference between mount and the\n // post-mount hydration effect that promotes the stored value. After\n // the first call, every subsequent run persists — whether the change\n // came from the hydration effect (no-op write back of the stored\n // value) or a user-driven `setTheme` / `toggleMode` / `setDensity`.\n useEffect(() => {\n if (skipFirstPersistRef.current) {\n skipFirstPersistRef.current = false;\n return;\n }\n if (typeof window === \"undefined\" || !storageKey) return;\n try {\n window.localStorage.setItem(`${storageKey}:name`, themeName);\n window.localStorage.setItem(`${storageKey}:mode`, mode);\n window.localStorage.setItem(`${storageKey}:density`, density);\n } catch (err) {\n // Storage may fail in private mode; behavior remains correct (state\n // lives in memory). Per HIGH-006 we surface a one-time dev warning so\n // the engineer sees something instead of complete silence.\n warnStorageFailure(\"persist theme + mode + density\", err);\n }\n }, [themeName, mode, density, storageKey]);\n\n const setTheme = useCallback((name: string) => setThemeName(name), []);\n const setMode = useCallback((next: ThemeMode) => setModeState(next), []);\n const toggleMode = useCallback(\n () => setModeState((cur) => (cur === \"light\" ? \"dark\" : \"light\")),\n [],\n );\n const setDensity = useCallback((next: Density) => setDensityState(next), []);\n const registerTheme = useCallback((theme: Theme) => {\n setThemes((cur) => {\n const idx = cur.findIndex((t) => t.name === theme.name);\n if (idx >= 0) {\n const next = cur.slice();\n next[idx] = theme;\n return next;\n }\n return [...cur, theme];\n });\n }, []);\n\n // themes[0] is guaranteed non-undefined by the constructor-time check\n // above (themesProp is non-empty); the non-null assert encodes that\n // invariant for TypeScript, which can't trace it through useState.\n // biome-ignore lint/style/noNonNullAssertion: T2.5 runtime invariant — themesProp non-empty validated at top of function\n const active = themes.find((t) => t.name === themeName) ?? themes[0]!;\n\n const value = useMemo<ThemeContextValue>(\n () => ({\n theme: active,\n mode,\n themes,\n setTheme,\n setMode,\n toggleMode,\n registerTheme,\n }),\n [active, mode, themes, setTheme, setMode, toggleMode, registerTheme],\n );\n\n const densityValue = useMemo(() => ({ density, setDensity }), [density, setDensity]);\n\n return (\n <ThemeContext.Provider value={value}>\n <DensityContext.Provider value={densityValue}>{children}</DensityContext.Provider>\n </ThemeContext.Provider>\n );\n}\n\n/**\n * useTheme — access theme state from any component inside <ThemeProvider>.\n * Throws if used outside the provider — fail-fast.\n */\nfunction useTheme(): ThemeContextValue {\n const ctx = useContext(ThemeContext);\n if (!ctx) {\n throw new Error(\"useTheme must be used inside <ThemeProvider>.\");\n }\n return ctx;\n}\n\nexport { ThemeProvider, useTheme };\n","/**\n * ThemeScript — inline `<script>` for SSR-safe theme initialization.\n *\n * Renders a synchronous script that runs BEFORE React hydration. It reads the\n * persisted theme + mode from localStorage (or falls back to the defaults) and\n * sets `data-theme` / `data-mode` on `<html>`, plus the `.dark` class when\n * mode is dark. This eliminates FOUC and avoids hydration mismatch warnings\n * when the user's persisted choice differs from the SSR defaults.\n *\n * Place this in `<head>` ABOVE `<body>`. The component does not need to live\n * inside `<ThemeProvider>`.\n *\n * Security: every interpolated value is passed through `safe()`, which both\n * `JSON.stringify`s the value AND escapes `<` to `<`. The `<` escape is\n * REQUIRED because `JSON.stringify` alone does NOT escape `/`, so a payload\n * like `\"</script><script>alert(1)</script>\"` would otherwise break out of\n * the inline `<script>` tag even though it stays inside a JS string literal.\n * (The browser tokenizes `</script>` at the HTML layer before JS parses.)\n *\n * Example (Next.js App Router): see docs/design-system.md → SSR section.\n * Pass `defaultTheme` and `defaultMode` to align with the consumer's\n * preferred initial state. Always wrap the root in `<html\n * suppressHydrationWarning>` to silence the expected one-render diff.\n */\nimport type { JSX } from \"react\";\nimport type { ThemeMode } from \"./types.js\";\n\ninterface ThemeScriptProps {\n /** Theme name to apply when no persisted value exists. Default `\"violet-forge\"`. */\n defaultTheme?: string;\n /** Mode to apply when no persisted value exists. Default `\"dark\"`. */\n defaultMode?: ThemeMode;\n /**\n * Density to apply when no persisted value exists. Default `\"comfortable\"`.\n * Mirrors `ThemeProvider`'s `defaultDensity` so the inline-script and\n * the React provider agree on the SSR-default density (and the\n * `data-density` attribute set by this script matches what\n * `ThemeProvider` promotes via its post-mount hydration effect).\n */\n defaultDensity?: \"compact\" | \"comfortable\" | \"spacious\";\n /**\n * localStorage namespace. Must match the `storageKey` passed to\n * `<ThemeProvider>`. Default `\"theo-ui:theme\"`. Pass `null` to disable\n * persistence reads (the script will always apply defaults).\n */\n storageKey?: string | null;\n}\n\n/**\n * Encode a value for safe embedding inside an inline `<script>` block.\n *\n * `JSON.stringify` does NOT escape `/` by default, so `\"</script>\"` survives\n * as the literal three-character sequence inside the resulting string. When\n * that string is then rendered inside `<script>...</script>`, the browser's\n * HTML tokenizer sees `</script>` and ends the script tag — regardless of\n * whether the JS parser would have kept it inside a string. Escaping `<` to\n * its Unicode escape `<` preserves JS semantics (the JS parser still\n * resolves the escape to `<`) while making the HTML tokenizer happy.\n *\n * Reference: OWASP \"JSON-in-script\" guidance; React's own server-renderer\n * applies the same escape for inline JSON.\n */\nfunction safe(value: unknown): string {\n return JSON.stringify(value).replace(/</g, \"\\\\u003c\");\n}\n\nfunction buildScript(\n defaultTheme: string,\n defaultMode: ThemeMode,\n defaultDensity: \"compact\" | \"comfortable\" | \"spacious\",\n storageKey: string | null,\n): string {\n const k = safe(storageKey);\n const t = safe(defaultTheme);\n const m = safe(defaultMode);\n const dn = safe(defaultDensity);\n return `(function(){try{var k=${k};var d=document.documentElement;var t=null;var m=null;var dn=null;if(k){t=localStorage.getItem(k+\":name\");m=localStorage.getItem(k+\":mode\");dn=localStorage.getItem(k+\":density\");}d.setAttribute(\"data-theme\",t||${t});d.setAttribute(\"data-mode\",m||${m});d.setAttribute(\"data-density\",dn||${dn});if((m||${m})===\"dark\"){d.classList.add(\"dark\");}}catch(e){}})();`;\n}\n\nfunction ThemeScript({\n defaultTheme = \"violet-forge\",\n defaultMode = \"dark\",\n defaultDensity = \"comfortable\",\n storageKey = \"theo-ui:theme\",\n}: ThemeScriptProps): JSX.Element {\n const code = buildScript(defaultTheme, defaultMode, defaultDensity, storageKey);\n // biome-ignore lint/security/noDangerouslySetInnerHtml: payload is JSON.stringify-encoded literals (no user input); intentional for SSR theme bootstrap before React hydrates\n return <script suppressHydrationWarning dangerouslySetInnerHTML={{ __html: code }} />;\n}\n\nexport { ThemeScript };\n","import * as DropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport { Check, Moon, Palette, Sun } from \"lucide-react\";\nimport type { JSX } from \"react\";\nimport { cn } from \"../lib/cn.js\";\nimport { useTheme } from \"./theme-provider.js\";\n\ninterface ThemeSwitcherProps {\n className?: string;\n /** If true, renders mode toggle inline next to the theme menu. */\n showModeToggle?: boolean;\n}\n\n/**\n * ThemeSwitcher — drop-in theme + mode picker.\n *\n * Two affordances:\n * - Palette dropdown lists all registered themes with the active marked.\n * - Optional sun/moon button toggles light/dark.\n *\n * Stateless wrt itself — pulls state from `useTheme()`.\n */\nfunction ThemeSwitcher({ className, showModeToggle = true }: ThemeSwitcherProps): JSX.Element {\n const { theme, themes, setTheme, mode, toggleMode } = useTheme();\n\n return (\n <div className={cn(\"inline-flex items-center gap-1\", className)}>\n {/* LOW-006: announce theme + mode changes to assistive tech. The\n * Provider applies tokens via `data-theme`/`data-mode` (visual cue),\n * but screen-reader users get no feedback without this aria-live\n * region. Polite so it doesn't interrupt the user's flow. */}\n <span aria-live=\"polite\" aria-atomic=\"true\" className=\"sr-only\">\n Theme: {theme.label}, mode: {mode}\n </span>\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <button\n type=\"button\"\n aria-label={`Theme: ${theme.label}`}\n className={cn(\n \"inline-flex h-9 items-center gap-2 rounded-lg border border-border/60 bg-card px-3\",\n \"font-medium font-sans text-body-sm text-foreground\",\n \"transition-colors hover:bg-muted\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n )}\n >\n <Palette className=\"size-4 text-primary\" aria-hidden=\"true\" />\n <span>{theme.label}</span>\n </button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n align=\"end\"\n sideOffset={6}\n className={cn(\n \"z-50 min-w-[16rem] overflow-hidden rounded-lg border bg-popover p-1 text-popover-foreground shadow-md\",\n \"data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:animate-in\",\n \"data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:animate-out\",\n )}\n >\n {themes.map((t) => (\n <DropdownMenu.Item\n key={t.name}\n onSelect={() => setTheme(t.name)}\n className={cn(\n \"flex cursor-pointer items-start justify-between gap-3 rounded-md px-2 py-2\",\n \"focus:bg-muted focus:outline-none data-[highlighted]:bg-muted\",\n )}\n >\n <span className=\"flex min-w-0 flex-col\">\n <span className=\"font-medium text-body-sm\">{t.label}</span>\n {t.description ? (\n <span className=\"text-body-sm text-muted-foreground\">{t.description}</span>\n ) : null}\n </span>\n {t.name === theme.name ? (\n <Check className=\"mt-1 size-4 shrink-0 text-primary\" aria-hidden=\"true\" />\n ) : null}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n\n {showModeToggle ? (\n <button\n type=\"button\"\n onClick={toggleMode}\n aria-label={`Switch to ${mode === \"light\" ? \"dark\" : \"light\"} mode`}\n className={cn(\n \"inline-flex size-9 items-center justify-center rounded-lg border border-border/60 bg-card\",\n \"text-foreground transition-colors hover:bg-muted\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n )}\n >\n {mode === \"light\" ? <Moon className=\"size-4\" /> : <Sun className=\"size-4\" />}\n </button>\n ) : null}\n </div>\n );\n}\n\nexport { ThemeSwitcher };\n","import type { Theme } from \"./types.js\";\n\n/**\n * Violet Forge — the default Theo theme.\n *\n * Identity: Theo violet primary (#7C3AED), burnt sienna accent (#C96442),\n * Vercel-style neutral surfaces (pure white light / charcoal dark),\n * Geist Sans + Geist Mono throughout.\n *\n * Source of truth for `data-theme` overrides. Values mirror\n * src/styles/tokens.css for the default `:root`.\n */\nexport const violetForge: Theme = {\n name: \"violet-forge\",\n label: \"Violet Forge\",\n description: \"Theo default — violet primary, burnt sienna accent, Geist Sans + Geist Mono.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"0 0% 100%\",\n foreground: \"0 0% 4%\",\n card: \"0 0% 100%\",\n \"card-foreground\": \"0 0% 4%\",\n popover: \"0 0% 100%\",\n \"popover-foreground\": \"0 0% 4%\",\n primary: \"262 83% 58%\",\n \"primary-deep\": \"263 70% 42%\",\n \"primary-glow\": \"263 90% 76%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"0 0% 96%\",\n \"secondary-foreground\": \"0 0% 4%\",\n accent: \"15 54% 53%\",\n \"accent-deep\": \"15 55% 40%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"0 0% 96%\",\n \"muted-foreground\": \"0 0% 45%\",\n border: \"0 0% 91%\",\n input: \"0 0% 91%\",\n ring: \"262 83% 58%\",\n success: \"142 71% 36%\",\n \"success-foreground\": \"0 0% 100%\",\n warning: \"33 92% 44%\",\n \"warning-foreground\": \"0 0% 100%\",\n destructive: \"0 72% 51%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"217 91% 60%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n dark: {\n background: \"0 0% 4%\",\n foreground: \"0 0% 96%\",\n card: \"0 0% 7%\",\n \"card-foreground\": \"0 0% 96%\",\n popover: \"0 0% 9%\",\n \"popover-foreground\": \"0 0% 96%\",\n primary: \"262 83% 58%\",\n \"primary-deep\": \"263 70% 42%\",\n \"primary-glow\": \"263 90% 76%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"0 0% 11%\",\n \"secondary-foreground\": \"0 0% 96%\",\n accent: \"15 54% 53%\",\n \"accent-deep\": \"15 55% 40%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"0 0% 11%\",\n \"muted-foreground\": \"0 0% 60%\",\n border: \"0 0% 16%\",\n input: \"0 0% 11%\",\n ring: \"262 83% 58%\",\n success: \"152 79% 52%\",\n \"success-foreground\": \"0 0% 4%\",\n warning: \"38 92% 50%\",\n \"warning-foreground\": \"0 0% 4%\",\n destructive: \"350 100% 65%\",\n \"destructive-foreground\": \"0 0% 4%\",\n info: \"213 100% 70%\",\n \"info-foreground\": \"0 0% 4%\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * Classic Paper — light-primary with deep-navy dark mirror; Inter + JetBrains Mono.\n *\n * Identity: warm paper background, deep navy foreground, indigo primary\n * (closer to traditional dashboard SaaS), Inter throughout. Maximizes\n * legibility and familiarity — use when reading endurance > differentiation.\n *\n * Provides a full `dark` palette mirror so consumers toggling `.dark` still\n * get a coherent surface (it is not \"light-only\" by accident).\n */\nexport const classicPaper: Theme = {\n name: \"classic-paper\",\n label: \"Classic Paper\",\n description: \"Inter + paper background. Maximum legibility, conservative.\",\n fonts: {\n display: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n mono: '\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;700&display=swap\",\n ],\n light: {\n background: \"36 30% 98%\",\n foreground: \"222 47% 11%\",\n card: \"0 0% 100%\",\n \"card-foreground\": \"222 47% 11%\",\n popover: \"0 0% 100%\",\n \"popover-foreground\": \"222 47% 11%\",\n primary: \"221 83% 53%\",\n \"primary-deep\": \"224 76% 38%\",\n \"primary-glow\": \"217 91% 70%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"210 40% 96%\",\n \"secondary-foreground\": \"222 47% 11%\",\n accent: \"37 92% 40%\",\n \"accent-deep\": \"32 81% 30%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"210 40% 96%\",\n \"muted-foreground\": \"215 16% 47%\",\n border: \"214 32% 91%\",\n input: \"214 32% 91%\",\n ring: \"221 83% 53%\",\n success: \"142 71% 36%\",\n \"success-foreground\": \"0 0% 100%\",\n warning: \"33 92% 44%\",\n \"warning-foreground\": \"0 0% 100%\",\n destructive: \"0 72% 51%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"217 91% 60%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n // Dark mirror — mainly the same hues with inverted lightness so the theme\n // still feels coherent if a consumer toggles `.dark`.\n dark: {\n background: \"222 47% 8%\",\n foreground: \"210 40% 98%\",\n card: \"222 47% 11%\",\n \"card-foreground\": \"210 40% 98%\",\n popover: \"222 47% 11%\",\n \"popover-foreground\": \"210 40% 98%\",\n primary: \"217 91% 60%\",\n \"primary-deep\": \"221 83% 45%\",\n \"primary-glow\": \"213 100% 80%\",\n \"primary-foreground\": \"222 47% 11%\",\n secondary: \"217 19% 18%\",\n \"secondary-foreground\": \"210 40% 98%\",\n accent: \"37 92% 60%\",\n \"accent-deep\": \"32 81% 45%\",\n \"accent-foreground\": \"222 47% 11%\",\n muted: \"217 19% 18%\",\n \"muted-foreground\": \"215 20% 65%\",\n border: \"217 19% 22%\",\n input: \"217 19% 18%\",\n ring: \"217 91% 60%\",\n success: \"152 79% 52%\",\n \"success-foreground\": \"222 47% 11%\",\n warning: \"38 92% 50%\",\n \"warning-foreground\": \"222 47% 11%\",\n destructive: \"350 100% 65%\",\n \"destructive-foreground\": \"222 47% 11%\",\n info: \"213 100% 70%\",\n \"info-foreground\": \"222 47% 11%\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * Aurora Terminal — dark-first, cyan-aurora primary, Geist Mono everywhere.\n *\n * Identity: deep oceanic background, cyan-aurora primary, aurora-pink accent.\n * Headers use Geist with heavier tracking; body uses Geist Mono for full\n * \"developer console\" feel. Suits CLI/devtools showcase.\n */\nexport const auroraTerminal: Theme = {\n name: \"aurora-terminal\",\n label: \"Aurora Terminal\",\n description: \"Dark sci-fi developer console — cyan-aurora + Geist Mono body.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"220 30% 96%\",\n foreground: \"222 47% 11%\",\n card: \"0 0% 100%\",\n \"card-foreground\": \"222 47% 11%\",\n popover: \"0 0% 100%\",\n \"popover-foreground\": \"222 47% 11%\",\n primary: \"178 78% 41%\",\n \"primary-deep\": \"180 100% 25%\",\n \"primary-glow\": \"180 89% 70%\",\n \"primary-foreground\": \"222 47% 11%\",\n secondary: \"210 40% 96%\",\n \"secondary-foreground\": \"222 47% 11%\",\n accent: \"340 82% 60%\",\n \"accent-deep\": \"340 80% 50%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"214 32% 91%\",\n \"muted-foreground\": \"215 16% 47%\",\n border: \"214 32% 91%\",\n input: \"214 32% 91%\",\n ring: \"178 78% 41%\",\n success: \"152 79% 42%\",\n \"success-foreground\": \"0 0% 100%\",\n warning: \"33 92% 44%\",\n \"warning-foreground\": \"0 0% 100%\",\n destructive: \"0 72% 51%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"217 91% 60%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n dark: {\n background: \"224 36% 7%\",\n foreground: \"220 30% 96%\",\n card: \"224 35% 10%\",\n \"card-foreground\": \"220 30% 96%\",\n popover: \"224 35% 10%\",\n \"popover-foreground\": \"220 30% 96%\",\n primary: \"178 71% 60%\",\n \"primary-deep\": \"180 100% 35%\",\n \"primary-glow\": \"180 89% 80%\",\n \"primary-foreground\": \"224 36% 7%\",\n secondary: \"222 30% 14%\",\n \"secondary-foreground\": \"220 30% 96%\",\n accent: \"340 90% 65%\",\n \"accent-deep\": \"340 80% 50%\",\n \"accent-foreground\": \"224 36% 7%\",\n muted: \"222 30% 14%\",\n \"muted-foreground\": \"215 20% 65%\",\n border: \"222 28% 18%\",\n input: \"222 30% 14%\",\n ring: \"178 71% 60%\",\n success: \"152 79% 52%\",\n \"success-foreground\": \"224 36% 7%\",\n warning: \"38 92% 50%\",\n \"warning-foreground\": \"224 36% 7%\",\n destructive: \"350 100% 65%\",\n \"destructive-foreground\": \"224 36% 7%\",\n info: \"213 100% 70%\",\n \"info-foreground\": \"224 36% 7%\",\n },\n};\n","/**\n * `defineTheme(input)` — build a `Theme` from a partial override.\n *\n * Reduces the boilerplate of authoring a custom theme from 58 colour\n * keys (`light` × 29 + `dark` × 29) to \"just what you want to change\".\n * The merge always uses `violetForge` as the base — this is a pure,\n * deterministic helper that does not depend on whatever theme is active\n * at the call site.\n *\n * The `Theme` object it returns is drop-in compatible with\n * `<ThemeProvider themes={[...]}>` — same shape as `violetForge`,\n * `classicPaper`, and `auroraTerminal`.\n *\n * Honest caveat: if you override `light.primary` but NOT `dark.primary`,\n * the two modes will use different colours — your override in light,\n * Violet Forge's default in dark. That's intentional. Pass both sides\n * to keep them in sync.\n *\n * @example\n * import { defineTheme, hex } from \"@theokit/ui\";\n * export const corp = defineTheme({\n * name: \"corp\",\n * light: { primary: hex(\"#0EA5E9\") },\n * dark: { primary: hex(\"#38BDF8\") },\n * });\n *\n * Plan: `.claude/knowledge-base/plans/theming-and-sizes-plan.md` T2.1.\n */\nimport type { ColorScale, Theme, ThemeFonts } from \"./types.js\";\nimport { violetForge } from \"./violet-forge.js\";\n\nconst NAME_PATTERN = /^[a-z][a-z0-9-]*$/i;\n\nexport interface DefineThemeInput {\n /**\n * Stable id used in `data-theme=\"<name>\"` on the root element. Must\n * match `/^[a-z][a-z0-9-]*$/i` (CSS-identifier-safe). Required.\n */\n name: string;\n /**\n * Human-readable label for theme switchers. Defaults to the\n * capitalized version of `name` (e.g. \"corp\" → \"Corp\").\n */\n label?: string;\n /** Optional one-line description shown in switchers. */\n description?: string;\n /**\n * Override light-mode colours. Any key omitted is inherited from\n * `violetForge.light`. See `ColorScale` for the full list.\n */\n light?: Partial<ColorScale>;\n /**\n * Override dark-mode colours. Any key omitted is inherited from\n * `violetForge.dark`.\n */\n dark?: Partial<ColorScale>;\n /**\n * Override fonts (`display`, `body`, `mono`). Any key omitted is\n * inherited from `violetForge.fonts`.\n */\n fonts?: Partial<ThemeFonts>;\n /**\n * Replace the default remote font URLs. Pass an empty array to skip\n * font fetching entirely. Defaults to `violetForge.fontUrls` when\n * omitted (so consumers that don't care still get Geist preloaded).\n */\n fontUrls?: string[];\n}\n\nfunction defaultLabel(name: string): string {\n if (name.length === 0) return name;\n return name.charAt(0).toUpperCase() + name.slice(1);\n}\n\nexport function defineTheme(input: DefineThemeInput): Theme {\n if (typeof input?.name !== \"string\" || input.name.length === 0) {\n throw new Error(\"defineTheme: `name` is required and cannot be empty.\");\n }\n if (!NAME_PATTERN.test(input.name)) {\n throw new Error(\n `defineTheme: invalid name \"${input.name}\". Must match /^[a-z][a-z0-9-]*$/i — letters, digits, and hyphens only, starting with a letter.`,\n );\n }\n\n const lightOverride = input.light ?? {};\n const darkOverride = input.dark ?? {};\n const fontsOverride = input.fonts ?? {};\n\n const theme: Theme = {\n name: input.name,\n label: input.label ?? defaultLabel(input.name),\n description: input.description,\n fonts: { ...violetForge.fonts, ...fontsOverride },\n light: { ...violetForge.light, ...lightOverride },\n dark: { ...violetForge.dark, ...darkOverride },\n fontUrls: input.fontUrls ?? violetForge.fontUrls,\n };\n\n return theme;\n}\n","/**\n * Color helpers that return values in the HSL string-tuple format the\n * `ColorScale` shape expects (e.g. `\"262 83% 58%\"`).\n *\n * Why this format: matches the shadcn / Violet Forge convention where\n * CSS variables hold the H S% L% components and consumers write\n * `hsl(var(--primary))` (allowing alpha overlays via\n * `hsl(var(--primary) / 0.5)`). Returning an object would force callers\n * to write `${theme.light.primary.h} ${theme.light.primary.s}% …` —\n * exactly the friction `hex()` is meant to remove.\n *\n * No external dependency: vanilla algorithm from CSS Color spec.\n * Alpha channels are intentionally discarded — `ColorScale` is opaque;\n * use `hsl(var(--primary) / 0.5)` in CSS for transparency.\n *\n * Plan: `.claude/knowledge-base/plans/theming-and-sizes-plan.md` T2.2.\n */\n\nfunction hexCharToNibble(ch: string): number {\n if (ch >= \"0\" && ch <= \"9\") return ch.charCodeAt(0) - 48;\n if (ch >= \"a\" && ch <= \"f\") return ch.charCodeAt(0) - 87;\n if (ch >= \"A\" && ch <= \"F\") return ch.charCodeAt(0) - 55;\n throw new Error(`hex(): invalid hex character \"${ch}\"`);\n}\n\nfunction parseHex(input: string): { r: number; g: number; b: number } {\n if (!input.startsWith(\"#\")) {\n throw new Error(`hex(): expected '#'-prefixed input, got \"${input}\"`);\n }\n const body = input.slice(1);\n let r: number;\n let g: number;\n let b: number;\n if (body.length === 3 || body.length === 4) {\n // Short form #rgb or #rgba — expand each nibble. charAt always returns\n // a string (empty for OOB), so hexCharToNibble throws on the empty\n // string the same way it does on any invalid char — no NonNull needed.\n const nr = hexCharToNibble(body.charAt(0));\n const ng = hexCharToNibble(body.charAt(1));\n const nb = hexCharToNibble(body.charAt(2));\n r = (nr << 4) | nr;\n g = (ng << 4) | ng;\n b = (nb << 4) | nb;\n // Alpha char (body[3]) is silently dropped per spec — ColorScale is opaque.\n } else if (body.length === 6 || body.length === 8) {\n r = (hexCharToNibble(body.charAt(0)) << 4) | hexCharToNibble(body.charAt(1));\n g = (hexCharToNibble(body.charAt(2)) << 4) | hexCharToNibble(body.charAt(3));\n b = (hexCharToNibble(body.charAt(4)) << 4) | hexCharToNibble(body.charAt(5));\n // Bytes 6-7 (alpha) silently dropped.\n } else {\n throw new Error(\n `hex(): invalid length ${body.length} for hex input \"${input}\" — expected 3, 4, 6, or 8 hex chars after the '#'.`,\n );\n }\n return { r, g, b };\n}\n\nfunction rgbToHsl(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 let h = 0;\n let s = 0;\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case rn:\n h = (gn - bn) / d + (gn < bn ? 6 : 0);\n break;\n case gn:\n h = (bn - rn) / d + 2;\n break;\n default:\n h = (rn - gn) / d + 4;\n break;\n }\n h *= 60;\n }\n const hh = Math.round(h);\n const ss = Math.round(s * 100);\n const ll = Math.round(l * 100);\n return `${hh} ${ss}% ${ll}%`;\n}\n\n/**\n * Convert a hex color string to the HSL string-tuple format used by\n * `ColorScale` (\"`H S% L%`\", e.g. `\"262 83% 58%\"`).\n *\n * Accepts `#rgb`, `#rgba`, `#rrggbb`, `#rrggbbaa`. Case-insensitive.\n * Alpha bytes are silently dropped — use `hsl(var(--primary) / 0.5)`\n * in CSS for transparency.\n *\n * @throws if the input is malformed.\n *\n * @example\n * hex(\"#7C3AED\") // \"262 83% 58%\"\n * hex(\"#7c3aed\") // \"262 83% 58%\" (same)\n * hex(\"#abc\") // expanded to \"#aabbcc\"\n */\nexport function hex(input: string): string {\n const { r, g, b } = parseHex(input);\n return rgbToHsl(r, g, b);\n}\n\n/**\n * Convert an RGB triplet (each in `[0, 255]`) to the HSL string-tuple\n * format used by `ColorScale`.\n *\n * @throws if any channel is out of `[0, 255]`.\n *\n * @example\n * rgb(124, 58, 237) // \"262 83% 58%\"\n */\nexport function rgb(r: number, g: number, b: number): string {\n for (const value of [r, g, b]) {\n if (!Number.isFinite(value) || value < 0 || value > 255) {\n throw new Error(\n `rgb(): channel out of range — expected 0..255, got ${value}. Did you mix percentage values?`,\n );\n }\n }\n return rgbToHsl(Math.round(r), Math.round(g), Math.round(b));\n}\n","import type { Theme } from \"./types.js\";\n\n/**\n * Vercel Mono — razor-sharp monochrome + signature blue.\n *\n * Inspired by, not affiliated with Vercel. Based on Geist Design tokens\n * (https://github.com/vercel/geist). Light = pure white + black ink + blue\n * accent (#0070F3); dark = near-black canvas + white text + same blue.\n *\n * Plan: .claude/knowledge-base/plans/seven-themes-plan.md T2.1\n */\nexport const vercelMono: Theme = {\n name: \"vercel-mono\",\n label: \"Vercel Mono\",\n description: \"Inspired by, not affiliated with Vercel. Monochrome canvas + signature blue.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"0 0% 100%\",\n foreground: \"0 0% 0%\",\n card: \"0 0% 100%\",\n \"card-foreground\": \"0 0% 0%\",\n popover: \"0 0% 100%\",\n \"popover-foreground\": \"0 0% 0%\",\n primary: \"212 100% 47%\",\n \"primary-deep\": \"212 100% 36%\",\n \"primary-glow\": \"212 100% 72%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"0 0% 96%\",\n \"secondary-foreground\": \"0 0% 0%\",\n accent: \"212 100% 47%\",\n \"accent-deep\": \"212 100% 36%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"0 0% 96%\",\n \"muted-foreground\": \"0 0% 40%\",\n border: \"0 0% 92%\",\n input: \"0 0% 92%\",\n ring: \"212 100% 47%\",\n success: \"168 76% 40%\",\n \"success-foreground\": \"0 0% 100%\",\n warning: \"34 92% 45%\",\n \"warning-foreground\": \"0 0% 100%\",\n destructive: \"0 100% 40%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"212 100% 47%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n dark: {\n background: \"0 0% 4%\",\n foreground: \"0 0% 93%\",\n card: \"0 0% 7%\",\n \"card-foreground\": \"0 0% 93%\",\n popover: \"0 0% 7%\",\n \"popover-foreground\": \"0 0% 93%\",\n primary: \"212 100% 55%\",\n \"primary-deep\": \"212 100% 42%\",\n \"primary-glow\": \"212 100% 75%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"0 0% 13%\",\n \"secondary-foreground\": \"0 0% 93%\",\n accent: \"212 100% 60%\",\n \"accent-deep\": \"212 100% 47%\",\n \"accent-foreground\": \"0 0% 0%\",\n muted: \"0 0% 13%\",\n \"muted-foreground\": \"0 0% 60%\",\n border: \"0 0% 20%\",\n input: \"0 0% 20%\",\n ring: \"212 100% 55%\",\n success: \"144 89% 50%\",\n \"success-foreground\": \"0 0% 0%\",\n warning: \"34 92% 65%\",\n \"warning-foreground\": \"0 0% 0%\",\n destructive: \"0 100% 55%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"212 100% 55%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * GitHub Dark — GitHub's default dark theme.\n *\n * Based on the canonical Primer Primitives tokens\n * (https://github.com/primer/primitives, MIT). Light fallback uses GitHub's\n * \"light-default\" Primer scale.\n *\n * Plan: .claude/knowledge-base/plans/seven-themes-plan.md T3.1\n */\nexport const githubDark: Theme = {\n name: \"github-dark\",\n label: \"GitHub Dark\",\n description: \"GitHub's default dark theme. Primer Primitives tokens.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"0 0% 100%\",\n foreground: \"213 13% 16%\",\n card: \"210 29% 97%\",\n \"card-foreground\": \"213 13% 16%\",\n popover: \"0 0% 100%\",\n \"popover-foreground\": \"213 13% 16%\",\n primary: \"212 92% 44%\",\n \"primary-deep\": \"212 92% 36%\",\n \"primary-glow\": \"212 92% 58%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"210 29% 97%\",\n \"secondary-foreground\": \"213 13% 16%\",\n accent: \"213 84% 52%\",\n \"accent-deep\": \"213 84% 42%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"210 29% 97%\",\n \"muted-foreground\": \"213 8% 43%\",\n border: \"210 14% 84%\",\n input: \"210 14% 84%\",\n ring: \"212 92% 44%\",\n success: \"137 66% 30%\",\n \"success-foreground\": \"0 0% 100%\",\n warning: \"41 100% 30%\",\n \"warning-foreground\": \"0 0% 100%\",\n destructive: \"355 71% 47%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"212 92% 44%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n dark: {\n background: \"215 28% 7%\",\n foreground: \"210 67% 96%\",\n card: \"215 21% 11%\",\n \"card-foreground\": \"210 67% 96%\",\n popover: \"215 21% 11%\",\n \"popover-foreground\": \"210 67% 96%\",\n primary: \"212 92% 57%\",\n \"primary-deep\": \"212 92% 47%\",\n \"primary-glow\": \"213 92% 67%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"215 21% 14%\",\n \"secondary-foreground\": \"210 67% 96%\",\n accent: \"213 92% 61%\",\n \"accent-deep\": \"213 92% 50%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"215 21% 14%\",\n \"muted-foreground\": \"213 9% 59%\",\n border: \"213 13% 21%\",\n input: \"213 13% 21%\",\n ring: \"212 92% 57%\",\n success: \"135 53% 49%\",\n \"success-foreground\": \"0 0% 0%\",\n warning: \"41 73% 48%\",\n \"warning-foreground\": \"0 0% 0%\",\n destructive: \"1 90% 62%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"212 92% 57%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * Dracula — the cult OSS dark theme (https://draculatheme.com, MIT).\n *\n * Dark mode = canonical Dracula spec (background #282A36, signature pink\n * #FF79C6, purple #BD93F9, etc.).\n *\n * Note: \"light\" mode is a Theo-original adaptation — Dracula upstream\n * spec is dark-only. We darken the signature pink/purple to pass WCAG AA\n * against light backgrounds, sacrificing palette purity for accessibility.\n *\n * Plan: .claude/knowledge-base/plans/seven-themes-plan.md T4.1\n */\nexport const dracula: Theme = {\n name: \"dracula\",\n label: \"Dracula\",\n description: \"Cult OSS theme (draculatheme.com, MIT). Light mode is Theo-adapted for WCAG AA.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"60 30% 96%\",\n foreground: \"231 15% 18%\",\n card: \"0 0% 100%\",\n \"card-foreground\": \"231 15% 18%\",\n popover: \"0 0% 100%\",\n \"popover-foreground\": \"231 15% 18%\",\n primary: \"275 70% 45%\",\n \"primary-deep\": \"271 63% 35%\",\n \"primary-glow\": \"265 89% 70%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"60 20% 92%\",\n \"secondary-foreground\": \"231 15% 18%\",\n accent: \"271 63% 40%\",\n \"accent-deep\": \"271 63% 30%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"60 20% 92%\",\n \"muted-foreground\": \"225 20% 40%\",\n border: \"60 15% 88%\",\n input: \"60 15% 88%\",\n ring: \"275 70% 45%\",\n success: \"129 33% 35%\",\n \"success-foreground\": \"0 0% 100%\",\n warning: \"43 89% 30%\",\n \"warning-foreground\": \"0 0% 100%\",\n destructive: \"0 71% 42%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"190 88% 30%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n dark: {\n background: \"231 15% 18%\",\n foreground: \"60 30% 96%\",\n card: \"232 14% 22%\",\n \"card-foreground\": \"60 30% 96%\",\n popover: \"232 14% 22%\",\n \"popover-foreground\": \"60 30% 96%\",\n primary: \"326 100% 74%\",\n \"primary-deep\": \"326 100% 60%\",\n \"primary-glow\": \"326 100% 85%\",\n \"primary-foreground\": \"231 15% 18%\",\n secondary: \"232 14% 28%\",\n \"secondary-foreground\": \"60 30% 96%\",\n accent: \"265 89% 78%\",\n \"accent-deep\": \"265 89% 65%\",\n \"accent-foreground\": \"231 15% 18%\",\n muted: \"232 14% 28%\",\n \"muted-foreground\": \"225 27% 65%\",\n border: \"232 14% 31%\",\n input: \"232 14% 31%\",\n ring: \"326 100% 74%\",\n success: \"135 94% 65%\",\n \"success-foreground\": \"231 15% 18%\",\n warning: \"65 92% 76%\",\n \"warning-foreground\": \"231 15% 18%\",\n destructive: \"0 100% 67%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"191 97% 77%\",\n \"info-foreground\": \"231 15% 18%\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * One Dark / One Light — Atom's iconic syntax theme.\n *\n * Sources:\n * - atom/one-dark-syntax (MIT) — dark mode canonical\n * - atom/one-light-syntax (MIT) — light mode canonical\n *\n * Plan: .claude/knowledge-base/plans/seven-themes-plan.md T5.1\n */\nexport const oneDark: Theme = {\n name: \"one-dark\",\n label: \"One Dark\",\n description: \"Atom's One Dark + One Light syntax theme (MIT). Iconic IDE look.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"0 0% 98%\",\n foreground: \"230 8% 24%\",\n card: \"0 0% 100%\",\n \"card-foreground\": \"230 8% 24%\",\n popover: \"0 0% 100%\",\n \"popover-foreground\": \"230 8% 24%\",\n primary: \"220 88% 50%\",\n \"primary-deep\": \"220 88% 40%\",\n \"primary-glow\": \"220 88% 70%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"0 0% 95%\",\n \"secondary-foreground\": \"230 8% 24%\",\n accent: \"301 62% 40%\",\n \"accent-deep\": \"301 62% 30%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"0 0% 95%\",\n \"muted-foreground\": \"230 4% 50%\",\n border: \"0 0% 90%\",\n input: \"0 0% 90%\",\n ring: \"220 88% 50%\",\n success: \"119 34% 35%\",\n \"success-foreground\": \"0 0% 100%\",\n warning: \"41 99% 30%\",\n \"warning-foreground\": \"0 0% 100%\",\n destructive: \"5 74% 45%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"198 99% 30%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n dark: {\n background: \"220 13% 18%\",\n foreground: \"220 14% 71%\",\n card: \"220 13% 15%\",\n \"card-foreground\": \"220 14% 71%\",\n popover: \"220 13% 15%\",\n \"popover-foreground\": \"220 14% 71%\",\n primary: \"207 82% 66%\",\n \"primary-deep\": \"207 82% 52%\",\n \"primary-glow\": \"207 82% 78%\",\n \"primary-foreground\": \"220 13% 18%\",\n secondary: \"220 13% 23%\",\n \"secondary-foreground\": \"220 14% 71%\",\n accent: \"286 60% 67%\",\n \"accent-deep\": \"286 60% 52%\",\n \"accent-foreground\": \"220 13% 18%\",\n muted: \"220 13% 23%\",\n \"muted-foreground\": \"220 8% 55%\",\n border: \"220 13% 28%\",\n input: \"220 13% 28%\",\n ring: \"207 82% 66%\",\n success: \"95 38% 62%\",\n \"success-foreground\": \"220 13% 18%\",\n warning: \"29 54% 61%\",\n \"warning-foreground\": \"220 13% 18%\",\n destructive: \"355 65% 65%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"187 47% 55%\",\n \"info-foreground\": \"220 13% 18%\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * Anthropic-style — claude.ai-inspired editorial calm.\n *\n * Inspired by, not affiliated with Anthropic. Visually informed by claude.ai's\n * warm cream canvas + burnt sienna primary + ink-on-paper feel. No proprietary\n * assets reproduced (font is Geist, colors are independent measurements).\n *\n * Plan: .claude/knowledge-base/plans/seven-themes-plan.md T6.1\n */\nexport const anthropicStyle: Theme = {\n name: \"anthropic-style\",\n label: \"Anthropic-style\",\n description:\n \"Inspired by, not affiliated with Anthropic. Warm cream + burnt sienna editorial feel.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"60 27% 97%\",\n foreground: \"0 0% 10%\",\n card: \"0 0% 100%\",\n \"card-foreground\": \"0 0% 10%\",\n popover: \"0 0% 100%\",\n \"popover-foreground\": \"0 0% 10%\",\n primary: \"15 54% 45%\",\n \"primary-deep\": \"15 54% 35%\",\n \"primary-glow\": \"15 54% 65%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"45 22% 92%\",\n \"secondary-foreground\": \"0 0% 10%\",\n accent: \"26 39% 39%\",\n \"accent-deep\": \"26 39% 29%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"45 22% 92%\",\n \"muted-foreground\": \"0 0% 39%\",\n border: \"45 22% 87%\",\n input: \"45 22% 87%\",\n ring: \"15 54% 45%\",\n success: \"127 35% 35%\",\n \"success-foreground\": \"0 0% 100%\",\n warning: \"35 65% 35%\",\n \"warning-foreground\": \"0 0% 100%\",\n destructive: \"5 60% 40%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"200 50% 35%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n dark: {\n background: \"0 0% 10%\",\n foreground: \"36 28% 93%\",\n card: \"0 0% 15%\",\n \"card-foreground\": \"36 28% 93%\",\n popover: \"0 0% 15%\",\n \"popover-foreground\": \"36 28% 93%\",\n primary: \"16 62% 60%\",\n \"primary-deep\": \"16 62% 48%\",\n \"primary-glow\": \"16 62% 72%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"0 0% 18%\",\n \"secondary-foreground\": \"36 28% 93%\",\n accent: \"21 33% 55%\",\n \"accent-deep\": \"21 33% 42%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"0 0% 18%\",\n \"muted-foreground\": \"30 6% 64%\",\n border: \"0 0% 25%\",\n input: \"0 0% 25%\",\n ring: \"16 62% 60%\",\n success: \"142 71% 58%\",\n \"success-foreground\": \"0 0% 10%\",\n warning: \"45 96% 65%\",\n \"warning-foreground\": \"0 0% 10%\",\n destructive: \"0 84% 60%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"200 70% 60%\",\n \"info-foreground\": \"0 0% 10%\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * OpenAI-style — chatgpt.com-inspired minimal tech-utility.\n *\n * Inspired by, not affiliated with OpenAI. Pure white / charcoal canvas +\n * signature ChatGPT green (#10A37F). Minimal saturation, high contrast.\n *\n * Plan: .claude/knowledge-base/plans/seven-themes-plan.md T7.1\n */\nexport const openaiStyle: Theme = {\n name: \"openai-style\",\n label: \"OpenAI-style\",\n description: \"Inspired by, not affiliated with OpenAI. Minimal canvas + ChatGPT green.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"0 0% 100%\",\n foreground: \"0 0% 13%\",\n card: \"240 5% 97%\",\n \"card-foreground\": \"0 0% 13%\",\n popover: \"0 0% 100%\",\n \"popover-foreground\": \"0 0% 13%\",\n primary: \"165 82% 35%\",\n \"primary-deep\": \"165 82% 28%\",\n \"primary-glow\": \"165 82% 50%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"240 5% 96%\",\n \"secondary-foreground\": \"0 0% 13%\",\n accent: \"165 82% 35%\",\n \"accent-deep\": \"165 82% 28%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"240 5% 96%\",\n \"muted-foreground\": \"240 7% 47%\",\n border: \"0 0% 90%\",\n input: \"0 0% 90%\",\n ring: \"165 82% 35%\",\n success: \"165 82% 35%\",\n \"success-foreground\": \"0 0% 100%\",\n warning: \"30 91% 44%\",\n \"warning-foreground\": \"0 0% 100%\",\n destructive: \"0 73% 50%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"212 100% 47%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n dark: {\n background: \"0 0% 13%\",\n foreground: \"0 0% 93%\",\n card: \"0 0% 18%\",\n \"card-foreground\": \"0 0% 93%\",\n popover: \"0 0% 18%\",\n \"popover-foreground\": \"0 0% 93%\",\n primary: \"155 78% 30%\",\n \"primary-deep\": \"155 78% 22%\",\n \"primary-glow\": \"155 78% 50%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"0 0% 20%\",\n \"secondary-foreground\": \"0 0% 93%\",\n accent: \"155 78% 50%\",\n \"accent-deep\": \"155 78% 40%\",\n \"accent-foreground\": \"0 0% 13%\",\n muted: \"0 0% 20%\",\n \"muted-foreground\": \"0 0% 61%\",\n border: \"0 0% 26%\",\n input: \"0 0% 26%\",\n ring: \"155 78% 43%\",\n success: \"155 78% 43%\",\n \"success-foreground\": \"0 0% 100%\",\n warning: \"38 92% 50%\",\n \"warning-foreground\": \"0 0% 13%\",\n destructive: \"0 84% 60%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"212 100% 55%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * Linear Glass — linear.app-inspired glassy indigo.\n *\n * Inspired by, not affiliated with Linear. Refined indigo-violet primary\n * (#5E6AD2) on near-black canvas in dark, pure white in light. Subtle\n * glassmorphic surface temperature.\n *\n * Plan: .claude/knowledge-base/plans/seven-themes-plan.md T8.1\n */\nexport const linearGlass: Theme = {\n name: \"linear-glass\",\n label: \"Linear Glass\",\n description: \"Inspired by, not affiliated with Linear. Refined indigo on glassy surfaces.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"0 0% 100%\",\n foreground: \"240 5% 12%\",\n card: \"220 25% 98%\",\n \"card-foreground\": \"240 5% 12%\",\n popover: \"0 0% 100%\",\n \"popover-foreground\": \"240 5% 12%\",\n primary: \"233 56% 55%\",\n \"primary-deep\": \"233 56% 45%\",\n \"primary-glow\": \"233 56% 70%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"240 9% 96%\",\n \"secondary-foreground\": \"240 5% 12%\",\n accent: \"245 60% 60%\",\n \"accent-deep\": \"245 60% 50%\",\n \"accent-foreground\": \"0 0% 100%\",\n muted: \"240 9% 96%\",\n \"muted-foreground\": \"240 4% 44%\",\n border: \"240 9% 93%\",\n input: \"240 9% 93%\",\n ring: \"233 56% 55%\",\n success: \"155 62% 35%\",\n \"success-foreground\": \"0 0% 100%\",\n warning: \"35 76% 45%\",\n \"warning-foreground\": \"0 0% 100%\",\n destructive: \"358 75% 50%\",\n \"destructive-foreground\": \"0 0% 100%\",\n info: \"233 56% 55%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n dark: {\n background: \"240 9% 6%\",\n foreground: \"0 0% 90%\",\n card: \"240 8% 11%\",\n \"card-foreground\": \"0 0% 90%\",\n popover: \"240 8% 11%\",\n \"popover-foreground\": \"0 0% 90%\",\n primary: \"245 60% 67%\",\n \"primary-deep\": \"245 60% 55%\",\n \"primary-glow\": \"245 60% 78%\",\n \"primary-foreground\": \"0 0% 100%\",\n secondary: \"240 8% 14%\",\n \"secondary-foreground\": \"0 0% 90%\",\n accent: \"253 100% 78%\",\n \"accent-deep\": \"253 100% 65%\",\n \"accent-foreground\": \"240 9% 6%\",\n muted: \"240 8% 14%\",\n \"muted-foreground\": \"240 5% 67%\",\n border: \"240 6% 17%\",\n input: \"240 6% 17%\",\n ring: \"245 60% 67%\",\n success: \"147 49% 53%\",\n \"success-foreground\": \"240 9% 6%\",\n warning: \"32 100% 66%\",\n \"warning-foreground\": \"240 9% 6%\",\n destructive: \"357 100% 70%\",\n \"destructive-foreground\": \"240 9% 6%\",\n info: \"245 60% 67%\",\n \"info-foreground\": \"0 0% 100%\",\n },\n};\n","export type { ColorScale, Theme, ThemeFonts, ThemeMode } from \"./types.js\";\nexport { ThemeProvider, useTheme } from \"./theme-provider.js\";\nexport { ThemeScript } from \"./theme-script.js\";\nexport { ThemeSwitcher } from \"./theme-switcher.js\";\nexport { violetForge } from \"./violet-forge.js\";\nexport { classicPaper } from \"./classic-paper.js\";\nexport { auroraTerminal } from \"./aurora-terminal.js\";\nexport { defineTheme, type DefineThemeInput } from \"./define.js\";\nexport { hex, rgb } from \"./color.js\";\nexport { useDensity, type Density, type DensityContextValue } from \"./density.js\";\n// Seven new themes — RFC 0007, plan: seven-themes (2026-05-22).\n// Trademark-safe slugs (D1.1) — `*-style` / `*-mono` / `*-glass` suffixes,\n// description includes \"Inspired by, not affiliated with [X]\".\nexport { vercelMono } from \"./vercel-mono.js\";\nexport { githubDark } from \"./github-dark.js\";\nexport { dracula } from \"./dracula.js\";\nexport { oneDark } from \"./one-dark.js\";\nexport { anthropicStyle } from \"./anthropic-style.js\";\nexport { openaiStyle } from \"./openai-style.js\";\nexport { linearGlass } from \"./linear-glass.js\";\n\nimport { anthropicStyle } from \"./anthropic-style.js\";\nimport { auroraTerminal } from \"./aurora-terminal.js\";\nimport { classicPaper } from \"./classic-paper.js\";\nimport { dracula } from \"./dracula.js\";\nimport { githubDark } from \"./github-dark.js\";\nimport { linearGlass } from \"./linear-glass.js\";\nimport { oneDark } from \"./one-dark.js\";\nimport { openaiStyle } from \"./openai-style.js\";\nimport { vercelMono } from \"./vercel-mono.js\";\nimport { violetForge } from \"./violet-forge.js\";\n\n/**\n * All themes bundled with Theo UI. Pass to `<ThemeProvider themes={builtinThemes}>`\n * if you want all 10 available out of the box.\n *\n * EC-4 note: passing the full 10-entry list triggers ~60 KB CSS injection in\n * `<style id=\"theo-ui-theme-vars\">`. For apps focused on 1-2 themes, prefer\n * `themes={[violetForge, dracula]}` to keep the payload at ~12 KB.\n */\nexport const builtinThemes = [\n violetForge,\n classicPaper,\n auroraTerminal,\n vercelMono,\n githubDark,\n dracula,\n oneDark,\n anthropicStyle,\n openaiStyle,\n linearGlass,\n];\n","\"use client\";\n\nimport type { ComponentProps, JSX, ReactNode } from \"react\";\nimport { Toaster } from \"./components/primitives/toast/toaster.js\";\nimport { builtinThemes } from \"./themes/index.js\";\nimport { ThemeProvider } from \"./themes/theme-provider.js\";\n\n/**\n * TheoUIProvider — primary entry point composing `<ThemeProvider>` and\n * `<Toaster>` in the correct order with sensible defaults.\n *\n * Recommended for consumer apps to avoid hand-wiring the provider stack.\n * Equivalent to:\n *\n * <ThemeProvider themes={builtinThemes} {...theme}>\n * <Toaster {...toaster}>{children}</Toaster>\n * </ThemeProvider>\n *\n * Notes:\n * - Since v0.1.0-next.0, `<ThemeProvider>` requires the `themes` prop\n * (T2.5 decoupling). `<TheoUIProvider>` defaults it to `builtinThemes`\n * to preserve \"works out of the box\" DX. Pass `theme.themes` to override.\n * - The `\"use client\"` directive is required for Next.js App Router (RSC)\n * because `<ThemeProvider>` uses React state and effects internally.\n * - `<Tooltip>` provider stays per-instance (Radix recommendation) — this\n * wrapper does NOT introduce a global tooltip context.\n * - `<ThemeProvider>` and `<Toaster>` remain independently exported for\n * consumers who want bespoke control.\n *\n * SSR:\n * - Place `<ThemeScript>` in `<head>` to avoid FOUC + hydration mismatch.\n * - Wrap `<html lang=\"en\" suppressHydrationWarning>`.\n *\n * @example\n * import { TheoUIProvider } from \"@theokit/ui\";\n *\n * export default function App({ children }) {\n * return <TheoUIProvider>{children}</TheoUIProvider>;\n * }\n */\nexport interface TheoUIProviderProps {\n children: ReactNode;\n /** Pass-through props for the inner `<ThemeProvider>`. Optional. */\n theme?: Omit<ComponentProps<typeof ThemeProvider>, \"children\" | \"themes\"> & {\n /** Override the default theme set (defaults to `builtinThemes`). */\n themes?: ComponentProps<typeof ThemeProvider>[\"themes\"];\n };\n /** Pass-through props for the inner `<Toaster>`. */\n toaster?: Omit<ComponentProps<typeof Toaster>, \"children\">;\n}\n\nexport function TheoUIProvider({ children, theme, toaster }: TheoUIProviderProps): JSX.Element {\n const { themes, ...restTheme } = theme ?? {};\n return (\n <ThemeProvider themes={themes ?? builtinThemes} {...restTheme}>\n <Toaster {...toaster}>{children}</Toaster>\n </ThemeProvider>\n );\n}\n\nTheoUIProvider.displayName = \"TheoUIProvider\";\n"]}
1
+ {"version":3,"sources":["../src/themes/color-value-pattern.ts","../src/themes/density.ts","../src/themes/schema.ts","../src/themes/theme-provider.tsx","../src/themes/theme-script.tsx","../src/themes/theme-switcher.tsx","../src/themes/violet-forge.ts","../src/themes/classic-paper.ts","../src/themes/aurora-terminal.ts","../src/themes/define.ts","../src/themes/color.ts","../src/themes/vercel-mono.ts","../src/themes/github-dark.ts","../src/themes/dracula.ts","../src/themes/one-dark.ts","../src/themes/anthropic-style.ts","../src/themes/openai-style.ts","../src/themes/linear-glass.ts","../src/themes/index.ts","../src/theo-ui-provider.tsx"],"names":["createContext","STYLE_ELEMENT_ID","FONT_FAMILY_PATTERN","THEME_NAME_PATTERN","url","safe","value","active","useContext","jsx","cn"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Theme color value validation pattern — Phase 2 T2.5, EC-5 absorbed.\n *\n * Allowed forms (one or more, single string per token):\n * 1. Hex: `#fff`, `#0a0a0a`, `#0a0a0aff`\n * 2. CSS color functions:\n * - oklch/oklab: supports relative-color syntax `oklch(from var(--x) l c h)`,\n * `calc(...)` of depth 1, `none` keyword, and single-char component\n * identifiers (`l`, `c`, `h`, `a`, `b`).\n * - rgb, rgba, hsl, hsla, lab, lch, color: conservative content\n * `[\\d.\\s%,/+\\-]+` — no nested function calls.\n * 3. HSL split tuple (legacy ColorScale convention pre-T2.4):\n * `\"0 0% 100%\"`, `\"262 83% 58%\"` — space-separated numeric components.\n * 4. `var(--token)` reference with optional safe fallback value.\n * 5. CSS keywords: `transparent`, `currentColor`, `inherit`, `initial`, `unset`.\n *\n * Defense in depth: rejects values that contain `;`, `{`, `}`, `url(` — the\n * vectors used to break out of the CSS declaration injected by ThemeProvider.\n * `oklch(from ...)` permits a single bare var() identifier and at most ONE\n * level of nested `calc(...)` to keep the surface scoped.\n */\n\n// OKLCH/oklab relative-color or static form.\n// Allows: `oklch(0.5 0.2 270)`, `oklch(0.5 0.2 270 / 0.5)`,\n// `oklch(from var(--primary) calc(l - 0.16) c h)`,\n// `oklch(none none none)`, `oklch(from var(--x) l c h / 0.5)`.\nconst OKLCH_RELATIVE_OR_STATIC =\n String.raw`(?:oklch|oklab)\\(\\s*` +\n // Optional `from var(--token)` prefix.\n String.raw`(?:from\\s+var\\(--[a-zA-Z0-9-]+\\)\\s+)?` +\n // 1+ component tokens: calc(no-nested) | single letter | numeric | `none` | `/`.\n // max()/min() may wrap a calc(); calc() itself stays flat. Single nesting depth.\n String.raw`(?:max\\([^(){}]*(?:\\([^(){}]*\\))?[^(){}]*\\)|min\\([^(){}]*(?:\\([^(){}]*\\))?[^(){}]*\\)|calc\\([^();{}]+\\)|[a-z]|-?\\d+(?:\\.\\d+)?%?|none|\\/|\\s)+` +\n String.raw`\\)`;\n\n// Other CSS color functions — conservative content (no nested parens/words).\nconst CONSERVATIVE_COLOR_FN = String.raw`(?:rgb|rgba|hsl|hsla|lab|lch|color)\\(\\s*[\\d.\\s%,/+\\-]+\\s*\\)`;\n\nconst HEX = String.raw`#[0-9a-fA-F]{3,8}`;\n\n// HSL split: \"H S% L%\" or \"H S L\" (legacy ColorScale convention).\nconst HSL_SPLIT = String.raw`-?\\d+(?:\\.\\d+)?%?(?:\\s+-?\\d+(?:\\.\\d+)?%?){1,3}`;\n\nconst VAR_REF = String.raw`var\\(--[a-zA-Z0-9-]+(?:\\s*,\\s*[^();{}]+)?\\)`;\n\nconst KEYWORDS = String.raw`transparent|currentColor|inherit|initial|unset`;\n\nexport const COLOR_VALUE_PATTERN = new RegExp(\n `^(${HEX}|${OKLCH_RELATIVE_OR_STATIC}|${CONSERVATIVE_COLOR_FN}|${HSL_SPLIT}|${VAR_REF}|${KEYWORDS})$`,\n);\n","\"use client\";\n\n/**\n * `useDensity()` — runtime control of the global UI density.\n *\n * FAANG-modern dashboards (Vercel / Linear / Stripe) ship at \"comfortable\"\n * density: form controls at 36px, body text 14px, card padding 20px. For\n * dense surfaces (data tables, agent tool lists, admin grids) `compact` mode\n * tightens form controls to 32px without touching `sm`/`lg` props the\n * consumer already passed. Spacious mode bumps the default up to 44px for\n * accessibility-first surfaces.\n *\n * Mechanism (EC-1 fix from edge-case review 2026-05-22):\n * - ThemeProvider sets `data-density=\"{value}\"` on `<html>`.\n * - A `<style id=\"theo-ui-density-vars\">` block defines CSS custom\n * properties under each `[data-density=...]` selector:\n * --theo-control-h, --theo-control-px\n * - Form-control `cva` variants for the `md` tier read from these vars:\n * `md: \"h-[var(--theo-control-h,2.25rem)] px-[var(--theo-control-px,0.875rem)] text-body-sm\"`\n * - `sm` and `lg` variants stay hardcoded → explicit `size` prop always\n * wins over density.\n *\n * Plan: `.claude/knowledge-base/plans/faang-density-tightening-plan.md` T4.1.\n */\nimport { createContext, useContext } from \"react\";\n\nexport type Density = \"compact\" | \"comfortable\" | \"spacious\";\n\nexport interface DensityContextValue {\n density: Density;\n setDensity: (next: Density) => void;\n}\n\nexport const DensityContext = createContext<DensityContextValue | undefined>(undefined);\n\nconst STYLE_ELEMENT_ID = \"theo-ui-density-vars\";\n\nconst DENSITY_CSS = `[data-density=\"compact\"] { --theo-control-h: 2rem; --theo-control-px: 0.75rem; }\n[data-density=\"comfortable\"] { --theo-control-h: 2.25rem; --theo-control-px: 0.875rem; }\n[data-density=\"spacious\"] { --theo-control-h: 2.75rem; --theo-control-px: 1rem; }\n`;\n\n/**\n * Inject (idempotent) the density CSS variable definitions into the document\n * head. Returns true if the style tag was newly created. Safe to call on\n * every ThemeProvider mount — duplicates are skipped.\n */\nexport function injectDensityCss(): boolean {\n if (typeof document === \"undefined\") return false;\n if (document.getElementById(STYLE_ELEMENT_ID)) return false;\n const style = document.createElement(\"style\");\n style.id = STYLE_ELEMENT_ID;\n style.textContent = DENSITY_CSS;\n document.head.appendChild(style);\n return true;\n}\n\n/**\n * Read the current density from the active ThemeProvider context. Throws\n * outside the provider so misuse fails loud — analogous to `useTheme`.\n */\nexport function useDensity(): DensityContextValue {\n const ctx = useContext(DensityContext);\n if (!ctx) {\n throw new Error(\"useDensity must be used inside <ThemeProvider>.\");\n }\n return ctx;\n}\n","/**\n * Valibot schema for Theme — Phase 2 T2.7 / D5 (revised post-EC-6).\n *\n * Validates the shape and types of a Theme object passed to <ThemeProvider>\n * or registerTheme(). Complements the COLOR_VALUE_PATTERN regex (the second\n * defense layer against CSS injection): valibot validates shape; regex\n * validates that each individual color value is safe to interpolate.\n *\n * Why valibot (not zod): valibot core is ~1.5KB gzipped vs zod ~12KB.\n * <ThemeProvider> is a sync constructor — dynamic import does not tree-shake.\n * For our use case (validating ~37 string fields) valibot is strictly\n * better in bundle size and API parity.\n *\n * Output of safeParse → { success: true, output } or { success: false, issues }.\n * formatThemeIssues() produces human-readable error message with the failing\n * field path so consumers see what to fix.\n */\n\nimport * as v from \"valibot\";\n\nimport { COLOR_VALUE_PATTERN } from \"./color-value-pattern.js\";\n\nconst THEME_NAME_PATTERN = /^[a-z][a-z0-9-]*$/;\nconst FONT_FAMILY_PATTERN = /^[\\w\\s,\"'\\-.]+$/;\n\nconst colorValueSchema = v.pipe(\n v.string(),\n v.check(\n (value) => COLOR_VALUE_PATTERN.test(value),\n \"color value did not match the allowed format (hex, oklch, hsl, rgb, var(), HSL split, or CSS keyword)\",\n ),\n);\n\nconst themeNameSchema = v.pipe(\n v.string(),\n v.check(\n (value) => THEME_NAME_PATTERN.test(value),\n \"theme name must match /^[a-z][a-z0-9-]*$/ (lowercase + digits + hyphens, starts with a letter)\",\n ),\n);\n\nconst fontFamilySchema = v.pipe(\n v.string(),\n v.check(\n (value) => FONT_FAMILY_PATTERN.test(value),\n \"font family contains disallowed characters (parens, semicolons, etc.)\",\n ),\n);\n\nconst fontsSchema = v.object({\n display: fontFamilySchema,\n body: fontFamilySchema,\n mono: fontFamilySchema,\n});\n\n// All 37 ColorScale keys (29 base + 8 status — D4).\nconst colorScaleSchema = v.object({\n background: colorValueSchema,\n foreground: colorValueSchema,\n card: colorValueSchema,\n \"card-foreground\": colorValueSchema,\n popover: colorValueSchema,\n \"popover-foreground\": colorValueSchema,\n primary: colorValueSchema,\n // Optional since T3.2 (ADR-0006) — CSS derives via oklch(from var(--primary) ...).\n \"primary-deep\": v.optional(colorValueSchema),\n \"primary-glow\": v.optional(colorValueSchema),\n \"primary-foreground\": colorValueSchema,\n secondary: colorValueSchema,\n \"secondary-foreground\": colorValueSchema,\n accent: colorValueSchema,\n \"accent-deep\": v.optional(colorValueSchema),\n \"accent-foreground\": colorValueSchema,\n muted: colorValueSchema,\n \"muted-foreground\": colorValueSchema,\n border: colorValueSchema,\n input: colorValueSchema,\n ring: colorValueSchema,\n success: colorValueSchema,\n \"success-foreground\": colorValueSchema,\n warning: colorValueSchema,\n \"warning-foreground\": colorValueSchema,\n destructive: colorValueSchema,\n \"destructive-foreground\": colorValueSchema,\n info: colorValueSchema,\n \"info-foreground\": colorValueSchema,\n \"status-online\": colorValueSchema,\n \"status-online-foreground\": colorValueSchema,\n \"status-offline\": colorValueSchema,\n \"status-offline-foreground\": colorValueSchema,\n \"status-degraded\": colorValueSchema,\n \"status-degraded-foreground\": colorValueSchema,\n \"status-info\": colorValueSchema,\n \"status-info-foreground\": colorValueSchema,\n});\n\nexport const themeSchema = v.object({\n name: themeNameSchema,\n label: v.string(),\n description: v.optional(v.string()),\n fonts: fontsSchema,\n light: colorScaleSchema,\n dark: colorScaleSchema,\n fontUrls: v.optional(\n v.array(\n v.pipe(\n v.string(),\n v.url(),\n v.check(\n (value) => /^https?:\\/\\//i.test(value),\n \"fontUrls must use http(s) protocol (javascript:, data:, etc. are rejected)\",\n ),\n ),\n ),\n ),\n});\n\nexport type ThemeIssue = v.InferIssue<typeof themeSchema>;\n\nexport interface ThemeValidationResult {\n success: boolean;\n issues?: ThemeIssue[];\n}\n\nexport function validateTheme(theme: unknown): ThemeValidationResult {\n const result = v.safeParse(themeSchema, theme);\n if (result.success) return { success: true };\n return { success: false, issues: result.issues };\n}\n\nexport function formatThemeIssues(themeName: string, issues: ThemeIssue[]): string {\n const lines: string[] = [`[@theokit/ui] theme '${themeName}' failed validation:`];\n for (const issue of issues) {\n const path = (issue.path ?? [])\n .map((segment) => (typeof segment.key === \"string\" ? segment.key : String(segment.key)))\n .join(\".\");\n lines.push(` - ${path || \"(root)\"}: ${issue.message}`);\n }\n return lines.join(\"\\n\");\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { JSX, ReactNode } from \"react\";\nimport { safeHref } from \"../lib/safe-href.js\";\nimport { COLOR_VALUE_PATTERN } from \"./color-value-pattern.js\";\nimport { type Density, DensityContext, injectDensityCss } from \"./density.js\";\nimport { formatThemeIssues, validateTheme } from \"./schema.js\";\nimport type { ColorScale, Theme, ThemeMode } from \"./types.js\";\n\ninterface ThemeContextValue {\n /** Active theme (full descriptor). */\n theme: Theme;\n /** Active mode: light or dark. */\n mode: ThemeMode;\n /** All available themes. */\n themes: Theme[];\n /** Swap the active theme by name. */\n setTheme: (name: string) => void;\n /** Set light/dark explicitly. */\n setMode: (mode: ThemeMode) => void;\n /** Toggle light <> dark. */\n toggleMode: () => void;\n /** Register an additional theme at runtime. */\n registerTheme: (theme: Theme) => void;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | undefined>(undefined);\n\nconst STYLE_ELEMENT_ID = \"theo-ui-theme-vars\";\n\n// T3.2 (SEC-001): allowlist validators for theme values. injectThemeCss\n// interpolates theme name + color values + font families into a <style>\n// textContent. Without validation, a theme object from an untrusted source\n// (e.g., a feature-flag service, a CMS) could inject arbitrary CSS via\n// closing the declaration with `}` or smuggling `url(...)` for exfiltration.\n// We reject rather than escape: themes are code, not user input. Invalid\n// values cause a dev-time throw (caller sees the problem); production\n// silently substitutes a safe fallback so a misconfigured theme can't\n// crash the app.\n\n// COLOR_VALUE_PATTERN was inlined here pre-T2.5. Now extracted to\n// `color-value-pattern.ts` so the regex is reusable by the Valibot schema (T2.7)\n// and so the OKLCH relative-color syntax (`oklch(from var(--x) calc(l - 0.16) c h)`,\n// required by T3.1 tonal derivations) is supported without expanding the inline\n// regex monolith. See EC-5 in the edge-case review.\n\n// Font family: word chars, spaces, commas, hyphens, dots, quotes. Excludes\n// parens (blocks `url(...)`) and semicolons (blocks declaration breakouts).\nconst FONT_FAMILY_PATTERN = /^[\\w\\s,\"'\\-.]+$/;\n\n// Theme name: kebab-case identifier. Excludes anything that could break out\n// of an attribute selector or inject additional rules.\nconst THEME_NAME_PATTERN = /^[a-z][a-z0-9-]*$/;\n\nconst IS_DEV = typeof process === \"undefined\" || process.env.NODE_ENV !== \"production\";\n\nfunction rejectOrFallback(scope: string, value: string, fallback: string): string {\n if (IS_DEV) {\n throw new Error(\n `[@theokit/ui] invalid ${scope} value: ${JSON.stringify(value)}. Theme values must match the allowlist (see src/themes/theme-provider.tsx). Refusing to inject potentially unsafe CSS.`,\n );\n }\n return fallback;\n}\n\nfunction validatedColor(token: string, value: string): string {\n if (COLOR_VALUE_PATTERN.test(value)) return value;\n return rejectOrFallback(`color \"${token}\"`, value, \"transparent\");\n}\n\nfunction validatedFontFamily(slot: string, value: string): string {\n if (FONT_FAMILY_PATTERN.test(value)) return value;\n return rejectOrFallback(`fontFamily \"${slot}\"`, value, \"inherit\");\n}\n\nfunction validatedThemeName(value: string): string {\n if (THEME_NAME_PATTERN.test(value)) return value;\n return rejectOrFallback(\"theme.name\", value, \"invalid-theme\");\n}\n\nfunction colorScaleToCss(name: string, mode: ThemeMode, colors: ColorScale): string {\n const safeName = validatedThemeName(name);\n const selector =\n mode === \"light\"\n ? `[data-theme=\"${safeName}\"]`\n : `[data-theme=\"${safeName}\"].dark, [data-theme=\"${safeName}\"][data-mode=\"dark\"]`;\n const decls = Object.entries(colors)\n .map(([token, value]) => ` --${token}: ${validatedColor(token, value)};`)\n .join(\"\\n\");\n return `${selector} {\\n${decls}\\n}`;\n}\n\nfunction fontsToCss(name: string, fonts: Theme[\"fonts\"]): string {\n const safeName = validatedThemeName(name);\n const display = validatedFontFamily(\"display\", fonts.display);\n const body = validatedFontFamily(\"body\", fonts.body);\n const mono = validatedFontFamily(\"mono\", fonts.mono);\n return `[data-theme=\"${safeName}\"] {\\n --font-display: ${display};\\n --font-body: ${body};\\n --font-mono: ${mono};\\n}`;\n}\n\nfunction injectThemeCss(themes: Theme[]): void {\n if (typeof document === \"undefined\") return;\n let style = document.getElementById(STYLE_ELEMENT_ID) as HTMLStyleElement | null;\n if (!style) {\n style = document.createElement(\"style\");\n style.id = STYLE_ELEMENT_ID;\n document.head.appendChild(style);\n }\n const blocks: string[] = [];\n for (const theme of themes) {\n blocks.push(fontsToCss(theme.name, theme.fonts));\n blocks.push(colorScaleToCss(theme.name, \"light\", theme.light));\n blocks.push(colorScaleToCss(theme.name, \"dark\", theme.dark));\n }\n style.textContent = blocks.join(\"\\n\\n\");\n}\n\n/**\n * loadThemeFonts — idempotently inject `<link rel=\"stylesheet\">` for each\n * font URL declared by the theme.\n *\n * T4.2: the previous implementation kept a module-level `Set` to track\n * already-injected URLs. That singleton broke test isolation (state\n * leaked across renders) and silently skipped injection in micro-frontend\n * setups with multiple `<ThemeProvider>` mounts. Replaced with a DOM\n * check: we query `document.head` for an existing link with the same\n * `href` before appending a new one. The DOM is the single source of\n * truth; no shared state across instances.\n */\nfunction loadThemeFonts(theme: Theme): void {\n if (typeof document === \"undefined\") return;\n if (!theme.fontUrls) return;\n for (const url of theme.fontUrls) {\n // Re-audit NEW-001 (SSRF, LOW): defang dangerous protocols on\n // consumer-provided font URLs. Built-in themes use\n // fonts.googleapis.com/gstatic.com — safe. registerTheme accepts\n // arbitrary objects at runtime; a malicious theme could try to inject\n // javascript:/data:text/html via fontUrls. safeHref returns undefined\n // for dangerous protocols, which we skip silently.\n const safe = safeHref(url);\n if (!safe) continue;\n if (document.head.querySelector(`link[rel=\"stylesheet\"][href=\"${CSS.escape(safe)}\"]`)) {\n continue;\n }\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = safe;\n document.head.appendChild(link);\n }\n}\n\ninterface ThemeProviderProps {\n children: ReactNode;\n /**\n * Theme to start with. Must match the `name` of an entry in `themes`.\n * Defaults to `\"violet-forge\"` for backward compat — if you don't pass\n * `violet-forge` in `themes`, set this prop explicitly.\n */\n defaultTheme?: string;\n /** Mode to start with. Defaults to `\"dark\"` (library is dark-first). */\n defaultMode?: ThemeMode;\n /**\n * Available themes. **Required**: ThemeProvider does not auto-include any\n * built-in theme since v0.1.0-next.0 — pass `builtinThemes` for all three\n * Violet Forge defaults, or your own array for a slimmer bundle.\n *\n * Migration: consumers previously calling `<ThemeProvider>` without this\n * prop now must pass `themes={builtinThemes}` (or use `<TheoUIProvider>`\n * which defaults to `builtinThemes` for you).\n */\n themes: Theme[];\n /**\n * Persist selection in localStorage under this key. Pass `null` to disable.\n * Default: \"theo-ui:theme\".\n */\n storageKey?: string | null;\n /**\n * Initial density. Drives `data-density` on `<html>` and the `--theo-control-h`\n * / `--theo-control-px` CSS vars consumed by form-control `md` variants.\n * Defaults to `\"comfortable\"` (36px controls — FAANG-tier modern density).\n * Plan: faang-density-tightening (D3).\n */\n defaultDensity?: Density;\n /**\n * Respect the consumer's OS `prefers-color-scheme` preference on initial\n * mount (D6 / T5.1). When `true` (default) and no theme-mode is stored in\n * `localStorage[storageKey]`, the provider reads\n * `matchMedia('(prefers-color-scheme: dark)')` and subscribes to changes.\n * User-driven `setMode()` overrides the system signal — subsequent OS\n * changes are ignored after the user fixes a preference.\n *\n * Pass `false` to force `defaultMode` regardless of the system preference.\n * EC-12: matchMedia listener is cleaned up on unmount.\n */\n respectSystemMode?: boolean;\n}\n\n/**\n * Storage failure diagnostic — dev-only one-line warn so engineers see\n * something when localStorage throws (Safari private mode, blocked\n * third-party cookies, sandboxed iframes). In production we stay silent;\n * runtime behavior is fail-safe (state still lives in memory).\n *\n * Per HIGH-006: silent catches diverge from the \"fail loud\" principle\n * declared in the global CLAUDE.md. We accept silence in prod because the\n * fallback is correct, but we surface a single warn per call site in dev.\n */\nfunction warnStorageFailure(scope: string, err: unknown): void {\n if (typeof process === \"undefined\" || process.env.NODE_ENV === \"production\") return;\n // biome-ignore lint/suspicious/noConsole: dev-only diagnostic for storage failures (HIGH-006)\n console.warn(`[@theokit/ui] theme storage failure (${scope}):`, err);\n}\n\n// T2.7: production-mode diagnostic for invalid themes that fall through\n// dev-time throw. Single console.warn so engineer sees something instead of\n// total silence; theme is kept in the array but per-value regex fallback\n// substitutes `transparent` for unsafe values downstream.\nfunction warnInvalidTheme(message: string): void {\n // biome-ignore lint/suspicious/noConsole: dev/prod diagnostic for invalid theme (T2.7/D5)\n console.warn(message);\n}\n\n/**\n * ThemeProvider — central registry + runtime switcher for Theo themes.\n *\n * Behavior:\n * 1. On mount, injects a `<style id=\"theo-ui-theme-vars\">` element with\n * one CSS block per theme (`[data-theme=\"<name>\"] { --token: ... }`).\n * 2. Sets `data-theme` and `data-mode` on `<html>` so any element nested\n * below inherits the right tokens (the Tailwind config consumes them).\n * 3. Lazy-loads theme font URLs by injecting `<link rel=\"stylesheet\">`.\n * 4. Optionally persists choice in localStorage.\n */\nfunction ThemeProvider({\n children,\n defaultTheme = \"violet-forge\",\n defaultMode = \"dark\",\n themes: themesProp,\n storageKey = \"theo-ui:theme\",\n defaultDensity = \"comfortable\",\n respectSystemMode = true,\n}: ThemeProviderProps): JSX.Element {\n // Themes prop is required since v0.1.0-next.0 — see migration note in\n // the JSDoc on ThemeProviderProps. Pass `builtinThemes` for the legacy\n // default behavior (violet-forge + classic-paper + aurora-terminal), or\n // an array of your own. Empty array is rejected: ThemeProvider has no\n // valid state without at least one registered theme.\n if (!themesProp || themesProp.length === 0) {\n throw new Error(\n \"<ThemeProvider> requires the `themes` prop with at least one Theme. \" +\n \"Pass `themes={builtinThemes}` for the Violet Forge defaults (importable \" +\n \"via the package barrel), or use <TheoUIProvider> which sets this for you.\",\n );\n }\n\n // T3.2 (SEC-001): eager validation. Calling validatedColor/FontFamily/\n // ThemeName here ensures CSS-injection attempts throw at construction\n // time rather than inside the deferred useEffect that injects the\n // <style>. Production-mode fallbacks keep the app rendering even if a\n // theme has bad values.\n //\n // Re-audit NEW-3: wrapped in useMemo so the validation cost (O(themes *\n // tokens), ~60 ops per built-in theme) only runs when themesProp's\n // reference changes — not on every parent re-render. Consumers passing\n // inline array literals (`themes={[violetForge, classicPaper]}`) would\n // otherwise pay this on every parent update.\n const mergedThemes = useMemo<Theme[]>(() => {\n // T2.7 (D5): valibot shape validation runs FIRST — catches missing keys,\n // wrong types, malformed font URLs. Existing per-value regex validation\n // below stays as the second defense layer against CSS injection.\n for (const t of themesProp) {\n const result = validateTheme(t);\n if (!result.success) {\n const message = formatThemeIssues(\n (t as { name?: string }).name ?? \"(unnamed)\",\n result.issues ?? [],\n );\n if (IS_DEV) throw new Error(message);\n warnInvalidTheme(message);\n // In production we keep the theme array intact; the per-value regex\n // fallbacks below will substitute `transparent` for any value that\n // still fails the second layer, so the app continues rendering.\n }\n }\n for (const t of themesProp) {\n validatedThemeName(t.name);\n validatedFontFamily(\"display\", t.fonts.display);\n validatedFontFamily(\"body\", t.fonts.body);\n validatedFontFamily(\"mono\", t.fonts.mono);\n for (const [token, value] of Object.entries(t.light)) {\n validatedColor(token, value);\n }\n for (const [token, value] of Object.entries(t.dark)) {\n validatedColor(token, value);\n }\n }\n // Dedup by theme name; last writer wins (allows registerTheme override).\n const map = new Map<string, Theme>();\n for (const t of themesProp) map.set(t.name, t);\n return Array.from(map.values());\n }, [themesProp]);\n\n const [themes, setThemes] = useState<Theme[]>(mergedThemes);\n\n // Re-sync state when the `themes` prop changes between renders. Avoids the\n // common pitfall where the user passes a different array later and the\n // initial-state-only seed silently ignores the change.\n useEffect(() => {\n setThemes(mergedThemes);\n }, [mergedThemes]);\n\n // SSR-safe initialization (0.6.3-next.0 hydration-mismatch fix).\n //\n // Previously: `useState(() => localStorage.getItem(…))`. The initializer\n // ran on BOTH server (no `window`, returned default) AND client at\n // hydration time (with `window`, returned the stored value). The two\n // results disagreed → React threw a hydration error on every page load\n // for any user who had previously changed themes, and re-rendered the\n // entire tree from scratch — defeating SSR.\n //\n // Fix: initialize with the SSR default ALWAYS. Promote to the stored\n // value in a post-mount `useEffect` below. The 1-frame visual flicker\n // is mitigated by the optional `<ThemeScript>` component, which sets\n // `data-theme` / `data-mode` / `data-density` on `<html>` before React\n // hydrates — see `theme-script.tsx`.\n //\n // The `hydratedRef` flag below guards the persist effect so that\n // first-mount writes (with the SSR default values) don't clobber the\n // user's stored preference in the brief window between mount and the\n // post-mount hydration effect.\n const [themeName, setThemeName] = useState<string>(defaultTheme);\n const [mode, setModeState] = useState<ThemeMode>(defaultMode);\n const [density, setDensityState] = useState<Density>(defaultDensity);\n\n // T5.1 / D6: track whether the user has explicitly fixed the mode via\n // setMode / toggleMode. Once true, OS prefers-color-scheme changes do\n // NOT override the user's choice.\n const userOverrodeModeRef = useRef(false);\n\n // First-run guard for the persist effect below. On initial mount the\n // state is the SSR-safe default; we MUST NOT clobber the user's stored\n // preference with that default before the post-mount hydration effect\n // can promote it. After the first persist-effect call returns early,\n // every subsequent change (post-hydration setState OR user-driven)\n // persists normally.\n const skipFirstPersistRef = useRef(true);\n\n // Post-mount hydration: read localStorage and promote stored values to\n // state. Runs ONCE on mount. If `storageKey` is null or no value is\n // stored, this is a no-op — state stays at the SSR defaults.\n useEffect(() => {\n if (typeof window === \"undefined\" || !storageKey) return;\n try {\n const storedName = window.localStorage.getItem(`${storageKey}:name`);\n const storedMode = window.localStorage.getItem(`${storageKey}:mode`);\n const storedDensity = window.localStorage.getItem(`${storageKey}:density`);\n if (storedName) setThemeName(storedName);\n if (storedMode === \"dark\" || storedMode === \"light\") {\n setModeState(storedMode);\n // Stored value implies user fixed a preference at some point.\n userOverrodeModeRef.current = true;\n }\n if (\n storedDensity === \"compact\" ||\n storedDensity === \"comfortable\" ||\n storedDensity === \"spacious\"\n ) {\n setDensityState(storedDensity);\n }\n } catch (err) {\n warnStorageFailure(\"read theme + mode + density\", err);\n }\n }, [storageKey]);\n\n // T5.1 / D6 / EC-12: subscribe to OS prefers-color-scheme when\n // respectSystemMode is true. On mount, if user has NOT overridden the\n // mode (no stored preference), align with the OS signal. Re-aligns on\n // OS changes UNLESS user explicitly fixed a preference. Cleanup on\n // unmount via removeEventListener (EC-12) to avoid listener leaks in\n // micro-frontend scenarios.\n useEffect(() => {\n if (!respectSystemMode) return;\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") return;\n const mql = window.matchMedia(\"(prefers-color-scheme: dark)\");\n // Align on first run if user hasn't overridden.\n if (!userOverrodeModeRef.current) {\n setModeState(mql.matches ? \"dark\" : \"light\");\n }\n const onChange = (event: MediaQueryListEvent): void => {\n if (!userOverrodeModeRef.current) {\n setModeState(event.matches ? \"dark\" : \"light\");\n }\n };\n mql.addEventListener(\"change\", onChange);\n return () => {\n mql.removeEventListener(\"change\", onChange);\n };\n }, [respectSystemMode]);\n\n // Inject CSS vars whenever the themes list changes.\n useEffect(() => {\n injectThemeCss(themes);\n }, [themes]);\n\n // Apply data-theme + data-mode + data-density to <html>, load fonts,\n // inject density CSS vars.\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n const active = themes.find((t) => t.name === themeName) ?? themes[0];\n if (!active) return;\n document.documentElement.setAttribute(\"data-theme\", active.name);\n document.documentElement.setAttribute(\"data-mode\", mode);\n document.documentElement.setAttribute(\"data-density\", density);\n document.documentElement.classList.toggle(\"dark\", mode === \"dark\");\n loadThemeFonts(active);\n injectDensityCss();\n }, [themeName, mode, density, themes]);\n\n // Persist on change.\n //\n // The first run is SKIPPED via `skipFirstPersistRef`: state at mount\n // is the SSR-safe default. If we wrote it to storage immediately,\n // we'd clobber the user's stored preference between mount and the\n // post-mount hydration effect that promotes the stored value. After\n // the first call, every subsequent run persists — whether the change\n // came from the hydration effect (no-op write back of the stored\n // value) or a user-driven `setTheme` / `toggleMode` / `setDensity`.\n useEffect(() => {\n if (skipFirstPersistRef.current) {\n skipFirstPersistRef.current = false;\n return;\n }\n if (typeof window === \"undefined\" || !storageKey) return;\n try {\n window.localStorage.setItem(`${storageKey}:name`, themeName);\n window.localStorage.setItem(`${storageKey}:mode`, mode);\n window.localStorage.setItem(`${storageKey}:density`, density);\n } catch (err) {\n // Storage may fail in private mode; behavior remains correct (state\n // lives in memory). Per HIGH-006 we surface a one-time dev warning so\n // the engineer sees something instead of complete silence.\n warnStorageFailure(\"persist theme + mode + density\", err);\n }\n }, [themeName, mode, density, storageKey]);\n\n const setTheme = useCallback((name: string) => setThemeName(name), []);\n const setMode = useCallback((next: ThemeMode) => {\n // T5.1 / D6: fix the user preference; subsequent system changes no longer override.\n userOverrodeModeRef.current = true;\n setModeState(next);\n }, []);\n const toggleMode = useCallback(() => {\n userOverrodeModeRef.current = true;\n setModeState((cur) => (cur === \"light\" ? \"dark\" : \"light\"));\n }, []);\n const setDensity = useCallback((next: Density) => setDensityState(next), []);\n const registerTheme = useCallback((theme: Theme) => {\n setThemes((cur) => {\n const idx = cur.findIndex((t) => t.name === theme.name);\n if (idx >= 0) {\n const next = cur.slice();\n next[idx] = theme;\n return next;\n }\n return [...cur, theme];\n });\n }, []);\n\n // themes[0] is guaranteed non-undefined by the constructor-time check\n // above (themesProp is non-empty); the non-null assert encodes that\n // invariant for TypeScript, which can't trace it through useState.\n // biome-ignore lint/style/noNonNullAssertion: T2.5 runtime invariant — themesProp non-empty validated at top of function\n const active = themes.find((t) => t.name === themeName) ?? themes[0]!;\n\n const value = useMemo<ThemeContextValue>(\n () => ({\n theme: active,\n mode,\n themes,\n setTheme,\n setMode,\n toggleMode,\n registerTheme,\n }),\n [active, mode, themes, setTheme, setMode, toggleMode, registerTheme],\n );\n\n const densityValue = useMemo(() => ({ density, setDensity }), [density, setDensity]);\n\n return (\n <ThemeContext.Provider value={value}>\n <DensityContext.Provider value={densityValue}>{children}</DensityContext.Provider>\n </ThemeContext.Provider>\n );\n}\n\n/**\n * useTheme — access theme state from any component inside <ThemeProvider>.\n * Throws if used outside the provider — fail-fast.\n */\nfunction useTheme(): ThemeContextValue {\n const ctx = useContext(ThemeContext);\n if (!ctx) {\n throw new Error(\"useTheme must be used inside <ThemeProvider>.\");\n }\n return ctx;\n}\n\nexport { ThemeProvider, useTheme };\n","/**\n * ThemeScript — inline `<script>` for SSR-safe theme initialization.\n *\n * Renders a synchronous script that runs BEFORE React hydration. It reads the\n * persisted theme + mode from localStorage (or falls back to the defaults) and\n * sets `data-theme` / `data-mode` on `<html>`, plus the `.dark` class when\n * mode is dark. This eliminates FOUC and avoids hydration mismatch warnings\n * when the user's persisted choice differs from the SSR defaults.\n *\n * Place this in `<head>` ABOVE `<body>`. The component does not need to live\n * inside `<ThemeProvider>`.\n *\n * Security: every interpolated value is passed through `safe()`, which both\n * `JSON.stringify`s the value AND escapes `<` to `<`. The `<` escape is\n * REQUIRED because `JSON.stringify` alone does NOT escape `/`, so a payload\n * like `\"</script><script>alert(1)</script>\"` would otherwise break out of\n * the inline `<script>` tag even though it stays inside a JS string literal.\n * (The browser tokenizes `</script>` at the HTML layer before JS parses.)\n *\n * Example (Next.js App Router): see docs/design-system.md → SSR section.\n * Pass `defaultTheme` and `defaultMode` to align with the consumer's\n * preferred initial state. Always wrap the root in `<html\n * suppressHydrationWarning>` to silence the expected one-render diff.\n */\nimport type { JSX } from \"react\";\nimport type { ThemeMode } from \"./types.js\";\n\ninterface ThemeScriptProps {\n /** Theme name to apply when no persisted value exists. Default `\"violet-forge\"`. */\n defaultTheme?: string;\n /** Mode to apply when no persisted value exists. Default `\"dark\"`. */\n defaultMode?: ThemeMode;\n /**\n * Density to apply when no persisted value exists. Default `\"comfortable\"`.\n * Mirrors `ThemeProvider`'s `defaultDensity` so the inline-script and\n * the React provider agree on the SSR-default density (and the\n * `data-density` attribute set by this script matches what\n * `ThemeProvider` promotes via its post-mount hydration effect).\n */\n defaultDensity?: \"compact\" | \"comfortable\" | \"spacious\";\n /**\n * localStorage namespace. Must match the `storageKey` passed to\n * `<ThemeProvider>`. Default `\"theo-ui:theme\"`. Pass `null` to disable\n * persistence reads (the script will always apply defaults).\n */\n storageKey?: string | null;\n}\n\n/**\n * Encode a value for safe embedding inside an inline `<script>` block.\n *\n * `JSON.stringify` does NOT escape `/` by default, so `\"</script>\"` survives\n * as the literal three-character sequence inside the resulting string. When\n * that string is then rendered inside `<script>...</script>`, the browser's\n * HTML tokenizer sees `</script>` and ends the script tag — regardless of\n * whether the JS parser would have kept it inside a string. Escaping `<` to\n * its Unicode escape `<` preserves JS semantics (the JS parser still\n * resolves the escape to `<`) while making the HTML tokenizer happy.\n *\n * Reference: OWASP \"JSON-in-script\" guidance; React's own server-renderer\n * applies the same escape for inline JSON.\n */\nfunction safe(value: unknown): string {\n return JSON.stringify(value).replace(/</g, \"\\\\u003c\");\n}\n\nfunction buildScript(\n defaultTheme: string,\n defaultMode: ThemeMode,\n defaultDensity: \"compact\" | \"comfortable\" | \"spacious\",\n storageKey: string | null,\n): string {\n const k = safe(storageKey);\n const t = safe(defaultTheme);\n const m = safe(defaultMode);\n const dn = safe(defaultDensity);\n return `(function(){try{var k=${k};var d=document.documentElement;var t=null;var m=null;var dn=null;if(k){t=localStorage.getItem(k+\":name\");m=localStorage.getItem(k+\":mode\");dn=localStorage.getItem(k+\":density\");}d.setAttribute(\"data-theme\",t||${t});d.setAttribute(\"data-mode\",m||${m});d.setAttribute(\"data-density\",dn||${dn});if((m||${m})===\"dark\"){d.classList.add(\"dark\");}}catch(e){}})();`;\n}\n\nfunction ThemeScript({\n defaultTheme = \"violet-forge\",\n defaultMode = \"dark\",\n defaultDensity = \"comfortable\",\n storageKey = \"theo-ui:theme\",\n}: ThemeScriptProps): JSX.Element {\n const code = buildScript(defaultTheme, defaultMode, defaultDensity, storageKey);\n // biome-ignore lint/security/noDangerouslySetInnerHtml: payload is JSON.stringify-encoded literals (no user input); intentional for SSR theme bootstrap before React hydrates\n return <script suppressHydrationWarning dangerouslySetInnerHTML={{ __html: code }} />;\n}\n\nexport { ThemeScript };\n","import * as DropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport { Check, Moon, Palette, Sun } from \"lucide-react\";\nimport type { JSX } from \"react\";\nimport { cn } from \"../lib/cn.js\";\nimport { useTheme } from \"./theme-provider.js\";\n\ninterface ThemeSwitcherProps {\n className?: string;\n /** If true, renders mode toggle inline next to the theme menu. */\n showModeToggle?: boolean;\n}\n\n/**\n * ThemeSwitcher — drop-in theme + mode picker.\n *\n * Two affordances:\n * - Palette dropdown lists all registered themes with the active marked.\n * - Optional sun/moon button toggles light/dark.\n *\n * Stateless wrt itself — pulls state from `useTheme()`.\n */\nfunction ThemeSwitcher({ className, showModeToggle = true }: ThemeSwitcherProps): JSX.Element {\n const { theme, themes, setTheme, mode, toggleMode } = useTheme();\n\n return (\n <div className={cn(\"inline-flex items-center gap-1\", className)}>\n {/* LOW-006: announce theme + mode changes to assistive tech. The\n * Provider applies tokens via `data-theme`/`data-mode` (visual cue),\n * but screen-reader users get no feedback without this aria-live\n * region. Polite so it doesn't interrupt the user's flow. */}\n <span aria-live=\"polite\" aria-atomic=\"true\" className=\"sr-only\">\n Theme: {theme.label}, mode: {mode}\n </span>\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <button\n type=\"button\"\n aria-label={`Theme: ${theme.label}`}\n className={cn(\n \"inline-flex h-9 items-center gap-2 rounded-lg border border-border/60 bg-card px-3\",\n \"font-medium font-sans text-body-sm text-foreground\",\n \"transition-colors hover:bg-muted\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n )}\n >\n <Palette className=\"size-4 text-primary\" aria-hidden=\"true\" />\n <span>{theme.label}</span>\n </button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n align=\"end\"\n sideOffset={6}\n className={cn(\n \"z-50 min-w-[16rem] overflow-hidden rounded-lg border bg-popover p-1 text-popover-foreground shadow-md\",\n \"data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:animate-in\",\n \"data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:animate-out\",\n )}\n >\n {themes.map((t) => (\n <DropdownMenu.Item\n key={t.name}\n onSelect={() => setTheme(t.name)}\n className={cn(\n \"flex cursor-pointer items-start justify-between gap-3 rounded-md px-2 py-2\",\n \"focus:bg-muted focus:outline-none data-[highlighted]:bg-muted\",\n )}\n >\n <span className=\"flex min-w-0 flex-col\">\n <span className=\"font-medium text-body-sm\">{t.label}</span>\n {t.description ? (\n <span className=\"text-body-sm text-muted-foreground\">{t.description}</span>\n ) : null}\n </span>\n {t.name === theme.name ? (\n <Check className=\"mt-1 size-4 shrink-0 text-primary\" aria-hidden=\"true\" />\n ) : null}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n\n {showModeToggle ? (\n <button\n type=\"button\"\n onClick={toggleMode}\n aria-label={`Switch to ${mode === \"light\" ? \"dark\" : \"light\"} mode`}\n className={cn(\n \"inline-flex size-9 items-center justify-center rounded-lg border border-border/60 bg-card\",\n \"text-foreground transition-colors hover:bg-muted\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n )}\n >\n {mode === \"light\" ? <Moon className=\"size-4\" /> : <Sun className=\"size-4\" />}\n </button>\n ) : null}\n </div>\n );\n}\n\nexport { ThemeSwitcher };\n","import type { Theme } from \"./types.js\";\n\n/**\n * Violet Forge — the default Theo theme.\n *\n * Identity: Theo violet primary (#7C3AED), burnt sienna accent (#C96442),\n * Vercel-style neutral surfaces (pure white light / charcoal dark),\n * Geist Sans + Geist Mono throughout.\n *\n * Source of truth for `data-theme` overrides. Values mirror\n * src/styles/tokens.css for the default `:root`.\n */\nexport const violetForge: Theme = {\n name: \"violet-forge\",\n label: \"Violet Forge\",\n description: \"Theo default — violet primary, burnt sienna accent, Geist Sans + Geist Mono.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"oklch(1 0 0)\",\n foreground: \"oklch(0.146 0 0)\",\n card: \"oklch(1 0 0)\",\n \"card-foreground\": \"oklch(0.146 0 0)\",\n popover: \"oklch(1 0 0)\",\n \"popover-foreground\": \"oklch(0.146 0 0)\",\n primary: \"oklch(0.542 0.245 293)\",\n \"primary-foreground\": \"oklch(1 0 0)\",\n secondary: \"oklch(0.97 0 0)\",\n \"secondary-foreground\": \"oklch(0.146 0 0)\",\n accent: \"oklch(0.621 0.132 39)\",\n \"accent-foreground\": \"oklch(1 0 0)\",\n muted: \"oklch(0.97 0 0)\",\n \"muted-foreground\": \"oklch(0.555 0 0)\",\n border: \"oklch(0.931 0 0)\",\n input: \"oklch(0.931 0 0)\",\n ring: \"oklch(0.542 0.245 293)\",\n success: \"oklch(0.611 0.161 149.7)\",\n \"success-foreground\": \"oklch(1 0 0)\",\n warning: \"oklch(0.67 0.154 60.6)\",\n \"warning-foreground\": \"oklch(1 0 0)\",\n destructive: \"oklch(0.579 0.214 27.2)\",\n \"destructive-foreground\": \"oklch(1 0 0)\",\n info: \"oklch(0.626 0.186 259.6)\",\n \"info-foreground\": \"oklch(1 0 0)\",\n \"status-online\": \"oklch(0.611 0.161 149.7)\",\n \"status-online-foreground\": \"oklch(1 0 0)\",\n \"status-offline\": \"oklch(0.579 0.214 27.2)\",\n \"status-offline-foreground\": \"oklch(1 0 0)\",\n \"status-degraded\": \"oklch(0.67 0.154 60.6)\",\n \"status-degraded-foreground\": \"oklch(1 0 0)\",\n \"status-info\": \"oklch(0.626 0.186 259.6)\",\n \"status-info-foreground\": \"oklch(1 0 0)\",\n },\n dark: {\n background: \"oklch(0.146 0 0)\",\n foreground: \"oklch(0.97 0 0)\",\n card: \"oklch(0.182 0 0)\",\n \"card-foreground\": \"oklch(0.97 0 0)\",\n popover: \"oklch(0.204 0 0)\",\n \"popover-foreground\": \"oklch(0.97 0 0)\",\n primary: \"oklch(0.542 0.245 293)\",\n \"primary-foreground\": \"oklch(1 0 0)\",\n secondary: \"oklch(0.227 0 0)\",\n \"secondary-foreground\": \"oklch(0.97 0 0)\",\n accent: \"oklch(0.621 0.132 39)\",\n \"accent-foreground\": \"oklch(1 0 0)\",\n muted: \"oklch(0.227 0 0)\",\n \"muted-foreground\": \"oklch(0.683 0 0)\",\n border: \"oklch(0.28 0 0)\",\n input: \"oklch(0.227 0 0)\",\n ring: \"oklch(0.542 0.245 293)\",\n success: \"oklch(0.814 0.192 155.7)\",\n \"success-foreground\": \"oklch(0.146 0 0)\",\n warning: \"oklch(0.77 0.165 70.6)\",\n \"warning-foreground\": \"oklch(0.146 0 0)\",\n destructive: \"oklch(0.677 0.213 15.6)\",\n \"destructive-foreground\": \"oklch(0.146 0 0)\",\n info: \"oklch(0.732 0.142 254.4)\",\n \"info-foreground\": \"oklch(0.146 0 0)\",\n \"status-online\": \"oklch(0.814 0.192 155.7)\",\n \"status-online-foreground\": \"oklch(0.146 0 0)\",\n \"status-offline\": \"oklch(0.677 0.213 15.6)\",\n \"status-offline-foreground\": \"oklch(0.146 0 0)\",\n \"status-degraded\": \"oklch(0.77 0.165 70.6)\",\n \"status-degraded-foreground\": \"oklch(0.146 0 0)\",\n \"status-info\": \"oklch(0.732 0.142 254.4)\",\n \"status-info-foreground\": \"oklch(0.146 0 0)\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * Classic Paper — visibly warm cream surface; Inter + JetBrains Mono.\n *\n * Identity: cream paper background with sepia warmth (calibrated against the\n * Vintage Paper / Anthropic Claude UI references), deep navy foreground,\n * indigo primary. Optimized for long agent/chat sessions where pure-white\n * surfaces cause vision fatigue (per IxDF 2026 + ACM 2025 light-mode studies).\n *\n * Token calibration (light mode):\n * - background L=0.95 chroma=0.025 hue=80 — visibly cream paper\n * - card L=0.97 chroma=0.012 hue=80 — sub-paper layer (cards stand out)\n * - foreground unchanged (deep navy, AAA contrast >12:1 vs background)\n *\n * Dark mirror unchanged.\n */\nexport const classicPaper: Theme = {\n name: \"classic-paper\",\n label: \"Classic Paper\",\n description: \"Inter + paper background. Maximum legibility, conservative.\",\n fonts: {\n display: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n mono: '\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;700&display=swap\",\n ],\n light: {\n background: \"oklch(0.95 0.025 80)\",\n foreground: \"oklch(0.206 0.039 265.5)\",\n card: \"oklch(0.97 0.012 80)\",\n \"card-foreground\": \"oklch(0.206 0.039 265.5)\",\n popover: \"oklch(0.98 0.008 80)\",\n \"popover-foreground\": \"oklch(0.206 0.039 265.5)\",\n primary: \"oklch(0.545 0.215 262.7)\",\n \"primary-foreground\": \"oklch(1 0 0)\",\n secondary: \"oklch(0.93 0.02 80)\",\n \"secondary-foreground\": \"oklch(0.206 0.039 265.5)\",\n accent: \"oklch(0.647 0.139 69)\",\n \"accent-foreground\": \"oklch(1 0 0)\",\n muted: \"oklch(0.93 0.02 80)\",\n \"muted-foreground\": \"oklch(0.45 0.03 80)\",\n border: \"oklch(0.88 0.025 80)\",\n input: \"oklch(0.92 0.02 80)\",\n ring: \"oklch(0.545 0.215 262.7)\",\n success: \"oklch(0.611 0.161 149.7)\",\n \"success-foreground\": \"oklch(1 0 0)\",\n warning: \"oklch(0.67 0.154 60.6)\",\n \"warning-foreground\": \"oklch(1 0 0)\",\n destructive: \"oklch(0.579 0.214 27.2)\",\n \"destructive-foreground\": \"oklch(1 0 0)\",\n info: \"oklch(0.626 0.186 259.6)\",\n \"info-foreground\": \"oklch(1 0 0)\",\n \"status-online\": \"oklch(0.611 0.161 149.7)\",\n \"status-online-foreground\": \"oklch(1 0 0)\",\n \"status-offline\": \"oklch(0.579 0.214 27.2)\",\n \"status-offline-foreground\": \"oklch(1 0 0)\",\n \"status-degraded\": \"oklch(0.67 0.154 60.6)\",\n \"status-degraded-foreground\": \"oklch(1 0 0)\",\n \"status-info\": \"oklch(0.626 0.186 259.6)\",\n \"status-info-foreground\": \"oklch(1 0 0)\",\n },\n // Dark mirror — mainly the same hues with inverted lightness so the theme\n // still feels coherent if a consumer toggles `.dark`.\n dark: {\n background: \"oklch(0.177 0.029 265.8)\",\n foreground: \"oklch(0.984 0.003 247.9)\",\n card: \"oklch(0.206 0.039 265.5)\",\n \"card-foreground\": \"oklch(0.984 0.003 247.9)\",\n popover: \"oklch(0.206 0.039 265.5)\",\n \"popover-foreground\": \"oklch(0.984 0.003 247.9)\",\n primary: \"oklch(0.626 0.186 259.6)\",\n \"primary-foreground\": \"oklch(0.206 0.039 265.5)\",\n secondary: \"oklch(0.291 0.022 259.9)\",\n \"secondary-foreground\": \"oklch(0.984 0.003 247.9)\",\n accent: \"oklch(0.803 0.15 74.7)\",\n \"accent-foreground\": \"oklch(0.206 0.039 265.5)\",\n muted: \"oklch(0.291 0.022 259.9)\",\n \"muted-foreground\": \"oklch(0.71 0.035 256.8)\",\n border: \"oklch(0.329 0.026 259.9)\",\n input: \"oklch(0.291 0.022 259.9)\",\n ring: \"oklch(0.626 0.186 259.6)\",\n success: \"oklch(0.814 0.192 155.7)\",\n \"success-foreground\": \"oklch(0.206 0.039 265.5)\",\n warning: \"oklch(0.77 0.165 70.6)\",\n \"warning-foreground\": \"oklch(0.206 0.039 265.5)\",\n destructive: \"oklch(0.677 0.213 15.6)\",\n \"destructive-foreground\": \"oklch(0.206 0.039 265.5)\",\n info: \"oklch(0.732 0.142 254.4)\",\n \"info-foreground\": \"oklch(0.206 0.039 265.5)\",\n \"status-online\": \"oklch(0.814 0.192 155.7)\",\n \"status-online-foreground\": \"oklch(0.206 0.039 265.5)\",\n \"status-offline\": \"oklch(0.677 0.213 15.6)\",\n \"status-offline-foreground\": \"oklch(0.206 0.039 265.5)\",\n \"status-degraded\": \"oklch(0.77 0.165 70.6)\",\n \"status-degraded-foreground\": \"oklch(0.206 0.039 265.5)\",\n \"status-info\": \"oklch(0.732 0.142 254.4)\",\n \"status-info-foreground\": \"oklch(0.206 0.039 265.5)\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * Aurora Terminal — dark-first, cyan-aurora primary, Geist Mono everywhere.\n *\n * Identity: deep oceanic background, cyan-aurora primary, aurora-pink accent.\n * Headers use Geist with heavier tracking; body uses Geist Mono for full\n * \"developer console\" feel. Suits CLI/devtools showcase.\n */\nexport const auroraTerminal: Theme = {\n name: \"aurora-terminal\",\n label: \"Aurora Terminal\",\n description: \"Dark sci-fi developer console — cyan-aurora + Geist Mono body.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"oklch(0.966 0.006 264.5)\",\n foreground: \"oklch(0.206 0.039 265.5)\",\n card: \"oklch(1 0 0)\",\n \"card-foreground\": \"oklch(0.206 0.039 265.5)\",\n popover: \"oklch(1 0 0)\",\n \"popover-foreground\": \"oklch(0.206 0.039 265.5)\",\n primary: \"oklch(0.714 0.12 191)\",\n \"primary-foreground\": \"oklch(0.206 0.039 265.5)\",\n secondary: \"oklch(0.968 0.007 247.9)\",\n \"secondary-foreground\": \"oklch(0.206 0.039 265.5)\",\n accent: \"oklch(0.646 0.206 4.9)\",\n \"accent-foreground\": \"oklch(1 0 0)\",\n muted: \"oklch(0.926 0.013 255)\",\n \"muted-foreground\": \"oklch(0.556 0.04 256.8)\",\n border: \"oklch(0.926 0.013 255)\",\n input: \"oklch(0.926 0.013 255)\",\n ring: \"oklch(0.714 0.12 191)\",\n success: \"oklch(0.711 0.171 155.2)\",\n \"success-foreground\": \"oklch(1 0 0)\",\n warning: \"oklch(0.67 0.154 60.6)\",\n \"warning-foreground\": \"oklch(1 0 0)\",\n destructive: \"oklch(0.579 0.214 27.2)\",\n \"destructive-foreground\": \"oklch(1 0 0)\",\n info: \"oklch(0.626 0.186 259.6)\",\n \"info-foreground\": \"oklch(1 0 0)\",\n \"status-online\": \"oklch(0.711 0.171 155.2)\",\n \"status-online-foreground\": \"oklch(1 0 0)\",\n \"status-offline\": \"oklch(0.579 0.214 27.2)\",\n \"status-offline-foreground\": \"oklch(1 0 0)\",\n \"status-degraded\": \"oklch(0.67 0.154 60.6)\",\n \"status-degraded-foreground\": \"oklch(1 0 0)\",\n \"status-info\": \"oklch(0.626 0.186 259.6)\",\n \"status-info-foreground\": \"oklch(1 0 0)\",\n },\n dark: {\n background: \"oklch(0.169 0.021 268.7)\",\n foreground: \"oklch(0.966 0.006 264.5)\",\n card: \"oklch(0.199 0.027 268.5)\",\n \"card-foreground\": \"oklch(0.966 0.006 264.5)\",\n popover: \"oklch(0.199 0.027 268.5)\",\n \"popover-foreground\": \"oklch(0.966 0.006 264.5)\",\n primary: \"oklch(0.834 0.122 191.9)\",\n \"primary-foreground\": \"oklch(0.169 0.021 268.7)\",\n secondary: \"oklch(0.242 0.03 266.3)\",\n \"secondary-foreground\": \"oklch(0.966 0.006 264.5)\",\n accent: \"oklch(0.68 0.2 3.6)\",\n \"accent-foreground\": \"oklch(0.169 0.021 268.7)\",\n muted: \"oklch(0.242 0.03 266.3)\",\n \"muted-foreground\": \"oklch(0.71 0.035 256.8)\",\n border: \"oklch(0.281 0.035 266.3)\",\n input: \"oklch(0.242 0.03 266.3)\",\n ring: \"oklch(0.834 0.122 191.9)\",\n success: \"oklch(0.814 0.192 155.7)\",\n \"success-foreground\": \"oklch(0.169 0.021 268.7)\",\n warning: \"oklch(0.77 0.165 70.6)\",\n \"warning-foreground\": \"oklch(0.169 0.021 268.7)\",\n destructive: \"oklch(0.677 0.213 15.6)\",\n \"destructive-foreground\": \"oklch(0.169 0.021 268.7)\",\n info: \"oklch(0.732 0.142 254.4)\",\n \"info-foreground\": \"oklch(0.169 0.021 268.7)\",\n \"status-online\": \"oklch(0.814 0.192 155.7)\",\n \"status-online-foreground\": \"oklch(0.169 0.021 268.7)\",\n \"status-offline\": \"oklch(0.677 0.213 15.6)\",\n \"status-offline-foreground\": \"oklch(0.169 0.021 268.7)\",\n \"status-degraded\": \"oklch(0.77 0.165 70.6)\",\n \"status-degraded-foreground\": \"oklch(0.169 0.021 268.7)\",\n \"status-info\": \"oklch(0.732 0.142 254.4)\",\n \"status-info-foreground\": \"oklch(0.169 0.021 268.7)\",\n },\n};\n","/**\n * `defineTheme(input)` — build a `Theme` from a partial override.\n *\n * Reduces the boilerplate of authoring a custom theme from 58 colour\n * keys (`light` × 29 + `dark` × 29) to \"just what you want to change\".\n * The merge always uses `violetForge` as the base — this is a pure,\n * deterministic helper that does not depend on whatever theme is active\n * at the call site.\n *\n * The `Theme` object it returns is drop-in compatible with\n * `<ThemeProvider themes={[...]}>` — same shape as `violetForge`,\n * `classicPaper`, and `auroraTerminal`.\n *\n * Honest caveat: if you override `light.primary` but NOT `dark.primary`,\n * the two modes will use different colours — your override in light,\n * Violet Forge's default in dark. That's intentional. Pass both sides\n * to keep them in sync.\n *\n * @example\n * import { defineTheme, hex } from \"@theokit/ui\";\n * export const corp = defineTheme({\n * name: \"corp\",\n * light: { primary: hex(\"#0EA5E9\") },\n * dark: { primary: hex(\"#38BDF8\") },\n * });\n *\n * Plan: `.claude/knowledge-base/plans/theming-and-sizes-plan.md` T2.1.\n */\nimport type { ColorScale, Theme, ThemeFonts } from \"./types.js\";\nimport { violetForge } from \"./violet-forge.js\";\n\nconst NAME_PATTERN = /^[a-z][a-z0-9-]*$/i;\n\nexport interface DefineThemeInput {\n /**\n * Stable id used in `data-theme=\"<name>\"` on the root element. Must\n * match `/^[a-z][a-z0-9-]*$/i` (CSS-identifier-safe). Required.\n */\n name: string;\n /**\n * Human-readable label for theme switchers. Defaults to the\n * capitalized version of `name` (e.g. \"corp\" → \"Corp\").\n */\n label?: string;\n /** Optional one-line description shown in switchers. */\n description?: string;\n /**\n * Override light-mode colours. Any key omitted is inherited from\n * `violetForge.light`. See `ColorScale` for the full list.\n */\n light?: Partial<ColorScale>;\n /**\n * Override dark-mode colours. Any key omitted is inherited from\n * `violetForge.dark`.\n */\n dark?: Partial<ColorScale>;\n /**\n * Override fonts (`display`, `body`, `mono`). Any key omitted is\n * inherited from `violetForge.fonts`.\n */\n fonts?: Partial<ThemeFonts>;\n /**\n * Replace the default remote font URLs. Pass an empty array to skip\n * font fetching entirely. Defaults to `violetForge.fontUrls` when\n * omitted (so consumers that don't care still get Geist preloaded).\n */\n fontUrls?: string[];\n}\n\nfunction defaultLabel(name: string): string {\n if (name.length === 0) return name;\n return name.charAt(0).toUpperCase() + name.slice(1);\n}\n\nexport function defineTheme(input: DefineThemeInput): Theme {\n if (typeof input?.name !== \"string\" || input.name.length === 0) {\n throw new Error(\"defineTheme: `name` is required and cannot be empty.\");\n }\n if (!NAME_PATTERN.test(input.name)) {\n throw new Error(\n `defineTheme: invalid name \"${input.name}\". Must match /^[a-z][a-z0-9-]*$/i — letters, digits, and hyphens only, starting with a letter.`,\n );\n }\n\n const lightOverride = input.light ?? {};\n const darkOverride = input.dark ?? {};\n const fontsOverride = input.fonts ?? {};\n\n const theme: Theme = {\n name: input.name,\n label: input.label ?? defaultLabel(input.name),\n description: input.description,\n fonts: { ...violetForge.fonts, ...fontsOverride },\n light: { ...violetForge.light, ...lightOverride },\n dark: { ...violetForge.dark, ...darkOverride },\n fontUrls: input.fontUrls ?? violetForge.fontUrls,\n };\n\n return theme;\n}\n","/**\n * Color helpers for `ColorScale` and `defineTheme`.\n *\n * Post-T2.6 (community-best-practices alignment, ADR-0005): the canonical\n * output format is OKLCH (`\"oklch(L C H)\"`). Built-in themes also use OKLCH\n * after the T2.4 migration. The CSS regex (`COLOR_VALUE_PATTERN`) accepts\n * both formats for backward compatibility — legacy themes pinned to the\n * HSL split format keep working.\n *\n * Helpers:\n * - hex(input) → \"oklch(L C H)\" (NEW — primary path post-T2.6)\n * - rgb(r, g, b) → \"oklch(L C H)\" (NEW)\n * - hexToHsl(input) → \"H S% L%\" (legacy — deprecated, kept 1 minor)\n * - rgbToHsl(...) → \"H S% L%\" (legacy — deprecated)\n *\n * Alpha channels are intentionally discarded — `ColorScale` is opaque;\n * compose alpha in CSS via `color-mix(in oklch, var(--primary) 50%, transparent)`.\n *\n * Original plan: `.claude/knowledge-base/plans/theming-and-sizes-plan.md` T2.2.\n * Updated by: `.claude/knowledge-base/plans/theo-ui-community-best-practices-alignment-plan.md` T2.6.\n */\n\nfunction hexCharToNibble(ch: string): number {\n if (ch >= \"0\" && ch <= \"9\") return ch.charCodeAt(0) - 48;\n if (ch >= \"a\" && ch <= \"f\") return ch.charCodeAt(0) - 87;\n if (ch >= \"A\" && ch <= \"F\") return ch.charCodeAt(0) - 55;\n throw new Error(`hex(): invalid hex character \"${ch}\"`);\n}\n\nfunction parseHex(input: string): { r: number; g: number; b: number } {\n if (!input.startsWith(\"#\")) {\n throw new Error(`hex(): expected '#'-prefixed input, got \"${input}\"`);\n }\n const body = input.slice(1);\n let r: number;\n let g: number;\n let b: number;\n if (body.length === 3 || body.length === 4) {\n // Short form #rgb or #rgba — expand each nibble. charAt always returns\n // a string (empty for OOB), so hexCharToNibble throws on the empty\n // string the same way it does on any invalid char — no NonNull needed.\n const nr = hexCharToNibble(body.charAt(0));\n const ng = hexCharToNibble(body.charAt(1));\n const nb = hexCharToNibble(body.charAt(2));\n r = (nr << 4) | nr;\n g = (ng << 4) | ng;\n b = (nb << 4) | nb;\n // Alpha char (body[3]) is silently dropped per spec — ColorScale is opaque.\n } else if (body.length === 6 || body.length === 8) {\n r = (hexCharToNibble(body.charAt(0)) << 4) | hexCharToNibble(body.charAt(1));\n g = (hexCharToNibble(body.charAt(2)) << 4) | hexCharToNibble(body.charAt(3));\n b = (hexCharToNibble(body.charAt(4)) << 4) | hexCharToNibble(body.charAt(5));\n // Bytes 6-7 (alpha) silently dropped.\n } else {\n throw new Error(\n `hex(): invalid length ${body.length} for hex input \"${input}\" — expected 3, 4, 6, or 8 hex chars after the '#'.`,\n );\n }\n return { r, g, b };\n}\n\n/**\n * Convert sRGB ([0, 255]^3) to OKLCH via D65 linearization and Oklab matrices.\n * Inline implementation (no external dep): the Oklab paper (Björn Ottosson,\n * 2020) defines the conversion as two matrix products + cube-root nonlinearity.\n * Output: rounded to 3 decimals for L/C, 1 decimal for H.\n */\nfunction rgbToOklch(r: number, g: number, b: number): string {\n // sRGB → linear RGB (gamma decoding).\n const linearize = (c: number): number => {\n const cn = c / 255;\n return cn <= 0.04045 ? cn / 12.92 : ((cn + 0.055) / 1.055) ** 2.4;\n };\n const rl = linearize(r);\n const gl = linearize(g);\n const bl = linearize(b);\n\n // Linear RGB → LMS via Oklab matrix.\n const l_ = 0.4122214708 * rl + 0.5363325363 * gl + 0.0514459929 * bl;\n const m_ = 0.2119034982 * rl + 0.6806995451 * gl + 0.1073969566 * bl;\n const s_ = 0.0883024619 * rl + 0.2817188376 * gl + 0.6299787005 * bl;\n\n const l = Math.cbrt(l_);\n const m = Math.cbrt(m_);\n const s = Math.cbrt(s_);\n\n // LMS' → Oklab.\n const L = 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s;\n const a = 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s;\n const bComp = 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s;\n\n // Oklab → OKLCH.\n const C = Math.sqrt(a * a + bComp * bComp);\n let H = (Math.atan2(bComp, a) * 180) / Math.PI;\n if (H < 0) H += 360;\n\n const round = (n: number, d: number): number => {\n const f = 10 ** d;\n return Math.round(n * f) / f;\n };\n // Neutrals (C ≈ 0) have an undefined hue; emit 0 to keep regex-friendly.\n const hOut = C < 1e-4 ? 0 : round(H, 1);\n return `oklch(${round(L, 3)} ${round(C, 3)} ${hOut})`;\n}\n\nfunction rgbToHsl(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 let h = 0;\n let s = 0;\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case rn:\n h = (gn - bn) / d + (gn < bn ? 6 : 0);\n break;\n case gn:\n h = (bn - rn) / d + 2;\n break;\n default:\n h = (rn - gn) / d + 4;\n break;\n }\n h *= 60;\n }\n const hh = Math.round(h);\n const ss = Math.round(s * 100);\n const ll = Math.round(l * 100);\n return `${hh} ${ss}% ${ll}%`;\n}\n\n/**\n * Convert a hex color string to the HSL string-tuple format used by\n * `ColorScale` (\"`H S% L%`\", e.g. `\"262 83% 58%\"`).\n *\n * Accepts `#rgb`, `#rgba`, `#rrggbb`, `#rrggbbaa`. Case-insensitive.\n * Alpha bytes are silently dropped — use `hsl(var(--primary) / 0.5)`\n * in CSS for transparency.\n *\n * @throws if the input is malformed.\n *\n * @example\n * hex(\"#7C3AED\") // \"oklch(0.542 0.245 293)\"\n * hex(\"#7c3aed\") // same — case-insensitive\n * hex(\"#abc\") // expanded to \"#aabbcc\"\n */\nexport function hex(input: string): string {\n const { r, g, b } = parseHex(input);\n return rgbToOklch(r, g, b);\n}\n\n/**\n * Legacy helper that returns HSL string-tuple format (pre-T2.6).\n *\n * @deprecated Since 2026-06-03 — use `hex(input)` which returns OKLCH.\n * Kept for one minor cycle to avoid breaking consumers that authored\n * themes using the HSL split format. Both formats are accepted by\n * `ColorScale` and by `<ThemeProvider>` runtime validation.\n */\nexport function hexToHsl(input: string): string {\n const { r, g, b } = parseHex(input);\n return rgbToHsl(r, g, b);\n}\n\n/**\n * Convert an RGB triplet (each in `[0, 255]`) to the HSL string-tuple\n * format used by `ColorScale`.\n *\n * @throws if any channel is out of `[0, 255]`.\n *\n * @example\n * rgb(124, 58, 237) // \"oklch(0.542 0.245 293)\"\n */\nexport function rgb(r: number, g: number, b: number): string {\n for (const value of [r, g, b]) {\n if (!Number.isFinite(value) || value < 0 || value > 255) {\n throw new Error(\n `rgb(): channel out of range — expected 0..255, got ${value}. Did you mix percentage values?`,\n );\n }\n }\n return rgbToOklch(Math.round(r), Math.round(g), Math.round(b));\n}\n\n/**\n * Legacy helper that returns HSL string-tuple format (pre-T2.6).\n *\n * @deprecated Since 2026-06-03 — use `rgb(r, g, b)` which returns OKLCH.\n */\nexport function rgbToHslLegacy(r: number, g: number, b: number): string {\n for (const value of [r, g, b]) {\n if (!Number.isFinite(value) || value < 0 || value > 255) {\n throw new Error(`rgbToHslLegacy(): channel out of range — expected 0..255, got ${value}.`);\n }\n }\n return rgbToHsl(Math.round(r), Math.round(g), Math.round(b));\n}\n","import type { Theme } from \"./types.js\";\n\n/**\n * Vercel Mono — razor-sharp monochrome + signature blue.\n *\n * Inspired by, not affiliated with Vercel. Based on Geist Design tokens\n * (https://github.com/vercel/geist). Light = pure white + black ink + blue\n * accent (#0070F3); dark = near-black canvas + white text + same blue.\n *\n * Plan: .claude/knowledge-base/plans/seven-themes-plan.md T2.1\n */\nexport const vercelMono: Theme = {\n name: \"vercel-mono\",\n label: \"Vercel Mono\",\n description: \"Inspired by, not affiliated with Vercel. Monochrome canvas + signature blue.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"oklch(1 0 0)\",\n foreground: \"oklch(0 0 0)\",\n card: \"oklch(1 0 0)\",\n \"card-foreground\": \"oklch(0 0 0)\",\n popover: \"oklch(1 0 0)\",\n \"popover-foreground\": \"oklch(0 0 0)\",\n primary: \"oklch(0.57 0.211 257.9)\",\n \"primary-foreground\": \"oklch(1 0 0)\",\n secondary: \"oklch(0.97 0 0)\",\n \"secondary-foreground\": \"oklch(0 0 0)\",\n accent: \"oklch(0.57 0.211 257.9)\",\n \"accent-foreground\": \"oklch(1 0 0)\",\n muted: \"oklch(0.97 0 0)\",\n \"muted-foreground\": \"oklch(0.51 0 0)\",\n border: \"oklch(0.939 0 0)\",\n input: \"oklch(0.939 0 0)\",\n ring: \"oklch(0.57 0.211 257.9)\",\n success: \"oklch(0.687 0.127 174)\",\n \"success-foreground\": \"oklch(1 0 0)\",\n warning: \"oklch(0.687 0.155 62.5)\",\n \"warning-foreground\": \"oklch(1 0 0)\",\n destructive: \"oklch(0.531 0.218 29.2)\",\n \"destructive-foreground\": \"oklch(1 0 0)\",\n info: \"oklch(0.57 0.211 257.9)\",\n \"info-foreground\": \"oklch(1 0 0)\",\n \"status-online\": \"oklch(0.687 0.127 174)\",\n \"status-online-foreground\": \"oklch(1 0 0)\",\n \"status-offline\": \"oklch(0.531 0.218 29.2)\",\n \"status-offline-foreground\": \"oklch(1 0 0)\",\n \"status-degraded\": \"oklch(0.687 0.155 62.5)\",\n \"status-degraded-foreground\": \"oklch(1 0 0)\",\n \"status-info\": \"oklch(0.57 0.211 257.9)\",\n \"status-info-foreground\": \"oklch(1 0 0)\",\n },\n dark: {\n background: \"oklch(0.146 0 0)\",\n foreground: \"oklch(0.947 0 0)\",\n card: \"oklch(0.182 0 0)\",\n \"card-foreground\": \"oklch(0.947 0 0)\",\n popover: \"oklch(0.182 0 0)\",\n \"popover-foreground\": \"oklch(0.947 0 0)\",\n primary: \"oklch(0.627 0.203 256.2)\",\n \"primary-foreground\": \"oklch(1 0 0)\",\n secondary: \"oklch(0.248 0 0)\",\n \"secondary-foreground\": \"oklch(0.947 0 0)\",\n accent: \"oklch(0.661 0.184 254.7)\",\n \"accent-foreground\": \"oklch(0 0 0)\",\n muted: \"oklch(0.248 0 0)\",\n \"muted-foreground\": \"oklch(0.683 0 0)\",\n border: \"oklch(0.321 0 0)\",\n input: \"oklch(0.321 0 0)\",\n ring: \"oklch(0.627 0.203 256.2)\",\n success: \"oklch(0.837 0.237 148.6)\",\n \"success-foreground\": \"oklch(0 0 0)\",\n warning: \"oklch(0.81 0.136 70.9)\",\n \"warning-foreground\": \"oklch(0 0 0)\",\n destructive: \"oklch(0.634 0.251 28.5)\",\n \"destructive-foreground\": \"oklch(1 0 0)\",\n info: \"oklch(0.627 0.203 256.2)\",\n \"info-foreground\": \"oklch(1 0 0)\",\n \"status-online\": \"oklch(0.837 0.237 148.6)\",\n \"status-online-foreground\": \"oklch(0 0 0)\",\n \"status-offline\": \"oklch(0.634 0.251 28.5)\",\n \"status-offline-foreground\": \"oklch(1 0 0)\",\n \"status-degraded\": \"oklch(0.81 0.136 70.9)\",\n \"status-degraded-foreground\": \"oklch(0 0 0)\",\n \"status-info\": \"oklch(0.627 0.203 256.2)\",\n \"status-info-foreground\": \"oklch(1 0 0)\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * GitHub Dark — GitHub's default dark theme.\n *\n * Based on the canonical Primer Primitives tokens\n * (https://github.com/primer/primitives, MIT). Light fallback uses GitHub's\n * \"light-default\" Primer scale.\n *\n * Plan: .claude/knowledge-base/plans/seven-themes-plan.md T3.1\n */\nexport const githubDark: Theme = {\n name: \"github-dark\",\n label: \"GitHub Dark\",\n description: \"GitHub's default dark theme. Primer Primitives tokens.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"oklch(1 0 0)\",\n foreground: \"oklch(0.276 0.013 253.5)\",\n card: \"oklch(0.976 0.004 247.9)\",\n \"card-foreground\": \"oklch(0.276 0.013 253.5)\",\n popover: \"oklch(1 0 0)\",\n \"popover-foreground\": \"oklch(0.276 0.013 253.5)\",\n primary: \"oklch(0.539 0.187 257.1)\",\n \"primary-foreground\": \"oklch(1 0 0)\",\n secondary: \"oklch(0.976 0.004 247.9)\",\n \"secondary-foreground\": \"oklch(0.276 0.013 253.5)\",\n accent: \"oklch(0.592 0.19 256.7)\",\n \"accent-foreground\": \"oklch(1 0 0)\",\n muted: \"oklch(0.976 0.004 247.9)\",\n \"muted-foreground\": \"oklch(0.531 0.018 253.4)\",\n border: \"oklch(0.874 0.01 247.9)\",\n input: \"oklch(0.874 0.01 247.9)\",\n ring: \"oklch(0.539 0.187 257.1)\",\n success: \"oklch(0.524 0.14 147.9)\",\n \"success-foreground\": \"oklch(1 0 0)\",\n warning: \"oklch(0.556 0.116 76.9)\",\n \"warning-foreground\": \"oklch(1 0 0)\",\n destructive: \"oklch(0.549 0.203 23.7)\",\n \"destructive-foreground\": \"oklch(1 0 0)\",\n info: \"oklch(0.539 0.187 257.1)\",\n \"info-foreground\": \"oklch(1 0 0)\",\n \"status-online\": \"oklch(0.524 0.14 147.9)\",\n \"status-online-foreground\": \"oklch(1 0 0)\",\n \"status-offline\": \"oklch(0.549 0.203 23.7)\",\n \"status-offline-foreground\": \"oklch(1 0 0)\",\n \"status-degraded\": \"oklch(0.556 0.116 76.9)\",\n \"status-degraded-foreground\": \"oklch(1 0 0)\",\n \"status-info\": \"oklch(0.539 0.187 257.1)\",\n \"status-info-foreground\": \"oklch(1 0 0)\",\n },\n dark: {\n background: \"oklch(0.176 0.014 256.8)\",\n foreground: \"oklch(0.966 0.012 247.9)\",\n card: \"oklch(0.221 0.015 256.8)\",\n \"card-foreground\": \"oklch(0.966 0.012 247.9)\",\n popover: \"oklch(0.221 0.015 256.8)\",\n \"popover-foreground\": \"oklch(0.966 0.012 247.9)\",\n primary: \"oklch(0.637 0.182 254.9)\",\n \"primary-foreground\": \"oklch(1 0 0)\",\n secondary: \"oklch(0.252 0.019 256.8)\",\n \"secondary-foreground\": \"oklch(0.966 0.012 247.9)\",\n accent: \"oklch(0.66 0.17 255.2)\",\n \"accent-foreground\": \"oklch(1 0 0)\",\n muted: \"oklch(0.252 0.019 256.8)\",\n \"muted-foreground\": \"oklch(0.668 0.018 253.4)\",\n border: \"oklch(0.326 0.016 253.5)\",\n input: \"oklch(0.326 0.016 253.5)\",\n ring: \"oklch(0.637 0.182 254.9)\",\n success: \"oklch(0.712 0.18 147.9)\",\n \"success-foreground\": \"oklch(0 0 0)\",\n warning: \"oklch(0.726 0.142 80.6)\",\n \"warning-foreground\": \"oklch(0 0 0)\",\n destructive: \"oklch(0.653 0.209 25.9)\",\n \"destructive-foreground\": \"oklch(1 0 0)\",\n info: \"oklch(0.637 0.182 254.9)\",\n \"info-foreground\": \"oklch(1 0 0)\",\n \"status-online\": \"oklch(0.712 0.18 147.9)\",\n \"status-online-foreground\": \"oklch(0 0 0)\",\n \"status-offline\": \"oklch(0.653 0.209 25.9)\",\n \"status-offline-foreground\": \"oklch(1 0 0)\",\n \"status-degraded\": \"oklch(0.726 0.142 80.6)\",\n \"status-degraded-foreground\": \"oklch(0 0 0)\",\n \"status-info\": \"oklch(0.637 0.182 254.9)\",\n \"status-info-foreground\": \"oklch(1 0 0)\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * Dracula — the cult OSS dark theme (https://draculatheme.com, MIT).\n *\n * Dark mode = canonical Dracula spec (background #282A36, signature pink\n * #FF79C6, purple #BD93F9, etc.).\n *\n * Note: \"light\" mode is a Theo-original adaptation — Dracula upstream\n * spec is dark-only. We darken the signature pink/purple to pass WCAG AA\n * against light backgrounds, sacrificing palette purity for accessibility.\n *\n * Plan: .claude/knowledge-base/plans/seven-themes-plan.md T4.1\n */\nexport const dracula: Theme = {\n name: \"dracula\",\n label: \"Dracula\",\n description: \"Cult OSS theme (draculatheme.com, MIT). Light mode is Theo-adapted for WCAG AA.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"oklch(0.977 0.008 106.5)\",\n foreground: \"oklch(0.284 0.022 277.1)\",\n card: \"oklch(1 0 0)\",\n \"card-foreground\": \"oklch(0.284 0.022 277.1)\",\n popover: \"oklch(1 0 0)\",\n \"popover-foreground\": \"oklch(0.284 0.022 277.1)\",\n primary: \"oklch(0.489 0.227 305.4)\",\n \"primary-foreground\": \"oklch(1 0 0)\",\n secondary: \"oklch(0.949 0.011 106.6)\",\n \"secondary-foreground\": \"oklch(0.284 0.022 277.1)\",\n accent: \"oklch(0.438 0.191 302.4)\",\n \"accent-foreground\": \"oklch(1 0 0)\",\n muted: \"oklch(0.949 0.011 106.6)\",\n \"muted-foreground\": \"oklch(0.478 0.051 270.1)\",\n border: \"oklch(0.919 0.012 106.6)\",\n input: \"oklch(0.919 0.012 106.6)\",\n ring: \"oklch(0.489 0.227 305.4)\",\n success: \"oklch(0.515 0.1 147.3)\",\n \"success-foreground\": \"oklch(1 0 0)\",\n warning: \"oklch(0.549 0.111 82.7)\",\n \"warning-foreground\": \"oklch(1 0 0)\",\n destructive: \"oklch(0.504 0.187 27.2)\",\n \"destructive-foreground\": \"oklch(1 0 0)\",\n info: \"oklch(0.533 0.093 217.1)\",\n \"info-foreground\": \"oklch(1 0 0)\",\n \"status-online\": \"oklch(0.515 0.1 147.3)\",\n \"status-online-foreground\": \"oklch(1 0 0)\",\n \"status-offline\": \"oklch(0.504 0.187 27.2)\",\n \"status-offline-foreground\": \"oklch(1 0 0)\",\n \"status-degraded\": \"oklch(0.549 0.111 82.7)\",\n \"status-degraded-foreground\": \"oklch(1 0 0)\",\n \"status-info\": \"oklch(0.533 0.093 217.1)\",\n \"status-info-foreground\": \"oklch(1 0 0)\",\n },\n dark: {\n background: \"oklch(0.284 0.022 277.1)\",\n foreground: \"oklch(0.977 0.008 106.5)\",\n card: \"oklch(0.322 0.024 278.1)\",\n \"card-foreground\": \"oklch(0.977 0.008 106.5)\",\n popover: \"oklch(0.322 0.024 278.1)\",\n \"popover-foreground\": \"oklch(0.977 0.008 106.5)\",\n primary: \"oklch(0.756 0.181 347.2)\",\n \"primary-foreground\": \"oklch(0.284 0.022 277.1)\",\n secondary: \"oklch(0.376 0.03 278)\",\n \"secondary-foreground\": \"oklch(0.977 0.008 106.5)\",\n accent: \"oklch(0.747 0.146 302.2)\",\n \"accent-foreground\": \"oklch(0.284 0.022 277.1)\",\n muted: \"oklch(0.376 0.03 278)\",\n \"muted-foreground\": \"oklch(0.688 0.055 270.5)\",\n border: \"oklch(0.403 0.032 278)\",\n input: \"oklch(0.403 0.032 278)\",\n ring: \"oklch(0.756 0.181 347.2)\",\n success: \"oklch(0.871 0.218 148)\",\n \"success-foreground\": \"oklch(0.284 0.022 277.1)\",\n warning: \"oklch(0.955 0.137 112.9)\",\n \"warning-foreground\": \"oklch(0.284 0.022 277.1)\",\n destructive: \"oklch(0.684 0.205 24.3)\",\n \"destructive-foreground\": \"oklch(1 0 0)\",\n info: \"oklch(0.882 0.093 213.7)\",\n \"info-foreground\": \"oklch(0.284 0.022 277.1)\",\n \"status-online\": \"oklch(0.871 0.218 148)\",\n \"status-online-foreground\": \"oklch(0.284 0.022 277.1)\",\n \"status-offline\": \"oklch(0.684 0.205 24.3)\",\n \"status-offline-foreground\": \"oklch(1 0 0)\",\n \"status-degraded\": \"oklch(0.955 0.137 112.9)\",\n \"status-degraded-foreground\": \"oklch(0.284 0.022 277.1)\",\n \"status-info\": \"oklch(0.882 0.093 213.7)\",\n \"status-info-foreground\": \"oklch(0.284 0.022 277.1)\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * One Dark / One Light — Atom's iconic syntax theme.\n *\n * Sources:\n * - atom/one-dark-syntax (MIT) — dark mode canonical\n * - atom/one-light-syntax (MIT) — light mode canonical\n *\n * Plan: .claude/knowledge-base/plans/seven-themes-plan.md T5.1\n */\nexport const oneDark: Theme = {\n name: \"one-dark\",\n label: \"One Dark\",\n description: \"Atom's One Dark + One Light syntax theme (MIT). Iconic IDE look.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"oklch(0.985 0 0)\",\n foreground: \"oklch(0.35 0.014 276.7)\",\n card: \"oklch(1 0 0)\",\n \"card-foreground\": \"oklch(0.35 0.014 276.7)\",\n popover: \"oklch(1 0 0)\",\n \"popover-foreground\": \"oklch(0.35 0.014 276.7)\",\n primary: \"oklch(0.529 0.235 262.3)\",\n \"primary-foreground\": \"oklch(1 0 0)\",\n secondary: \"oklch(0.962 0 0)\",\n \"secondary-foreground\": \"oklch(0.35 0.014 276.7)\",\n accent: \"oklch(0.522 0.209 328.8)\",\n \"accent-foreground\": \"oklch(1 0 0)\",\n muted: \"oklch(0.962 0 0)\",\n \"muted-foreground\": \"oklch(0.588 0.013 276.9)\",\n border: \"oklch(0.923 0 0)\",\n input: \"oklch(0.923 0 0)\",\n ring: \"oklch(0.529 0.235 262.3)\",\n success: \"oklch(0.515 0.111 143.4)\",\n \"success-foreground\": \"oklch(1 0 0)\",\n warning: \"oklch(0.555 0.116 77)\",\n \"warning-foreground\": \"oklch(1 0 0)\",\n destructive: \"oklch(0.544 0.194 29.8)\",\n \"destructive-foreground\": \"oklch(1 0 0)\",\n info: \"oklch(0.499 0.108 236.7)\",\n \"info-foreground\": \"oklch(1 0 0)\",\n \"status-online\": \"oklch(0.515 0.111 143.4)\",\n \"status-online-foreground\": \"oklch(1 0 0)\",\n \"status-offline\": \"oklch(0.544 0.194 29.8)\",\n \"status-offline-foreground\": \"oklch(1 0 0)\",\n \"status-degraded\": \"oklch(0.555 0.116 77)\",\n \"status-degraded-foreground\": \"oklch(1 0 0)\",\n \"status-info\": \"oklch(0.499 0.108 236.7)\",\n \"status-info-foreground\": \"oklch(1 0 0)\",\n },\n dark: {\n background: \"oklch(0.292 0.016 264.3)\",\n foreground: \"oklch(0.761 0.021 264.4)\",\n card: \"oklch(0.262 0.013 264.3)\",\n \"card-foreground\": \"oklch(0.761 0.021 264.4)\",\n popover: \"oklch(0.262 0.013 264.3)\",\n \"popover-foreground\": \"oklch(0.761 0.021 264.4)\",\n primary: \"oklch(0.732 0.121 245.2)\",\n \"primary-foreground\": \"oklch(0.292 0.016 264.3)\",\n secondary: \"oklch(0.34 0.019 264.3)\",\n \"secondary-foreground\": \"oklch(0.761 0.021 264.4)\",\n accent: \"oklch(0.694 0.163 318)\",\n \"accent-foreground\": \"oklch(0.292 0.016 264.3)\",\n muted: \"oklch(0.34 0.019 264.3)\",\n \"muted-foreground\": \"oklch(0.63 0.02 264.4)\",\n border: \"oklch(0.387 0.023 264.3)\",\n input: \"oklch(0.387 0.023 264.3)\",\n ring: \"oklch(0.732 0.121 245.2)\",\n success: \"oklch(0.768 0.11 133.1)\",\n \"success-foreground\": \"oklch(0.292 0.016 264.3)\",\n warning: \"oklch(0.727 0.095 63.5)\",\n \"warning-foreground\": \"oklch(0.292 0.016 264.3)\",\n destructive: \"oklch(0.67 0.145 16.7)\",\n \"destructive-foreground\": \"oklch(1 0 0)\",\n info: \"oklch(0.722 0.091 206.9)\",\n \"info-foreground\": \"oklch(0.292 0.016 264.3)\",\n \"status-online\": \"oklch(0.768 0.11 133.1)\",\n \"status-online-foreground\": \"oklch(0.292 0.016 264.3)\",\n \"status-offline\": \"oklch(0.67 0.145 16.7)\",\n \"status-offline-foreground\": \"oklch(1 0 0)\",\n \"status-degraded\": \"oklch(0.727 0.095 63.5)\",\n \"status-degraded-foreground\": \"oklch(0.292 0.016 264.3)\",\n \"status-info\": \"oklch(0.722 0.091 206.9)\",\n \"status-info-foreground\": \"oklch(0.292 0.016 264.3)\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * Anthropic-style — claude.ai-inspired editorial calm.\n *\n * Inspired by, not affiliated with Anthropic. Visually informed by claude.ai's\n * warm cream canvas + burnt sienna primary + ink-on-paper feel. No proprietary\n * assets reproduced (font is Geist, colors are independent measurements).\n *\n * Plan: .claude/knowledge-base/plans/seven-themes-plan.md T6.1\n */\nexport const anthropicStyle: Theme = {\n name: \"anthropic-style\",\n label: \"Anthropic-style\",\n description:\n \"Inspired by, not affiliated with Anthropic. Warm cream + burnt sienna editorial feel.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"oklch(0.982 0.005 106.5)\",\n foreground: \"oklch(0.216 0 0)\",\n card: \"oklch(1 0 0)\",\n \"card-foreground\": \"oklch(0.216 0 0)\",\n popover: \"oklch(1 0 0)\",\n \"popover-foreground\": \"oklch(0.216 0 0)\",\n primary: \"oklch(0.555 0.13 38.8)\",\n \"primary-foreground\": \"oklch(1 0 0)\",\n secondary: \"oklch(0.946 0.009 91.5)\",\n \"secondary-foreground\": \"oklch(0.216 0 0)\",\n accent: \"oklch(0.522 0.075 57.6)\",\n \"accent-foreground\": \"oklch(1 0 0)\",\n muted: \"oklch(0.946 0.009 91.5)\",\n \"muted-foreground\": \"oklch(0.501 0 0)\",\n border: \"oklch(0.911 0.015 91.5)\",\n input: \"oklch(0.911 0.015 91.5)\",\n ring: \"oklch(0.555 0.13 38.8)\",\n success: \"oklch(0.518 0.107 146.3)\",\n \"success-foreground\": \"oklch(1 0 0)\",\n warning: \"oklch(0.539 0.102 70.9)\",\n \"warning-foreground\": \"oklch(1 0 0)\",\n destructive: \"oklch(0.487 0.15 28.9)\",\n \"destructive-foreground\": \"oklch(1 0 0)\",\n info: \"oklch(0.492 0.078 233.2)\",\n \"info-foreground\": \"oklch(1 0 0)\",\n \"status-online\": \"oklch(0.518 0.107 146.3)\",\n \"status-online-foreground\": \"oklch(1 0 0)\",\n \"status-offline\": \"oklch(0.487 0.15 28.9)\",\n \"status-offline-foreground\": \"oklch(1 0 0)\",\n \"status-degraded\": \"oklch(0.539 0.102 70.9)\",\n \"status-degraded-foreground\": \"oklch(1 0 0)\",\n \"status-info\": \"oklch(0.492 0.078 233.2)\",\n \"status-info-foreground\": \"oklch(1 0 0)\",\n },\n dark: {\n background: \"oklch(0.216 0 0)\",\n foreground: \"oklch(0.951 0.009 78.3)\",\n card: \"oklch(0.27 0 0)\",\n \"card-foreground\": \"oklch(0.951 0.009 78.3)\",\n popover: \"oklch(0.27 0 0)\",\n \"popover-foreground\": \"oklch(0.951 0.009 78.3)\",\n primary: \"oklch(0.679 0.125 40.5)\",\n \"primary-foreground\": \"oklch(1 0 0)\",\n secondary: \"oklch(0.301 0 0)\",\n \"secondary-foreground\": \"oklch(0.951 0.009 78.3)\",\n accent: \"oklch(0.645 0.072 49.3)\",\n \"accent-foreground\": \"oklch(1 0 0)\",\n muted: \"oklch(0.301 0 0)\",\n \"muted-foreground\": \"oklch(0.719 0.01 67.7)\",\n border: \"oklch(0.371 0 0)\",\n input: \"oklch(0.371 0 0)\",\n ring: \"oklch(0.679 0.125 40.5)\",\n success: \"oklch(0.805 0.186 151.6)\",\n \"success-foreground\": \"oklch(0.216 0 0)\",\n warning: \"oklch(0.874 0.15 90.2)\",\n \"warning-foreground\": \"oklch(0.216 0 0)\",\n destructive: \"oklch(0.636 0.208 25.4)\",\n \"destructive-foreground\": \"oklch(1 0 0)\",\n info: \"oklch(0.722 0.113 233.1)\",\n \"info-foreground\": \"oklch(0.216 0 0)\",\n \"status-online\": \"oklch(0.805 0.186 151.6)\",\n \"status-online-foreground\": \"oklch(0.216 0 0)\",\n \"status-offline\": \"oklch(0.636 0.208 25.4)\",\n \"status-offline-foreground\": \"oklch(1 0 0)\",\n \"status-degraded\": \"oklch(0.874 0.15 90.2)\",\n \"status-degraded-foreground\": \"oklch(0.216 0 0)\",\n \"status-info\": \"oklch(0.722 0.113 233.1)\",\n \"status-info-foreground\": \"oklch(0.216 0 0)\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * OpenAI-style — chatgpt.com-inspired minimal tech-utility.\n *\n * Inspired by, not affiliated with OpenAI. Pure white / charcoal canvas +\n * signature ChatGPT green (#10A37F). Minimal saturation, high contrast.\n *\n * Plan: .claude/knowledge-base/plans/seven-themes-plan.md T7.1\n */\nexport const openaiStyle: Theme = {\n name: \"openai-style\",\n label: \"OpenAI-style\",\n description: \"Inspired by, not affiliated with OpenAI. Minimal canvas + ChatGPT green.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"oklch(1 0 0)\",\n foreground: \"oklch(0.248 0 0)\",\n card: \"oklch(0.976 0.001 286.4)\",\n \"card-foreground\": \"oklch(0.248 0 0)\",\n popover: \"oklch(1 0 0)\",\n \"popover-foreground\": \"oklch(0.248 0 0)\",\n primary: \"oklch(0.636 0.124 169.1)\",\n \"primary-foreground\": \"oklch(1 0 0)\",\n secondary: \"oklch(0.968 0.001 286.4)\",\n \"secondary-foreground\": \"oklch(0.248 0 0)\",\n accent: \"oklch(0.636 0.124 169.1)\",\n \"accent-foreground\": \"oklch(1 0 0)\",\n muted: \"oklch(0.968 0.001 286.4)\",\n \"muted-foreground\": \"oklch(0.549 0.026 285.5)\",\n border: \"oklch(0.923 0 0)\",\n input: \"oklch(0.923 0 0)\",\n ring: \"oklch(0.636 0.124 169.1)\",\n success: \"oklch(0.636 0.124 169.1)\",\n \"success-foreground\": \"oklch(1 0 0)\",\n warning: \"oklch(0.651 0.158 55.2)\",\n \"warning-foreground\": \"oklch(1 0 0)\",\n destructive: \"oklch(0.576 0.218 27.6)\",\n \"destructive-foreground\": \"oklch(1 0 0)\",\n info: \"oklch(0.57 0.211 257.9)\",\n \"info-foreground\": \"oklch(1 0 0)\",\n \"status-online\": \"oklch(0.636 0.124 169.1)\",\n \"status-online-foreground\": \"oklch(1 0 0)\",\n \"status-offline\": \"oklch(0.576 0.218 27.6)\",\n \"status-offline-foreground\": \"oklch(1 0 0)\",\n \"status-degraded\": \"oklch(0.651 0.158 55.2)\",\n \"status-degraded-foreground\": \"oklch(1 0 0)\",\n \"status-info\": \"oklch(0.57 0.211 257.9)\",\n \"status-info-foreground\": \"oklch(1 0 0)\",\n },\n dark: {\n background: \"oklch(0.248 0 0)\",\n foreground: \"oklch(0.947 0 0)\",\n card: \"oklch(0.301 0 0)\",\n \"card-foreground\": \"oklch(0.947 0 0)\",\n popover: \"oklch(0.301 0 0)\",\n \"popover-foreground\": \"oklch(0.947 0 0)\",\n primary: \"oklch(0.555 0.125 158.4)\",\n \"primary-foreground\": \"oklch(1 0 0)\",\n secondary: \"oklch(0.321 0 0)\",\n \"secondary-foreground\": \"oklch(0.947 0 0)\",\n accent: \"oklch(0.808 0.186 157.7)\",\n \"accent-foreground\": \"oklch(0.248 0 0)\",\n muted: \"oklch(0.321 0 0)\",\n \"muted-foreground\": \"oklch(0.691 0 0)\",\n border: \"oklch(0.38 0 0)\",\n input: \"oklch(0.38 0 0)\",\n ring: \"oklch(0.722 0.165 157.9)\",\n success: \"oklch(0.722 0.165 157.9)\",\n \"success-foreground\": \"oklch(1 0 0)\",\n warning: \"oklch(0.77 0.165 70.6)\",\n \"warning-foreground\": \"oklch(0.248 0 0)\",\n destructive: \"oklch(0.636 0.208 25.4)\",\n \"destructive-foreground\": \"oklch(1 0 0)\",\n info: \"oklch(0.627 0.203 256.2)\",\n \"info-foreground\": \"oklch(1 0 0)\",\n \"status-online\": \"oklch(0.722 0.165 157.9)\",\n \"status-online-foreground\": \"oklch(1 0 0)\",\n \"status-offline\": \"oklch(0.636 0.208 25.4)\",\n \"status-offline-foreground\": \"oklch(1 0 0)\",\n \"status-degraded\": \"oklch(0.77 0.165 70.6)\",\n \"status-degraded-foreground\": \"oklch(0.248 0 0)\",\n \"status-info\": \"oklch(0.627 0.203 256.2)\",\n \"status-info-foreground\": \"oklch(1 0 0)\",\n },\n};\n","import type { Theme } from \"./types.js\";\n\n/**\n * Linear Glass — linear.app-inspired glassy indigo.\n *\n * Inspired by, not affiliated with Linear. Refined indigo-violet primary\n * (#5E6AD2) on near-black canvas in dark, pure white in light. Subtle\n * glassmorphic surface temperature.\n *\n * Plan: .claude/knowledge-base/plans/seven-themes-plan.md T8.1\n */\nexport const linearGlass: Theme = {\n name: \"linear-glass\",\n label: \"Linear Glass\",\n description: \"Inspired by, not affiliated with Linear. Refined indigo on glassy surfaces.\",\n fonts: {\n display: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n body: '\"Geist\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace',\n },\n fontUrls: [\n \"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Geist+Mono:wght@100..900&display=swap\",\n ],\n light: {\n background: \"oklch(1 0 0)\",\n foreground: \"oklch(0.232 0.006 285.9)\",\n card: \"oklch(0.983 0.002 264.5)\",\n \"card-foreground\": \"oklch(0.232 0.006 285.9)\",\n popover: \"oklch(1 0 0)\",\n \"popover-foreground\": \"oklch(0.232 0.006 285.9)\",\n primary: \"oklch(0.523 0.175 273.1)\",\n \"primary-foreground\": \"oklch(1 0 0)\",\n secondary: \"oklch(0.967 0.002 286.4)\",\n \"secondary-foreground\": \"oklch(0.232 0.006 285.9)\",\n accent: \"oklch(0.55 0.181 282.4)\",\n \"accent-foreground\": \"oklch(1 0 0)\",\n muted: \"oklch(0.967 0.002 286.4)\",\n \"muted-foreground\": \"oklch(0.533 0.014 285.9)\",\n border: \"oklch(0.943 0.004 286.3)\",\n input: \"oklch(0.943 0.004 286.3)\",\n ring: \"oklch(0.523 0.175 273.1)\",\n success: \"oklch(0.583 0.12 160.3)\",\n \"success-foreground\": \"oklch(1 0 0)\",\n warning: \"oklch(0.665 0.138 68.3)\",\n \"warning-foreground\": \"oklch(1 0 0)\",\n destructive: \"oklch(0.579 0.221 26.6)\",\n \"destructive-foreground\": \"oklch(1 0 0)\",\n info: \"oklch(0.523 0.175 273.1)\",\n \"info-foreground\": \"oklch(1 0 0)\",\n \"status-online\": \"oklch(0.583 0.12 160.3)\",\n \"status-online-foreground\": \"oklch(1 0 0)\",\n \"status-offline\": \"oklch(0.579 0.221 26.6)\",\n \"status-offline-foreground\": \"oklch(1 0 0)\",\n \"status-degraded\": \"oklch(0.665 0.138 68.3)\",\n \"status-degraded-foreground\": \"oklch(1 0 0)\",\n \"status-info\": \"oklch(0.523 0.175 273.1)\",\n \"status-info-foreground\": \"oklch(1 0 0)\",\n },\n dark: {\n background: \"oklch(0.165 0.006 285.8)\",\n foreground: \"oklch(0.923 0 0)\",\n card: \"oklch(0.219 0.009 285.7)\",\n \"card-foreground\": \"oklch(0.923 0 0)\",\n popover: \"oklch(0.219 0.009 285.7)\",\n \"popover-foreground\": \"oklch(0.923 0 0)\",\n primary: \"oklch(0.627 0.149 285.1)\",\n \"primary-foreground\": \"oklch(1 0 0)\",\n secondary: \"oklch(0.25 0.011 285.6)\",\n \"secondary-foreground\": \"oklch(0.923 0 0)\",\n accent: \"oklch(0.718 0.16 291.8)\",\n \"accent-foreground\": \"oklch(0.165 0.006 285.8)\",\n muted: \"oklch(0.25 0.011 285.6)\",\n \"muted-foreground\": \"oklch(0.73 0.012 286.1)\",\n border: \"oklch(0.282 0.009 285.8)\",\n input: \"oklch(0.282 0.009 285.8)\",\n ring: \"oklch(0.627 0.149 285.1)\",\n success: \"oklch(0.73 0.142 156)\",\n \"success-foreground\": \"oklch(0.165 0.006 285.8)\",\n warning: \"oklch(0.813 0.143 66.8)\",\n \"warning-foreground\": \"oklch(0.165 0.006 285.8)\",\n destructive: \"oklch(0.706 0.187 20.3)\",\n \"destructive-foreground\": \"oklch(0.165 0.006 285.8)\",\n info: \"oklch(0.627 0.149 285.1)\",\n \"info-foreground\": \"oklch(1 0 0)\",\n \"status-online\": \"oklch(0.73 0.142 156)\",\n \"status-online-foreground\": \"oklch(0.165 0.006 285.8)\",\n \"status-offline\": \"oklch(0.706 0.187 20.3)\",\n \"status-offline-foreground\": \"oklch(0.165 0.006 285.8)\",\n \"status-degraded\": \"oklch(0.813 0.143 66.8)\",\n \"status-degraded-foreground\": \"oklch(0.165 0.006 285.8)\",\n \"status-info\": \"oklch(0.627 0.149 285.1)\",\n \"status-info-foreground\": \"oklch(1 0 0)\",\n },\n};\n","export type { ColorScale, Theme, ThemeFonts, ThemeMode } from \"./types.js\";\nexport { ThemeProvider, useTheme } from \"./theme-provider.js\";\nexport { ThemeScript } from \"./theme-script.js\";\nexport { ThemeSwitcher } from \"./theme-switcher.js\";\nexport { violetForge } from \"./violet-forge.js\";\nexport { classicPaper } from \"./classic-paper.js\";\nexport { auroraTerminal } from \"./aurora-terminal.js\";\nexport { defineTheme, type DefineThemeInput } from \"./define.js\";\nexport { hex, hexToHsl, rgb, rgbToHslLegacy } from \"./color.js\";\nexport { useDensity, type Density, type DensityContextValue } from \"./density.js\";\n// Seven new themes — RFC 0007, plan: seven-themes (2026-05-22).\n// Trademark-safe slugs (D1.1) — `*-style` / `*-mono` / `*-glass` suffixes,\n// description includes \"Inspired by, not affiliated with [X]\".\nexport { vercelMono } from \"./vercel-mono.js\";\nexport { githubDark } from \"./github-dark.js\";\nexport { dracula } from \"./dracula.js\";\nexport { oneDark } from \"./one-dark.js\";\nexport { anthropicStyle } from \"./anthropic-style.js\";\nexport { openaiStyle } from \"./openai-style.js\";\nexport { linearGlass } from \"./linear-glass.js\";\n\nimport { anthropicStyle } from \"./anthropic-style.js\";\nimport { auroraTerminal } from \"./aurora-terminal.js\";\nimport { classicPaper } from \"./classic-paper.js\";\nimport { dracula } from \"./dracula.js\";\nimport { githubDark } from \"./github-dark.js\";\nimport { linearGlass } from \"./linear-glass.js\";\nimport { oneDark } from \"./one-dark.js\";\nimport { openaiStyle } from \"./openai-style.js\";\nimport { vercelMono } from \"./vercel-mono.js\";\nimport { violetForge } from \"./violet-forge.js\";\n\n/**\n * All themes bundled with Theo UI. Pass to `<ThemeProvider themes={builtinThemes}>`\n * if you want all 10 available out of the box.\n *\n * EC-4 note: passing the full 10-entry list triggers ~60 KB CSS injection in\n * `<style id=\"theo-ui-theme-vars\">`. For apps focused on 1-2 themes, prefer\n * `themes={[violetForge, dracula]}` to keep the payload at ~12 KB.\n */\nexport const builtinThemes = [\n violetForge,\n classicPaper,\n auroraTerminal,\n vercelMono,\n githubDark,\n dracula,\n oneDark,\n anthropicStyle,\n openaiStyle,\n linearGlass,\n];\n","\"use client\";\n\nimport type { ComponentProps, JSX, ReactNode } from \"react\";\nimport { Toaster } from \"./components/primitives/toast/toaster.js\";\nimport { builtinThemes } from \"./themes/index.js\";\nimport { ThemeProvider } from \"./themes/theme-provider.js\";\n\n/**\n * TheoUIProvider — primary entry point composing `<ThemeProvider>` and\n * `<Toaster>` in the correct order with sensible defaults.\n *\n * Recommended for consumer apps to avoid hand-wiring the provider stack.\n * Equivalent to:\n *\n * <ThemeProvider themes={builtinThemes} {...theme}>\n * <Toaster {...toaster}>{children}</Toaster>\n * </ThemeProvider>\n *\n * Notes:\n * - Since v0.1.0-next.0, `<ThemeProvider>` requires the `themes` prop\n * (T2.5 decoupling). `<TheoUIProvider>` defaults it to `builtinThemes`\n * to preserve \"works out of the box\" DX. Pass `theme.themes` to override.\n * - The `\"use client\"` directive is required for Next.js App Router (RSC)\n * because `<ThemeProvider>` uses React state and effects internally.\n * - `<Tooltip>` provider stays per-instance (Radix recommendation) — this\n * wrapper does NOT introduce a global tooltip context.\n * - `<ThemeProvider>` and `<Toaster>` remain independently exported for\n * consumers who want bespoke control.\n *\n * SSR:\n * - Place `<ThemeScript>` in `<head>` to avoid FOUC + hydration mismatch.\n * - Wrap `<html lang=\"en\" suppressHydrationWarning>`.\n *\n * @example\n * import { TheoUIProvider } from \"@theokit/ui\";\n *\n * export default function App({ children }) {\n * return <TheoUIProvider>{children}</TheoUIProvider>;\n * }\n */\nexport interface TheoUIProviderProps {\n children: ReactNode;\n /** Pass-through props for the inner `<ThemeProvider>`. Optional. */\n theme?: Omit<ComponentProps<typeof ThemeProvider>, \"children\" | \"themes\"> & {\n /** Override the default theme set (defaults to `builtinThemes`). */\n themes?: ComponentProps<typeof ThemeProvider>[\"themes\"];\n };\n /** Pass-through props for the inner `<Toaster>`. */\n toaster?: Omit<ComponentProps<typeof Toaster>, \"children\">;\n}\n\nexport function TheoUIProvider({ children, theme, toaster }: TheoUIProviderProps): JSX.Element {\n const { themes, ...restTheme } = theme ?? {};\n return (\n <ThemeProvider themes={themes ?? builtinThemes} {...restTheme}>\n <Toaster {...toaster}>{children}</Toaster>\n </ThemeProvider>\n );\n}\n\nTheoUIProvider.displayName = \"TheoUIProvider\";\n"]}