zeekayandHanzo Dev 055d43a44e
Publish Packages / detect-changes (push) Successful in 15s
Publish Packages / publish (${{ fromJson(needs.detect-changes.outputs.packages) }}) (push) Skipped
Hanzo CI/CD / cicd (push) Failing after 4m56s
CI/CD / cicd (push) Failing after 4m56s
ui: CommandDialog forwards the palette's props — the ⌘K blocker
CommandDialog rendered `<Command>` bare, so none of the palette's own props
reached it. A host could not read the highlighted row, which makes a two-pane
palette — list left, preview of the highlighted item right — impossible with the
stock component. hanzo.app hit exactly that and rebuilt the dialog by hand
around the bare `Command` primitive; its file still carries the reason:

  "Composed from the @hanzo/ui `Command` primitive inside a wide `Dialog`
   (rather than the stock `CommandDialog`, which doesn't forward
   `onValueChange` — needed to drive the preview panel from the highlighted
   row)."

So the whole palette surface comes through, not just the one prop that was
asked for: value, defaultValue, onValueChange, filter, shouldFilter, loop,
label, vimBindings, disablePointerSelection. Forwarding only onValueChange
would mean the next host needing `loop` files the same bug again.

`value`/`onValueChange` are the SELECTED ITEM, matching Command's own names and
cmdk's before it. The SEARCH string stays CommandInput's `value` — a different
prop on a different component, as it always was.

Mutation-proven in a real browser: the gallery renders an open CommandDialog
driving a host-owned readout from the highlighted row, and typing must narrow
the list. Restore the bare `<Command>` and it fails with "onValueChange never
reached the host".

This only makes the collapse POSSIBLE; the four hand-rolled palettes are a
follow-up, not this commit.

Co-authored-by: Hanzo Dev <dev@hanzo.ai>
2026-08-04 19:51:55 -07:00
2026-08-04 00:41:24 -07:00
2025-11-02 12:16:10 -08:00

@hanzo/ui

@hanzo/ui

The React component library for AI applications. Accessible, customizable primitives for React, Vue, Svelte, and React Native — built on shadcn/ui, extended with AI, 3D, animation, and commerce components, and a single typed import surface.

npm MIT docs

hero

Features

  • 161+ components — 3x the surface of upstream shadcn/ui
  • Multi-framework — React, Vue, Svelte, React Native
  • Two themes — Default & New York variants
  • AI components — chat, assistants, agent UI, playground
  • 3D components — interactive 3D elements
  • Animations — advanced motion components
  • Page builder — visual drag-and-drop assembly, export to TSX
  • Blocks — 24+ production-ready full-page templates
  • White-label — fork and rebrand by domain (Zoo, Lux, …)
  • Accessible — built on Radix UI primitives
  • Customizable — Tailwind CSS 4 (OKLCH), fully typed TypeScript

Quick start

Install

pnpm add @hanzo/ui
# or
npm install @hanzo/ui

Use

import { Button, Card, Input } from '@hanzo/ui'

export function App() {
  return (
    <Card>
      <Card.Header>
        <Card.Title>Welcome</Card.Title>
      </Card.Header>
      <Card.Content>
        <Input placeholder="Enter text..." />
      </Card.Content>
      <Card.Footer>
        <Button>Submit</Button>
      </Card.Footer>
    </Card>
  )
}

One import surface (v8)

@hanzo/ui@8 is the single entry point for the whole kit. Each capability is a thin subpath that re-exports its home package — code lives once, and each home is an optional peer, pulled only when you use its subpath.

Import What you get
@hanzo/ui · /product charts, metrics, PageHeader, StatusTag, EmptyState, ComboBox, SlideOver, Toast
@hanzo/ui/data RecordsView, DataTable, typed field editors
@hanzo/ui/canvas ProjectCanvas, ServiceNode, DeployTimeline, EnvSwitcher
@hanzo/ui/dashboard landing + deploy-pipeline + overview kit
@hanzo/ui/usage UsageMeter, UsageProviderCard, UsageDashboard
@hanzo/ui/gitops GitopsAppList, tree, diff, sync/rollback, HealthBadge

Also available as granular imports:

import { Button, Card } from '@hanzo/ui/components'
import * as Dialog from '@hanzo/ui/primitives/dialog'
import { cn } from '@hanzo/ui/lib/utils'

CLI

Add components straight into your project — the CLI copies source you own:

npx @hanzo/ui add button
npx @hanzo/ui add card dialog

Install from 35+ external registries too:

npx @hanzo/ui add @aceternity/spotlight

Packages

The workspace publishes a family of scoped packages under @hanzo/*:

Package Purpose
@hanzo/ui Core library + the v8 import surface (161+ components)
@hanzo/react React primitives
@hanzo/data Records, data tables, typed field editors
@hanzo/canvas Service/deploy canvas components
@hanzo/dashboard Dashboard + deploy-pipeline kit
@hanzo/commerce · @hanzo/checkout · @hanzo/shop Commerce components
@hanzo/agent-ui AI agent UI components
@hanzo/brand · @hanzo/tokens Branding system & design tokens
@hanzo/event Telemetry client (POST /v1/event)

Development

git clone https://github.com/hanzoai/ui.git
cd ui
pnpm install

pnpm build:registry   # generate the component registry FIRST
pnpm dev              # docs site + registry (http://localhost:3003)

The registry generates the JSON the CLI reads, so build:registry must run before build. Keep the Default and New York themes in sync when adding components. Use pnpm — not npm or yarn.

pnpm build            # build the docs app
pnpm lint             # lint all workspaces
pnpm typecheck        # type check
pnpm test             # unit tests
pnpm test:e2e         # Playwright E2E

Documentation

Full docs, live previews, and the component catalog: ui.hanzo.ai.

Contributing

See the contributing guide.

License

MIT — see LICENSE.md.


Hanzo — the Open AI Cloud

Open source · every language · on-chain settlement. hanzo.ai · docs.hanzo.ai

SDKs in every languagePython (flagship) · TypeScript · Go · Rust · C++ · Swift · Kotlin · umbrella

S
Description
React component library for AI applications
Readme
184 MiB
Languages
TypeScript 86.7%
MDX 7.5%
HTML 3%
CSS 2%
JavaScript 0.6%
Other 0.1%