# Feedback Components

> Generated reference (regen-owned; see [index.md](index.md)). Binds only under `primitives: nurix`.

## EmptyState

Placeholder for empty content areas.

**Props:** `icon`, `title`, `description`, `action`

```tsx
<EmptyState
  icon={<InboxIcon className="h-12 w-12 text-muted-foreground" />}
  title="No messages"
  description="Start a conversation to see messages here"
  action={<Button>New Message</Button>}
/>
```

## Alert

Dismissible status block; `Alert` is the container, `AlertTitle`/`AlertDescription` lay out the icon-led grid.

**Props:** `variant` [default|destructive], `dismissible`, `onDismiss`, `dismissButton` (custom node, overrides the default X button)

```tsx
<Alert variant="destructive" dismissible onDismiss={handleDismiss}>
  <TriangleAlert />
  <AlertTitle>Sync failed</AlertTitle>
  <AlertDescription>Retry in a few minutes.</AlertDescription>
</Alert>
```

## Other Components

- `loader` — `Loader`: five-dot pulse indicator; `size`, `gap`, `colors` (array, cycles if fewer than `numberOfDots`), `numberOfDots`, `height`
- `progress` — `Progress`: Radix `Progress.Root`/`Indicator` pair; `value` (0–100)
- `skeleton` — `Skeleton`: pulsing placeholder `div`; size it with `className` to match the final layout
- `typing-indicator` — `TypingIndicator`: `users` (`string[]` or `{ id, name, avatar }[]`), `maxVisible` — stacked avatars plus "X and N others are typing…"
- `error-boundary` — `ErrorBoundary`: class component catching render errors; `fallback`, `onError`, `onRetry` (default UI renders a retry link)
- `not-found` — `NotFound`: built on `EmptyState`; `title`, `description`, `showHomeButton`, `onGoBack`
- `sonner` — `Toaster`: theme-synced wrapper over `sonner`'s `Toaster`, watches `document.documentElement`'s `dark` class via a `MutationObserver`
- `braille` — `Braille`: animated unicode-braille spinner; `spinner` (18 named patterns — `braille`, `braillewave`, `dna`, `scan`, `rain`, `scanline`, `pulse`, `snake`, `sparkle`, `cascade`, `columns`, `orbit`, `breathe`, `waverows`, `checkerboard`, `helix`, `fillsweep`, `diagswipe`), `interval` (ms, overrides the spinner's default), `label` (screen-reader text). The `inline-spinner` subpath exports the underlying frame registry and grid utilities: `spinners`, `gridToBraille`, `makeGrid`.

```tsx
<Braille spinner="dna" label="Loading" />
```
