FilterBar
Linear-style filtering: Filter → field → values; active filters become editable chips with is / is not and Clear filters.
When to use
- Narrowing a list or board by properties (status, assignee, priority…).
- In a view toolbar: FilterButton in the bar, FilterChips on the row below.
Consider an alternative
- Free-text search — use SearchField.
- A single on/off condition — use a Switch or segmented Tabs.
- Ordering or layout — use SortMenu and DisplayOptions.
Import
import { FilterBar } from '@revido-llc/kit';Keyboard interaction
- Enter / Space on Filter — open the field list (type to search fields and values)
- Arrow keys + Enter — choose a field, then toggle values
- Backspace in an empty search — back to fields
- Escape — close
Props
Props documented by the Kit. Refer to the TypeScript types for the complete interface, including inherited props.
Related exports
FilterButton, FilterChips, isFilterActive
Examples
View toolbar (filter · sort · display · reset)
The full pattern on live data. Applied filters show as chips under the bar; a changed sort or display turns its button cobalt; Reset view appears once anything differs from the defaults.
<Toolbar aria-label="View controls">
<FilterButton fields={fields} value={filters} onChange={setFilters} />
<SortMenu options={sorts} value={sort} defaultValue={DEFAULT_SORT} onChange={setSort} />
<ToolbarSeparator />
<DisplayOptions … value={display} defaultValue={DEFAULT_DISPLAY} onChange={setDisplay} />
</Toolbar>
{modified ? <Button variant="ghost" size="xs" onPress={resetView}><RotateCcw /> Reset view</Button> : null}
<FilterChips fields={fields} value={filters} onChange={setFilters} />Nothing applied
Plain outlined buttons and no chip row: the default view.
<FilterButton fields={fields} value={{}} onChange={setFilters} />Inline bar
Trigger + chips on one wrapping row. The second bar is disabled while a request is pending; open pickers and free-value controls receive the same disabled state.
<FilterBar fields={fields} value={filters} onChange={setFilters} isDisabled={query.isPending} />
// Custom field: renderValueControl: ({ value, onValueChange, isDisabled }) => <DatePicker ... isDisabled={isDisabled} />Literal anatomy 1
Static component anatomy; bind events in the consuming app.
<FilterBar fields={[{ id: "status", label: "Status", options: [{ value: "open", label: "Open" }] }]} value={{}} />Literal anatomy 2
Static component anatomy; bind events in the consuming app.
<FilterButton fields={[{ id: "status", label: "Status", options: [{ value: "open", label: "Open" }] }]} value={{}} />Literal anatomy 3
Static component anatomy; bind events in the consuming app.
<FilterChips fields={[{ id: "status", label: "Status", options: [{ value: "open", label: "Open" }] }]} value={{}} />