@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,86 @@
1
+ import { Meta, Canvas } from '@storybook/addon-docs/blocks';
2
+ import { Example, CssVariables, JumpTo } from '../../.storybook/blocks';
3
+ import * as stories from './popover.stories';
4
+ import { Flex, Prose } from '../react';
5
+ import styles from '../styles.module.css';
6
+
7
+ <Meta of={stories} />
8
+
9
+ # Popover
10
+ > Popover vises over andre elementer i grensesnittet og er koblet til et spesifikt element. Den brukes til å vise tilleggsinformasjon, interaktive elementer eller korte forklaringer uten å navigere bort fra siden. Popover kan brukes som en utvidet løsning når tooltip ikke strekker til.
11
+
12
+ <JumpTo />
13
+
14
+ ## Kode
15
+ - Legg klassen `popover`, attributten `popover` og `id` på `<div>` eller `<menu>`
16
+ - Legg `popovertarget="ID"` på typisk `<button>` som trigger element
17
+ - Plassiering vil automatisk tilpasse seg scroll og tilgjengelig plass
18
+
19
+ > **Merk:** I React 19 kan du skrive `popoverTarget` og `popoverTargetAction`. Eldre versjoner av React krever `popovertarget` og `popovertargetaction`
20
+
21
+ <Canvas of={stories.Default} />
22
+
23
+ ## Skikk og bruk
24
+ <Flex data-items="350">
25
+
26
+ {/* Lange tekster */}
27
+ <Example data-color="success" text="Innhold i popover bør være kort og konsist (trykk for å se)." zoom="100%">
28
+
29
+
30
+ Vi bruker{" "} <button popoverTarget="pop-inline-1" type="button" data-popover="inline">
31
+ design tokens </button>{" "} for å sikre at vi har en konsistent design.
32
+
33
+ <div popover="auto" id="pop-inline-1" className={styles.popover}> Design tokens er en samling av variabler som definerer designet i et
34
+ designsystem. </div>
35
+
36
+ </Example>
37
+
38
+ <Example data-color="danger" text="Unngå lange tekster i popover (trykk for å se)." zoom="100%">
39
+
40
+ Vi bruker{" "} <button popoverTarget="pop-inline-2" type="button" data-popover="inline">
41
+ design tokens </button>{" "} for å sikre at vi har en konsistent design.
42
+
43
+ <div popover="auto" id="pop-inline-2" className={styles.popover}> Design tokens er navngitte variabler (navn-verdi-par) som representerer grunnleggende designattributter som farger, typografi, mellomrom, skygger og animasjoner. De fungerer som et "enkelt kilde til sannhet" som kan brukes på tvers av ulike plattformer, teknologier og designverktøy for å opprettholde et enhetlig og konsistent utseende i digitale produkter. Ved å erstatte hardkodede verdier med tokens, kan design og kode holdes synkronisert, noe som forenkler vedlikehold og gir skalerbarhet for designsystemer. </div>
44
+
45
+ </Example>
46
+
47
+ </Flex>
48
+
49
+ ## Nedtrekksmeny / Dropdown
50
+ - Bruk `<menu>` med `<li><button type="button">` eller ` <li><a>` som barn
51
+ - Dersom du legger `<a>` inni en `popover`, vil den automatsk lukke popoveren på klikk, med mindre du setter `popovertargetaction="show"` eller kjører `event.preventDefault()` på `onClick`
52
+
53
+ <Canvas of={stories.Dropdown} />
54
+
55
+ ## Placement
56
+ - Bruk `data-placement="top | top-start | top-end | right | right-start | right-end | bottom | bottom-start | bottom-end | left | left-start | left-end"` for å plassere popoveren
57
+ - Popover vil alltid legge seg der det er plass i skjermbildet
58
+ <Canvas of={stories.Placement} />
59
+
60
+ ## Lukkeknapp
61
+ - Bruk `popovertargetaction="hide"` på `<button>` (eller `<a>` dersom du lager en SPA) for å lage lukkeknapp:
62
+ <Canvas of={stories.WithClose} />
63
+
64
+ ## Tekst inline
65
+ - Bruk `data-popover="inline"` på `<button>` for popover fra brødtekst:
66
+ <Canvas of={stories.WithTextInline} />
67
+
68
+
69
+
70
+ ## Pil
71
+ - Bruk `data-arrow` på `<button>` for å få ikon:
72
+ <Canvas of={stories.WithArrow} />
73
+
74
+ ## Egendefinert ikon
75
+ - Du kan vise/skjule innhold ved bruke attributten `data-pressed="true | false"` på barn:
76
+ <Canvas of={stories.WithIcon} />
77
+
78
+ ## Skillelinje
79
+ - Bruk `<li><hr />` i `<menu>` for å få skillelinje:
80
+ <Canvas of={stories.WithDivider} />
81
+
82
+ ## Scroll
83
+ - Bruk `data-overscroll="contain"` for å holde popover høyde innen skjermbildet:
84
+ <Canvas of={stories.WithOverscroll} />
85
+
86
+ <CssVariables component="popover" />
@@ -0,0 +1,355 @@
1
+ import { ListIcon, XIcon } from "@phosphor-icons/react";
2
+ import type { Meta, StoryObj } from "@storybook/react-vite";
3
+ import { useId } from "react";
4
+ import { Button, Field, Input, Popover } from "../react";
5
+ import styles from "../styles.module.css";
6
+
7
+ const meta = {
8
+ title: "Designsystem/Popover",
9
+ } satisfies Meta;
10
+
11
+ export default meta;
12
+ type Story = StoryObj<typeof meta>;
13
+
14
+ const range = Array.from(Array(10), (_, num) => num + 1);
15
+
16
+ export const Default: Story = {
17
+ render: function Render() {
18
+ const popId = useId();
19
+
20
+ return (
21
+ <>
22
+ <button
23
+ className={styles.button}
24
+ data-arrow
25
+ data-variant="secondary"
26
+ popoverTarget={popId}
27
+ type="button"
28
+ >
29
+ Knapp
30
+ </button>
31
+ <menu popover="auto" id={popId} className={styles.popover}>
32
+ {range.map((num) => (
33
+ <li key={num}>
34
+ <button
35
+ className={styles.button}
36
+ popoverTargetAction="hide"
37
+ type="button"
38
+ >
39
+ Knapp {num}
40
+ </button>
41
+ </li>
42
+ ))}
43
+ </menu>
44
+ </>
45
+ );
46
+ },
47
+ };
48
+
49
+ export const React: Story = {
50
+ render: function Render() {
51
+ const popId = useId();
52
+ const popInlineId = useId();
53
+ const popLabelId = useId();
54
+
55
+ return (
56
+ <>
57
+ <Button popoverTarget={popId} data-variant="secondary" data-arrow>
58
+ Knapp
59
+ </Button>
60
+ <Popover as="menu" id={popId}>
61
+ {range.map((num) => (
62
+ <li key={num}>
63
+ <Button>Knapp {num}</Button>
64
+ </li>
65
+ ))}
66
+ </Popover>
67
+ <br />
68
+ <p>
69
+ En{" "}
70
+ <button
71
+ type="button"
72
+ data-popover="inline"
73
+ popoverTarget={popInlineId}
74
+ >
75
+ popover i test
76
+ </button>
77
+ </p>
78
+ <Popover id={popInlineId}>Popover i tekst</Popover>
79
+ <br />
80
+ <Field>
81
+ <Field.Label>
82
+ Et{" "}
83
+ <button
84
+ type="button"
85
+ data-popover="inline"
86
+ popoverTarget={popLabelId}
87
+ >
88
+ vanskelig ord
89
+ </button>{" "}
90
+ i ledetekst
91
+ </Field.Label>
92
+ <Popover id={popLabelId}>
93
+ Legg popover elementet <i>etter</i> label elementet (ikke inni), for
94
+ å oppnå semantisk riktig HTML
95
+ </Popover>
96
+ <Input />
97
+ </Field>
98
+ </>
99
+ );
100
+ },
101
+ };
102
+
103
+ export const Dropdown: Story = {
104
+ render: function Render() {
105
+ const popId = useId();
106
+
107
+ return (
108
+ <>
109
+ <button
110
+ popoverTarget={popId}
111
+ type="button"
112
+ className={styles.button}
113
+ data-variant="secondary"
114
+ data-arrow
115
+ >
116
+ Knapp
117
+ </button>
118
+ <menu popover="auto" id={popId} className={styles.popover}>
119
+ <li>
120
+ <a href="#none" className={styles.button}>
121
+ Knapp 1
122
+ </a>
123
+ </li>
124
+ <li>
125
+ <a href="#none" className={styles.button}>
126
+ Knapp 2
127
+ </a>
128
+ </li>
129
+ <li>
130
+ <a
131
+ href="#none"
132
+ className={styles.button}
133
+ popoverTargetAction="show"
134
+ >
135
+ Knapp 3
136
+ </a>
137
+ </li>
138
+ </menu>
139
+ </>
140
+ );
141
+ },
142
+ };
143
+
144
+ export const Placement: Story = {
145
+ render: () => (
146
+ <>
147
+ <button
148
+ popoverTarget="pop-2"
149
+ type="button"
150
+ className={styles.button}
151
+ data-variant="primary"
152
+ >
153
+ Knapp
154
+ </button>
155
+ <div
156
+ className={styles.popover}
157
+ data-placement="top"
158
+ id="pop-2"
159
+ popover="auto"
160
+ >
161
+ <div className={styles.grid}>
162
+ <p>Er du sikker på at du vil avslutte uten å lagre?</p>
163
+ <div className={styles.flex}>
164
+ <button
165
+ type="button"
166
+ className={styles.button}
167
+ data-variant="primary"
168
+ >
169
+ Lagre
170
+ </button>
171
+ <button
172
+ popoverTarget="pop-2"
173
+ popoverTargetAction="hide"
174
+ type="button"
175
+ className={styles.button}
176
+ data-variant="secondary"
177
+ >
178
+ Avbryt
179
+ </button>
180
+ </div>
181
+ </div>
182
+ </div>
183
+ </>
184
+ ),
185
+ };
186
+
187
+ export const WithClose: Story = {
188
+ render: () => (
189
+ <>
190
+ <button
191
+ popoverTarget="pop-3"
192
+ type="button"
193
+ className={styles.button}
194
+ data-variant="primary"
195
+ >
196
+ Knapp
197
+ </button>
198
+ <div popover="auto" id="pop-3" className={styles.popover}>
199
+ <button
200
+ popoverTargetAction="hide"
201
+ type="button"
202
+ className={styles.button}
203
+ data-variant="secondary"
204
+ >
205
+ Lukk
206
+ </button>
207
+ </div>
208
+ </>
209
+ ),
210
+ };
211
+
212
+ export const WithTextInline: Story = {
213
+ parameters: { showInOverview: true },
214
+ render: () => (
215
+ <>
216
+ Vi bruker{" "}
217
+ <button popoverTarget="pop-inline" type="button" data-popover="inline">
218
+ design tokens
219
+ </button>{" "}
220
+ for å sikre at vi har en konsistent design.
221
+ <div popover="auto" id="pop-inline" className={styles.popover}>
222
+ Design tokens er en samling av variabler som definerer designet i et
223
+ designsystem.
224
+ </div>
225
+ <br />
226
+ <br />
227
+ <ds-field className={styles.field}>
228
+ <label>
229
+ Et{" "}
230
+ <button popoverTarget="pop-label" type="button" data-popover="inline">
231
+ vanskelig ord
232
+ </button>{" "}
233
+ i ledetekst
234
+ </label>
235
+ <div popover="auto" id="pop-label" className={styles.popover}>
236
+ Legg popover elementet <i>etter</i> label elementet (ikke inni), for å
237
+ oppnå semantisk riktig HTML
238
+ </div>
239
+ <input className={styles.input} />
240
+ </ds-field>
241
+ </>
242
+ ),
243
+ };
244
+
245
+ export const WithArrow: Story = {
246
+ render: () => (
247
+ <>
248
+ <button
249
+ className={styles.button}
250
+ data-arrow
251
+ popoverTarget="pop-4"
252
+ type="button"
253
+ >
254
+ Knapp
255
+ </button>
256
+ <div popover="auto" id="pop-4" className={styles.popover}>
257
+ Innhold
258
+ </div>
259
+ </>
260
+ ),
261
+ };
262
+
263
+ export const WithIcon: Story = {
264
+ render: () => (
265
+ <>
266
+ <button className={styles.button} popoverTarget="pop-icon" type="button">
267
+ Knapp
268
+ <ListIcon data-pressed="false" />
269
+ <XIcon data-pressed="true" />
270
+ </button>
271
+ <div popover="auto" id="pop-icon" className={styles.popover}>
272
+ Innhold
273
+ </div>
274
+ </>
275
+ ),
276
+ };
277
+
278
+ export const WithDivider: Story = {
279
+ render: function Render() {
280
+ const popId = useId();
281
+
282
+ return (
283
+ <>
284
+ <button
285
+ popoverTarget={popId}
286
+ type="button"
287
+ className={styles.button}
288
+ data-variant="secondary"
289
+ data-arrow
290
+ >
291
+ Knapp
292
+ </button>
293
+ <menu popover="auto" id={popId} className={styles.popover}>
294
+ <li>
295
+ <button type="button" className={styles.button}>
296
+ Knapp 1
297
+ </button>
298
+ </li>
299
+ <li>
300
+ <button type="button" className={styles.button}>
301
+ Knapp 2
302
+ </button>
303
+ </li>
304
+ <li>
305
+ <hr className={styles.divider} />
306
+ </li>
307
+ <li>
308
+ <button type="button" className={styles.button}>
309
+ Knapp 3
310
+ </button>
311
+ </li>
312
+ <li>
313
+ <button type="button" className={styles.button}>
314
+ Knapp 4
315
+ </button>
316
+ </li>
317
+ </menu>
318
+ </>
319
+ );
320
+ },
321
+ };
322
+
323
+ export const WithOverscroll: Story = {
324
+ render: function Render() {
325
+ const popId = useId();
326
+
327
+ return (
328
+ <>
329
+ <button
330
+ popoverTarget={popId}
331
+ type="button"
332
+ className={styles.button}
333
+ data-variant="secondary"
334
+ data-arrow
335
+ >
336
+ Overscroll
337
+ </button>
338
+ <menu
339
+ popover="auto"
340
+ id={popId}
341
+ className={styles.popover}
342
+ data-overscroll="contain"
343
+ >
344
+ {Array.from({ length: 20 }, (_, i) => i).map((num) => (
345
+ <li key={num}>
346
+ <button type="button" className={styles.button}>
347
+ Knapp {num + 1}
348
+ </button>
349
+ </li>
350
+ ))}
351
+ </menu>
352
+ </>
353
+ );
354
+ },
355
+ };
@@ -0,0 +1,96 @@
1
+ import { Meta, Canvas } from '@storybook/addon-docs/blocks';
2
+ import { Example, CssVariables, JumpTo } from '../../.storybook/blocks';
3
+ import * as stories from './print.stories';
4
+ import { Button } from '../react';
5
+ import styles from '../styles.module.css';
6
+
7
+ <Meta of={stories} />
8
+
9
+ # Print (Eksperimentell)
10
+ > Print brukes for å lage PDF eller utskriftsvennlige rapporter og dokumenter med Mattilsynets designprofil.
11
+ > I nettleser får du en A4-forhåndsvisning, og ved PDF/utskrift får du sidetall, bunnlinje og kontrollerte sideskift som unngår brudd i bilder, lister og tabeller.
12
+
13
+ <JumpTo />
14
+
15
+ ## Kode
16
+ - All HTML du lager, kan sendes til Mattilsynets [HTML-til-PDF-tjeneste](https://github.com/Mattilsynet/html-to-pdf)
17
+ - Koden legges automatisk i `<body>`, så du trenger ikke lage head, meta osv selv.
18
+ - Tjenesten bruker headless Chrome, så bruk Chromes print-preview ved lokal testing
19
+ - Alle bilder må inlines som `base64`-urler så de blir en del av HTML-strengen
20
+ - All CSS og fonter må også inlines, dette hjelper designsystemet med slik:
21
+
22
+ ```
23
+ // Import CSS as text if using Vite
24
+ import css from '@mattilsynet/design/styles.css?raw';
25
+
26
+ // ...or import css with pure Node:
27
+ import path from "node:path";
28
+ import fs from "node:fs";
29
+
30
+ const cssPath = path.resolve(process.cwd(), 'node_modules/@mattilsynet/design/mtds/styles.css');
31
+ const css = fs.readFileSync(cssPath, 'utf8');
32
+
33
+
34
+ <div id="my-print">
35
+ <style>
36
+ {css}
37
+ :root {
38
+ --mtdsc-print-office: 'ditt kontor'; /* Required */
39
+ --mtdsc-print-department: 'din avdeling'; /* Required */
40
+ --mtdsc-print-classification: none; /* Optional, remove to get "Unntatt offentlighet" */
41
+
42
+ --mtdsc-print-back-tagline: none; /* Optional, if using data-variant="back" */
43
+ --mtdsc-print-back-footer: none; /* Optional, if using data-variant="back" */
44
+ }
45
+ </style>
46
+ <section className="print">
47
+ innhold her
48
+ </section>
49
+ </div>
50
+ ```
51
+
52
+ ## Brevmal
53
+
54
+ - For å legge inn mottaker, lag en `<address>` og `<dl>` inne i en `<div>`:
55
+
56
+ ```
57
+ <div>
58
+ <address>
59
+ Eksempelstedet AS
60
+ <br />Uendeligveien 999
61
+ <br />0000 Sted
62
+ </address>
63
+ <dl>
64
+ <dt>Vår ref:</dt><dd>2004/12345</dd>
65
+ <dt>Dato:</dt><dd>01.01.2024</dd>
66
+ <dt>Org.nr:</dt><dd>123456789</dd>
67
+ </dl>
68
+ </div>
69
+ ```
70
+
71
+ <div className="sbdocs-canvas-thumbnail">
72
+ <Button data-arrow data-variant="primary" target="_blank" href="/iframe.html?globals=&id=designsystem-print--brevmal">Se brevmal i ny fane</Button>
73
+ <Canvas of={stories.Brevmal} />
74
+ </div>
75
+
76
+ ## Rapportmal
77
+ - Legg til en `<section className="print" data-variant="front">` for forside
78
+ - Legg til en `<section className="print" data-variant="back">` for bakside
79
+
80
+ <div className="sbdocs-canvas-thumbnail">
81
+ <Button data-arrow data-variant="primary" target="_blank" href="/iframe.html?globals=&id=designsystem-print--rapportmal">Se rapportmal i ny fane</Button>
82
+ <Canvas of={stories.Rapportmal} />
83
+ </div>
84
+
85
+ <CssVariables component='print' />
86
+
87
+ ## Vedtak
88
+ - Det finnes mye, godt utarbeidet materiale for hvordan vedtak skal utformes, og det er viktig at vi følger dette så langt det lar seg gjøre. [Se rapportkvalitet →](https://mattilsynet.sharepoint.com/:f:/r/sites/TVRTilsyn/Delte%20dokumenter/Rapportkvalitet/Oppl%C3%A6ring%20Nytt%20oppsett%20i%20MATS?csf=1&web=1&e=94K1gM)
89
+ - Designsystemet har foreløpig ingen spesifikke komponenter for vedtak, men har heller kodet opp et eksempel foreløpig.
90
+
91
+ <div className="sbdocs-canvas-thumbnail">
92
+ <Button data-arrow data-variant="primary" target="_blank" href="/iframe.html?globals=&id=designsystem-print--vedtak">Se vedtak i ny fane</Button>
93
+ <Canvas of={stories.Rapportmal} />
94
+ </div>
95
+
96
+ <CssVariables component='print' />