# Haze UI > React 19 UI component library built on the `ControlOrValue` protocol: every stateful > component accepts one state prop (`checked?: Control | T`) that works controlled *and* > uncontrolled, powered by [react-use-control](https://github.com/wmzy/react-use-control). - [Full API reference (llms-full.txt)](llms-full.txt): every component's props, types, defaults and descriptions in one generated file. 137 components in 9 groups (see below), styled with Linaria (zero-runtime CSS-in-JS) against `--haze-*` design tokens. ESM-only, `preserveModules` dist, tree-shakeable. `'use client'` is pre-injected on interactive modules; 36 static, hook-free modules (tokens + presentational components) ship without it and render as React Server Components. RTL is systemic: logical CSS properties, mirrored horizontal-key semantics and mirrored floating placements under `dir="rtl"`. Peer range `react: ^19.0.0` — no React 18 compatibility layer. ## Install ```sh npm i haze-ui ``` Only `react` and `react-dom` are peers. Every engine — `react-f0rm` (forms), `@tanstack/react-table` (DataTable), `recharts` (Chart), the `@dnd-kit` trio (sortable tags), `qrcode` (QRCode) — is a regular dependency installed with haze-ui, and bundlers still tree-shake the ones your imports never reach. shadcn CLI users can instead `pnpm dlx shadcn@latest add wmzy/haze-ui/` — this repo is a GitHub registry (root `registry.json`); each item installs a thin wrapper that re-exports from the npm package (see `registry/README.md`). ## CSS: two loading modes The JS entry imports no stylesheet — pick one mode: ```jsx // 1) Full stylesheet (simplest) import 'haze-ui/styles.css'; // 2) Per-component CSS: tokens once + each component you use import 'haze-ui/css/tokens.css'; import 'haze-ui/css/button.css'; ``` Per-component files are kebab-case names, but sub-components and cores share their directory's family file (`InputCore` → `input.css`). Don't hardcode the mapping: `haze-ui/css-manifest.json` is the machine-readable, build-generated export → css-file map (with family absorption and a `noCss` list) — tooling should read it instead of re-deriving file names. ## Components ### General - **Avatar** — user avatar with image, size variants and fallback content when the image is missing. - **AvatarGroup** — stacks avatars in overlapping rows with a `+N` overflow chip (`max`/`total`). - **Badge** — small inline status label with variant and color options. - **Button** — action button with `variant`/`size`/`square` options; native `