Design

Table

@/components/ui/Table

Data-drevet grid for kolonner av tall som sammenlignes NEDOVER — månedsoversikt, historikk, en flerårsprognose.

Når brukes den

  • Bruk for ren datavisning UTEN rad-handling — tall som sammenlignes nedover, ikke en liste av objekter man handler på.

  • `radOnClick` + `interactive` når raden likevel skal være klikkbar (f.eks. åpne en detalj) — for en liste der HELE poenget er en handling per rad, bruk ListRow i stedet.

  • `striped` i tabeller med mange rader, der øyet trenger hjelp til å følge en rad vannrett.

  • Bruk ListRow i stedet når raden har en tilhørende handling eller identitet (klikk for detaljer, rediger, slett, godkjenn) — se regel/liste-med-handling-er-listrow.

  • Sett minBredde når kolonnene ellers blir uleselig smale — da vises et «Sveip tabellen»-hint og scroll skjer inne i tabellens egen beholder, aldri på body.

Eksempler

Månedsoversikt med sumrad

Full frihet per celle — her en liten fargestolpe for inntekt/utgift ved siden av tallene, og en sumrad (fot) nederst.

Sveip tabellen for å se hele innholdet

Mnd
Inntekter
Utgifter
Netto
Jan
42 000
31 000
+11 000
Feb
40 500
33 800
+6 700
Mar
44 200
29 100
+15 100
Apr
41 000
41 500
−500
Sum
167 700
135 400
+32 300
<Table
  kolonner={[
    { key: 'mnd', label: 'Mnd', bredde: '56px' },
    { key: 'netto', label: 'Netto', align: 'hoyre' },
  ]}
  rader={rader}
  radKey={r => r.mnd}
  celle={(r, key) => key === 'mnd' ? r.mnd : formatKr(r.netto)}
/>

striped, interactive og radOnClick

Annenhver rad tonet, hover-flate på klikkbare rader, og «—» automatisk der cellen returnerer null (Brannvern Norge/Malerfirma Vest mangler beløp).

Leverandør
Beløp
Heisservice AS
12 480 kr
Brannvern Norge
Rørlegger Nord
8 200 kr
Malerfirma Vest
Vaktmestertjenester
4 100 kr
<Table
  striped
  interactive
  radOnClick={r => apneDetalj(r.id)}
  kolonner={[...]}
  rader={rader}
  radKey={r => r.id}
  celle={(r, key) => key === 'belop' ? (r.belop ? formatKr(r.belop) : null) : r.leverandor}
/>

Uten sumrad

fot er valgfri — utelates den, avsluttes tabellen med siste datarad.

Mnd
Netto
Jan
+11 000
Feb
+6 700
Mar
+15 100
Apr
−500

Props

Sveip tabellen for å se hele innholdet

Navn
Type
Default
Beskrivelse
kolonner *
TableKolonne[]
Kolonnedefinisjoner (key, label, align, bredde).
rader *
T[]
Radenes data.
celle *
(rad: T, kolonneKey: string) => ReactNode
Full frihet per celle. Returnerer den null/undefined, rendres «—».
radKey *
(rad: T) => string
React-nøkkel per rad.
fot
(kolonneKey: string) => ReactNode
Valgfri sumlinje nederst, samme signatur som celle uten en konkret rad.
minBredde
string
Tvinger en minimumsbredde, f.eks. '560px'. Under den ruller innholdet i sin egen beholder med et «Sveip tabellen»-hint.
striped
boolean
Annenhver rad får en svak gray-alpha-100-flate.
interactive
boolean
Hover-flate (gray-alpha-100) + peker på rader som har radOnClick.
radOnClick
(rad: T) => void
Gjør raden klikkbar. Sett sammen med interactive for hover-tilbakemelding.
className
string
Ekstra klasser på ytre wrapper.
kolonner[].key *
string
Unik nøkkel for kolonnen.
kolonner[].label *
ReactNode
Kolonneoverskrift.
kolonner[].align
'venstre' | 'hoyre'
Tekstjustering. Høyrestilt får automatisk tabular-nums.
kolonner[].bredde
string
'1fr'
CSS-bredde for grid-kolonnen, f.eks. '90px'.

Regler

regel/liste-med-handling-er-listrow

Beslektede komponenter