@hanzo/ui 8.0.11 → 8.0.13

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 (169) hide show
  1. package/dist/backends/gui/index.d.ts +2 -0
  2. package/dist/backends/shadcn/aspect-ratio.d.ts +4 -0
  3. package/dist/backends/shadcn/avatar.d.ts +6 -0
  4. package/dist/backends/shadcn/badge.d.ts +9 -0
  5. package/dist/backends/shadcn/button.d.ts +19 -0
  6. package/dist/backends/shadcn/card.d.ts +9 -0
  7. package/dist/backends/shadcn/checkbox.d.ts +9 -0
  8. package/dist/backends/shadcn/collapsible.d.ts +5 -0
  9. package/dist/backends/shadcn/command.d.ts +80 -0
  10. package/dist/backends/shadcn/dialog.d.ts +15 -0
  11. package/dist/backends/shadcn/dropdown-menu.d.ts +34 -0
  12. package/dist/backends/shadcn/index.d.ts +23 -0
  13. package/dist/backends/shadcn/input.d.ts +11 -0
  14. package/dist/backends/shadcn/label.d.ts +4 -0
  15. package/dist/backends/shadcn/popover.d.ts +7 -0
  16. package/dist/backends/shadcn/progress.d.ts +4 -0
  17. package/dist/backends/shadcn/scroll-area.d.ts +5 -0
  18. package/dist/backends/shadcn/select.d.ts +13 -0
  19. package/dist/backends/shadcn/separator.d.ts +4 -0
  20. package/dist/backends/shadcn/slider.d.ts +4 -0
  21. package/dist/backends/shadcn/switch.d.ts +4 -0
  22. package/dist/backends/shadcn/tabs.d.ts +7 -0
  23. package/dist/backends/shadcn/textarea.d.ts +4 -0
  24. package/dist/backends/shadcn/toaster.d.ts +10 -0
  25. package/dist/backends/shadcn/tooltip.d.ts +7 -0
  26. package/dist/backends/shadcn/utils.d.ts +8 -0
  27. package/dist/components.d.ts +1 -0
  28. package/dist/core/cn.d.ts +11 -0
  29. package/dist/core/fonts.d.ts +26 -0
  30. package/dist/core/index.d.ts +3 -0
  31. package/dist/core/tokens.d.ts +16 -0
  32. package/dist/gitops.cjs +3 -3
  33. package/dist/gitops.d.ts +1 -1
  34. package/dist/gitops.js +1 -1
  35. package/dist/index.cjs +1138 -291
  36. package/dist/index.cjs.map +1 -1
  37. package/dist/index.d.ts +2 -2
  38. package/dist/index.js +1017 -3
  39. package/dist/index.js.map +1 -1
  40. package/dist/models/ModelSelector.d.ts +23 -0
  41. package/dist/models/catalog.d.ts +53 -0
  42. package/dist/models/index.d.ts +5 -0
  43. package/dist/models/types.d.ts +39 -0
  44. package/dist/primitives/AspectRatio.d.ts +1 -0
  45. package/dist/primitives/Avatar.d.ts +1 -0
  46. package/dist/primitives/AvatarFallback.d.ts +1 -0
  47. package/dist/primitives/AvatarImage.d.ts +1 -0
  48. package/dist/primitives/Badge.d.ts +1 -0
  49. package/dist/primitives/Button.d.ts +1 -0
  50. package/dist/primitives/Card.d.ts +1 -0
  51. package/dist/primitives/CardAction.d.ts +1 -0
  52. package/dist/primitives/CardContent.d.ts +1 -0
  53. package/dist/primitives/CardDescription.d.ts +1 -0
  54. package/dist/primitives/CardFooter.d.ts +1 -0
  55. package/dist/primitives/CardHeader.d.ts +1 -0
  56. package/dist/primitives/CardTitle.d.ts +1 -0
  57. package/dist/primitives/Checkbox.d.ts +1 -0
  58. package/dist/primitives/Collapsible.d.ts +1 -0
  59. package/dist/primitives/CollapsibleContent.d.ts +1 -0
  60. package/dist/primitives/CollapsibleTrigger.d.ts +1 -0
  61. package/dist/primitives/Command.d.ts +1 -0
  62. package/dist/primitives/CommandDialog.d.ts +1 -0
  63. package/dist/primitives/CommandEmpty.d.ts +1 -0
  64. package/dist/primitives/CommandGroup.d.ts +1 -0
  65. package/dist/primitives/CommandInput.d.ts +1 -0
  66. package/dist/primitives/CommandItem.d.ts +1 -0
  67. package/dist/primitives/CommandList.d.ts +1 -0
  68. package/dist/primitives/CommandSeparator.d.ts +1 -0
  69. package/dist/primitives/CommandShortcut.d.ts +1 -0
  70. package/dist/primitives/Dialog.d.ts +1 -0
  71. package/dist/primitives/DialogClose.d.ts +1 -0
  72. package/dist/primitives/DialogContent.d.ts +1 -0
  73. package/dist/primitives/DialogDescription.d.ts +1 -0
  74. package/dist/primitives/DialogFooter.d.ts +1 -0
  75. package/dist/primitives/DialogHeader.d.ts +1 -0
  76. package/dist/primitives/DialogOverlay.d.ts +1 -0
  77. package/dist/primitives/DialogPortal.d.ts +1 -0
  78. package/dist/primitives/DialogTitle.d.ts +1 -0
  79. package/dist/primitives/DialogTrigger.d.ts +1 -0
  80. package/dist/primitives/DropdownMenu.d.ts +1 -0
  81. package/dist/primitives/DropdownMenuCheckboxItem.d.ts +1 -0
  82. package/dist/primitives/DropdownMenuContent.d.ts +1 -0
  83. package/dist/primitives/DropdownMenuGroup.d.ts +1 -0
  84. package/dist/primitives/DropdownMenuItem.d.ts +1 -0
  85. package/dist/primitives/DropdownMenuLabel.d.ts +1 -0
  86. package/dist/primitives/DropdownMenuPortal.d.ts +1 -0
  87. package/dist/primitives/DropdownMenuRadioGroup.d.ts +1 -0
  88. package/dist/primitives/DropdownMenuRadioItem.d.ts +1 -0
  89. package/dist/primitives/DropdownMenuSeparator.d.ts +1 -0
  90. package/dist/primitives/DropdownMenuShortcut.d.ts +1 -0
  91. package/dist/primitives/DropdownMenuSub.d.ts +1 -0
  92. package/dist/primitives/DropdownMenuSubContent.d.ts +1 -0
  93. package/dist/primitives/DropdownMenuSubTrigger.d.ts +1 -0
  94. package/dist/primitives/DropdownMenuTrigger.d.ts +1 -0
  95. package/dist/primitives/Input.d.ts +1 -0
  96. package/dist/primitives/Label.d.ts +1 -0
  97. package/dist/primitives/Popover.d.ts +1 -0
  98. package/dist/primitives/PopoverAnchor.d.ts +1 -0
  99. package/dist/primitives/PopoverContent.d.ts +1 -0
  100. package/dist/primitives/PopoverTrigger.d.ts +1 -0
  101. package/dist/primitives/Progress.d.ts +1 -0
  102. package/dist/primitives/ScrollArea.d.ts +1 -0
  103. package/dist/primitives/ScrollBar.d.ts +1 -0
  104. package/dist/primitives/Select.d.ts +1 -0
  105. package/dist/primitives/SelectContent.d.ts +1 -0
  106. package/dist/primitives/SelectGroup.d.ts +1 -0
  107. package/dist/primitives/SelectItem.d.ts +1 -0
  108. package/dist/primitives/SelectLabel.d.ts +1 -0
  109. package/dist/primitives/SelectScrollDownButton.d.ts +1 -0
  110. package/dist/primitives/SelectScrollUpButton.d.ts +1 -0
  111. package/dist/primitives/SelectSeparator.d.ts +1 -0
  112. package/dist/primitives/SelectTrigger.d.ts +1 -0
  113. package/dist/primitives/SelectValue.d.ts +1 -0
  114. package/dist/primitives/Separator.d.ts +1 -0
  115. package/dist/primitives/Slider.d.ts +1 -0
  116. package/dist/primitives/Switch.d.ts +1 -0
  117. package/dist/primitives/Tabs.d.ts +1 -0
  118. package/dist/primitives/TabsContent.d.ts +1 -0
  119. package/dist/primitives/TabsList.d.ts +1 -0
  120. package/dist/primitives/TabsTrigger.d.ts +1 -0
  121. package/dist/primitives/Textarea.d.ts +1 -0
  122. package/dist/primitives/Toaster.d.ts +1 -0
  123. package/dist/primitives/Tooltip.d.ts +1 -0
  124. package/dist/primitives/TooltipContent.d.ts +1 -0
  125. package/dist/primitives/TooltipProvider.d.ts +1 -0
  126. package/dist/primitives/TooltipTrigger.d.ts +1 -0
  127. package/dist/primitives/badgeVariants.d.ts +1 -0
  128. package/dist/primitives/buttonVariants.d.ts +1 -0
  129. package/dist/primitives/index.d.ts +1 -0
  130. package/dist/primitives/toast.d.ts +1 -0
  131. package/dist/product/AnimatedLogo.d.ts +47 -0
  132. package/dist/product/BackendState.d.ts +42 -0
  133. package/dist/product/Charts.d.ts +4 -0
  134. package/dist/product/CommerceResource.d.ts +32 -0
  135. package/dist/product/ConfirmDelete.d.ts +8 -0
  136. package/dist/product/DataTable.d.ts +30 -2
  137. package/dist/product/Field.d.ts +7 -2
  138. package/dist/product/Filters.d.ts +29 -0
  139. package/dist/product/PrimaryButton.d.ts +5 -0
  140. package/dist/product/SiteFooter.d.ts +28 -0
  141. package/dist/product/SiteNav.d.ts +60 -0
  142. package/dist/product/accent.d.ts +33 -0
  143. package/dist/product/animatedLogo.logic.d.ts +52 -0
  144. package/dist/product/brand.d.ts +45 -0
  145. package/dist/product/host.d.ts +21 -0
  146. package/dist/product/index.cjs +3516 -265
  147. package/dist/product/index.cjs.map +1 -1
  148. package/dist/product/index.d.ts +11 -0
  149. package/dist/product/index.js +3402 -1
  150. package/dist/product/index.js.map +1 -1
  151. package/dist/product/social/CampaignCard.d.ts +13 -0
  152. package/dist/product/social/ChannelBadge.d.ts +14 -0
  153. package/dist/product/social/PostAgenda.d.ts +5 -0
  154. package/dist/product/social/PostCard.d.ts +6 -0
  155. package/dist/product/social/PostComposer.d.ts +24 -0
  156. package/dist/product/social/ProviderReadinessList.d.ts +4 -0
  157. package/dist/product/social/SocialResource.d.ts +7 -0
  158. package/dist/product/social/SocialSummaryBar.d.ts +4 -0
  159. package/dist/product/social/ViewToggle.d.ts +5 -0
  160. package/dist/product/social/api.d.ts +128 -0
  161. package/dist/product/social/format.d.ts +16 -0
  162. package/dist/product/social/index.d.ts +11 -0
  163. package/dist/product/surfaces.data.d.ts +1 -0
  164. package/dist/styles/hanzo-motion.css +52 -0
  165. package/package.json +90 -15
  166. package/dist/chunk-M2ILMK44.cjs +0 -2104
  167. package/dist/chunk-M2ILMK44.cjs.map +0 -1
  168. package/dist/chunk-YSURJUOA.js +0 -2035
  169. package/dist/chunk-YSURJUOA.js.map +0 -1
