# Shadcn Choice Controls

> Choice controls as editors

- Type: example, free and open source (MIT)
- Component: [Filters](https://reui.io/components/filters.md)
- Page: https://reui.io/components/filters/c-filters-8
- Docs (Base UI): https://reui.io/docs/components/base/filters.md
- Docs (Radix UI): https://reui.io/docs/components/radix/filters.md
- MCP: `get_example("c-filters-8")`
- Registry item: https://reui.io/r/styles/base-nova/c-filters-8.json
- Uses: Button, Checkbox, Filters, Label, Native Select, Radio Group, Switch, Toggle Group

## Best for

Shadcn form controls as editors that commit per press, staying open for multi picks and closing after a single plan or region pick

## Agent notes

- Each editor reads its rows from a constant such as `CHANNELS` or `PERMISSIONS`, not the field's `options`, so reusing it elsewhere shows the wrong rows
- Pass `commit` a second argument with `close` set to false to keep the panel open, as `ChannelToggles` and `PermissionChecks` do

## When not to use

- Option lists drawn by the built in menu with picks pinned on top: use [Full Filter Bar](https://reui.io/components/filters/c-filters-1.md) (`get_example("c-filters-1")`)

## Install

```bash
npx shadcn@latest add @reui/c-filters-8
```

## About Shadcn Filters

### When to use

- Toolbars of removable filter chips over a table or list, one field, condition and value per chip
- Nested AND and OR condition builders, hung off a trigger over a report or laid out inline
- Attribute catalogs too large or deep to list at once, and option lists paged from a server

### When not to use

- A finished record table with its chip bar, paging and row actions already built: use the [Filtering blocks](https://reui.io/blocks/data-grid/filtering.md)
- Storefront product facets with price sliders, color swatches and department pills: use the [Filter Sidebar blocks](https://reui.io/blocks/ecommerce/filter-sidebar.md)
- One day or span of days picked on its own, with no attribute or condition: use [Date Selector](https://reui.io/components/date-selector.md) (`get_component("date-selector")`)

### Agent notes

- `renderValue`, `icon` and a component `editor` count toward the schema index by presence only, so swapping one alone keeps serving the old one
- A rule reaches `onQueryChange` unfinished: an empty `operator`, or a `value` still undefined or empty where its `arity` is not none; skip it when compiling
- Negate swaps to an operator's `inverse` where one exists and otherwise sets `negated`, as on `starts_with`, so a compiler must read `negated`

Every ReUI item has a twin like this one; the index is https://reui.io/llms.txt. Agents with the ReUI MCP (https://reui.io/docs/mcp) get the same guidance from the getters named above.
