data
Filter Rail
A grouped filter rail keeps active choices, removal and result context in one compact surface.
- data
- filter
- rail
- selection
Live preview
16 results
Quick usage
usage
import { FilterRail } from "@pinky-ui/systems";
<FilterRail groups={groups} value={filters} onValueChange={setFilters} />Presets
Default
Restrained production behaviour.
Default behaviour
Quiet
Reduced intensity for dense product screens.
disabled={true}
Install
Add @pinky-ui/systems as a dependency, or use the CLI to copy this component's source directly into your project — no dependency to manage, fully editable.
shell
npm install @pinky-ui/systemsshell
pnpm add @pinky-ui/systemsshell
yarn add @pinky-ui/systemsshell — copies source into your project
npx pinky-ui add filter-railPrefer to run the whole repository locally instead?
repository
git clone https://github.com/florash/Pinky-UI.git
cd Pinky-UI
npm install
npm run devProps
| Prop | Type | Default | Description |
|---|---|---|---|
| groups | FilterRailGroup[] | — | Grouped single-select options rendered as a responsive rail. |
| className | string | — | Styles the outer interaction surface. |
Accessibility
- Each option is a real button with pressed state and a visible All reset.
- Active filters can be removed individually or cleared together on touch and keyboard.
Performance
- Only discrete selection changes update the rail; horizontal option lists stay native scrollable on small screens.
Reduced motion
Motion resolves immediately while semantics, focus and state remain unchanged.
When to use
- Collection and data views with a few mutually exclusive filter groups
When not to use
- Complex boolean query builders or dozens of options
Skill
Purpose
A grouped filter rail keeps active choices, removal and result context in one compact surface instead of a sprawling filter sidebar.
Good for
- Collection and data views with a few mutually exclusive filter groups
Avoid for
- Complex boolean query builders or dozens of options
Usage
tsx
<FilterRail groups={groups} value={filters} onValueChange={setFilters} />Accessibility
- Each option is a real button with pressed state and a visible All reset.
- Active filters can be removed individually or cleared together on touch and keyboard.
Performance
- Only discrete selection changes update the rail; horizontal option lists stay native scrollable on small screens.
Related: morph-select, selection-tray.