@mattilsynet/design 3.2.9 → 3.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/mtds/ai/AGENTS.md +892 -0
  2. package/mtds/ai/alert.mdx +63 -0
  3. package/mtds/ai/alert.stories.tsx +128 -0
  4. package/mtds/ai/analytics.mdx +185 -0
  5. package/mtds/ai/app.mdx +60 -0
  6. package/mtds/ai/app.stories.tsx +897 -0
  7. package/mtds/ai/atlas.mdx +82 -0
  8. package/mtds/ai/atlas.stories.tsx +424 -0
  9. package/mtds/ai/avatar.mdx +45 -0
  10. package/mtds/ai/avatar.stories.tsx +109 -0
  11. package/mtds/ai/badge.mdx +70 -0
  12. package/mtds/ai/badge.stories.tsx +122 -0
  13. package/mtds/ai/breadcrumbs.mdx +36 -0
  14. package/mtds/ai/breadcrumbs.stories.tsx +158 -0
  15. package/mtds/ai/button.mdx +179 -0
  16. package/mtds/ai/button.stories.tsx +440 -0
  17. package/mtds/ai/card.mdx +51 -0
  18. package/mtds/ai/card.stories.tsx +469 -0
  19. package/mtds/ai/chart.mdx +67 -0
  20. package/mtds/ai/chart.stories.tsx +519 -0
  21. package/mtds/ai/chip.mdx +71 -0
  22. package/mtds/ai/chip.stories.tsx +211 -0
  23. package/mtds/ai/details.mdx +33 -0
  24. package/mtds/ai/details.stories.tsx +91 -0
  25. package/mtds/ai/dialog.mdx +38 -0
  26. package/mtds/ai/dialog.stories.tsx +373 -0
  27. package/mtds/ai/divider.mdx +19 -0
  28. package/mtds/ai/divider.stories.tsx +50 -0
  29. package/mtds/ai/errorsummary.mdx +26 -0
  30. package/mtds/ai/errorsummary.stories.tsx +137 -0
  31. package/mtds/ai/field.mdx +86 -0
  32. package/mtds/ai/field.stories.tsx +863 -0
  33. package/mtds/ai/fieldset.mdx +126 -0
  34. package/mtds/ai/fieldset.stories.tsx +298 -0
  35. package/mtds/ai/fileupload.mdx +16 -0
  36. package/mtds/ai/fileupload.stories.tsx +126 -0
  37. package/mtds/ai/helptext.mdx +24 -0
  38. package/mtds/ai/helptext.stories.tsx +106 -0
  39. package/mtds/ai/input.mdx +223 -0
  40. package/mtds/ai/input.stories.tsx +352 -0
  41. package/mtds/ai/law.mdx +115 -0
  42. package/mtds/ai/law.stories.tsx +168 -0
  43. package/mtds/ai/layout.mdx +145 -0
  44. package/mtds/ai/layout.stories.tsx +443 -0
  45. package/mtds/ai/link.mdx +45 -0
  46. package/mtds/ai/link.stories.tsx +44 -0
  47. package/mtds/ai/logo.mdx +86 -0
  48. package/mtds/ai/logo.stories.tsx +146 -0
  49. package/mtds/ai/pagination.mdx +136 -0
  50. package/mtds/ai/pagination.stories.tsx +404 -0
  51. package/mtds/ai/popover.mdx +86 -0
  52. package/mtds/ai/popover.stories.tsx +355 -0
  53. package/mtds/ai/print.mdx +96 -0
  54. package/mtds/ai/print.stories.tsx +839 -0
  55. package/mtds/ai/progress.mdx +41 -0
  56. package/mtds/ai/progress.stories.tsx +141 -0
  57. package/mtds/ai/skeleton.mdx +26 -0
  58. package/mtds/ai/skeleton.stories.tsx +131 -0
  59. package/mtds/ai/spinner.mdx +26 -0
  60. package/mtds/ai/spinner.stories.tsx +72 -0
  61. package/mtds/ai/steps.mdx +37 -0
  62. package/mtds/ai/steps.stories.tsx +568 -0
  63. package/mtds/ai/table.mdx +124 -0
  64. package/mtds/ai/table.stories.tsx +1715 -0
  65. package/mtds/ai/tabs.mdx +106 -0
  66. package/mtds/ai/tabs.stories.tsx +159 -0
  67. package/mtds/ai/tag.mdx +49 -0
  68. package/mtds/ai/tag.stories.tsx +111 -0
  69. package/mtds/ai/toast.mdx +67 -0
  70. package/mtds/ai/toast.stories.tsx +215 -0
  71. package/mtds/ai/togglegroup.mdx +75 -0
  72. package/mtds/ai/togglegroup.stories.tsx +96 -0
  73. package/mtds/ai/tooltip.mdx +32 -0
  74. package/mtds/ai/tooltip.stories.tsx +34 -0
  75. package/mtds/ai/typography.mdx +67 -0
  76. package/mtds/ai/typography.stories.tsx +798 -0
  77. package/mtds/ai/validation.mdx +19 -0
  78. package/mtds/ai/validation.stories.tsx +45 -0
  79. package/mtds/app/app-observer.js +1 -1
  80. package/mtds/app/app-toggle.js +10 -26
  81. package/mtds/app/app-toggle.js.map +1 -1
  82. package/mtds/app/app-toggle2.js +26 -10
  83. package/mtds/app/app-toggle2.js.map +1 -1
  84. package/mtds/app/app.js +1 -1
  85. package/mtds/atlas/atlas-element.js +1 -1
  86. package/mtds/chart/chart-lines.js +19 -19
  87. package/mtds/chart/chart-lines.js.map +1 -1
  88. package/mtds/chart/chart.css.js +16 -1
  89. package/mtds/chart/chart.css.js.map +1 -1
  90. package/mtds/chart/chart.stories.d.ts +1 -0
  91. package/mtds/index.iife.js +32 -17
  92. package/mtds/index.js +21 -20
  93. package/mtds/index.js.map +1 -1
  94. package/mtds/package.json.js +1 -1
  95. package/mtds/styles.css +1 -1
  96. package/mtds/table/table-observer.js +26 -15
  97. package/mtds/table/table-observer.js.map +1 -1
  98. package/package.json +4 -2
