Filter

Composable filtering primitives shared via @repo/ui. Three surfaces over one FilterConfig: Filter.Pill (always-visible pill per filter), Filter.Select (single combined picker), and Filter.List (chips for active filters only). Powers the competitive-intelligence ad feed and the assets filter bar.

Filter.Pill — ad feed filter bar

A fixed row of always-present pills, one per filter dimension. Each opens a Popover of its options; multiple pills support multi-select. This is the exact bar used by the competitive-intelligence ad feed.

0 filters active

Filter.Pill — disabled

Pass disabled to render a non-interactive pill (e.g. while options load).

Filter.Select — combined picker

A single trigger that opens a command-style menu to pick a filter, then its value. Best when the set of filters is large. Press F to open. Shows a count badge when filters are active.

Filter.List — active filter chips

Renders one editable chip per active filter (the typical 'Filter is Value ✕' row beneath a combined picker). Reuses the same activeFilters/onSelect/onRemove wiring as Filter.Select. Select some values above to populate it.

No active filters — pick a value in the Filter.Select example above.