@mattilsynet/design 3.2.8 → 3.3.0

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 (123) 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 +26 -10
  81. package/mtds/app/app-toggle.js.map +1 -1
  82. package/mtds/app/app-toggle2.js +10 -26
  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/breadcrumbs/breadcrumbs.d.ts +1 -1
  87. package/mtds/breadcrumbs/breadcrumbs.js.map +1 -1
  88. package/mtds/chart/chart-lines.js +19 -19
  89. package/mtds/chart/chart-lines.js.map +1 -1
  90. package/mtds/chart/chart.css.js +16 -1
  91. package/mtds/chart/chart.css.js.map +1 -1
  92. package/mtds/chart/chart.stories.d.ts +1 -0
  93. package/mtds/deprecations.js +6 -5
  94. package/mtds/deprecations.js.map +1 -1
  95. package/mtds/errorsummary/errorsummary.d.ts +1 -1
  96. package/mtds/errorsummary/errorsummary.js.map +1 -1
  97. package/mtds/field/field.d.ts +1 -1
  98. package/mtds/field/field.js.map +1 -1
  99. package/mtds/index.d.ts +1 -2
  100. package/mtds/index.iife.js +29 -18
  101. package/mtds/index.js +32 -37
  102. package/mtds/index.js.map +1 -1
  103. package/mtds/package.json.js +1 -1
  104. package/mtds/pagination/pagination.d.ts +1 -1
  105. package/mtds/pagination/pagination.js +9 -8
  106. package/mtds/pagination/pagination.js.map +1 -1
  107. package/mtds/styles.css +1 -1
  108. package/mtds/styles.json +23 -23
  109. package/mtds/styles.module.css.js +33 -33
  110. package/mtds/table/table-observer.js +26 -15
  111. package/mtds/table/table-observer.js.map +1 -1
  112. package/mtds/tabs/tabs.d.ts +1 -1
  113. package/mtds/tabs/tabs.js.map +1 -1
  114. package/mtds/tailwind.css +0 -1
  115. package/mtds/tooltip/tooltip-element.js +7 -6
  116. package/mtds/tooltip/tooltip-element.js.map +1 -1
  117. package/package.json +8 -6
  118. package/mtds/external/@u-elements/u-datalist/dist/u-datalist.js +0 -238
  119. package/mtds/external/@u-elements/u-datalist/dist/u-datalist.js.map +0 -1
  120. package/mtds/external/@u-elements/u-details/dist/u-details.js +0 -101
  121. package/mtds/external/@u-elements/u-details/dist/u-details.js.map +0 -1
  122. package/mtds/external/@u-elements/u-tabs/dist/u-tabs.js +0 -235
  123. package/mtds/external/@u-elements/u-tabs/dist/u-tabs.js.map +0 -1