@@ -0,0 +1,70 @@
1
+ import { Meta, Canvas } from '@storybook/addon-docs/blocks';
2
+ import { Example, CssVariables } from '../../.storybook/blocks';
3
+ import * as stories from './badge.stories';
4
+ import { Flex } from '../react';
5
+ import styles from '../styles.module.css';
6
+ import { EnvelopeIcon } from '@phosphor-icons/react';
7
+
8
+
9
+ <Meta of={stories} />
10
+
11
+ # Badge
12
+
13
+ > Badge er en ikke-interaktiv komponent som viser status med eller uten tall.
14
+
15
+ ## Kode
16
+ - Legg klassen `badge` på typisk `span` eller bruk `<Badge>` komponenten i React
17
+ - Legg innhold inni attributten `data-badge`
18
+ <Canvas of={stories.Default} />
19
+
20
+ ## Skikk og bruk
21
+
22
+ <Flex data-items="350">
23
+ {/* Innhold i Badge: */}
24
+ <Example data-color="success" text="Bruk bare tall i badge." zoom="100%">
25
+ <button type="button" className={styles.button} data-variant="secondary"><EnvelopeIcon />E-post <span className={styles.badge} data-badge="2"></span></button>
26
+ </Example>
27
+ <Example data-color="danger" text="Unngå å bruke tekst i badge, bruk heller tag-komponenten hvis det er behov for tekst." zoom="100%">
28
+ <button type="button" className={styles.button} data-variant="secondary"> <EnvelopeIcon />E-post <span className={styles.badge} data-badge="Trehundreogtjuefire"></span></button>
29
+ </Example>
30
+
31
+ {/* Flere Badger: */}
32
+ <Example data-color="success" text="Bruk én badge i sammenheng med et element." zoom="100%">
33
+ <button type="button" className={styles.button} data-variant="secondary"><EnvelopeIcon />E-post <span className={styles.badge} data-badge="2"></span></button>
34
+ </Example>
35
+ <Example data-color="danger" text="Unngå bruk av flere badges samtidig. Det kan skape forvirring." zoom="100%">
36
+ <button type="button" className={styles.button} data-variant="secondary"> <EnvelopeIcon />E-post <span className={styles.badge} data-badge="42"></span><span className={styles.badge} data-badge="98"></span></button>
37
+ </Example>
38
+
39
+ {/* Badge brukes i en kontekst: */}
40
+ <Example data-color="success" text="Bruk badge i en kontekst." zoom="100%">
41
+ <ds-tabs class={styles.tabs} data-size="sm">
42
+ <ds-tablist>
43
+ <ds-tab role="tab" aria-selected="true"><div className={styles.flex} data-gap="2">Kjøtt <span className={styles.badge} data-badge="2"></span></div></ds-tab>
44
+ <ds-tab>Fisk</ds-tab>
45
+ <ds-tab>Grønnsaker</ds-tab>
46
+ </ds-tablist>
47
+ </ds-tabs>
48
+ </Example>
49
+ <Example data-color="danger" text="Badge skal aldri stå alene." zoom="100%">
50
+ <span className={styles.badge} data-badge="Firehundreogfemtito"></span>
51
+ </Example>
52
+
53
+
54
+
55
+ </Flex>
56
+
57
+ ## Farger
58
+ - Bruk `data-color` for å endre farge
59
+ <Canvas of={stories.Color} />
60
+
61
+ ## Inni element
62
+ - Knapper og overskifter kan være forelder til `badge`
63
+ <Canvas of={stories.InElement} />
64
+
65
+ ## Rundt element
66
+ - Dersom `badge` har elementer inni, vil den plassere seg i top-høyre hjørne
67
+ - Bruk `--mtdsc-badge-offset` om du trenger å flytte badge innover i elementet
68
+ <Canvas of={stories.WithPosition} />
69
+
70
+ <CssVariables component="badge" />
@@ -0,0 +1,122 @@
1
+ import { EnvelopeIcon } from "@phosphor-icons/react";
2
+ import type { Meta, StoryObj } from "@storybook/react-vite";
3
+ import { Badge } from "../react";
4
+ import styles from "../styles.module.css";
5
+
6
+ const meta = {
7
+ title: "Designsystem/Badge",
8
+ decorators: [
9
+ (Story) => (
10
+ <div className={styles.flex}>
11
+ <Story />
12
+ </div>
13
+ ),
14
+ ],
15
+ } satisfies Meta;
16
+
17
+ export default meta;
18
+ type Story = StoryObj<typeof meta>;
19
+
20
+ export const Default: Story = {
21
+ render: () => <span className={styles.badge} data-badge="2"></span>,
22
+ };
23
+
24
+ export const React: Story = {
25
+ render: () => (
26
+ <>
27
+ <Badge data-badge="2"></Badge>
28
+ <Badge>
29
+ <EnvelopeIcon />
30
+ </Badge>
31
+ </>
32
+ ),
33
+ };
34
+
35
+ export const Color: Story = {
36
+ render: () => (
37
+ <>
38
+ <span className={styles.badge} data-badge="2"></span>
39
+ <span className={styles.badge} data-badge="2" data-color="danger"></span>
40
+ </>
41
+ ),
42
+ };
43
+
44
+ export const InElement: Story = {
45
+ render: () => (
46
+ <div>
47
+ <h2>
48
+ Under behandling <span className={styles.badge} data-badge="9"></span>
49
+ </h2>
50
+ <div className={styles.flex}>
51
+ <button
52
+ type="button"
53
+ className={styles.button}
54
+ data-variant="secondary"
55
+ >
56
+ <EnvelopeIcon />
57
+ E-post <span className={styles.badge} data-badge="99+"></span>
58
+ </button>
59
+ <button type="button" className={styles.button} data-variant="primary">
60
+ <EnvelopeIcon />
61
+ E-post <span className={styles.badge} data-badge="99+"></span>
62
+ </button>
63
+ </div>
64
+ </div>
65
+ ),
66
+ };
67
+
68
+ export const WithPosition: Story = {
69
+ render: () => (
70
+ <>
71
+ <button type="button" className={styles.button}>
72
+ E-post{" "}
73
+ <span className={styles.badge}>
74
+ <EnvelopeIcon />
75
+ </span>
76
+ </button>
77
+ <button type="button" className={styles.button}>
78
+ E-post{" "}
79
+ <span className={styles.badge} data-badge="2">
80
+ <EnvelopeIcon />
81
+ </span>
82
+ </button>
83
+ <button type="button" className={styles.button}>
84
+ E-post{" "}
85
+ <span className={styles.badge} data-color="danger">
86
+ <EnvelopeIcon />
87
+ </span>
88
+ </button>
89
+ <button type="button" className={styles.button}>
90
+ E-post{" "}
91
+ <span className={styles.badge} data-badge="2" data-color="danger">
92
+ <EnvelopeIcon />
93
+ </span>
94
+ </button>
95
+ </>
96
+ ),
97
+ };
98
+
99
+ export const Sizes: Story = {
100
+ render: () => (
101
+ <div className={styles.prose}>
102
+ <button type="button" className={styles.button} data-size="sm">
103
+ E-post{" "}
104
+ <span className={styles.badge} data-badge="2">
105
+ <EnvelopeIcon />
106
+ </span>
107
+ </button>
108
+ <button type="button" className={styles.button} data-size="md">
109
+ E-post{" "}
110
+ <span className={styles.badge} data-badge="2">
111
+ <EnvelopeIcon />
112
+ </span>
113
+ </button>
114
+ <button type="button" className={styles.button} data-size="lg">
115
+ E-post{" "}
116
+ <span className={styles.badge} data-badge="2">
117
+ <EnvelopeIcon />
118
+ </span>
119
+ </button>
120
+ </div>
121
+ ),
122
+ };
@@ -0,0 +1,36 @@
1
+ import { Meta, Canvas } from '@storybook/addon-docs/blocks';
2
+ import { CssVariables } from '../../.storybook/blocks';
3
+ import * as stories from './breadcrumbs.stories';
4
+
5
+ <Meta of={stories} />
6
+
7
+ # Breadcrumbs
8
+
9
+ > Brukes til å hjelpe brukerne med å forstå hvor de er i en struktur, for eksempel på en nettside.
10
+
11
+ ## Kode
12
+ - Bruk klassen `breadcrumbs` på `<ds-breadcrumbs>`
13
+ - Legg `<ol>` inni, med `<li><a>` som barn
14
+ - Siste `<a>` får automatisk `aria-current="page"`
15
+ - Hvis `<a>` ligger direkte i `<nav>` vil denne være [tilbakeknapp](#tilbakeknapp)
16
+ - **React?** Bruk `<Breadcrumbs>`, `<ol>`, `<li>` og `<a>`
17
+
18
+ <Canvas of={stories.Default} />
19
+
20
+ ## Tilbakeknapp
21
+ - Tilbakeknapp vises alltid dersom kun `<a>` er barn av `<nav>`
22
+ - Tilbakeknapp vises kun på mobil dersom `<a>` og `<ol>` er barn av `<nav>`
23
+
24
+ <Canvas of={stories.WithBackbutton} />
25
+
26
+ ## Størrelser
27
+ - Bruk `data-size="sm | md | lg"`
28
+
29
+ <Canvas of={stories.Sizes} />
30
+
31
+ ## Uten lenker
32
+ - Bruk `<div>` istedenfor `<nav>` og `<span>` istedenfor `<a>`
33
+
34
+ <Canvas of={stories.WithoutLinks} />
35
+
36
+ <CssVariables component="breadcrumbs" />
@@ -0,0 +1,158 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import { Breadcrumbs } from "../react";
3
+ import styles from "../styles.module.css";
4
+
5
+ const meta = {
6
+ title: "Designsystem/Breadcrumbs",
7
+ decorators: [
8
+ (Story) => (
9
+ <div className={styles.grid}>
10
+ <Story />
11
+ </div>
12
+ ),
13
+ ],
14
+ } satisfies Meta;
15
+
16
+ export default meta;
17
+ type Story = StoryObj<typeof meta>;
18
+
19
+ export const Default: Story = {
20
+ render: () => (
21
+ <ds-breadcrumbs className={styles.breadcrumbs} aria-label="Du er her:">
22
+ <a href="#none" aria-label="Tilbake til Nivå 3">
23
+ Nivå 3
24
+ </a>
25
+ <ol>
26
+ <li>
27
+ <a href="#none">Nivå 1</a>
28
+ </li>
29
+ <li>
30
+ <a href="#none">Nivå 2</a>
31
+ </li>
32
+ <li>
33
+ <a href="#none">Nivå 3</a>
34
+ </li>
35
+ <li>
36
+ <a href="#none">Nivå 4</a>
37
+ </li>
38
+ </ol>
39
+ </ds-breadcrumbs>
40
+ ),
41
+ };
42
+
43
+ export const React: Story = {
44
+ render: () => (
45
+ <Breadcrumbs aria-label="Du er her:">
46
+ <a href="#none" aria-label="Tilbake til Nivå 3">
47
+ Nivå 3
48
+ </a>
49
+ <ol>
50
+ <li>
51
+ <a href="#none">Nivå 1</a>
52
+ </li>
53
+ <li>
54
+ <a href="#none">Nivå 2</a>
55
+ </li>
56
+ <li>
57
+ <a href="#none">Nivå 3</a>
58
+ </li>
59
+ <li>
60
+ <a href="#none">Nivå 4</a>
61
+ </li>
62
+ </ol>
63
+ </Breadcrumbs>
64
+ ),
65
+ };
66
+
67
+ export const WithBackbutton: Story = {
68
+ render: () => (
69
+ <>
70
+ Tilbakeknapp på både mobil og desktop:
71
+ <ds-breadcrumbs className={styles.breadcrumbs} aria-label="Du er her:">
72
+ <a href="#none" aria-label="Tilbake til Nivå 3">
73
+ Nivå 3
74
+ </a>
75
+ </ds-breadcrumbs>
76
+ <br />
77
+ Tilbakeknapp på kun mobil:
78
+ <ds-breadcrumbs className={styles.breadcrumbs} aria-label="Du er her:">
79
+ <a href="#none" aria-label="Tilbake til Nivå 3">
80
+ Nivå 3
81
+ </a>
82
+ <ol>
83
+ <li>
84
+ <a href="#none">Nivå 1</a>
85
+ </li>
86
+ <li>
87
+ <a href="#none">Nivå 2</a>
88
+ </li>
89
+ <li>
90
+ <a href="#none">Nivå 3</a>
91
+ </li>
92
+ <li>
93
+ <a href="#none">Nivå 4</a>
94
+ </li>
95
+ </ol>
96
+ </ds-breadcrumbs>
97
+ <br />
98
+ Ingen tilbakeknapp:
99
+ <ds-breadcrumbs className={styles.breadcrumbs} aria-label="Du er her:">
100
+ <ol>
101
+ <li>
102
+ <a href="#none">Nivå 1</a>
103
+ </li>
104
+ <li>
105
+ <a href="#none">
106
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit
107
+ </a>
108
+ </li>
109
+ <li>
110
+ <a href="#none">Nivå 3</a>
111
+ </li>
112
+ <li>
113
+ <a href="#none">Nivå 4</a>
114
+ </li>
115
+ </ol>
116
+ </ds-breadcrumbs>
117
+ </>
118
+ ),
119
+ };
120
+
121
+ export const Sizes: Story = {
122
+ render: () => (
123
+ <>
124
+ <ds-breadcrumbs className={styles.breadcrumbs} data-size="sm">
125
+ <a href="#none" aria-label="Tilbake til Nivå 3">
126
+ Nivå 3
127
+ </a>
128
+ <ol>
129
+ <li>
130
+ <a href="#none">Nivå 1</a>
131
+ </li>
132
+ <li>
133
+ <a href="#none">Nivå 2</a>
134
+ </li>
135
+ <li>
136
+ <a href="#none">Nivå 3</a>
137
+ </li>
138
+ <li>
139
+ <a href="#none">Nivå 4</a>
140
+ </li>
141
+ </ol>
142
+ </ds-breadcrumbs>
143
+ </>
144
+ ),
145
+ };
146
+
147
+ export const WithoutLinks: Story = {
148
+ render: () => (
149
+ <ds-breadcrumbs className={styles.breadcrumbs} aria-label="Du er her:">
150
+ <ol>
151
+ <li>Nivå 1</li>
152
+ <li>Nivå 2</li>
153
+ <li>Lorem ipsum dolor sit amet, consectetur adipiscing elit</li>
154
+ <li>Nivå 4</li>
155
+ </ol>
156
+ </ds-breadcrumbs>
157
+ ),
158
+ };
@@ -0,0 +1,179 @@
1
+ import { Meta, Canvas } from '@storybook/addon-docs/blocks';
2
+ import { Example, CssVariables } from '../../.storybook/blocks';
3
+ import { HeartIcon, StarIcon } from '@phosphor-icons/react';
4
+ import { Flex } from '../react';
5
+ import * as stories from './button.stories';
6
+ import styles from '../styles.module.css';
7
+ import { Alert } from '../react';
8
+
9
+ <Meta of={stories} />
10
+
11
+ # Button
12
+
13
+ > Knapper lar brukeren utføre en handling.
14
+
15
+ ## Kode
16
+ - Legg klassen `button` på typisk `<button>` eller `<a>`
17
+ - Husk `type="button"` hvis en `<button>` gjør noe annet enn å sende skjema
18
+ - Bruk `data-variant="primary | secondary | tertiary"`
19
+ - **Merk:** `data-variant="tertiary"` er default siden dette benyttes mest, men for å sikre god universell utforming må knappen da inneholde enten ikon og tekst, eller plasseres ved andre knapper.
20
+ - **Next.js og lenke?** Bruk `<Button as={Link} to={url}>` for å hvor `Link` hentes fra Next.js.
21
+ <Alert data-color="warning">
22
+ **Viktig:** Dersom en knapp innholder personopplysninger, for eksempel navn, må du sette `data-analytics-name=""` for å unngå personopplysninger i analyse-logger
23
+ </Alert>
24
+ <Canvas of={stories.Default} />
25
+
26
+ ## Skikk og bruk
27
+
28
+ <Flex data-items="350">
29
+ {/* Viser knapp med lange navn: */}
30
+ <Example data-color="success" text="Bruk korte beskrivende navn på knapper" zoom="100%">
31
+ <button type="button" className={styles.button} data-variant="primary">Lagre</button>
32
+ </Example>
33
+ <Example data-color="danger" text="Lange tekster og flere handlinger på samme knapp bør unngås." zoom="100%">
34
+ <button type="button" className={styles.button} data-variant="primary">Lagre og send inn skjemaet</button>
35
+ </Example>
36
+
37
+ {/* Viser tertiærknapp som står alene: */}
38
+ <Example data-color="success" text="Tertiærknapp bør alltid stå sammen med en primærknapp eller sekundærknapp, eller inneholde ikon" zoom="100%">
39
+ <div className={styles.flex}>
40
+ <button type="button" className={styles.button} data-variant="secondary">Lagre</button>
41
+ <button type="button" className={styles.button} data-variant="tertiary">Avbryt</button>
42
+ </div>
43
+ </Example>
44
+ <Example data-color="danger" text="Unngå å bruke tertiærknapp alene. Vurdér å bruke en sekundærknapp istedenfor eller legg til et ikon" zoom="100%">
45
+ <button type="button" className={styles.button} data-variant="tertiary">Avbryt</button>
46
+ </Example>
47
+
48
+ {/* Viser tertiærknapp med ikon: */}
49
+ <Example data-color="success" text="Tertiærknapp alene kan brukes med et ikon" zoom="100%">
50
+ <button type="button" className={styles.button} data-variant="tertiary"><StarIcon />Favoritt</button>
51
+ </Example>
52
+ <Example data-color="danger" text="Tertiærknapp alene bør brukes med et ikon" zoom="100%">
53
+ <button type="button" className={styles.button} data-variant="tertiary">Favoritt</button>
54
+ </Example>
55
+
56
+ {/* Viser knapp med konsistent størrelse: */}
57
+ <Example data-color="success" text="Bruk konsistente størrelser på knapper" zoom="100%">
58
+ <div className={styles.flex}>
59
+ <button type="button" className={styles.button} data-variant="primary">Lagre</button>
60
+ <button type="button" className={styles.button} data-variant="tertiary">Avbryt</button>
61
+ </div>
62
+ </Example>
63
+ <Example data-color="danger" text="Unngå ulike størrelser på knapper" zoom="100%">
64
+ <div className={styles.flex}>
65
+ <button type="button" className={styles.button} data-variant="primary" data-size='sm'>Lagre</button>
66
+ <button type="button" className={styles.button} data-variant="secondary" data-size='lg'>Avbryt</button>
67
+ </div>
68
+ </Example>
69
+
70
+ {/* Viser knapp med bare ikon: */}
71
+ <Example data-color="success" text="Button kan brukes med bare ikon. Da må den ha en beskrivende tooltip" zoom="100%">
72
+ <button type="button" className={styles.button} data-variant="tertiary" data-tooltip="Hjelpetekst"><StarIcon /></button>
73
+ </Example>
74
+ <Example data-color="danger" text="Når button bare inneholder et ikon skal den ha en beskrivende tooltip " zoom="100%">
75
+ <button type="button" className={styles.button} data-variant="tertiary"><StarIcon /></button>
76
+ </Example>
77
+
78
+ {/* Samme fargevariant i en gruppe: */}
79
+ <Example data-color="success" text="Buttons skal ha samme fargestil innenfor en gruppe" zoom="100%">
80
+ <div className={styles.flex}>
81
+ <button type="button" className={styles.button} data-variant="primary">Lagre</button>
82
+ <button type="button" className={styles.button} data-variant="tertiary">Avbryt</button>
83
+ </div>
84
+ </Example>
85
+ <Example data-color="danger" text="Unngå å blande fargestil på knapper i samme gruppe" zoom="100%">
86
+ <div className={styles.flex}>
87
+ <button type="button" className={styles.button} data-variant="primary" data-color='danger'>Lagre</button>
88
+ <button type="button" className={styles.button} data-variant="tertiary" data-color='info'>Avbryt</button>
89
+ </div>
90
+ </Example>
91
+
92
+ {/* Stor forbokstav: */}
93
+ <Example data-color="success" text="Bruk stor forbokstav og resten små (sentence case) for best mulig lesbarhet" zoom="100%">
94
+ <button type="button" className={styles.button} data-variant="primary">Send søknad</button>
95
+ </Example>
96
+ <Example data-color="danger" text="Ikke bruk store bokstaver eller en blanding av små og store bokstaver i en knapp" zoom="100%">
97
+ <div className={styles.prose}>
98
+ <button type="button" className={styles.button} data-variant="primary">SEND SØKNAD</button>
99
+ <button type="button" className={styles.button} data-variant="primary">Send Søknad</button>
100
+ <button type="button" className={styles.button} data-variant="primary">send søknad</button>
101
+ </div>
102
+ </Example>
103
+
104
+ {/* Kun én call to action: */}
105
+ <Example data-color="success" text="En side skal bare ha én call to action-button" zoom="100%">
106
+ <div className={styles.button}>
107
+ <button type="button" className={styles.button} data-variant="primary">Ferdig</button>
108
+ <button type="button" className={styles.button} data-variant="secondary">Avbryt</button>
109
+ </div>
110
+ </Example>
111
+ <Example data-color="danger" text="Aldri bruk flere call to action-knapper sammen" zoom="100%">
112
+ <div className={styles.button}>
113
+ <button type="button" className={styles.button} data-variant="primary">Ferdig</button>
114
+ <button type="button" className={styles.button} data-variant="primary">Avbryt</button>
115
+ </div>
116
+ </Example>
117
+
118
+ </Flex>
119
+
120
+ ## Størrelser
121
+ - Bruk `data-size="sm | md | lg"`
122
+ <Canvas of={stories.Sizes} />
123
+
124
+ ## Farger
125
+ - Bruk `data-color="danger"` for å få rød knapp
126
+ <Canvas of={stories.Colors} />
127
+
128
+ ## Innhold på en linje
129
+ - Bruk `<span data-nowrap>` rundt tekst dersom du ønsker å tvinge tekst til en linje
130
+ <Canvas of={stories.Nowrap} />
131
+
132
+ ## Innholdsplassering
133
+ - Bruk `data-justify="start | center | end"` (`center` er default når *ikke* i `<menu>`)
134
+ <Canvas of={stories.Justify} />
135
+
136
+ ## Pil og popover
137
+ - Legg på `data-arrow` (høyrestilt) eller `data-arrow="left | right"`
138
+ - Lasteindikator vil erstatte pil dersom disse kombineres
139
+ - Kombiner `popovertarget` + `data-arrow` for chevron
140
+ <Canvas of={stories.WithArrows} />
141
+
142
+ ## Ikoner
143
+ - [Ikon fra phosphoricons.com](https://phosphoricons.com/) kan legges før eller etter tekst
144
+ <Canvas of={stories.WithIcons} />
145
+
146
+ ## Spinner
147
+ - For `<button>`: Legg på `<button aria-busy="true" disabled`
148
+ - For `<a>`: Legg på `<a aria-busy="true" tabindex="-1"`
149
+ - Lasteindikator vil erstatte pil dersom disse kombineres
150
+ <Canvas of={stories.WithSpinner} />
151
+
152
+ ## Full bredde
153
+ - Bruk `data-self="full"`
154
+ <Canvas of={stories.WithFullWidth} />
155
+
156
+ ## Handlingsmeny
157
+ - Bruk `aria-label="Knappetekst her"` i stedet for innhold
158
+ - Da får du automatisk ikon for handlingsmeny <svg aria-hidden="ture" width="1em" height="1em" viewBox="0 0 256 256"><rect width="256" height="256" fill="none"/><circle cx="128" cy="128" r="16"/><circle cx="60" cy="128" r="16"/><circle cx="196" cy="128" r="16"/></svg>
159
+
160
+ <Canvas of={stories.WithMenu} />
161
+
162
+ ## Pressed
163
+ - Bruk `<button>` med `aria-pressed="true"`
164
+ - Du kan vise/skjule innhold ved bruke attributten `data-pressed="true | false"` på barn
165
+ - **Merk:** Dersom neste element er `popover`, vil `data-pressed="true | false"` også fungere
166
+ <Canvas of={stories.Pressed} />
167
+
168
+ ## Tooltip
169
+ - Bruk `data-tooltip="Hjelpetekst"`
170
+ - Bruk `data-tooltip-position="top | right | bottom | left"` for å endre plassering
171
+ - Teksten blir også automatisk tilgjengelig for skjermlesere
172
+ <Canvas of={stories.WithTooltip} />
173
+
174
+ ## I meny
175
+ - Legger du `button` i `<menu><li>` vil knappene ha samme bredde og venstrestilt tekst
176
+ - Ved bruk av `aria-pressed="true"` (for `button`) eller `aria-current="page"` (for lenke) indikeres aktivt valg i menyen
177
+ <Canvas of={stories.InMenu} />
178
+
179
+ <CssVariables component="button" />