Components › Forms & input › Select › Record select

Record select

canon

Search-driven choice from records: framed field, or panel anchored to a rail row or a chip. Sections separated by a named hairline, one value = accent check.

Absorbed Rail picker on 12 September 2026 (AD, RP-1; acrm !3425–!3443): with anchorRef the panel hangs under a rail row or a chip instead of a framed trigger, so the rail has no picker of its own and RailPickerMenu is deleted. Also new: sections whose name sits IN the hairline (only when there are two or more; a single name would be the forbidden heading above a menu), selected pinned on top, accent check for one value (F261), diacritics-folded search over sub and keywords, quick-create footer, minWidth, loading/empty/busy, UserAvatar for a colleague. Known limit: the section name is var(--label) in --fg-muted = 2.85:1 light / 3.63:1 dark, below AA in both themes — the lighter tone is the AD's explicit choice of 12 September 2026 (ACRM-227, acrm !3460), made with the numbers in front of him; the group is announced from role=group + aria-label, not from this text. The hand-made panel shell is blocked by the validator rule recordselect-shell-handmade. Slot wrapOption(option, row) (acrm !3913, AD 26 Sep 2026): the host may WRAP an option row in an element that clicks nothing and does not change its size (hover preview EntityPreviewChip); selection, keys and look stay with RecordSelect. Used by RecordLinksChip — the one links chip of shape-A dialogs (task, deal, meeting, note), selected records show the record preview on hover.

Used in 46 files · 31 areas · 52× — components/RecordLinksChip, components/ReservationControl, components/TagsEditor, components/accounting, components/acl, components/clen-tymu …

Default

components--record-select--defaultOpen standalone ↗Code

Variants

single (value: string)
multi (value: string[]) — trigger joins names, +N over two
clearable — × resets to empty
single — accent check on the right (F261), no checkbox · static replica
multi — DS checkbox on the right (D6) · static replica
marks: person (circle) / company (square) — static replica
marks: entityType — the EntityRef mark (user face, deal/project tile)
shape: 'none' — plain code list, no mark (tags)
components--record-select--variantsOpen standalone ↗Code

Sizes

default — 280px
fullWidth — fills the container (here 480px)
minWidth — panel width follows the anchor, never under 280px (chip) · replica
components--record-select--sizesOpen standalone ↗Code

States

placeholder (empty)
filled
disabled
open — accent trigger, search row, list (static replica)
Žádné výsledky
open, filtered, no match — „Žádné výsledky“ (static replica)
sections — the name sits IN the divider line; pinned selection on top
onCreate footer — „Založit „…““ (Enter does the same)
muted row + warn sub (RecordOption.muted / subTone 'warn')
Načítám…
loading — „Načítám…“ instead of the list
Zatím žádné štítky
emptyText — empty code list (no query), wording from the caller
busy — a write is queued (aria-busy), options stay clickable
Napište alespoň 2 znaky
server search — short query: the server is not asked yet
Načítám…
server search — first request running
server search — results (the server already filtered, filter=false)
server search — request failed: error + „Zkusit znovu“
Opening focuses the search input; typing filters label, `sub` and `keywords` diacritics-blind (`foldText`). Esc is consumed by the panel (page shortcuts and the dialog underneath stay quiet) and returns focus to the trigger, click outside closes. Single mode closes on pick and marks the row with the accent check (F261), multi keeps the panel open and uses the DS checkbox. With `anchorRef` the framed trigger is not drawn at all — the row or chip of the caller is the anchor and closing is reported through `onClose`.
components--record-select--statesOpen standalone ↗Code

Composition

deal form — owner (clearable) and company (square avatars) next to a text input
VlastníkJana Nováková
rail row — the value stays as the anchor (.rr-ev.rpk-anchor), panel below it
components--record-select--compositionOpen standalone ↗Code