@hanzo/ui 8.0.11 → 8.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/LICENSE.md +21 -0
  2. package/dist/backends/gui/index.d.ts +2 -0
  3. package/dist/backends/shadcn/aspect-ratio.d.ts +4 -0
  4. package/dist/backends/shadcn/avatar.d.ts +6 -0
  5. package/dist/backends/shadcn/badge.d.ts +9 -0
  6. package/dist/backends/shadcn/button.d.ts +19 -0
  7. package/dist/backends/shadcn/card.d.ts +9 -0
  8. package/dist/backends/shadcn/checkbox.d.ts +9 -0
  9. package/dist/backends/shadcn/collapsible.d.ts +5 -0
  10. package/dist/backends/shadcn/command.d.ts +80 -0
  11. package/dist/backends/shadcn/dialog.d.ts +15 -0
  12. package/dist/backends/shadcn/dropdown-menu.d.ts +34 -0
  13. package/dist/backends/shadcn/index.d.ts +23 -0
  14. package/dist/backends/shadcn/input.d.ts +11 -0
  15. package/dist/backends/shadcn/label.d.ts +4 -0
  16. package/dist/backends/shadcn/popover.d.ts +7 -0
  17. package/dist/backends/shadcn/progress.d.ts +4 -0
  18. package/dist/backends/shadcn/scroll-area.d.ts +5 -0
  19. package/dist/backends/shadcn/select.d.ts +13 -0
  20. package/dist/backends/shadcn/separator.d.ts +4 -0
  21. package/dist/backends/shadcn/slider.d.ts +4 -0
  22. package/dist/backends/shadcn/switch.d.ts +4 -0
  23. package/dist/backends/shadcn/tabs.d.ts +7 -0
  24. package/dist/backends/shadcn/textarea.d.ts +4 -0
  25. package/dist/backends/shadcn/toaster.d.ts +10 -0
  26. package/dist/backends/shadcn/tooltip.d.ts +7 -0
  27. package/dist/backends/shadcn/utils.d.ts +8 -0
  28. package/dist/components.d.ts +1 -0
  29. package/dist/core/cn.d.ts +11 -0
  30. package/dist/core/fonts.d.ts +26 -0
  31. package/dist/core/index.d.ts +3 -0
  32. package/dist/core/tokens.d.ts +16 -0
  33. package/dist/index.cjs +1138 -291
  34. package/dist/index.cjs.map +1 -1
  35. package/dist/index.d.ts +2 -2
  36. package/dist/index.js +1017 -3
  37. package/dist/index.js.map +1 -1
  38. package/dist/models/ModelSelector.d.ts +23 -0
  39. package/dist/models/catalog.d.ts +53 -0
  40. package/dist/models/index.d.ts +5 -0
  41. package/dist/models/types.d.ts +39 -0
  42. package/dist/primitives/AspectRatio.d.ts +1 -0
  43. package/dist/primitives/Avatar.d.ts +1 -0
  44. package/dist/primitives/AvatarFallback.d.ts +1 -0
  45. package/dist/primitives/AvatarImage.d.ts +1 -0
  46. package/dist/primitives/Badge.d.ts +1 -0
  47. package/dist/primitives/Button.d.ts +1 -0
  48. package/dist/primitives/Card.d.ts +1 -0
  49. package/dist/primitives/CardAction.d.ts +1 -0
  50. package/dist/primitives/CardContent.d.ts +1 -0
  51. package/dist/primitives/CardDescription.d.ts +1 -0
  52. package/dist/primitives/CardFooter.d.ts +1 -0
  53. package/dist/primitives/CardHeader.d.ts +1 -0
  54. package/dist/primitives/CardTitle.d.ts +1 -0
  55. package/dist/primitives/Checkbox.d.ts +1 -0
  56. package/dist/primitives/Collapsible.d.ts +1 -0
  57. package/dist/primitives/CollapsibleContent.d.ts +1 -0
  58. package/dist/primitives/CollapsibleTrigger.d.ts +1 -0
  59. package/dist/primitives/Command.d.ts +1 -0
  60. package/dist/primitives/CommandDialog.d.ts +1 -0
  61. package/dist/primitives/CommandEmpty.d.ts +1 -0
  62. package/dist/primitives/CommandGroup.d.ts +1 -0
  63. package/dist/primitives/CommandInput.d.ts +1 -0
  64. package/dist/primitives/CommandItem.d.ts +1 -0
  65. package/dist/primitives/CommandList.d.ts +1 -0
  66. package/dist/primitives/CommandSeparator.d.ts +1 -0
  67. package/dist/primitives/CommandShortcut.d.ts +1 -0
  68. package/dist/primitives/Dialog.d.ts +1 -0
  69. package/dist/primitives/DialogClose.d.ts +1 -0
  70. package/dist/primitives/DialogContent.d.ts +1 -0
  71. package/dist/primitives/DialogDescription.d.ts +1 -0
  72. package/dist/primitives/DialogFooter.d.ts +1 -0
  73. package/dist/primitives/DialogHeader.d.ts +1 -0
  74. package/dist/primitives/DialogOverlay.d.ts +1 -0
  75. package/dist/primitives/DialogPortal.d.ts +1 -0
  76. package/dist/primitives/DialogTitle.d.ts +1 -0
  77. package/dist/primitives/DialogTrigger.d.ts +1 -0
  78. package/dist/primitives/DropdownMenu.d.ts +1 -0
  79. package/dist/primitives/DropdownMenuCheckboxItem.d.ts +1 -0
  80. package/dist/primitives/DropdownMenuContent.d.ts +1 -0
  81. package/dist/primitives/DropdownMenuGroup.d.ts +1 -0
  82. package/dist/primitives/DropdownMenuItem.d.ts +1 -0
  83. package/dist/primitives/DropdownMenuLabel.d.ts +1 -0
  84. package/dist/primitives/DropdownMenuPortal.d.ts +1 -0
  85. package/dist/primitives/DropdownMenuRadioGroup.d.ts +1 -0
  86. package/dist/primitives/DropdownMenuRadioItem.d.ts +1 -0
  87. package/dist/primitives/DropdownMenuSeparator.d.ts +1 -0
  88. package/dist/primitives/DropdownMenuShortcut.d.ts +1 -0
  89. package/dist/primitives/DropdownMenuSub.d.ts +1 -0
  90. package/dist/primitives/DropdownMenuSubContent.d.ts +1 -0
  91. package/dist/primitives/DropdownMenuSubTrigger.d.ts +1 -0
  92. package/dist/primitives/DropdownMenuTrigger.d.ts +1 -0
  93. package/dist/primitives/Input.d.ts +1 -0
  94. package/dist/primitives/Label.d.ts +1 -0
  95. package/dist/primitives/Popover.d.ts +1 -0
  96. package/dist/primitives/PopoverAnchor.d.ts +1 -0
  97. package/dist/primitives/PopoverContent.d.ts +1 -0
  98. package/dist/primitives/PopoverTrigger.d.ts +1 -0
  99. package/dist/primitives/Progress.d.ts +1 -0
  100. package/dist/primitives/ScrollArea.d.ts +1 -0
  101. package/dist/primitives/ScrollBar.d.ts +1 -0
  102. package/dist/primitives/Select.d.ts +1 -0
  103. package/dist/primitives/SelectContent.d.ts +1 -0
  104. package/dist/primitives/SelectGroup.d.ts +1 -0
  105. package/dist/primitives/SelectItem.d.ts +1 -0
  106. package/dist/primitives/SelectLabel.d.ts +1 -0
  107. package/dist/primitives/SelectScrollDownButton.d.ts +1 -0
  108. package/dist/primitives/SelectScrollUpButton.d.ts +1 -0
  109. package/dist/primitives/SelectSeparator.d.ts +1 -0
  110. package/dist/primitives/SelectTrigger.d.ts +1 -0
  111. package/dist/primitives/SelectValue.d.ts +1 -0
  112. package/dist/primitives/Separator.d.ts +1 -0
  113. package/dist/primitives/Slider.d.ts +1 -0
  114. package/dist/primitives/Switch.d.ts +1 -0
  115. package/dist/primitives/Tabs.d.ts +1 -0
  116. package/dist/primitives/TabsContent.d.ts +1 -0
  117. package/dist/primitives/TabsList.d.ts +1 -0
  118. package/dist/primitives/TabsTrigger.d.ts +1 -0
  119. package/dist/primitives/Textarea.d.ts +1 -0
  120. package/dist/primitives/Toaster.d.ts +1 -0
  121. package/dist/primitives/Tooltip.d.ts +1 -0
  122. package/dist/primitives/TooltipContent.d.ts +1 -0
  123. package/dist/primitives/TooltipProvider.d.ts +1 -0
  124. package/dist/primitives/TooltipTrigger.d.ts +1 -0
  125. package/dist/primitives/badgeVariants.d.ts +1 -0
  126. package/dist/primitives/buttonVariants.d.ts +1 -0
  127. package/dist/primitives/index.d.ts +1 -0
  128. package/dist/primitives/toast.d.ts +1 -0
  129. package/dist/product/AnimatedLogo.d.ts +47 -0
  130. package/dist/product/BackendState.d.ts +42 -0
  131. package/dist/product/Charts.d.ts +4 -0
  132. package/dist/product/CommerceResource.d.ts +32 -0
  133. package/dist/product/ConfirmDelete.d.ts +8 -0
  134. package/dist/product/DataTable.d.ts +30 -2
  135. package/dist/product/Field.d.ts +7 -2
  136. package/dist/product/Filters.d.ts +29 -0
  137. package/dist/product/PrimaryButton.d.ts +5 -0
  138. package/dist/product/SiteFooter.d.ts +28 -0
  139. package/dist/product/SiteNav.d.ts +60 -0
  140. package/dist/product/accent.d.ts +33 -0
  141. package/dist/product/animatedLogo.logic.d.ts +52 -0
  142. package/dist/product/brand.d.ts +45 -0
  143. package/dist/product/host.d.ts +21 -0
  144. package/dist/product/index.cjs +3205 -265
  145. package/dist/product/index.cjs.map +1 -1
  146. package/dist/product/index.d.ts +11 -0
  147. package/dist/product/index.js +3103 -1
  148. package/dist/product/index.js.map +1 -1
  149. package/dist/product/social/CampaignCard.d.ts +13 -0
  150. package/dist/product/social/ChannelBadge.d.ts +12 -0
  151. package/dist/product/social/PostAgenda.d.ts +5 -0
  152. package/dist/product/social/PostCard.d.ts +15 -0
  153. package/dist/product/social/PostComposer.d.ts +24 -0
  154. package/dist/product/social/ProviderReadinessList.d.ts +10 -0
  155. package/dist/product/social/SocialSummaryBar.d.ts +9 -0
  156. package/dist/product/social/ViewToggle.d.ts +5 -0
  157. package/dist/product/social/format.d.ts +16 -0
  158. package/dist/product/social/index.d.ts +9 -0
  159. package/dist/product/surfaces.data.d.ts +1 -0
  160. package/dist/styles/hanzo-motion.css +52 -0
  161. package/package.json +94 -20
  162. package/dist/chunk-M2ILMK44.cjs +0 -2104
  163. package/dist/chunk-M2ILMK44.cjs.map +0 -1
  164. package/dist/chunk-YSURJUOA.js +0 -2035
  165. package/dist/chunk-YSURJUOA.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
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/host.tsx","../../src/product/BackendState.tsx","../../src/product/PageHeader.tsx","../../src/product/DataTable.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/accent.ts","../../src/product/PrimaryButton.tsx","../../src/product/EmptyState.tsx","../../src/product/FadeIn.tsx","../../src/product/Field.tsx","../../src/product/color.ts","../../src/product/ProductIcon.tsx","../../src/product/ProviderLogo.tsx","../../src/product/Reorder.tsx","../../src/product/SelectMenu.tsx","../../src/product/SlideOver.tsx","../../src/product/StatusTag.tsx","../../src/product/Toast.tsx","../../src/product/social/ChannelBadge.tsx","../../src/product/social/CampaignCard.tsx","../../src/product/social/format.ts","../../src/product/social/PostCard.tsx","../../src/product/social/PostAgenda.tsx","../../src/product/social/PostComposer.tsx","../../src/product/social/ProviderReadinessList.tsx","../../src/product/social/SocialSummaryBar.tsx","../../src/product/social/ViewToggle.tsx"],"names":["Sparkline","jsx","jsxs","XStack","YStack","Text","Donut","ACCENT","current","useRef","useState","useEffect","useCallback","Fragment","Button","useMemo","Popover","Input","Spinner","Check","LayoutGrid","Separator","isExternal","defaultLink","Card","CreditCard","ChevronsUpDown","ChevronDown","RefreshCw","Search","useLayoutEffect","openHref","useTheme","tone","createContext","X","useContext","Trash2","AlertTriangle","Calendar"],"mappings":"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","file":"index.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 ──────────────────────────────────────────────────────────\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 press = () => {\n if (!disabled) onSelect()\n }\n const onKeyDown = (e: KeyboardEvent) => {\n if (disabled) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onSelect()\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 { 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 pick = (v: string) => {\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={() => setOpen((o) => !o)}\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 { 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 select = useCallback(\n (org: string) => {\n setOpen(false)\n scope.switchOrg(org)\n },\n [scope],\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 * The host seam — the ONE place an app injects its effects into this layer.\n *\n * The product layer is presentational and host-agnostic: it never imports a\n * router or an auth module. An honest state card still has to OFFER \"Sign in\n * again\" (401) or \"Add credits\" (402), so the app provides those two effects\n * once at its root and every card below renders the right affordance. Without a\n * provider the affordance is simply not offered — nothing is faked.\n */\nimport { createContext, useContext, type ReactNode } from 'react'\n\nexport type HostActions = {\n /** Re-authenticate and return to this exact page (401). */\n signIn?: () => void\n /** Navigate to the org's top-up surface (402). */\n addCredits?: () => void\n}\n\nconst HostCtx = createContext<HostActions>({})\n\nexport const HostProvider = ({ actions, children }: { actions: HostActions; children: ReactNode }) => (\n <HostCtx.Provider value={actions}>{children}</HostCtx.Provider>\n)\n\nexport const useHost = (): HostActions => useContext(HostCtx)\n","'use client'\n\n/**\n * Honest backend states for `/v1`-backed modules — ONE place that maps a thrown\n * HTTP error to a truthful explanation.\n *\n * A 503 means the runtime/keys aren't wired on this deployment yet, a 404/405\n * means the route isn't mounted here, 401/403 means the session can't read it,\n * 402 means the org has no funded balance. Nothing is fabricated — on failure the\n * caller shows this card instead of placeholder rows/charts.\n *\n * Classification is duck-typed on `status`, so any client's error class works\n * (console's `ApiError`, commerce's `CommerceError`, …) without this layer\n * depending on one. Effects come from `useHost()`.\n */\nimport type { ReactNode } from 'react'\nimport { Button, Card, Text, XStack } from '@hanzo/gui'\nimport { TriangleAlert, CreditCard } from '@hanzogui/lucide-icons-2'\n\nimport { useHost } from './host'\n\nexport type BackendStateKind =\n | 'not-initialized'\n | 'unavailable'\n | 'not-implemented'\n | 'access'\n | 'signin'\n | 'billing'\n | 'error'\n\nexport type BackendState = { kind: BackendStateKind; message: string }\n\n/**\n * Classify a thrown `/v1` error into an honest kind + raw message.\n *\n * 401 and 403 are DISTINCT for a signed-in user: 401 = the session is expired /\n * not recognized (re-auth fixes it → `signin`), 403 = the account IS signed in\n * but this surface isn't authorized/enabled for its org (`access`). A signed-in\n * user is NEVER told to \"sign in\" for a 403 — that would be a false instruction.\n */\nexport function classifyBackend(e: unknown): BackendState {\n const status = typeof (e as { status?: unknown })?.status === 'number' ? (e as { status: number }).status : 0\n const message = e instanceof Error ? e.message : String(e)\n if (status === 503) return { kind: 'not-initialized', message }\n if (status === 404 || status === 405) return { kind: 'unavailable', message }\n // 501 — the route EXISTS and answers honestly that its body ships later (the\n // Cloudflare R2/KV/D1 Phase-2 seams). Distinct from 404 (not mounted here): the\n // capability is real and planned, so say that rather than \"not available yet\".\n if (status === 501) return { kind: 'not-implemented', message }\n if (status === 402) return { kind: 'billing', message }\n if (status === 401) return { kind: 'signin', message }\n if (status === 403) return { kind: 'access', message }\n return { kind: 'error', message }\n}\n\n/**\n * Classify a READ (GET/list) failure. Identical to `classifyBackend` EXCEPT a 402\n * is NOT a wall: listing/reading a resource is never credit-gated, so a 402 on a\n * read means \"nothing is provisioned yet\" — the caller shows its honest EMPTY\n * state (e.g. \"No buckets yet · Create one\"), never an \"add credits\" paywall\n * (that belongs only on a paid WRITE). Returns `null` for a 402 → treat as empty.\n */\nexport function classifyRead(e: unknown): BackendState | null {\n const s = classifyBackend(e)\n return s.kind === 'billing' ? null : s\n}\n\nconst TITLES: Record<BackendStateKind, string> = {\n 'not-initialized': 'Backend not initialized',\n unavailable: 'Not available on this deployment yet',\n 'not-implemented': 'Not yet available',\n access: 'Not enabled for your account',\n signin: 'Your session expired',\n billing: 'Add credits to continue',\n error: 'Could not reach the backend',\n}\n\nconst BODIES: Record<BackendStateKind, string> = {\n 'not-initialized':\n 'The /v1 route is mounted but its runtime (or the console API key it proxies to) is not configured on this deployment yet. Real data appears here once it is — no placeholder data is shown.',\n unavailable:\n 'This endpoint is not mounted at the gateway on this host yet. The view lights up automatically once the route is live.',\n // 501 — a real, planned capability whose body ships in a later phase.\n 'not-implemented':\n 'This capability is planned but not wired yet. The backend answers honestly rather than pretending it worked — nothing here is fabricated, and the view lights up automatically once it ships.',\n // 403 for a SIGNED-IN user — never \"sign in\".\n access:\n \"You're signed in, but this isn't enabled for your organization on this deployment, or it's an admin-only surface. It appears here automatically once your account has access — nothing is fabricated.\",\n // 401 — the session itself lapsed; re-auth returns to this exact page.\n signin: 'Your session has expired or isn’t recognized here. Sign in again to continue where you left off.',\n // Empty → the card shows the backend's own message (the honest \"Insufficient\n // balance. Please add credits…\" from the gateway billing gate).\n billing: '',\n error: '',\n}\n\n/** A truthful state card for a `/v1` load failure, with an optional retry + hint. */\nexport function BackendStateCard({\n state,\n onRetry,\n hint,\n}: {\n state: BackendState\n onRetry?: () => void\n hint?: ReactNode\n}) {\n const { signIn, addCredits } = useHost()\n return (\n <Card borderWidth={1} borderColor=\"$borderColor\" p=\"$4\" gap=\"$2\" maxWidth={640}>\n <XStack gap=\"$2\" items=\"center\">\n <TriangleAlert size={16} />\n <Text fontSize=\"$4\" fontWeight=\"700\">\n {TITLES[state.kind]}\n </Text>\n </XStack>\n <Text fontSize=\"$3\" color=\"$color11\">\n {BODIES[state.kind] || state.message}\n </Text>\n {hint ? (\n <Text fontSize=\"$2\" color=\"$color10\">\n {hint}\n </Text>\n ) : null}\n {state.kind === 'signin' && signIn ? (\n <Button size=\"$2\" theme=\"light\" self=\"flex-start\" onPress={signIn}>\n Sign in again\n </Button>\n ) : state.kind === 'billing' && addCredits ? (\n // 402 — the org has no funded balance. Offer a top-up CTA (and keep Retry so\n // a returning, funded caller can reload in place).\n <XStack gap=\"$2\" items=\"center\" flexWrap=\"wrap\">\n <Button size=\"$2\" theme=\"light\" self=\"flex-start\" icon={<CreditCard size={14} />} onPress={addCredits}>\n Add credits\n </Button>\n {onRetry ? (\n <Button size=\"$2\" self=\"flex-start\" onPress={onRetry}>\n Retry\n </Button>\n ) : null}\n </XStack>\n ) : onRetry ? (\n <Button size=\"$2\" self=\"flex-start\" onPress={onRetry}>\n Retry\n </Button>\n ) : null}\n </Card>\n )\n}\n","'use client'\n\nimport type { ReactNode } from 'react'\nimport { Text, XStack, YStack } from '@hanzo/gui'\n\n/** Section title + optional subtitle and right-aligned actions. */\nexport function PageHeader({\n title,\n subtitle,\n actions,\n}: {\n title: string\n subtitle?: string\n actions?: ReactNode\n}) {\n return (\n // flexWrap lets the actions drop below the title on narrow screens; flex={1}\n // minW={0} lets the title column shrink so a long subtitle WRAPS instead of\n // running off the viewport (a flex child defaults to min-width:auto = content\n // width, which would overflow on mobile).\n <XStack justify=\"space-between\" items=\"flex-start\" gap=\"$3\" flexWrap=\"wrap\">\n <YStack gap=\"$1\" flex={1} minW={200}>\n <Text fontSize=\"$7\" fontWeight=\"500\" letterSpacing={-0.4}>\n {title}\n </Text>\n {subtitle ? (\n <Text fontSize=\"$3\" color=\"$color11\">\n {subtitle}\n </Text>\n ) : null}\n </YStack>\n {/* Actions take a FULL line below the title on phones (width 100%) and WRAP —\n so a header with many buttons (e.g. Tracker's Projects/Refresh/List/Board/\n New issue/Delete) never runs off-screen and clips the last controls. At $md+\n they collapse back to a right-aligned inline row beside the title. */}\n {actions ? (\n <XStack gap=\"$2\" items=\"center\" flexWrap=\"wrap\" width=\"100%\" $md={{ width: 'auto', justify: 'flex-end' }}>\n {actions}\n </XStack>\n ) : null}\n </XStack>\n )\n}\n","'use client'\n\n/**\n * Generic data table — the shared list primitive for every product module.\n *\n * Rows are typed `<T>`; columns declare a key, header, and optional cell\n * renderer. Built on Hanzo GUI Stacks (shorthand style props per the v5 config)\n * so it adapts across platforms. Loading and empty states are first-class:\n * loading paints SKELETON ROWS in the real column layout (an honest \"loading\",\n * never a spinner void); numeric columns opt into right-aligned Geist Mono\n * tabular figures so amounts/counts/IDs read as precise, column-aligned data.\n *\n * SORTING is opt-in and caller-owned: a column marks itself `sortable`, the caller\n * passes the current `sort` + an `onSortChange`, and the table only reports the\n * clicked key (it never reorders `rows` itself — the caller's own pure comparator\n * stays the one source of order). Omit all three and the table behaves exactly as\n * before, so every existing consumer is unchanged.\n */\nimport type { ReactNode } from 'react'\nimport { Text, XStack, YStack } from '@hanzo/gui'\nimport { ChevronDown, ChevronsUpDown, ChevronUp } from '@hanzogui/lucide-icons-2'\n\nexport type Column<T> = {\n key: string\n header: string\n /** Cell renderer; defaults to `String(row[key])`. */\n render?: (row: T) => ReactNode\n /** Fixed width (px) for the column; otherwise flexes. */\n width?: number\n /** Horizontal alignment — `right` for numeric/amount columns. */\n align?: 'left' | 'right'\n /** Typeset the default cell + header as Geist Mono tabular (counts, amounts, IDs). */\n mono?: boolean\n /** Clickable header that reports `onSortChange(key)` (needs both table props). */\n sortable?: boolean\n}\n\n/** The active sort — which column key, which direction. */\nexport type SortState = { key: string; dir: 'asc' | 'desc' }\n\n/** Skeleton rows in the real column layout — an honest \"loading\", never a void. */\nfunction SkeletonRows<T>({ columns, count = 6 }: { columns: Column<T>[]; count?: number }) {\n return (\n <YStack>\n {Array.from({ length: count }).map((_, r) => (\n <XStack key={r} py=\"$2.5\" px=\"$3\" gap=\"$3\" borderTopWidth={1} borderColor=\"$borderColor\" items=\"center\">\n {columns.map((c, i) => (\n <YStack key={c.key} width={c.width} flex={c.width ? undefined : 1} minW={c.width ? undefined : FLEX_MIN_COL_W} items={c.align === 'right' ? 'flex-end' : 'flex-start'}>\n <div\n className=\"hz-skeleton\"\n style={{ height: 12, borderRadius: 6, width: `${[62, 40, 54, 34, 48][(i + r) % 5]}%` }}\n aria-hidden\n />\n </YStack>\n ))}\n </XStack>\n ))}\n </YStack>\n )\n}\n\nexport function DataTable<T>({\n columns,\n rows,\n loading,\n empty = 'Nothing here yet.',\n rowKey,\n onRowPress,\n isRowExpanded,\n renderExpanded,\n sort,\n onSortChange,\n}: {\n columns: Column<T>[]\n rows: T[]\n loading?: boolean\n empty?: string\n rowKey: (row: T) => string\n onRowPress?: (row: T) => void\n /** When set + true for a row, its `renderExpanded` panel is shown below it. */\n isRowExpanded?: (row: T) => boolean\n /** Full-width detail panel rendered under an expanded row (master-detail accordion). */\n renderExpanded?: (row: T) => ReactNode\n /** The active sort, for the header caret + `aria-sort`. */\n sort?: SortState\n /** Called with the clicked column key; the caller owns the reordering. */\n onSortChange?: (key: string) => void\n}) {\n // Natural min-width of the table: the sum of the declared column widths, with a\n // sensible floor for flex columns, plus row padding + inter-column gaps. On a\n // narrow (mobile) viewport where this exceeds the container, the inner wrapper\n // scrolls HORIZONTALLY instead of clipping the last columns (the old\n // `overflow:hidden` cut the right edge off, e.g. the Status column). On desktop\n // the flex columns still expand to fill, so wide screens are unchanged.\n const minTableW = columns.reduce((sum, c) => sum + (c.width ?? FLEX_MIN_COL_W), 0) + (columns.length + 1) * 12\n\n return (\n <YStack borderWidth={1} borderColor=\"$borderColor\" rounded=\"$4\" overflow=\"hidden\">\n <YStack style={{ overflowX: 'auto', overflowY: 'visible' }}>\n <YStack minW={minTableW}>\n {/* Header — quiet, uppercase-free, Medium. A hairline under it separates\n the head from the body without a heavy fill. */}\n <XStack bg=\"$color1\" py=\"$2.5\" px=\"$3\" gap=\"$3\" borderBottomWidth={1} borderColor=\"$borderColor\" role=\"row\">\n {columns.map((c) => {\n // Sortable needs BOTH the column opt-in and a caller handler — a column\n // can never look clickable with nothing listening.\n const sortable = c.sortable === true && !!onSortChange\n const active = sortable && sort?.key === c.key\n const Caret = !sortable ? null : !active ? ChevronsUpDown : sort?.dir === 'asc' ? ChevronUp : ChevronDown\n return (\n <XStack\n key={c.key}\n width={c.width}\n flex={c.width ? undefined : 1}\n minW={c.width ? undefined : FLEX_MIN_COL_W}\n items=\"center\"\n gap=\"$1\"\n justify={c.align === 'right' ? 'flex-end' : 'flex-start'}\n role=\"columnheader\"\n aria-sort={sortable ? (active ? (sort?.dir === 'asc' ? 'ascending' : 'descending') : 'none') : undefined}\n aria-label={sortable ? `Sort by ${c.header}` : undefined}\n cursor={sortable ? 'pointer' : undefined}\n hoverStyle={sortable ? { opacity: 0.75 } : undefined}\n onPress={sortable ? () => onSortChange?.(c.key) : undefined}\n >\n <Text\n fontSize=\"$1\"\n fontWeight=\"500\"\n color={active ? '$color12' : '$color10'}\n text={c.align === 'right' ? 'right' : 'left'}\n className={c.mono ? 'hz-tnum' : undefined}\n >\n {c.header}\n </Text>\n {Caret ? <Caret size={12} color={active ? '$color12' : '$color9'} /> : null}\n </XStack>\n )\n })}\n </XStack>\n\n {loading ? (\n <SkeletonRows columns={columns} />\n ) : rows.length > 0 ? (\n <YStack>\n {rows.map((row) => {\n const expanded = (isRowExpanded?.(row) ?? false) && !!renderExpanded\n return (\n <YStack key={rowKey(row)}>\n <XStack\n className=\"hz-row\"\n py=\"$2.5\"\n px=\"$3\"\n gap=\"$3\"\n borderTopWidth={1}\n borderColor=\"$borderColor\"\n items=\"center\"\n bg={expanded ? '$color2' : undefined}\n hoverStyle={onRowPress ? { bg: '$color2' } : undefined}\n cursor={onRowPress ? 'pointer' : undefined}\n onPress={onRowPress ? () => onRowPress(row) : undefined}\n >\n {columns.map((c) => {\n // A cell value is either a column's rendered node or the raw\n // `String(row[key])`. Whenever it resolves to a PRIMITIVE\n // (string|number) — the default cell OR a `render()` that returns\n // `String(count)` / `ttl` / `priority` — it is wrapped in the ONE\n // styled Text below, so the primitive can never emit a bare text\n // node (illegal under a native View → RN red-box + console spam)\n // and always picks up the numeric mono/align styling. Element\n // renders (Text/badges/cells) pass through untouched.\n const cell = c.render ? c.render(row) : String((row as Record<string, unknown>)[c.key] ?? '')\n return (\n <YStack\n key={c.key}\n width={c.width}\n flex={c.width ? undefined : 1}\n minW={c.width ? undefined : FLEX_MIN_COL_W}\n justify=\"center\"\n items={c.align === 'right' ? 'flex-end' : 'flex-start'}\n >\n {typeof cell === 'string' || typeof cell === 'number' ? (\n <Text\n fontSize=\"$3\"\n numberOfLines={1}\n color=\"$color12\"\n text={c.align === 'right' ? 'right' : 'left'}\n className={c.mono ? 'hz-mono' : undefined}\n >\n {cell}\n </Text>\n ) : (\n cell\n )}\n </YStack>\n )\n })}\n </XStack>\n {expanded && renderExpanded ? (\n <YStack borderTopWidth={1} borderColor=\"$borderColor\" bg=\"$color1\">\n {renderExpanded(row)}\n </YStack>\n ) : null}\n </YStack>\n )\n })}\n </YStack>\n ) : null}\n </YStack>\n </YStack>\n\n {/* Empty message lives OUTSIDE the horizontal (min-width) scroll area so it\n centers + wraps within the VISIBLE width — on a phone the min-width table\n scrolls, but \"Nothing here yet.\" must never be clipped off the right edge. */}\n {!loading && rows.length === 0 ? (\n <YStack py=\"$8\" px=\"$4\" items=\"center\" gap=\"$1\" borderTopWidth={1} borderColor=\"$borderColor\">\n <Text color=\"$color10\" fontSize=\"$3\" text=\"center\">\n {empty}\n </Text>\n </YStack>\n ) : null}\n </YStack>\n )\n}\n\n/** Min width for a flex (no explicit `width`) column, so the table has a natural\n * size to scroll to on mobile instead of squishing/clipping its cells. */\nconst FLEX_MIN_COL_W = 120\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'\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\n const go = async () => {\n setBusy(true)\n setErr(null)\n try {\n await run()\n onDone()\n } catch (e) {\n setErr(classifyBackend(e).message || 'Failed to delete.')\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 chromeless onPress={() => onDone()} disabled={busy}>\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\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}: {\n options: Option<T>[]\n value: T\n onChange: (v: T) => void\n size?: ComponentProps<typeof Button>['size']\n}) {\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={() => onChange(o.value)}\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({ value, onChange, placeholder }: { value: string; onChange: (v: string) => void; placeholder?: string }) {\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={onChange} 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 * Org accent theme — the ONE place that turns an organization's saved brand color\n * (`themeData.colorPrimary`, when `themeData.isEnabled`) into the LIVE console accent.\n *\n * The console is monochrome by default; an org opts into a custom accent in Settings →\n * Branding. Saving persists the color on the org record (that half already works). This\n * module is the missing APPLY half: a tiny external store holds the resolved accent\n * (hex + a readable contrast, or null); `setOrgAccent` updates it on load AND on save\n * (one mechanism, two callers), and `useAccent()` lets the genuine accent surfaces (the\n * primary button, the active tabs, the active nav item) read it and recolor with real\n * `@hanzo/gui` props — reverting cleanly to the default monochrome when the org disables\n * its theme (or the hex is invalid). React-prop driven (Tamagui's own styling path), NOT\n * a CSS class — Tamagui does not forward `className` to a Button's DOM node.\n *\n * Pure + SSR-safe: the resolve/contrast helpers are pure (unit-tested); the store starts\n * from a stable default snapshot so the server render and first client paint agree.\n */\nimport { useSyncExternalStore } from 'react'\n\n/** An org's persisted theme block (mirrors IAM `themeData`; only the fields we apply). */\nexport type OrgThemeData = {\n colorPrimary?: string\n isEnabled?: boolean\n}\n\n/** The live accent — a resolved hex + a readable text color for content on it, or null. */\nexport type Accent = { accent: string | null; contrast: string }\n\n/** True for a 3- or 6-digit CSS hex color (`#RGB` / `#RRGGBB`). */\nexport function isHexColor(v: string | undefined | null): boolean {\n return typeof v === 'string' && /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(v.trim())\n}\n\n/**\n * The accent hex to apply for an org, or `null` when no custom accent should be used —\n * i.e. the theme is disabled, missing, or the color is not a valid hex. PURE.\n */\nexport function resolveAccent(theme: OrgThemeData | null | undefined): string | null {\n if (!theme || !theme.isEnabled) return null\n const hex = (theme.colorPrimary ?? '').trim()\n return isHexColor(hex) ? hex : null\n}\n\n/** Expand `#abc` → `#aabbcc`; pass a 6-digit hex through (lowercased). */\nfunction expandHex(hex: string): string {\n const h = hex.trim().toLowerCase()\n if (h.length === 4) return `#${h[1]}${h[1]}${h[2]}${h[2]}${h[3]}${h[3]}`\n return h\n}\n\n/**\n * A readable text color (`#000000` / `#ffffff`) for content placed ON the accent,\n * chosen by the accent's relative luminance (WCAG-style). PURE. Falls back to white\n * for a non-hex input (never throws).\n */\nexport function contrastText(hex: string): '#000000' | '#ffffff' {\n if (!isHexColor(hex)) return '#ffffff'\n const h = expandHex(hex)\n const r = parseInt(h.slice(1, 3), 16) / 255\n const g = parseInt(h.slice(3, 5), 16) / 255\n const b = parseInt(h.slice(5, 7), 16) / 255\n const lin = (c: number) => (c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4)\n const luminance = 0.2126 * lin(r) + 0.7152 * lin(g) + 0.0722 * lin(b)\n return luminance > 0.5 ? '#000000' : '#ffffff'\n}\n\n/** Resolve a theme block to the `Accent` value it should apply (accent+contrast or null). PURE. */\nexport function accentFor(theme: OrgThemeData | null | undefined): Accent {\n const hex = resolveAccent(theme)\n return { accent: hex, contrast: hex ? contrastText(hex) : '#ffffff' }\n}\n\n// ── The live accent store (an external store React subscribes to) ─────────────\n\n/** The default (no custom accent) — a STABLE reference so SSR + first paint agree. */\nconst DEFAULT: Accent = { accent: null, contrast: '#ffffff' }\n\nlet current: Accent = DEFAULT\nconst listeners = new Set<() => void>()\n\n/**\n * Set the live accent from an org theme block. Called on load (from the fetched org) AND\n * immediately on save — the SINGLE mechanism, so the accent survives reload and updates\n * without one. A no-op when the resolved accent is unchanged (keeps the snapshot stable).\n */\nexport function setOrgAccent(theme: OrgThemeData | null | undefined): void {\n const next = accentFor(theme)\n if (next.accent === current.accent) return\n current = next.accent ? next : DEFAULT\n for (const l of listeners) l()\n}\n\nfunction subscribe(cb: () => void): () => void {\n listeners.add(cb)\n return () => {\n listeners.delete(cb)\n }\n}\n\n/** The live accent (subscribes to the store). Returns the default until an org theme is applied. */\nexport function useAccent(): Accent {\n return useSyncExternalStore(\n subscribe,\n () => current,\n () => DEFAULT,\n )\n}\n","'use client'\n\n/**\n * Primary button — the one white, high-emphasis action for the console.\n *\n * Monochrome brand: `theme=\"light\"` flips the button to the light theme inside\n * the dark console, giving a white fill with a near-black label and icon — no\n * hue accent. Use it for the single primary action in a view (sign in, save,\n * get started). Secondary and destructive actions use the default neutral\n * `Button`.\n *\n * When an org enables a custom brand color, this — the console's one primary\n * action — recolors to the org accent (inline bg + the color prop the label/icon\n * inherit), reading the live accent from `useAccent()`; with no custom theme it\n * stays the default white. A caller's own `style`/`color` still win (spread last).\n */\nimport type { ComponentProps } from 'react'\nimport { Button } from '@hanzo/gui'\n\nimport { useAccent } from './accent'\n\nexport function PrimaryButton(props: ComponentProps<typeof Button>) {\n const { accent, contrast } = useAccent()\n // Accent set → a filled accent button (bg + readable text, via inline style Tamagui\n // forwards to the DOM). No accent → the default monochrome white (theme=\"light\").\n if (accent) {\n return <Button style={{ backgroundColor: accent, color: contrast, borderColor: accent }} {...props} />\n }\n return <Button theme=\"light\" {...props} />\n}\n","'use client'\n\n/**\n * Rich empty state — the ONE way the console turns a real, honest \"nothing here\n * yet\" into a helpful onboarding moment (DigitalOcean / Vercel class) instead of\n * a dead screen.\n *\n * It is NOT a fabricated-data fallback: callers render it only when a load\n * genuinely succeeded with zero rows (or a resource has no surface yet). It shows\n * the product icon, a one-line \"what this is\", a couple of guidance bullets, a\n * single primary call-to-action (Deploy / Create / Connect …) and an optional\n * secondary link (Docs / CLI). Orthogonal to `BackendStateCard` (failures) and\n * `DataTable`'s thin inline empty (in-table) — this is the full-bleed first-run\n * surface a module shows in place of its table.\n */\nimport type { ReactElement, ReactNode } from 'react'\nimport { Button, Card, Text, XStack, YStack } from '@hanzo/gui'\nimport { ArrowRight, Check, ExternalLink } from '@hanzogui/lucide-icons-2'\n\nimport type { IconLike } from './color'\nimport { PrimaryButton } from './PrimaryButton'\n\n/** A single call-to-action — primary (filled) or a secondary/external link. */\nexport type EmptyAction = {\n label: string\n /** In-app navigation / handler. */\n onPress?: () => void\n /** External URL — opens in a new tab with an external-link affordance. */\n href?: string\n icon?: ReactElement\n}\n\n/** Open an external URL in a new tab (no-opener), guarded for SSR. */\nfunction openHref(href: string): void {\n if (typeof window !== 'undefined') window.open(href, '_blank', 'noopener')\n}\n\nexport function EmptyState({\n icon: Icon,\n title,\n description,\n bullets,\n primary,\n secondary,\n}: {\n /** Product/section icon — any lucide/Gui icon component (size + optional color). */\n icon: IconLike\n title: string\n description: string\n /** Optional \"here's how to get started\" guidance bullets. */\n bullets?: string[]\n /** The single high-emphasis action (Deploy / Create / Connect). */\n primary?: EmptyAction\n /** An optional lower-emphasis action (Docs / CLI / Learn more). */\n secondary?: EmptyAction\n}) {\n return (\n <Card\n borderWidth={1}\n borderColor=\"$borderColor\"\n borderStyle=\"dashed\"\n p=\"$6\"\n gap=\"$4\"\n items=\"center\"\n maxWidth={640}\n self=\"center\"\n width=\"100%\"\n >\n <YStack\n width={48}\n height={48}\n items=\"center\"\n justify=\"center\"\n rounded=\"$4\"\n bg=\"$color3\"\n >\n <Icon size={24} />\n </YStack>\n\n <YStack gap=\"$2\" items=\"center\" maxW={480}>\n <Text fontSize=\"$6\" fontWeight=\"500\" text=\"center\" letterSpacing={-0.3}>\n {title}\n </Text>\n <Text fontSize=\"$3\" color=\"$color11\" text=\"center\">\n {description}\n </Text>\n </YStack>\n\n {bullets && bullets.length ? (\n <YStack gap=\"$2\" self=\"stretch\" maxW={420} mx=\"auto\">\n {bullets.map((b) => (\n <XStack key={b} gap=\"$2\" items=\"flex-start\">\n <YStack pt=\"$1\">\n <Check size={14} color=\"$color10\" />\n </YStack>\n <Text fontSize=\"$3\" color=\"$color11\" flex={1}>\n {b}\n </Text>\n </XStack>\n ))}\n </YStack>\n ) : null}\n\n {primary || secondary ? (\n <XStack gap=\"$2\" items=\"center\" flexWrap=\"wrap\" justify=\"center\">\n {primary ? (\n <PrimaryButton\n icon={primary.icon}\n iconAfter={primary.href ? <ExternalLink size={15} /> : <ArrowRight size={15} />}\n onPress={() => (primary.href ? openHref(primary.href) : primary.onPress?.())}\n >\n {primary.label}\n </PrimaryButton>\n ) : null}\n {secondary ? (\n <Button\n chromeless\n icon={secondary.icon}\n iconAfter={secondary.href ? <ExternalLink size={14} /> : undefined}\n onPress={() => (secondary.href ? openHref(secondary.href) : secondary.onPress?.())}\n >\n {secondary.label}\n </Button>\n ) : null}\n </XStack>\n ) : null}\n </Card>\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 * Form field primitives — labeled rows over Hanzo GUI inputs.\n *\n * One way to render a labeled control. Every editor field goes through these, so\n * spacing, disabled styling, and the label column stay consistent. Style props\n * use the v5 shorthand set (p/px/items/justify/...).\n */\nimport type { CSSProperties, ReactNode } from 'react'\nimport {\n Input,\n Label,\n Switch,\n TextArea,\n Slider,\n Text,\n XStack,\n YStack,\n} from '@hanzo/gui'\n\n/**\n * Labeled row. STACKED on phones (label full-width above a full-width control) so a\n * form inside a SlideOver stays usable and never clips its labels; a fixed 180px\n * label column + flexing control at $md+ (the two-column desktop/tablet layout).\n */\nexport function FieldRow({ label, children }: { label: string; children: ReactNode }) {\n return (\n <XStack gap=\"$3\" items=\"flex-start\" flexWrap=\"wrap\">\n <Label width=\"100%\" pt=\"$2\" color=\"$color11\" fontSize=\"$3\" $md={{ width: 180 }}>\n {label}\n </Label>\n <YStack flex={1} minW={0} $md={{ minW: 240 }}>\n {children}\n </YStack>\n </XStack>\n )\n}\n\nexport function FieldText({\n value,\n onChange,\n disabled,\n secure,\n placeholder,\n}: {\n value: string\n onChange: (v: string) => void\n disabled?: boolean\n secure?: boolean\n placeholder?: string\n}) {\n return (\n <Input\n value={value}\n onChangeText={onChange}\n disabled={disabled}\n secureTextEntry={secure}\n placeholder={placeholder}\n autoCapitalize=\"none\"\n />\n )\n}\n\nexport function FieldTextArea({\n value,\n onChange,\n disabled,\n rows = 6,\n}: {\n value: string\n onChange: (v: string) => void\n disabled?: boolean\n rows?: number\n}) {\n return (\n <TextArea value={value} onChangeText={onChange} disabled={disabled} numberOfLines={rows} />\n )\n}\n\nexport function FieldSwitch({\n checked,\n onChange,\n disabled,\n}: {\n checked: boolean\n onChange: (v: boolean) => void\n disabled?: boolean\n}) {\n return (\n <Switch checked={checked} onCheckedChange={onChange} disabled={disabled} size=\"$3\">\n <Switch.Thumb />\n </Switch>\n )\n}\n\n/**\n * A labeled dropdown.\n *\n * Renders a REAL native `<select>` on web (and the OS-native picker on mobile),\n * NOT the `@hanzo/gui` `<Select native>` — that primitive is broken in gui 7.3.0:\n * `native` emits bare `<option>` elements with NO `<select>` wrapper, so every\n * dropdown across the console (region/size pickers, all edit forms) rendered as a\n * non-interactive flat list of option text that buried the surrounding controls.\n * A native `<select>` is compact, keyboard/ARIA-accessible, gives the native\n * mobile picker (best small-screen UX), and is themed via the Tamagui CSS custom\n * properties (`--background`/`--color12`/`--borderColor`) so it tracks light/dark.\n */\nconst CHEVRON = `data:image/svg+xml,${encodeURIComponent(\n '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#9a9a9a\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m6 9 6 6 6-6\"/></svg>',\n)}`\n\nfunction selectStyle(disabled?: boolean): CSSProperties {\n return {\n width: '100%',\n boxSizing: 'border-box',\n appearance: 'none',\n WebkitAppearance: 'none',\n MozAppearance: 'none',\n background: `var(--background) url(\"${CHEVRON}\") no-repeat right 10px center`,\n color: 'var(--color12)',\n border: '1px solid var(--borderColor)',\n borderRadius: 9,\n padding: '9px 34px 9px 12px',\n fontSize: 14,\n lineHeight: '20px',\n fontFamily: 'inherit',\n height: 40,\n outline: 'none',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n }\n}\n\nconst OPTION_STYLE: CSSProperties = { background: 'var(--color2)', color: 'var(--color12)' }\n\nexport function FieldSelect({\n value,\n options,\n onChange,\n disabled,\n placeholder = 'Select…',\n}: {\n value: string\n options: string[]\n onChange: (v: string) => void\n disabled?: boolean\n placeholder?: string\n}) {\n // When the current value isn't one of the options (empty/unset), show the\n // placeholder as a selected-but-disabled row so the control reads honestly.\n const showPlaceholder = value === '' || !options.includes(value)\n return (\n <select\n value={showPlaceholder ? '' : value}\n onChange={(e) => onChange(e.currentTarget.value)}\n disabled={disabled}\n aria-label={placeholder}\n style={selectStyle(disabled)}\n >\n {showPlaceholder ? (\n <option value=\"\" disabled style={OPTION_STYLE}>\n {placeholder}\n </option>\n ) : null}\n {options.map((opt) => (\n <option key={opt} value={opt} style={OPTION_STYLE}>\n {opt}\n </option>\n ))}\n </select>\n )\n}\n\nexport function FieldSlider({\n value,\n min,\n max,\n step,\n onChange,\n disabled,\n}: {\n value: number\n min: number\n max: number\n step: number\n onChange: (v: number) => void\n disabled?: boolean\n}) {\n return (\n <XStack gap=\"$3\" items=\"center\">\n <Text width={56} fontSize=\"$3\" color=\"$color11\">\n {value}\n </Text>\n <Slider\n flex={1}\n min={min}\n max={max}\n step={step}\n value={[value]}\n onValueChange={(v) => onChange(v[0] ?? min)}\n disabled={disabled}\n >\n <Slider.Track>\n <Slider.TrackActive />\n </Slider.Track>\n <Slider.Thumb index={0} circular />\n </Slider>\n </XStack>\n )\n}\n","import type { ComponentType } from 'react'\nimport type { GetThemeValueForKey } from '@hanzo/gui'\n\n/**\n * Bridge between raw CSS colors (product hex accents) and Gui's typed `color`\n * prop. Gui types `color` as a theme-token template (`$color12`, …), but ANY CSS\n * color is valid at runtime — so tinting an icon with a product hex needs one\n * sanctioned cast, in ONE place, rather than `as any` scattered around.\n */\nexport type IconColor = GetThemeValueForKey<'color'>\n\n/** Cast a raw CSS color (e.g. `#5E6AD2`) to Gui's `color` prop type. */\nexport const asColor = (hex: string): IconColor => hex as unknown as IconColor\n\n/** A lucide/Gui icon component that accepts a size + a (token-or-cast) color —\n * the shape the shell passes around for product/nav icons. */\nexport type IconLike = ComponentType<{ size?: number; color?: IconColor }>\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 * SlideOver — the ONE right-side (or left) slide-out overlay for the console.\n *\n * It is the single mechanism behind every off-canvas surface: the mobile nav\n * drawer, the item DetailPane, and the account/settings menu. One definition, many\n * mounts (DRY) — so every drawer slides, dims, traps, and closes identically.\n *\n * Smoothness is CSS-transform driven (never a JS layout branch): the panel is\n * ALWAYS mounted and toggles `translateX(0) ↔ translateX(±100%)` via the shared\n * `.hz-slide` class, and the backdrop cross-fades via `.hz-fade`. Because it never\n * unmounts, the EXIT animates too (a `Dialog` that unmounts on close cannot). Both\n * classes are reduced-motion-aware in `globals.css`, so the whole thing snaps\n * instantly for users who ask for that — no bespoke logic here.\n *\n * Responsive by construction: FULL-WIDTH (full-screen) below `lg`, a fixed-width\n * pane at `lg+` (`size`). Uses `100dvh` so the mobile browser chrome never clips it.\n *\n * A11y: `role=\"dialog\" aria-modal`, Escape to close, backdrop click to close, body\n * scroll lock while open (ref-counted so stacked overlays don't fight), and focus\n * moves into the panel on open and returns to the opener on close.\n */\nimport { useEffect, useRef, type ReactNode } from 'react'\nimport { Button, ScrollView, Text, XStack, YStack } from '@hanzo/gui'\nimport { X } from '@hanzogui/lucide-icons-2'\n\nimport { asColor, type IconLike } from './color'\n\n/** The lg breakpoint (px) — matches the shell's one responsive threshold. */\nconst LG = 1024\n\n// ── Body scroll lock, ref-counted so nested/stacked overlays don't clobber it ──\nlet lockCount = 0\nlet savedOverflow = ''\nfunction lockScroll() {\n if (typeof document === 'undefined') return\n if (lockCount === 0) {\n savedOverflow = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n }\n lockCount++\n}\nfunction unlockScroll() {\n if (typeof document === 'undefined') return\n lockCount = Math.max(0, lockCount - 1)\n if (lockCount === 0) document.body.style.overflow = savedOverflow\n}\n\nexport type SlideOverProps = {\n open: boolean\n onClose: () => void\n /** Which edge the panel slides from. Default right. */\n side?: 'right' | 'left'\n /** Panel width at lg+ (px). Below lg it is always full-screen. Default 420. */\n size?: number\n /** Optional header title — when set, SlideOver renders a header + a scroll body. */\n title?: ReactNode\n /** Optional header icon (tinted with `iconColor`). */\n icon?: IconLike\n iconColor?: string\n /** Extra header content, right-aligned before the close button. */\n headerRight?: ReactNode\n /** Accessible label when no visible title is given. */\n ariaLabel?: string\n /** z-index for stacking (a pane opened over a drawer passes a higher value). */\n zIndex?: number\n children: ReactNode\n}\n\nexport function SlideOver({\n open,\n onClose,\n side = 'right',\n size = 420,\n title,\n icon: Icon,\n iconColor,\n headerRight,\n ariaLabel,\n zIndex = 1000,\n children,\n}: SlideOverProps) {\n const panelRef = useRef<HTMLElement | null>(null)\n const openerRef = useRef<Element | null>(null)\n\n // Body scroll lock + focus management, driven by `open`.\n useEffect(() => {\n if (!open) return\n openerRef.current = typeof document !== 'undefined' ? document.activeElement : null\n lockScroll()\n // Move focus into the panel (next frame so it is laid out + on-screen).\n const t = window.setTimeout(() => {\n const el = panelRef.current\n if (el && typeof el.focus === 'function') el.focus()\n }, 0)\n return () => {\n window.clearTimeout(t)\n unlockScroll()\n const opener = openerRef.current\n if (opener && opener instanceof HTMLElement && typeof opener.focus === 'function') opener.focus()\n }\n }, [open])\n\n // Escape closes.\n useEffect(() => {\n if (!open) return\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.stopPropagation()\n onClose()\n }\n }\n window.addEventListener('keydown', onKey)\n return () => window.removeEventListener('keydown', onKey)\n }, [open, onClose])\n\n const offscreen = side === 'right' ? 'translateX(100%)' : 'translateX(-100%)'\n const edge = side === 'right' ? { r: 0 } : { l: 0 }\n\n return (\n <YStack\n // Fixed to the viewport; overflow hidden so the off-screen panel (absolute\n // child) is CLIPPED and never adds a horizontal scrollbar.\n overflow=\"hidden\"\n pointerEvents={open ? 'auto' : 'none'}\n aria-hidden={!open}\n style={{ position: 'fixed', inset: 0, zIndex }}\n >\n {/* Backdrop — cross-fades; click to dismiss. */}\n <YStack\n position=\"absolute\"\n t={0}\n l={0}\n r={0}\n b={0}\n bg=\"rgba(0,0,0,0.55)\"\n className=\"hz-fade\"\n style={{ opacity: open ? 1 : 0 }}\n onPress={onClose}\n />\n\n {/* Panel — slides in from the edge. Full-screen below lg, fixed width at lg+. */}\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 tabIndex={-1}\n role=\"dialog\"\n aria-modal={open ? true : undefined}\n aria-label={typeof title === 'string' ? title : ariaLabel}\n position=\"absolute\"\n t={0}\n b={0}\n {...edge}\n width=\"100%\"\n $lg={{ width: size, maxW: '100vw' }}\n bg=\"$color1\"\n borderLeftWidth={side === 'right' ? 1 : 0}\n borderRightWidth={side === 'left' ? 1 : 0}\n borderColor=\"$borderColor\"\n // Material paper depth — the drawer reads as a sheet lifted above the dimmed\n // list behind it (real layered shadow, theme-aware), not a flat panel.\n className=\"hz-slide hz-elevation-4\"\n // Full-height sheet (100dvh — mobile-safe), inset for the notch (top) + home\n // indicator (bottom) so the drawer header + footer actions clear them on\n // notched devices (env insets are 0 elsewhere, so no effect there).\n style={{\n transform: open ? 'translateX(0)' : offscreen,\n height: '100dvh',\n paddingTop: 'env(safe-area-inset-top)',\n paddingBottom: 'env(safe-area-inset-bottom)',\n }}\n >\n {title !== undefined ? (\n <>\n <XStack\n items=\"center\"\n gap=\"$2.5\"\n px=\"$4\"\n height={56}\n borderBottomWidth={1}\n borderColor=\"$borderColor\"\n >\n {Icon ? <Icon size={18} color={iconColor ? asColor(iconColor) : undefined} /> : null}\n <Text flex={1} fontSize=\"$5\" fontWeight=\"700\" color=\"$color12\" numberOfLines={1}>\n {title}\n </Text>\n {headerRight}\n <Button chromeless width={44} height={44} icon={<X size={18} />} onPress={onClose} aria-label=\"Close\" />\n </XStack>\n <ScrollView flex={1}>\n <YStack flex={1} p=\"$4\" gap=\"$3\">\n {children}\n </YStack>\n </ScrollView>\n </>\n ) : (\n // Bare mode — the caller owns the full panel layout (e.g. the nav drawer\n // renders its own header + scroll + footer).\n children\n )}\n </YStack>\n </YStack>\n )\n}\n\nexport { LG as SLIDEOVER_LG }\n","'use client'\n\n/**\n * Status pill — maps a resource/cluster status string to a tone, one place.\n *\n * Provisioned things (managed resources, clusters) report free-form lifecycle\n * strings; this normalizes them to green/yellow/red/neutral so every list reads\n * the same. Style props use the v5 shorthand set.\n */\nimport { Text } from '@hanzo/gui'\n\ntype Tone = 'green' | 'yellow' | 'red' | 'neutral'\n\nconst toneOf = (status: string): Tone => {\n const s = status.toLowerCase()\n // Platform health verdicts map straight to a tone (the apps inventory reports\n // green/yellow/red directly).\n if (s === 'green') return 'green'\n if (s === 'yellow') return 'yellow'\n if (s === 'red') return 'red'\n if (['ready', 'active', 'running', 'available', 'ok', 'live', 'succeeded', 'connected', 'synced', 'imported'].includes(s)) return 'green'\n if (['creating', 'provisioning', 'pending', 'updating', 'attaching', 'building', 'deploying', 'queued', 'importing'].includes(s))\n return 'yellow'\n if (['error', 'failed', 'degraded', 'down', 'canceled', 'conflict'].includes(s)) return 'red'\n return 'neutral'\n}\n\n// `as const` keeps the literal token types (not widened to `string`) so they\n// satisfy the GUI `bg`/`color` token unions.\nconst TONE_BG = {\n green: '$color5',\n yellow: '$color4',\n red: '$color4',\n neutral: '$color3',\n} as const\nconst TONE_FG = {\n green: '$color12',\n yellow: '$color12',\n red: '$color12',\n neutral: '$color11',\n} as const\n\nexport function StatusTag({ status }: { status?: string }) {\n const tone = toneOf(status ?? '')\n return (\n <Text fontSize=\"$1\" px=\"$2\" py=\"$1\" rounded=\"$2\" bg={TONE_BG[tone]} color={TONE_FG[tone]}>\n {status || 'unknown'}\n </Text>\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\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 [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 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],\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","'use client'\n\n/**\n * ChannelBadge — the ONE way a social network is marked (brand color + glyph +\n * optional label), on @hanzo/gui primitives so it renders on web, native, and\n * desktop. Data-free / host-agnostic. Extracted from Hanzo Social (social.hanzo.ai).\n */\nimport { Text, XStack, YStack } from '@hanzo/gui'\n\nexport type Channel =\n | 'x'\n | 'facebook'\n | 'instagram'\n | 'linkedin'\n | 'tiktok'\n | 'youtube'\n | 'threads'\n\n/**\n * A known network, or whatever string the server sent. The badge renders unknown\n * values through the `x` fallback below, so the type says what it really accepts —\n * callers keep autocomplete without having to narrow a `string` field first.\n */\nexport type ChannelLike = Channel | (string & {})\n\nconst META: Record<Channel, { label: string; bg: string; fg: string; mark: string }> = {\n x: { label: 'X', bg: '#0f0f12', fg: '#e6e6ea', mark: '𝕏' },\n facebook: { label: 'Facebook', bg: '#1877f2', fg: '#ffffff', mark: 'f' },\n instagram: { label: 'Instagram', bg: '#e1306c', fg: '#ffffff', mark: 'IG' },\n linkedin: { label: 'LinkedIn', bg: '#0a66c2', fg: '#ffffff', mark: 'in' },\n tiktok: { label: 'TikTok', bg: '#111114', fg: '#25f4ee', mark: 'TT' },\n youtube: { label: 'YouTube', bg: '#ff0000', fg: '#ffffff', mark: '▶' },\n threads: { label: 'Threads', bg: '#111114', fg: '#e6e6ea', mark: '@' },\n}\n\nexport function ChannelBadge({\n channel,\n showLabel = false,\n size = 22,\n}: {\n channel: ChannelLike\n showLabel?: boolean\n size?: number\n}) {\n const m = META[channel as Channel] ?? META.x\n return (\n <XStack items=\"center\" gap=\"$2\">\n <YStack\n width={size}\n height={size}\n items=\"center\"\n justify=\"center\"\n rounded=\"$2\"\n bg={m.bg as never}\n >\n <Text fontSize=\"$1\" fontWeight=\"800\" color={m.fg as never}>\n {m.mark}\n </Text>\n </YStack>\n {showLabel ? (\n <Text fontSize=\"$3\" color=\"$color12\">\n {m.label}\n </Text>\n ) : null}\n </XStack>\n )\n}\n","'use client'\n\n/**\n * CampaignCard — one marketing campaign (name, channel, lifecycle, budget/spend\n * bar). Pure: all data via props. Reuses the shared StatusTag for the lifecycle\n * pill (one status vocabulary). Extracted from Hanzo Social.\n */\nimport { Card, Text, XStack, YStack } from '@hanzo/gui'\nimport { StatusTag } from '../StatusTag'\n\nexport type Campaign = {\n id: string\n name: string\n channel: string\n status: string\n objective?: string\n /** minor units (cents) */\n budget: number\n spend: number\n}\n\nconst money = (cents: number) => `$${Math.round((cents || 0) / 100).toLocaleString()}`\n\nexport function CampaignCard({ campaign }: { campaign: Campaign }) {\n const pct =\n campaign.budget > 0 ? Math.min(100, (campaign.spend / campaign.budget) * 100) : 0\n return (\n <Card p=\"$4\" gap=\"$3\" borderWidth={1} borderColor=\"$borderColor\" width=\"100%\">\n <XStack items=\"flex-start\" justify=\"space-between\" gap=\"$2\">\n <YStack gap=\"$1\">\n <Text fontSize=\"$4\" fontWeight=\"700\">\n {campaign.name}\n </Text>\n <Text fontSize=\"$2\" color=\"$color11\">\n {campaign.channel}\n </Text>\n </YStack>\n <StatusTag status={campaign.status} />\n </XStack>\n\n {campaign.objective ? (\n <Text fontSize=\"$2\" color=\"$color11\">\n {campaign.objective}\n </Text>\n ) : null}\n\n <YStack gap=\"$1.5\">\n <XStack justify=\"space-between\">\n <Text fontSize=\"$1\" color=\"$color11\">\n {money(campaign.spend)} spent\n </Text>\n <Text fontSize=\"$1\" color=\"$color11\">\n {money(campaign.budget)} budget\n </Text>\n </XStack>\n <YStack height={6} rounded=\"$2\" bg=\"$color3\" overflow=\"hidden\">\n <YStack height={6} rounded=\"$2\" bg=\"$color9\" width={`${pct}%` as never} />\n </YStack>\n </YStack>\n </Card>\n )\n}\n","/**\n * The ONE place a post's schedule time and body are formatted, bucketed by day,\n * and parsed. Pure (no React, no host) so the agenda, the table cells and the\n * composer all read the same clock. Extracted from Hanzo Social.\n */\n\n/** Unix seconds → a short local timestamp, or '—' when unset (0). */\nexport function formatPostTime(unix: number): string {\n if (!unix) return '—'\n return new Date(unix * 1000).toLocaleString(undefined, {\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n })\n}\n\n/** Unix seconds → a day bucket key + label for the agenda (calendar) view. */\nexport function postDayBucket(unix: number): { key: string; label: string } {\n const d = new Date(unix * 1000)\n const key = `${d.getFullYear()}-${d.getMonth()}-${d.getDate()}`\n const label = d.toLocaleDateString(undefined, { weekday: 'short', month: 'short', day: 'numeric' })\n return { key, label }\n}\n\n/** Truncate a post body for a table cell / agenda card. */\nexport function postPreview(s: string): string {\n const t = s.trim()\n return t.length > 72 ? `${t.slice(0, 72)}…` : t || '—'\n}\n\n/** Parse a user-typed datetime (ISO or local) into unix seconds; invalid → 0. */\nexport function parsePostTime(dt: string): number {\n const ms = Date.parse(dt.trim())\n return Number.isFinite(ms) && ms > 0 ? Math.floor(ms / 1000) : 0\n}\n","'use client'\n\n/**\n * PostCard — one social post: channel, lifecycle, body, schedule time, a media\n * count, and injected edit/delete affordances. Pure (data + handlers via props);\n * composes ChannelBadge + the shared StatusTag. Extracted from Hanzo Social.\n */\nimport { Card, Text, XStack, YStack, Button } from '@hanzo/gui'\nimport { Pencil, Trash2 } from '@hanzogui/lucide-icons-2'\nimport { StatusTag } from '../StatusTag'\nimport { ChannelBadge, type ChannelLike } from './ChannelBadge'\nimport { formatPostTime } from './format'\n\nexport type Post = {\n id: string\n content: string\n channel: ChannelLike\n status: string\n /** unix seconds; 0/undefined = not scheduled */\n scheduleAt?: number\n media?: string[]\n}\n\nexport function PostCard({\n post,\n onEdit,\n onDelete,\n}: {\n post: Post\n onEdit?: (p: Post) => void\n onDelete?: (p: Post) => void\n}) {\n const mediaCount = post.media?.length ?? 0\n return (\n <Card p=\"$3\" gap=\"$2.5\" borderWidth={1} borderColor=\"$borderColor\" width=\"100%\">\n <XStack items=\"center\" justify=\"space-between\" gap=\"$2\">\n <XStack items=\"center\" gap=\"$2\">\n <ChannelBadge channel={post.channel} />\n <StatusTag status={post.status} />\n </XStack>\n <XStack gap=\"$1\">\n {onEdit ? (\n <Button size=\"$2\" chromeless icon={<Pencil size={15} />} onPress={() => onEdit(post)} />\n ) : null}\n {onDelete ? (\n <Button size=\"$2\" chromeless icon={<Trash2 size={15} />} onPress={() => onDelete(post)} />\n ) : null}\n </XStack>\n </XStack>\n\n <Text fontSize=\"$3\" color=\"$color12\">\n {post.content}\n </Text>\n\n <XStack items=\"center\" justify=\"space-between\" gap=\"$2\">\n {post.scheduleAt ? (\n <Text fontSize=\"$1\" color=\"$color11\">\n {formatPostTime(post.scheduleAt)}\n </Text>\n ) : (\n <YStack />\n )}\n {mediaCount ? (\n <Text fontSize=\"$1\" color=\"$color10\">\n {mediaCount} media\n </Text>\n ) : null}\n </XStack>\n </Card>\n )\n}\n","'use client'\n\n/**\n * PostAgenda — the calendar view: every post carrying a time, ordered and grouped\n * by local day. Pure: posts and the open handler are injected. Extracted from\n * Hanzo Social (social.hanzo.ai).\n */\nimport { useMemo } from 'react'\nimport { Text, XStack, YStack } from '@hanzo/gui'\nimport { Calendar } from '@hanzogui/lucide-icons-2'\nimport { EmptyState } from '../EmptyState'\nimport { StatusTag } from '../StatusTag'\nimport { formatPostTime, postDayBucket, postPreview } from './format'\nimport type { Post } from './PostCard'\n\nexport function PostAgenda({ posts, onOpen }: { posts: Post[]; onOpen: (p: Post) => void }) {\n const days = useMemo(() => {\n const timed = posts\n .filter((p) => (p.scheduleAt ?? 0) > 0)\n .sort((a, b) => (a.scheduleAt ?? 0) - (b.scheduleAt ?? 0))\n const groups: { label: string; items: Post[] }[] = []\n const index = new Map<string, number>()\n for (const p of timed) {\n const { key, label } = postDayBucket(p.scheduleAt ?? 0)\n let i = index.get(key)\n if (i === undefined) {\n i = groups.length\n index.set(key, i)\n groups.push({ label, items: [] })\n }\n groups[i].items.push(p)\n }\n return groups\n }, [posts])\n\n if (days.length === 0) {\n return (\n <EmptyState\n icon={Calendar}\n title=\"Nothing on the calendar\"\n description=\"Scheduled and timed posts appear here, grouped by day. Compose a post and pick Schedule to plan ahead.\"\n />\n )\n }\n\n return (\n <YStack gap=\"$4\">\n {days.map((d) => (\n <YStack key={d.label} gap=\"$2\">\n <Text fontSize=\"$3\" fontWeight=\"500\" color=\"$color11\">\n {d.label}\n </Text>\n {d.items.map((p) => (\n <XStack\n key={p.id}\n items=\"center\"\n justify=\"space-between\"\n gap=\"$3\"\n borderWidth={1}\n borderColor=\"$borderColor\"\n rounded=\"$4\"\n px=\"$4\"\n py=\"$3\"\n cursor=\"pointer\"\n hoverStyle={{ bg: '$color2' }}\n onPress={() => onOpen(p)}\n >\n <YStack gap=\"$1\" flex={1}>\n <Text fontSize=\"$3\">{postPreview(p.content)}</Text>\n <XStack gap=\"$2\" items=\"center\">\n <Text fontSize=\"$1\" color=\"$color10\">\n {p.channel}\n </Text>\n <Text fontSize=\"$1\" color=\"$color10\">\n · {formatPostTime(p.scheduleAt ?? 0)}\n </Text>\n </XStack>\n </YStack>\n <StatusTag status={p.status} />\n </XStack>\n ))}\n </YStack>\n ))}\n </YStack>\n )\n}\n","'use client'\n\n/**\n * PostComposer — compose one post: body, network, and the intent (save a draft,\n * schedule it, or publish now). Owns the form state, the validation, and the ONE\n * mapping from an intent to the (status, scheduleAt) the backend stores; the host\n * owns persistence. Extracted from Hanzo Social (social.hanzo.ai).\n */\nimport { useState } from 'react'\nimport { Text, XStack, YStack } from '@hanzo/gui'\nimport { AlertTriangle } from '@hanzogui/lucide-icons-2'\nimport { FieldRow, FieldSelect, FieldText, FieldTextArea } from '../Field'\nimport { PrimaryButton } from '../PrimaryButton'\nimport { parsePostTime } from './format'\nimport type { ProviderCapability } from './ProviderReadinessList'\n\n/** Compose intents → the (status, scheduleAt) the backend stores. */\nexport const COMPOSE_MODES = ['draft', 'schedule', 'now'] as const\nexport type ComposeMode = (typeof COMPOSE_MODES)[number]\nconst COMPOSE_LABEL: Record<ComposeMode, string> = {\n draft: 'Save draft',\n schedule: 'Schedule',\n now: 'Publish now',\n}\n\n/** The writable fields of a new post — what the intent above encodes. */\nexport type PostDraft = {\n content: string\n channel: string\n status: string\n /** unix seconds; 0 = not scheduled / publish now */\n scheduleAt: number\n}\n\nexport function PostComposer({\n channels,\n providers,\n onSubmit,\n}: {\n /** The networks offered, in order; the first is the default. */\n channels: string[]\n /** Live publish-readiness, used to warn before a publish that cannot succeed. */\n providers: ProviderCapability[]\n /**\n * Persist the draft. Resolve `null` when it landed — the host then swaps this\n * panel out — or a message to surface, which keeps the panel open and editable.\n * Total by contract: the host classifies its own failures rather than throwing.\n */\n onSubmit: (draft: PostDraft, mode: ComposeMode) => Promise<string | null>\n}) {\n const [content, setContent] = useState('')\n const [channel, setChannel] = useState<string>(channels[0] ?? 'x')\n const [mode, setMode] = useState<ComposeMode>('draft')\n const [scheduleAt, setScheduleAt] = useState('')\n const [saving, setSaving] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n const cap = providers.find((p) => p.provider === channel)\n const unconfigured = (mode === 'now' || mode === 'schedule') && !!cap && !cap.credentialsConfigured\n\n const submit = async () => {\n if (!content.trim()) {\n setError('Content is required.')\n return\n }\n let status = 'draft'\n let at = 0\n if (mode === 'schedule') {\n at = parsePostTime(scheduleAt)\n if (at <= Math.floor(Date.now() / 1000)) {\n setError('Pick a future date and time to schedule.')\n return\n }\n status = 'scheduled'\n } else if (mode === 'now') {\n status = 'scheduled' // scheduled + scheduleAt 0 ⇒ the backend publishes on create\n }\n setSaving(true)\n setError(null)\n const message = await onSubmit({ content: content.trim(), channel, status, scheduleAt: at }, mode)\n // On success the host unmounts this panel, so `saving` deliberately stays set —\n // the button never flickers back to enabled on the way out.\n if (message) {\n setError(message)\n setSaving(false)\n }\n }\n\n return (\n <YStack gap=\"$3\" p=\"$4\">\n <FieldRow label=\"Content\">\n <FieldTextArea value={content} onChange={setContent} disabled={saving} />\n </FieldRow>\n <FieldRow label=\"Channel\">\n <FieldSelect value={channel} options={channels} onChange={setChannel} disabled={saving} />\n </FieldRow>\n <FieldRow label=\"When\">\n <FieldSelect\n value={mode}\n options={[...COMPOSE_MODES]}\n onChange={(v) => setMode(v as ComposeMode)}\n disabled={saving}\n />\n </FieldRow>\n {mode === 'schedule' ? (\n <FieldRow label=\"Schedule at\">\n <FieldText\n value={scheduleAt}\n onChange={setScheduleAt}\n placeholder=\"2026-07-15 09:00\"\n disabled={saving}\n />\n </FieldRow>\n ) : null}\n {unconfigured ? (\n <XStack items=\"flex-start\" gap=\"$2\">\n <AlertTriangle size={14} color=\"var(--yellow10)\" />\n <Text fontSize=\"$1\" color=\"$color10\">\n {channel} isn’t configured to publish yet — needs {cap?.missingCredentials.join(', ')}. The post is saved and\n marked failed on publish until credentials are supplied.\n </Text>\n </XStack>\n ) : null}\n {error ? (\n <Text fontSize=\"$2\" color=\"$red10\">\n {error}\n </Text>\n ) : null}\n <PrimaryButton onPress={submit} disabled={saving}>\n {saving ? 'Working…' : COMPOSE_LABEL[mode]}\n </PrimaryButton>\n </YStack>\n )\n}\n","'use client'\n\n/**\n * ProviderReadinessList — each network's LIVE publish-readiness: ready, or the\n * exact OAuth-app credentials this deployment still needs. Honest by construction\n * (it can only render what the server reported) so a connect flow never fabricates\n * a \"connected\". Extracted from Hanzo Social (social.hanzo.ai).\n */\nimport { Text, XStack, YStack } from '@hanzo/gui'\nimport { AlertTriangle, CheckCircle2 } from '@hanzogui/lucide-icons-2'\n\n/** One network's readiness, as reported by the server. */\nexport type ProviderCapability = {\n provider: string\n credentialsConfigured: boolean\n /** The env vars still missing — shown verbatim, never summarized away. */\n missingCredentials: string[]\n}\n\nexport function ProviderReadinessList({ providers }: { providers: ProviderCapability[] }) {\n return (\n <YStack gap=\"$2\">\n <Text fontSize=\"$2\" color=\"$color10\">\n Network publish-readiness\n </Text>\n {providers.map((p) => (\n <XStack key={p.provider} items=\"center\" justify=\"space-between\" gap=\"$3\" py=\"$1\">\n <XStack items=\"center\" gap=\"$2\">\n {p.credentialsConfigured ? (\n <CheckCircle2 size={14} color=\"var(--green10)\" />\n ) : (\n <AlertTriangle size={14} color=\"var(--yellow10)\" />\n )}\n <Text fontSize=\"$2\">{p.provider}</Text>\n </XStack>\n <Text fontSize=\"$1\" color=\"$color10\">\n {p.credentialsConfigured ? 'Ready' : `needs ${p.missingCredentials.join(', ')}`}\n </Text>\n </XStack>\n ))}\n </YStack>\n )\n}\n","'use client'\n\n/**\n * SocialSummaryBar — the per-org social roll-up (posts / scheduled / published /\n * accounts) as a row of stat cells. Pure: the counts are injected. Extracted from\n * Hanzo Social (social.hanzo.ai).\n */\nimport { Text, XStack, YStack } from '@hanzo/gui'\n\nexport type SocialSummary = {\n posts: number\n scheduled: number\n published: number\n accounts: number\n}\n\nexport function SocialSummaryBar({ summary }: { summary: SocialSummary }) {\n const cells: { label: string; value: number }[] = [\n { label: 'Posts', value: summary.posts },\n { label: 'Scheduled', value: summary.scheduled },\n { label: 'Published', value: summary.published },\n { label: 'Accounts', value: summary.accounts },\n ]\n return (\n <XStack gap=\"$3\" flexWrap=\"wrap\">\n {cells.map((c) => (\n <YStack\n key={c.label}\n gap=\"$1\"\n borderWidth={1}\n borderColor=\"$borderColor\"\n rounded=\"$4\"\n px=\"$4\"\n py=\"$3\"\n minW={140}\n >\n <Text fontSize=\"$1\" color=\"$color10\">\n {c.label}\n </Text>\n <Text fontSize=\"$6\" fontWeight=\"500\" className=\"hz-tnum\">\n {c.value}\n </Text>\n </YStack>\n ))}\n </XStack>\n )\n}\n","'use client'\n\n/**\n * ViewToggle — the list / calendar segmented control over a post collection.\n * Pure: the current view and the change handler are injected. Extracted from\n * Hanzo Social (social.hanzo.ai).\n */\nimport { Text, XStack } from '@hanzo/gui'\nimport { Calendar, List } from '@hanzogui/lucide-icons-2'\nimport type { IconLike } from '../color'\n\nexport type PostView = 'list' | 'calendar'\n\nconst OPTIONS: { id: PostView; label: string; icon: IconLike }[] = [\n { id: 'list', label: 'List', icon: List },\n { id: 'calendar', label: 'Calendar', icon: Calendar },\n]\n\nexport function ViewToggle({\n view,\n onChange,\n}: {\n view: PostView\n onChange: (v: PostView) => void\n}) {\n return (\n <XStack borderWidth={1} borderColor=\"$borderColor\" rounded=\"$4\" overflow=\"hidden\">\n {OPTIONS.map((o) => {\n const Icon = o.icon\n const active = view === o.id\n return (\n <XStack\n key={o.id}\n items=\"center\"\n gap=\"$2\"\n px=\"$3\"\n py=\"$2\"\n cursor=\"pointer\"\n bg={active ? '$color4' : 'transparent'}\n hoverStyle={{ bg: active ? '$color4' : '$color2' }}\n onPress={() => onChange(o.id)}\n >\n <Icon size={14} />\n <Text fontSize=\"$2\" fontWeight={active ? '500' : '400'}>\n {o.label}\n </Text>\n </XStack>\n )\n })}\n </XStack>\n )\n}\n"]}