@@ -1 +0,0 @@
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/DataTable.tsx","../src/product/PrimaryButton.tsx","../src/product/EmptyState.tsx","../src/product/FadeIn.tsx","../src/product/Field.tsx","../src/product/PageHeader.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"],"names":["Sparkline","jsx","jsxs","XStack","YStack","Text","Donut","ACCENT","useRef","useState","useEffect","useCallback","Fragment","Button","useMemo","Popover","Input","Spinner","Check","LayoutGrid","openHref","Card","ChevronDown","useTheme","tone","X"],"mappings":"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","file":"chunk-YSURJUOA.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\nfunction 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=\"600\">\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=\"600\">\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=\"900\" color=\"$color12\" numberOfLines={1}>\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=\"800\" 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","// The ONE canonical list of Hanzo product surfaces the cross-surface app switcher\n// offers — consumed by EVERY surface's launcher so the set never diverges.\n//\n// Framework-agnostic (plain TS, zero imports): React consumers (the @hanzo/ui\n// `AppHeader`, the console `AppLauncher`) import it directly; a surface that\n// cannot resolve THIS package — the Svelte Huly-fork `team` (whose own `@hanzo/ui`\n// is the workbench UI framework, a name clash) and the shadcn-aliased `app` — keeps\n// a byte-identical MIRROR that points back here. Add or reorder a surface HERE and\n// every launcher moves together (mirrors are updated in the same change).\n//\n// `id` is the stable key AND the icon key: each framework maps it to its own glyph\n// (React → lucide, Svelte → SurfaceIcon), so the DATA itself stays glyph-free.\n\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/** The seven Hanzo surfaces (`console` opens the cloud AI console). */\nexport const SURFACES: Surface[] = [\n { id: 'ai', label: 'Hanzo AI', href: 'https://hanzo.ai', hint: 'hanzo.ai' },\n { id: 'console', label: 'Console', href: 'https://console.hanzo.ai', hint: 'console.hanzo.ai' },\n { id: 'app', label: 'App', href: 'https://hanzo.app', hint: 'hanzo.app' },\n { id: 'chat', label: 'Chat', href: 'https://hanzo.chat', hint: 'hanzo.chat' },\n { id: 'bot', label: 'Bot', href: 'https://hanzo.bot', hint: 'hanzo.bot' },\n { id: 'team', label: 'Team', href: 'https://hanzo.team', hint: 'hanzo.team' },\n { id: 'billing', label: 'Billing', href: 'https://billing.hanzo.ai', hint: 'billing.hanzo.ai' },\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 * 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 */\nimport type { ReactNode } from 'react'\nimport { Spinner, Text, XStack, YStack } from '@hanzo/gui'\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}\n\nexport function DataTable<T>({\n columns,\n rows,\n loading,\n empty = 'Nothing here yet.',\n rowKey,\n onRowPress,\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}) {\n if (loading) {\n return (\n <XStack p=\"$6\" justify=\"center\">\n <Spinner size=\"large\" color=\"$color11\" />\n </XStack>\n )\n }\n\n if (rows.length === 0) {\n return (\n <YStack p=\"$6\" items=\"center\" borderWidth={1} borderColor=\"$borderColor\" rounded=\"$4\">\n <Text color=\"$color11\">{empty}</Text>\n </YStack>\n )\n }\n\n return (\n <YStack borderWidth={1} borderColor=\"$borderColor\" rounded=\"$4\" overflow=\"hidden\">\n <XStack bg=\"$color2\" py=\"$2.5\" px=\"$3\" gap=\"$3\">\n {columns.map((c) => (\n <Text\n key={c.key}\n width={c.width}\n flex={c.width ? undefined : 1}\n fontSize=\"$2\"\n fontWeight=\"700\"\n color=\"$color11\"\n >\n {c.header}\n </Text>\n ))}\n </XStack>\n <YStack>\n {rows.map((row) => (\n <XStack\n key={rowKey(row)}\n py=\"$2.5\"\n px=\"$3\"\n gap=\"$3\"\n borderTopWidth={1}\n borderColor=\"$borderColor\"\n items=\"center\"\n hoverStyle={onRowPress ? { bg: '$color2' } : undefined}\n cursor={onRowPress ? 'pointer' : undefined}\n onPress={onRowPress ? () => onRowPress(row) : undefined}\n >\n {columns.map((c) => (\n <YStack key={c.key} width={c.width} flex={c.width ? undefined : 1}>\n {c.render ? (\n c.render(row)\n ) : (\n <Text fontSize=\"$3\" numberOfLines={1}>\n {String((row as Record<string, unknown>)[c.key] ?? '')}\n </Text>\n )}\n </YStack>\n ))}\n </XStack>\n ))}\n </YStack>\n </YStack>\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 */\nimport type { ComponentProps } from 'react'\nimport { Button } from '@hanzo/gui'\n\nexport function PrimaryButton(props: ComponentProps<typeof Button>) {\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=\"800\" text=\"center\">\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 { ReactNode } from 'react'\nimport {\n Input,\n Label,\n Select,\n Switch,\n TextArea,\n Slider,\n Text,\n XStack,\n YStack,\n} from '@hanzo/gui'\nimport { ChevronDown } from '@hanzogui/lucide-icons-2'\n\n/** Labeled row: fixed label column + flexing control. */\nexport function FieldRow({ label, children }: { label: string; children: ReactNode }) {\n return (\n <XStack gap=\"$3\" items=\"flex-start\" flexWrap=\"wrap\">\n <Label width={180} pt=\"$2\" color=\"$color11\" fontSize=\"$3\">\n {label}\n </Label>\n <YStack flex={1} 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\nexport function FieldSelect({\n value,\n options,\n onChange,\n disabled,\n}: {\n value: string\n options: string[]\n onChange: (v: string) => void\n disabled?: boolean\n}) {\n return (\n <Select value={value} onValueChange={onChange} disablePreventBodyScroll native>\n <Select.Trigger disabled={disabled} iconAfter={<ChevronDown size={16} />}>\n <Select.Value placeholder=\"Select…\" />\n </Select.Trigger>\n <Select.Content>\n <Select.Viewport>\n {options.map((opt, i) => (\n <Select.Item key={opt} index={i} value={opt}>\n <Select.ItemText>{opt}</Select.ItemText>\n </Select.Item>\n ))}\n </Select.Viewport>\n </Select.Content>\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","'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 <XStack justify=\"space-between\" items=\"flex-start\" gap=\"$4\">\n <YStack gap=\"$1\">\n <Text fontSize=\"$7\" fontWeight=\"800\">\n {title}\n </Text>\n {subtitle ? (\n <Text fontSize=\"$3\" color=\"$color11\">\n {subtitle}\n </Text>\n ) : null}\n </YStack>\n {actions ? <XStack gap=\"$2\">{actions}</XStack> : null}\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 // @ts-expect-error — web DOM ref; Gui forwards it to the underlying node.\n ref={panelRef}\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 className=\"hz-slide\"\n style={{ transform: open ? 'translateX(0)' : offscreen, height: '100dvh' }}\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 size=\"$2\" chromeless 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'].includes(s)) return 'green'\n if (['creating', 'provisioning', 'pending', 'updating', 'attaching'].includes(s)) return 'yellow'\n if (['error', 'failed', 'degraded', 'down'].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"]}