@hanzo/ui 8.0.22 → 8.0.24

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/product/Charts.tsx","../src/product/Metric.tsx","../src/product/Donut.tsx","../src/product/combobox/filter.ts","../src/product/menu/items.tsx","../src/product/menu/portal-theme.tsx","../src/product/menu/roving.ts","../src/product/menu/FloatingMenu.tsx","../src/product/ComboBox.tsx","../src/product/surfaces.data.ts","../src/product/HanzoMark.tsx","../src/product/BrandMark.tsx","../src/product/AppHeader.tsx","../src/product/OrgMark.tsx","../src/product/scope.ts","../src/product/OrgSwitcher.tsx","../src/product/menu/DropdownMenu.tsx","../src/product/menu/ContextMenu.tsx","../src/product/SiteNav.tsx","../src/product/SiteFooter.tsx","../src/product/CommerceResource.tsx","../src/product/ConfirmDelete.tsx","../src/product/Filters.tsx","../src/product/brand.ts","../src/product/animatedLogo.logic.ts","../src/product/AnimatedLogo.tsx","../src/product/FadeIn.tsx","../src/product/ProductIcon.tsx","../src/product/ProviderLogo.tsx","../src/product/Reorder.tsx","../src/product/SelectMenu.tsx","../src/product/Toast.tsx"],"names":["Sparkline","jsx","jsxs","XStack","YStack","Text","Donut","ACCENT","useRef","useState","useEffect","useCallback","Fragment","Button","useMemo","Popover","Input","Spinner","Check","LayoutGrid","Separator","isExternal","defaultLink","RefreshCw","message","Search","useLayoutEffect","useTheme","ChevronDown","Card"],"mappings":"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","file":"chunk-7P7R7FC5.js","sourcesContent":["'use client'\n\n/**\n * Charts — the ONE way the console draws a trend, a series, a share, or a\n * distribution. Dependency-free: inline SVG for the data-dense temporal charts\n * (Sparkline / LineChart / BarChart) and @hanzo/gui primitives for the\n * token-native ones (BarRows, and the Donut's optional legend), so everything\n * themes to the shell.\n *\n * Color is data-driven, not a mode flag: a `Slice` is drawn in its own `color`\n * when it has one (categorical/polychrome — e.g. spend-by-model) and in a\n * monochrome opacity ramp off the foreground token when it doesn't (on-brand —\n * e.g. collections-by-model). One Donut serves both; a consumer that needs a\n * richer legend (amounts, click targets) leaves `legend` off and composes its own.\n *\n * Honest by construction: a Sparkline with fewer than two points renders nothing\n * (no invented trend); Donut / BarRows with no positive value render an em-dash.\n * Callers pass REAL series — these never fabricate data.\n *\n * SVG marks can't read Tamagui tokens, so concrete colors for SVG come from the\n * live theme (`useTheme().<token>.get()` → `var(--token)` on web, stays reactive).\n */\nimport { useEffect, useRef, useState, type ReactNode } from 'react'\nimport { Text, XStack, YStack, useTheme } from '@hanzo/gui'\n\n/** Distinct hues for categorical series (e.g. spend-by-model donut), dark-tuned. */\nexport const CHART_PALETTE = [\n '#7c5cff',\n '#23c562',\n '#ff9f45',\n '#3aa0ff',\n '#ff5d8f',\n '#16c0c8',\n '#c084fc',\n '#f4c245',\n]\nexport const CHART_OTHER = '#64748b'\n\nconst ACCENT = CHART_PALETTE[0]\nconst GRID = 'rgba(148,163,184,0.16)'\nconst AXIS = 'rgba(148,163,184,0.85)'\n\n/** A point on a temporal/sequential axis (LineChart / BarChart). */\nexport type ChartPoint = { label: string; value: number }\n\n/** A labelled magnitude in a categorical chart (Donut / BarRows). */\nexport type Slice = { label: string; value: number; color?: string; hint?: string }\n\ntype Themed = ReturnType<typeof useTheme>\n\n/** Read a concrete color for a theme token (for SVG), with a safe fallback. */\nconst tone = (theme: Themed, key: string, fallback: string): string => {\n const v = (theme as unknown as Record<string, { get?: () => unknown } | undefined>)[key]\n const got = v?.get?.()\n return typeof got === 'string' ? got : fallback\n}\n\n/** Opacity ramp so N monochrome slices/areas stay visually distinct. */\nconst rampOpacity = (i: number, n: number): number => (n <= 1 ? 0.9 : 0.95 - (i / (n - 1)) * 0.62)\n\nexport function useContainerWidth() {\n const ref = useRef<HTMLDivElement>(null)\n const [w, setW] = useState(0)\n useEffect(() => {\n const el = ref.current\n if (!el) return\n const measure = () => setW(el.clientWidth)\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(el)\n return () => ro.disconnect()\n }, [])\n return { ref, w }\n}\n\n// ── Sparkline (fixed size, for metric cards) ─────────────────────────────────\n\nexport function Sparkline({\n values,\n width = 120,\n height = 36,\n color,\n}: {\n values: number[]\n width?: number\n height?: number\n color?: string\n}) {\n const theme = useTheme()\n const clean = (values ?? []).filter((v) => Number.isFinite(v))\n if (clean.length < 2) return null\n const stroke = color ?? tone(theme, 'color11', 'currentColor')\n const max = Math.max(...clean)\n const min = Math.min(...clean)\n const span = max - min || 1\n const n = clean.length\n const px = (i: number) => (i / (n - 1)) * (width - 2) + 1\n const py = (v: number) => height - 2 - ((v - min) / span) * (height - 4)\n const line = clean.map((v, i) => `${i === 0 ? 'M' : 'L'}${px(i).toFixed(1)},${py(v).toFixed(1)}`).join(' ')\n const area = `${line} L${(width - 1).toFixed(1)},${height} L1,${height} Z`\n return (\n <svg width={width} height={height} aria-hidden style={{ display: 'block' }}>\n <path d={area} fill={stroke} fillOpacity={0.12} />\n <path d={line} fill=\"none\" stroke={stroke} strokeWidth={1.5} strokeLinejoin=\"round\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\n// ── Shared hover read-out (LineChart / BarChart) ─────────────────────────────\n\nfunction Tooltip({ x, height, label, value }: { x: number; height: number; label: string; value: string }) {\n // Keep the box on-screen near the guide line.\n const left = Math.max(0, x - 60)\n return (\n <div\n style={{\n position: 'absolute',\n left,\n top: 0,\n height,\n pointerEvents: 'none',\n display: 'flex',\n alignItems: 'flex-start',\n }}\n >\n <div\n style={{\n background: 'rgba(15,17,21,0.94)',\n border: '1px solid rgba(148,163,184,0.25)',\n borderRadius: 8,\n padding: '6px 9px',\n fontSize: 11,\n lineHeight: 1.35,\n color: '#e2e8f0',\n whiteSpace: 'nowrap',\n boxShadow: '0 4px 16px rgba(0,0,0,0.4)',\n }}\n >\n <div style={{ color: AXIS }}>{label}</div>\n <div style={{ fontWeight: 700 }}>{value}</div>\n </div>\n </div>\n )\n}\n\nfunction nearestIndex(clientX: number, rect: DOMRect, padL: number, innerW: number, n: number): number {\n if (n <= 1) return 0\n const mx = clientX - rect.left - padL\n const i = Math.round((mx / (innerW || 1)) * (n - 1))\n return Math.max(0, Math.min(n - 1, i))\n}\n\n/** Pick a few evenly-spaced x labels (first/mid/last) to avoid crowding. */\nfunction axisTicks(data: ChartPoint[]): { i: number; label: string; anchor: 'start' | 'middle' | 'end' }[] {\n const n = data.length\n if (n === 0) return []\n if (n === 1) return [{ i: 0, label: data[0].label, anchor: 'middle' }]\n const mid = Math.floor((n - 1) / 2)\n const out: { i: number; label: string; anchor: 'start' | 'middle' | 'end' }[] = [\n { i: 0, label: data[0].label, anchor: 'start' },\n { i: n - 1, label: data[n - 1].label, anchor: 'end' },\n ]\n if (n >= 5) out.splice(1, 0, { i: mid, label: data[mid].label, anchor: 'middle' })\n return out\n}\n\n// ── Line chart (a value over time) ───────────────────────────────────────────\n\nexport function LineChart({\n data,\n height = 210,\n color = ACCENT,\n formatValue = (v) => String(v),\n}: {\n data: ChartPoint[]\n height?: number\n color?: string\n formatValue?: (v: number) => string\n}) {\n const { ref, w } = useContainerWidth()\n const [hover, setHover] = useState<number | null>(null)\n const padL = 10\n const padR = 10\n const padT = 12\n const padB = 24\n const n = data.length\n const innerW = Math.max(1, w - padL - padR)\n const innerH = Math.max(1, height - padT - padB)\n const max = Math.max(...data.map((d) => d.value), 1)\n const x = (i: number) => padL + (n <= 1 ? innerW / 2 : (i / (n - 1)) * innerW)\n const y = (v: number) => padT + innerH - (v / max) * innerH\n\n const line = data.map((d, i) => `${i === 0 ? 'M' : 'L'}${x(i).toFixed(1)},${y(d.value).toFixed(1)}`).join(' ')\n const area = n >= 2 ? `${line} L${x(n - 1).toFixed(1)},${(padT + innerH).toFixed(1)} L${x(0).toFixed(1)},${(padT + innerH).toFixed(1)} Z` : ''\n const ticks = axisTicks(data)\n\n return (\n <div ref={ref} style={{ position: 'relative', width: '100%' }}>\n {w > 0 ? (\n <svg\n width={w}\n height={height}\n style={{ display: 'block' }}\n onMouseMove={(e) => setHover(nearestIndex(e.clientX, e.currentTarget.getBoundingClientRect(), padL, innerW, n))}\n onMouseLeave={() => setHover(null)}\n >\n {[0, 0.5, 1].map((g) => (\n <line key={g} x1={padL} x2={w - padR} y1={padT + innerH * g} y2={padT + innerH * g} stroke={GRID} strokeWidth={1} />\n ))}\n {area ? <path d={area} fill={color} fillOpacity={0.1} /> : null}\n {n >= 2 ? <path d={line} fill=\"none\" stroke={color} strokeWidth={2} strokeLinejoin=\"round\" strokeLinecap=\"round\" /> : null}\n {hover != null && data[hover] ? (\n <>\n <line x1={x(hover)} x2={x(hover)} y1={padT} y2={padT + innerH} stroke={AXIS} strokeWidth={1} strokeDasharray=\"3 3\" />\n <circle cx={x(hover)} cy={y(data[hover].value)} r={4} fill={color} stroke=\"#0f1115\" strokeWidth={2} />\n </>\n ) : null}\n {ticks.map((t) => (\n <text key={t.i} x={x(t.i)} y={height - 7} fontSize={10} fill={AXIS} textAnchor={t.anchor}>\n {t.label}\n </text>\n ))}\n </svg>\n ) : null}\n {hover != null && data[hover] ? (\n <Tooltip x={x(hover)} height={height} label={data[hover].label} value={formatValue(data[hover].value)} />\n ) : null}\n </div>\n )\n}\n\n// ── Bar chart (a value over time, vertical bars) ─────────────────────────────\n\nexport function BarChart({\n data,\n height = 210,\n color = ACCENT,\n formatValue = (v) => String(v),\n}: {\n data: ChartPoint[]\n height?: number\n color?: string\n formatValue?: (v: number) => string\n}) {\n const { ref, w } = useContainerWidth()\n const [hover, setHover] = useState<number | null>(null)\n const padL = 10\n const padR = 10\n const padT = 12\n const padB = 24\n const n = data.length\n const innerW = Math.max(1, w - padL - padR)\n const innerH = Math.max(1, height - padT - padB)\n const max = Math.max(...data.map((d) => d.value), 1)\n const slot = innerW / Math.max(1, n)\n const barW = Math.max(1, Math.min(slot * 0.62, 36))\n const cx = (i: number) => padL + slot * i + slot / 2\n const ticks = axisTicks(data)\n\n return (\n <div ref={ref} style={{ position: 'relative', width: '100%' }}>\n {w > 0 ? (\n <svg\n width={w}\n height={height}\n style={{ display: 'block' }}\n onMouseMove={(e) => {\n const rect = e.currentTarget.getBoundingClientRect()\n const i = Math.floor((e.clientX - rect.left - padL) / (slot || 1))\n setHover(Math.max(0, Math.min(n - 1, i)))\n }}\n onMouseLeave={() => setHover(null)}\n >\n {[0, 0.5, 1].map((g) => (\n <line key={g} x1={padL} x2={w - padR} y1={padT + innerH * g} y2={padT + innerH * g} stroke={GRID} strokeWidth={1} />\n ))}\n {data.map((d, i) => {\n const h = (d.value / max) * innerH\n return (\n <rect\n key={i}\n x={cx(i) - barW / 2}\n y={padT + innerH - h}\n width={barW}\n height={Math.max(0, h)}\n rx={Math.min(3, barW / 2)}\n fill={color}\n fillOpacity={hover === i ? 1 : 0.78}\n />\n )\n })}\n {ticks.map((t) => (\n <text key={t.i} x={cx(t.i)} y={height - 7} fontSize={10} fill={AXIS} textAnchor=\"middle\">\n {t.label}\n </text>\n ))}\n </svg>\n ) : null}\n {hover != null && data[hover] ? (\n <Tooltip x={cx(hover)} height={height} label={data[hover].label} value={formatValue(data[hover].value)} />\n ) : null}\n </div>\n )\n}\n\n// ── Donut (categorical share) ────────────────────────────────────────────────\n\nexport function Donut({\n slices,\n size = 160,\n thickness = 22,\n center,\n legend = false,\n}: {\n slices: Slice[]\n size?: number\n thickness?: number\n /** Rendered, centered, inside the ring (a number, a label+sub, anything). */\n center?: ReactNode\n /**\n * Render a built-in label/percentage legend beside the ring. Off by default so\n * a consumer can compose a richer legend (amounts, click targets) itself.\n */\n legend?: boolean\n}) {\n const theme = useTheme()\n const fg = tone(theme, 'color12', 'currentColor')\n const positive = slices.filter((s) => s.value > 0)\n const total = positive.reduce((sum, s) => sum + s.value, 0)\n const r = size / 2\n const rInner = r - thickness\n const mid = (r + rInner) / 2\n\n if (total <= 0) {\n return (\n <XStack items=\"center\" justify=\"center\" height={size}>\n <Text fontSize=\"$6\" color=\"$color10\">\n —\n </Text>\n </XStack>\n )\n }\n\n const ring = (\n <div style={{ position: 'relative', width: size, height: size }}>\n <svg width={size} height={size} style={{ display: 'block' }}>\n {positive.length === 1 ? (\n <circle\n cx={r}\n cy={r}\n r={mid}\n fill=\"none\"\n stroke={positive[0].color ?? fg}\n strokeOpacity={positive[0].color ? 1 : 0.9}\n strokeWidth={thickness}\n />\n ) : (\n renderArcs(positive, total, r, rInner, fg)\n )}\n </svg>\n {center ? (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n pointerEvents: 'none',\n }}\n >\n {center}\n </div>\n ) : null}\n </div>\n )\n\n if (!legend) return ring\n\n return (\n <XStack gap=\"$4\" items=\"center\" flexWrap=\"wrap\">\n {ring}\n <YStack gap=\"$1.5\" flex={1} minW={150}>\n {positive.map((s, i) => (\n <XStack key={s.label} gap=\"$2\" items=\"center\">\n <div\n style={{\n width: 10,\n height: 10,\n borderRadius: 2,\n backgroundColor: s.color ?? AXIS,\n opacity: s.color ? 1 : rampOpacity(i, positive.length),\n }}\n />\n <Text fontSize=\"$2\" color=\"$color11\" flex={1} numberOfLines={1}>\n {s.label}\n </Text>\n <Text fontSize=\"$2\" color=\"$color12\" fontWeight=\"600\">\n {Math.round((s.value / total) * 100)}%\n </Text>\n </XStack>\n ))}\n </YStack>\n </XStack>\n )\n}\n\nfunction renderArcs(slices: Slice[], total: number, rOuter: number, rInner: number, fg: string): ReactNode {\n let a0 = -Math.PI / 2\n const paths: ReactNode[] = []\n slices.forEach((s, idx) => {\n const frac = Math.max(0, s.value) / total\n if (frac <= 0) return\n const a1 = a0 + frac * Math.PI * 2\n paths.push(\n <path\n key={s.label || idx}\n d={annularArc(rOuter, rOuter, rOuter, rInner, a0, Math.min(a1, a0 + Math.PI * 1.9999))}\n fill={s.color ?? fg}\n fillOpacity={s.color ? 1 : rampOpacity(idx, slices.length)}\n />,\n )\n a0 = a1\n })\n return <>{paths}</>\n}\n\nfunction polar(cx: number, cy: number, rad: number, a: number): [number, number] {\n return [cx + rad * Math.cos(a), cy + rad * Math.sin(a)]\n}\n\nfunction annularArc(cx: number, cy: number, rOuter: number, rInner: number, a0: number, a1: number): string {\n const large = a1 - a0 > Math.PI ? 1 : 0\n const [x0, y0] = polar(cx, cy, rOuter, a0)\n const [x1, y1] = polar(cx, cy, rOuter, a1)\n const [x2, y2] = polar(cx, cy, rInner, a1)\n const [x3, y3] = polar(cx, cy, rInner, a0)\n return `M${x0},${y0} A${rOuter},${rOuter} 0 ${large} 1 ${x1},${y1} L${x2},${y2} A${rInner},${rInner} 0 ${large} 0 ${x3},${y3} Z`\n}\n\n// ── Bar rows (a ranked distribution, horizontal, token-native) ───────────────\n\nexport function BarRows({ bars }: { bars: Slice[] }) {\n const max = Math.max(0, ...bars.map((b) => b.value))\n if (max <= 0) {\n return (\n <Text fontSize=\"$3\" color=\"$color10\">\n —\n </Text>\n )\n }\n return (\n <YStack gap=\"$2.5\">\n {bars.map((b) => (\n <XStack key={b.label} gap=\"$3\" items=\"center\">\n <Text width={64} fontSize=\"$2\" color=\"$color11\" text=\"right\">\n {b.label}\n </Text>\n <YStack flex={1} height={10} bg=\"$color3\" rounded=\"$2\" overflow=\"hidden\">\n <YStack height={10} width={`${Math.max(2, (b.value / max) * 100)}%`} bg=\"$color9\" rounded=\"$2\" />\n </YStack>\n <Text width={56} fontSize=\"$2\" color=\"$color12\" fontWeight=\"600\">\n {b.value.toLocaleString()}\n </Text>\n </XStack>\n ))}\n </YStack>\n )\n}\n","'use client'\n\n/**\n * Console metric primitives — the ONE shared set of stat tiles, panels, legend\n * rows, util bars, and \"real action or honest-disabled\" buttons that every\n * resource console (GPUs, Kubernetes, Containers, Training, Tasks) renders.\n *\n * These were first written for the GPU surface; promoted here so a sibling\n * product never reaches into `gpus/` for shell chrome (separation of concerns).\n * `gpus/charts.tsx` now re-exports them, so there is exactly one definition.\n *\n * Honest by construction: a `MetricCard` shows the pre-formatted `value` the\n * caller passes (an absent metric is an em-dash, never a fabricated number); a\n * `Sparkline`/`MiniBars` with no real series renders nothing; a `HintButton`\n * with no `onPress` is visibly disabled with a tooltip saying WHY. Inline SVG is\n * the house pattern (see ui/Loader, ui/HanzoMark); style props use the v5\n * shorthand set.\n */\nimport type { ReactElement, ReactNode } from 'react'\nimport { Button, Card, Text, XStack, YStack } from '@hanzo/gui'\n\n/** Distinct, theme-neutral series colors (mid-saturation reads on dark + light). */\nexport const SERIES = ['#6ea8fe', '#7ee787', '#f0a868', '#c792ea', '#56d4c4', '#e879a6', '#d6c15a', '#8b9bb4'] as const\nexport const colorForIndex = (i: number): string => SERIES[i % SERIES.length]\nconst TRACK = 'rgba(128,128,128,0.18)'\n\n/** Tone for a utilization/temperature value (green calm → red hot). */\nexport function utilColor(pct: number): string {\n if (pct >= 90) return '#e5534b'\n if (pct >= 70) return '#f0a868'\n return '#7ee787'\n}\n\n/**\n * A single-series sparkline over real points. Renders nothing meaningful for <2\n * points (the caller shows `—` instead). The y-range is the data's own min/max.\n */\nexport function Sparkline({\n points,\n width = 104,\n height = 30,\n color = SERIES[0],\n}: {\n points: number[]\n width?: number\n height?: number\n color?: string\n}): ReactElement | null {\n if (!points || points.length < 2) return null\n const min = Math.min(...points)\n const max = Math.max(...points)\n const span = max - min || 1\n const stepX = width / (points.length - 1)\n const y = (v: number) => height - 2 - ((v - min) / span) * (height - 4)\n const d = points.map((p, i) => `${i === 0 ? 'M' : 'L'}${(i * stepX).toFixed(1)},${y(p).toFixed(1)}`).join(' ')\n return (\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`} role=\"img\" aria-label=\"trend\">\n <path d={d} fill=\"none\" stroke={color} strokeWidth={1.5} strokeLinejoin=\"round\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\n/** A small vertical-bar chart (e.g. cost per day). One bar per real datum. */\nexport function MiniBars({\n bars,\n width = 320,\n height = 96,\n color = SERIES[0],\n}: {\n bars: { label: string; value: number }[]\n width?: number\n height?: number\n color?: string\n}): ReactElement | null {\n if (!bars.length) return null\n const max = Math.max(...bars.map((b) => b.value), 1)\n const gap = 4\n const bw = (width - gap * (bars.length - 1)) / bars.length\n return (\n <svg width=\"100%\" height={height} viewBox={`0 0 ${width} ${height}`} preserveAspectRatio=\"none\" role=\"img\" aria-label=\"bars\">\n {bars.map((b, i) => {\n const h = Math.max(1, (b.value / max) * (height - 2))\n return (\n <rect key={b.label + i} x={i * (bw + gap)} y={height - h} width={bw} height={h} rx={2} fill={color} opacity={0.85}>\n <title>{`${b.label}: ${b.value}`}</title>\n </rect>\n )\n })}\n </svg>\n )\n}\n\n/**\n * A thin horizontal bar (0–100). By default the fill tones by value (green→red,\n * for utilization/temperature). Pass a fixed `color` for a neutral meter like\n * training PROGRESS, where a high value is good, not \"hot\".\n */\nexport function UtilBar({ value, width = 120, color }: { value: number; width?: number; color?: string }): ReactElement {\n const v = Math.max(0, Math.min(100, value))\n return (\n <svg width={width} height={8} viewBox={`0 0 ${width} 8`} role=\"img\" aria-label={`${Math.round(v)}%`}>\n <rect x={0} y={1} width={width} height={6} rx={3} fill={TRACK} />\n <rect x={0} y={1} width={(v / 100) * width} height={6} rx={3} fill={color ?? utilColor(v)} />\n </svg>\n )\n}\n\n/** A legend row: color swatch + label + value. */\nexport function LegendDot({ color, label, value }: { color: string; label: string; value?: ReactNode }) {\n return (\n <XStack items=\"center\" gap=\"$2\" justify=\"space-between\">\n <XStack items=\"center\" gap=\"$2\">\n <YStack width={10} height={10} rounded=\"$1\" bg={color as never} />\n <Text fontSize=\"$2\" color=\"$color11\">\n {label}\n </Text>\n </XStack>\n {value != null ? (\n <Text fontSize=\"$2\" color=\"$color12\" fontWeight=\"500\" className=\"hz-mono\">\n {value}\n </Text>\n ) : null}\n </XStack>\n )\n}\n\n/**\n * One overview metric tile. `value` is pre-formatted by the caller (so an absent\n * metric is an honest `—`, never a fabricated number). The sparkline only appears\n * when the caller has a REAL series; the delta only when a real comparison exists.\n */\nexport function MetricCard({\n icon,\n label,\n value,\n caption,\n spark,\n sparkColor,\n delta,\n}: {\n icon: ReactElement\n label: string\n value: string\n caption?: string\n spark?: number[]\n sparkColor?: string\n delta?: { pct: number }\n}) {\n const up = delta ? delta.pct >= 0 : false\n return (\n <Card p=\"$3.5\" gap=\"$2\" borderWidth={1} borderColor=\"$borderColor\" flex={1} minW={172}>\n <XStack items=\"center\" gap=\"$2\" justify=\"space-between\">\n <XStack items=\"center\" gap=\"$2\">\n {icon}\n <Text fontSize=\"$2\" color=\"$color11\" fontWeight=\"500\">\n {label}\n </Text>\n </XStack>\n {delta ? (\n <Text fontSize=\"$1\" color={up ? '#7ee787' : '#e5534b'}>\n {up ? '▲' : '▼'} {Math.abs(delta.pct)}%\n </Text>\n ) : null}\n </XStack>\n <XStack items=\"flex-end\" justify=\"space-between\" gap=\"$2\">\n <Text fontSize=\"$8\" fontWeight=\"500\" color=\"$color12\" numberOfLines={1} className=\"hz-mono\">\n {value}\n </Text>\n {spark && spark.length >= 2 ? <Sparkline points={spark} color={sparkColor ?? SERIES[0]} /> : null}\n </XStack>\n {caption ? (\n <Text fontSize=\"$1\" color=\"$color10\" numberOfLines={1}>\n {caption}\n </Text>\n ) : null}\n </Card>\n )\n}\n\n/**\n * A button that is either a real action (onPress) or HONESTLY disabled with a\n * native tooltip explaining why (the action has no backend yet). One way to\n * render the \"real route or honest-disabled\" affordance the consoles use.\n */\nexport function HintButton({\n icon,\n iconAfter,\n children,\n onPress,\n disabled,\n hint,\n theme,\n}: {\n icon?: ReactElement\n iconAfter?: ReactElement\n children: ReactNode\n onPress?: () => void\n disabled?: boolean\n /** Native tooltip text (shown on hover) — say WHY it is disabled. */\n hint?: string\n theme?: 'light'\n}) {\n const btn = (\n <Button\n size=\"$2\"\n theme={theme}\n icon={icon}\n iconAfter={iconAfter}\n disabled={disabled}\n onPress={disabled ? undefined : onPress}\n >\n {children}\n </Button>\n )\n if (!hint) return btn\n return (\n <span title={hint} style={{ display: 'inline-flex' }}>\n {btn}\n </span>\n )\n}\n\n/**\n * A titled panel wrapper used across the consoles (chart + list cards). `grow`\n * (default true) sets `flex={1}` so panels SHARE width in a ROW; pass `grow={false}`\n * inside a vertical rail (a column YStack) so each panel sizes to its content and\n * stacks — flex-grow in a column with no fixed height collapses them onto each other.\n */\nexport function Panel({\n title,\n right,\n children,\n minW = 280,\n grow = true,\n}: {\n title: string\n right?: ReactNode\n children: ReactNode\n minW?: number\n grow?: boolean\n}) {\n return (\n <Card p=\"$4\" gap=\"$3\" borderWidth={1} borderColor=\"$borderColor\" flex={grow ? 1 : undefined} minW={minW} width={grow ? undefined : '100%'}>\n <XStack items=\"center\" justify=\"space-between\" gap=\"$2\">\n <Text fontSize=\"$4\" fontWeight=\"500\" color=\"$color12\">\n {title}\n </Text>\n {right}\n </XStack>\n {children}\n </Card>\n )\n}\n","'use client'\n\n/**\n * Donut — a tiny dependency-free SVG ring for a categorical breakdown\n * (e.g. machines by status). Standard library first: no chart dependency for a\n * single ring. It renders ONLY the real segments it is given and returns `null`\n * when the total is zero, so the caller shows an honest empty state instead of an\n * empty circle. Purely presentational — all values come from the caller.\n */\nexport type DonutSegment = { label: string; value: number; color: string }\n\nexport function Donut({\n segments,\n size = 160,\n thickness = 18,\n centerValue,\n centerLabel,\n trackColor = '#2a2d2e',\n valueColor = '#ecedee',\n labelColor = '#9ba1a6',\n}: {\n segments: DonutSegment[]\n size?: number\n thickness?: number\n /** Big number in the middle (e.g. total). */\n centerValue?: string\n /** Caption under the center value. */\n centerLabel?: string\n /** Unfilled-ring color (explicit hex so it never depends on theme var names). */\n trackColor?: string\n valueColor?: string\n labelColor?: string\n}) {\n const total = segments.reduce((n, s) => n + Math.max(0, s.value), 0)\n if (total <= 0) return null\n\n const r = (size - thickness) / 2\n const cx = size / 2\n const cy = size / 2\n const circ = 2 * Math.PI * r\n\n let offset = 0\n const arcs = segments\n .filter((s) => s.value > 0)\n .map((s) => {\n const frac = s.value / total\n const dash = frac * circ\n const node = (\n <circle\n key={s.label}\n cx={cx}\n cy={cy}\n r={r}\n fill=\"none\"\n stroke={s.color}\n strokeWidth={thickness}\n strokeDasharray={`${dash} ${circ - dash}`}\n strokeDashoffset={-offset}\n />\n )\n offset += dash\n return node\n })\n\n return (\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`} role=\"img\" aria-label=\"Donut chart\">\n {/* track */}\n <circle cx={cx} cy={cy} r={r} fill=\"none\" stroke={trackColor} strokeWidth={thickness} />\n {/* segments, drawn from 12 o'clock */}\n <g transform={`rotate(-90 ${cx} ${cy})`}>{arcs}</g>\n {centerValue ? (\n <text x={cx} y={cy - 2} textAnchor=\"middle\" fontSize={size * 0.2} fontWeight=\"800\" fill={valueColor}>\n {centerValue}\n </text>\n ) : null}\n {centerLabel ? (\n <text x={cx} y={cy + size * 0.13} textAnchor=\"middle\" fontSize={size * 0.08} fill={labelColor}>\n {centerLabel}\n </text>\n ) : null}\n </svg>\n )\n}\n","/**\n * Combobox option filtering — pure, unit-tested.\n *\n * The ONE matcher the ComboBox uses to narrow a live option list against typed\n * text. Matching is a LITERAL, case-insensitive substring over the option's\n * value + label + hint — NEVER a compiled RegExp of user input (that would be a\n * ReDoS / injection surface; the whole codebase filters with literal `includes`,\n * e.g. marketplace/logic + filterOrgs). Kept dependency-free so it lifts into\n * `@hanzo/ui` alongside the ComboBox.\n */\n\n/** One option in a combobox list. `value` is what gets committed; label/hint are display. */\nexport type ComboOption = {\n /** The value committed to the field when this option is chosen. */\n value: string\n /** Display label (defaults to `value`). */\n label?: string\n /** Optional secondary text (e.g. a provider, a description) — also searched. */\n hint?: string\n}\n\n/** The searchable haystack for one option (value + label + hint), lowercased. */\nconst hay = (o: ComboOption): string => `${o.value} ${o.label ?? ''} ${o.hint ?? ''}`.toLowerCase()\n\n/**\n * Filter `options` by `query` — a literal, case-insensitive substring over\n * value/label/hint. An empty/whitespace query returns every option (no filter).\n * PURE. The input is treated as a plain string, never a pattern.\n */\nexport function filterOptions(options: ComboOption[], query: string): ComboOption[] {\n const q = query.trim().toLowerCase()\n if (!q) return options\n return options.filter((o) => hay(o).includes(q))\n}\n\n/** True iff `value` exactly matches an option's `value` (case-sensitive). */\nexport function isKnownOption(options: ComboOption[], value: string): boolean {\n return options.some((o) => o.value === value)\n}\n","'use client'\n\n/**\n * The ONE menu-item spec — every menu across the fleet renders through these\n * presentational primitives, so DropdownMenu, ContextMenu, SelectMenu and ComboBox\n * are pixel-identical. Geometry is literal px on a strict 8-grid (never random);\n * colour is theme-adaptive tokens ($color2/$color11/$color12/$borderColor) so light\n * and dark both work, with the single purple accent supplied by the brand CSS vars.\n *\n * Style props use the @hanzo/gui config shorthands (bg/items/justify/px/py/p/mx/my/\n * minW/maxH/rounded/select/shrink) — the config omits the longhand aliases.\n *\n * Panel — bg $color2 (#111 dark), hairline border, radius 12, inner pad 4, subtle\n * border+ambient elevation.\n * Item — height 30 (28–32 band), px 8, gap 8, radius 7; icon in a fixed 16px slot\n * on the left; label 13px $color12; right affordance (shortcut / check /\n * chevron) right-aligned. States: hover/active/focus → accent-soft, focus\n * visible; selected → check + purple; disabled → muted, no hover.\n * Separator — 1px hairline, 4px vertical margin.\n * Label — 11px uppercase muted section header, px 8.\n */\nimport type { ReactNode, KeyboardEvent } from 'react'\nimport { Text, XStack, YStack } from '@hanzo/gui'\nimport { Check, ChevronRight } from '@hanzogui/lucide-icons-2'\n\n// ── Geometry — literal px, 8-grid ──────────────────────────────────────────────\nconst ITEM_MIN_HEIGHT = 30\nconst ITEM_RADIUS = 7\nconst ITEM_PX = 8\nconst ITEM_GAP = 8\nconst ICON_SLOT = 16\nexport const PANEL_RADIUS = 12\nexport const PANEL_PAD = 4\nconst PANEL_GAP = 2\nconst SEP_MARGIN = 4\nconst FONT_LABEL = 13\nconst FONT_MUTED = 11\nconst FONT_SHORTCUT = 12\n\n// ── Colour — brand purple accent via CSS vars (fallbacks keep it correct even when\n// @hanzo/brand is not loaded, e.g. a bare Vite/Tauri host); everything else uses\n// theme-adaptive Tamagui tokens. ──────────────────────────────────────────────\nconst ACCENT = 'var(--hanzo-accent, #8b5cf6)'\nconst ACCENT_SOFT = 'var(--hanzo-accent-soft, rgba(139,92,246,0.16))'\nconst DANGER = 'var(--hanzo-danger, #ef4444)'\n\n// ── Declarative item model ──────────────────────────────────────────────────────\nexport type MenuItemSpec =\n | {\n type?: 'item'\n /** Stable key. */\n key: string\n label: string\n /** Leading Lucide icon (16px, unfilled) in the fixed left slot. */\n icon?: ReactNode\n /** Second muted line under the label (e.g. an id or hint). */\n description?: string\n /** Right-aligned shortcut / hint text (e.g. \"⌘K\"). */\n shortcut?: string\n /** Renders a right check + purple tint. */\n selected?: boolean\n disabled?: boolean\n /** Danger styling (red label/icon). */\n destructive?: boolean\n /** Renders a right chevron (submenu / drill-in affordance). */\n hasSubmenu?: boolean\n onSelect: () => void\n /** Keep the menu open after selecting (default: close). */\n closeOnSelect?: boolean\n }\n | { type: 'separator'; key?: string }\n | { type: 'label'; key?: string; label: string }\n\n// ── Surface ───────────────────────────────────────────────────────────────────\nexport function MenuPanel({\n children,\n minWidth = 200,\n maxHeight = 360,\n onKeyDown,\n panelRef,\n ...rest\n}: {\n children: ReactNode\n minWidth?: number\n maxHeight?: number\n onKeyDown?: (e: KeyboardEvent) => void\n /** Web DOM node of the panel (for measuring / edge-flip). */\n panelRef?: (node: HTMLElement | null) => void\n [key: string]: unknown\n}) {\n return (\n <YStack\n // Web DOM ref; Gui forwards it to the underlying node. Cast (not @ts-expect-error)\n // so it is env-agnostic — the ref type is strict under the pkg build, loose here.\n ref={panelRef as never}\n role=\"menu\"\n bg=\"$color2\"\n borderColor=\"$borderColor\"\n borderWidth={1}\n rounded={PANEL_RADIUS}\n p={PANEL_PAD}\n gap={PANEL_GAP}\n minW={minWidth}\n maxH={maxHeight}\n overflow=\"scroll\"\n // Subtle border + ambient elevation, minimal shadow.\n shadowColor=\"rgba(0,0,0,0.45)\"\n shadowRadius={20}\n shadowOffset={{ width: 0, height: 10 }}\n onKeyDown={onKeyDown as never}\n {...rest}\n >\n {children}\n </YStack>\n )\n}\n\n// ── Item — the ONE row ──────────────────────────────────────────────────────────\nimport { labelOf, useEmit } from '../instrument'\n\nexport function MenuItemView({\n icon,\n label,\n description,\n shortcut,\n selected = false,\n disabled = false,\n destructive = false,\n hasSubmenu = false,\n onSelect,\n}: Omit<Extract<MenuItemSpec, { type?: 'item' }>, 'key' | 'type' | 'closeOnSelect'>) {\n const track = useEmit()\n const choose = () => {\n track({ component: 'MenuItem', action: 'select', id: labelOf(label), value: selected })\n onSelect()\n }\n const press = () => {\n if (!disabled) choose()\n }\n const onKeyDown = (e: KeyboardEvent) => {\n if (disabled) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n choose()\n }\n }\n const labelColor = destructive ? DANGER : '$color12'\n return (\n <XStack\n role=\"menuitem\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled || undefined}\n items=\"center\"\n gap={ITEM_GAP}\n px={ITEM_PX}\n minH={ITEM_MIN_HEIGHT}\n rounded={ITEM_RADIUS}\n cursor={disabled ? 'default' : 'pointer'}\n opacity={disabled ? 0.4 : 1}\n select=\"none\"\n style={{ outline: 'none' }}\n hoverStyle={disabled ? {} : { bg: ACCENT_SOFT as never }}\n pressStyle={disabled ? {} : { bg: ACCENT_SOFT as never }}\n focusStyle={disabled ? {} : { bg: ACCENT_SOFT as never }}\n onPress={press}\n onKeyDown={onKeyDown as never}\n >\n <XStack width={ICON_SLOT} height={ICON_SLOT} items=\"center\" justify=\"center\" shrink={0}>\n {icon ? (\n <XStack items=\"center\" justify=\"center\" opacity={destructive ? 1 : 0.9} style={destructive ? { color: DANGER } : undefined}>\n {icon}\n </XStack>\n ) : null}\n </XStack>\n\n <YStack flex={1} minW={0}>\n <Text fontSize={FONT_LABEL} lineHeight={18} color={labelColor as never} numberOfLines={1}>\n {label}\n </Text>\n {description ? (\n <Text fontSize={FONT_MUTED} lineHeight={14} color=\"$color11\" numberOfLines={1}>\n {description}\n </Text>\n ) : null}\n </YStack>\n\n {shortcut ? (\n <Text fontSize={FONT_SHORTCUT} color=\"$color11\" shrink={0}>\n {shortcut}\n </Text>\n ) : null}\n {selected ? <Check size={14} color={ACCENT} /> : null}\n {hasSubmenu ? <ChevronRight size={14} color=\"var(--hanzo-muted, currentColor)\" opacity={0.6} /> : null}\n </XStack>\n )\n}\n\n// ── Separator ───────────────────────────────────────────────────────────────────\nexport function MenuSeparatorView() {\n return <YStack height={1} bg=\"$borderColor\" my={SEP_MARGIN} mx={SEP_MARGIN} role=\"separator\" />\n}\n\n// ── Section label ────────────────────────────────────────────────────────────────\nexport function MenuLabelView({ children }: { children: ReactNode }) {\n return (\n <Text\n fontSize={FONT_MUTED}\n color=\"$color11\"\n px={ITEM_PX}\n py={SEP_MARGIN}\n textTransform=\"uppercase\"\n letterSpacing={0.4}\n select=\"none\"\n >\n {children}\n </Text>\n )\n}\n\n// ── The single render path shared by every menu ──────────────────────────────────\nexport function renderMenuItems(items: MenuItemSpec[], close?: () => void): ReactNode {\n return items.map((it, i) => {\n if (it.type === 'separator') return <MenuSeparatorView key={it.key ?? `sep-${i}`} />\n if (it.type === 'label') return <MenuLabelView key={it.key ?? `lbl-${i}`}>{it.label}</MenuLabelView>\n const { key, onSelect, closeOnSelect = true, ...rest } = it\n return (\n <MenuItemView\n key={key}\n {...rest}\n onSelect={() => {\n onSelect()\n if (closeOnSelect) close?.()\n }}\n />\n )\n })\n}\n","'use client'\n\n/**\n * PortalTheme — the ONE fix for \"themed content escapes its theme through a portal\".\n *\n * @hanzo/gui's `Popover.Content` and `Portal` render their children in a SEPARATE\n * React subtree (a Gorhom-style portal host mounted at the app root), NOT via\n * `ReactDOM.createPortal`. React context therefore does NOT flow from the trigger's\n * location to the host. Under a nested `<Theme name=\"dark\">` the portaled content\n * lands OUTSIDE that theme context and Tamagui throws \"Missing theme\" (or renders\n * unthemed).\n *\n * The fix is two-part and must stay two-part:\n * 1. At the TRIGGER site (theme context still available) capture the resolved\n * theme name with `useThemeName()`.\n * 2. INSIDE the portaled content re-apply it: `<PortalTheme name={captured}>`.\n *\n * Every portal-backed menu in this package (DropdownMenu, ContextMenu, SelectMenu,\n * ComboBox) uses this so a menu renders identically whether it is opened under the\n * root theme or under any nested `<Theme>`, light or dark.\n */\nimport type { ReactNode } from 'react'\nimport { Theme, useThemeName } from '@hanzo/gui'\n\n/** Capture the current resolved theme name at the trigger site. Re-exported so the\n * capture + re-apply pair reads from one module. */\nexport { useThemeName }\n\nexport function PortalTheme({ name, children }: { name: string; children: ReactNode }) {\n // `name` is the resolved theme name (e.g. \"dark\", or a compound \"dark_purple\").\n // Tamagui's `Theme` accepts the resolved name and reconstructs the context.\n return <Theme name={name as never}>{children}</Theme>\n}\n","'use client'\n\n/**\n * Roving keyboard focus for a menu panel — ArrowUp/Down move focus between enabled\n * `[role=\"menuitem\"]` children, Home/End jump to ends, Escape closes. Web/desktop\n * only (guards on `document`); native menus have no pointer-keyboard nav. Shared by\n * DropdownMenu and ContextMenu so navigation is identical.\n */\nimport type { KeyboardEvent } from 'react'\n\nexport function menuKeyDown(e: KeyboardEvent, onClose?: () => void): void {\n if (e.key === 'Escape') {\n onClose?.()\n return\n }\n if (e.key !== 'ArrowDown' && e.key !== 'ArrowUp' && e.key !== 'Home' && e.key !== 'End') return\n if (typeof document === 'undefined') return\n\n const panel = e.currentTarget as HTMLElement\n const items = Array.from(\n panel.querySelectorAll<HTMLElement>('[role=\"menuitem\"]:not([aria-disabled=\"true\"])'),\n )\n if (items.length === 0) return\n e.preventDefault()\n\n const active = document.activeElement as HTMLElement | null\n const current = active ? items.indexOf(active) : -1\n let next: number\n if (e.key === 'Home') next = 0\n else if (e.key === 'End') next = items.length - 1\n else if (e.key === 'ArrowDown') next = current < 0 ? 0 : (current + 1) % items.length\n else next = current <= 0 ? items.length - 1 : current - 1\n items[next]?.focus()\n}\n","'use client'\n\n/**\n * FloatingMenu — the ONE floating-panel mechanism for every menu. Renders the shared\n * MenuPanel through the @hanzo/gui Portal, positioned at an anchor (a trigger rect or a\n * cursor point), theme-forwarded via PortalTheme, edge-flipped, dismiss-wired and\n * keyboard-navigable.\n *\n * Why Portal, not gui Popover: gui's Popover pulls in a SheetController that re-roots the\n * trigger subtree and reads the theme from React context — on gui-native hosts\n * (react-native-web-lite, theme in context, no CSS-class fallback) that throws\n * \"Missing theme\" AT MOUNT. The raw Portal does not re-root, so DropdownMenu, ContextMenu,\n * SelectMenu and ComboBox all ride this ONE working path.\n */\nimport type { ReactNode, KeyboardEvent as ReactKeyboardEvent } from 'react'\nimport { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'\nimport { Portal } from '@hanzo/gui'\nimport { MenuPanel } from './items'\nimport { PortalTheme, useThemeName } from './portal-theme'\nimport { menuKeyDown } from './roving'\n\nconst EDGE = 8\n\nexport type RectLike = { left: number; top: number; right: number; bottom: number; width: number; height: number }\n\nexport function FloatingMenu({\n open,\n onClose,\n anchorRect,\n anchorEl,\n gap = 4,\n minWidth = 200,\n maxHeight,\n autoFocus = true,\n children,\n}: {\n open: boolean\n onClose: () => void\n /** Anchor in viewport coords — a trigger's rect, or a zero-size rect at a cursor point. */\n anchorRect: () => RectLike | null | undefined\n /** Element excluded from outside-dismiss (the trigger / input row). */\n anchorEl?: () => HTMLElement | null | undefined\n /** Space between the anchor's bottom and the panel (0 for a cursor menu). */\n gap?: number\n minWidth?: number\n maxHeight?: number\n /** Focus the panel on open (for roving keys). ComboBox keeps focus in its input. */\n autoFocus?: boolean\n children: ReactNode\n}) {\n const themeName = useThemeName()\n const panelRef = useRef<HTMLElement | null>(null)\n const [pos, setPos] = useState<{ left: number; top: number } | null>(null)\n\n const setPanel = useCallback((n: HTMLElement | null) => {\n panelRef.current = n\n }, [])\n\n const place = useCallback(() => {\n if (typeof window === 'undefined') return\n const a = anchorRect()\n if (!a) return\n const node = panelRef.current\n const w = node?.offsetWidth || minWidth\n const h = node?.offsetHeight || 0\n let left = a.left\n let top = a.bottom + gap\n if (left + w > window.innerWidth - EDGE) left = Math.max(EDGE, window.innerWidth - w - EDGE)\n if (h && top + h > window.innerHeight - EDGE) {\n const above = a.top - gap - h\n top = above >= EDGE ? above : Math.max(EDGE, window.innerHeight - h - EDGE)\n }\n setPos({ left, top })\n }, [anchorRect, gap, minWidth])\n\n // Measure + position before paint; focus the panel for keyboard nav.\n useLayoutEffect(() => {\n if (!open) {\n setPos(null)\n return\n }\n place()\n if (autoFocus) panelRef.current?.focus?.()\n }, [open, place, autoFocus])\n\n // Dismiss on outside pointer (excluding the anchor), Escape, scroll, resize, blur.\n useEffect(() => {\n if (!open || typeof document === 'undefined') return\n const onPointerDown = (e: PointerEvent) => {\n const t = e.target as Node\n if (panelRef.current?.contains(t)) return\n const anchor = anchorEl?.()\n if (anchor && anchor.contains(t)) return\n onClose()\n }\n const onKey = (e: globalThis.KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n }\n document.addEventListener('pointerdown', onPointerDown, true)\n document.addEventListener('keydown', onKey, true)\n window.addEventListener('scroll', onClose, true)\n window.addEventListener('resize', onClose)\n window.addEventListener('blur', onClose)\n return () => {\n document.removeEventListener('pointerdown', onPointerDown, true)\n document.removeEventListener('keydown', onKey, true)\n window.removeEventListener('scroll', onClose, true)\n window.removeEventListener('resize', onClose)\n window.removeEventListener('blur', onClose)\n }\n }, [open, onClose, anchorEl])\n\n if (!open) return null\n return (\n <Portal>\n <PortalTheme name={themeName}>\n <MenuPanel\n panelRef={setPanel}\n minWidth={minWidth}\n maxHeight={maxHeight}\n tabIndex={-1}\n onKeyDown={(e: ReactKeyboardEvent) => menuKeyDown(e, onClose)}\n style={{\n position: 'fixed',\n left: pos?.left ?? 0,\n top: pos?.top ?? 0,\n zIndex: 100000,\n visibility: pos ? 'visible' : 'hidden',\n }}\n >\n {children}\n </MenuPanel>\n </PortalTheme>\n </Portal>\n )\n}\n","'use client'\n\n/**\n * ComboBox — a typeable select: a text input the user can type any value into, PLUS a\n * menu of LIVE options (filtered by what's typed) they can pick from. The value is\n * always exactly the input text, so a custom id is inherently supported. Prop-driven +\n * self-contained (options/loading/error injected by the caller).\n *\n * Uses the ONE shared menu spec (MenuItemView) + FloatingMenu (gui Portal) so options look\n * identical to every other menu and render correctly through the portal under a nested\n * `<Theme>` on gui-native hosts. The input row is the anchor (excluded from dismiss) and\n * the panel does NOT steal focus, so typing keeps filtering.\n */\nimport { useCallback, useMemo, useRef, useState } from 'react'\nimport { Button, Input, Spinner, Text, XStack } from '@hanzo/gui'\nimport { ChevronDown, RefreshCw } from '@hanzogui/lucide-icons-2'\n\nimport { useEmit } from './instrument'\nimport { filterOptions, type ComboOption } from './combobox/filter'\nimport { MenuItemView } from './menu/items'\nimport { FloatingMenu } from './menu/FloatingMenu'\n\nexport type { ComboOption } from './combobox/filter'\n\nexport function ComboBox({\n value,\n onChange,\n options,\n loading = false,\n error = null,\n onRetry,\n placeholder,\n disabled,\n emptyText = 'No matches — press to use what you typed.',\n minWidth = 240,\n}: {\n value: string\n onChange: (v: string) => void\n /** The live option list. Filtered against the typed text. */\n options: ComboOption[]\n /** True while the caller is loading the option list (shows a spinner row). */\n loading?: boolean\n /** A human message when the option list failed to load (list still typeable). */\n error?: string | null\n /** Retry the option load (shown next to the error). */\n onRetry?: () => void\n placeholder?: string\n disabled?: boolean\n /** Row shown when the filter matches nothing (the typed value is still usable). */\n emptyText?: string\n minWidth?: number\n}) {\n const [open, setOpen] = useState(false)\n const rowRef = useRef<HTMLElement | null>(null)\n const anchorRect = useCallback(() => rowRef.current?.getBoundingClientRect() ?? null, [])\n const anchorEl = useCallback(() => rowRef.current, [])\n const filtered = useMemo(() => filterOptions(options, value), [options, value])\n\n const track = useEmit()\n\n const pick = (v: string) => {\n track({ component: 'ComboBox', action: 'select', id: v, value: filtered.length })\n onChange(v)\n setOpen(false)\n }\n\n return (\n <>\n <XStack ref={rowRef as never} items=\"center\" gap=\"$2\" minW={minWidth}>\n <Input\n flex={1}\n value={value}\n onChangeText={(v: string) => {\n onChange(v)\n if (!open) setOpen(true)\n }}\n onFocus={() => setOpen(true)}\n disabled={disabled}\n placeholder={placeholder}\n autoCapitalize=\"none\"\n />\n <Button\n size=\"$2\"\n chromeless\n disabled={disabled}\n icon={<ChevronDown size={16} opacity={0.7} />}\n onPress={() => {\n track({ component: 'ComboBox', action: open ? 'close' : 'open' })\n setOpen((o) => !o)\n }}\n aria-label=\"Show options\"\n />\n </XStack>\n\n <FloatingMenu\n open={open}\n onClose={() => setOpen(false)}\n anchorRect={anchorRect}\n anchorEl={anchorEl}\n autoFocus={false}\n minWidth={minWidth}\n maxHeight={300}\n >\n {loading ? (\n <XStack items=\"center\" gap=\"$2\" px=\"$2\" py=\"$2\">\n <Spinner size=\"small\" color=\"$color11\" />\n <Text fontSize=\"$2\" color=\"$color10\">\n Loading options…\n </Text>\n </XStack>\n ) : error ? (\n <XStack items=\"center\" gap=\"$2\" px=\"$2\" py=\"$2\">\n <Text fontSize=\"$2\" color=\"$color10\" flex={1} numberOfLines={2}>\n {error}\n </Text>\n {onRetry ? (\n <Button size=\"$1\" chromeless icon={<RefreshCw size={12} />} onPress={onRetry} aria-label=\"Retry\" />\n ) : null}\n </XStack>\n ) : filtered.length === 0 ? (\n <Text fontSize=\"$2\" color=\"$color10\" px=\"$2\" py=\"$2\">\n {emptyText}\n </Text>\n ) : (\n filtered.map((o) => (\n <MenuItemView\n key={o.value}\n label={o.label ?? o.value}\n description={o.hint}\n selected={o.value === value}\n onSelect={() => pick(o.value)}\n />\n ))\n )}\n </FloatingMenu>\n </>\n )\n}\n","// Re-export shim. The launcher surface DATA now lives ONCE in `@hanzo/products`\n// (`SURFACES` — the collapse of this list and `@hanzogui/shell`'s `HANZO_APPS`).\n// This file preserves the legacy `Surface` / `SurfaceId` / `SURFACES` /\n// `otherSurfaces` shape byte-for-byte, so existing importers (the `AppHeader`\n// app-switcher) need no change; it only sources the values from the canonical\n// registry. Add or reorder a surface in `@hanzo/products`, not here.\n//\n// `id` is the stable key AND the icon key: `AppHeader` maps each to a lucide glyph,\n// so the DATA stays glyph-free.\nimport { surfaceById } from '@hanzo/products'\n\n/** The seven surfaces this shell's app switcher offers. */\nexport type SurfaceId = 'ai' | 'console' | 'app' | 'chat' | 'bot' | 'team' | 'billing'\n\n/** One Hanzo surface the app switcher offers. */\nexport type Surface = {\n /** Stable id; also the per-surface icon key. */\n id: SurfaceId\n /** Menu label. */\n label: string\n /** Absolute product URL (opened in a new tab). */\n href: string\n /** The domain, shown as the tile subtitle. */\n hint: string\n}\n\n/** Display order for this shell (the canonical registry may hold more surfaces). */\nconst ORDER: SurfaceId[] = ['ai', 'console', 'app', 'chat', 'bot', 'team', 'billing']\n\n/** The seven Hanzo surfaces (`console` opens the cloud AI console). */\nexport const SURFACES: Surface[] = ORDER.map((id) => {\n const s = surfaceById(id)!\n return { id, label: s.label, href: s.href, hint: s.domain }\n})\n\n/** Every surface except `current` — a launcher never links to itself. */\nexport function otherSurfaces(current?: SurfaceId): Surface[] {\n return current ? SURFACES.filter((s) => s.id !== current) : SURFACES\n}\n","'use client'\n\n/**\n * The Hanzo \"H\" mark — the canonical 7-path shaded glyph: five body blocks +\n * two shade slivers (geometry canon: @hanzo/logo `MARK_PATHS`).\n *\n * Rendered as inline SVG with `fill: currentColor` (shade at reduced opacity),\n * so it inherits the surrounding text color and adapts to the dark/light theme\n * with no per-theme asset. ONE source for the mark across the chrome.\n */\nexport function HanzoMark({ size = 22, color = 'currentColor' }: { size?: number; color?: string }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 67 67\"\n role=\"img\"\n aria-label=\"Hanzo\"\n fill={color}\n style={{ display: 'block', flexShrink: 0 }}\n >\n <path d=\"M22.21 67V44.6369H0V67H22.21Z\" />\n <path opacity={0.55} d=\"M0 44.6369L22.21 46.8285V44.6369H0Z\" />\n <path d=\"M66.7038 22.3184H22.2534L0.0878906 44.6367H44.4634L66.7038 22.3184Z\" />\n <path d=\"M22.21 0H0V22.3184H22.21V0Z\" />\n <path d=\"M66.7198 0H44.5098V22.3184H66.7198V0Z\" />\n <path opacity={0.55} d=\"M66.6753 22.3185L44.5098 20.0822V22.3185H66.6753Z\" />\n <path d=\"M66.7198 67V44.6369H44.5098V67H66.7198Z\" />\n </svg>\n )\n}\n","'use client'\n\n/**\n * BrandMark — the canonical brand lockup for an app header, from @hanzo/logo\n * (the ONE home of the mark geometry + motion). Animated by default: intro\n * flip + idle breathing + a wordmark that slides in, holds, then collapses\n * (returns on hover). Pure CSS, reduced-motion-safe; the mark inherits\n * `currentColor` so it themes for free. White-label via `wordmark`.\n */\nimport { HanzoLogo } from '@hanzo/logo/react'\n\nimport { HanzoMark } from './HanzoMark'\n\nexport function BrandMark({\n size = 20,\n wordmark = 'Hanzo',\n animated = true,\n}: {\n size?: number\n /** Wordmark text (white-label): \"Hanzo\", \"Lux\", \"Zoo\", … */\n wordmark?: string\n /** false = the static mark alone (no motion shell, no wordmark). */\n animated?: boolean\n}) {\n if (!animated) return <HanzoMark size={size} />\n return <HanzoLogo animated size={size} wordmark={wordmark} />\n}\n","'use client'\n\n/**\n * AppHeader — the shared shell header every Hanzo surface renders: the brand\n * mark top-left (from @hanzo/logo, white-label via `wordmark`/`brand`), an\n * org/project slot (usually `<OrgSwitcher/>`), an app switcher listing the\n * Hanzo surfaces (modeled on the console's AppLauncher), and an identity menu\n * (Profile · Theme · Team settings · Billing · Sign out).\n *\n * Host-agnostic: every action is an injected handler; a row renders only when\n * its handler is provided (honest — no dead menu items). Mobile-first: fluid\n * flex + truncation, the wordmark collapse is the brand motion itself.\n */\nimport { useState, type ReactNode } from 'react'\nimport { Button, Popover, Separator, Text, XStack, YStack } from '@hanzo/gui'\nimport { AppWindow, Bot, CreditCard, Grip, LayoutGrid, LogOut, MessageCircle, Settings2, Sparkles, UserRound, Users } from '@hanzogui/lucide-icons-2'\n\nimport { BrandMark } from './BrandMark'\nimport { ThemeToggle } from './ThemeToggle'\nimport { otherSurfaces, type Surface, type SurfaceId } from './surfaces.data'\n\n/** The per-surface glyph — keyed by `Surface.id`, so each surface reads distinctly. */\nconst SURFACE_ICON = {\n ai: Sparkles,\n console: LayoutGrid,\n app: AppWindow,\n chat: MessageCircle,\n bot: Bot,\n team: Users,\n billing: CreditCard,\n} as const satisfies Record<SurfaceId, unknown>\n\nconst openHref = (href: string) => {\n if (typeof window !== 'undefined') window.open(href, '_blank', 'noopener')\n}\n\nfunction MenuRow({ icon, label, onPress }: { icon: ReactNode; label: string; onPress: () => void }) {\n return (\n <XStack onPress={onPress} cursor=\"pointer\" items=\"center\" gap=\"$2.5\" px=\"$2\" py=\"$2\" rounded=\"$3\" hoverStyle={{ bg: '$color5' }}>\n {icon}\n <Text fontSize=\"$2\" color=\"$color12\">\n {label}\n </Text>\n </XStack>\n )\n}\n\nexport type AppHeaderProps = {\n /** Brand slot — defaults to the animated `<BrandMark/>`. */\n brand?: ReactNode\n /** White-label wordmark for the default brand mark. */\n wordmark?: string\n /** Brand press (usually \"go home\"). */\n onBrand?: () => void\n /** Org/project slot — usually `<OrgSwitcher/>` (+ a project switcher). */\n org?: ReactNode\n /** Free slot between the org slot and the right cluster. */\n children?: ReactNode\n /** The surface this header renders on — omitted from the switcher (no self-link). */\n current?: SurfaceId\n /** App-switcher surfaces; defaults to every surface but `current`. [] hides it. */\n surfaces?: Surface[]\n /** Open a surface — default `window.open` (new tab). */\n open?: (surface: Surface) => void\n /** Identity-menu trigger label (the signed-in user's name/email). */\n user?: string\n /** Replace the whole identity menu content. */\n menu?: ReactNode\n /** Theme row content — default `<ThemeToggle/>`; null hides the row. */\n theme?: ReactNode\n onProfile?: () => void\n onTeam?: () => void\n onBilling?: () => void\n onSignOut?: () => void\n}\n\nexport function AppHeader({\n brand,\n wordmark = 'Hanzo',\n onBrand,\n org,\n children,\n current,\n surfaces,\n open,\n user,\n menu,\n theme,\n onProfile,\n onTeam,\n onBilling,\n onSignOut,\n}: AppHeaderProps) {\n const [appsOpen, setAppsOpen] = useState(false)\n const [menuOpen, setMenuOpen] = useState(false)\n const items = surfaces ?? otherSurfaces(current)\n const launch = (s: Surface) => {\n setAppsOpen(false)\n if (open) open(s)\n else openHref(s.href)\n }\n\n return (\n <XStack items=\"center\" gap=\"$2\" px=\"$3\" height={52} borderBottomWidth={1} borderColor=\"$borderColor\" bg=\"$background\">\n <XStack items=\"center\" cursor={onBrand ? 'pointer' : undefined} onPress={onBrand}>\n {brand ?? <BrandMark wordmark={wordmark} />}\n </XStack>\n\n {org ? (\n <XStack items=\"center\" minW={0}>\n {org}\n </XStack>\n ) : null}\n\n <XStack flex={1} items=\"center\" minW={0}>\n {children}\n </XStack>\n\n {items.length > 0 ? (\n <Popover open={appsOpen} onOpenChange={setAppsOpen} placement=\"bottom-end\">\n <Popover.Trigger asChild>\n <Button size=\"$2\" chromeless icon={<Grip size={16} />} aria-label=\"Apps\" />\n </Popover.Trigger>\n <Popover.Content bordered elevate p=\"$2\" width={230} bg=\"$color2\" borderColor=\"$borderColor\">\n <YStack gap=\"$1\">\n {items.map((s) => {\n const Icon = SURFACE_ICON[s.id]\n return (\n <XStack key={s.id} onPress={() => launch(s)} cursor=\"pointer\" items=\"center\" gap=\"$2.5\" px=\"$2\" py=\"$2\" rounded=\"$3\" hoverStyle={{ bg: '$color5' }}>\n <Icon size={16} />\n <Text flex={1} fontSize=\"$2\" fontWeight=\"600\" color=\"$color12\">\n {s.label}\n </Text>\n {s.hint ? (\n <Text fontSize=\"$1\" color=\"$color10\">\n {s.hint}\n </Text>\n ) : null}\n </XStack>\n )\n })}\n </YStack>\n </Popover.Content>\n </Popover>\n ) : null}\n\n <Popover open={menuOpen} onOpenChange={setMenuOpen} placement=\"bottom-end\">\n <Popover.Trigger asChild>\n <Button size=\"$2\" chromeless icon={<UserRound size={16} />} aria-label=\"Account\">\n {user ? (\n <Text fontSize=\"$2\" color=\"$color12\" numberOfLines={1} maxW={140}>\n {user}\n </Text>\n ) : null}\n </Button>\n </Popover.Trigger>\n <Popover.Content bordered elevate p=\"$2\" width={220} bg=\"$color2\" borderColor=\"$borderColor\">\n {menu ?? (\n <YStack gap=\"$1\">\n {onProfile ? <MenuRow icon={<UserRound size={15} />} label=\"Profile\" onPress={() => (setMenuOpen(false), onProfile())} /> : null}\n {theme !== null ? (\n <XStack items=\"center\" gap=\"$2.5\" px=\"$2\" py=\"$1\" rounded=\"$3\">\n <Text flex={1} fontSize=\"$2\" color=\"$color12\">\n Theme\n </Text>\n {theme ?? <ThemeToggle />}\n </XStack>\n ) : null}\n {onTeam ? <MenuRow icon={<Settings2 size={15} />} label=\"Team settings\" onPress={() => (setMenuOpen(false), onTeam())} /> : null}\n {onBilling ? <MenuRow icon={<CreditCard size={15} />} label=\"Billing\" onPress={() => (setMenuOpen(false), onBilling())} /> : null}\n {onSignOut ? (\n <>\n <Separator borderColor=\"$borderColor\" my=\"$1\" />\n <MenuRow icon={<LogOut size={15} />} label=\"Sign out\" onPress={() => (setMenuOpen(false), onSignOut())} />\n </>\n ) : null}\n </YStack>\n )}\n </Popover.Content>\n </Popover>\n </XStack>\n )\n}\n","'use client'\n\n/**\n * OrgMark — the ONE organization identity treatment.\n *\n * An org shows its OWN logo when IAM carries one; when it does not, it shows its\n * MONOGRAM on a neutral tile — the same treatment the account widget gives a\n * person, so a workspace and a user read as peers. It is never a house mark: a\n * customer's console must show the customer's identity, not ours.\n *\n * Monochrome by construction (`$color4` tile, `$color12` glyph) so it belongs to\n * the chrome; colour stays with content.\n */\nimport { Text, YStack } from '@hanzo/gui'\n\nimport type { Org } from './scope'\n\n/**\n * The monogram for a name: the first letter of each of the first two words,\n * uppercased — the SAME rule @hanzo/iam's account widget applies to a person, so\n * a workspace and a user wear one treatment. Words break on whitespace and on the\n * separators an org id carries (`.`, `_`, `-`, `/`), so `acme-labs` reads AL\n * while a single word reads its one initial.\n */\nexport function monogram(name: string): string {\n const words = name.trim().split(/[\\s._/-]+/).filter(Boolean)\n const letters = words\n .slice(0, 2)\n .map((w) => w[0] ?? '')\n .join('')\n return (letters || name.trim().slice(0, 2)).toUpperCase()\n}\n\nexport type OrgMarkProps = {\n /** The org to mark — its `logo` wins, else the monogram of its display name. */\n org: Org\n /** Edge of the square tile / height of the logo. Default 22. */\n size?: number\n /**\n * Widest a LOGO may run, for a wordmark that is not square. Omit to keep the\n * logo square like the monogram (a switcher row, an avatar slot).\n */\n maxW?: number\n}\n\nexport function OrgMark({ org, size = 22, maxW }: OrgMarkProps) {\n if (org.logo) {\n // An arbitrary tenant-supplied URL — a raw <img>, since next/image would need\n // a remote allow-list per customer domain.\n // eslint-disable-next-line @next/next/no-img-element\n return (\n <img\n src={org.logo}\n alt=\"\"\n style={{\n height: size,\n width: maxW ? 'auto' : size,\n maxWidth: maxW ?? size,\n objectFit: 'contain',\n display: 'block',\n borderRadius: 6,\n flexShrink: 0,\n }}\n />\n )\n }\n return (\n <YStack\n width={size}\n height={size}\n rounded=\"$3\"\n bg=\"$color4\"\n items=\"center\"\n justify=\"center\"\n style={{ flexShrink: 0 }}\n >\n <Text fontSize={Math.round(size * 0.4)} fontWeight=\"800\" color=\"$color12\">\n {monogram(org.displayName || org.name)}\n </Text>\n </YStack>\n )\n}\n","/**\n * orgScope — the active-organization contract every Hanzo surface shares\n * (hoisted from the console; see hanzoai/ui#36).\n *\n * Brand identity (which IAM you log into, the wordmark + logo) is fixed per\n * host; the DATA scope — which org's identity, secrets and resources the app\n * acts on — is orthogonal. This module owns only that switch. Every\n * tenant-scoped call reads `currentOrg()` and stamps it as `X-Org-Id`.\n *\n * Two-level model: the org VALUE (which org) and the SELECTION (has one been\n * chosen yet) are orthogonal. A fresh login is org-LESS: `hasSelectedOrg()` is\n * false so the host can show its org picker even for a one-org user. Entering\n * (`enterOrg`) sets value + flag and navigates home; leaving (`leaveOrg`)\n * clears the flag back to the picker; the in-shell quick switch (`switchOrg`)\n * persists and reloads so every module refetches under the new `X-Org-Id`.\n *\n * Host-agnostic: storage + navigation are injected (browser defaults), so the\n * same contract runs in Next, Vite, Svelte or a test.\n */\n\nexport type Org = { name: string; displayName?: string; logo?: string }\n\nexport type OrgScopeConfig = {\n /** The brand's own org — the default scope (e.g. `config.iamOrgName`). */\n brandOrg: string\n /** Storage key namespace — ONE per surface. Default `'hanzo.org'`. */\n key?: string\n /** Storage — defaults to `window.localStorage`, null-safe on SSR/blocked. */\n storage?: Pick<Storage, 'getItem' | 'setItem' | 'removeItem'>\n /** Navigate to a path (enter/leave land on home). Default `location.assign`. */\n navigate?: (path: string) => void\n /** Hard reload (quick-switch refetches everything). Default `location.reload`. */\n reload?: () => void\n}\n\nexport type OrgScope = {\n /** The org the surface is currently scoped to (default: the brand org). */\n currentOrg(): string\n /** Switch the active scope. Passing the brand org clears the override. */\n setCurrentOrg(org: string): void\n /** True when scoped to a non-default (switched) org. */\n isScopedAway(): boolean\n /** True once an org has been explicitly ENTERED (picker → shell). */\n hasSelectedOrg(): boolean\n /** Enter an org from the picker: scope + select + navigate home. */\n enterOrg(org: string): void\n /** Leave the org (back to the picker): de-select + reset + navigate home. */\n leaveOrg(): void\n /** In-shell quick switch: persist + keep selection + reload. Same org: no-op. */\n switchOrg(org: string): void\n}\n\nfunction browserStorage(): Pick<Storage, 'getItem' | 'setItem' | 'removeItem'> | null {\n if (typeof window === 'undefined') return null\n try {\n return window.localStorage\n } catch {\n return null\n }\n}\n\nexport function orgScope(config: OrgScopeConfig): OrgScope {\n const key = config.key ?? 'hanzo.org'\n const selectedKey = `${key}.selected`\n const store = () => config.storage ?? browserStorage()\n const read = (k: string): string | null => {\n try {\n return store()?.getItem(k) ?? null\n } catch {\n return null\n }\n }\n const write = (k: string, v: string | null): void => {\n try {\n if (v === null) store()?.removeItem(k)\n else store()?.setItem(k, v)\n } catch {\n // Storage blocked — the scope simply stays at the brand org.\n }\n }\n const goHome = () => {\n if (config.navigate) return config.navigate('/')\n if (typeof window !== 'undefined') window.location.assign('/')\n }\n const doReload = () => {\n if (config.reload) return config.reload()\n if (typeof window !== 'undefined') window.location.reload()\n }\n\n const scope: OrgScope = {\n currentOrg: () => read(key) || config.brandOrg,\n setCurrentOrg: (org) => write(key, !org || org === config.brandOrg ? null : org),\n isScopedAway: () => scope.currentOrg() !== config.brandOrg,\n hasSelectedOrg: () => read(selectedKey) === '1',\n enterOrg: (org) => {\n if (!org) return\n scope.setCurrentOrg(org)\n write(selectedKey, '1')\n goHome()\n },\n leaveOrg: () => {\n write(selectedKey, null)\n scope.setCurrentOrg(config.brandOrg)\n goHome()\n },\n switchOrg: (org) => {\n if (!org || org === scope.currentOrg()) return\n scope.setCurrentOrg(org)\n write(selectedKey, '1')\n doReload()\n },\n }\n return scope\n}\n\n/** Case-insensitive filter over org name + display name (the switcher search). */\nexport function filterOrgs<T extends Org>(orgs: T[], query: string): T[] {\n const q = query.trim().toLowerCase()\n if (!q) return orgs\n return orgs.filter(\n (o) => o.name.toLowerCase().includes(q) || (o.displayName ?? '').toLowerCase().includes(q),\n )\n}\n","'use client'\n\n/**\n * OrgSwitcher — the Vercel-style org/team switcher, hoisted from the console\n * (hanzoai/ui#36) onto @hanzo/gui primitives. Shows the org the surface is\n * scoped to, switches between the orgs the caller can see, and creates one.\n *\n * Host-agnostic: the LIST is a lazy, paged loader the host injects (IAM\n * `get-organizations` behind its own proxy) — one page at a time, the search\n * term pushed to the server, more on demand (scroll + \"Load more\"), so it\n * scales to thousands of orgs. No loader → the current org alone, synthesized\n * from the scope (never fabricated). Selecting re-scopes IN PLACE via\n * `scope.switchOrg` (persist + reload → every module refetches under the new\n * `X-Org-Id`). Create posts through the injected hook, then scopes into the\n * new org.\n */\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { Button, Input, Popover, Spinner, Text, XStack, YStack } from '@hanzo/gui'\nimport { Check, ChevronsUpDown, LayoutGrid, Plus, Search } from '@hanzogui/lucide-icons-2'\n\nimport { useEmit } from './instrument'\nimport { OrgMark } from './OrgMark'\nimport { filterOrgs, type Org, type OrgScope } from './scope'\n\nconst titleCase = (s: string) => (s ? s[0].toUpperCase() + s.slice(1) : s)\n\nexport type OrgSwitcherProps = {\n /** The active-org contract (see `orgScope`). */\n scope: OrgScope\n /**\n * Lazy paged org list: 0-based page + server-pushed search → one page of\n * rows. A full page (=== pageSize) implies another. Omit when the caller\n * can only see its own org.\n */\n orgs?: (page: number, query: string) => Promise<Org[]>\n /** Rows per page the loader returns. Default 20. */\n pageSize?: number\n /**\n * The org the surface is scoped to, already resolved (display name + logo).\n * Omit and the trigger synthesizes it from the scope id alone — enough to name\n * the org, but it cannot know a logo. Pass it wherever the host already\n * resolves the org, so the switcher and the chrome's org mark agree.\n */\n current?: Org\n /** Create-org hook → the created org's id; omit to hide the affordance. */\n create?: (name: string) => Promise<string>\n /** Show the \"All organizations\" de-scope row (`scope.leaveOrg`). */\n picker?: boolean\n}\n\nexport function OrgSwitcher({ scope, orgs, pageSize = 20, current: given, create, picker = false }: OrgSwitcherProps) {\n const currentId = scope.currentOrg()\n\n const [open, setOpen] = useState(false)\n const [query, setQuery] = useState('')\n const [debounced, setDebounced] = useState('')\n const [rows, setRows] = useState<Org[]>([])\n const [loading, setLoading] = useState(false)\n const [loadingMore, setLoadingMore] = useState(false)\n const [hasMore, setHasMore] = useState(false)\n const [creating, setCreating] = useState(false)\n const [newName, setNewName] = useState('')\n const [busy, setBusy] = useState(false)\n const [err, setErr] = useState<string | null>(null)\n const pageRef = useRef(0)\n const reqRef = useRef(0) // race token — a newer request supersedes older ones\n\n // Debounce the search so type-as-you-search re-hits the server at most ~4×/s.\n useEffect(() => {\n const id = setTimeout(() => setDebounced(query.trim()), 250)\n return () => clearTimeout(id)\n }, [query])\n\n const fetchPage = useCallback(\n async (page: number, q: string, append: boolean) => {\n if (!orgs) return\n const token = ++reqRef.current\n append ? setLoadingMore(true) : setLoading(true)\n try {\n const incoming = await orgs(page, q)\n if (token !== reqRef.current) return\n pageRef.current = page\n setRows((prev) => {\n const merged = append ? [...prev] : []\n const seen = new Set(merged.map((o) => o.name))\n for (const o of incoming) if (!seen.has(o.name)) merged.push(o)\n return merged\n })\n setHasMore(incoming.length >= pageSize)\n } catch {\n // Honest empty / keep what's shown — never a fabricated list.\n if (token !== reqRef.current) return\n if (!append) setRows([])\n setHasMore(false)\n } finally {\n if (token === reqRef.current) {\n setLoading(false)\n setLoadingMore(false)\n }\n }\n },\n [orgs, pageSize],\n )\n\n // (Re)load page 0 when the popover opens or the debounced query changes.\n useEffect(() => {\n if (!open || !orgs) return\n void fetchPage(0, debounced, false)\n }, [open, debounced, fetchPage, orgs])\n\n const loadMore = useCallback(() => {\n if (loading || loadingMore || !hasMore) return\n void fetchPage(pageRef.current + 1, debounced, true)\n }, [loading, loadingMore, hasMore, debounced, fetchPage])\n\n // Rows to render — the loaded list (client-filtered too), else the current\n // org synthesized from the scope.\n const visible: Org[] = useMemo(() => {\n if (orgs) return filterOrgs(rows, query)\n return [{ name: currentId, displayName: titleCase(currentId) }]\n }, [orgs, rows, query, currentId])\n\n // The host's resolved org wins (it alone can carry the logo), then the loaded\n // row, then a name synthesized from the scope id — never nothing.\n const current: Org = useMemo(() => {\n if (given && given.name === currentId) return given\n return rows.find((o) => o.name === currentId) ?? { name: currentId, displayName: titleCase(currentId) }\n }, [given, rows, currentId])\n const currentLabel = current.displayName || titleCase(current.name)\n\n const track = useEmit()\n\n const select = useCallback(\n (org: string) => {\n track({ component: 'OrgSwitcher', action: 'select', id: org })\n setOpen(false)\n scope.switchOrg(org)\n },\n [scope, track],\n )\n\n const submitCreate = async () => {\n const name = newName.trim()\n if (!name || !create) return\n setBusy(true)\n setErr(null)\n try {\n const org = await create(name)\n scope.switchOrg(org)\n } catch (e) {\n setErr(e instanceof Error ? e.message : 'Could not create the organization.')\n setBusy(false)\n }\n }\n\n return (\n <Popover open={open} onOpenChange={setOpen} placement=\"bottom-start\">\n <Popover.Trigger asChild>\n {/* Sized as the PEER of the account control — same height, same mark,\n same type, same hit area — so \"which workspace\" and \"who I am\" read\n as the two halves of one identity, not a caption over a control. */}\n <Button chromeless height={44} px=\"$2\" justify=\"flex-start\" aria-label={`${currentLabel} · switch organization`}>\n <XStack items=\"center\" gap=\"$2.5\" flex={1} minW={0}>\n <OrgMark org={current} size={30} />\n <Text flex={1} minW={0} fontSize=\"$4\" fontWeight=\"800\" color=\"$color12\" numberOfLines={1}>\n {currentLabel}\n </Text>\n <ChevronsUpDown size={15} color=\"$color9\" />\n </XStack>\n </Button>\n </Popover.Trigger>\n <Popover.Content bordered elevate p=\"$2\" width={300} bg=\"$color2\" borderColor=\"$borderColor\">\n {creating ? (\n <YStack gap=\"$2\">\n <Text fontSize=\"$2\" color=\"$color12\" fontWeight=\"700\">\n Create organization\n </Text>\n <Input\n size=\"$3\"\n placeholder=\"Organization name\"\n value={newName}\n onChangeText={setNewName}\n autoCapitalize=\"words\"\n onSubmitEditing={() => void submitCreate()}\n />\n {err ? (\n <Text fontSize=\"$1\" color=\"$red10\">\n {err}\n </Text>\n ) : null}\n <XStack gap=\"$2\" justify=\"flex-end\">\n <Button size=\"$2\" chromeless onPress={() => setCreating(false)} disabled={busy}>\n Cancel\n </Button>\n <Button\n size=\"$2\"\n onPress={() => void submitCreate()}\n disabled={busy || !newName.trim()}\n icon={busy ? <Spinner size=\"small\" /> : <Plus size={14} />}\n >\n Create\n </Button>\n </XStack>\n </YStack>\n ) : (\n <YStack gap=\"$1\">\n {orgs ? (\n <XStack items=\"center\" gap=\"$2\" px=\"$2\" py=\"$1\" rounded=\"$3\" borderWidth={1} borderColor=\"$borderColor\">\n <Search size={13} opacity={0.6} />\n <Input\n flex={1}\n size=\"$2\"\n borderWidth={0}\n bg=\"transparent\"\n placeholder=\"Find organization…\"\n value={query}\n onChangeText={setQuery}\n autoCapitalize=\"none\"\n autoCorrect={false}\n />\n </XStack>\n ) : null}\n\n <div\n style={{ maxHeight: 300, overflowY: 'auto', display: 'flex', flexDirection: 'column' }}\n onScroll={(e) => {\n const el = e.currentTarget\n if (el.scrollHeight - el.scrollTop - el.clientHeight < 48) loadMore()\n }}\n >\n {loading ? (\n <XStack items=\"center\" gap=\"$2\" px=\"$2\" py=\"$3\">\n <Spinner size=\"small\" color=\"$color11\" />\n <Text fontSize=\"$2\" color=\"$color10\">\n Loading organizations…\n </Text>\n </XStack>\n ) : visible.length === 0 ? (\n <Text px=\"$2\" py=\"$2\" fontSize=\"$2\" color=\"$color10\">\n {query.trim() ? `No organizations match “${query.trim()}”.` : 'No organizations yet.'}\n </Text>\n ) : (\n visible.map((org) => (\n <XStack\n key={org.name}\n onPress={() => select(org.name)}\n cursor=\"pointer\"\n items=\"center\"\n gap=\"$2.5\"\n px=\"$2\"\n py=\"$2\"\n rounded=\"$3\"\n bg={org.name === currentId ? '$color4' : 'transparent'}\n hoverStyle={{ bg: '$color5' }}\n >\n <OrgMark org={org} />\n <Text flex={1} fontSize=\"$2\" color=\"$color12\" numberOfLines={1}>\n {org.displayName || org.name}\n </Text>\n {org.name === currentId ? <Check size={15} /> : null}\n </XStack>\n ))\n )}\n\n {loadingMore ? (\n <XStack items=\"center\" gap=\"$2\" px=\"$2\" py=\"$2\">\n <Spinner size=\"small\" color=\"$color11\" />\n <Text fontSize=\"$1\" color=\"$color10\">\n Loading more…\n </Text>\n </XStack>\n ) : hasMore ? (\n <XStack onPress={loadMore} cursor=\"pointer\" items=\"center\" justify=\"center\" px=\"$2\" py=\"$1.5\" rounded=\"$3\" hoverStyle={{ bg: '$color4' }}>\n <Text fontSize=\"$1\" color=\"$color11\" fontWeight=\"600\">\n Load more\n </Text>\n </XStack>\n ) : null}\n </div>\n\n {create ? (\n <XStack\n onPress={() => {\n setCreating(true)\n setErr(null)\n }}\n cursor=\"pointer\"\n items=\"center\"\n gap=\"$2.5\"\n px=\"$2\"\n py=\"$2\"\n mt=\"$1\"\n rounded=\"$3\"\n borderTopWidth={1}\n borderColor=\"$borderColor\"\n hoverStyle={{ bg: '$color5' }}\n >\n <YStack width={22} height={22} rounded=\"$3\" bg=\"$color3\" items=\"center\" justify=\"center\">\n <Plus size={14} />\n </YStack>\n <Text fontSize=\"$2\" color=\"$color12\">\n Create organization\n </Text>\n </XStack>\n ) : null}\n\n {picker ? (\n <XStack\n onPress={() => {\n setOpen(false)\n scope.leaveOrg()\n }}\n cursor=\"pointer\"\n items=\"center\"\n gap=\"$2.5\"\n px=\"$2\"\n py=\"$2\"\n rounded=\"$3\"\n hoverStyle={{ bg: '$color5' }}\n >\n <YStack width={22} height={22} rounded=\"$3\" bg=\"$color3\" items=\"center\" justify=\"center\">\n <LayoutGrid size={14} />\n </YStack>\n <Text fontSize=\"$2\" color=\"$color12\">\n All organizations\n </Text>\n </XStack>\n ) : null}\n </YStack>\n )}\n </Popover.Content>\n </Popover>\n )\n}\n","'use client'\n\n/**\n * DropdownMenu — a portal-theme-safe click menu. Declarative `items` rendered through the\n * ONE shared menu-item spec, so it is pixel-identical to ContextMenu/SelectMenu/ComboBox.\n * Built on FloatingMenu (gui Portal), NOT the gui Popover — so it mounts without the\n * Sheet re-root that loses theme context on gui-native hosts (react-native-web-lite).\n *\n * <DropdownMenu\n * trigger={<Button>Actions</Button>}\n * items={[\n * { key: 'rename', label: 'Rename', icon: <Pencil size={16} />, onSelect: rename },\n * { type: 'separator' },\n * { key: 'del', label: 'Delete', destructive: true, onSelect: del },\n * ]}\n * />\n */\nimport type { ReactElement } from 'react'\nimport { useCallback, useRef } from 'react'\nimport { XStack, useControllableState } from '@hanzo/gui'\nimport { renderMenuItems, type MenuItemSpec } from './items'\nimport { FloatingMenu } from './FloatingMenu'\n\nexport type DropdownMenuProps = {\n /** The clickable element. Wrapped so any element opens the menu on press. */\n trigger: ReactElement\n items: MenuItemSpec[]\n /** Controlled open state. Omit for uncontrolled. */\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n minWidth?: number\n maxHeight?: number\n}\n\nexport function DropdownMenu({\n trigger,\n items,\n open,\n defaultOpen = false,\n onOpenChange,\n minWidth = 200,\n maxHeight,\n}: DropdownMenuProps) {\n const [isOpen, setOpen] = useControllableState({\n prop: open,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n })\n const anchorRef = useRef<HTMLElement | null>(null)\n const anchorRect = useCallback(() => anchorRef.current?.getBoundingClientRect() ?? null, [])\n const anchorEl = useCallback(() => anchorRef.current, [])\n\n return (\n <>\n <XStack ref={anchorRef as never} self=\"flex-start\" cursor=\"pointer\" onPress={() => setOpen(!isOpen)}>\n {trigger}\n </XStack>\n <FloatingMenu\n open={isOpen}\n onClose={() => setOpen(false)}\n anchorRect={anchorRect}\n anchorEl={anchorEl}\n minWidth={minWidth}\n maxHeight={maxHeight}\n >\n {renderMenuItems(items, () => setOpen(false))}\n </FloatingMenu>\n </>\n )\n}\n","'use client'\n\n/**\n * ContextMenu — a right-click menu that renders the SAME shared item spec as DropdownMenu,\n * so every menu in the fleet is identical. Built on FloatingMenu (gui Portal), anchored to\n * the cursor point. Web/desktop right-click (`onContextMenu`); on native — which has no\n * right-click — the wrapped child renders untouched.\n *\n * <ContextMenu items={[{ key:'copy', label:'Copy', icon:<Copy size={16}/>, onSelect:copy }]}>\n * <YStack>right-click me</YStack>\n * </ContextMenu>\n */\nimport type { ReactElement, MouseEvent } from 'react'\nimport { cloneElement, useCallback, useState } from 'react'\nimport { renderMenuItems, type MenuItemSpec } from './items'\nimport { FloatingMenu } from './FloatingMenu'\n\nexport type ContextMenuProps = {\n /** The right-clickable target. Its `onContextMenu` is composed, not replaced. */\n children: ReactElement\n items: MenuItemSpec[]\n disabled?: boolean\n minWidth?: number\n maxHeight?: number\n}\n\nexport function ContextMenu({ children, items, disabled, minWidth = 200, maxHeight }: ContextMenuProps) {\n const [state, setState] = useState<{ open: boolean; x: number; y: number }>({ open: false, x: 0, y: 0 })\n const close = useCallback(() => setState((s) => (s.open ? { ...s, open: false } : s)), [])\n // A zero-size rect at the cursor; FloatingMenu opens the panel at that point (gap 0).\n const anchorRect = useCallback(\n () => ({ left: state.x, top: state.y, right: state.x, bottom: state.y, width: 0, height: 0 }),\n [state.x, state.y],\n )\n\n const childOnContextMenu = (children.props as { onContextMenu?: (e: MouseEvent) => void }).onContextMenu\n const target = cloneElement(children, {\n onContextMenu: (e: MouseEvent) => {\n childOnContextMenu?.(e)\n if (disabled) return\n e.preventDefault()\n e.stopPropagation()\n setState({ open: true, x: e.clientX, y: e.clientY })\n },\n } as Partial<typeof children.props>)\n\n return (\n <>\n {target}\n <FloatingMenu open={state.open} onClose={close} anchorRect={anchorRect} gap={0} minWidth={minWidth} maxHeight={maxHeight}>\n {renderMenuItems(items, close)}\n </FloatingMenu>\n </>\n )\n}\n","'use client'\n\n/**\n * SiteNav — the ONE header every Hanzo property renders.\n *\n * `@hanzo/products` already decides WHAT the navigation is: `HEADERS[site]` gives\n * a property's local nav and its call-to-action, and `MEET_HANZO_MENU` gives the\n * ecosystem launcher (the six-product grid, the utility row, the install row).\n * Nothing about that content lives here. This module is only the renderer — the\n * missing half — so a property supplies a `SiteId` and gets the same header as\n * every other property, and the six hand-written `DesktopNav`/`MobileMenu` copies\n * that used to drift have nothing left to disagree about.\n *\n * It sits at the same 52px, border and background as `AppHeader`, so the\n * signed-out marketing bar and the signed-in shell bar read as one object.\n *\n * Three deliberate choices, each fixing something the old menus got wrong:\n *\n * • The panel is FULL-BLEED. The old ones anchored a floating card to whichever\n * word opened it, so a wide panel hung off-centre and the bar's alignment\n * stopped meaning anything. Anchoring to the bar lets columns line up with the\n * header and with each other.\n * • Hover switches menus but never opens one. A bar where a passing cursor\n * throws a full-width panel is hostile; the first open must be intentional.\n * • ONE action. `SiteHeader.action` is a single call-to-action, so a property\n * cannot render two competing sign-in buttons the way cloud.hanzo.ai did.\n *\n * Host-agnostic like the rest of this layer: `link` injects the host's navigation\n * primitive and `icon` resolves a product/link id to a glyph, so nothing here\n * imports a framework or an icon set.\n */\nimport { useEffect, useRef, useState, type ReactNode } from 'react'\nimport { Separator, Text, XStack, YStack } from '@hanzo/gui'\nimport type { Action, Link, MeetHanzoMenu, Product, SiteHeader } from '@hanzo/products'\n\n/** Render a destination. Hosts pass next/link etc.; the default is a plain anchor. */\nexport type LinkRender = (props: {\n href: string\n children: ReactNode\n onNavigate?: () => void\n}) => ReactNode\n\n/** Absolute URLs leave the property; site-relative paths stay. */\nconst isExternal = (href: string) => /^https?:\\/\\//.test(href)\n\nconst defaultLink: LinkRender = ({ href, children, onNavigate }) => (\n <a\n href={href}\n onClick={onNavigate}\n {...(isExternal(href) ? { target: '_blank', rel: 'noopener noreferrer' } : null)}\n style={{ textDecoration: 'none', color: 'inherit', display: 'block' }}\n >\n {children}\n </a>\n)\n\nexport type SiteNavProps = {\n /** The property's header model — `HEADERS[site]` from @hanzo/products. */\n header: SiteHeader\n /** The ecosystem launcher — `MEET_HANZO_MENU`. Omit to hide the launcher. */\n menu?: MeetHanzoMenu\n /** Brand slot — usually `<BrandMark/>`; pressing it goes home. */\n brand?: ReactNode\n /**\n * Right-hand cluster BEFORE the action: an identity menu when signed in, or a\n * sign-in link when signed out. The action itself comes from `header`, so this\n * slot must not repeat it.\n */\n actions?: ReactNode\n /** Host link primitive. */\n link?: LinkRender\n /** Resolve a product/link `id` to a glyph. Entries render fine without it. */\n icon?: (id: string) => ReactNode\n /** Marks the active local-nav item by its `Link.id`. */\n active?: string\n /** Launcher label. */\n meetLabel?: string\n}\n\n/** A product cell in the launcher grid: verb kicker, name, the one job it owns. */\nfunction ProductCell({ product, link, icon, close }: { product: Product; link: LinkRender; icon?: (id: string) => ReactNode; close: () => void }) {\n const glyph = icon?.(product.id)\n return (\n <YStack minW={200} flex={1} flexBasis={200}>\n {link({\n href: product.url,\n onNavigate: close,\n children: (\n <XStack gap=\"$2.5\" items=\"flex-start\" p=\"$2.5\" rounded=\"$4\" borderWidth={1} borderColor=\"$borderColor\" hoverStyle={{ bg: '$color4' }}>\n {glyph ? <YStack pt=\"$0.5\">{glyph}</YStack> : null}\n <YStack minW={0} gap=\"$0.5\">\n {product.verb ? (\n <Text fontSize={11} color=\"$color10\" textTransform=\"uppercase\" letterSpacing={0.4}>\n {product.verb}\n </Text>\n ) : null}\n <Text fontSize=\"$3\" color=\"$color12\">\n {product.name}\n </Text>\n <Text fontSize={12} color=\"$color10\" lineHeight={16}>\n {product.job}\n </Text>\n </YStack>\n </XStack>\n ),\n })}\n </YStack>\n )\n}\n\n/** A titled column of plain links — the utility and install rows. */\nfunction Column({ title, links, link, icon, close }: { title: string; links: Link[]; link: LinkRender; icon?: (id: string) => ReactNode; close: () => void }) {\n return (\n <YStack minW={160} flex={1} gap=\"$1\">\n <Text fontSize={11} color=\"$color10\" textTransform=\"uppercase\" letterSpacing={0.5} px=\"$2\" pb=\"$1\">\n {title}\n </Text>\n {links.map((l) => (\n <XStack key={l.id} px=\"$2\" py=\"$1\" rounded=\"$3\" hoverStyle={{ bg: '$color4' }} gap=\"$2\" items=\"center\">\n {icon?.(l.id) ?? null}\n {link({\n href: l.href,\n onNavigate: close,\n children: (\n <Text fontSize=\"$2\" color=\"$color11\">\n {l.label}\n </Text>\n ),\n })}\n </XStack>\n ))}\n </YStack>\n )\n}\n\n/**\n * The full-bleed launcher. The product grid wraps rather than scrolls, so the\n * family growing reflows instead of clipping.\n */\nfunction Launcher({ menu, link, icon, close }: { menu: MeetHanzoMenu; link: LinkRender; icon?: (id: string) => ReactNode; close: () => void }) {\n return (\n <YStack\n position=\"absolute\"\n t={52}\n l={0}\n r={0}\n z={50}\n bg=\"$background\"\n borderBottomWidth={1}\n borderColor=\"$borderColor\"\n px=\"$4\"\n py=\"$4\"\n gap=\"$3\"\n maxH=\"80vh\"\n overflow=\"scroll\"\n >\n <XStack items=\"center\" gap=\"$3\" flexWrap=\"wrap\">\n <Text fontSize=\"$2\" color=\"$color11\">\n {menu.eyebrow}\n </Text>\n <XStack ml=\"auto\">\n {link({\n href: menu.allProducts.href,\n onNavigate: close,\n children: (\n <Text fontSize=\"$2\" color=\"$color12\">\n {menu.allProducts.label} →\n </Text>\n ),\n })}\n </XStack>\n </XStack>\n\n <XStack gap=\"$2.5\" flexWrap=\"wrap\">\n {menu.products.map((p) => (\n <ProductCell key={p.id} product={p} link={link} icon={icon} close={close} />\n ))}\n </XStack>\n\n <Separator />\n\n <XStack gap=\"$4\" flexWrap=\"wrap\" items=\"flex-start\">\n <Column title=\"Platform\" links={menu.utilities} link={link} icon={icon} close={close} />\n <Column title=\"Install\" links={menu.installs} link={link} icon={icon} close={close} />\n </XStack>\n </YStack>\n )\n}\n\n/** The primary call-to-action — filled, so it reads as the one action on the bar. */\nfunction Cta({ action, link }: { action: Action; link: LinkRender }) {\n return (\n <XStack bg=\"$color12\" px=\"$3\" py=\"$1.5\" rounded=\"$3\" hoverStyle={{ opacity: 0.9 }}>\n {link({\n href: action.href,\n children: (\n <Text fontSize=\"$2\" color=\"$background\">\n {action.label}\n </Text>\n ),\n })}\n </XStack>\n )\n}\n\n/**\n * The small-screen arrangement: the local nav and the launcher's own lists\n * stacked in one scrollable column. Same values, same rows — only the layout\n * differs, which is what kept the old per-repo MobileMenus drifting.\n */\nfunction MobilePanel({ header, menu, link, icon, close }: { header: SiteHeader; menu?: MeetHanzoMenu; link: LinkRender; icon?: (id: string) => ReactNode; close: () => void }) {\n return (\n <YStack\n position=\"absolute\"\n t={52}\n l={0}\n r={0}\n z={50}\n bg=\"$background\"\n borderBottomWidth={1}\n borderColor=\"$borderColor\"\n px=\"$3\"\n py=\"$3\"\n gap=\"$3\"\n maxH=\"80vh\"\n overflow=\"scroll\"\n >\n <YStack gap=\"$1\">\n {header.localNav.map((l) => (\n <XStack key={l.id} px=\"$2\" py=\"$1.5\" rounded=\"$3\" hoverStyle={{ bg: '$color4' }}>\n {link({\n href: l.href,\n onNavigate: close,\n children: (\n <Text fontSize=\"$3\" color=\"$color12\">\n {l.label}\n </Text>\n ),\n })}\n </XStack>\n ))}\n </YStack>\n\n {menu ? (\n <>\n <Separator />\n <YStack gap=\"$1\">\n {menu.products.map((p) => (\n <XStack key={p.id} px=\"$2\" py=\"$1.5\" rounded=\"$3\" hoverStyle={{ bg: '$color4' }} gap=\"$2\" items=\"center\">\n {icon?.(p.id) ?? null}\n {link({\n href: p.url,\n onNavigate: close,\n children: (\n <Text fontSize=\"$3\" color=\"$color12\">\n {p.name}\n </Text>\n ),\n })}\n </XStack>\n ))}\n </YStack>\n <Separator />\n <Column title=\"Platform\" links={menu.utilities} link={link} icon={icon} close={close} />\n <Column title=\"Install\" links={menu.installs} link={link} icon={icon} close={close} />\n </>\n ) : null}\n </YStack>\n )\n}\n\nexport function SiteNav({ header, menu, brand, actions, link = defaultLink, icon, active, meetLabel = 'Meet Hanzo' }: SiteNavProps) {\n const [launcher, setLauncher] = useState(false)\n const [mobile, setMobile] = useState(false)\n const root = useRef<HTMLDivElement | null>(null)\n\n // Escape closes, and a click outside the bar+panel closes. Both are required for\n // a full-bleed panel: it covers enough of the page that there is no obvious\n // \"off\" target, so dismissal has to be explicit rather than incidental.\n useEffect(() => {\n if (!launcher && !mobile) return\n const dismiss = () => {\n setLauncher(false)\n setMobile(false)\n }\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') dismiss()\n }\n const onDown = (e: MouseEvent) => {\n if (root.current && !root.current.contains(e.target as Node)) dismiss()\n }\n document.addEventListener('keydown', onKey)\n document.addEventListener('mousedown', onDown)\n return () => {\n document.removeEventListener('keydown', onKey)\n document.removeEventListener('mousedown', onDown)\n }\n }, [launcher, mobile])\n\n return (\n <YStack ref={root as never} position=\"relative\" bg=\"$background\">\n <XStack items=\"center\" gap=\"$1\" px=\"$3\" height={52} borderBottomWidth={1} borderColor=\"$borderColor\">\n {brand ? (\n <XStack items=\"center\" pr=\"$2\">\n {brand}\n </XStack>\n ) : null}\n\n {menu ? (\n <XStack\n cursor=\"pointer\"\n px=\"$2.5\"\n py=\"$1.5\"\n rounded=\"$3\"\n bg={launcher ? '$color4' : 'transparent'}\n hoverStyle={{ bg: '$color4' }}\n onPress={() => setLauncher(!launcher)}\n accessibilityRole=\"button\"\n aria-expanded={launcher}\n >\n <Text fontSize=\"$2\" color=\"$color12\">\n {meetLabel}\n </Text>\n </XStack>\n ) : null}\n\n {/* The property's own nav. Below $sm it moves into the menu button\n opposite — a row of labels plus a full-bleed panel does not fit a\n phone, and shrinking it to fit is how the old mobile menus became a\n second, diverging implementation. */}\n <XStack items=\"center\" gap=\"$0.5\" flex={1} minW={0} $sm={{ display: 'none' }}>\n {header.localNav.map((l) => (\n <XStack\n key={l.id}\n px=\"$2.5\"\n py=\"$1.5\"\n rounded=\"$3\"\n hoverStyle={{ bg: '$color4' }}\n onMouseEnter={() => launcher && setLauncher(false)}\n >\n {link({\n href: l.href,\n children: (\n <Text fontSize=\"$2\" color={active === l.id ? '$color12' : '$color11'}>\n {l.label}\n </Text>\n ),\n })}\n </XStack>\n ))}\n </XStack>\n\n <XStack items=\"center\" gap=\"$2\" ml=\"auto\">\n {actions}\n <Cta action={header.action} link={link} />\n <XStack\n display=\"none\"\n $sm={{ display: 'flex' }}\n cursor=\"pointer\"\n px=\"$2\"\n py=\"$1.5\"\n rounded=\"$3\"\n hoverStyle={{ bg: '$color4' }}\n onPress={() => setMobile(!mobile)}\n accessibilityRole=\"button\"\n aria-label={mobile ? 'Close menu' : 'Open menu'}\n >\n <Text fontSize=\"$2\" color=\"$color12\">\n {mobile ? 'Close' : 'Menu'}\n </Text>\n </XStack>\n </XStack>\n </XStack>\n\n {launcher && menu ? <Launcher menu={menu} link={link} icon={icon} close={() => setLauncher(false)} /> : null}\n {mobile ? <MobilePanel header={header} menu={menu} link={link} icon={icon} close={() => setMobile(false)} /> : null}\n </YStack>\n )\n}\n","'use client'\n\n/**\n * SiteFooter — the ONE footer, rendering `@hanzo/products`' `FOOTER`.\n *\n * 57 hand-written footers existed across the stack, differing in link set, column\n * count, type scale and legal line, so the bottom of every Hanzo page quietly\n * disagreed about what the company offers. The content question is already\n * settled in `@hanzo/products` (columns built from `FAMILY` and `DESTINATIONS`,\n * so a footer link and its menu twin cannot diverge); this is only the renderer.\n *\n * Deliberately not a mirror of the launcher: a footer is an index, not a menu, so\n * every entry is a plain link and no product copy is repeated here.\n */\nimport type { ReactNode } from 'react'\nimport { Separator, Text, XStack, YStack } from '@hanzo/gui'\nimport type { Footer } from '@hanzo/products'\n\nimport type { LinkRender } from './SiteNav'\n\nconst isExternal = (href: string) => /^https?:\\/\\//.test(href)\n\nconst defaultLink: LinkRender = ({ href, children }) => (\n <a\n href={href}\n {...(isExternal(href) ? { target: '_blank', rel: 'noopener noreferrer' } : null)}\n style={{ textDecoration: 'none', color: 'inherit' }}\n >\n {children}\n </a>\n)\n\nexport type SiteFooterProps = {\n /** The footer model — `FOOTER` from @hanzo/products. */\n footer: Footer\n /** Brand slot above the columns — usually `<BrandMark/>`. */\n brand?: ReactNode\n /** One line under the brand: what this company is. */\n tagline?: string\n /** Social / status / app-store row, rendered opposite the copyright. */\n meta?: ReactNode\n /** Host link primitive. */\n link?: LinkRender\n}\n\nexport function SiteFooter({ footer, brand, tagline, meta, link = defaultLink }: SiteFooterProps) {\n return (\n <YStack borderTopWidth={1} borderColor=\"$borderColor\" bg=\"$background\" px=\"$4\" py=\"$5\" gap=\"$4\">\n <XStack gap=\"$5\" flexWrap=\"wrap\" items=\"flex-start\">\n {brand || tagline ? (\n <YStack gap=\"$2\" minW={200} flex={1}>\n {brand}\n {tagline ? (\n <Text fontSize={12} color=\"$color10\" lineHeight={18} maxW={280}>\n {tagline}\n </Text>\n ) : null}\n </YStack>\n ) : null}\n\n {footer.columns.map((column) => (\n <YStack key={column.id} gap=\"$1.5\" minW={140}>\n <Text fontSize={11} color=\"$color10\" textTransform=\"uppercase\" letterSpacing={0.5} pb=\"$1\">\n {column.title}\n </Text>\n {column.links.map((l) => (\n <XStack key={l.id} hoverStyle={{ opacity: 0.7 }}>\n {link({\n href: l.href,\n children: (\n <Text fontSize=\"$2\" color=\"$color11\">\n {l.label}\n </Text>\n ),\n })}\n </XStack>\n ))}\n </YStack>\n ))}\n </XStack>\n\n <Separator />\n\n <XStack items=\"center\" gap=\"$3\" flexWrap=\"wrap\">\n <Text fontSize={12} color=\"$color10\">\n {footer.legal.copyright}\n </Text>\n <XStack items=\"center\" gap=\"$3\" flexWrap=\"wrap\">\n {footer.legal.links.map((l) => (\n <XStack key={l.id} hoverStyle={{ opacity: 0.7 }}>\n {link({\n href: l.href,\n children: (\n <Text fontSize={12} color=\"$color10\">\n {l.label}\n </Text>\n ),\n })}\n </XStack>\n ))}\n </XStack>\n {meta ? (\n <XStack ml=\"auto\" items=\"center\" gap=\"$3\">\n {meta}\n </XStack>\n ) : null}\n </XStack>\n </YStack>\n )\n}\n","'use client'\n\n/**\n * CommerceResource — the ONE list surface every Commerce store page renders (Products,\n * Orders, Customers, Inventory, Promotions). It owns the fetch → honest loading / empty\n * / error lifecycle (identical to the Subscriptions/Functions modules) so each page is\n * just a title + a `load()` + its columns; there is one way to render a store list.\n *\n * `load` is held in a ref so a page can pass an inline `() => CommerceApi.products()`\n * without re-triggering the mount effect — the list fetches once and on explicit\n * Refresh. Every row is real (the caller's org-scoped `/v1` fetch); an empty store\n * shows the honest empty copy, never a placeholder row. Both the console's Store\n * category and the standalone Commerce admin render THIS.\n */\nimport { useCallback, useEffect, useRef, useState, type ReactNode } from 'react'\nimport { Button, XStack } from '@hanzo/gui'\nimport { RefreshCw } from '@hanzogui/lucide-icons-2'\n\nimport { PageHeader } from './PageHeader'\nimport { DataTable, type Column } from './DataTable'\nimport { BackendStateCard, classifyBackend, type BackendState } from './BackendState'\n\n/** A commerce list page — the rows on this page plus the total the backend reports. */\nexport type CommerceList<T> = { rows: T[]; count: number }\n\ntype Async<T> = { phase: 'loading' } | { phase: 'error'; error: BackendState } | { phase: 'ready'; data: T }\n\nexport function CommerceResource<T>({\n title,\n subtitle,\n load,\n columns,\n rowKey,\n empty,\n hint,\n actions,\n}: {\n title: string\n subtitle: string\n /** Real per-org fetch (via the `/commerce` proxy). Identity may change per render. */\n load: () => Promise<CommerceList<T>>\n columns: Column<T>[]\n rowKey: (row: T) => string\n empty: string\n /** BackendStateCard hint — the real endpoint, e.g. `GET /v1/product`. */\n hint: string\n /** Optional extra header actions (given the reload fn), left of Refresh. */\n actions?: (reload: () => void) => ReactNode\n}) {\n const [state, setState] = useState<Async<T[]>>({ phase: 'loading' })\n const loadRef = useRef(load)\n loadRef.current = load\n\n const reload = useCallback(() => {\n setState({ phase: 'loading' })\n loadRef\n .current()\n .then((r) => setState({ phase: 'ready', data: r.rows }))\n .catch((e) => setState({ phase: 'error', error: classifyBackend(e) }))\n }, [])\n\n useEffect(() => {\n reload()\n }, [reload])\n\n return (\n <>\n <PageHeader\n title={title}\n subtitle={subtitle}\n actions={\n <XStack gap=\"$2\">\n {actions?.(reload)}\n <Button size=\"$2\" icon={<RefreshCw size={15} />} onPress={reload}>\n Refresh\n </Button>\n </XStack>\n }\n />\n\n {state.phase === 'error' ? (\n <BackendStateCard state={state.error} onRetry={reload} hint={hint} />\n ) : (\n <DataTable\n columns={columns}\n rows={state.phase === 'ready' ? state.data : []}\n loading={state.phase === 'loading'}\n rowKey={rowKey}\n empty={empty}\n />\n )}\n </>\n )\n}\n","'use client'\n\n/**\n * The console's ONE destructive-confirm panel, rendered inside a `SlideOver`.\n *\n * A delete is the only irreversible action a product module offers, so it gets a\n * single shared shape: the consequence stated in full, a red confirm, a cancel, and\n * an inline honest error (via `classifyBackend`) when the call fails — the panel\n * stays open on failure so the user sees WHY instead of a silently-closed drawer.\n */\nimport { useState } from 'react'\nimport { Button, Text, XStack, YStack } from '@hanzo/gui'\nimport { Trash2 } from '@hanzogui/lucide-icons-2'\n\nimport { classifyBackend } from './BackendState'\nimport { useEmit } from './instrument'\n\nexport function ConfirmDelete({\n message,\n confirmLabel,\n run,\n onDone,\n}: {\n /** The full consequence, stated plainly (\"Delete X and all N of its records?\"). */\n message: string\n confirmLabel: string\n run: () => Promise<void>\n /** Called on success AND on cancel — the caller closes the drawer and reloads. */\n onDone: () => void\n}) {\n const [busy, setBusy] = useState(false)\n const [err, setErr] = useState<string | null>(null)\n const track = useEmit()\n\n const go = async () => {\n setBusy(true)\n setErr(null)\n track({ component: 'ConfirmDelete', action: 'confirm', id: confirmLabel })\n try {\n await run()\n onDone()\n } catch (e) {\n const message = classifyBackend(e).message || 'Failed to delete.'\n track({ component: 'ConfirmDelete', action: 'error', id: confirmLabel, value: message })\n setErr(message)\n setBusy(false)\n }\n }\n\n return (\n <YStack gap=\"$3\">\n <Text fontSize=\"$3\" color=\"$color11\">\n {message}\n </Text>\n {err ? (\n <Text fontSize=\"$2\" color=\"$red10\">\n {err}\n </Text>\n ) : null}\n <XStack gap=\"$2\" flexWrap=\"wrap\">\n <Button\n onPress={go}\n disabled={busy}\n icon={<Trash2 size={15} />}\n style={{ backgroundColor: '#dc2626', borderColor: '#dc2626', color: '#fff' }}\n >\n {busy ? 'Deleting…' : confirmLabel}\n </Button>\n <Button\n chromeless\n onPress={() => {\n track({ component: 'ConfirmDelete', action: 'cancel', id: confirmLabel })\n onDone()\n }}\n disabled={busy}\n >\n Cancel\n </Button>\n </XStack>\n </YStack>\n )\n}\n","'use client'\n\n/**\n * List-filter atoms — the ONE segmented pill control and the ONE search box every\n * table surface filters with.\n *\n * These were first written for the Inference endpoints dashboard; promoted here so a\n * sibling product (Infrastructure, …) never reaches into `inference/` for shell chrome\n * — the same separation-of-concerns move `ui/Metric.tsx` made out of `gpus/`.\n * `inference/parts.tsx` re-exports them, so there is exactly one definition.\n */\nimport type { ComponentProps } from 'react'\nimport { Button, Input, Text, XStack } from '@hanzo/gui'\nimport { Search } from '@hanzogui/lucide-icons-2'\n\nimport { textSize, useEmit } from './instrument'\n\n/** One pill in a segmented control. */\nexport type Option<T extends string> = { label: string; value: T }\n\n/** A compact segmented pill control — the ONE way filters/ranges/toggles render. */\nexport function Segmented<T extends string>({\n options,\n value,\n onChange,\n size = '$2',\n name,\n}: {\n options: Option<T>[]\n value: T\n onChange: (v: T) => void\n size?: ComponentProps<typeof Button>['size']\n /** Names the filter in analytics (`status`, `range`); defaults to `Segmented`. */\n name?: string\n}) {\n const track = useEmit()\n return (\n <XStack gap=\"$1\" flexWrap=\"wrap\" items=\"center\">\n {options.map((o) => {\n const active = o.value === value\n return (\n <Button\n key={o.value}\n size={size}\n bg={active ? '$color5' : 'transparent'}\n borderWidth={1}\n borderColor={active ? '$color7' : '$borderColor'}\n aria-pressed={active}\n onPress={() => {\n track({ component: 'Segmented', action: 'filter', id: name, value: o.value })\n onChange(o.value)\n }}\n >\n <Text fontSize=\"$2\" fontWeight={active ? '700' : '500'} color={active ? '$color12' : '$color11'}>\n {o.label}\n </Text>\n </Button>\n )\n })}\n </XStack>\n )\n}\n\n/** A search input with a leading magnifier. */\nexport function SearchInput({\n value,\n onChange,\n placeholder,\n name,\n}: {\n value: string\n onChange: (v: string) => void\n placeholder?: string\n /** Names the search box in analytics; defaults to `SearchInput`. */\n name?: string\n}) {\n const track = useEmit()\n // The QUERY IS NEVER SENT — only how long it was. The shape of the behaviour\n // (did people search? how specifically?) without the content.\n const onChangeTracked = (v: string) => {\n track({ component: 'SearchInput', action: 'search', id: name, value: textSize(v) })\n onChange(v)\n }\n return (\n <XStack flex={1} minW={180} items=\"center\" gap=\"$2\" px=\"$3\" borderWidth={1} borderColor=\"$borderColor\" rounded=\"$4\" bg=\"$color1\">\n <Search size={15} color=\"$color10\" />\n <Input flex={1} value={value} onChangeText={onChangeTracked} placeholder={placeholder} borderWidth={0} bg=\"transparent\" px=\"$0\" fontSize=\"$3\" />\n </XStack>\n )\n}\n","/**\n * Brand identities for the animated logo — the white-label source of truth.\n *\n * ONE component (`AnimatedLogo`) renders any brand: pass a `BrandIdentity` and it\n * shows THAT brand's mark + name (never a hardcoded Hanzo asset). The mark\n * geometry is byte-identical to the console's host-driven brand registry\n * (`console/src/lib/branding/brands.ts`) so a lux/zoo/pars surface renders the\n * exact same glyph the chrome already uses — one mark, everywhere.\n *\n * `content` is inner SVG markup (a build-time-trusted constant, never user\n * input). Marks use `currentColor` so they inherit the surrounding text color and\n * adapt to the dark/light theme with no per-theme asset — except Zoo, whose mark\n * is intentionally full-color (`fullColor`).\n */\n\nexport interface BrandIdentity {\n /** Stable id — also the IAM org slug (hanzo/lux/zoo/pars). */\n id: string\n /** Brand word shown before the surface (e.g. \"Hanzo\" → \"Hanzo Cloud\"). */\n name: string\n /** viewBox for the inline mark SVG. */\n viewBox: string\n /** Inner SVG markup for the mark (multi-path, build-time-trusted constant). */\n content: string\n /** The mark carries its own fills (Zoo) — do NOT force `currentColor`. */\n fullColor?: boolean\n /** Brand home, used as the logo link's default href. */\n href?: string\n}\n\n/**\n * The canonical Hanzo block-\"H\" — 5 paths, no opacity facets, `currentColor`.\n * Byte-identical to the mark shipped in the chrome (HanzoMark + brand registry),\n * so the default render matches the existing product surfaces exactly.\n */\nexport const HANZO_MARK_CONTENT =\n '<path d=\"M22.21 67V44.6369H0V67H22.21Z\"/>' +\n '<path d=\"M66.7038 22.3184H22.2534L0.0878906 44.6367H44.4634L66.7038 22.3184Z\"/>' +\n '<path d=\"M22.21 0H0V22.3184H22.21V0Z\"/>' +\n '<path d=\"M66.7198 0H44.5098V22.3184H66.7198V0Z\"/>' +\n '<path d=\"M66.7198 67V44.6369H44.5098V67H66.7198Z\"/>'\n\nexport const HANZO: BrandIdentity = {\n id: 'hanzo',\n name: 'Hanzo',\n viewBox: '0 0 67 67',\n content: HANZO_MARK_CONTENT,\n href: 'https://hanzo.ai',\n}\n\n/** Lux — downward triangle (the explorer/console registry mark, currentColor). */\nexport const LUX: BrandIdentity = {\n id: 'lux',\n name: 'Lux',\n viewBox: '0 0 100 100',\n content: '<path d=\"M50 85 L15 25 L85 25 Z\"/>',\n href: 'https://lux.network',\n}\n\n/** Zoo — interlocking circles (intentional full-color fills, not currentColor). */\nexport const ZOO: BrandIdentity = {\n id: 'zoo',\n name: 'Zoo',\n viewBox: '0 0 1024 1024',\n fullColor: true,\n content:\n '<defs>' +\n '<clipPath id=\"zooClip\"><circle cx=\"512\" cy=\"511\" r=\"270\"/></clipPath>' +\n '<clipPath id=\"zooGClip\"><circle cx=\"513\" cy=\"369\" r=\"234\"/></clipPath>' +\n '<clipPath id=\"zooRClip\"><circle cx=\"365\" cy=\"595\" r=\"234\"/></clipPath>' +\n '</defs>' +\n '<g clip-path=\"url(#zooClip)\">' +\n '<circle cx=\"513\" cy=\"369\" r=\"234\" fill=\"#00A652\"/>' +\n '<circle cx=\"365\" cy=\"595\" r=\"234\" fill=\"#ED1C24\"/>' +\n '<circle cx=\"643\" cy=\"595\" r=\"234\" fill=\"#2E3192\"/>' +\n '<g clip-path=\"url(#zooGClip)\">' +\n '<circle cx=\"365\" cy=\"595\" r=\"234\" fill=\"#FCF006\"/>' +\n '<circle cx=\"643\" cy=\"595\" r=\"234\" fill=\"#01ACF1\"/>' +\n '</g>' +\n '<g clip-path=\"url(#zooRClip)\">' +\n '<circle cx=\"643\" cy=\"595\" r=\"234\" fill=\"#EA018E\"/>' +\n '</g>' +\n '<g clip-path=\"url(#zooGClip)\">' +\n '<g clip-path=\"url(#zooRClip)\">' +\n '<circle cx=\"643\" cy=\"595\" r=\"234\" fill=\"#FFFFFF\"/>' +\n '</g></g></g>',\n href: 'https://zoo.ngo',\n}\n\n/** Pars — Persian 8-pointed star (the explorer/console registry mark). */\nexport const PARS: BrandIdentity = {\n id: 'pars',\n name: 'Pars',\n viewBox: '-120 -120 240 240',\n content:\n '<path d=\"M0,-100 L30,-60 L100,-40 L60,0 L100,40 L30,60 L0,100 L-30,60 L-100,40 L-60,0 L-100,-40 L-30,-60 Z\"' +\n ' fill=\"none\" stroke=\"currentColor\" stroke-width=\"4\" stroke-linejoin=\"round\"/>' +\n '<path d=\"M0,-70 L22,-42 L70,-28 L42,0 L70,28 L22,42 L0,70 L-22,42 L-70,28 L-42,0 L-70,-28 L-22,-42 Z\"' +\n ' fill=\"currentColor\" fill-opacity=\"0.15\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linejoin=\"round\"/>' +\n '<circle r=\"55\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" opacity=\"0.4\"/>' +\n '<circle r=\"35\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" opacity=\"0.4\"/>' +\n '<circle r=\"8\" fill=\"currentColor\"/>',\n href: 'https://pars.network',\n}\n\n/** All shipped brands, keyed by id — the white-label registry. */\nexport const BRANDS: Record<string, BrandIdentity> = { hanzo: HANZO, lux: LUX, zoo: ZOO, pars: PARS }\n\n/** Resolve a brand by id, falling back to Hanzo (the canonical default). */\nexport function resolveBrand(id?: string): BrandIdentity {\n return (id && BRANDS[id]) || HANZO\n}\n","/**\n * Pure logic for `AnimatedLogo` — the wordmark ⇄ mark collapse. No React, no DOM,\n * no @hanzo/gui: just the state → style math, unit-tested in a plain Node env\n * (the house convention — view components are proven by build + visual e2e).\n */\n\n/**\n * The Hanzo house motion curve (expo-out) — the ONE easing used across the app\n * shell (sidebar collapse, fade-up) and the animated mark's fold-in. Reused here\n * so the wordmark collapse feels of a piece with every other Hanzo surface.\n */\nexport const HOUSE_EASE = 'cubic-bezier(0.16, 1, 0.3, 1)'\n\n/** Default collapse/expand duration (ms) — echoes the mark's ~0.4s fold-in. */\nexport const DEFAULT_DURATION_MS = 360\n\n/** Default hold before the wordmark auto-collapses to the mark on mount (ms). */\nexport const DEFAULT_INTRO_MS = 1500\n\n/** Default gap (px) between the mark and the wordmark when expanded. */\nexport const DEFAULT_GAP = 8\n\n/** The full accessible/visible name: brand word + optional surface word. */\nexport function wordmarkText(name: string, surface?: string): string {\n const s = surface?.trim()\n return s ? `${name} ${s}` : name\n}\n\n/**\n * Is the wordmark shown? Expanded whenever the user is pointing at or keyboard-\n * focused on the logo, OR during the on-mount intro (full name shows, then tucks\n * into the mark). Hover/focus always win, so the name is reachable after intro.\n */\nexport function isExpanded(s: { hovered: boolean; focused: boolean; introShowing: boolean }): boolean {\n return s.hovered || s.focused || s.introShowing\n}\n\nexport interface WordmarkStyleInput {\n expanded: boolean\n /** Measured natural width (px); undefined before first measure (SSR/first paint). */\n naturalWidth?: number\n gap: number\n durationMs: number\n easing: string\n /** prefers-reduced-motion: no transition (instant), so there is no motion. */\n reduce: boolean\n}\n\nexport interface WordmarkStyle {\n width: number | string\n opacity: number\n marginLeft: number\n transition: string\n}\n\n/**\n * The inline style for the clipping wordmark wrapper. Collapsed = width 0 /\n * opacity 0 / no gap (the name tucks fully into the mark); expanded = the measured\n * natural width (or `auto` until measured). Under reduced motion the transition is\n * dropped entirely — the state still resolves, just without animating.\n */\nexport function wordmarkStyle(i: WordmarkStyleInput): WordmarkStyle {\n return {\n width: i.expanded ? (i.naturalWidth ?? 'auto') : 0,\n opacity: i.expanded ? 1 : 0,\n marginLeft: i.expanded ? i.gap : 0,\n transition: i.reduce\n ? 'none'\n : `width ${i.durationMs}ms ${i.easing}, opacity ${i.durationMs}ms ${i.easing}, margin-left ${i.durationMs}ms ${i.easing}`,\n }\n}\n","'use client'\n\n/**\n * AnimatedLogo — the ONE animated brand logo across every Hanzo surface.\n *\n * On mount the full wordmark shows (\"Hanzo {surface}\", e.g. \"Hanzo Cloud\"), then\n * collapses INTO just the brand mark; hover or keyboard-focus expands it back to\n * the full name. This is the shared brand-identity primitive — the behavior that\n * ships on hanzo.ai and cloud.hanzo.ai, made one component, white-label aware.\n *\n * <AnimatedLogo surface=\"Cloud\" /> // Hanzo Cloud → H\n * <AnimatedLogo surface=\"Studio\" /> // Hanzo Studio → H\n * <AnimatedLogo surface=\"Cloud\" brand={LUX} /> // Lux Cloud → Lux mark\n *\n * Presentational + host-agnostic (plain React + inline SVG, no @hanzo/gui, no\n * framer): drops into any surface — the Tamagui console, the Next marketing site,\n * a desktop shell. Theme-aware (the mark is `currentColor`), and accessible: the\n * accessible name is always the full \"Hanzo {surface}\" regardless of the visual\n * collapse, and `prefers-reduced-motion` yields a static mark with no animation.\n */\n\nimport React, { useEffect, useLayoutEffect, useRef, useState } from 'react'\n\nimport { HANZO, type BrandIdentity } from './brand'\nimport {\n DEFAULT_DURATION_MS,\n DEFAULT_GAP,\n DEFAULT_INTRO_MS,\n HOUSE_EASE,\n isExpanded,\n wordmarkStyle,\n wordmarkText,\n} from './animatedLogo.logic'\n\nexport interface AnimatedLogoProps {\n /** Surface word after the brand (\"AI\", \"Cloud\", \"Studio\", \"Chat\", \"App\", \"Console\", \"Team\"). */\n surface?: string\n /** Brand identity — mark + name + home. Defaults to Hanzo. */\n brand?: BrandIdentity\n /** Mark size in px (square). Default 22. */\n size?: number\n /** Gap in px between the mark and the wordmark when expanded. Default 8. */\n gap?: number\n /** Hold in ms before the wordmark auto-collapses on mount. 0 disables the intro\n * (starts collapsed). Default 1500. */\n introMs?: number\n /** Collapse/expand duration in ms. Default 360 (echoes the mark's fold-in). */\n durationMs?: number\n /** Easing curve. Default the Hanzo house expo-out. */\n easing?: string\n /** Link target. Defaults to the brand's home. */\n href?: string\n onClick?: React.MouseEventHandler\n /** Root element/component (e.g. a router `Link`). Default `'a'`. */\n component?: React.ElementType\n className?: string\n style?: React.CSSProperties\n /** Override the accessible name (default is the full \"Hanzo {surface}\"). */\n 'aria-label'?: string\n}\n\n/** SSR-safe prefers-reduced-motion. Starts false (server), corrects on mount. */\nfunction usePrefersReducedMotion(): boolean {\n const [reduce, setReduce] = useState(false)\n useEffect(() => {\n if (typeof window === 'undefined' || !window.matchMedia) return\n const mq = window.matchMedia('(prefers-reduced-motion: reduce)')\n const sync = () => setReduce(mq.matches)\n sync()\n mq.addEventListener('change', sync)\n return () => mq.removeEventListener('change', sync)\n }, [])\n return reduce\n}\n\nexport function AnimatedLogo({\n surface,\n brand = HANZO,\n size = 22,\n gap = DEFAULT_GAP,\n introMs = DEFAULT_INTRO_MS,\n durationMs = DEFAULT_DURATION_MS,\n easing = HOUSE_EASE,\n href,\n onClick,\n component,\n className,\n style,\n 'aria-label': ariaLabel,\n}: AnimatedLogoProps) {\n const reduce = usePrefersReducedMotion()\n const label = ariaLabel ?? wordmarkText(brand.name, surface)\n\n const [hovered, setHovered] = useState(false)\n const [focused, setFocused] = useState(false)\n // Show the full wordmark on first paint (name shows on load), then collapse.\n const [introShowing, setIntroShowing] = useState(introMs > 0)\n const [naturalWidth, setNaturalWidth] = useState<number | undefined>(undefined)\n const wordRef = useRef<HTMLSpanElement>(null)\n\n // Mount intro: hold the name, then tuck it into the mark. Reduced motion skips\n // the timeline entirely (static mark), so there is no animation.\n useEffect(() => {\n if (introMs <= 0) return\n if (reduce) {\n setIntroShowing(false)\n return\n }\n const t = setTimeout(() => setIntroShowing(false), introMs)\n return () => clearTimeout(t)\n }, [introMs, reduce])\n\n // Measure the wordmark's natural width so it can animate to/from an exact px\n // width (auto is not animatable). `scrollWidth` reports the full content width\n // in every state (the wrapper is overflow-hidden + nowrap). Re-measure when the\n // text changes and once the webfont has settled.\n useLayoutEffect(() => {\n const el = wordRef.current\n if (!el) return\n const measure = () => setNaturalWidth(el.scrollWidth)\n measure()\n const fonts = (typeof document !== 'undefined' && (document as Document).fonts) || null\n if (fonts?.ready) fonts.ready.then(measure).catch(() => {})\n }, [brand.name, surface])\n\n const expanded = isExpanded({ hovered, focused, introShowing })\n const ws = wordmarkStyle({ expanded, naturalWidth, gap, durationMs, easing, reduce })\n\n const Root = component ?? 'a'\n const isAnchor = Root === 'a'\n\n return (\n <Root\n {...(isAnchor ? { href: href ?? brand.href ?? '/' } : { href: href ?? brand.href })}\n onClick={onClick}\n aria-label={label}\n title={label}\n className={className}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n textDecoration: 'none',\n color: 'inherit',\n cursor: 'pointer',\n ...style,\n }}\n >\n <svg\n width={size}\n height={size}\n viewBox={brand.viewBox}\n aria-hidden=\"true\"\n focusable=\"false\"\n fill={brand.fullColor ? undefined : 'currentColor'}\n style={{ display: 'block', flexShrink: 0 }}\n // `content` is a build-time-trusted constant (see ./brand), never user input.\n dangerouslySetInnerHTML={{ __html: brand.content }}\n />\n <span\n ref={wordRef}\n aria-hidden=\"true\"\n style={{\n display: 'inline-block',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n fontWeight: 600,\n fontSize: 15,\n letterSpacing: '-0.01em',\n lineHeight: 1,\n width: ws.width,\n opacity: ws.opacity,\n marginLeft: ws.marginLeft,\n transition: ws.transition,\n }}\n >\n {label}\n </span>\n </Root>\n )\n}\n","'use client'\n\n/**\n * FadeIn — the ONE entrance animation for the console.\n *\n * A thin wrapper that applies the shared `.hz-fade-up` keyframe (defined once in\n * globals.css) plus an optional stagger delay, so sections and cards rise in the\n * way the hanzo.ai marketing surface does. Framework-free (no animation driver,\n * no JS observers) so it works under static export and honors\n * `prefers-reduced-motion` (handled in the CSS). Pass `index` to stagger a list\n * (delay = index * step), or `delayMs` for an explicit delay.\n */\nimport type { CSSProperties, ReactNode } from 'react'\n\nexport function FadeIn({\n children,\n index = 0,\n step = 50,\n delayMs,\n style,\n}: {\n children: ReactNode\n /** Position in a list — staggers the entrance by `index * step` ms. */\n index?: number\n /** Per-index stagger in ms (default 50). */\n step?: number\n /** Explicit delay in ms; overrides the index-based stagger. */\n delayMs?: number\n /** Extra styles for the wrapper (e.g. layout/centering). */\n style?: CSSProperties\n}) {\n const delay = delayMs ?? index * step\n return (\n <div className=\"hz-fade-up\" style={{ animationDelay: `${delay}ms`, ...style }}>\n {children}\n </div>\n )\n}\n","'use client'\n\n/**\n * ProductIcon — the Linear-style product tile: a rounded-square block filled with\n * the product's accent color, with the product glyph knocked out in near-white so\n * it reads \"cut out\" of the color. This is the ONE way a product icon renders in\n * the console chrome (sidebar nav, command palette, product overview header) — a\n * bare tinted glyph is replaced everywhere by this tile.\n *\n * Prop-driven and pure: the accent hex is resolved by the caller (registry-curated\n * → per-user override → stable hash, via `useProductColors().colorOf`) and passed\n * in as `color`, so this component owns only the look, never the palette. With no\n * color it falls back to a tasteful neutral chip ($color12 fill + $color1 glyph) —\n * never a random hue — matching the first-party `ProviderLogo` mark, so first-party\n * marks and product tiles read as one family.\n *\n * The knock-out is the same technique the color-swatch button uses (a raw-hex\n * `backgroundColor` fill + a `#ffffff` glyph) so an arbitrary product accent tints\n * cleanly outside Gui's token palette, in the ONE sanctioned place.\n */\nimport { XStack } from '@hanzo/gui'\n\nimport { asColor, type IconLike } from './color'\n\nexport function ProductIcon({\n icon: Icon,\n color,\n size = 24,\n}: {\n icon: IconLike\n /** The product's resolved accent hex (e.g. `#5E6AD2`). Omit for the neutral chip. */\n color?: string\n size?: number\n}) {\n const radius = Math.round(size * 0.28)\n const glyph = Math.round(size * 0.58)\n const tinted = typeof color === 'string' && color.trim() !== ''\n\n // Accent tile — product color fill + near-white glyph (the Linear \"cut out\").\n if (tinted) {\n return (\n <XStack\n width={size}\n height={size}\n items=\"center\"\n justify=\"center\"\n rounded={radius}\n style={{ backgroundColor: color }}\n >\n <Icon size={glyph} color={asColor('#ffffff')} />\n </XStack>\n )\n }\n\n // No accent — a tasteful neutral chip (consistent with ProviderLogo's mark).\n return (\n <XStack width={size} height={size} items=\"center\" justify=\"center\" rounded={radius} bg=\"$color12\">\n <Icon size={glyph} color=\"$color1\" />\n </XStack>\n )\n}\n","'use client'\n\n/**\n * ProviderLogo — a small provider/model avatar resolved from a provider NAME\n * alone (no external logo URLs, no network). Self-contained and prop-driven so\n * it lifts cleanly into `@hanzo/ui` for hanzo.ai / @hanzo/dev / the desktop app.\n *\n * Resolution order:\n * 1. First-party — Zen renders the real ensō mark, Hanzo the real block-H mark\n * (same geometry as @zenlm/logo / @hanzo/logo), knocked out of a filled\n * rounded tile so our own models read distinctly and on-brand.\n * 2. A known provider → its mapped @hanzogui/lucide-icons-2 glyph.\n * 3. Otherwise → a stable initials chip (1–2 letters from the name).\n *\n * Honest by construction: we never claim an official brand logo we don't ship —\n * unknown providers get clean initials, not a guessed icon. Colors are @hanzo/gui\n * theme tokens so the mark themes with the shell.\n */\nimport { Text, XStack, useTheme } from '@hanzo/gui'\nimport { Boxes, Server, Globe, Cpu } from '@hanzogui/lucide-icons-2'\n\ntype IconCmp = typeof Globe\n\n/** Curated, extendable provider→glyph map (lowercased keys). Brand-neutral avatars. */\nconst KNOWN: Record<string, IconCmp> = {\n openrouter: Globe,\n nvidia: Cpu,\n}\n\nconst isFirstParty = (provider: string): boolean => {\n const p = provider.trim().toLowerCase()\n return p === 'hanzo' || p === 'zen'\n}\n\n/** The Zen ensō mark — identical geometry to @zenlm/logo (svg/zen-enso.svg). */\nfunction EnsoMark({ size, color }: { size: number; color: string }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 100 100\" aria-hidden=\"true\">\n <path d=\"M66.22 83.26 A37 37 0 1 1 85.57 60.20\" fill=\"none\" stroke={color} strokeWidth={11} strokeLinecap=\"round\" />\n </svg>\n )\n}\n\n/** The Hanzo block-H mark — identical geometry to @hanzo/logo (app/icon.svg). */\nconst HANZO_PATHS = [\n 'M22.21 67V44.6369H0V67H22.21Z',\n 'M66.7038 22.3184H22.2534L0.0878906 44.6367H44.4634L66.7038 22.3184Z',\n 'M22.21 0H0V22.3184H22.21V0Z',\n 'M66.7198 0H44.5098V22.3184H66.7198V0Z',\n 'M66.7198 67V44.6369H44.5098V67H66.7198Z',\n]\nfunction HanzoHMark({ size, color }: { size: number; color: string }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 67 67\" aria-hidden=\"true\">\n {HANZO_PATHS.map((d) => (\n <path key={d} d={d} fill={color} />\n ))}\n </svg>\n )\n}\n\n/** 1–2 uppercase initials from a provider name: words→first letters, else first 2 chars. */\nexport function providerInitials(provider: string): string {\n const name = provider.trim()\n if (!name) return '•'\n const words = name.split(/[\\s/_-]+/).filter(Boolean)\n if (words.length >= 2) return (words[0][0] + words[1][0]).toUpperCase()\n return name.slice(0, 2).toUpperCase()\n}\n\nexport function ProviderLogo({ provider, size = 24 }: { provider: string; size?: number }) {\n const theme = useTheme()\n const radius = Math.round(size * 0.28)\n const iconSize = Math.round(size * 0.56)\n\n // First-party (Zen/Hanzo) — the real brand mark knocked out of a filled tile.\n if (isFirstParty(provider)) {\n const fg = theme.color1?.get() ?? '#000000' // cut-out mark: the tile's contrast color\n const markSize = Math.round(size * 0.66)\n const isZen = provider.trim().toLowerCase() === 'zen'\n return (\n <XStack width={size} height={size} items=\"center\" justify=\"center\" rounded={radius} bg=\"$color12\">\n {isZen ? <EnsoMark size={markSize} color={fg} /> : <HanzoHMark size={Math.round(size * 0.56)} color={fg} />}\n </XStack>\n )\n }\n\n // A known provider with a curated, brand-neutral glyph.\n const Known = KNOWN[provider.trim().toLowerCase()]\n if (Known) {\n return (\n <XStack\n width={size}\n height={size}\n items=\"center\"\n justify=\"center\"\n rounded={radius}\n bg=\"$color3\"\n borderWidth={1}\n borderColor=\"$borderColor\"\n >\n <Known size={iconSize} color=\"$color11\" />\n </XStack>\n )\n }\n\n // Otherwise — a clean, stable initials chip (no fabricated brand logo).\n return (\n <XStack\n width={size}\n height={size}\n items=\"center\"\n justify=\"center\"\n rounded={radius}\n bg=\"$color3\"\n borderWidth={1}\n borderColor=\"$borderColor\"\n >\n <Text fontSize={Math.round(size * 0.4)} fontWeight=\"800\" color=\"$color11\">\n {providerInitials(provider)}\n </Text>\n </XStack>\n )\n}\n\n/** A generic fallback mark for an unspecified provider (used sparingly). */\nexport function GenericLogo({ size = 24 }: { size?: number }) {\n return (\n <XStack width={size} height={size} items=\"center\" justify=\"center\" rounded={Math.round(size * 0.28)} bg=\"$color3\" borderWidth={1} borderColor=\"$borderColor\">\n <Server size={Math.round(size * 0.56)} color=\"$color11\" />\n </XStack>\n )\n}\n\n// Boxes is re-exported as the conventional \"custom model\" mark for callers that\n// render a non-provider tile next to ProviderLogo (keeps the icon source single).\nexport { Boxes as CustomModelMark }\n","'use client'\n\n/**\n * Reorder — a tiny pointer-driven drag-to-reorder list. No dependency: it uses\n * Pointer Events (so it works with mouse AND touch) and CSS transforms, matching\n * the shell's transform-driven motion. Rows are a FIXED height (all pinned rows\n * are), which keeps the \"where does it drop?\" math exact and pure (`targetIndex`)\n * and the reflow buttery — the lifted row follows the pointer 1:1 while its\n * displaced siblings ease into place.\n *\n * The list is controlled: `onReorder(from, to)` fires once on drop; the parent\n * owns the data (here, the account-backed pins model). `renderItem` gets a\n * `handle` to spread on the drag affordance so the rest of the row stays\n * interactive (tap to open, etc.).\n */\nimport { useCallback, useRef, useState, type ReactNode } from 'react'\nimport { YStack } from '@hanzo/gui'\n\n/** Final index for a drag: start + rounded rows travelled, clamped. PURE. */\nexport function targetIndex(from: number, dy: number, rowH: number, count: number): number {\n if (rowH <= 0 || count <= 0) return from\n const raw = from + Math.round(dy / rowH)\n return Math.max(0, Math.min(raw, count - 1))\n}\n\n/** Vertical shift for row `i` during a drag from `from`→`to` (the dragged row\n * follows the pointer; rows between them make room). PURE. */\nexport function rowShift(i: number, from: number, to: number, dy: number, rowH: number): number {\n if (i === from) return dy\n if (from < to && i > from && i <= to) return -rowH\n if (from > to && i < from && i >= to) return rowH\n return 0\n}\n\nexport type DragHandle = { onPointerDown: (e: { clientY?: number; pointerId?: number; nativeEvent?: { clientY?: number } }) => void }\n\nexport function Reorder<T>({\n items,\n keyOf,\n rowHeight = 44,\n onReorder,\n renderItem,\n}: {\n items: T[]\n keyOf: (t: T) => string\n rowHeight?: number\n onReorder: (from: number, to: number) => void\n renderItem: (item: T, handle: DragHandle, dragging: boolean) => ReactNode\n}) {\n const [drag, setDrag] = useState<{ from: number; dy: number } | null>(null)\n const startRef = useRef<{ from: number; startY: number } | null>(null)\n\n const to = drag ? targetIndex(drag.from, drag.dy, rowHeight, items.length) : -1\n\n const begin = useCallback(\n (index: number) =>\n (e: { clientY?: number; pointerId?: number; nativeEvent?: { clientY?: number } }) => {\n const startY = e.clientY ?? e.nativeEvent?.clientY ?? 0\n startRef.current = { from: index, startY }\n setDrag({ from: index, dy: 0 })\n\n const move = (ev: PointerEvent) => {\n if (!startRef.current) return\n setDrag({ from: startRef.current.from, dy: ev.clientY - startRef.current.startY })\n }\n const end = () => {\n const s = startRef.current\n window.removeEventListener('pointermove', move)\n window.removeEventListener('pointerup', end)\n window.removeEventListener('pointercancel', end)\n startRef.current = null\n setDrag((d) => {\n if (s && d) {\n const t = targetIndex(s.from, d.dy, rowHeight, items.length)\n if (t !== s.from) onReorder(s.from, t)\n }\n return null\n })\n }\n window.addEventListener('pointermove', move)\n window.addEventListener('pointerup', end)\n window.addEventListener('pointercancel', end)\n },\n [items.length, rowHeight, onReorder],\n )\n\n return (\n <YStack>\n {items.map((item, i) => {\n const dragging = drag?.from === i\n const shift = drag && to >= 0 ? rowShift(i, drag.from, to, drag.dy, rowHeight) : 0\n return (\n <YStack\n key={keyOf(item)}\n height={rowHeight}\n justify=\"center\"\n className=\"hz-drag-item\"\n style={{\n transform: `translateY(${shift}px)`,\n zIndex: dragging ? 2 : 1,\n ...(dragging ? { transition: 'none', boxShadow: '0 8px 24px rgba(0,0,0,0.28)' } : null),\n }}\n >\n {renderItem(item, { onPointerDown: begin(i) }, dragging)}\n </YStack>\n )\n })}\n </YStack>\n )\n}\n","'use client'\n\n/**\n * SelectMenu — a compact, reusable dropdown select. Renders a labelled trigger (\"All\n * types\", or the chosen option) and a menu list with a check on the active option.\n * Prop-driven + self-contained. `value === null` is the \"all\"/unfiltered state.\n *\n * A thin DropdownMenu (the ONE menu mechanism) so it is pixel-identical to every other\n * menu and rides the same portal-theme-safe Portal path — no gui Popover, no Sheet\n * re-root, works on gui-native hosts.\n */\nimport type { ReactElement } from 'react'\nimport { Button, Text } from '@hanzo/gui'\nimport { ChevronDown } from '@hanzogui/lucide-icons-2'\nimport { DropdownMenu } from './menu/DropdownMenu'\nimport type { MenuItemSpec } from './menu/items'\n\nexport type SelectOption<T extends string> = { key: T; label: string }\n\nexport function SelectMenu<T extends string>({\n options,\n value,\n onChange,\n allLabel = 'All',\n icon,\n minWidth = 130,\n}: {\n options: SelectOption<T>[]\n value: T | null\n onChange: (v: T | null) => void\n /** Label shown (and first menu row) for the unfiltered `null` state. */\n allLabel?: string\n /** Optional leading icon in the trigger. */\n icon?: ReactElement\n minWidth?: number\n}) {\n const active = value === null ? null : options.find((o) => o.key === value) ?? null\n const triggerLabel = active ? active.label : allLabel\n\n const items: MenuItemSpec[] = [\n { key: '__all__', label: allLabel, selected: value === null, onSelect: () => onChange(null) },\n ...options.map((o) => ({ key: o.key, label: o.label, selected: value === o.key, onSelect: () => onChange(o.key) })),\n ]\n\n return (\n <DropdownMenu\n minWidth={Math.max(minWidth, 160)}\n trigger={\n <Button\n size=\"$2\"\n minW={minWidth}\n justify=\"space-between\"\n borderWidth={1}\n borderColor=\"$borderColor\"\n bg={value !== null ? '$color5' : 'transparent'}\n icon={icon}\n iconAfter={<ChevronDown size={14} opacity={0.6} />}\n >\n <Text fontSize=\"$2\" color=\"$color12\" numberOfLines={1} flex={1}>\n {triggerLabel}\n </Text>\n </Button>\n }\n items={items}\n />\n )\n}\n","'use client'\n\n/**\n * Toast — the ONE feedback primitive. Every mutation reports through `useToast()`\n * so success/failure looks and behaves the same everywhere. A single provider\n * holds the queue and renders the viewport (portalled top-right); there is no\n * per-call markup. Built from GUI primitives only.\n *\n * Mount `<ToastProvider>` once (the dashboard layout does). Call:\n * const toast = useToast()\n * toast.success('Created my-db')\n * toast.error(err instanceof ApiError ? err.message : 'Failed to create')\n */\nimport { createContext, useCallback, useContext, useEffect, useRef, useState, type ReactNode } from 'react'\nimport { createPortal } from 'react-dom'\nimport { Button, Card, Text, XStack, YStack } from '@hanzo/gui'\nimport { CircleCheck, CircleX, Info, X } from '@hanzogui/lucide-icons-2'\n\nimport { useEmit } from './instrument'\n\nexport type ToastKind = 'success' | 'error' | 'info'\n\nexport type ToastInput = {\n title: string\n description?: string\n kind?: ToastKind\n /** Auto-dismiss after this many ms; 0 keeps it until dismissed. */\n durationMs?: number\n}\n\ntype Toast = Required<Omit<ToastInput, 'description'>> & { id: number; description?: string }\n\ntype ToastApi = {\n toast: (t: ToastInput) => void\n success: (title: string, description?: string) => void\n error: (title: string, description?: string) => void\n info: (title: string, description?: string) => void\n dismiss: (id: number) => void\n}\n\nconst ToastContext = createContext<ToastApi | null>(null)\n\n/** Theme-aware accent per kind (adapts to light/dark). */\nconst ACCENT = {\n success: '$green10',\n error: '$red10',\n info: '$color11',\n} as const\n\nconst ICON: Record<ToastKind, typeof Info> = {\n success: CircleCheck,\n error: CircleX,\n info: Info,\n}\n\nfunction ToastCard({ t, onClose }: { t: Toast; onClose: () => void }) {\n const Icon = ICON[t.kind]\n const accent = ACCENT[t.kind]\n return (\n <Card\n width={360}\n maxWidth=\"90%\"\n p=\"$3\"\n gap=\"$2\"\n bg=\"$color2\"\n borderWidth={1}\n borderColor=\"$borderColor\"\n borderLeftWidth={3}\n borderLeftColor={accent}\n rounded=\"$4\"\n elevation=\"$2\"\n >\n <XStack gap=\"$2.5\" items=\"flex-start\">\n <YStack pt={1}>\n <Icon size={18} color={accent} />\n </YStack>\n <YStack flex={1} gap=\"$1\">\n <Text fontSize=\"$3\" fontWeight=\"700\" color=\"$color12\">\n {t.title}\n </Text>\n {t.description ? (\n <Text fontSize=\"$2\" color=\"$color11\">\n {t.description}\n </Text>\n ) : null}\n </YStack>\n <Button size=\"$1\" chromeless icon={<X size={14} />} onPress={onClose} aria-label=\"Dismiss\" />\n </XStack>\n </Card>\n )\n}\n\n/** Portalled, fixed top-right stack. Rendered only after mount (SSR-safe). */\nfunction ToastViewport({ toasts, dismiss }: { toasts: Toast[]; dismiss: (id: number) => void }) {\n const [mounted, setMounted] = useState(false)\n useEffect(() => setMounted(true), [])\n if (!mounted || typeof document === 'undefined') return null\n return createPortal(\n <div style={{ position: 'fixed', top: 16, right: 16, zIndex: 100000, pointerEvents: 'none' }}>\n <YStack gap=\"$2\" items=\"flex-end\">\n {toasts.map((t) => (\n <YStack key={t.id} pointerEvents=\"auto\">\n <ToastCard t={t} onClose={() => dismiss(t.id)} />\n </YStack>\n ))}\n </YStack>\n </div>,\n document.body,\n )\n}\n\nexport function ToastProvider({ children }: { children: ReactNode }) {\n const track = useEmit()\n const [toasts, setToasts] = useState<Toast[]>([])\n const timers = useRef(new Map<number, ReturnType<typeof setTimeout>>())\n const seq = useRef(0)\n\n const dismiss = useCallback((id: number) => {\n setToasts((ts) => ts.filter((t) => t.id !== id))\n const timer = timers.current.get(id)\n if (timer) {\n clearTimeout(timer)\n timers.current.delete(id)\n }\n }, [])\n\n const toast = useCallback(\n (input: ToastInput) => {\n const id = ++seq.current\n const kind = input.kind ?? 'info'\n const durationMs = input.durationMs ?? (kind === 'error' ? 6000 : 3500)\n track({ component: 'Toast', action: kind === 'error' ? 'error' : 'view', id: input.title, value: kind })\n setToasts((ts) => [...ts, { id, kind, title: input.title, description: input.description, durationMs }])\n if (durationMs > 0) {\n timers.current.set(\n id,\n setTimeout(() => dismiss(id), durationMs),\n )\n }\n },\n [dismiss, track],\n )\n\n // Clear any pending timers on unmount.\n useEffect(() => {\n const map = timers.current\n return () => map.forEach((t) => clearTimeout(t))\n }, [])\n\n const api: ToastApi = {\n toast,\n success: (title, description) => toast({ title, description, kind: 'success' }),\n error: (title, description) => toast({ title, description, kind: 'error' }),\n info: (title, description) => toast({ title, description, kind: 'info' }),\n dismiss,\n }\n\n return (\n <ToastContext.Provider value={api}>\n {children}\n <ToastViewport toasts={toasts} dismiss={dismiss} />\n </ToastContext.Provider>\n )\n}\n\nexport function useToast(): ToastApi {\n const ctx = useContext(ToastContext)\n if (!ctx) throw new Error('useToast must be used within <ToastProvider>')\n return ctx\n}\n"]}