Datepicker

Release dato: 03.10.2024

Sist oppdatert: 19.06.2025

Datepicker (datovelger) lar brukeren velge en dato, flere datoer eller et datointervall. Brukeren kan enten skrive dato direkte i feltet, eller velge fra en kalender.

Datepicker passer godt i skjemaer der datoen har betydning for videre steg, og nÄr du vil tilby bÄde fritekst og visuell kalender.

Test komponenten

Relaterte komponenter

Varianter

Card finnes i to hovedvarianter. Du kan kombinere disse med ulike skins og farger.

VariantBruk
Enkel datoLar deg velge én spesifikk dato
Flere datoerLar deg velge flere datoer samtidig
Periode/intervallLar deg velge en periode med start- og sluttdato

Retningslinjer for bruk

Bruk datepicker nÄr

  • du vil la brukeren velge en dato eller et datointervall
  • det er behov for bĂ„de fritekst og kalender
  • datoen er av betydning for videre steg i skjema eller prosess

UnngÄ datepicker nÄr

  • datoen ikke har betydning for oppgaven
  • brukeren kun trenger Ă„ velge mellom fĂ„, spesifikke datoer (da kan select eller radiobutton vĂŠre bedre)

Forklar hva brukeren kan gjĂžre

Bruk hjelpetekst og label for Ă„ forklare format eller regler, f.eks. maks antall datoer eller begrensede valg. Beskriv hva som skal velges.

GjĂžr slik

Eksempel forklarende label og hjelpetekst
Skriv forklarende label og hjelpetekst som hjelper brukeren Ă„ fylle inn riktig og forventet innhold

UnngÄ

Eksempel pÄ datepicker med uklare etiketter.
UnngÄ uklare etiketter som kan forvirre

Responsivitet

Datepicker tilpasser seg automatisk skjermstÞrrelsen. Kalenderen skalerer ned pÄ smÄ skjermer, slik at det fortsatt er lett Ä velge dato.

Vi anbefaler at du tester datepicker i lÞsningen din pÄ ulike skjermstÞrrelser, bÄde i stÄende og liggende visning, for Ä sikre at kalender, valgte datoer og eventuelle feilmeldinger vises tydelig.

Universell utforming

Label skal alltid vĂŠre synlig

Alle skjemaelementer mÄ ha en synlig label (etikett). Den skal beskrive hva brukeren skal gjÞre, for eksempel «Velg dato for avreise».

Dersom etiketten skjules visuelt, skal den likevel vÊre tilgjengelig for skjermlesere ved Ä bruke skjulte klasser (for eksempel pkt-sr-only). Dette sikrer at brukere med skjermleser forstÄr hva feltet handler om.

Dato mÄ kunne velges med tastatur

Datepicker mÄ fungere uten mus. Brukeren skal kunne:

  • Åpne kalenderen med tastatur
  • Navigere mellom datoer med piltaster
  • Velge en dato med Enter
  • Lukke kalenderen med Esc

Dette er sÊrlig viktig for personer som bruker tastaturnavigasjon eller spesialutstyr. SÞrg ogsÄ for at det er tydelig hvilken dato som har fokus i kalenderen.

Skjermlesere mÄ kunne lese valgt dato

NÄr brukeren velger en dato, mÄ denne informasjonen leses opp av skjermleser. Kalenderen mÄ ha riktige ARIA-roller og -attributter, som aria-labelog aria-selected. Bruk ogsÄ ARIA Live-regioner forsiktig, slik at skjermleseren varsler valgte datoer pÄ en kontrollert mÄte.

Hvis komponenten har feil, mÄ feilmeldingen knyttes til inputfeltet med aria-describedby.

Vis hjelpetekster for datoformat og regler

Datoformatet mÄ forklares tydelig i komponenten. Bruk hjelpetekst som forklarer:

  • Hvilket datoformat som skal brukes (f.eks. dd.mm.yyyy)
  • Om det er begrensninger i valg av datoer
  • Om brukeren kan velge flere datoer eller en periode

UnngÄ Ä kun vise denne informasjonen i placeholder, bruk alltid synlig tekst.

Les mer om universell utforming av cards:

Anatomi

