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
Enkelt tekstfelt uten datovelger eller visuell stĂžtte.
Inputfelt med sĂžk- og/eller filtreringsmuligheter.
Egner seg til valg mellom fÄ, faste datoer
Varianter
Card finnes i to hovedvarianter. Du kan kombinere disse med ulike skins og farger.
Variant | Bruk |
---|---|
Enkel dato | Lar deg velge én spesifikk dato |
Flere datoer | Lar deg velge flere datoer samtidig |
Periode/intervall | Lar 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
UnngÄ
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-label
og 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:
Tips og anbefalinger for hvordan du bÞr hÄndtere datovelgere.
Grunnleggende prinsipper for tilgjengelige skjemafelt.
Anatomi
Element | Beskrivelse |
---|---|
1. Etikett (label) | Tekst som forteller hva brukeren skal gjĂžre |
2. Hjelpetekst | Tilleggsinformasjon som forklarer datoformat, regler eller begrensninger (valgfritt) |
3. Inputfelt | Feltet 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 dato | Datoen som er dagens dato, markert i kalenderen |
7. Valgt dato/valgt periode | Datoen eller perioden brukeren har valgt, markert i kalenderen og vist i inputfeltet |
Implementasjon i kode
Hvordan ta komponenten i bruk?
import @oslokommune/punkt-elements/dist/pkt-datepicker.js;
import { PktDatepicker } from '@oslokommune/punkt-react';
<script src="https://punkt-cdn.oslo.kommune.no/latest/elements/pkt-datepicker.js" type="module"></script>
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
Prop | Type | Beskrivelse |
---|---|---|
name | string | Navn for innsending |
label | string | Tekst/label |
helptext | string | Hjelpetekst |
helptextDropdown | string | Hjelpetekst som vises i en lukket boks man kan Äpne |
helptextDropdownButton | string | Knappetekst for utvidet hjelpetekst |
dateformat | string | Datoformat for tags i flervalg |
currentmonth | ISOdatestring | MÄned som vises i datovelgeren |
value | ISOdatestring | Verdi (kommaseparert ved flervalg) |
excludeweekdays | string | Kommaseparert liste over ukedager (1-7) som skal ekskluderes |
excludedates | ISOdatestring | Utelat datoer (Kommaseparerte ISO-datoer) |
min | ISOdatestring | Tidligst tillatte dato |
max | ISOdatestring | Senest tillatte dato |
weeknumbers | boolean | Vis ukenummer |
withcontrols | boolean | Med velgere for mÄned/Är |
multiple | boolean | Flervalg |
maxlength | number | Maks antall datoer i flervalg |
range | boolean | Datotidsrom (fra og til) |
hasError | boolean | Feil |
errorMessage | string | Feilmelding ved feil |
disabled | boolean | Deaktivert |
fullwidth | boolean | Full bredde |
required | boolean | PÄkrevd |
requiredTag | boolean | Vise pÄkrevd-merking |
requiredText | string | PÄkrevd-tekst |
optionalTag | boolean | Vise valgfritt-merking |
optionalText | string | Valgfritt-tekst |
tagText | string | Tekst som vises i en tag ved siden av label |
useWrapper | boolean | Indikerer at feltet skal ha synlig label og hjelpetekst |
id | string | Unik identifikasjon for datovelgeren |
Event | Beskrivelse |
---|---|
change | Returnerer valgt dato som streng i ISO-format |
value-change | Returnerer en array med valgte datoer i ISO-format |
toggleHelpText | Returnerer 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.