@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.
- package/mtds/ai/AGENTS.md +892 -0
- package/mtds/ai/alert.mdx +63 -0
- package/mtds/ai/alert.stories.tsx +128 -0
- package/mtds/ai/analytics.mdx +185 -0
- package/mtds/ai/app.mdx +60 -0
- package/mtds/ai/app.stories.tsx +897 -0
- package/mtds/ai/atlas.mdx +82 -0
- package/mtds/ai/atlas.stories.tsx +424 -0
- package/mtds/ai/avatar.mdx +45 -0
- package/mtds/ai/avatar.stories.tsx +109 -0
- package/mtds/ai/badge.mdx +70 -0
- package/mtds/ai/badge.stories.tsx +122 -0
- package/mtds/ai/breadcrumbs.mdx +36 -0
- package/mtds/ai/breadcrumbs.stories.tsx +158 -0
- package/mtds/ai/button.mdx +179 -0
- package/mtds/ai/button.stories.tsx +440 -0
- package/mtds/ai/card.mdx +51 -0
- package/mtds/ai/card.stories.tsx +469 -0
- package/mtds/ai/chart.mdx +67 -0
- package/mtds/ai/chart.stories.tsx +519 -0
- package/mtds/ai/chip.mdx +71 -0
- package/mtds/ai/chip.stories.tsx +211 -0
- package/mtds/ai/details.mdx +33 -0
- package/mtds/ai/details.stories.tsx +91 -0
- package/mtds/ai/dialog.mdx +38 -0
- package/mtds/ai/dialog.stories.tsx +373 -0
- package/mtds/ai/divider.mdx +19 -0
- package/mtds/ai/divider.stories.tsx +50 -0
- package/mtds/ai/errorsummary.mdx +26 -0
- package/mtds/ai/errorsummary.stories.tsx +137 -0
- package/mtds/ai/field.mdx +86 -0
- package/mtds/ai/field.stories.tsx +863 -0
- package/mtds/ai/fieldset.mdx +126 -0
- package/mtds/ai/fieldset.stories.tsx +298 -0
- package/mtds/ai/fileupload.mdx +16 -0
- package/mtds/ai/fileupload.stories.tsx +126 -0
- package/mtds/ai/helptext.mdx +24 -0
- package/mtds/ai/helptext.stories.tsx +106 -0
- package/mtds/ai/input.mdx +223 -0
- package/mtds/ai/input.stories.tsx +352 -0
- package/mtds/ai/law.mdx +115 -0
- package/mtds/ai/law.stories.tsx +168 -0
- package/mtds/ai/layout.mdx +145 -0
- package/mtds/ai/layout.stories.tsx +443 -0
- package/mtds/ai/link.mdx +45 -0
- package/mtds/ai/link.stories.tsx +44 -0
- package/mtds/ai/logo.mdx +86 -0
- package/mtds/ai/logo.stories.tsx +146 -0
- package/mtds/ai/pagination.mdx +136 -0
- package/mtds/ai/pagination.stories.tsx +404 -0
- package/mtds/ai/popover.mdx +86 -0
- package/mtds/ai/popover.stories.tsx +355 -0
- package/mtds/ai/print.mdx +96 -0
- package/mtds/ai/print.stories.tsx +839 -0
- package/mtds/ai/progress.mdx +41 -0
- package/mtds/ai/progress.stories.tsx +141 -0
- package/mtds/ai/skeleton.mdx +26 -0
- package/mtds/ai/skeleton.stories.tsx +131 -0
- package/mtds/ai/spinner.mdx +26 -0
- package/mtds/ai/spinner.stories.tsx +72 -0
- package/mtds/ai/steps.mdx +37 -0
- package/mtds/ai/steps.stories.tsx +568 -0
- package/mtds/ai/table.mdx +124 -0
- package/mtds/ai/table.stories.tsx +1715 -0
- package/mtds/ai/tabs.mdx +106 -0
- package/mtds/ai/tabs.stories.tsx +159 -0
- package/mtds/ai/tag.mdx +49 -0
- package/mtds/ai/tag.stories.tsx +111 -0
- package/mtds/ai/toast.mdx +67 -0
- package/mtds/ai/toast.stories.tsx +215 -0
- package/mtds/ai/togglegroup.mdx +75 -0
- package/mtds/ai/togglegroup.stories.tsx +96 -0
- package/mtds/ai/tooltip.mdx +32 -0
- package/mtds/ai/tooltip.stories.tsx +34 -0
- package/mtds/ai/typography.mdx +67 -0
- package/mtds/ai/typography.stories.tsx +798 -0
- package/mtds/ai/validation.mdx +19 -0
- package/mtds/ai/validation.stories.tsx +45 -0
- package/mtds/app/app-observer.js +1 -1
- package/mtds/app/app-toggle.js +26 -10
- package/mtds/app/app-toggle.js.map +1 -1
- package/mtds/app/app-toggle2.js +10 -26
- package/mtds/app/app-toggle2.js.map +1 -1
- package/mtds/app/app.js +1 -1
- package/mtds/atlas/atlas-element.js +1 -1
- package/mtds/breadcrumbs/breadcrumbs.d.ts +1 -1
- package/mtds/breadcrumbs/breadcrumbs.js.map +1 -1
- package/mtds/chart/chart-lines.js +19 -19
- package/mtds/chart/chart-lines.js.map +1 -1
- package/mtds/chart/chart.css.js +16 -1
- package/mtds/chart/chart.css.js.map +1 -1
- package/mtds/chart/chart.stories.d.ts +1 -0
- package/mtds/deprecations.js +6 -5
- package/mtds/deprecations.js.map +1 -1
- package/mtds/errorsummary/errorsummary.d.ts +1 -1
- package/mtds/errorsummary/errorsummary.js.map +1 -1
- package/mtds/field/field.d.ts +1 -1
- package/mtds/field/field.js.map +1 -1
- package/mtds/index.d.ts +1 -2
- package/mtds/index.iife.js +29 -18
- package/mtds/index.js +32 -37
- package/mtds/index.js.map +1 -1
- package/mtds/package.json.js +1 -1
- package/mtds/pagination/pagination.d.ts +1 -1
- package/mtds/pagination/pagination.js +9 -8
- package/mtds/pagination/pagination.js.map +1 -1
- package/mtds/styles.css +1 -1
- package/mtds/styles.json +23 -23
- package/mtds/styles.module.css.js +33 -33
- package/mtds/table/table-observer.js +26 -15
- package/mtds/table/table-observer.js.map +1 -1
- package/mtds/tabs/tabs.d.ts +1 -1
- package/mtds/tabs/tabs.js.map +1 -1
- package/mtds/tailwind.css +0 -1
- package/mtds/tooltip/tooltip-element.js +7 -6
- package/mtds/tooltip/tooltip-element.js.map +1 -1
- package/package.json +8 -6
- package/mtds/external/@u-elements/u-datalist/dist/u-datalist.js +0 -238
- package/mtds/external/@u-elements/u-datalist/dist/u-datalist.js.map +0 -1
- package/mtds/external/@u-elements/u-details/dist/u-details.js +0 -101
- package/mtds/external/@u-elements/u-details/dist/u-details.js.map +0 -1
- package/mtds/external/@u-elements/u-tabs/dist/u-tabs.js +0 -235
- 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" />
|