@orangecheck/ui 0.7.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +115 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +116 -7
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ecosystem-switcher.tsx","../src/family-properties.ts","../src/logo-dropdown.tsx","../src/account-menu.tsx","../src/primary-nav.tsx","../src/dashboard-shell.tsx","../src/app-shell.tsx","../src/section-header.tsx","../src/empty-state.tsx","../src/stat-grid.tsx"],"names":["useState","useRef","useEffect","jsxs","jsx","Boxes","ChevronDown","isActive","Link","Check","useId","useOcSession","Fragment","className","TONE_CLASS"],"mappings":"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","file":"index.js","sourcesContent":["import { Boxes, Check, ChevronDown } from 'lucide-react';\nimport Link from 'next/link';\nimport { useEffect, useRef, useState } from 'react';\n\n/**\n * EcosystemSwitcher — cross-product dropdown for jumping between every\n * site in the OrangeCheck family. Drop one into every site's LayoutHeader\n * and mark the active site via the `current` prop.\n *\n * <EcosystemSwitcher current=\"lock\" />\n *\n * The component is dependency-self-contained: no Radix, no Headless UI,\n * just outside-click + Escape handling so it works identically in every\n * site without forcing a peer-dep upgrade. Every link stays in-tab — the\n * family is one app from the user's POV.\n */\n\nexport type EcosystemSlug =\n | 'home'\n | 'docs'\n | 'fleet'\n | 'me'\n | 'vault'\n | 'attest'\n | 'lock'\n | 'vote'\n | 'stamp'\n | 'agent'\n | 'pledge';\n\ninterface SwitcherEntry {\n slug: EcosystemSlug;\n href: string;\n label: string;\n sub: string;\n docsHref: string;\n}\n\nconst ENTRIES: SwitcherEntry[] = [\n {\n slug: 'home',\n href: 'https://ochk.io',\n label: 'orangecheck',\n sub: 'umbrella',\n docsHref: 'https://docs.ochk.io',\n },\n {\n slug: 'docs',\n href: 'https://docs.ochk.io',\n label: 'oc·docs',\n sub: 'unified docs',\n docsHref: 'https://docs.ochk.io',\n },\n {\n slug: 'fleet',\n href: 'https://fleet.ochk.io',\n label: 'oc·fleet',\n sub: 'managed — agent fleet',\n docsHref: 'https://docs.ochk.io/fleet',\n },\n {\n slug: 'me',\n href: 'https://me.ochk.io',\n label: 'oc·me',\n sub: 'earn — consumer identity',\n docsHref: 'https://docs.ochk.io/me',\n },\n {\n slug: 'vault',\n href: 'https://vault.ochk.io',\n label: 'oc·vault',\n sub: 'keep — encrypted secrets',\n docsHref: 'https://docs.ochk.io/vault',\n },\n {\n slug: 'attest',\n href: 'https://attest.ochk.io',\n label: 'oc·attest',\n sub: 'am — sybil resistance',\n docsHref: 'https://docs.ochk.io/attest',\n },\n {\n slug: 'lock',\n href: 'https://lock.ochk.io',\n label: 'oc·lock',\n sub: 'whisper — encryption',\n docsHref: 'https://docs.ochk.io/lock',\n },\n {\n slug: 'vote',\n href: 'https://vote.ochk.io',\n label: 'oc·vote',\n sub: 'decide — polls',\n docsHref: 'https://docs.ochk.io/vote',\n },\n {\n slug: 'stamp',\n href: 'https://stamp.ochk.io',\n label: 'oc·stamp',\n sub: 'declare — block-anchored',\n docsHref: 'https://docs.ochk.io/stamp',\n },\n {\n slug: 'agent',\n href: 'https://agent.ochk.io',\n label: 'oc·agent',\n sub: 'delegate — scoped auth',\n docsHref: 'https://docs.ochk.io/agent',\n },\n {\n slug: 'pledge',\n href: 'https://pledge.ochk.io',\n label: 'oc·pledge',\n sub: 'swear — bonded commitment',\n docsHref: 'https://docs.ochk.io/pledge',\n },\n];\n\nexport interface EcosystemSwitcherProps {\n current: EcosystemSlug;\n className?: string;\n}\n\nexport function EcosystemSwitcher({\n current,\n className,\n}: EcosystemSwitcherProps) {\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n // Outside-click + Escape close.\n useEffect(() => {\n if (!open) return;\n function onDoc(e: MouseEvent) {\n if (!containerRef.current) return;\n if (!containerRef.current.contains(e.target as Node)) setOpen(false);\n }\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setOpen(false);\n }\n document.addEventListener('mousedown', onDoc);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onDoc);\n document.removeEventListener('keydown', onKey);\n };\n }, [open]);\n\n return (\n <div ref={containerRef} className={'relative ' + (className ?? '')}>\n <button\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-label=\"Switch OrangeCheck product\"\n title=\"Switch product\"\n onClick={() => setOpen((v) => !v)}\n className={\n 'inline-flex items-center gap-1 px-2 py-1 transition-colors ' +\n (open\n ? 'text-foreground'\n : 'text-muted-foreground hover:text-foreground')\n }\n >\n <Boxes className=\"h-4 w-4\" />\n <ChevronDown\n className={\n 'h-3.5 w-3.5 transition-transform ' + (open ? 'rotate-180' : '')\n }\n />\n </button>\n\n {open && (\n <div\n role=\"menu\"\n aria-label=\"Switch OrangeCheck product\"\n className=\"bg-background absolute right-0 top-full z-[60] mt-2 w-72 border shadow-lg\"\n >\n <div className=\"label-mono text-primary border-b px-4 py-2\">\n § the family\n </div>\n <ul className=\"py-1\">\n {ENTRIES.map((e) => {\n const isActive = e.slug === current;\n return (\n <li key={e.slug}>\n <Link\n href={e.href}\n onClick={() => setOpen(false)}\n aria-current={isActive ? 'page' : undefined}\n className={\n 'group flex items-baseline gap-3 px-4 py-2 transition-colors ' +\n (isActive\n ? 'bg-primary/5'\n : 'hover:bg-muted')\n }\n >\n <span\n className={\n 'font-display flex-1 text-[12px] font-semibold tracking-tight ' +\n (isActive\n ? 'text-primary'\n : 'text-foreground group-hover:text-primary transition-colors')\n }\n >\n {e.label}\n </span>\n <span className=\"text-muted-foreground font-mono text-[10px] tracking-wider uppercase\">\n {e.sub}\n </span>\n {isActive && (\n <Check className=\"text-primary h-3 w-3\" />\n )}\n </Link>\n </li>\n );\n })}\n </ul>\n <div className=\"border-t px-4 py-2 font-mono text-[10px] tracking-widest uppercase\">\n <Link\n href=\"https://docs.ochk.io\"\n onClick={() => setOpen(false)}\n className=\"text-muted-foreground hover:text-foreground inline-block transition-colors\"\n >\n docs.ochk.io →\n </Link>\n </div>\n </div>\n )}\n </div>\n );\n}\n","/**\n * Family-property registry — the single source of truth for every\n * orangecheck-family site. Both `<OcLogoDropdown>` (the global logo →\n * property switcher) and `<OcAccountMenu>` (the global signed-in\n * account chip) read from this table, so a one-line edit here ripples\n * to every consumer simultaneously.\n *\n * Adding a new family member means appending one entry below. Removing\n * one means deleting the entry. There are no other call sites to chase.\n */\n\nimport type { EcosystemSlug } from './ecosystem-switcher';\n\nexport type FamilyCategory = 'hub' | 'product' | 'protocol';\n\nexport interface FamilyProperty {\n /** Stable URL-safe identifier (e.g. `'vault'`). */\n slug: EcosystemSlug;\n /** Absolute origin (e.g. `'https://vault.ochk.io'`). */\n origin: string;\n /** Bare hostname (e.g. `'vault.ochk.io'`). Used in account-menu headers. */\n hostname: string;\n /** Wordmark label (e.g. `'oc·vault'`). */\n label: string;\n /** Short tagline (verb — what-it-does), shown under the wordmark in the menu. */\n sub: string;\n /** Docs deep-link (e.g. `'https://docs.ochk.io/vault'`). */\n docsHref: string;\n /** Family-level category that shapes the visual chip + menu sectioning. */\n category: FamilyCategory;\n}\n\nexport const FAMILY_PROPERTIES: ReadonlyArray<FamilyProperty> = [\n {\n slug: 'home',\n origin: 'https://ochk.io',\n hostname: 'ochk.io',\n label: 'orangecheck',\n sub: 'umbrella · sign-in',\n docsHref: 'https://docs.ochk.io',\n category: 'hub',\n },\n {\n slug: 'docs',\n origin: 'https://docs.ochk.io',\n hostname: 'docs.ochk.io',\n label: 'oc·docs',\n sub: 'unified reference',\n docsHref: 'https://docs.ochk.io',\n category: 'hub',\n },\n {\n slug: 'me',\n origin: 'https://me.ochk.io',\n hostname: 'me.ochk.io',\n label: 'oc·me',\n sub: 'earn — consumer identity',\n docsHref: 'https://docs.ochk.io/me',\n category: 'product',\n },\n {\n slug: 'vault',\n origin: 'https://vault.ochk.io',\n hostname: 'vault.ochk.io',\n label: 'oc·vault',\n sub: 'keep — encrypted secrets',\n docsHref: 'https://docs.ochk.io/vault',\n category: 'product',\n },\n {\n slug: 'fleet',\n origin: 'https://fleet.ochk.io',\n hostname: 'fleet.ochk.io',\n label: 'oc·fleet',\n sub: 'managed — agent fleet',\n docsHref: 'https://docs.ochk.io/fleet',\n category: 'product',\n },\n {\n slug: 'attest',\n origin: 'https://attest.ochk.io',\n hostname: 'attest.ochk.io',\n label: 'oc·attest',\n sub: 'am — sybil resistance',\n docsHref: 'https://docs.ochk.io/attest',\n category: 'protocol',\n },\n {\n slug: 'lock',\n origin: 'https://lock.ochk.io',\n hostname: 'lock.ochk.io',\n label: 'oc·lock',\n sub: 'whisper — encryption',\n docsHref: 'https://docs.ochk.io/lock',\n category: 'protocol',\n },\n {\n slug: 'vote',\n origin: 'https://vote.ochk.io',\n hostname: 'vote.ochk.io',\n label: 'oc·vote',\n sub: 'decide — polls',\n docsHref: 'https://docs.ochk.io/vote',\n category: 'protocol',\n },\n {\n slug: 'stamp',\n origin: 'https://stamp.ochk.io',\n hostname: 'stamp.ochk.io',\n label: 'oc·stamp',\n sub: 'declare — block-anchored',\n docsHref: 'https://docs.ochk.io/stamp',\n category: 'protocol',\n },\n {\n slug: 'agent',\n origin: 'https://agent.ochk.io',\n hostname: 'agent.ochk.io',\n label: 'oc·agent',\n sub: 'delegate — scoped auth',\n docsHref: 'https://docs.ochk.io/agent',\n category: 'protocol',\n },\n {\n slug: 'pledge',\n origin: 'https://pledge.ochk.io',\n hostname: 'pledge.ochk.io',\n label: 'oc·pledge',\n sub: 'swear — bonded commitment',\n docsHref: 'https://docs.ochk.io/pledge',\n category: 'protocol',\n },\n];\n\n/**\n * Canonical lifecycle states for any family site. Used by both the\n * tiny chip rendered next to the wordmark and any other surface that\n * wants to display \"this site is still settling\" UX. Centralised\n * vocabulary so we can't accidentally drift to a parallel synonym\n * like `preview`/`experimental` on different sites.\n *\n * - `live` — production-ready; **no chip rendered** (the absence\n * of a chip is the affordance)\n * - `beta` — feature-complete but still iterating, soft launch\n * - `alpha` — early, breaking changes expected, integrators beware\n */\nexport type SiteState = 'alpha' | 'beta' | 'live';\n\nexport const SITE_STATE_LABEL: Record<Exclude<SiteState, 'live'>, string> = {\n alpha: 'alpha',\n beta: 'beta',\n};\n\n/** Find a property entry by its slug. */\nexport function findFamilyProperty(slug: EcosystemSlug): FamilyProperty | undefined {\n return FAMILY_PROPERTIES.find((p) => p.slug === slug);\n}\n","import { Check, ChevronDown } from 'lucide-react';\nimport Link from 'next/link';\nimport { useEffect, useId, useRef, useState, type ReactNode } from 'react';\n\nimport type { EcosystemSlug } from './ecosystem-switcher';\nimport {\n FAMILY_PROPERTIES,\n SITE_STATE_LABEL,\n findFamilyProperty,\n type FamilyCategory,\n type SiteState,\n} from './family-properties';\n\n/**\n * `<OcLogoDropdown>` — the logo IS the dropdown.\n *\n * Wraps a site's local LogoMark + wordmark in a button that, on click,\n * drops a popover listing every OrangeCheck family property. The current\n * property is highlighted with a primary-tinted background, a left-edge\n * accent bar, and a \"home\" label — and is itself a clickable link to\n * the local home href (default `/`).\n *\n * Family properties carry one of three categories:\n *\n * - `hub` — orangecheck umbrella + docs (no badge)\n * - `product` — commercial products (me, vault, fleet) · primary chip\n * - `protocol` — open verb specs (attest, lock, vote, stamp, agent,\n * pledge) · muted chip\n *\n * The category of the *current* site is auto-rendered as a tiny mono\n * chip inside the trigger button, and the dropdown itself groups\n * entries by category with subtle mono dividers — so the product /\n * protocol distinction is visible both on the logo and in the menu,\n * with a single source of truth (`./family-properties.ts`).\n *\n * The optional `siteState` prop renders a second tiny chip after the\n * category chip — `alpha` or `beta` — for sites that aren't `live`.\n * The vocabulary is canonical across the family (see SiteState in\n * family-properties.ts). Pass it from your per-site config so a\n * single edit propagates to the logo, the account menu, and anywhere\n * else the chip surfaces.\n *\n * Mobile-aware: the popover's width is clamped to the viewport,\n * content scrolls when there are more entries than fit. The trigger\n * chips hide below `sm` to preserve mobile header space — the dropdown\n * itself still shows the grouping.\n */\n\nconst SECTIONS: Array<{ category: FamilyCategory; label: string }> = [\n { category: 'hub', label: 'hub' },\n { category: 'product', label: 'products' },\n { category: 'protocol', label: 'protocols' },\n];\n\nexport interface OcLogoDropdownProps {\n /**\n * Which property this site IS. Used to highlight the active row,\n * route the active row's link to `homeHref` instead of the cross-\n * domain absolute URL, and pick the category chip rendered next\n * to the wordmark.\n */\n current: EcosystemSlug;\n /**\n * The site's local home path (for the active row). Default `/`.\n * Always a same-origin path — the logo's \"go home\" affordance is\n * preserved by clicking the highlighted row.\n */\n homeHref?: string;\n /**\n * Optional lifecycle state for this site. `'live'` (default) renders\n * no chip; `'alpha'` and `'beta'` render a small mono uppercase chip\n * after the category badge. Drive this from your per-site config so\n * one constant change ripples to every surface.\n */\n siteState?: SiteState;\n /**\n * Logo contents · typically `<LogoMark />` + `<span>oc·X</span>`.\n */\n children: ReactNode;\n /** className for the outer container. */\n className?: string;\n /** className for the trigger button. */\n triggerClassName?: string;\n /** className for the popover. */\n popoverClassName?: string;\n}\n\nfunction CategoryChip({ category }: { category: FamilyCategory }) {\n if (category === 'hub') return null;\n const isProduct = category === 'product';\n return (\n <span\n aria-label={isProduct ? 'commercial product' : 'protocol reference'}\n className={\n 'ml-1 hidden rounded-sm border px-1.5 py-[1px] font-mono text-[9px] font-medium tracking-widest uppercase sm:inline-block ' +\n (isProduct\n ? 'border-primary/25 bg-primary/10 text-primary'\n : 'border-muted-foreground/20 bg-muted/40 text-muted-foreground/85')\n }\n data-oc-category={category}\n >\n {isProduct ? 'product' : 'protocol'}\n </span>\n );\n}\n\nfunction SiteStateBadge({ state }: { state: SiteState }) {\n if (state === 'live') return null;\n return (\n <span\n aria-label={`site lifecycle: ${state}`}\n className=\"text-muted-foreground/70 ml-1 hidden font-mono text-[9px] font-medium tracking-widest uppercase sm:inline-block\"\n data-oc-site-state={state}\n >\n {SITE_STATE_LABEL[state]}\n </span>\n );\n}\n\nfunction MenuCategoryChip({ category }: { category: FamilyCategory }) {\n if (category === 'hub') return null;\n const isProduct = category === 'product';\n return (\n <span\n aria-hidden\n className={\n 'inline-block shrink-0 rounded-sm px-1 py-[1px] font-mono text-[9px] font-medium tracking-widest uppercase ' +\n (isProduct\n ? 'bg-primary/10 text-primary'\n : 'bg-muted/60 text-muted-foreground/80')\n }\n >\n {isProduct ? 'pro' : 'spec'}\n </span>\n );\n}\n\nexport function OcLogoDropdown({\n current,\n homeHref = '/',\n siteState = 'live',\n children,\n className,\n triggerClassName,\n popoverClassName,\n}: OcLogoDropdownProps) {\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const menuId = useId();\n\n const currentCategory: FamilyCategory = findFamilyProperty(current)?.category ?? 'hub';\n\n // Outside-click + Escape close.\n useEffect(() => {\n if (!open) return;\n function onDoc(e: MouseEvent) {\n if (!containerRef.current) return;\n if (!containerRef.current.contains(e.target as Node)) setOpen(false);\n }\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setOpen(false);\n }\n document.addEventListener('mousedown', onDoc);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onDoc);\n document.removeEventListener('keydown', onKey);\n };\n }, [open]);\n\n return (\n <div\n ref={containerRef}\n className={'relative ' + (className ?? '')}\n data-oc-logo-dropdown=\"\"\n data-oc-current-category={currentCategory}\n data-oc-site-state={siteState}\n >\n <button\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-controls={menuId}\n aria-label=\"OrangeCheck family · open property menu\"\n title=\"Switch OrangeCheck product\"\n onClick={() => setOpen((v) => !v)}\n className={\n triggerClassName ??\n 'group hover:bg-accent/30 -mx-1.5 -my-1 flex min-h-[40px] items-center gap-2 rounded-sm px-1.5 py-1 transition-colors'\n }\n data-oc-logo-dropdown-trigger=\"\"\n >\n {children}\n <CategoryChip category={currentCategory} />\n <SiteStateBadge state={siteState} />\n <ChevronDown\n aria-hidden\n className={\n 'text-muted-foreground/70 group-hover:text-foreground/80 h-3.5 w-3.5 shrink-0 transition-transform ' +\n (open ? 'rotate-180' : '')\n }\n />\n </button>\n\n {open && (\n <div\n id={menuId}\n role=\"menu\"\n aria-label=\"OrangeCheck family\"\n className={\n popoverClassName ??\n 'bg-background absolute top-full left-0 z-[60] mt-2 w-[min(20rem,calc(100vw-1rem))] border shadow-lg'\n }\n data-oc-logo-dropdown-popover=\"\"\n >\n <div className=\"label-mono text-primary border-b px-4 py-2\">\n § the orangecheck family\n </div>\n <div className=\"max-h-[min(28rem,70vh)] overflow-y-auto py-1\" role=\"none\">\n {SECTIONS.map(({ category, label }) => {\n const sectionEntries = FAMILY_PROPERTIES.filter(\n (e) => e.category === category\n );\n if (sectionEntries.length === 0) return null;\n return (\n <div key={category} role=\"none\" data-oc-section={category}>\n <div\n role=\"separator\"\n aria-hidden\n className={\n 'text-muted-foreground/60 px-4 pt-2.5 pb-1 font-mono text-[9px] font-medium tracking-widest uppercase ' +\n (category === 'hub' ? '' : 'border-t mt-1')\n }\n >\n {label}\n </div>\n <ul role=\"none\" className=\"pb-1\">\n {sectionEntries.map((e) => {\n const isActive = e.slug === current;\n const href = isActive ? homeHref : e.origin;\n return (\n <li key={e.slug} role=\"none\">\n <Link\n href={href}\n role=\"menuitem\"\n onClick={() => setOpen(false)}\n aria-current={isActive ? 'page' : undefined}\n className={\n 'group flex items-center gap-2 px-4 py-2 transition-colors ' +\n (isActive\n ? 'bg-primary/8 border-primary -ml-px border-l-2'\n : 'hover:bg-muted -ml-px border-l-2 border-transparent')\n }\n data-oc-logo-dropdown-item={\n isActive ? 'current' : 'sibling'\n }\n data-oc-entry-category={e.category}\n >\n <span className=\"flex min-w-0 flex-1 flex-col leading-tight\">\n <span\n className={\n 'font-display text-[12px] font-semibold tracking-tight ' +\n (isActive\n ? 'text-primary'\n : 'text-foreground group-hover:text-primary transition-colors')\n }\n >\n {e.label}\n </span>\n <span className=\"text-muted-foreground mt-0.5 font-mono text-[10px] tracking-wide\">\n {e.sub}\n </span>\n </span>\n <MenuCategoryChip category={e.category} />\n {isActive ? (\n <span className=\"text-primary inline-flex shrink-0 items-center gap-1 font-mono text-[10px] tracking-widest uppercase\">\n home\n <Check className=\"h-3 w-3\" />\n </span>\n ) : null}\n </Link>\n </li>\n );\n })}\n </ul>\n </div>\n );\n })}\n </div>\n <div className=\"border-t px-4 py-2 font-mono text-[10px] tracking-widest uppercase\">\n <Link\n href=\"https://docs.ochk.io\"\n onClick={() => setOpen(false)}\n className=\"text-muted-foreground hover:text-foreground inline-block transition-colors\"\n >\n docs.ochk.io →\n </Link>\n </div>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport Link from 'next/link';\nimport { useEffect, useRef, useState } from 'react';\nimport { useOcSession } from '@orangecheck/auth-client';\n\nimport type { EcosystemSlug } from './ecosystem-switcher';\nimport { findFamilyProperty, type SiteState } from './family-properties';\n\n/**\n * `<OcAccountMenu>` — the canonical top-right account affordance for\n * every family site. Replaces the older inline-styled `OcAccountChip`\n * from `@orangecheck/auth-client` with a Tailwind-styled, fully\n * configurable, cross-site-aware dropdown.\n *\n * Three explicit visual states:\n *\n * 1. **Pre-hydration / loading** — neutral `sign in` placeholder so\n * the header never goes blank on first paint.\n * 2. **Anonymous / error** — primary-styled `sign in` CTA pointing\n * at the site's local `/signin` (or whatever `signInUrl` you\n * pass).\n * 3. **Authenticated** — pill with a primary-tinted signal dot and\n * shortened did_oc (or display name if set); click → popover\n * with full address, optional site-specific menu items, family\n * dashboard link, sign-out, and an optional BuildFooter showing\n * site name + version + commit sha → GitHub.\n *\n * Cross-site recognition: the component re-fetches the session on\n * `visibilitychange` and `focus` events, so when a user signs in at a\n * sibling site (ochk.io, attest.ochk.io, etc.) and tabs back, the\n * chip flips from \"sign in\" to \"signed in\" without a hard reload.\n *\n * The component reads `useOcSession()` from `@orangecheck/auth-client`,\n * so the consuming app must mount `<OcSessionProvider>` somewhere in\n * its tree (already standard in every consumer's `_app.tsx`).\n */\n\nexport interface OcAccountMenuItem {\n /** Same-origin path or absolute URL. */\n href: string;\n /** Visible label. */\n label: string;\n /**\n * When `true`, opens in a new tab and renders a ↗ glyph after the\n * label. Use for cross-domain links (e.g. `https://ochk.io/dashboard`).\n */\n external?: boolean;\n}\n\nexport interface OcAccountMenuBuildInfo {\n /** Display version string, e.g. `'0.5.0'` (rendered as `v0.5.0`). */\n version: string;\n /**\n * 7+ character commit SHA. Render as `'dev'` (or omit) for local\n * dev to suppress the GitHub link.\n */\n sha?: string;\n /**\n * GitHub `owner/repo` slug — combined with `sha` to produce the\n * `https://github.com/<repo>/commit/<sha>` link.\n */\n repo?: string;\n}\n\n/**\n * Minimal session shape `<OcAccountMenuView>` needs. Compatible with\n * `useOcSession()`'s return value but explicit so consumers running\n * their own auth context (e.g. oc-www's local `useAuth`) can pass an\n * adapter without depending on `@orangecheck/auth-client`'s exact\n * types.\n */\nexport interface OcAccountMenuSession {\n status: 'loading' | 'authenticated' | 'anonymous' | 'error';\n account: { didOc: string; displayName: string | null } | null;\n signOut: () => void | Promise<void>;\n refresh: () => void | Promise<void>;\n}\n\nexport interface OcAccountMenuProps {\n /**\n * Which family property this site IS. Used to label the section\n * header (`§ signed in · vault.ochk.io`) and to suppress the\n * family-dashboard menu item when the user is already on `home`.\n */\n current: EcosystemSlug;\n /**\n * Where the anonymous \"sign in\" affordance points. Default `'/signin'`\n * — works with every site's in-place `<OcSignIn>` page. Pass\n * `'https://ochk.io/signin'` if you want to bounce to the auth host\n * instead.\n */\n signInUrl?: string;\n /** Label for the anonymous \"sign in\" affordance. Default `'sign in'`. */\n signInLabel?: string;\n /**\n * Site-specific menu items, rendered between the section header\n * and the family-dashboard / sign-out rows. Keep this short —\n * 2–6 entries is the sweet spot. Pass `[]` (or omit) for sites\n * with no per-site routes worth surfacing.\n */\n menuItems?: ReadonlyArray<OcAccountMenuItem>;\n /**\n * When `true` (default), shows a `family dashboard ↗` link to\n * `https://ochk.io/dashboard`. Set `false` for `home` (already\n * there) or for sites that don't want it.\n */\n showFamilyDashboard?: boolean;\n /**\n * Optional BuildFooter info. When present, renders a tiny mono\n * footer at the bottom of the popover with `site · vX.Y.Z · sha`\n * — the SHA links to the matching GitHub commit when `repo` is\n * also provided. Drive this from your `next.config.ts` via\n * `NEXT_PUBLIC_APP_VERSION` / `NEXT_PUBLIC_BUILD_SHA` env vars.\n */\n build?: OcAccountMenuBuildInfo;\n /**\n * Optional lifecycle chip rendered inside the BuildFooter line\n * (between site and version). Mirrors the chip on the logo so\n * both surfaces agree.\n */\n siteState?: SiteState;\n /** className overrides for layout-level customisation. */\n className?: string;\n triggerClassName?: string;\n popoverClassName?: string;\n}\n\nfunction shortenDid(s: string): string {\n if (s.length <= 14) return s;\n return `${s.slice(0, 7)}…${s.slice(-5)}`;\n}\n\n/**\n * Connected variant — pulls the session from `useOcSession()`. This is\n * what every consumer site with `<OcSessionProvider>` mounted should\n * use. For sites running a parallel auth context (e.g. oc-www's local\n * `useAuth`), use `<OcAccountMenuView>` below and pass a session prop\n * directly.\n */\nexport function OcAccountMenu(props: OcAccountMenuProps) {\n const session = useOcSession();\n return (\n <OcAccountMenuView\n {...props}\n session={{\n status: session.status,\n account: session.account\n ? {\n didOc: session.account.didOc,\n displayName: session.account.displayName ?? null,\n }\n : null,\n signOut: session.signOut,\n refresh: session.refresh,\n }}\n />\n );\n}\n\nexport interface OcAccountMenuViewProps extends OcAccountMenuProps {\n /**\n * The session to render. When using `<OcAccountMenuView>` directly\n * (rather than the connected `<OcAccountMenu>`), pass an adapter\n * over your local auth context.\n */\n session: OcAccountMenuSession;\n}\n\n/**\n * Presentational variant — takes a session as an explicit prop. Use\n * this when your site runs its own auth context (e.g. ochk.io's\n * local `useAuth`) and you want the family-consistent visual without\n * mounting `<OcSessionProvider>`.\n */\nexport function OcAccountMenuView({\n current,\n signInUrl = '/signin',\n signInLabel = 'sign in',\n menuItems,\n showFamilyDashboard,\n build,\n siteState,\n className,\n triggerClassName,\n popoverClassName,\n session,\n}: OcAccountMenuViewProps) {\n const { status, account, signOut, refresh } = session;\n const [hydrated, setHydrated] = useState(false);\n const [open, setOpen] = useState(false);\n const wrapRef = useRef<HTMLDivElement | null>(null);\n\n const property = findFamilyProperty(current);\n const hostname = property?.hostname ?? `${current}.ochk.io`;\n const isHome = current === 'home';\n const familyDashboardEnabled = showFamilyDashboard ?? !isHome;\n\n useEffect(() => setHydrated(true), []);\n\n // Cross-site sign-in pickup: re-fetch on visibility / focus.\n useEffect(() => {\n const onWake = () => {\n if (document.visibilityState === 'visible') void refresh();\n };\n const onFocus = () => void refresh();\n document.addEventListener('visibilitychange', onWake);\n window.addEventListener('focus', onFocus);\n return () => {\n document.removeEventListener('visibilitychange', onWake);\n window.removeEventListener('focus', onFocus);\n };\n }, [refresh]);\n\n // Outside-click + Escape close.\n useEffect(() => {\n if (!open) return;\n const onClick = (e: MouseEvent) => {\n if (wrapRef.current && !wrapRef.current.contains(e.target as Node)) setOpen(false);\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setOpen(false);\n };\n document.addEventListener('mousedown', onClick);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onClick);\n document.removeEventListener('keydown', onKey);\n };\n }, [open]);\n\n const signInTrigger = (\n <a\n href={signInUrl}\n aria-label={signInLabel}\n data-oc-account-menu-signin=\"\"\n className={\n triggerClassName ??\n 'border-input bg-background hover:bg-accent inline-flex h-8 items-center justify-center rounded-md border px-3 font-mono text-[11px] font-semibold tracking-widest uppercase transition-colors'\n }\n >\n {signInLabel}\n </a>\n );\n\n // States 1 + 2: pre-hydration or anonymous — render the same\n // placeholder/CTA so the slot is never empty.\n if (!hydrated || status === 'loading') {\n return signInTrigger;\n }\n\n if (status !== 'authenticated' || !account) {\n return signInTrigger;\n }\n\n // Authenticated — pill + popover.\n const displayName = account.displayName ?? null;\n const label = displayName ?? shortenDid(account.didOc);\n\n return (\n <div\n ref={wrapRef}\n className={'relative inline-block ' + (className ?? '')}\n data-oc-account-menu=\"\"\n >\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-label={`Signed in as ${account.didOc}. Open account menu.`}\n className={\n triggerClassName ??\n 'border-primary/40 bg-card hover:bg-accent inline-flex h-8 items-center gap-1.5 rounded-md border px-3 font-mono text-[11px] tracking-wide transition-colors'\n }\n data-oc-account-menu-trigger=\"\"\n >\n <span className=\"bg-primary inline-block size-1.5 rounded-full\" aria-hidden />\n <span className=\"text-foreground\">{label}</span>\n <svg\n width=\"9\"\n height=\"9\"\n viewBox=\"0 0 10 10\"\n aria-hidden\n className={\n 'opacity-60 transition-transform ' + (open ? 'rotate-180' : 'rotate-0')\n }\n >\n <path\n d=\"M2 4 L5 7 L8 4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n\n {open && (\n <div\n role=\"menu\"\n aria-label=\"Account menu\"\n className={\n popoverClassName ??\n 'border-border bg-popover text-popover-foreground absolute top-[calc(100%+6px)] right-0 z-50 w-[min(18rem,calc(100vw-1rem))] border shadow-xl'\n }\n data-oc-account-menu-popover=\"\"\n >\n <div className=\"border-border border-b p-3\">\n <div className=\"text-primary mb-1 font-mono text-[10px] tracking-widest uppercase\">\n § signed in · {hostname}\n </div>\n <div className=\"text-foreground/90 font-mono text-[11px] leading-tight break-all\">\n {account.didOc}\n </div>\n {displayName ? (\n <div className=\"text-muted-foreground/80 mt-1 font-mono text-[10px] tracking-wide\">\n {displayName}\n </div>\n ) : null}\n </div>\n\n <div className=\"p-1\">\n {menuItems?.map((item) => {\n const onClick = () => setOpen(false);\n const cls =\n 'hover:bg-accent flex items-center gap-2 px-3 py-2 font-mono text-[11px] tracking-wide transition-colors';\n const inner = (\n <>\n <span className=\"text-muted-foreground\" aria-hidden>\n →\n </span>\n <span className=\"flex-1\">{item.label}</span>\n {item.external ? (\n <span\n className=\"text-muted-foreground/70 text-[10px]\"\n aria-hidden\n >\n ↗\n </span>\n ) : null}\n </>\n );\n return item.external ? (\n <a\n key={item.href}\n href={item.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n onClick={onClick}\n role=\"menuitem\"\n className={cls}\n data-oc-account-menu-item=\"\"\n >\n {inner}\n </a>\n ) : (\n <Link\n key={item.href}\n href={item.href}\n onClick={onClick}\n role=\"menuitem\"\n className={cls}\n data-oc-account-menu-item=\"\"\n >\n {inner}\n </Link>\n );\n })}\n\n {familyDashboardEnabled ? (\n <a\n href=\"https://ochk.io/dashboard\"\n target=\"_blank\"\n rel=\"noreferrer\"\n onClick={() => setOpen(false)}\n role=\"menuitem\"\n className=\"hover:bg-accent flex items-center gap-2 px-3 py-2 font-mono text-[11px] tracking-wide transition-colors\"\n data-oc-account-menu-item=\"\"\n data-oc-account-menu-family-dashboard=\"\"\n >\n <span className=\"text-muted-foreground\" aria-hidden>\n →\n </span>\n <span className=\"flex-1\">family dashboard</span>\n <span\n className=\"text-muted-foreground/70 text-[10px]\"\n aria-hidden\n >\n ↗\n </span>\n </a>\n ) : null}\n\n <button\n type=\"button\"\n role=\"menuitem\"\n onClick={() => {\n setOpen(false);\n void signOut();\n }}\n className=\"hover:bg-accent flex w-full items-center gap-2 px-3 py-2 text-left font-mono text-[11px] tracking-wide transition-colors\"\n data-oc-account-menu-item=\"\"\n data-oc-account-menu-signout=\"\"\n >\n <span className=\"text-muted-foreground\" aria-hidden>\n →\n </span>\n <span className=\"flex-1\">sign out</span>\n </button>\n </div>\n\n {build ? <BuildFooter hostname={hostname} build={build} state={siteState} /> : null}\n </div>\n )}\n </div>\n );\n}\n\nfunction BuildFooter({\n hostname,\n build,\n state,\n}: {\n hostname: string;\n build: OcAccountMenuBuildInfo;\n state?: SiteState;\n}) {\n const sha = build.sha;\n const showSha = !!sha && sha !== 'dev';\n const commitUrl = showSha && build.repo ? `https://github.com/${build.repo}/commit/${sha}` : null;\n return (\n <div\n className=\"text-muted-foreground/60 border-border border-t px-3 py-2 font-mono text-[9.5px] tracking-widest uppercase\"\n data-oc-account-menu-build=\"\"\n >\n {hostname}\n {state && state !== 'live' ? (\n <>\n {' · '}\n <span className=\"text-muted-foreground/80\">{state}</span>\n </>\n ) : null}{' '}\n <span className=\"text-muted-foreground/80\">\n v{build.version}\n {showSha ? (\n <>\n {' · '}\n {commitUrl ? (\n <a\n href={commitUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"hover:text-foreground/90 underline decoration-dotted underline-offset-2\"\n >\n {sha}\n </a>\n ) : (\n sha\n )}\n </>\n ) : null}\n </span>\n </div>\n );\n}\n","'use client';\n\nimport Link from 'next/link';\nimport type { ReactNode } from 'react';\n\n/**\n * `<OcPrimaryNav>` — the centered link row in every family site's\n * `<LayoutHeader>`. Replaces the per-site bespoke `<nav>` blocks.\n *\n * **Design goals:**\n *\n * - Visible at every viewport width — no `hidden md:flex` cutoff.\n * Three short links (`dashboard · docs · spec`) fit on a 320px\n * phone in compact mono uppercase. Hamburger drawer stays\n * reserved for tertiary content (about / contact / etc.).\n *\n * - Active-link affordance is identical to the prior bespoke pattern\n * (primary-coloured text + 1px underline accent), so visitors who\n * learned the old nav keep their muscle memory.\n *\n * - Horizontal-scroll fallback. If a site adds a fourth link or runs\n * a very long label, the row scrolls instead of wrapping or\n * overflowing — `overflow-x-auto` + `whitespace-nowrap` + a thin\n * gradient mask via `mask-image` so the truncation reads as\n * intentional.\n *\n * **Usage:**\n *\n * <OcPrimaryNav\n * activePath={router.pathname}\n * links={[\n * { href: '/dashboard', label: 'dashboard' },\n * { href: 'https://docs.ochk.io/attest', label: 'docs', external: true },\n * { href: 'https://github.com/orangecheck/oc-attest-protocol/blob/main/SPEC.md', label: 'spec', external: true },\n * ]}\n * />\n */\n\nexport interface OcPrimaryNavLink {\n /** Same-origin path or absolute URL. */\n href: string;\n /** Visible label · lowercase preferred (the chip styling applies tracking + uppercase). */\n label: string;\n /** When true, opens in a new tab and skips the `isActive` check. */\n external?: boolean;\n /** Optional override for the active-match. By default the link is\n * active when `activePath === href` or `activePath.startsWith(href + '/')`. */\n matchExact?: boolean;\n}\n\nexport interface OcPrimaryNavProps {\n /** Current router pathname for active-link highlight. */\n activePath: string;\n /** Link set. Keep to 2–4 entries — beyond that, mobile starts to\n * feel cramped even with horizontal scroll. */\n links: ReadonlyArray<OcPrimaryNavLink>;\n /** className for the outer container. */\n className?: string;\n}\n\nfunction isActive(pathname: string, link: OcPrimaryNavLink): boolean {\n if (link.external) return false;\n if (link.matchExact) return pathname === link.href;\n if (link.href === '/') return pathname === '/';\n return pathname === link.href || pathname.startsWith(link.href + '/');\n}\n\nexport function OcPrimaryNav({ activePath, links, className }: OcPrimaryNavProps) {\n return (\n <nav\n aria-label=\"primary\"\n className={\n 'flex min-w-0 items-center justify-start overflow-x-auto gap-0.5 sm:gap-1 ' +\n 'whitespace-nowrap [scrollbar-width:none] [&::-webkit-scrollbar]:hidden ' +\n (className ?? '')\n }\n data-oc-primary-nav=\"\"\n >\n {links.map((link) => {\n const active = isActive(activePath, link);\n const className =\n 'font-display relative shrink-0 px-2 py-1 sm:px-3 text-[11px] sm:text-[12px] font-semibold tracking-wider uppercase transition-colors ' +\n (active\n ? 'text-primary after:bg-primary after:absolute after:inset-x-2 after:-bottom-[13px] after:h-px after:content-[\"\"]'\n : 'text-muted-foreground hover:text-foreground');\n const content: ReactNode = (\n <>\n {link.label}\n {link.external ? (\n <span\n aria-hidden\n className=\"text-muted-foreground/60 ml-1 text-[9px]\"\n >\n ↗\n </span>\n ) : null}\n </>\n );\n return link.external ? (\n <a\n key={link.href}\n href={link.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n className={className}\n data-oc-primary-nav-item=\"\"\n >\n {content}\n </a>\n ) : (\n <Link\n key={link.href}\n href={link.href}\n aria-current={active ? 'page' : undefined}\n className={className}\n data-oc-primary-nav-item={active ? 'active' : 'sibling'}\n >\n {content}\n </Link>\n );\n })}\n </nav>\n );\n}\n","'use client';\n\nimport Link from 'next/link';\nimport { useEffect, useState, type ReactNode } from 'react';\n\n/**\n * `<OcDashboardShell>` — the canonical demo-app frame for protocol\n * sites. Mirrors the `MeShell` pattern from `me.ochk.io`: persistent\n * left-rail tools on desktop, off-canvas drawer on mobile, page\n * eyebrow + title + description above the children.\n *\n * Drives the unified \"dashboard pattern\" the family rolled out\n * 2026-05-14: every protocol site's `/dashboard` (and the demo pages\n * underneath — `/create`, `/verify`, `/discover`, `/playground`, etc.)\n * wraps in this shell, so visitors crossing protocols experience the\n * same chrome.\n *\n * Layout (desktop):\n *\n * ┌─────────────┬────────────────────────────────────┐\n * │ § dashboard │ eyebrow │\n * │ ── tools ── │ title │\n * │ create ● │ description │\n * │ verify │ │\n * │ discover │ ── children ─────────────────────│\n * │ ... │ │\n * └─────────────┴────────────────────────────────────┘\n *\n * Mobile (<md): sidebar collapses behind a hamburger button at the\n * top of the main column; tapping opens a full-width drawer.\n */\n\nexport interface OcDashboardTool {\n /** Stable identifier · used as `active` key. */\n id: string;\n /** Same-origin path the tool lives at. */\n href: string;\n /** Visible label · lowercase preferred. */\n label: string;\n /** Optional one-line tagline shown under the label in the rail and\n * on the dashboard hub cards. */\n tagline?: string;\n /** Optional ascii / unicode glyph rendered before the label. */\n icon?: ReactNode;\n /** When true, opens in a new tab (e.g. an external explorer). */\n external?: boolean;\n}\n\nexport interface OcDashboardShellProps {\n /**\n * Dashboard root path — the rail header links here (\"§ dashboard\").\n * Default `'/dashboard'`.\n */\n rootHref?: string;\n /**\n * Site display name shown in the rail header above the tools list\n * (e.g. `'oc·attest'`).\n */\n siteLabel?: ReactNode;\n /** Tools to surface in the left rail. */\n tools: ReadonlyArray<OcDashboardTool>;\n /**\n * Which tool is currently active — matched against each tool's\n * `id`. Pass `undefined` on the dashboard hub itself.\n */\n active?: string;\n /** Optional small mono label above the page title. */\n eyebrow?: ReactNode;\n /** Page title — rendered as h1. */\n title?: ReactNode;\n /** Page description — rendered as a paragraph below the title. */\n description?: ReactNode;\n /** Main column content. */\n children: ReactNode;\n /** className for the outer container. */\n className?: string;\n}\n\nexport function OcDashboardShell({\n rootHref = '/dashboard',\n siteLabel,\n tools,\n active,\n eyebrow,\n title,\n description,\n children,\n className,\n}: OcDashboardShellProps) {\n const [drawerOpen, setDrawerOpen] = useState(false);\n\n // Close drawer on Escape, lock body scroll while open.\n useEffect(() => {\n if (!drawerOpen) return;\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setDrawerOpen(false);\n }\n document.addEventListener('keydown', onKey);\n const prevOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n return () => {\n document.removeEventListener('keydown', onKey);\n document.body.style.overflow = prevOverflow;\n };\n }, [drawerOpen]);\n\n const hasHeader = Boolean(title) || Boolean(eyebrow);\n\n return (\n <div\n className={'container ' + (className ?? '')}\n data-oc-dashboard-shell=\"\"\n >\n <div className=\"flex min-h-[calc(100vh-3rem)] flex-col md:flex-row md:gap-8\">\n {/* Desktop sidebar */}\n <Sidebar\n rootHref={rootHref}\n siteLabel={siteLabel}\n tools={tools}\n active={active}\n variant=\"desktop\"\n />\n\n {/* Main column */}\n <div className=\"flex min-w-0 flex-1 flex-col\">\n {/* Mobile bar — hamburger + crumb */}\n <div className=\"border-border flex items-center justify-between border-b py-3 md:hidden\">\n <button\n type=\"button\"\n onClick={() => setDrawerOpen(true)}\n className=\"text-muted-foreground hover:text-foreground inline-flex h-9 items-center gap-2 px-1 font-mono text-[11px] tracking-widest uppercase transition-colors\"\n aria-label=\"open dashboard tools\"\n aria-expanded={drawerOpen}\n data-oc-dashboard-mobile-trigger=\"\"\n >\n <span className=\"text-[14px] leading-none\">≡</span>\n <span>tools</span>\n </button>\n <Link\n href={rootHref}\n className=\"text-primary font-mono text-[11px] tracking-widest uppercase\"\n >\n § dashboard\n </Link>\n </div>\n\n <div className=\"pt-6 md:pt-3\">\n {hasHeader && (\n <div className=\"max-w-3xl\">\n {eyebrow ? (\n <div className=\"label-mono text-primary mb-3 font-mono text-[10px] tracking-widest uppercase\">\n {eyebrow}\n </div>\n ) : null}\n {title ? (\n <h1 className=\"font-display text-2xl font-bold tracking-tight sm:text-3xl\">\n {title}\n </h1>\n ) : null}\n {description ? (\n <p className=\"text-muted-foreground mt-3 max-w-[64ch] text-sm leading-relaxed\">\n {description}\n </p>\n ) : null}\n </div>\n )}\n <div className={hasHeader ? 'mt-8 pb-12' : 'pb-12'}>{children}</div>\n </div>\n </div>\n </div>\n\n {/* Mobile drawer */}\n {drawerOpen ? (\n <div\n className=\"fixed inset-0 z-50 md:hidden\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"dashboard tools\"\n data-oc-dashboard-drawer=\"\"\n >\n <div\n className=\"absolute inset-0 bg-background/80 backdrop-blur-sm\"\n onClick={() => setDrawerOpen(false)}\n aria-hidden\n />\n <div className=\"bg-background absolute top-0 left-0 h-full w-[85vw] max-w-sm border-r shadow-xl\">\n <Sidebar\n rootHref={rootHref}\n siteLabel={siteLabel}\n tools={tools}\n active={active}\n variant=\"drawer\"\n onClose={() => setDrawerOpen(false)}\n />\n </div>\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction Sidebar({\n rootHref,\n siteLabel,\n tools,\n active,\n variant,\n onClose,\n}: {\n rootHref: string;\n siteLabel?: ReactNode;\n tools: ReadonlyArray<OcDashboardTool>;\n active?: string;\n variant: 'desktop' | 'drawer';\n onClose?: () => void;\n}) {\n const isDrawer = variant === 'drawer';\n return (\n <aside\n className={\n isDrawer\n ? 'flex h-full w-full flex-col bg-card'\n : 'hidden md:sticky md:top-4 md:flex md:h-[calc(100vh-2rem)] md:w-56 md:shrink-0 md:flex-col md:self-start md:overflow-y-auto md:rounded md:border md:bg-card/40 lg:w-60'\n }\n aria-label=\"dashboard tools\"\n data-oc-dashboard-sidebar={variant}\n >\n {/* identity strip */}\n <div className=\"border-b px-4 py-3\">\n <div className=\"flex items-center justify-between\">\n <Link\n href={rootHref}\n onClick={onClose}\n className=\"hover:text-foreground font-display text-sm font-bold tracking-tight\"\n >\n § dashboard\n </Link>\n {isDrawer ? (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"text-muted-foreground hover:text-foreground -mr-2 inline-flex h-8 w-8 items-center justify-center rounded font-mono text-lg\"\n aria-label=\"close navigation\"\n >\n ×\n </button>\n ) : null}\n </div>\n {siteLabel ? (\n <div className=\"text-muted-foreground/70 mt-1 font-mono text-[10px] tracking-widest uppercase\">\n {siteLabel}\n </div>\n ) : null}\n </div>\n\n <nav className=\"flex-1 overflow-y-auto px-2 py-3\">\n <div className=\"text-muted-foreground/60 mb-1 px-3 font-mono text-[10px] tracking-widest uppercase\">\n § tools\n </div>\n <ul className=\"space-y-0.5\">\n {tools.map((tool) => {\n const isActive = tool.id === active;\n const innerCls =\n 'flex items-baseline gap-2 rounded px-3 py-1.5 text-[12.5px] transition-colors ' +\n (isActive\n ? 'bg-primary/10 text-primary font-semibold'\n : 'text-muted-foreground hover:text-foreground hover:bg-muted/30');\n const content = (\n <>\n {tool.icon ? (\n <span\n className={\n 'shrink-0 font-mono text-[11px] ' +\n (isActive ? 'text-primary' : 'text-muted-foreground/70')\n }\n aria-hidden\n >\n {tool.icon}\n </span>\n ) : null}\n <span className=\"flex-1 leading-tight\">\n <span>{tool.label}</span>\n {tool.tagline ? (\n <span className=\"text-muted-foreground/60 mt-0.5 block font-mono text-[10px] tracking-wide normal-case\">\n {tool.tagline}\n </span>\n ) : null}\n </span>\n {tool.external ? (\n <span\n className=\"text-muted-foreground/60 text-[10px]\"\n aria-hidden\n >\n ↗\n </span>\n ) : null}\n </>\n );\n return (\n <li key={tool.id}>\n {tool.external ? (\n <a\n href={tool.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n onClick={onClose}\n className={innerCls}\n data-oc-dashboard-tool={isActive ? 'active' : 'sibling'}\n >\n {content}\n </a>\n ) : (\n <Link\n href={tool.href}\n onClick={onClose}\n aria-current={isActive ? 'page' : undefined}\n className={innerCls}\n data-oc-dashboard-tool={isActive ? 'active' : 'sibling'}\n >\n {content}\n </Link>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n </aside>\n );\n}\n\n/**\n * Convenience: the dashboard hub-page grid. Renders the same set of\n * tools as the sidebar, but as bigger card-style entries — used as\n * the body of `/dashboard/index.tsx` on each protocol site.\n */\nexport interface OcDashboardHubProps {\n tools: ReadonlyArray<OcDashboardTool>;\n className?: string;\n}\n\nexport function OcDashboardHub({ tools, className }: OcDashboardHubProps) {\n return (\n <ul\n className={\n 'grid gap-px border-t border-l sm:grid-cols-2 ' + (className ?? '')\n }\n data-oc-dashboard-hub=\"\"\n >\n {tools.map((tool) => {\n const content = (\n <span className=\"flex h-full flex-col gap-3 p-5 transition-colors\">\n <span className=\"flex items-baseline gap-3\">\n {tool.icon ? (\n <span\n className=\"text-primary font-mono text-[13px]\"\n aria-hidden\n >\n {tool.icon}\n </span>\n ) : null}\n <span className=\"font-display text-foreground text-base font-bold tracking-tight\">\n {tool.label}\n </span>\n {tool.external ? (\n <span\n className=\"text-muted-foreground/60 ml-auto text-xs\"\n aria-hidden\n >\n ↗\n </span>\n ) : (\n <span\n className=\"text-muted-foreground/60 ml-auto text-xs\"\n aria-hidden\n >\n →\n </span>\n )}\n </span>\n {tool.tagline ? (\n <span className=\"text-muted-foreground text-sm leading-relaxed\">\n {tool.tagline}\n </span>\n ) : null}\n </span>\n );\n const cls = 'hover:bg-muted/30 group block border-r border-b transition-colors';\n return (\n <li key={tool.id}>\n {tool.external ? (\n <a\n href={tool.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n className={cls}\n >\n {content}\n </a>\n ) : (\n <Link href={tool.href} className={cls}>\n {content}\n </Link>\n )}\n </li>\n );\n })}\n </ul>\n );\n}\n","import type { ReactNode } from 'react';\n\n/**\n * AppShell — shared page chrome for every authenticated dashboard surface\n * across the OC family (vault, me, fleet, future). Lifted from oc-me-web's\n * `MeShell` and oc-vault-web's `VaultShell` — same eyebrow / title /\n * description / actions header band, no sidebar (sidebars are app-specific\n * and stay in the consuming app).\n *\n * Usage:\n * <AppShell eyebrow=\"§ vault\" title=\"your vault.\" description=\"…\">\n * ...\n * </AppShell>\n *\n * The component is stateless and dependency-free. Tailwind classes assume\n * the consuming site loads the family `globals.css` (which defines\n * `.container`, `.label-mono`, the dark-by-default palette, etc.).\n */\n\nexport interface AppShellProps {\n eyebrow?: ReactNode;\n title?: ReactNode;\n description?: ReactNode;\n /** Right-aligned action node rendered next to the title (e.g. CTA buttons). */\n headerActions?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\nexport function AppShell({\n eyebrow,\n title,\n description,\n headerActions,\n children,\n className,\n}: AppShellProps) {\n const hasHeader = Boolean(title);\n return (\n <div className={'container ' + (className ?? '')}>\n <div className=\"flex min-h-[calc(100vh-3rem)] flex-col\">\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <div className=\"pt-6 md:pt-8\">\n {hasHeader && (\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"max-w-3xl\">\n {eyebrow && (\n <div className=\"label-mono text-primary mb-3\">\n {eyebrow}\n </div>\n )}\n <h1 className=\"font-display text-2xl font-bold tracking-tight sm:text-3xl\">\n {title}\n </h1>\n {description && (\n <p className=\"text-muted-foreground mt-3 max-w-[64ch] text-sm leading-relaxed\">\n {description}\n </p>\n )}\n </div>\n {headerActions && (\n <div className=\"flex shrink-0 items-center gap-2\">\n {headerActions}\n </div>\n )}\n </div>\n )}\n <div className={hasHeader ? 'mt-8 pb-12' : 'pb-12'}>{children}</div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nexport interface SectionHeaderProps {\n /** Plain section name — rendered after a \"§ \" glyph in label-mono. */\n label: string;\n /** Optional right-side string (count, \"most recent first\"). */\n meta?: ReactNode;\n tone?: 'primary' | 'muted' | 'warning' | 'success' | 'destructive';\n className?: string;\n}\n\nconst TONE_CLASS = {\n primary: 'text-primary',\n muted: 'text-muted-foreground',\n warning: 'text-warning',\n success: 'text-success',\n destructive: 'text-destructive',\n} as const;\n\n/**\n * SectionHeader — the canonical \"§ x\" section header used across every\n * /me, /vault, and /fleet dashboard surface. Lifted from oc-me-web's\n * `me/ui/SectionHeader` so the visual contract stays single-source.\n *\n * Pattern is `label-mono text-primary mb-3` with a \"§ \" glyph followed by\n * the label, plus an optional muted/uppercase right-side meta string.\n */\nexport function SectionHeader({\n label,\n meta,\n tone = 'primary',\n className = '',\n}: SectionHeaderProps) {\n return (\n <div className={`mb-3 flex items-baseline justify-between gap-2 ${className}`}>\n <div className=\"flex items-center gap-1.5\">\n <div className={`label-mono ${TONE_CLASS[tone]}`}>§ {label}</div>\n </div>\n {meta && (\n <span className=\"text-muted-foreground/70 font-mono text-[10px] tracking-widest uppercase\">\n {meta}\n </span>\n )}\n </div>\n );\n}\n","import Link from 'next/link';\nimport type { ReactNode } from 'react';\n\nexport interface EmptyStateCta {\n label: string;\n href: string;\n /** External links open in a new tab and get a ↗ glyph. */\n external?: boolean;\n}\n\nexport interface EmptyStateProps {\n /** Short heading — one mono-uppercased label like \"no entries yet\". */\n label: string;\n /** Body — short prose explaining what would appear here and how. */\n children: ReactNode;\n cta?: EmptyStateCta;\n secondary?: EmptyStateCta;\n tone?: 'info' | 'warning' | 'muted';\n className?: string;\n}\n\nconst TONE_CLASS = {\n info: 'border-primary/30 bg-primary/5',\n warning: 'border-warning/40 bg-warning/5',\n muted: 'border-border bg-muted/20',\n} as const;\n\nconst LABEL_TONE_CLASS = {\n info: 'text-primary',\n warning: 'text-warning',\n muted: 'text-muted-foreground',\n} as const;\n\n/**\n * EmptyState — the canonical empty-state card used across every /me,\n * /vault, and /fleet dashboard. Empty states should *teach*: explain what\n * would appear, and how to make it appear. Lifted from oc-me-web's\n * `me/ui/EmptyState`.\n */\nexport function EmptyState({\n label,\n children,\n cta,\n secondary,\n tone = 'info',\n className = '',\n}: EmptyStateProps) {\n return (\n <div className={`border p-5 md:p-6 ${TONE_CLASS[tone]} ${className}`}>\n <div className={`label-mono mb-2 ${LABEL_TONE_CLASS[tone]}`}>§ {label}</div>\n <div className=\"text-foreground/85 max-w-2xl text-sm leading-relaxed\">{children}</div>\n {(cta || secondary) && (\n <div className=\"mt-4 flex flex-wrap gap-3\">\n {cta && <CtaLink {...cta} variant=\"primary\" />}\n {secondary && <CtaLink {...secondary} variant=\"secondary\" />}\n </div>\n )}\n </div>\n );\n}\n\nfunction CtaLink({\n label,\n href,\n external,\n variant,\n}: EmptyStateCta & { variant: 'primary' | 'secondary' }) {\n const cls =\n variant === 'primary'\n ? 'bg-primary text-primary-foreground hover:bg-primary/90 inline-flex h-9 items-center justify-center rounded-md px-4 font-mono text-[11px] font-semibold tracking-widest uppercase'\n : 'text-muted-foreground hover:text-foreground border-input hover:bg-accent inline-flex h-9 items-center justify-center rounded-md border px-4 font-mono text-[11px] tracking-widest uppercase';\n const text = external ? `${label} ↗` : label;\n if (external) {\n return (\n <a href={href} target=\"_blank\" rel=\"noreferrer\" className={cls}>\n {text}\n </a>\n );\n }\n return (\n <Link href={href} className={cls}>\n {text}\n </Link>\n );\n}\n","import type { ReactNode } from 'react';\n\nexport interface StatItem {\n /** Short uppercased label rendered in mono. */\n label: string;\n /** Primary value · already formatted as a string. */\n value: string;\n /** Optional secondary line · USD conversion, \"last 30 days\", etc. */\n sub?: string;\n /** When true, value is rendered in primary tone (use for headline metric). */\n accent?: boolean;\n /** Optional tone for the value (overrides accent). */\n tone?: 'default' | 'primary' | 'success' | 'warning' | 'destructive' | 'muted';\n}\n\nexport interface StatGridProps {\n items: StatItem[];\n columns?: 1 | 2 | 3 | 4;\n className?: string;\n}\n\nconst TONE_CLASS = {\n default: '',\n primary: 'text-primary',\n success: 'text-success',\n warning: 'text-warning',\n destructive: 'text-destructive',\n muted: 'text-muted-foreground',\n} as const;\n\nconst COL_CLASS = {\n 1: '',\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-3',\n 4: 'md:grid-cols-2 lg:grid-cols-4',\n} as const;\n\n/**\n * StatGrid — the canonical stats row used across family dashboards.\n * Lifted from oc-me-web's `me/ui/StatGrid`. Grid of equal-width tiles\n * separated by 1px borders. Always pre-format the value string —\n * the component does no number formatting.\n */\nexport function StatGrid({ items, columns = 3, className = '' }: StatGridProps) {\n return (\n <div className={`bg-border grid gap-px border ${COL_CLASS[columns]} ${className}`}>\n {items.map((it, i) => (\n <Tile key={`${it.label}-${i}`} item={it} />\n ))}\n </div>\n );\n}\n\nfunction Tile({ item }: { item: StatItem }) {\n const tone = item.tone ?? (item.accent ? 'primary' : 'default');\n return (\n <div className=\"bg-background p-5\">\n <div className=\"text-muted-foreground/80 font-mono text-[10px] tracking-widest uppercase\">\n {item.label}\n </div>\n <div\n className={`font-display mt-1 text-2xl font-bold tabular-nums tracking-tight ${TONE_CLASS[tone]}`}\n >\n {item.value}\n </div>\n {item.sub && (\n <div className=\"text-muted-foreground/70 mt-1 font-mono text-[10px] tracking-widest uppercase\">\n {item.sub}\n </div>\n )}\n </div>\n );\n}\n\nexport function StatTile({ children, ...item }: StatItem & { children?: ReactNode }) {\n return (\n <div>\n <Tile item={item} />\n {children}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/ecosystem-switcher.tsx","../src/family-properties.ts","../src/logo-dropdown.tsx","../src/account-menu.tsx","../src/primary-nav.tsx","../src/dashboard-shell.tsx","../src/app-shell.tsx","../src/section-header.tsx","../src/empty-state.tsx","../src/stat-grid.tsx"],"names":["useState","useRef","useEffect","jsxs","jsx","Boxes","ChevronDown","isActive","Link","Check","useId","router","useRouter","CornerDownLeft","useOcSession","Fragment","className","TONE_CLASS"],"mappings":"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","file":"index.js","sourcesContent":["import { Boxes, Check, ChevronDown } from 'lucide-react';\nimport Link from 'next/link';\nimport { useEffect, useRef, useState } from 'react';\n\n/**\n * EcosystemSwitcher — cross-product dropdown for jumping between every\n * site in the OrangeCheck family. Drop one into every site's LayoutHeader\n * and mark the active site via the `current` prop.\n *\n * <EcosystemSwitcher current=\"lock\" />\n *\n * The component is dependency-self-contained: no Radix, no Headless UI,\n * just outside-click + Escape handling so it works identically in every\n * site without forcing a peer-dep upgrade. Every link stays in-tab — the\n * family is one app from the user's POV.\n */\n\nexport type EcosystemSlug =\n | 'home'\n | 'docs'\n | 'fleet'\n | 'me'\n | 'vault'\n | 'attest'\n | 'lock'\n | 'vote'\n | 'stamp'\n | 'agent'\n | 'pledge';\n\ninterface SwitcherEntry {\n slug: EcosystemSlug;\n href: string;\n label: string;\n sub: string;\n docsHref: string;\n}\n\nconst ENTRIES: SwitcherEntry[] = [\n {\n slug: 'home',\n href: 'https://ochk.io',\n label: 'orangecheck',\n sub: 'umbrella',\n docsHref: 'https://docs.ochk.io',\n },\n {\n slug: 'docs',\n href: 'https://docs.ochk.io',\n label: 'oc·docs',\n sub: 'unified docs',\n docsHref: 'https://docs.ochk.io',\n },\n {\n slug: 'fleet',\n href: 'https://fleet.ochk.io',\n label: 'oc·fleet',\n sub: 'managed — agent fleet',\n docsHref: 'https://docs.ochk.io/fleet',\n },\n {\n slug: 'me',\n href: 'https://me.ochk.io',\n label: 'oc·me',\n sub: 'earn — consumer identity',\n docsHref: 'https://docs.ochk.io/me',\n },\n {\n slug: 'vault',\n href: 'https://vault.ochk.io',\n label: 'oc·vault',\n sub: 'keep — encrypted secrets',\n docsHref: 'https://docs.ochk.io/vault',\n },\n {\n slug: 'attest',\n href: 'https://attest.ochk.io',\n label: 'oc·attest',\n sub: 'am — sybil resistance',\n docsHref: 'https://docs.ochk.io/attest',\n },\n {\n slug: 'lock',\n href: 'https://lock.ochk.io',\n label: 'oc·lock',\n sub: 'whisper — encryption',\n docsHref: 'https://docs.ochk.io/lock',\n },\n {\n slug: 'vote',\n href: 'https://vote.ochk.io',\n label: 'oc·vote',\n sub: 'decide — polls',\n docsHref: 'https://docs.ochk.io/vote',\n },\n {\n slug: 'stamp',\n href: 'https://stamp.ochk.io',\n label: 'oc·stamp',\n sub: 'declare — block-anchored',\n docsHref: 'https://docs.ochk.io/stamp',\n },\n {\n slug: 'agent',\n href: 'https://agent.ochk.io',\n label: 'oc·agent',\n sub: 'delegate — scoped auth',\n docsHref: 'https://docs.ochk.io/agent',\n },\n {\n slug: 'pledge',\n href: 'https://pledge.ochk.io',\n label: 'oc·pledge',\n sub: 'swear — bonded commitment',\n docsHref: 'https://docs.ochk.io/pledge',\n },\n];\n\nexport interface EcosystemSwitcherProps {\n current: EcosystemSlug;\n className?: string;\n}\n\nexport function EcosystemSwitcher({\n current,\n className,\n}: EcosystemSwitcherProps) {\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n // Outside-click + Escape close.\n useEffect(() => {\n if (!open) return;\n function onDoc(e: MouseEvent) {\n if (!containerRef.current) return;\n if (!containerRef.current.contains(e.target as Node)) setOpen(false);\n }\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setOpen(false);\n }\n document.addEventListener('mousedown', onDoc);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onDoc);\n document.removeEventListener('keydown', onKey);\n };\n }, [open]);\n\n return (\n <div ref={containerRef} className={'relative ' + (className ?? '')}>\n <button\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-label=\"Switch OrangeCheck product\"\n title=\"Switch product\"\n onClick={() => setOpen((v) => !v)}\n className={\n 'inline-flex items-center gap-1 px-2 py-1 transition-colors ' +\n (open\n ? 'text-foreground'\n : 'text-muted-foreground hover:text-foreground')\n }\n >\n <Boxes className=\"h-4 w-4\" />\n <ChevronDown\n className={\n 'h-3.5 w-3.5 transition-transform ' + (open ? 'rotate-180' : '')\n }\n />\n </button>\n\n {open && (\n <div\n role=\"menu\"\n aria-label=\"Switch OrangeCheck product\"\n className=\"bg-background absolute right-0 top-full z-[60] mt-2 w-72 border shadow-lg\"\n >\n <div className=\"label-mono text-primary border-b px-4 py-2\">\n § the family\n </div>\n <ul className=\"py-1\">\n {ENTRIES.map((e) => {\n const isActive = e.slug === current;\n return (\n <li key={e.slug}>\n <Link\n href={e.href}\n onClick={() => setOpen(false)}\n aria-current={isActive ? 'page' : undefined}\n className={\n 'group flex items-baseline gap-3 px-4 py-2 transition-colors ' +\n (isActive\n ? 'bg-primary/5'\n : 'hover:bg-muted')\n }\n >\n <span\n className={\n 'font-display flex-1 text-[12px] font-semibold tracking-tight ' +\n (isActive\n ? 'text-primary'\n : 'text-foreground group-hover:text-primary transition-colors')\n }\n >\n {e.label}\n </span>\n <span className=\"text-muted-foreground font-mono text-[10px] tracking-wider uppercase\">\n {e.sub}\n </span>\n {isActive && (\n <Check className=\"text-primary h-3 w-3\" />\n )}\n </Link>\n </li>\n );\n })}\n </ul>\n <div className=\"border-t px-4 py-2 font-mono text-[10px] tracking-widest uppercase\">\n <Link\n href=\"https://docs.ochk.io\"\n onClick={() => setOpen(false)}\n className=\"text-muted-foreground hover:text-foreground inline-block transition-colors\"\n >\n docs.ochk.io →\n </Link>\n </div>\n </div>\n )}\n </div>\n );\n}\n","/**\n * Family-property registry — the single source of truth for every\n * orangecheck-family site. Both `<OcLogoDropdown>` (the global logo →\n * property switcher) and `<OcAccountMenu>` (the global signed-in\n * account chip) read from this table, so a one-line edit here ripples\n * to every consumer simultaneously.\n *\n * Adding a new family member means appending one entry below. Removing\n * one means deleting the entry. There are no other call sites to chase.\n */\n\nimport type { EcosystemSlug } from './ecosystem-switcher';\n\nexport type FamilyCategory = 'hub' | 'product' | 'protocol';\n\nexport interface FamilyProperty {\n /** Stable URL-safe identifier (e.g. `'vault'`). */\n slug: EcosystemSlug;\n /** Absolute origin (e.g. `'https://vault.ochk.io'`). */\n origin: string;\n /** Bare hostname (e.g. `'vault.ochk.io'`). Used in account-menu headers. */\n hostname: string;\n /** Wordmark label (e.g. `'oc·vault'`). */\n label: string;\n /** Short tagline (verb — what-it-does), shown under the wordmark in the menu. */\n sub: string;\n /** Docs deep-link (e.g. `'https://docs.ochk.io/vault'`). */\n docsHref: string;\n /** Family-level category that shapes the visual chip + menu sectioning. */\n category: FamilyCategory;\n}\n\nexport const FAMILY_PROPERTIES: ReadonlyArray<FamilyProperty> = [\n {\n slug: 'home',\n origin: 'https://ochk.io',\n hostname: 'ochk.io',\n label: 'orangecheck',\n sub: 'umbrella · sign-in',\n docsHref: 'https://docs.ochk.io',\n category: 'hub',\n },\n {\n slug: 'docs',\n origin: 'https://docs.ochk.io',\n hostname: 'docs.ochk.io',\n label: 'oc·docs',\n sub: 'unified reference',\n docsHref: 'https://docs.ochk.io',\n category: 'hub',\n },\n {\n slug: 'me',\n origin: 'https://me.ochk.io',\n hostname: 'me.ochk.io',\n label: 'oc·me',\n sub: 'earn — consumer identity',\n docsHref: 'https://docs.ochk.io/me',\n category: 'product',\n },\n {\n slug: 'vault',\n origin: 'https://vault.ochk.io',\n hostname: 'vault.ochk.io',\n label: 'oc·vault',\n sub: 'keep — encrypted secrets',\n docsHref: 'https://docs.ochk.io/vault',\n category: 'product',\n },\n {\n slug: 'fleet',\n origin: 'https://fleet.ochk.io',\n hostname: 'fleet.ochk.io',\n label: 'oc·fleet',\n sub: 'managed — agent fleet',\n docsHref: 'https://docs.ochk.io/fleet',\n category: 'product',\n },\n {\n slug: 'attest',\n origin: 'https://attest.ochk.io',\n hostname: 'attest.ochk.io',\n label: 'oc·attest',\n sub: 'am — sybil resistance',\n docsHref: 'https://docs.ochk.io/attest',\n category: 'protocol',\n },\n {\n slug: 'lock',\n origin: 'https://lock.ochk.io',\n hostname: 'lock.ochk.io',\n label: 'oc·lock',\n sub: 'whisper — encryption',\n docsHref: 'https://docs.ochk.io/lock',\n category: 'protocol',\n },\n {\n slug: 'vote',\n origin: 'https://vote.ochk.io',\n hostname: 'vote.ochk.io',\n label: 'oc·vote',\n sub: 'decide — polls',\n docsHref: 'https://docs.ochk.io/vote',\n category: 'protocol',\n },\n {\n slug: 'stamp',\n origin: 'https://stamp.ochk.io',\n hostname: 'stamp.ochk.io',\n label: 'oc·stamp',\n sub: 'declare — block-anchored',\n docsHref: 'https://docs.ochk.io/stamp',\n category: 'protocol',\n },\n {\n slug: 'agent',\n origin: 'https://agent.ochk.io',\n hostname: 'agent.ochk.io',\n label: 'oc·agent',\n sub: 'delegate — scoped auth',\n docsHref: 'https://docs.ochk.io/agent',\n category: 'protocol',\n },\n {\n slug: 'pledge',\n origin: 'https://pledge.ochk.io',\n hostname: 'pledge.ochk.io',\n label: 'oc·pledge',\n sub: 'swear — bonded commitment',\n docsHref: 'https://docs.ochk.io/pledge',\n category: 'protocol',\n },\n];\n\n/**\n * Canonical lifecycle states for any family site. Used by both the\n * tiny chip rendered next to the wordmark and any other surface that\n * wants to display \"this site is still settling\" UX. Centralised\n * vocabulary so we can't accidentally drift to a parallel synonym\n * like `preview`/`experimental` on different sites.\n *\n * - `live` — production-ready; **no chip rendered** (the absence\n * of a chip is the affordance)\n * - `beta` — feature-complete but still iterating, soft launch\n * - `alpha` — early, breaking changes expected, integrators beware\n */\nexport type SiteState = 'alpha' | 'beta' | 'live';\n\nexport const SITE_STATE_LABEL: Record<Exclude<SiteState, 'live'>, string> = {\n alpha: 'alpha',\n beta: 'beta',\n};\n\n/** Find a property entry by its slug. */\nexport function findFamilyProperty(slug: EcosystemSlug): FamilyProperty | undefined {\n return FAMILY_PROPERTIES.find((p) => p.slug === slug);\n}\n","import { Check, ChevronDown, CornerDownLeft } from 'lucide-react';\nimport Link from 'next/link';\nimport { useRouter } from 'next/router';\nimport * as React from 'react';\nimport { useEffect, useId, useRef, useState, type ReactNode } from 'react';\n\nimport type { EcosystemSlug } from './ecosystem-switcher';\nimport {\n FAMILY_PROPERTIES,\n SITE_STATE_LABEL,\n findFamilyProperty,\n type FamilyCategory,\n type SiteState,\n} from './family-properties';\n\n/**\n * `<OcLogoDropdown>` — the logo IS the dropdown.\n *\n * Wraps a site's local LogoMark + wordmark in a button that, on click,\n * drops a popover listing every OrangeCheck family property. The current\n * property is highlighted with a primary-tinted background, a left-edge\n * accent bar, and a \"home\" label — and is itself a clickable link to\n * the local home href (default `/`).\n *\n * Family properties carry one of three categories:\n *\n * - `hub` — orangecheck umbrella + docs (no badge)\n * - `product` — commercial products (me, vault, fleet) · primary chip\n * - `protocol` — open verb specs (attest, lock, vote, stamp, agent,\n * pledge) · muted chip\n *\n * The category of the *current* site is auto-rendered as a tiny mono\n * chip inside the trigger button, and the dropdown itself groups\n * entries by category with subtle mono dividers — so the product /\n * protocol distinction is visible both on the logo and in the menu,\n * with a single source of truth (`./family-properties.ts`).\n *\n * The optional `siteState` prop renders a second tiny chip after the\n * category chip — `alpha` or `beta` — for sites that aren't `live`.\n * The vocabulary is canonical across the family (see SiteState in\n * family-properties.ts). Pass it from your per-site config so a\n * single edit propagates to the logo, the account menu, and anywhere\n * else the chip surfaces.\n *\n * Mobile-aware: the popover's width is clamped to the viewport,\n * content scrolls when there are more entries than fit. The trigger\n * chips hide below `sm` to preserve mobile header space — the dropdown\n * itself still shows the grouping.\n */\n\nconst SECTIONS: Array<{ category: FamilyCategory; label: string }> = [\n { category: 'hub', label: 'hub' },\n { category: 'product', label: 'products' },\n { category: 'protocol', label: 'protocols' },\n];\n\nexport interface OcLogoDropdownProps {\n /**\n * Which property this site IS. Used to highlight the active row,\n * route the active row's link to `homeHref` instead of the cross-\n * domain absolute URL, and pick the category chip rendered next\n * to the wordmark.\n */\n current: EcosystemSlug;\n /**\n * The site's local home path (for the active row). Default `/`.\n * Always a same-origin path — the logo's \"go home\" affordance is\n * preserved by clicking the highlighted row.\n */\n homeHref?: string;\n /**\n * Optional lifecycle state for this site. `'live'` (default) renders\n * no chip; `'alpha'` and `'beta'` render a small mono uppercase chip\n * after the category badge. Drive this from your per-site config so\n * one constant change ripples to every surface.\n */\n siteState?: SiteState;\n /**\n * Logo contents · typically `<LogoMark />` + `<span>oc·X</span>`.\n */\n children: ReactNode;\n /** className for the outer container. */\n className?: string;\n /** className for the trigger button. */\n triggerClassName?: string;\n /** className for the popover. */\n popoverClassName?: string;\n}\n\nfunction CategoryChip({ category }: { category: FamilyCategory }) {\n if (category === 'hub') return null;\n const isProduct = category === 'product';\n return (\n <span\n aria-label={isProduct ? 'commercial product' : 'protocol reference'}\n className={\n 'ml-1 hidden rounded-sm border px-1.5 py-[1px] font-mono text-[9px] font-medium tracking-widest uppercase sm:inline-block ' +\n (isProduct\n ? 'border-primary/25 bg-primary/10 text-primary'\n : 'border-muted-foreground/20 bg-muted/40 text-muted-foreground/85')\n }\n data-oc-category={category}\n >\n {isProduct ? 'product' : 'protocol'}\n </span>\n );\n}\n\nfunction SiteStateBadge({ state }: { state: SiteState }) {\n if (state === 'live') return null;\n return (\n <span\n aria-label={`site lifecycle: ${state}`}\n className=\"text-muted-foreground/70 ml-1 hidden font-mono text-[9px] font-medium tracking-widest uppercase sm:inline-block\"\n data-oc-site-state={state}\n >\n {SITE_STATE_LABEL[state]}\n </span>\n );\n}\n\nfunction MenuCategoryChip({ category }: { category: FamilyCategory }) {\n if (category === 'hub') return null;\n const isProduct = category === 'product';\n return (\n <span\n aria-hidden\n className={\n 'inline-block shrink-0 rounded-sm px-1 py-[1px] font-mono text-[9px] font-medium tracking-widest uppercase ' +\n (isProduct\n ? 'bg-primary/10 text-primary'\n : 'bg-muted/60 text-muted-foreground/80')\n }\n >\n {isProduct ? 'pro' : 'spec'}\n </span>\n );\n}\n\nexport function OcLogoDropdown({\n current,\n homeHref = '/',\n siteState = 'live',\n children,\n className,\n triggerClassName,\n popoverClassName,\n}: OcLogoDropdownProps) {\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const menuId = useId();\n const router = useRouter();\n\n const currentCategory: FamilyCategory = findFamilyProperty(current)?.category ?? 'hub';\n\n /**\n * Trigger click semantics:\n *\n * single-click → toggle the family dropdown\n * double-click → navigate to `homeHref` (the local landing)\n *\n * `MouseEvent.detail` is the running click count for clicks within\n * the browser's double-click threshold (~500ms). The DOM still\n * fires the `click` event on the first tap, so the dropdown\n * momentarily opens during a double-click — and the second click\n * navigates home. That's the visual story the popover-side hint\n * sells: *open · tap again · home.*\n */\n function handleTriggerClick(e: React.MouseEvent<HTMLButtonElement>) {\n if (e.detail >= 2) {\n e.preventDefault();\n setOpen(false);\n void router.push(homeHref);\n return;\n }\n setOpen((v) => !v);\n }\n\n // Outside-click + Escape close.\n useEffect(() => {\n if (!open) return;\n function onDoc(e: MouseEvent) {\n if (!containerRef.current) return;\n if (!containerRef.current.contains(e.target as Node)) setOpen(false);\n }\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setOpen(false);\n }\n document.addEventListener('mousedown', onDoc);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onDoc);\n document.removeEventListener('keydown', onKey);\n };\n }, [open]);\n\n return (\n <div\n ref={containerRef}\n className={'relative ' + (className ?? '')}\n data-oc-logo-dropdown=\"\"\n data-oc-current-category={currentCategory}\n data-oc-site-state={siteState}\n >\n <button\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-controls={menuId}\n aria-label=\"OrangeCheck family · click to open property menu, double-click to go home\"\n title=\"single-click · family menu · double-click · go home\"\n onClick={handleTriggerClick}\n className={\n triggerClassName ??\n 'group hover:bg-accent/30 -mx-1.5 -my-1 flex min-h-[40px] items-center gap-2 rounded-sm px-1.5 py-1 transition-colors ' +\n (open ? 'bg-accent/20' : '')\n }\n data-oc-logo-dropdown-trigger=\"\"\n data-oc-logo-dropdown-open={open ? 'true' : 'false'}\n >\n {children}\n <CategoryChip category={currentCategory} />\n <SiteStateBadge state={siteState} />\n <ChevronDown\n aria-hidden\n className={\n 'text-muted-foreground/70 group-hover:text-foreground/80 h-3.5 w-3.5 shrink-0 transition-transform duration-200 ' +\n (open ? 'rotate-180' : '')\n }\n />\n {/* Double-click home affordance · fades + slides in when\n the dropdown is open. Subtle on purpose — primary\n purpose is to whisper \"tap again, you'll go home\" to\n anyone who notices the dropdown is open. Mono caret\n glyph borrows the lucide `CornerDownLeft` so the\n family stays on a single icon library. */}\n <span\n aria-hidden\n className={\n 'pointer-events-none ml-0.5 hidden items-center gap-1 font-mono text-[9px] tracking-widest uppercase transition-all duration-200 sm:inline-flex ' +\n (open\n ? 'text-muted-foreground/70 translate-x-0 opacity-100'\n : '-translate-x-1 opacity-0')\n }\n data-oc-logo-dropdown-home-hint=\"\"\n >\n <CornerDownLeft\n className={\n 'h-3 w-3 ' + (open ? 'motion-safe:animate-pulse' : '')\n }\n />\n <span className=\"text-primary/70\">home</span>\n </span>\n </button>\n\n {open && (\n <div\n id={menuId}\n role=\"menu\"\n aria-label=\"OrangeCheck family\"\n className={\n popoverClassName ??\n 'bg-background absolute top-full left-0 z-[60] mt-2 w-[min(20rem,calc(100vw-1rem))] border shadow-lg'\n }\n data-oc-logo-dropdown-popover=\"\"\n >\n <div className=\"label-mono text-primary border-b px-4 py-2\">\n § the orangecheck family\n </div>\n <div className=\"max-h-[min(28rem,70vh)] overflow-y-auto py-1\" role=\"none\">\n {SECTIONS.map(({ category, label }) => {\n const sectionEntries = FAMILY_PROPERTIES.filter(\n (e) => e.category === category\n );\n if (sectionEntries.length === 0) return null;\n return (\n <div key={category} role=\"none\" data-oc-section={category}>\n <div\n role=\"separator\"\n aria-hidden\n className={\n 'text-muted-foreground/60 px-4 pt-2.5 pb-1 font-mono text-[9px] font-medium tracking-widest uppercase ' +\n (category === 'hub' ? '' : 'border-t mt-1')\n }\n >\n {label}\n </div>\n <ul role=\"none\" className=\"pb-1\">\n {sectionEntries.map((e) => {\n const isActive = e.slug === current;\n const href = isActive ? homeHref : e.origin;\n return (\n <li key={e.slug} role=\"none\">\n <Link\n href={href}\n role=\"menuitem\"\n onClick={() => setOpen(false)}\n aria-current={isActive ? 'page' : undefined}\n className={\n 'group flex items-center gap-2 px-4 py-2 transition-colors ' +\n (isActive\n ? 'bg-primary/8 border-primary -ml-px border-l-2'\n : 'hover:bg-muted -ml-px border-l-2 border-transparent')\n }\n data-oc-logo-dropdown-item={\n isActive ? 'current' : 'sibling'\n }\n data-oc-entry-category={e.category}\n >\n <span className=\"flex min-w-0 flex-1 flex-col leading-tight\">\n <span\n className={\n 'font-display text-[12px] font-semibold tracking-tight ' +\n (isActive\n ? 'text-primary'\n : 'text-foreground group-hover:text-primary transition-colors')\n }\n >\n {e.label}\n </span>\n <span className=\"text-muted-foreground mt-0.5 font-mono text-[10px] tracking-wide\">\n {e.sub}\n </span>\n </span>\n <MenuCategoryChip category={e.category} />\n {isActive ? (\n <span className=\"text-primary inline-flex shrink-0 items-center gap-1 font-mono text-[10px] tracking-widest uppercase\">\n home\n <Check className=\"h-3 w-3\" />\n </span>\n ) : null}\n </Link>\n </li>\n );\n })}\n </ul>\n </div>\n );\n })}\n </div>\n <div className=\"border-t px-4 py-2 font-mono text-[10px] tracking-widest uppercase\">\n <Link\n href=\"https://docs.ochk.io\"\n onClick={() => setOpen(false)}\n className=\"text-muted-foreground hover:text-foreground inline-block transition-colors\"\n >\n docs.ochk.io →\n </Link>\n </div>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport Link from 'next/link';\nimport { useEffect, useRef, useState } from 'react';\nimport { useOcSession } from '@orangecheck/auth-client';\n\nimport type { EcosystemSlug } from './ecosystem-switcher';\nimport { findFamilyProperty, type SiteState } from './family-properties';\n\n/**\n * `<OcAccountMenu>` — the canonical top-right account affordance for\n * every family site. Replaces the older inline-styled `OcAccountChip`\n * from `@orangecheck/auth-client` with a Tailwind-styled, fully\n * configurable, cross-site-aware dropdown.\n *\n * Three explicit visual states:\n *\n * 1. **Pre-hydration / loading** — neutral `sign in` placeholder so\n * the header never goes blank on first paint.\n * 2. **Anonymous / error** — primary-styled `sign in` CTA pointing\n * at the site's local `/signin` (or whatever `signInUrl` you\n * pass).\n * 3. **Authenticated** — pill with a primary-tinted signal dot and\n * shortened did_oc (or display name if set); click → popover\n * with full address, optional site-specific menu items, family\n * dashboard link, sign-out, and an optional BuildFooter showing\n * site name + version + commit sha → GitHub.\n *\n * Cross-site recognition: the component re-fetches the session on\n * `visibilitychange` and `focus` events, so when a user signs in at a\n * sibling site (ochk.io, attest.ochk.io, etc.) and tabs back, the\n * chip flips from \"sign in\" to \"signed in\" without a hard reload.\n *\n * The component reads `useOcSession()` from `@orangecheck/auth-client`,\n * so the consuming app must mount `<OcSessionProvider>` somewhere in\n * its tree (already standard in every consumer's `_app.tsx`).\n */\n\nexport interface OcAccountMenuItem {\n /** Same-origin path or absolute URL. */\n href: string;\n /** Visible label. */\n label: string;\n /**\n * When `true`, opens in a new tab and renders a ↗ glyph after the\n * label. Use for cross-domain links (e.g. `https://ochk.io/dashboard`).\n */\n external?: boolean;\n}\n\nexport interface OcAccountMenuBuildInfo {\n /** Display version string, e.g. `'0.5.0'` (rendered as `v0.5.0`). */\n version: string;\n /**\n * 7+ character commit SHA. Render as `'dev'` (or omit) for local\n * dev to suppress the GitHub link.\n */\n sha?: string;\n /**\n * GitHub `owner/repo` slug — combined with `sha` to produce the\n * `https://github.com/<repo>/commit/<sha>` link.\n */\n repo?: string;\n}\n\n/**\n * Minimal session shape `<OcAccountMenuView>` needs. Compatible with\n * `useOcSession()`'s return value but explicit so consumers running\n * their own auth context (e.g. oc-www's local `useAuth`) can pass an\n * adapter without depending on `@orangecheck/auth-client`'s exact\n * types.\n */\nexport interface OcAccountMenuSession {\n status: 'loading' | 'authenticated' | 'anonymous' | 'error';\n account: { didOc: string; displayName: string | null } | null;\n signOut: () => void | Promise<void>;\n refresh: () => void | Promise<void>;\n}\n\nexport interface OcAccountMenuProps {\n /**\n * Which family property this site IS. Used to label the section\n * header (`§ signed in · vault.ochk.io`) and to suppress the\n * family-dashboard menu item when the user is already on `home`.\n */\n current: EcosystemSlug;\n /**\n * Where the anonymous \"sign in\" affordance points. Default `'/signin'`\n * — works with every site's in-place `<OcSignIn>` page. Pass\n * `'https://ochk.io/signin'` if you want to bounce to the auth host\n * instead.\n */\n signInUrl?: string;\n /** Label for the anonymous \"sign in\" affordance. Default `'sign in'`. */\n signInLabel?: string;\n /**\n * Site-specific menu items, rendered between the section header\n * and the family-dashboard / sign-out rows. Keep this short —\n * 2–6 entries is the sweet spot. Pass `[]` (or omit) for sites\n * with no per-site routes worth surfacing.\n */\n menuItems?: ReadonlyArray<OcAccountMenuItem>;\n /**\n * Centered primary nav links (typically dashboard · docs · spec).\n * Rendered inside the popover at viewport widths below `sm`\n * (640px) — these are the same links the `<OcPrimaryNav>` row\n * shows inline at sm+, but at ultra-small widths the inline row\n * hides and this popover section takes its place. The result: one\n * dropdown surface owns navigation on phones, no separate\n * hamburger drawer required.\n */\n primaryNavLinks?: ReadonlyArray<OcAccountMenuItem>;\n /**\n * Tertiary nav links (about / contact / status / privacy / etc.).\n * Always visible inside the popover. Folds the legacy mobile-only\n * hamburger drawer's contents into the same dropdown as everything\n * else, so there's exactly one nav surface to learn.\n */\n secondaryNavLinks?: ReadonlyArray<OcAccountMenuItem>;\n /**\n * When `true` (default), shows a `family dashboard ↗` link to\n * `https://ochk.io/dashboard`. Set `false` for `home` (already\n * there) or for sites that don't want it.\n */\n showFamilyDashboard?: boolean;\n /**\n * Optional BuildFooter info. When present, renders a tiny mono\n * footer at the bottom of the popover with `site · vX.Y.Z · sha`\n * — the SHA links to the matching GitHub commit when `repo` is\n * also provided. Drive this from your `next.config.ts` via\n * `NEXT_PUBLIC_APP_VERSION` / `NEXT_PUBLIC_BUILD_SHA` env vars.\n */\n build?: OcAccountMenuBuildInfo;\n /**\n * Optional lifecycle chip rendered inside the BuildFooter line\n * (between site and version). Mirrors the chip on the logo so\n * both surfaces agree.\n */\n siteState?: SiteState;\n /** className overrides for layout-level customisation. */\n className?: string;\n triggerClassName?: string;\n popoverClassName?: string;\n}\n\nfunction shortenDid(s: string): string {\n if (s.length <= 14) return s;\n return `${s.slice(0, 7)}…${s.slice(-5)}`;\n}\n\n/**\n * Connected variant — pulls the session from `useOcSession()`. This is\n * what every consumer site with `<OcSessionProvider>` mounted should\n * use. For sites running a parallel auth context (e.g. oc-www's local\n * `useAuth`), use `<OcAccountMenuView>` below and pass a session prop\n * directly.\n */\nexport function OcAccountMenu(props: OcAccountMenuProps) {\n const session = useOcSession();\n return (\n <OcAccountMenuView\n {...props}\n session={{\n status: session.status,\n account: session.account\n ? {\n didOc: session.account.didOc,\n displayName: session.account.displayName ?? null,\n }\n : null,\n signOut: session.signOut,\n refresh: session.refresh,\n }}\n />\n );\n}\n\nexport interface OcAccountMenuViewProps extends OcAccountMenuProps {\n /**\n * The session to render. When using `<OcAccountMenuView>` directly\n * (rather than the connected `<OcAccountMenu>`), pass an adapter\n * over your local auth context.\n */\n session: OcAccountMenuSession;\n}\n\n/**\n * Presentational variant — takes a session as an explicit prop. Use\n * this when your site runs its own auth context (e.g. ochk.io's\n * local `useAuth`) and you want the family-consistent visual without\n * mounting `<OcSessionProvider>`.\n */\nexport function OcAccountMenuView({\n current,\n signInUrl = '/signin',\n signInLabel = 'sign in',\n menuItems,\n primaryNavLinks,\n secondaryNavLinks,\n showFamilyDashboard,\n build,\n siteState,\n className,\n triggerClassName,\n popoverClassName,\n session,\n}: OcAccountMenuViewProps) {\n const { status, account, signOut, refresh } = session;\n const [hydrated, setHydrated] = useState(false);\n const [open, setOpen] = useState(false);\n const wrapRef = useRef<HTMLDivElement | null>(null);\n\n const property = findFamilyProperty(current);\n const hostname = property?.hostname ?? `${current}.ochk.io`;\n const isHome = current === 'home';\n const familyDashboardEnabled = showFamilyDashboard ?? !isHome;\n\n useEffect(() => setHydrated(true), []);\n\n // Cross-site sign-in pickup: re-fetch on visibility / focus.\n useEffect(() => {\n const onWake = () => {\n if (document.visibilityState === 'visible') void refresh();\n };\n const onFocus = () => void refresh();\n document.addEventListener('visibilitychange', onWake);\n window.addEventListener('focus', onFocus);\n return () => {\n document.removeEventListener('visibilitychange', onWake);\n window.removeEventListener('focus', onFocus);\n };\n }, [refresh]);\n\n // Outside-click + Escape close.\n useEffect(() => {\n if (!open) return;\n const onClick = (e: MouseEvent) => {\n if (wrapRef.current && !wrapRef.current.contains(e.target as Node)) setOpen(false);\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setOpen(false);\n };\n document.addEventListener('mousedown', onClick);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onClick);\n document.removeEventListener('keydown', onKey);\n };\n }, [open]);\n\n const signInTrigger = (\n <a\n href={signInUrl}\n aria-label={signInLabel}\n data-oc-account-menu-signin=\"\"\n className={\n triggerClassName ??\n 'border-input bg-background hover:bg-accent inline-flex h-8 items-center justify-center rounded-md border px-3 font-mono text-[11px] font-semibold tracking-widest uppercase transition-colors'\n }\n >\n {signInLabel}\n </a>\n );\n\n // States 1 + 2: pre-hydration or anonymous — render the same\n // placeholder/CTA so the slot is never empty.\n if (!hydrated || status === 'loading') {\n return signInTrigger;\n }\n\n if (status !== 'authenticated' || !account) {\n return signInTrigger;\n }\n\n // Authenticated — pill + popover.\n const displayName = account.displayName ?? null;\n const label = displayName ?? shortenDid(account.didOc);\n\n return (\n <div\n ref={wrapRef}\n className={'relative inline-block ' + (className ?? '')}\n data-oc-account-menu=\"\"\n >\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-label={`Signed in as ${account.didOc}. Open account menu.`}\n className={\n triggerClassName ??\n 'border-primary/40 bg-card hover:bg-accent inline-flex h-8 items-center gap-1.5 rounded-md border px-3 font-mono text-[11px] tracking-wide transition-colors'\n }\n data-oc-account-menu-trigger=\"\"\n >\n <span className=\"bg-primary inline-block size-1.5 rounded-full\" aria-hidden />\n <span className=\"text-foreground\">{label}</span>\n <svg\n width=\"9\"\n height=\"9\"\n viewBox=\"0 0 10 10\"\n aria-hidden\n className={\n 'opacity-60 transition-transform ' + (open ? 'rotate-180' : 'rotate-0')\n }\n >\n <path\n d=\"M2 4 L5 7 L8 4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n\n {open && (\n <div\n role=\"menu\"\n aria-label=\"Account menu\"\n className={\n popoverClassName ??\n 'border-border bg-popover text-popover-foreground absolute top-[calc(100%+6px)] right-0 z-50 w-[min(18rem,calc(100vw-1rem))] border shadow-xl'\n }\n data-oc-account-menu-popover=\"\"\n >\n <div className=\"border-border border-b p-3\">\n <div className=\"text-primary mb-1 font-mono text-[10px] tracking-widest uppercase\">\n § signed in · {hostname}\n </div>\n <div className=\"text-foreground/90 font-mono text-[11px] leading-tight break-all\">\n {account.didOc}\n </div>\n {displayName ? (\n <div className=\"text-muted-foreground/80 mt-1 font-mono text-[10px] tracking-wide\">\n {displayName}\n </div>\n ) : null}\n </div>\n\n {primaryNavLinks && primaryNavLinks.length > 0 ? (\n <PopoverSection\n label=\"navigate\"\n items={primaryNavLinks}\n onItemClick={() => setOpen(false)}\n />\n ) : null}\n\n <div className=\"p-1\" data-oc-account-menu-section=\"account\">\n {primaryNavLinks && primaryNavLinks.length > 0 ? (\n <div className=\"text-muted-foreground/60 px-3 pb-1 pt-2 font-mono text-[10px] tracking-widest uppercase\">\n § account\n </div>\n ) : null}\n {menuItems?.map((item) => {\n const onClick = () => setOpen(false);\n const cls =\n 'hover:bg-accent flex items-center gap-2 px-3 py-2 font-mono text-[11px] tracking-wide transition-colors';\n const inner = (\n <>\n <span className=\"text-muted-foreground\" aria-hidden>\n →\n </span>\n <span className=\"flex-1\">{item.label}</span>\n {item.external ? (\n <span\n className=\"text-muted-foreground/70 text-[10px]\"\n aria-hidden\n >\n ↗\n </span>\n ) : null}\n </>\n );\n return item.external ? (\n <a\n key={item.href}\n href={item.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n onClick={onClick}\n role=\"menuitem\"\n className={cls}\n data-oc-account-menu-item=\"\"\n >\n {inner}\n </a>\n ) : (\n <Link\n key={item.href}\n href={item.href}\n onClick={onClick}\n role=\"menuitem\"\n className={cls}\n data-oc-account-menu-item=\"\"\n >\n {inner}\n </Link>\n );\n })}\n\n {familyDashboardEnabled ? (\n <a\n href=\"https://ochk.io/dashboard\"\n target=\"_blank\"\n rel=\"noreferrer\"\n onClick={() => setOpen(false)}\n role=\"menuitem\"\n className=\"hover:bg-accent flex items-center gap-2 px-3 py-2 font-mono text-[11px] tracking-wide transition-colors\"\n data-oc-account-menu-item=\"\"\n data-oc-account-menu-family-dashboard=\"\"\n >\n <span className=\"text-muted-foreground\" aria-hidden>\n →\n </span>\n <span className=\"flex-1\">family dashboard</span>\n <span\n className=\"text-muted-foreground/70 text-[10px]\"\n aria-hidden\n >\n ↗\n </span>\n </a>\n ) : null}\n\n <button\n type=\"button\"\n role=\"menuitem\"\n onClick={() => {\n setOpen(false);\n void signOut();\n }}\n className=\"hover:bg-accent flex w-full items-center gap-2 px-3 py-2 text-left font-mono text-[11px] tracking-wide transition-colors\"\n data-oc-account-menu-item=\"\"\n data-oc-account-menu-signout=\"\"\n >\n <span className=\"text-muted-foreground\" aria-hidden>\n →\n </span>\n <span className=\"flex-1\">sign out</span>\n </button>\n </div>\n\n {secondaryNavLinks && secondaryNavLinks.length > 0 ? (\n <PopoverSection\n label=\"more\"\n items={secondaryNavLinks}\n onItemClick={() => setOpen(false)}\n bordered\n />\n ) : null}\n\n {build ? <BuildFooter hostname={hostname} build={build} state={siteState} /> : null}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Single-section list inside the popover (e.g. `§ navigate`,\n * `§ more`). Used for both the primary-nav and secondary-nav slots so\n * the rendering stays consistent. Each item respects `external` and\n * gets the same row treatment as `menuItems`.\n */\nfunction PopoverSection({\n label,\n items,\n onItemClick,\n bordered,\n}: {\n label: string;\n items: ReadonlyArray<OcAccountMenuItem>;\n onItemClick: () => void;\n bordered?: boolean;\n}) {\n const cls =\n 'hover:bg-accent flex items-center gap-2 px-3 py-2 font-mono text-[11px] tracking-wide transition-colors';\n return (\n <div\n className={'p-1 ' + (bordered ? 'border-border border-t' : '')}\n data-oc-account-menu-section={label}\n >\n <div className=\"text-muted-foreground/60 px-3 pt-2 pb-1 font-mono text-[10px] tracking-widest uppercase\">\n § {label}\n </div>\n {items.map((item) => {\n const inner = (\n <>\n <span className=\"text-muted-foreground\" aria-hidden>\n →\n </span>\n <span className=\"flex-1\">{item.label}</span>\n {item.external ? (\n <span\n className=\"text-muted-foreground/70 text-[10px]\"\n aria-hidden\n >\n ↗\n </span>\n ) : null}\n </>\n );\n return item.external ? (\n <a\n key={item.href}\n href={item.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n onClick={onItemClick}\n role=\"menuitem\"\n className={cls}\n data-oc-account-menu-item=\"\"\n >\n {inner}\n </a>\n ) : (\n <Link\n key={item.href}\n href={item.href}\n onClick={onItemClick}\n role=\"menuitem\"\n className={cls}\n data-oc-account-menu-item=\"\"\n >\n {inner}\n </Link>\n );\n })}\n </div>\n );\n}\n\nfunction BuildFooter({\n hostname,\n build,\n state,\n}: {\n hostname: string;\n build: OcAccountMenuBuildInfo;\n state?: SiteState;\n}) {\n const sha = build.sha;\n const showSha = !!sha && sha !== 'dev';\n const commitUrl = showSha && build.repo ? `https://github.com/${build.repo}/commit/${sha}` : null;\n return (\n <div\n className=\"text-muted-foreground/60 border-border border-t px-3 py-2 font-mono text-[9.5px] tracking-widest uppercase\"\n data-oc-account-menu-build=\"\"\n >\n {hostname}\n {state && state !== 'live' ? (\n <>\n {' · '}\n <span className=\"text-muted-foreground/80\">{state}</span>\n </>\n ) : null}{' '}\n <span className=\"text-muted-foreground/80\">\n v{build.version}\n {showSha ? (\n <>\n {' · '}\n {commitUrl ? (\n <a\n href={commitUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"hover:text-foreground/90 underline decoration-dotted underline-offset-2\"\n >\n {sha}\n </a>\n ) : (\n sha\n )}\n </>\n ) : null}\n </span>\n </div>\n );\n}\n","'use client';\n\nimport Link from 'next/link';\nimport type { ReactNode } from 'react';\n\n/**\n * `<OcPrimaryNav>` — the centered link row in every family site's\n * `<LayoutHeader>`. Replaces the per-site bespoke `<nav>` blocks.\n *\n * **Design goals:**\n *\n * - Visible at every viewport width — no `hidden md:flex` cutoff.\n * Three short links (`dashboard · docs · spec`) fit on a 320px\n * phone in compact mono uppercase. Hamburger drawer stays\n * reserved for tertiary content (about / contact / etc.).\n *\n * - Active-link affordance is identical to the prior bespoke pattern\n * (primary-coloured text + 1px underline accent), so visitors who\n * learned the old nav keep their muscle memory.\n *\n * - Horizontal-scroll fallback. If a site adds a fourth link or runs\n * a very long label, the row scrolls instead of wrapping or\n * overflowing — `overflow-x-auto` + `whitespace-nowrap` + a thin\n * gradient mask via `mask-image` so the truncation reads as\n * intentional.\n *\n * **Usage:**\n *\n * <OcPrimaryNav\n * activePath={router.pathname}\n * links={[\n * { href: '/dashboard', label: 'dashboard' },\n * { href: 'https://docs.ochk.io/attest', label: 'docs', external: true },\n * { href: 'https://github.com/orangecheck/oc-attest-protocol/blob/main/SPEC.md', label: 'spec', external: true },\n * ]}\n * />\n */\n\nexport interface OcPrimaryNavLink {\n /** Same-origin path or absolute URL. */\n href: string;\n /** Visible label · lowercase preferred (the chip styling applies tracking + uppercase). */\n label: string;\n /** When true, opens in a new tab and skips the `isActive` check. */\n external?: boolean;\n /** Optional override for the active-match. By default the link is\n * active when `activePath === href` or `activePath.startsWith(href + '/')`. */\n matchExact?: boolean;\n}\n\nexport interface OcPrimaryNavProps {\n /** Current router pathname for active-link highlight. */\n activePath: string;\n /** Link set. Keep to 2–4 entries — beyond that, mobile starts to\n * feel cramped even with horizontal scroll. */\n links: ReadonlyArray<OcPrimaryNavLink>;\n /** className for the outer container. */\n className?: string;\n}\n\nfunction isActive(pathname: string, link: OcPrimaryNavLink): boolean {\n if (link.external) return false;\n if (link.matchExact) return pathname === link.href;\n if (link.href === '/') return pathname === '/';\n return pathname === link.href || pathname.startsWith(link.href + '/');\n}\n\nexport function OcPrimaryNav({ activePath, links, className }: OcPrimaryNavProps) {\n return (\n <nav\n aria-label=\"primary\"\n className={\n 'flex min-w-0 items-center justify-start overflow-x-auto gap-0.5 sm:gap-1 ' +\n 'whitespace-nowrap [scrollbar-width:none] [&::-webkit-scrollbar]:hidden ' +\n (className ?? '')\n }\n data-oc-primary-nav=\"\"\n >\n {links.map((link) => {\n const active = isActive(activePath, link);\n const className =\n 'font-display relative shrink-0 px-2 py-1 sm:px-3 text-[11px] sm:text-[12px] font-semibold tracking-wider uppercase transition-colors ' +\n (active\n ? 'text-primary after:bg-primary after:absolute after:inset-x-2 after:-bottom-[13px] after:h-px after:content-[\"\"]'\n : 'text-muted-foreground hover:text-foreground');\n const content: ReactNode = (\n <>\n {link.label}\n {link.external ? (\n <span\n aria-hidden\n className=\"text-muted-foreground/60 ml-1 text-[9px]\"\n >\n ↗\n </span>\n ) : null}\n </>\n );\n return link.external ? (\n <a\n key={link.href}\n href={link.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n className={className}\n data-oc-primary-nav-item=\"\"\n >\n {content}\n </a>\n ) : (\n <Link\n key={link.href}\n href={link.href}\n aria-current={active ? 'page' : undefined}\n className={className}\n data-oc-primary-nav-item={active ? 'active' : 'sibling'}\n >\n {content}\n </Link>\n );\n })}\n </nav>\n );\n}\n","'use client';\n\nimport Link from 'next/link';\nimport { useEffect, useState, type ReactNode } from 'react';\n\n/**\n * `<OcDashboardShell>` — the canonical demo-app frame for protocol\n * sites. Mirrors the `MeShell` pattern from `me.ochk.io`: persistent\n * left-rail tools on desktop, off-canvas drawer on mobile, page\n * eyebrow + title + description above the children.\n *\n * Drives the unified \"dashboard pattern\" the family rolled out\n * 2026-05-14: every protocol site's `/dashboard` (and the demo pages\n * underneath — `/create`, `/verify`, `/discover`, `/playground`, etc.)\n * wraps in this shell, so visitors crossing protocols experience the\n * same chrome.\n *\n * Layout (desktop):\n *\n * ┌─────────────┬────────────────────────────────────┐\n * │ § dashboard │ eyebrow │\n * │ ── tools ── │ title │\n * │ create ● │ description │\n * │ verify │ │\n * │ discover │ ── children ─────────────────────│\n * │ ... │ │\n * └─────────────┴────────────────────────────────────┘\n *\n * Mobile (<md): sidebar collapses behind a hamburger button at the\n * top of the main column; tapping opens a full-width drawer.\n */\n\nexport interface OcDashboardTool {\n /** Stable identifier · used as `active` key. */\n id: string;\n /** Same-origin path the tool lives at. */\n href: string;\n /** Visible label · lowercase preferred. */\n label: string;\n /** Optional one-line tagline shown under the label in the rail and\n * on the dashboard hub cards. */\n tagline?: string;\n /** Optional ascii / unicode glyph rendered before the label. */\n icon?: ReactNode;\n /** When true, opens in a new tab (e.g. an external explorer). */\n external?: boolean;\n}\n\nexport interface OcDashboardShellProps {\n /**\n * Dashboard root path — the rail header links here (\"§ dashboard\").\n * Default `'/dashboard'`.\n */\n rootHref?: string;\n /**\n * Site display name shown in the rail header above the tools list\n * (e.g. `'oc·attest'`).\n */\n siteLabel?: ReactNode;\n /** Tools to surface in the left rail. */\n tools: ReadonlyArray<OcDashboardTool>;\n /**\n * Which tool is currently active — matched against each tool's\n * `id`. Pass `undefined` on the dashboard hub itself.\n */\n active?: string;\n /** Optional small mono label above the page title. */\n eyebrow?: ReactNode;\n /** Page title — rendered as h1. */\n title?: ReactNode;\n /** Page description — rendered as a paragraph below the title. */\n description?: ReactNode;\n /** Main column content. */\n children: ReactNode;\n /** className for the outer container. */\n className?: string;\n}\n\nexport function OcDashboardShell({\n rootHref = '/dashboard',\n siteLabel,\n tools,\n active,\n eyebrow,\n title,\n description,\n children,\n className,\n}: OcDashboardShellProps) {\n const [drawerOpen, setDrawerOpen] = useState(false);\n\n // Close drawer on Escape, lock body scroll while open.\n useEffect(() => {\n if (!drawerOpen) return;\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setDrawerOpen(false);\n }\n document.addEventListener('keydown', onKey);\n const prevOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n return () => {\n document.removeEventListener('keydown', onKey);\n document.body.style.overflow = prevOverflow;\n };\n }, [drawerOpen]);\n\n const hasHeader = Boolean(title) || Boolean(eyebrow);\n\n return (\n <div\n className={'container ' + (className ?? '')}\n data-oc-dashboard-shell=\"\"\n >\n <div className=\"flex min-h-[calc(100vh-3rem)] flex-col md:flex-row md:gap-8\">\n {/* Desktop sidebar */}\n <Sidebar\n rootHref={rootHref}\n siteLabel={siteLabel}\n tools={tools}\n active={active}\n variant=\"desktop\"\n />\n\n {/* Main column */}\n <div className=\"flex min-w-0 flex-1 flex-col\">\n {/* Mobile bar — hamburger + crumb */}\n <div className=\"border-border flex items-center justify-between border-b py-3 md:hidden\">\n <button\n type=\"button\"\n onClick={() => setDrawerOpen(true)}\n className=\"text-muted-foreground hover:text-foreground inline-flex h-9 items-center gap-2 px-1 font-mono text-[11px] tracking-widest uppercase transition-colors\"\n aria-label=\"open dashboard tools\"\n aria-expanded={drawerOpen}\n data-oc-dashboard-mobile-trigger=\"\"\n >\n <span className=\"text-[14px] leading-none\">≡</span>\n <span>tools</span>\n </button>\n <Link\n href={rootHref}\n className=\"text-primary font-mono text-[11px] tracking-widest uppercase\"\n >\n § dashboard\n </Link>\n </div>\n\n <div className=\"pt-6 md:pt-3\">\n {hasHeader && (\n <div className=\"max-w-3xl\">\n {eyebrow ? (\n <div className=\"label-mono text-primary mb-3 font-mono text-[10px] tracking-widest uppercase\">\n {eyebrow}\n </div>\n ) : null}\n {title ? (\n <h1 className=\"font-display text-2xl font-bold tracking-tight sm:text-3xl\">\n {title}\n </h1>\n ) : null}\n {description ? (\n <p className=\"text-muted-foreground mt-3 max-w-[64ch] text-sm leading-relaxed\">\n {description}\n </p>\n ) : null}\n </div>\n )}\n <div className={hasHeader ? 'mt-8 pb-12' : 'pb-12'}>{children}</div>\n </div>\n </div>\n </div>\n\n {/* Mobile drawer */}\n {drawerOpen ? (\n <div\n className=\"fixed inset-0 z-50 md:hidden\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"dashboard tools\"\n data-oc-dashboard-drawer=\"\"\n >\n <div\n className=\"absolute inset-0 bg-background/80 backdrop-blur-sm\"\n onClick={() => setDrawerOpen(false)}\n aria-hidden\n />\n <div className=\"bg-background absolute top-0 left-0 h-full w-[85vw] max-w-sm border-r shadow-xl\">\n <Sidebar\n rootHref={rootHref}\n siteLabel={siteLabel}\n tools={tools}\n active={active}\n variant=\"drawer\"\n onClose={() => setDrawerOpen(false)}\n />\n </div>\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction Sidebar({\n rootHref,\n siteLabel,\n tools,\n active,\n variant,\n onClose,\n}: {\n rootHref: string;\n siteLabel?: ReactNode;\n tools: ReadonlyArray<OcDashboardTool>;\n active?: string;\n variant: 'desktop' | 'drawer';\n onClose?: () => void;\n}) {\n const isDrawer = variant === 'drawer';\n return (\n <aside\n className={\n isDrawer\n ? 'flex h-full w-full flex-col bg-card'\n : 'hidden md:sticky md:top-4 md:flex md:h-[calc(100vh-2rem)] md:w-56 md:shrink-0 md:flex-col md:self-start md:overflow-y-auto md:rounded md:border md:bg-card/40 lg:w-60'\n }\n aria-label=\"dashboard tools\"\n data-oc-dashboard-sidebar={variant}\n >\n {/* identity strip */}\n <div className=\"border-b px-4 py-3\">\n <div className=\"flex items-center justify-between\">\n <Link\n href={rootHref}\n onClick={onClose}\n className=\"hover:text-foreground font-display text-sm font-bold tracking-tight\"\n >\n § dashboard\n </Link>\n {isDrawer ? (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"text-muted-foreground hover:text-foreground -mr-2 inline-flex h-8 w-8 items-center justify-center rounded font-mono text-lg\"\n aria-label=\"close navigation\"\n >\n ×\n </button>\n ) : null}\n </div>\n {siteLabel ? (\n <div className=\"text-muted-foreground/70 mt-1 font-mono text-[10px] tracking-widest uppercase\">\n {siteLabel}\n </div>\n ) : null}\n </div>\n\n <nav className=\"flex-1 overflow-y-auto px-2 py-3\">\n <div className=\"text-muted-foreground/60 mb-1 px-3 font-mono text-[10px] tracking-widest uppercase\">\n § tools\n </div>\n <ul className=\"space-y-0.5\">\n {tools.map((tool) => {\n const isActive = tool.id === active;\n const innerCls =\n 'flex items-baseline gap-2 rounded px-3 py-1.5 text-[12.5px] transition-colors ' +\n (isActive\n ? 'bg-primary/10 text-primary font-semibold'\n : 'text-muted-foreground hover:text-foreground hover:bg-muted/30');\n const content = (\n <>\n {tool.icon ? (\n <span\n className={\n 'shrink-0 font-mono text-[11px] ' +\n (isActive ? 'text-primary' : 'text-muted-foreground/70')\n }\n aria-hidden\n >\n {tool.icon}\n </span>\n ) : null}\n <span className=\"flex-1 leading-tight\">\n <span>{tool.label}</span>\n {tool.tagline ? (\n <span className=\"text-muted-foreground/60 mt-0.5 block font-mono text-[10px] tracking-wide normal-case\">\n {tool.tagline}\n </span>\n ) : null}\n </span>\n {tool.external ? (\n <span\n className=\"text-muted-foreground/60 text-[10px]\"\n aria-hidden\n >\n ↗\n </span>\n ) : null}\n </>\n );\n return (\n <li key={tool.id}>\n {tool.external ? (\n <a\n href={tool.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n onClick={onClose}\n className={innerCls}\n data-oc-dashboard-tool={isActive ? 'active' : 'sibling'}\n >\n {content}\n </a>\n ) : (\n <Link\n href={tool.href}\n onClick={onClose}\n aria-current={isActive ? 'page' : undefined}\n className={innerCls}\n data-oc-dashboard-tool={isActive ? 'active' : 'sibling'}\n >\n {content}\n </Link>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n </aside>\n );\n}\n\n/**\n * Convenience: the dashboard hub-page grid. Renders the same set of\n * tools as the sidebar, but as bigger card-style entries — used as\n * the body of `/dashboard/index.tsx` on each protocol site.\n */\nexport interface OcDashboardHubProps {\n tools: ReadonlyArray<OcDashboardTool>;\n className?: string;\n}\n\nexport function OcDashboardHub({ tools, className }: OcDashboardHubProps) {\n return (\n <ul\n className={\n 'grid gap-px border-t border-l sm:grid-cols-2 ' + (className ?? '')\n }\n data-oc-dashboard-hub=\"\"\n >\n {tools.map((tool) => {\n const content = (\n <span className=\"flex h-full flex-col gap-3 p-5 transition-colors\">\n <span className=\"flex items-baseline gap-3\">\n {tool.icon ? (\n <span\n className=\"text-primary font-mono text-[13px]\"\n aria-hidden\n >\n {tool.icon}\n </span>\n ) : null}\n <span className=\"font-display text-foreground text-base font-bold tracking-tight\">\n {tool.label}\n </span>\n {tool.external ? (\n <span\n className=\"text-muted-foreground/60 ml-auto text-xs\"\n aria-hidden\n >\n ↗\n </span>\n ) : (\n <span\n className=\"text-muted-foreground/60 ml-auto text-xs\"\n aria-hidden\n >\n →\n </span>\n )}\n </span>\n {tool.tagline ? (\n <span className=\"text-muted-foreground text-sm leading-relaxed\">\n {tool.tagline}\n </span>\n ) : null}\n </span>\n );\n const cls = 'hover:bg-muted/30 group block border-r border-b transition-colors';\n return (\n <li key={tool.id}>\n {tool.external ? (\n <a\n href={tool.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n className={cls}\n >\n {content}\n </a>\n ) : (\n <Link href={tool.href} className={cls}>\n {content}\n </Link>\n )}\n </li>\n );\n })}\n </ul>\n );\n}\n","import type { ReactNode } from 'react';\n\n/**\n * AppShell — shared page chrome for every authenticated dashboard surface\n * across the OC family (vault, me, fleet, future). Lifted from oc-me-web's\n * `MeShell` and oc-vault-web's `VaultShell` — same eyebrow / title /\n * description / actions header band, no sidebar (sidebars are app-specific\n * and stay in the consuming app).\n *\n * Usage:\n * <AppShell eyebrow=\"§ vault\" title=\"your vault.\" description=\"…\">\n * ...\n * </AppShell>\n *\n * The component is stateless and dependency-free. Tailwind classes assume\n * the consuming site loads the family `globals.css` (which defines\n * `.container`, `.label-mono`, the dark-by-default palette, etc.).\n */\n\nexport interface AppShellProps {\n eyebrow?: ReactNode;\n title?: ReactNode;\n description?: ReactNode;\n /** Right-aligned action node rendered next to the title (e.g. CTA buttons). */\n headerActions?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\nexport function AppShell({\n eyebrow,\n title,\n description,\n headerActions,\n children,\n className,\n}: AppShellProps) {\n const hasHeader = Boolean(title);\n return (\n <div className={'container ' + (className ?? '')}>\n <div className=\"flex min-h-[calc(100vh-3rem)] flex-col\">\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <div className=\"pt-6 md:pt-8\">\n {hasHeader && (\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"max-w-3xl\">\n {eyebrow && (\n <div className=\"label-mono text-primary mb-3\">\n {eyebrow}\n </div>\n )}\n <h1 className=\"font-display text-2xl font-bold tracking-tight sm:text-3xl\">\n {title}\n </h1>\n {description && (\n <p className=\"text-muted-foreground mt-3 max-w-[64ch] text-sm leading-relaxed\">\n {description}\n </p>\n )}\n </div>\n {headerActions && (\n <div className=\"flex shrink-0 items-center gap-2\">\n {headerActions}\n </div>\n )}\n </div>\n )}\n <div className={hasHeader ? 'mt-8 pb-12' : 'pb-12'}>{children}</div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nexport interface SectionHeaderProps {\n /** Plain section name — rendered after a \"§ \" glyph in label-mono. */\n label: string;\n /** Optional right-side string (count, \"most recent first\"). */\n meta?: ReactNode;\n tone?: 'primary' | 'muted' | 'warning' | 'success' | 'destructive';\n className?: string;\n}\n\nconst TONE_CLASS = {\n primary: 'text-primary',\n muted: 'text-muted-foreground',\n warning: 'text-warning',\n success: 'text-success',\n destructive: 'text-destructive',\n} as const;\n\n/**\n * SectionHeader — the canonical \"§ x\" section header used across every\n * /me, /vault, and /fleet dashboard surface. Lifted from oc-me-web's\n * `me/ui/SectionHeader` so the visual contract stays single-source.\n *\n * Pattern is `label-mono text-primary mb-3` with a \"§ \" glyph followed by\n * the label, plus an optional muted/uppercase right-side meta string.\n */\nexport function SectionHeader({\n label,\n meta,\n tone = 'primary',\n className = '',\n}: SectionHeaderProps) {\n return (\n <div className={`mb-3 flex items-baseline justify-between gap-2 ${className}`}>\n <div className=\"flex items-center gap-1.5\">\n <div className={`label-mono ${TONE_CLASS[tone]}`}>§ {label}</div>\n </div>\n {meta && (\n <span className=\"text-muted-foreground/70 font-mono text-[10px] tracking-widest uppercase\">\n {meta}\n </span>\n )}\n </div>\n );\n}\n","import Link from 'next/link';\nimport type { ReactNode } from 'react';\n\nexport interface EmptyStateCta {\n label: string;\n href: string;\n /** External links open in a new tab and get a ↗ glyph. */\n external?: boolean;\n}\n\nexport interface EmptyStateProps {\n /** Short heading — one mono-uppercased label like \"no entries yet\". */\n label: string;\n /** Body — short prose explaining what would appear here and how. */\n children: ReactNode;\n cta?: EmptyStateCta;\n secondary?: EmptyStateCta;\n tone?: 'info' | 'warning' | 'muted';\n className?: string;\n}\n\nconst TONE_CLASS = {\n info: 'border-primary/30 bg-primary/5',\n warning: 'border-warning/40 bg-warning/5',\n muted: 'border-border bg-muted/20',\n} as const;\n\nconst LABEL_TONE_CLASS = {\n info: 'text-primary',\n warning: 'text-warning',\n muted: 'text-muted-foreground',\n} as const;\n\n/**\n * EmptyState — the canonical empty-state card used across every /me,\n * /vault, and /fleet dashboard. Empty states should *teach*: explain what\n * would appear, and how to make it appear. Lifted from oc-me-web's\n * `me/ui/EmptyState`.\n */\nexport function EmptyState({\n label,\n children,\n cta,\n secondary,\n tone = 'info',\n className = '',\n}: EmptyStateProps) {\n return (\n <div className={`border p-5 md:p-6 ${TONE_CLASS[tone]} ${className}`}>\n <div className={`label-mono mb-2 ${LABEL_TONE_CLASS[tone]}`}>§ {label}</div>\n <div className=\"text-foreground/85 max-w-2xl text-sm leading-relaxed\">{children}</div>\n {(cta || secondary) && (\n <div className=\"mt-4 flex flex-wrap gap-3\">\n {cta && <CtaLink {...cta} variant=\"primary\" />}\n {secondary && <CtaLink {...secondary} variant=\"secondary\" />}\n </div>\n )}\n </div>\n );\n}\n\nfunction CtaLink({\n label,\n href,\n external,\n variant,\n}: EmptyStateCta & { variant: 'primary' | 'secondary' }) {\n const cls =\n variant === 'primary'\n ? 'bg-primary text-primary-foreground hover:bg-primary/90 inline-flex h-9 items-center justify-center rounded-md px-4 font-mono text-[11px] font-semibold tracking-widest uppercase'\n : 'text-muted-foreground hover:text-foreground border-input hover:bg-accent inline-flex h-9 items-center justify-center rounded-md border px-4 font-mono text-[11px] tracking-widest uppercase';\n const text = external ? `${label} ↗` : label;\n if (external) {\n return (\n <a href={href} target=\"_blank\" rel=\"noreferrer\" className={cls}>\n {text}\n </a>\n );\n }\n return (\n <Link href={href} className={cls}>\n {text}\n </Link>\n );\n}\n","import type { ReactNode } from 'react';\n\nexport interface StatItem {\n /** Short uppercased label rendered in mono. */\n label: string;\n /** Primary value · already formatted as a string. */\n value: string;\n /** Optional secondary line · USD conversion, \"last 30 days\", etc. */\n sub?: string;\n /** When true, value is rendered in primary tone (use for headline metric). */\n accent?: boolean;\n /** Optional tone for the value (overrides accent). */\n tone?: 'default' | 'primary' | 'success' | 'warning' | 'destructive' | 'muted';\n}\n\nexport interface StatGridProps {\n items: StatItem[];\n columns?: 1 | 2 | 3 | 4;\n className?: string;\n}\n\nconst TONE_CLASS = {\n default: '',\n primary: 'text-primary',\n success: 'text-success',\n warning: 'text-warning',\n destructive: 'text-destructive',\n muted: 'text-muted-foreground',\n} as const;\n\nconst COL_CLASS = {\n 1: '',\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-3',\n 4: 'md:grid-cols-2 lg:grid-cols-4',\n} as const;\n\n/**\n * StatGrid — the canonical stats row used across family dashboards.\n * Lifted from oc-me-web's `me/ui/StatGrid`. Grid of equal-width tiles\n * separated by 1px borders. Always pre-format the value string —\n * the component does no number formatting.\n */\nexport function StatGrid({ items, columns = 3, className = '' }: StatGridProps) {\n return (\n <div className={`bg-border grid gap-px border ${COL_CLASS[columns]} ${className}`}>\n {items.map((it, i) => (\n <Tile key={`${it.label}-${i}`} item={it} />\n ))}\n </div>\n );\n}\n\nfunction Tile({ item }: { item: StatItem }) {\n const tone = item.tone ?? (item.accent ? 'primary' : 'default');\n return (\n <div className=\"bg-background p-5\">\n <div className=\"text-muted-foreground/80 font-mono text-[10px] tracking-widest uppercase\">\n {item.label}\n </div>\n <div\n className={`font-display mt-1 text-2xl font-bold tabular-nums tracking-tight ${TONE_CLASS[tone]}`}\n >\n {item.value}\n </div>\n {item.sub && (\n <div className=\"text-muted-foreground/70 mt-1 font-mono text-[10px] tracking-widest uppercase\">\n {item.sub}\n </div>\n )}\n </div>\n );\n}\n\nexport function StatTile({ children, ...item }: StatItem & { children?: ReactNode }) {\n return (\n <div>\n <Tile item={item} />\n {children}\n </div>\n );\n}\n"]}
|