Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(Card): api and a11y #2509

Merged
merged 25 commits into from
Oct 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
81512c6
fix(Card): section api
eirikbacker Sep 24, 2024
6024c5e
fix(Card): docs usage and a11y links
eirikbacker Sep 24, 2024
dccec62
fix(Card): states
eirikbacker Sep 24, 2024
20abb23
Merge branch 'next' into fix/card-section-api
eirikbacker Sep 24, 2024
134ce08
chore(Card): update tests
eirikbacker Sep 24, 2024
f486419
chore(Card): storefront fix
eirikbacker Sep 24, 2024
03136ed
chore(Card): storefront fix
eirikbacker Sep 24, 2024
58cafb3
Merge branch 'next' into fix/card-section-api
eirikbacker Sep 25, 2024
4027499
fix(Card): rename CardSection to CardPart
eirikbacker Sep 25, 2024
0ba276e
Merge branch 'next' into fix/card-section-api
eirikbacker Sep 25, 2024
500bd85
fix(Card): rename Card.Part to Card.Block
eirikbacker Sep 26, 2024
a6f7404
Merge branch 'next' into fix/card-section-api
eirikbacker Sep 26, 2024
8cf0d2c
Merge branch 'next' into fix/card-section-api
eirikbacker Sep 26, 2024
242d064
fix(Card): allow Card.Block in both directions
eirikbacker Sep 26, 2024
5855400
Merge branch 'next' into fix/card-section-api
eirikbacker Sep 26, 2024
409aa06
fix(Card): border between Card.Block elements
eirikbacker Sep 26, 2024
e1c7d6f
Create metal-tomatoes-compete.md
eirikbacker Sep 26, 2024
ec3cac9
docs(Card): link and block
eirikbacker Sep 26, 2024
68ab297
docs(Card): specify card.block logic
eirikbacker Sep 27, 2024
5f88df3
fix(Card): border between card.blocks
eirikbacker Sep 27, 2024
fa76f53
Merge branch 'next' into fix/card-section-api
eirikbacker Sep 27, 2024
48ca36a
fix(Card): move docs to mdx
eirikbacker Sep 30, 2024
39d6179
Merge branch 'next' into fix/card-section-api
eirikbacker Sep 30, 2024
b21ac37
chore: fix storybook rendering
eirikbacker Oct 1, 2024
5885549
chore: merge in next
eirikbacker Oct 1, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .changeset/metal-tomatoes-compete.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
"@digdir/designsystemet-css": patch
"@digdir/designsystemet-react": patch
---

Card:
- Allow `Card` with content placed directly inside
- Replace `Card.Header`, `Card.Content` and `Card.Footer` with `Card.Block`
- Replace `isLink` with anchor-in-heading + `click` handler for better accessibility
10 changes: 4 additions & 6 deletions apps/storefront/app/bloggen/2024/altinn-studio/page.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,10 @@ For at Team Altinn Studio skal nå sine mål om å skape et godt verktøy — m
_"Det er viktig at det er mulig å utvide komponentene til det mer komplekse, fordi alle produkter skal løse et unikt behov i markedet, og ofte vil det forekomme situasjoner hvor mer spesialiserte komponenter er nødvendig. Hvis vi kan utvide eksisterende komponenter fra designsystemet, så vil vi kunne ivareta mye av tilgjengelighetskravene og visuell likhet med de grunnleggende komponentene uten å måtte legge inn for mye innsats."_