@@ -0,0 +1,41 @@
1
+ import { Meta, Canvas } from '@storybook/addon-docs/blocks';
2
+ import { CssVariables } from '../../.storybook/blocks';
3
+ import * as stories from './progress.stories';
4
+ import { Details } from '../react';
5
+
6
+ <Meta of={stories} />
7
+
8
+ # Progress
9
+ > Indikerer status på en prosess. Den kan være definert med verdier fra start til slutt eller ubestemt. Progress går i loop når den er ubestemt.
10
+
11
+ ## Kode
12
+ - Legg klassen `progress` på `<u-progress>`
13
+ - Sett numerisk verdi i attributtene `value` og `max`
14
+
15
+ <Details>
16
+ <Details.Summary>Hva er `u-progress`?</Details.Summary>
17
+
18
+ [u-progress](https://u-elements.github.io/u-elements/elements/u-progress) er en del av prosjektet [u-elements](https://u-elements.github.io/u-elements)
19
+ som sikrer universell utforming. Dette lastes automatisk når du bruker `@mattilsynet/design`.
20
+ Du kan benytte native tilhørende [HTMLProgressElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLProgressElement) interface ved behov.
21
+ </Details>
22
+ <Canvas of={stories.Default} />
23
+
24
+ ## Størrelser
25
+ - Bruk `data-size="sm | md | lg"`
26
+ <Canvas of={stories.Sizes} />
27
+
28
+ ## Farger
29
+ - Bruk `data-size="main | neutral | success | info | warning | danger"`
30
+ <Canvas of={stories.Colors} />
31
+
32
+ ## Uten synlig label
33
+ - Bruk `aria-label` istedefor `<label>` for å visuelt skjult label
34
+ <Canvas of={stories.WithoutVisibleLabel} />
35
+
36
+ ## Ubestemt
37
+ - Uten `value` blir `progress` ubestemt
38
+ <Canvas of={stories.Indeterminate} />
39
+
40
+
41
+ <CssVariables component="progress" />
@@ -0,0 +1,141 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import { Progress } from "../react";
3
+ import styles from "../styles.module.css";
4
+ import "../index";
5
+
6
+ const meta = {
7
+ title: "Designsystem/Progress",
8
+ decorators: [
9
+ (Story) => (
10
+ <div className={styles.grid} style={{ width: "80vw", maxWidth: 200 }}>
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: () => (
22
+ <label>
23
+ Fremdrift
24
+ <u-progress class={styles.progress} value="33" max="100"></u-progress>
25
+ </label>
26
+ ),
27
+ };
28
+
29
+ export const Sizes: Story = {
30
+ render: () => (
31
+ <>
32
+ <label data-size="sm">
33
+ Small
34
+ <u-progress class={styles.progress} value="33" max="100"></u-progress>
35
+ </label>
36
+ <label data-size="md">
37
+ Medium
38
+ <u-progress class={styles.progress} value="33" max="100"></u-progress>
39
+ </label>
40
+ <label data-size="lg">
41
+ Large
42
+ <u-progress class={styles.progress} value="33" max="100"></u-progress>
43
+ </label>
44
+ </>
45
+ ),
46
+ };
47
+
48
+ export const Colors: Story = {
49
+ render: () => (
50
+ <>
51
+ <label>
52
+ Main
53
+ <u-progress
54
+ class={styles.progress}
55
+ value="33"
56
+ max="100"
57
+ data-color="main"
58
+ ></u-progress>
59
+ </label>
60
+ <label>
61
+ Neutral
62
+ <u-progress
63
+ class={styles.progress}
64
+ value="33"
65
+ max="100"
66
+ data-color="neutral"
67
+ ></u-progress>
68
+ </label>
69
+ <label>
70
+ Success
71
+ <u-progress
72
+ class={styles.progress}
73
+ value="33"
74
+ max="100"
75
+ data-color="success"
76
+ ></u-progress>
77
+ </label>
78
+ <label>
79
+ Info
80
+ <u-progress
81
+ class={styles.progress}
82
+ value="33"
83
+ max="100"
84
+ data-color="info"
85
+ ></u-progress>
86
+ </label>
87
+ <label>
88
+ Warning
89
+ <u-progress
90
+ class={styles.progress}
91
+ value="33"
92
+ max="100"
93
+ data-color="warning"
94
+ ></u-progress>
95
+ </label>
96
+ <label>
97
+ Danger
98
+ <u-progress
99
+ class={styles.progress}
100
+ value="33"
101
+ max="100"
102
+ data-color="danger"
103
+ ></u-progress>
104
+ </label>
105
+ </>
106
+ ),
107
+ };
108
+
109
+ export const React: Story = {
110
+ render: () => (
111
+ <>
112
+ <label>
113
+ Fremdrift
114
+ <Progress value="33" max="100" />
115
+ </label>
116
+ <label>
117
+ Ubestemt
118
+ <Progress />
119
+ </label>
120
+ </>
121
+ ),
122
+ };
123
+
124
+ export const WithoutVisibleLabel: Story = {
125
+ render: () => (
126
+ <u-progress
127
+ aria-label="Fremdrift"
128
+ class={styles.progress}
129
+ value="33"
130
+ max="100"
131
+ ></u-progress>
132
+ ),
133
+ };
134
+ export const Indeterminate: Story = {
135
+ render: () => (
136
+ <label>
137
+ Ubestemt
138
+ <u-progress class={styles.progress}></u-progress>
139
+ </label>
140
+ ),
141
+ };
@@ -0,0 +1,26 @@
1
+ import { Meta, Canvas } from '@storybook/addon-docs/blocks';
2
+ import { CssVariables } from '../../.storybook/blocks';
3
+ import * as stories from './skeleton.stories';
4
+
5
+ <Meta of={stories} />
6
+
7
+ # Skeleton
8
+ > Skeleton brukes til å gi brukeren en midlertidig visuell tilbakemelding mens innholdet lastes eller behandles. Den er en enkel og minimalistisk versjon av det faktiske innholdet som skal vises.
9
+
10
+ ## Kode
11
+ - Legg klassen `skeleton` på typisk `div` eller `span` (for tekst)
12
+ - Bruk `data-variant="rectangle | circle | text"`
13
+ - Bruk inline `style` for `width` og `height`
14
+ <Canvas of={stories.Default} />
15
+
16
+ ## Sirkel
17
+ - Bruk `data-variant="circle"`
18
+ - Bruk inline `style` for `width` - height er automatisk lik width
19
+ <Canvas of={stories.Circle} />
20
+
21
+ ## Tekst
22
+ - Bruk `data-variant="text"` på en `span`
23
+ - Innholdet bestemmer størrelsen på tekst-skeleton
24
+ <Canvas of={stories.Text} />
25
+
26
+ <CssVariables component="skeleton" />
@@ -0,0 +1,131 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import { Flex, Grid, Heading, Skeleton } from "../react";
3
+ import styles from "../styles.module.css";
4
+
5
+ const meta = {
6
+ title: "Designsystem/Skeleton",
7
+ } satisfies Meta;
8
+
9
+ export default meta;
10
+ type Story = StoryObj<typeof meta>;
11
+
12
+ export const Default: Story = {
13
+ render: () => (
14
+ <div className={styles.grid}>
15
+ <div className={styles.skeleton} style={{ height: 150 }} />
16
+ <div className={styles.flex} data-gap="4" data-align="center">
17
+ <div
18
+ className={styles.skeleton}
19
+ data-variant="circle"
20
+ style={{ width: 40 }}
21
+ />
22
+ <h2>
23
+ <div className={styles.skeleton} data-variant="text">
24
+ En medium tittel
25
+ </div>
26
+ </h2>
27
+ </div>
28
+ <p>
29
+ <span className={styles.skeleton} data-variant="text">
30
+ Cras vulputate et dolor vel aliquet. Aliquam convallis, dolor id
31
+ rhoncus lobortis, quam quam cursus nisl, consectetur accumsan ligula
32
+ velit eu nulla.
33
+ </span>
34
+ </p>
35
+ </div>
36
+ ),
37
+ };
38
+
39
+ export const React: Story = {
40
+ render: () => (
41
+ <Grid>
42
+ <Skeleton style={{ height: 150 }} />
43
+ <Flex data-gap="4" data-align="center">
44
+ <Skeleton data-variant="circle" style={{ width: 40 }}></Skeleton>
45
+ <Heading>
46
+ <Skeleton data-variant="text">En medium tittel</Skeleton>
47
+ </Heading>
48
+ </Flex>
49
+ <div>
50
+ <Skeleton data-variant="text">
51
+ Cras vulputate et dolor vel aliquet. Aliquam convallis, dolor id
52
+ rhoncus lobortis, quam quam cursus nisl, consectetur accumsan ligula
53
+ velit eu nulla.
54
+ </Skeleton>
55
+ </div>
56
+ </Grid>
57
+ ),
58
+ };
59
+
60
+ export const Circle: Story = {
61
+ render: () => (
62
+ <div
63
+ className={styles.skeleton}
64
+ data-variant="circle"
65
+ style={{ width: 50 }}
66
+ ></div>
67
+ ),
68
+ };
69
+
70
+ export const Text: Story = {
71
+ render: () => (
72
+ <div>
73
+ <span className={styles.skeleton} data-variant="text">
74
+ Cras vulputate et dolor vel aliquet. Aliquam convallis, dolor id rhoncus
75
+ lobortis, quam quam cursus nisl, consectetur accumsan ligula velit eu
76
+ nulla. Cras vulputate et dolor vel aliquet. Aliquam convallis, dolor id
77
+ rhoncus lobortis, quam quam cursus nisl, consectetur accumsan ligula
78
+ velit eu nulla.
79
+ </span>
80
+ </div>
81
+ ),
82
+ };
83
+
84
+ export const OnBackground: Story = {
85
+ render: () => (
86
+ <div
87
+ className={`${styles.grid} ${styles.body}`}
88
+ data-items="auto"
89
+ style={{ padding: 40 }}
90
+ >
91
+ <p className={styles.card}>
92
+ <span className={styles.skeleton} data-variant="text">
93
+ Cras vulputate et dolor vel aliquet. Aliquam convallis, dolor id
94
+ rhoncus lobortis, quam quam cursus nisl, consectetur accumsan ligula
95
+ velit eu nulla. Cras vulputate et dolor vel aliquet. Aliquam
96
+ convallis, dolor id rhoncus lobortis, quam quam cursus nisl,
97
+ consectetur accumsan ligula velit eu nulla.
98
+ </span>
99
+ </p>
100
+ <p
101
+ className={styles.card}
102
+ style={{
103
+ background: "var(--mtds-color-background-default)",
104
+ }}
105
+ >
106
+ <span className={styles.skeleton} data-variant="text">
107
+ Cras vulputate et dolor vel aliquet. Aliquam convallis, dolor id
108
+ rhoncus lobortis, quam quam cursus nisl, consectetur accumsan ligula
109
+ velit eu nulla. Cras vulputate et dolor vel aliquet. Aliquam
110
+ convallis, dolor id rhoncus lobortis, quam quam cursus nisl,
111
+ consectetur accumsan ligula velit eu nulla.
112
+ </span>
113
+ </p>
114
+ <p
115
+ className={styles.card}
116
+ style={{
117
+ border: 0,
118
+ background: "var(--mtds-color-background-tinted)",
119
+ }}
120
+ >
121
+ <span className={styles.skeleton} data-variant="text">
122
+ Cras vulputate et dolor vel aliquet. Aliquam convallis, dolor id
123
+ rhoncus lobortis, quam quam cursus nisl, consectetur accumsan ligula
124
+ velit eu nulla. Cras vulputate et dolor vel aliquet. Aliquam
125
+ convallis, dolor id rhoncus lobortis, quam quam cursus nisl,
126
+ consectetur accumsan ligula velit eu nulla.
127
+ </span>
128
+ </p>
129
+ </div>
130
+ ),
131
+ };
@@ -0,0 +1,26 @@
1
+ import { Meta, Canvas } from '@storybook/addon-docs/blocks';
2
+ import { CssVariables } from '../../.storybook/blocks';
3
+ import * as stories from './spinner.stories';
4
+
5
+ <Meta of={stories} />
6
+
7
+ # Spinner
8
+ > En spinner er et visuelt element som viser at noe laster eller er i gang.
9
+
10
+ ## Kode
11
+ - Bruk klassen `spinner` på typisk `<span>`
12
+ <Canvas of={stories.Default} />
13
+
14
+ ## Størrelser
15
+ - Bruk `data-size="xs | sm | md | lg"`
16
+ <Canvas of={stories.Sizes} />
17
+
18
+ ## Tekst
19
+ - Skriv tekst inni for dersom du ønsker
20
+ <Canvas of={stories.WithText} />
21
+
22
+ {/* ## Ferdig
23
+ - Legg på `data-state="complete"` for å få huke-animasjon
24
+ <Canvas of={stories.WithStateComplete} /> */}
25
+
26
+ <CssVariables component="spinner" />
@@ -0,0 +1,72 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import { useEffect, useState } from "react";
3
+ import { Button, Grid, Spinner } from "../react";
4
+ import styles from "../styles.module.css";
5
+
6
+ const meta = {
7
+ title: "Designsystem/Spinner",
8
+ decorators: [
9
+ (Story) => (
10
+ <div
11
+ className={styles.grid}
12
+ data-align="center"
13
+ data-items="100"
14
+ style={{ width: "max-content", minWidth: 250 }}
15
+ >
16
+ <Story />
17
+ </div>
18
+ ),
19
+ ],
20
+ } satisfies Meta;
21
+
22
+ export default meta;
23
+ type Story = StoryObj<typeof meta>;
24
+
25
+ export const Default: Story = {
26
+ render: () => <span className={styles.spinner}></span>,
27
+ };
28
+
29
+ export const React: Story = {
30
+ render: () => <Spinner />,
31
+ };
32
+
33
+ export const Sizes: Story = {
34
+ render: () => (
35
+ <>
36
+ xs: <span className={styles.spinner} data-size="xs"></span>
37
+ sm: <span className={styles.spinner} data-size="sm"></span>
38
+ md: <span className={styles.spinner} data-size="md"></span>
39
+ lg: <span className={styles.spinner} data-size="lg"></span>
40
+ </>
41
+ ),
42
+ };
43
+
44
+ export const WithText: Story = {
45
+ render: () => <span className={styles.spinner}>Henter innhold...</span>,
46
+ };
47
+
48
+ export const WithStateComplete: Story = {
49
+ tags: ["!dev"], // TODO
50
+ render: function Render() {
51
+ const [done, setDone] = useState(false);
52
+
53
+ useEffect(() => {
54
+ const spinner = document.querySelector(`.${styles.spinner}`);
55
+ const state = spinner?.getAttribute("data-state") || "loading";
56
+ spinner?.removeAttribute("data-state");
57
+ setTimeout(() => spinner?.setAttribute("data-state", state), 500);
58
+ });
59
+
60
+ return (
61
+ <Grid>
62
+ <span
63
+ className={styles.spinner}
64
+ data-state={done ? "complete" : undefined}
65
+ ></span>
66
+ <Button onClick={() => setDone(!done)}>
67
+ {done ? "Start lasting" : "Avslutt lasting"}
68
+ </Button>
69
+ </Grid>
70
+ );
71
+ },
72
+ };
@@ -0,0 +1,37 @@
1
+ import { Meta, Canvas } from '@storybook/addon-docs/blocks';
2
+ import { CssVariables } from '../../.storybook/blocks';
3
+ import { Tag } from '../react';
4
+ import * as stories from './steps.stories';
5
+
6
+ <Meta of={stories} />
7
+
8
+ # Steps
9
+ > Steps viser fremdrift i en flerstegsprosess. Den forteller brukeren hvor langt man har kommet i en sekvens av trinn. Komponenten kan også brukes til å presentere en tidlinje.
10
+
11
+ ## Kode
12
+ - Bruk klassen `steps` på `<ol>`
13
+ - Legg `<li>` elementer inni, med `<mark>` som barn av hver `<li>`
14
+ - Legg valgfritt til mer tekst etter `<mark>`
15
+ - Legg valgfritt ikon inni `<mark>` - dette erstatter standard ikon som følger fargene
16
+ - Bruk `aria-current="step"` på valgt `<li>`
17
+ - Bruk `data-color` for å endre farge på stegene
18
+ <Canvas of={stories.Default} />
19
+
20
+ ## Fullført
21
+ - Bruk `data-state="complete"` for å få avhuking på alle stegene
22
+ <Canvas of={stories.WithStateComplete} />
23
+
24
+ ## Retning
25
+ - Bruk `data-direction="right | down | up"` for å endre retningen på stegene
26
+ <Canvas of={stories.WithDirection} />
27
+
28
+ ## Tidslinje
29
+ - Steg kan også brukes som en tidslinje
30
+ - Dersom du ikke setter `aria-current="step"`, men heller bruker `data-color="main | success | warning | danger"`, du ikke få fylt strek mellom punktene
31
+ <Canvas of={stories.Timeline} />
32
+
33
+ ## Interaksjon
34
+ - Legg `<a>` eller `<button>` som direkte barn av `<li>` for å gjøre stegene interaktive
35
+ <Canvas of={stories.WithInteraction} />
36
+
37
+ <CssVariables component="steps" />