Filter chip
One field of the filter, written out: icon · field name · value · chevron. Clicking it opens the field's menu — a single layer inside the canonical popover, 264px wide (.fb-menu). The frame (border, shadow, padding, scroll cap) belongs to .acrm-popover; the filter only fills it. React: apps/web/src/components/FilterBar.tsx (ChipMenu), CSS apps/web/src/ds/filter-bar.css.
When to use
- Every field of a Filter bar: closed lists (stage, status), several values (tags, colleagues), free text, dates, booleans.
- Where the value must be readable without opening anything — the chip states it.
When not to use
- As a standalone control outside the bar. A chip that opens a menu somewhere else is a Nav select (bar) or a Picker menu (actions).
- As a tag or a label. A value the user can take back is a Removable chip; a small set of togglable options is Option chips.
- For a value that is not a filter (a status, a phase) — that is a tile or a row, not a chip.
Anatomy
- Chip
.fb-chip— 30px,--surface-100,1px solid var(--border-strong),radius-md,gap: 7px: field icon (.ti, 14px,--fg-secondary), field name (.k,--fg-muted), value (.v, 600,--ink-900, clipped at 148px), chevron (.chev,--fg-muted). - Open state
.open=--active-surface; hover =--surface-75. - Menu
.fb-menu— 264px, one layer, no heading (the chip that opened it says which field this is) and no sub-menus. - Search row = the canonical
.acrm-recordselect-search(Record select), not a copy of its own — when it is the first row of the menu, the header stays put and the list scrolls under it. - Option
.fb-opt— 32px row,500 13/20,radius-sm, hover--hover-surface; optional leading icon.lead, then the label, then either the check.chk(one value;.chk.offkeeps the space) or the checkbox.ckon the right (several values). - Empty / loading
.fb-empty— one muted line,400 12px, paddingvar(--sp-4) var(--sp-3). - Footer
.fb-foot— appears only when the field has a value: hairline.fb-sepand the rowVymazat filtr(.fb-clear), stuck to the bottom edge so it is reachable in a long list without scrolling.
Best practices
Do
- One value: pick and the menu closes. Several values: the checkbox sits on the right and the menu stays open (dropdown ruling D6, 22 Aug 2026).
- Show the search row as the first row when the list can exceed roughly eight items.
- Offer
Vymazat filtrin the footer only when there is something to clear; clearing removes the chip from the bar. - Join several values in the chip with a comma and let the 148px clip do the rest — the menu holds the full truth.
Don't
- A heading inside the menu (eyebrow, "Fáze") — a menu never has a title over its rows.
- A sub-menu or a second layer; every action of the field fits in this one panel.
- A
⋯menu on a chip. The only actions are "set a value" and "clear the filter", and both are rows in the menu. - A checkbox on the left. In this system every multi-select menu puts it on the right.
Content
- Field name in sentence case, the value as the user would say it:
Fáze Jednání,Štítky Investoři, Praha. - Empty state:
Nic nenalezeno. Loading:Načítám štítky…— the same row, another sentence, no spinner. - Footer row:
Vymazat filtr(this field), neverVymazat filtry(that is the whole bar).
Related
filter-bar— the row this chip lives in.record-select— owns the search row this menu reuses.popover— the frame around the menu.check-menu,multi-select— deprecated menus whose job this chip does inside the bar.- Stories:
components--filter-chip--default,--variants,--states,--with-icon-kbd,--composition.
Source: docs/filter/filter-chip.usage.md · GitLab