ElementBeskrivelse
1. Etikett (label)Tekst som forteller hva brukeren skal gjĂžre
2. HjelpetekstTilleggsinformasjon som forklarer datoformat, regler eller begrensninger (valgfritt)
3. InputfeltFeltet der brukeren kan skrive inn dato manuelt, eller hvor valgt dato vises
4. KalenderikonÅpner kalenderen ved klikk
5. Kalender (med navigasjon og datoer)Viser valgt mÄned
6. Dagens datoDatoen som er dagens dato, markert i kalenderen
7. Valgt dato/valgt periodeDatoen eller perioden brukeren har valgt, markert i kalenderen og vist i inputfeltet

Implementasjon i kode

Hvordan ta komponenten i bruk?

Bruk i skjema

For skjemaer fungerer Datepicker nÊr identisk med <select>. For én dato sendes én verdi ut i skjemaet (som vanlig select), og for flere datoer sendes flere datoer ut (som select multiple).

HendelseshÄndtering

Datepicker for Ă©n enkel dato har en change-hendelse som sendes ut nĂ„r ny dato velges (onChange i React). Denne er en “standard” hendelse som sendes ut fra alle input-elementer, som returnerer en Event med target.value som inneholder datoen.

For Datepicker med flere datoer, enten som periode eller frittstÄende datoer, bÞr man bruke hendelsen value-change (onValueChange i React). Denne hendelsen sender ut en CustomEvent med detail som inneholder en array av datostrenger.

Testing

Elements og React: Dersom du skal skrive tester med JSDOM eller liknende er det viktig at du lar komponenten bli rendret ferdig fĂžr du tester den. Dette kan gjĂžres ved Ă„ kjĂžre denne kodelinjen fĂžr testene kjĂžres:

await window.customElements.whenDefined("pkt-datepicker");

Dersom du bruker verktÞyene i punkt-testing-utils sÄ kan dette bli gjort automatisk for deg.

Om du bruker data-testid for Ä hente ut elementer i testene, vil attributten videresendes til selve skjemaelementet. Dersom du heller Þnsker Ä bruke data-testid pÄ elementet <pkt-datepicker>, mÄ du sette attributten skipForwardTestid pÄ elementet.

Props og tokens

PropTypeBeskrivelse
namestringNavn for innsending
labelstringTekst/label
helptextstringHjelpetekst
helptextDropdownstringHjelpetekst som vises i en lukket boks man kan Äpne
helptextDropdownButtonstringKnappetekst for utvidet hjelpetekst
dateformatstringDatoformat for tags i flervalg
currentmonthISOdatestringMÄned som vises i datovelgeren
valueISOdatestringVerdi (kommaseparert ved flervalg)
excludeweekdaysstringKommaseparert liste over ukedager (1-7) som skal ekskluderes
excludedatesISOdatestringUtelat datoer (Kommaseparerte ISO-datoer)
minISOdatestringTidligst tillatte dato
maxISOdatestringSenest tillatte dato
weeknumbersbooleanVis ukenummer
withcontrolsbooleanMed velgere for mÄned/Är
multiplebooleanFlervalg
maxlengthnumberMaks antall datoer i flervalg
rangebooleanDatotidsrom (fra og til)
hasErrorbooleanFeil
errorMessagestringFeilmelding ved feil
disabledbooleanDeaktivert
fullwidthbooleanFull bredde
requiredbooleanPÄkrevd
requiredTagbooleanVise pÄkrevd-merking
requiredTextstringPÄkrevd-tekst
optionalTagbooleanVise valgfritt-merking
optionalTextstringValgfritt-tekst
tagTextstringTekst som vises i en tag ved siden av label
useWrapperbooleanIndikerer at feltet skal ha synlig label og hjelpetekst
idstringUnik identifikasjon for datovelgeren
EventBeskrivelse
changeReturnerer valgt dato som streng i ISO-format
value-changeReturnerer en array med valgte datoer i ISO-format
toggleHelpTextReturnerer event.detail { isOpen: true } eller event.detail { isOpen: false } nÄr hjelpeteksten Äpnes eller lukkes

OBS! dateformat er standard formatteringsstreng for visning av datoer. Denne brukes for Ă„ sette “menneskeleselig” format pĂ„ datoene i tags ved flervalgsmodus.