<Card color='brand2'>
<CardContent>
David Øvrelid, Tech Lead i Altinn Studio, forklarer hvordan Altinn Studio
bruker Designsystemet. Artikkelen ble først publisert på Medium. [Les den
opprinnelige
artikkelen](https://davidovrelid.com/hvordan-vi-kan-ta-i-bruk-designsystemet-no-p%C3%A5-en-forusigbar-m%C3%A5te-3988980884a2)
</CardContent>
David Øvrelid, Tech Lead i Altinn Studio, forklarer hvordan Altinn Studio
bruker Designsystemet. Artikkelen ble først publisert på Medium. [Les den
opprinnelige
artikkelen](https://davidovrelid.com/hvordan-vi-kan-ta-i-bruk-designsystemet-no-p%C3%A5-en-forusigbar-m%C3%A5te-3988980884a2)
</Card>
<br />
<br />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,33 +1,19 @@
.image {
margin: 0;
aspect-ratio: 16/9;
}

@media screen and (min-width: 1024px) {
.card[data-featured='true'] .media {
padding-bottom: 0;
}

.card[data-featured='true'] {
display: grid;
grid-template-columns: 1fr 1fr;
}

.card[data-featured='true'] .wrapper {
.card[data-featured='true'] > :last-child {
display: flex;
flex-wrap: wrap;
flex-direction: column;
justify-content: center;
padding: var(--ds-spacing-8) var(--ds-spacing-10);
}

.card[data-featured='true'] .heading {
padding-top: 0;
}

.card[data-featured='true'] .footer {
padding-bottom: 0;
}
}

.tag {
Expand Down
66 changes: 26 additions & 40 deletions apps/storefront/app/bloggen/_components/Card/BlogCard.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
import {
Card,
CardContent,
CardFooter,
CardHeader,
CardMedia,
CardBlock,
Heading,
Paragraph,
Tag,
Expand Down Expand Up @@ -42,49 +39,38 @@ export const BlogCard = ({
}: BlogCardProps) => {
return (
<Card
asChild
isLink
data-featured={featured}
className={cl(classes.card, className)}
{...props}
>
<Link href={href}>
<CardMedia className={classes.media}>
<img src={image} alt='' className={classes.image} />
</CardMedia>
<div className={classes.wrapper}>
<CardHeader className={classes.heading}>
{tagText && (
<Tag className={classes.tag} color={tagColor} size='sm'>
{tagText}
</Tag>
)}
<Heading level={level} size={featured ? 'lg' : 'sm'}>
{title}
</Heading>
</CardHeader>
<CardContent>
<Paragraph size={featured ? 'lg' : 'sm'}>{desc}</Paragraph>
</CardContent>
<CardBlock>
<img src={image} alt='' className={classes.image} />
</CardBlock>
<CardBlock>
{tagText && (
<Tag className={classes.tag} color={tagColor} size='sm'>
{tagText}
</Tag>
)}
<Heading level={level} size={featured ? 'lg' : 'sm'}>
<Link href={href}>{title}</Link>
</Heading>
<Paragraph size={featured ? 'lg' : 'sm'}>{desc}</Paragraph>
<Paragraph size={featured ? 'md' : 'xs'} className={classes.meta}>
{author ||
(date && (
<CardFooter className={classes.footer}>
<Paragraph
size={featured ? 'md' : 'xs'}
className={classes.meta}
>
<span>{date}</span>
{author && (
<>
<span aria-hidden className={classes.metaSquare} />
<span>{author}</span>
</>
)}
</Paragraph>
</CardFooter>
<>
<span>{date}</span>
{author && (
<>
<span aria-hidden className={classes.metaSquare} />
<span>{author}</span>
</>
)}
</>
))}
</div>
</Link>
</Paragraph>
</CardBlock>
</Card>
);
};
Expand Down
146 changes: 68 additions & 78 deletions apps/storefront/app/god-praksis/tilgjengelighet/kontrast/page.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -37,64 +37,60 @@ For å sikre god lesbarhet skal all tekst ha tilstrekkelig kontrast mot bakgrunn
Alle brukerne, også de med svekket syn, skal kunne se innholdet i digitale tjenester. Web Content Accessibility Guidelines (WCAG) inneholder suksesskriterier og forslag til løsninger for å lykkes. Men det er ikke samsvar mellom dagens kontrastregler og kravet om at alle skal kunne se innholdet.

<Card color='brand3'>
<CardContent>
<Heading
level={3}
size='xs'
>
Gjeldende regelverk, WCAG 2.1
</Heading>
<ListUnordered>
<ListItem>
**1.4.3 Kontrast (minimum) (Nivå AA)**: Kontrastforholdet mellom
teksten og bakgrunnen er minst 4,5:1. [1.4.3 Kontrast (minimum), WCAG
2.1
(w3.org)](https://www.w3.org/Translations/WCAG21-no/#contrast-minimum)
</ListItem>
<ListItem>
**1.4.11 Kontrast for ikke-tekstlig innhold (Nivå AA)**: Den visuelle
presentasjonen av det følgende har et kontrastforhold på minst 3:1 mot
farge(r) som ligger ved siden av. [1.4.11 Kontrast for ikke-tekstlig
innhold, WCAG 2.1
(w3.org)](https://www.w3.org/Translations/WCAG21-no/#non-text-contrast)
</ListItem>
</ListUnordered>
</CardContent>
<Heading
level={3}
size='xs'
>
Gjeldende regelverk, WCAG 2.1
</Heading>
<ListUnordered>
<ListItem>
**1.4.3 Kontrast (minimum) (Nivå AA)**: Kontrastforholdet mellom
teksten og bakgrunnen er minst 4,5:1. [1.4.3 Kontrast (minimum), WCAG
2.1
(w3.org)](https://www.w3.org/Translations/WCAG21-no/#contrast-minimum)
</ListItem>
<ListItem>
**1.4.11 Kontrast for ikke-tekstlig innhold (Nivå AA)**: Den visuelle
presentasjonen av det følgende har et kontrastforhold på minst 3:1 mot
farge(r) som ligger ved siden av. [1.4.11 Kontrast for ikke-tekstlig
innhold, WCAG 2.1
(w3.org)](https://www.w3.org/Translations/WCAG21-no/#non-text-contrast)
</ListItem>
</ListUnordered>
</Card>

<br />

<Card color='brand2'>
<CardContent>
<Heading
level={3}
size='xs'
>
Fremtidig eller strengere:
</Heading>
<ListUnordered>
<ListItem>
**1.4.6 Kontrast** (forbedret) (Nivå AAA): Den visuelle presentasjonen
av tekst og bilder av tekst har et kontrastforhold på minst 7:1,
unntatt uvesentlig tekst og skriftstørrelser større enn 18px eller
14px fet. [ 1.4.6 Kontrast (forbedret), WCAG 2.1
(w3.org)](https://www.w3.org/Translations/WCAG21-no/#contrast-enhanced)
</ListItem>
<ListItem>
**WCAG 2.2: 2.4.13** Focus Appearance (Nivå AAA), om utseende til
fokusmarkering krever at fokusindikator har en kontrastverdi på 3:1
mellom samme piksler i fokusert og ikke-fokusert tilstand.
[Understanding Success Criterion 2.4.13: Focus Appearance | WAI |
W3C](https://www.w3.org/WAI/WCAG22/Understanding/focus-appearance.html)
</ListItem>
<ListItem>
**WCAG 3** har et krav om farge og kontrast, visuell kontrast i tekst
(sølv): Sørg for tilstrekkelig kontrast mellom tekst i forgrunnen og
bakgrunnen for teksten. Her brukes det en ny metode, med navn APCA,
for å regne ut kontrasten.
</ListItem>
</ListUnordered>
</CardContent>
<Heading
level={3}
size='xs'
>
Fremtidig eller strengere:
</Heading>
<ListUnordered>
<ListItem>
**1.4.6 Kontrast** (forbedret) (Nivå AAA): Den visuelle presentasjonen
av tekst og bilder av tekst har et kontrastforhold på minst 7:1,
unntatt uvesentlig tekst og skriftstørrelser større enn 18px eller
14px fet. [ 1.4.6 Kontrast (forbedret), WCAG 2.1
(w3.org)](https://www.w3.org/Translations/WCAG21-no/#contrast-enhanced)
</ListItem>
<ListItem>
**WCAG 2.2: 2.4.13** Focus Appearance (Nivå AAA), om utseende til
fokusmarkering krever at fokusindikator har en kontrastverdi på 3:1
mellom samme piksler i fokusert og ikke-fokusert tilstand.
[Understanding Success Criterion 2.4.13: Focus Appearance | WAI |
W3C](https://www.w3.org/WAI/WCAG22/Understanding/focus-appearance.html)
</ListItem>
<ListItem>
**WCAG 3** har et krav om farge og kontrast, visuell kontrast i tekst
(sølv): Sørg for tilstrekkelig kontrast mellom tekst i forgrunnen og
bakgrunnen for teksten. Her brukes det en ny metode, med navn APCA,
for å regne ut kontrasten.
</ListItem>
</ListUnordered>
</Card>

## Mer presis metode
Expand Down Expand Up @@ -132,31 +128,27 @@ Vi vet at selv om en løsning oppfyller de konkrete kravene fra regelverket om u
Hvis vi oppfyller metoden i WCAG 2, etterlever vi teknisk sett kravet til universell utforming, men det betyr ikke at innholdet er tilgjengelig eller universelt utformet. Derfor strekker vi oss langt i å også oppfylle de fremtidige WCAG-3 kravene som bruker APCA-metoden.

<Card color='brand3'>
<CardContent>
**Kontrast i WCAG 2 «luminosity contrast algorithm** <br />
_«I WCAG 2 er kontrast en måleenhet for forskjellen i den opplevde lysintensiteten
mellom to farger. Denne forskjellen er beskrevet som et forhold fra 1:1 (for
eksempel hvit på hvit) til 21:1 (for eksempel svart på hvit).»_ – WebAIM, vår
oversettelse. Kontrastene regnes ut ved hjelp av fargenes RGB, HEX eller HSL
verdier i tillegg til transparens (alpha), om fargen er tekst, grafikk, forgrunn
eller bakgrunn har ingen betydning.
</CardContent>
**Kontrast i WCAG 2 «luminosity contrast algorithm** <br />
_«I WCAG 2 er kontrast en måleenhet for forskjellen i den opplevde lysintensiteten
mellom to farger. Denne forskjellen er beskrevet som et forhold fra 1:1 (for
eksempel hvit på hvit) til 21:1 (for eksempel svart på hvit).»_ – WebAIM, vår
oversettelse. Kontrastene regnes ut ved hjelp av fargenes RGB, HEX eller HSL
verdier i tillegg til transparens (alpha), om fargen er tekst, grafikk, forgrunn
eller bakgrunn har ingen betydning.
</Card>

<br />

<Card color='brand2'>
<CardContent>
**Kontrast i WCAG 3 «visual contrast algorithm»** <br />I WCAG 3 benyttes en
visuell-kontrast algoritme som kalles for APCA, det er fremdeles
fargeverdiene som benyttes for å kalkulere kontrasten, men også om fargen er
tekst, grafikk, forgrunn eller bakgrunn, i tillegg har også valg av font,
font-vekt og størrelse en innvirkning på hvilke kontrastverdier som er
godkjent. Forskjellige farger som i WCAG 2 ville oppnådd like
kontrastverdier vil i APCA kunne få andre verdier fordi en i større grad
kalkulerer ut fra øyets evne til å oppfatte farger enn kun den tekniske
fargeverdien.
</CardContent>
**Kontrast i WCAG 3 «visual contrast algorithm»** <br />I WCAG 3 benyttes en
visuell-kontrast algoritme som kalles for APCA, det er fremdeles
fargeverdiene som benyttes for å kalkulere kontrasten, men også om fargen er
tekst, grafikk, forgrunn eller bakgrunn, i tillegg har også valg av font,
font-vekt og størrelse en innvirkning på hvilke kontrastverdier som er
godkjent. Forskjellige farger som i WCAG 2 ville oppnådd like
kontrastverdier vil i APCA kunne få andre verdier fordi en i større grad
kalkulerer ut fra øyets evne til å oppfatte farger enn kun den tekniske
fargeverdien.
</Card>

## Verktøy for å teste kontrastverdier
Expand Down Expand Up @@ -188,11 +180,9 @@ I variant B er teksten svart, og bakgrunnen er farge #6D7879. Teksten er noe min
<br />
<br />
<Card color='brand1'>
<CardContent>
**Bidra til artikkelen?** <br />
Vi vil gjerne ha dine innspill og tilbakemeldinger på artikkelen. Send oss en
e-post på: [email protected] eller [kontakt oss i Github](https://github.com/digdir/designsystemet/issues/new).
</CardContent>
**Bidra til artikkelen?** <br />
Vi vil gjerne ha dine innspill og tilbakemeldinger på artikkelen. Send oss en
e-post på: [email protected] eller [kontakt oss i Github](https://github.com/digdir/designsystemet/issues/new).
</Card>

<Contributors
Expand Down
17 changes: 3 additions & 14 deletions apps/storefront/app/monstre/feilmeldinger/page.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -155,10 +155,7 @@ Vi viser feilmeldingen under feltet med feil. Dette er det vanligste mønsteret,
<Card
color='brand1'
>
<CardContent>
Merk: Vi ønsker å holde oss oppdatert om andre anbefalinger om plassering, og har [pågående diskusjon om dette på Git](https://github.com/digdir/designsystemet/discussions/1684#discussioncomment-9339006).

</CardContent>
</Card>

### Når skal vi vise en feilmelding?
Expand Down Expand Up @@ -244,12 +241,8 @@ Vi kan bruke disse aria-attributtene og rollene:
- Vi setter `aria-invalid="true"` på felt med feil, for å si fra om at det er en feil der.
- Vi bruker `aria-describedby` for å koble feilmelding til feltet.

<Card
color='brand1'
>
<CardContent>
<Card color='brand1'>
Vi unngår inntill videre å bruke `aria-errormessage` da den ikke har full støtte av hjelpemidler per nå. Men vi kommer til å oppdatere retningslinjene om støtten blir bedre i fremtiden. [Se diskusjon på github](https://github.com/digdir/designsystemet/discussions/1684)
</CardContent>
</Card>

### Gi automatiske beskjeder
Expand All @@ -274,12 +267,8 @@ For feilmeldinger som dukker opp dynamisk må vi bruke `aria-live` for at meldin
<br />
<br />

<Card
color='brand3'
>
<CardContent>
Retningslinjene er utarbeidet i en tverretatlig arbeidsgruppe med deltakere fra Digdir, Nav, Skatt, Brreg, Politiet, KS DIF og Oslo kommune. Du kan påvirke arbeidet i [Github](https://github.com/digdir/designsystemet/discussions/1684) eller i [#Mønster-kanalen](https://designsystemet.slack.com/archives/C05RBGB92MC/p1712751837722749) på [Slack](https://join.slack.com/t/designsystemet/shared_invite/zt-2438eotl3-a4266Vd2IeqMWO8TBw5PrQ).
</CardContent>
<Card color='brand3'>
Retningslinjene er utarbeidet i en tverretatlig arbeidsgruppe med deltakere fra Digdir, Nav, Skatt, Brreg, Politiet, KS DIF og Oslo kommune. Du kan påvirke arbeidet i [Github](https://github.com/digdir/designsystemet/discussions/1684) eller i [#Mønster-kanalen](https://designsystemet.slack.com/archives/C05RBGB92MC/p1712751837722749) på [Slack](https://join.slack.com/t/designsystemet/shared_invite/zt-2438eotl3-a4266Vd2IeqMWO8TBw5PrQ).
</Card>

<Contributors
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,5 @@ En kombinasjon av obligatoriske og valgfrie felt er ikke ideellt! Men det vil v
<Card
color='brand3'
>
<CardContent>
*Retningslinjene er utarbeidet i en tverretatlig arbeidsgruppe med deltakere fra Digdir, Nav, Skatt, Brreg og Oslo Origo. Du kan påvirke arbeidet i [Github](https://github.com/digdir/designsystemet/issues/new) eller i [#Mønster-kanalen](https://designsystemet.slack.com/archives/C05RBGB92MC/p1712751837722749) på [Slack](https://join.slack.com/t/designsystemet/shared_invite/zt-2438eotl3-a4266Vd2IeqMWO8TBw5PrQ).
</CardContent>
*Retningslinjene er utarbeidet i en tverretatlig arbeidsgruppe med deltakere fra Digdir, Nav, Skatt, Brreg og Oslo Origo. Du kan påvirke arbeidet i [Github](https://github.com/digdir/designsystemet/issues/new) eller i [#Mønster-kanalen](https://designsystemet.slack.com/archives/C05RBGB92MC/p1712751837722749) på [Slack](https://join.slack.com/t/designsystemet/shared_invite/zt-2438eotl3-a4266Vd2IeqMWO8TBw5PrQ).
</Card>
8 changes: 2 additions & 6 deletions apps/storefront/app/monstre/systemvarsler/page.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,8 @@ export default ({ children }) => (
/>
);

<Card
color='brand3'
>
<CardContent>
*Retningslinjene er under arbeid fra 5. juni 2024 i en tverretatlig arbeidsgruppe med deltakere fra Digdir, Nav, Skatt, Brreg, Politiet, KS DIF og Oslo kommune. Alle er velkommen til å påvirke arbeidet i [Github](https://github.com/digdir/designsystemet/discussions/1801) eller i [#Mønster-kanalen](https://designsystemet.slack.com/archives/C05RBGB92MC/p1712751837722749) på [Slack](https://join.slack.com/t/designsystemet/shared_invite/zt-2438eotl3-a4266Vd2IeqMWO8TBw5PrQ).
</CardContent>
<Card color='brand3'>
*Retningslinjene er under arbeid fra 5. juni 2024 i en tverretatlig arbeidsgruppe med deltakere fra Digdir, Nav, Skatt, Brreg, Politiet, KS DIF og Oslo kommune. Alle er velkommen til å påvirke arbeidet i [Github](https://github.com/digdir/designsystemet/discussions/1801) eller i [#Mønster-kanalen](https://designsystemet.slack.com/archives/C05RBGB92MC/p1712751837722749) på [Slack](https://join.slack.com/t/designsystemet/shared_invite/zt-2438eotl3-a4266Vd2IeqMWO8TBw5PrQ).
</Card>

Systemvarsler brukes for å varsle brukeren enten om feil i systemet eller holde dem informert om viktige ting de bør få med seg. Vi bruker dem til feil som ikke tilhører et skjemaelement, og som ikke validerer brukerens inndata. De bør derfor ha et annet utseende enn [brukerutløste feil](/monstre/feilmeldinger).
Expand Down
Loading
Loading