Komponenter
Checkbox
Checkbox gir brukerne mulighet til å velge ett eller flere alternativer. Den kan også brukes i tilfeller der brukeren skal bekrefte noe.
React
const Preview = () => { return ( <Checkbox label='Checkbox label' description='Description' value='value' /> ); }; render(<Preview />)
Bruk
Eksempler
Gruppering
Bruk Fieldset og useCheckboxGroup for gruppering av flere valg.
React
const Group = () => { const [value, setValue] = useState<string[]>(['epost']); return ( <Fieldset> <Fieldset.Legend> Hvordan vil du helst at vi skal kontakte deg? </Fieldset.Legend> <Fieldset.Description> Velg alle alternativene som er relevante for deg. </Fieldset.Description> <Checkbox label='E-post' value='epost' checked={value.includes('epost')} onChange={(e) => { if (e.target.checked) { setValue([...value, 'epost']); } else { setValue(value.filter((v) => v !== 'epost')); } }} /> <Checkbox label='Telefon' value='telefon' checked={value.includes('telefon')} onChange={(e) => { if (e.target.checked) { setValue([...value, 'telefon']); } else { setValue(value.filter((v) => v !== 'telefon')); } }} /> <Checkbox label='SMS' value='sms' checked={value.includes('sms')} onChange={(e) => { if (e.target.checked) { setValue([...value, 'sms']); } else { setValue(value.filter((v) => v !== 'sms')); } }} /> </Fieldset> ); }; render(<Group />)
Indeterminate checkbox
Legg inn allowIndeterminate: true i getCheckboxProps for å opprette en overordnet Checkbox som kan velge eller fjerne alle alternativer.
Dette aktiverer en ekstra tilstand, indeterminate, ved siden av checked og unchecked.
Den vises med en horisontal strek når én eller flere Checkbox er markert i gruppen.
Den vises som en vanlig Checkbox dersom alle i gruppen har samme tilstand.
React
const InTable = () => { const tableData = [ { id: 1, navn: 'Lise Nordmann', epost: 'lise@nordmann.no', telefon: '68051156', }, { id: 2, navn: 'Kari Nordmann', epost: 'kari@nordmann.no', telefon: '68059679', }, { id: 3, navn: 'Ola Nordmann', epost: 'ola@nordmann.no', telefon: '68055731', }, { id: 4, navn: 'Per Nordmann', epost: 'per@nordmann.no', telefon: '68059631', }, ]; const { getCheckboxProps } = useCheckboxGroup({ name: 'checkbox-table', value: ['2', '3'], }); return ( <Table> <colgroup> {/* ensure the first column only takes up the necessary space */} <col style={{ width: '1px' }} /> <col /> <col /> </colgroup> <Table.Head> <Table.Row> <Table.HeaderCell> <Checkbox aria-label='Velg alle' {...getCheckboxProps({ allowIndeterminate: true, value: 'all', })} /> </Table.HeaderCell> <Table.HeaderCell>Navn</Table.HeaderCell> <Table.HeaderCell>E-post</Table.HeaderCell> </Table.Row> </Table.Head> <Table.Body> {tableData.map((person) => ( <Table.Row key={person.id}> <Table.Cell> <Checkbox aria-labelledby={`checkbox-${person.id}-name`} {...getCheckboxProps(person.id.toString())} /> </Table.Cell> <Table.Cell id={`checkbox-${person.id}-name`}> {person.navn} </Table.Cell> <Table.Cell>{person.epost}</Table.Cell> </Table.Row> ))} </Table.Body> </Table> ); }; render(<InTable />)
HTML
Checkbox er ein samansatt komponent, så i HTML må du bygge den opp av fleire komponentar.
Me bruker Fieldset, Label og Input for å lage ein Checkbox.
Koden under viser hvordan du visuelt kan bygge opp en Checkbox i HTML, men du må selv passe på at <input> blir koblet sammen med <label> og beskrivelse.
I Fieldset
Koden under er et eksempel på hvordan du bruker Checkbox inni <fieldset>.
Merk at vi kun viser en Checkbox her, i praksis vil dette ofte være flere.
CSS variablar og data-attributter
Checkbox er en sammensatt komponent, og derfor viser vi variabler og data-attributter fra ds-input her.
| Navn | Verdi |
|---|---|
| --dsc-input-padding | var(--ds-size-2) var(--ds-size-3) |
| --dsc-input-size--toggle | var(--ds-size-6) |
| --dsc-input-size | var(--ds-size-12) |
| --dsc-input-background--readonly | var(--ds-color-neutral-surface-tinted) |
| --dsc-input-background | var(--ds-color-neutral-surface-default) |
| --dsc-input-border-color--readonly | var(--ds-color-neutral-border-subtle) |
| --dsc-input-border-color | var(--ds-color-neutral-border-default) |
| --dsc-input-border-style | solid |
| --dsc-input-border-width--toggle | max(var(--ds-border-width-default),calc(var(--ds-size-1)/2)) |
| --dsc-input-border-width | var(--ds-border-width-default) |
| --dsc-input-outline-color--hover | var(--ds-color-neutral-border-default) |
| --dsc-input-outline-color--toggle--hover | var(--dsc-input-accent-color) |
| --dsc-input-outline-width--hover | var(--ds-border-width-default) |
| --dsc-input-outline-style--hover | solid |
| --dsc-input-color--readonly | var(--ds-color-neutral-text-default) |
| --dsc-input-color | var(--ds-color-neutral-text-default) |
| --dsc-input-stroke-color | var(--ds-color-base-contrast-default) |
| --dsc-input-stroke-color--invalid | var(--ds-color-danger-base-contrast-default) |
| --dsc-input-stroke-width | 0.05em |
| --dsc-input-accent-color | var(--ds-color-base-default) |
| --dsc-input-accent-color--invalid | var(--ds-color-danger-text-subtle) |
| Navn | Verdi |
|---|---|
| data-width | auto |