Design

Autocomplete

@/components/ui/Autocomplete

Chromet for «nedtrekk med søk»: felt + resultatliste med full piltastnavigasjon og en ekte WAI-ARIA-combobox.

Når brukes den

  • Bruk når brukeren skal søke i en dynamisk eller lang liste og velge ett treff (bygg, leverandør, adresse).

  • Søk-logikk, endepunkt og debounce eies av kallstedet — onQuery kalles rått på hvert tastetrykk, results/busy er kontrollerte props.

  • Bygget oppå Popover (bredde="trigger"), så mobil-ark og tastaturhøyde-unnvikelse følger med gratis.

  • Ikke bruk til «velg én av et lite, fast sett» — det er Dropdown (ingenting å skrive) eller PillTabs/Select.

  • Ikke bygg en ny «søk med nedtrekk»-kopi — BrregSearch er allerede bygget oppå denne for Brønnøysund-oppslag.

Eksempler

Søk i en lokal liste

Fokus blir i feltet hele tiden; det aktive treffet pekes ut med aria-activedescendant i stedet for at fokus flyttes inn i listen.

<Autocomplete
  value={query}
  onQuery={q => { setQuery(q); setResults(sok(q)) }}
  results={results}
  onSelect={item => velg(item)}
  renderItem={(item, { active }) => <Rad item={item} active={active} />}
  itemKey={item => item.id}
  placeholder="Søk etter bygg …"
  ariaLabel="Søk etter bygg"
/>

Laster (busy)

Spinner i feltet mens kallstedets søk pågår — vises uavhengig av om panelet er åpent.

Deaktivert

Feltet er fokuserbart, men tar ikke imot tekst eller åpner panelet — for et oppslag som midlertidig ikke er tilgjengelig.

Props

Sveip tabellen for å se hele innholdet

Navn
Type
Default
Beskrivelse
value *
string
Feltverdien (kontrollert).
onQuery *
(query: string) => void
Kalles rått på hvert tastetrykk. Debounce/minstelengde er kallstedets ansvar.
results *
T[]
Treffene som vises i panelet.
renderItem *
(item: T, meta: { active: boolean; index: number }) => ReactNode
Rendrer innholdet i én rad. Padding/layout er kallstedets.
onSelect *
(item: T, index: number) => void
Kalles når en rad velges (klikk eller Enter).
itemKey
(item: T, index: number) => string | number
indeks
React-nøkkel per rad. Sett når resultatene har en ekte id.
placeholder
string
Plassholdertekst i feltet.
busy
boolean
false
Viser en spinner til høyre i feltet.
tomTekst
string
Tekst vist når feltet er fokusert, ikke tomt og results er tom. Utelatt: ingen tomtilstand-rad.
footer
ReactNode
Ekstra rad(er) nederst, alltid synlig når panelet er åpent — for et «legg til uten oppslag»-fallback.
icon
ReactNode
Ledende ikon inni feltet.
endAdornment
ReactNode
Ekstra innhold til høyre i feltet, etter en evt. busy-spinner.
label
string
Synlig etikett over feltet (videreført til Input).
ariaLabel
string
Tilgjengelig navn når label mangler.
id
string
Felt-id. Default: generert.
disabled
boolean
Deaktiverer feltet.
autoFocus
boolean
Fokuserer feltet ved mount.
className
string
Ekstra klasser på feltets wrapper.

Beslektede komponenter