@fremtind/jokul 4.6.1 → 4.7.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 (113) hide show
  1. package/build/build-stats.html +1 -1
  2. package/build/cjs/components/expander/Expander.cjs +1 -1
  3. package/build/cjs/components/expander/Expander.cjs.map +1 -1
  4. package/build/cjs/components/popover/Popover.cjs +1 -1
  5. package/build/cjs/components/popover/Popover.cjs.map +1 -1
  6. package/build/cjs/components/popover/types.d.cts +8 -1
  7. package/build/cjs/components/select/Select.cjs +1 -1
  8. package/build/cjs/components/select/Select.cjs.map +1 -1
  9. package/build/cjs/components/system-message/types.d.cts +7 -2
  10. package/build/cjs/components/typography/Text.cjs +2 -0
  11. package/build/cjs/components/typography/Text.cjs.map +1 -0
  12. package/build/cjs/components/typography/Text.d.cts +5 -0
  13. package/build/cjs/components/typography/Title.cjs +2 -0
  14. package/build/cjs/components/typography/Title.cjs.map +1 -0
  15. package/build/cjs/components/typography/Title.d.cts +5 -0
  16. package/build/cjs/components/typography/index.cjs +2 -0
  17. package/build/cjs/components/typography/index.cjs.map +1 -0
  18. package/build/cjs/components/typography/index.d.cts +3 -0
  19. package/build/cjs/components/typography/types.cjs +2 -0
  20. package/build/cjs/components/typography/types.cjs.map +1 -0
  21. package/build/cjs/components/typography/types.d.cts +48 -0
  22. package/build/cjs/hooks/useListNavigation/useListNavigation.cjs +1 -1
  23. package/build/cjs/hooks/useListNavigation/useListNavigation.cjs.map +1 -1
  24. package/build/cjs/hooks/useListNavigation/useListNavigation.d.cts +11 -2
  25. package/build/es/components/datepicker/DatePicker.js +1 -1
  26. package/build/es/components/datepicker/internal/Calendar.js +1 -1
  27. package/build/es/components/datepicker/internal/useCalendar.js +1 -1
  28. package/build/es/components/datepicker/internal/utils.js +1 -1
  29. package/build/es/components/expander/Expander.js +1 -1
  30. package/build/es/components/expander/Expander.js.map +1 -1
  31. package/build/es/components/menu/Menu.js +1 -1
  32. package/build/es/components/popover/Popover.js +1 -1
  33. package/build/es/components/popover/Popover.js.map +1 -1
  34. package/build/es/components/popover/types.d.ts +8 -1
  35. package/build/es/components/select/Select.js +1 -1
  36. package/build/es/components/select/Select.js.map +1 -1
  37. package/build/es/components/system-message/types.d.ts +7 -2
  38. package/build/es/components/toast/toastContext.js +1 -1
  39. package/build/es/components/tooltip/Tooltip.js +1 -1
  40. package/build/es/components/typography/Text.d.ts +5 -0
  41. package/build/es/components/typography/Text.js +2 -0
  42. package/build/es/components/typography/Text.js.map +1 -0
  43. package/build/es/components/typography/Title.d.ts +5 -0
  44. package/build/es/components/typography/Title.js +2 -0
  45. package/build/es/components/typography/Title.js.map +1 -0
  46. package/build/es/components/typography/index.d.ts +3 -0
  47. package/build/es/components/typography/index.js +2 -0
  48. package/build/es/components/typography/index.js.map +1 -0
  49. package/build/es/components/typography/types.d.ts +48 -0
  50. package/build/es/components/typography/types.js +2 -0
  51. package/build/es/components/typography/types.js.map +1 -0
  52. package/build/es/hooks/stories/content.js +1 -1
  53. package/build/es/hooks/useListNavigation/useListNavigation.d.ts +11 -2
  54. package/build/es/hooks/useListNavigation/useListNavigation.js +1 -1
  55. package/build/es/hooks/useListNavigation/useListNavigation.js.map +1 -1
  56. package/build/es/index.js +1 -1
  57. package/build/es/utilities/constants/index.js +1 -1
  58. package/build/es/utilities/constants/unicode.js +1 -1
  59. package/build/es/utilities/formatters/bytes/formatBytes.js +1 -1
  60. package/build/es/utilities/formatters/fodselsnummer/formatFodselsnummer.js +1 -1
  61. package/build/es/utilities/formatters/kontonummer/formatKontonummer.js +1 -1
  62. package/build/es/utilities/formatters/kortnummer/formatKortnummer.js +1 -1
  63. package/build/es/utilities/formatters/organisasjonsnummer/formatOrganisasjonsnummer.js +1 -1
  64. package/build/es/utilities/formatters/telefonnummer/formatTelefonnummer.js +1 -1
  65. package/build/es/utilities/formatters/valuta/formatValuta.js +1 -1
  66. package/build/es/utilities/index.js +1 -1
  67. package/build/{index-CWRMnfcx.js → index-C1iqmqvT.js} +2 -2
  68. package/build/{index-CWRMnfcx.js.map → index-C1iqmqvT.js.map} +1 -1
  69. package/build/{utils-CcE6HjQp.js → utils-CtwpNW4I.js} +2 -2
  70. package/build/{utils-CcE6HjQp.js.map → utils-CtwpNW4I.js.map} +1 -1
  71. package/package.json +18 -4
  72. package/styles/components/countdown/countdown.css +2 -2
  73. package/styles/components/countdown/countdown.min.css +1 -1
  74. package/styles/components/expander/expandable.css +12 -10
  75. package/styles/components/expander/expandable.min.css +1 -1
  76. package/styles/components/expander/expandable.scss +15 -12
  77. package/styles/components/feedback/feedback.css +2 -2
  78. package/styles/components/feedback/feedback.min.css +1 -1
  79. package/styles/components/file-input/file-input.css +9 -9
  80. package/styles/components/file-input/file-input.min.css +1 -1
  81. package/styles/components/input-group/input-group.css +2 -2
  82. package/styles/components/input-group/input-group.min.css +1 -1
  83. package/styles/components/loader/loader.css +6 -6
  84. package/styles/components/loader/loader.min.css +1 -1
  85. package/styles/components/loader/skeleton-loader.css +3 -3
  86. package/styles/components/loader/skeleton-loader.min.css +1 -1
  87. package/styles/components/message/message.css +2 -2
  88. package/styles/components/message/message.min.css +1 -1
  89. package/styles/components/progress-bar/progress-bar.css +1 -1
  90. package/styles/components/progress-bar/progress-bar.min.css +1 -1
  91. package/styles/components/segmented-control/segmented-control.css +2 -2
  92. package/styles/components/segmented-control/segmented-control.min.css +1 -1
  93. package/styles/components/select/select.css +63 -14
  94. package/styles/components/select/select.min.css +1 -1
  95. package/styles/components/select/select.scss +120 -22
  96. package/styles/components/system-message/system-message.css +7 -16
  97. package/styles/components/system-message/system-message.min.css +1 -1
  98. package/styles/components/system-message/system-message.scss +2 -10
  99. package/styles/components/toast/toast.css +4 -4
  100. package/styles/components/toast/toast.min.css +1 -1
  101. package/styles/components/typography/_index.scss +2 -0
  102. package/styles/components/typography/text.css +52 -0
  103. package/styles/components/typography/text.min.css +1 -0
  104. package/styles/components/typography/text.scss +55 -0
  105. package/styles/components/typography/title.css +70 -0
  106. package/styles/components/typography/title.min.css +1 -0
  107. package/styles/components/typography/title.scss +58 -0
  108. package/styles/core/core.css +1 -1
  109. package/styles/core/core.min.css +1 -1
  110. package/styles/core/utility/_paragraphs.scss +11 -1
  111. package/styles/styles.css +220 -62
  112. package/styles/styles.min.css +2 -2
  113. package/styles/styles.scss +1 -0
@@ -141,17 +141,18 @@
141
141
  }
142
142
 
143
143
  &__options-menu {
144
- position: absolute;
145
- left: jkl.rem(-1px);
146
- right: jkl.rem(-1px);
147
- top: 100%;
148
- z-index: jkl.$z-index--dropdown;
149
-
150
144
  background-color: var(--jkl-color-background-container-high);
151
145
  border: jkl.rem(2px) solid var(--jkl-color-border-input-focus);
152
- border-top: none;
153
- border-radius: 0 0 var(--border-radius) var(--border-radius);
154
146
  box-sizing: border-box;
147
+ // Strekker seg ut over kantene på trigger-knappen for å dekke
148
+ // den 1px brede borderen, slik at listen visuelt henger sammen
149
+ // med inputfeltet.
150
+ margin-inline: jkl.rem(-1px);
151
+ width: calc(100% + #{jkl.rem(2px)});
152
+ // Definerer egne tokens her fordi listen rendres i en portal og
153
+ // ikke arver kaskaderte custom properties fra `.jkl-select`.
154
+ --min-option-height: min(var(--jkl-unit-60), 3rem);
155
+ --option-padding: var(--jkl-unit-05) 0.75em;
155
156
 
156
157
  overflow-y: auto;
157
158
  // Sett makshøyde på listen til høyden av (maxShownOptions + 0.5) ganger høyden på ett enlinjes valg
@@ -160,9 +161,23 @@
160
161
  var(--min-option-height)
161
162
  );
162
163
 
163
- transition-property: height;
164
+ // Standard: lista ligger under triggeren — flat topp, runde
165
+ // bunnhjørner, ingen border på toppen som ville duplisert
166
+ // knappens border.
167
+ &[data-popover-placement="bottom"] {
168
+ border-top: none;
169
+ border-radius: 0 0 var(--jkl-border-radius-s)
170
+ var(--jkl-border-radius-s);
171
+ }
164
172
 
165
- @include jkl.motion;
173
+ // Når `flip` snur lista over knappen byttes flat side og runde
174
+ // hjørner, slik at lista og knappen fortsatt henger sammen
175
+ // visuelt.
176
+ &[data-popover-placement="top"] {
177
+ border-bottom: none;
178
+ border-radius: var(--jkl-border-radius-s)
179
+ var(--jkl-border-radius-s) 0 0;
180
+ }
166
181
  }
167
182
 
168
183
  &__option-wrapper {
@@ -218,8 +233,6 @@
218
233
  &--open {
219
234
  .jkl-select__search-input,
220
235
  .jkl-select__button {
221
- border-bottom-left-radius: 0;
222
- border-bottom-right-radius: 0;
223
236
  border-color: var(--jkl-color-border-input-focus);
224
237
  background-color: var(--jkl-color-background-container-high);
225
238
  box-shadow: 0 0 0 jkl.rem(1px)
@@ -229,6 +242,24 @@
229
242
  transform: translateY(calc(-50% + #{jkl.rem(-3px)}));
230
243
  }
231
244
  }
245
+
246
+ // Lista ligger under (default): flat bunn på input/knapp.
247
+ .jkl-select__outer-wrapper[data-popover-placement="bottom"] {
248
+ .jkl-select__search-input,
249
+ .jkl-select__button {
250
+ border-bottom-left-radius: 0;
251
+ border-bottom-right-radius: 0;
252
+ }
253
+ }
254
+
255
+ // Lista ligger over: flat topp på input/knapp.
256
+ .jkl-select__outer-wrapper[data-popover-placement="top"] {
257
+ .jkl-select__search-input,
258
+ .jkl-select__button {
259
+ border-top-left-radius: 0;
260
+ border-top-right-radius: 0;
261
+ }
262
+ }
232
263
  }
233
264
 
234
265
  &--invalid {
@@ -256,21 +287,88 @@
256
287
  border-color: Highlight;
257
288
  }
258
289
  }
290
+ }
291
+ }
259
292
 
260
- & .jkl-select__option {
261
- color: CanvasText;
293
+ // Options rendres i portal og er ikke descendants av `.jkl-select`,
294
+ // så forced-colors-reglene må stå på topp-nivå for å treffe dem.
295
+ @include jkl.forced-colors-mode {
296
+ .jkl-select__option {
297
+ color: CanvasText;
262
298
 
263
- border-top: 1px solid Canvas;
264
- border-bottom: 1px solid Canvas;
299
+ border-top: 1px solid Canvas;
300
+ border-bottom: 1px solid Canvas;
265
301
 
266
- &:hover,
267
- &:focus {
268
- border-top: 1px solid SelectedItem;
269
- border-bottom: 1px solid SelectedItem;
302
+ &:hover,
303
+ &:focus {
304
+ border-top: 1px solid SelectedItem;
305
+ border-bottom: 1px solid SelectedItem;
270
306
 
271
- @include jkl.no-grow-bold;
272
- }
307
+ @include jkl.no-grow-bold;
273
308
  }
274
309
  }
275
310
  }
311
+
312
+ // Listen rendres i en portal via `Popover`. Vi nøytraliserer Popover sin
313
+ // standard padding/bakgrunn/skygge slik at `.jkl-select__options-menu`
314
+ // selv styrer ramme og bakgrunn — også når Select brukes inne i en
315
+ // Card, ExpandablePanel eller andre containere med overflow-clip.
316
+ // Select skal følge samme lagdeling som andre dropdown-/menykomponenter
317
+ // (Combobox, Datepicker, Menu) og ikke arve Popover sitt floating-nivå.
318
+ .jkl-popover.jkl-select__popover {
319
+ background: none;
320
+ box-shadow: none;
321
+ border-radius: 0;
322
+ z-index: jkl.$z-index--dropdown;
323
+ }
324
+
325
+ // Mild fade + slide-in når lista mounter i portalen. Animeres på
326
+ // selve listbox-en — ikke på popover-wrapperen — fordi wrapperen
327
+ // bærer floating-ui sin posisjonerings-`transform`. Hadde vi animert
328
+ // wrapperen ville `translateY` overstyrt floating-ui's transform i
329
+ // animasjonsvinduet, og lista ville blinket i (0,0).
330
+ @media (prefers-reduced-motion: no-preference) {
331
+ .jkl-select__options-menu {
332
+ animation: jkl-select-options-menu-in
333
+ var(--jkl-motion-timing-snappy)
334
+ var(--jkl-motion-easing-standard);
335
+
336
+ // Når lista flippes opp animerer vi fra motsatt retning slik
337
+ // at bevegelsen alltid kommer fra triggeren.
338
+ &[data-popover-placement="top"] {
339
+ animation-name: jkl-select-options-menu-in-from-top;
340
+ }
341
+ }
342
+ }
343
+
344
+ @keyframes jkl-select-options-menu-in {
345
+ from {
346
+ opacity: 0;
347
+ transform: translateY(jkl.rem(-4px));
348
+ }
349
+ to {
350
+ opacity: 1;
351
+ transform: translateY(0);
352
+ }
353
+ }
354
+
355
+ @keyframes jkl-select-options-menu-in-from-top {
356
+ from {
357
+ opacity: 0;
358
+ transform: translateY(jkl.rem(4px));
359
+ }
360
+ to {
361
+ opacity: 1;
362
+ transform: translateY(0);
363
+ }
364
+ }
365
+
366
+ // Options rendres i en portal og er ikke lenger descendants av
367
+ // `.jkl-select`, så regelen `.jkl-select & *:focus-visible { outline:
368
+ // none }` treffer dem ikke. Vi gjenoppretter fokus-visualiseringen
369
+ // (background-color via &:focus) ved å eksplisitt fjerne den native
370
+ // outlinen på options i portalen.
371
+ .jkl-select__option:focus-visible {
372
+ outline: none;
373
+ }
276
374
  }
@@ -3,8 +3,6 @@
3
3
  */
4
4
  @layer jokul.components {
5
5
  .jkl-system-message {
6
- --jkl-system-message-icon-height: var(--jkl-unit-30);
7
- --jkl-system-message-icon-padding: 0.1875rem 0 0 0;
8
6
  --jkl-system-message-content-padding: var(--jkl-unit-30);
9
7
  --jkl-system-message-dismiss-button-size: var(--jkl-unit-40);
10
8
  --jkl-system-message-dismiss-button-margin: -0.40625rem -1.125rem -0.40625rem
@@ -19,19 +17,18 @@
19
17
  box-sizing: border-box;
20
18
  }
21
19
  .jkl-system-message__content {
20
+ font-size: var(--jkl-font-size-3);
21
+ line-height: var(--jkl-line-height-tight);
22
+ font-weight: 400;
23
+ --jkl-icon-weight: 300;
22
24
  box-sizing: border-box;
23
25
  padding: var(--jkl-system-message-content-padding);
24
26
  display: grid;
25
27
  grid-template-columns: min-content 1fr min-content;
26
- align-items: flex-start;
28
+ align-items: start;
27
29
  width: 100%;
28
30
  margin: 0 auto;
29
31
  }
30
- .jkl-system-message__icon {
31
- height: var(--jkl-system-message-icon-height);
32
- margin: var(--jkl-system-message-icon-padding);
33
- flex-shrink: 0;
34
- }
35
32
  @media screen and (forced-colors: active) {
36
33
  .jkl-system-message__icon {
37
34
  stroke: CanvasText;
@@ -41,10 +38,6 @@
41
38
  }
42
39
  }
43
40
  .jkl-system-message__message {
44
- font-size: var(--jkl-font-size-3);
45
- line-height: var(--jkl-line-height-tight);
46
- font-weight: 400;
47
- --jkl-icon-weight: 300;
48
41
  margin: var(--jkl-system-message-message-margin);
49
42
  }
50
43
  .jkl-system-message__dismiss-button {
@@ -54,8 +47,6 @@
54
47
  display: grid;
55
48
  place-content: center;
56
49
  position: relative;
57
- flex-shrink: 0;
58
- margin-top: 0.1875rem;
59
50
  color: inherit;
60
51
  }
61
52
  .jkl-system-message__dismiss-button::after {
@@ -126,7 +117,7 @@
126
117
  margin-bottom: 0;
127
118
  }
128
119
  .jkl-system-message--dismissed {
129
- animation: jkl-dismiss-u3q9pup 400ms forwards;
120
+ animation: jkl-dismiss-usgzp54 400ms forwards;
130
121
  transition: block 400ms 400ms;
131
122
  }
132
123
  .jkl-system-message--info {
@@ -156,7 +147,7 @@
156
147
  border-width: 4px;
157
148
  }
158
149
  }
159
- @keyframes jkl-dismiss-u3q9pup {
150
+ @keyframes jkl-dismiss-usgzp54 {
160
151
  from {
161
152
  opacity: 1;
162
153
  transform: translateY(0);
@@ -1 +1 @@
1
- @layer jokul.components{.jkl-system-message{--jkl-system-message-icon-height:var(--jkl-unit-30);--jkl-system-message-icon-padding:0.1875rem 0 0 0;--jkl-system-message-content-padding:var(--jkl-unit-30);--jkl-system-message-dismiss-button-size:var(--jkl-unit-40);--jkl-system-message-dismiss-button-margin:-0.40625rem -1.125rem -0.40625rem auto;--jkl-system-message-message-margin:0 var(--jkl-spacing-20);--background-color:var(--jkl-color-background-alert-neutral);--text-color:var(--jkl-color-text-on-alert);background-color:var(--background-color);box-sizing:border-box;color:var(--text-color);transition-behavior:allow-discrete;width:100%}.jkl-system-message__content{align-items:flex-start;box-sizing:border-box;display:grid;grid-template-columns:-webkit-min-content 1fr -webkit-min-content;grid-template-columns:min-content 1fr min-content;margin:0 auto;padding:var(--jkl-system-message-content-padding);width:100%}.jkl-system-message__icon{flex-shrink:0;height:var(--jkl-system-message-icon-height);margin:var(--jkl-system-message-icon-padding)}@media screen and (forced-colors:active){.jkl-system-message__icon,.jkl-system-message__icon path,.jkl-system-message__icon svg{stroke:CanvasText}}.jkl-system-message__message{font-size:var(--jkl-font-size-3);font-weight:400;line-height:var(--jkl-line-height-tight);--jkl-icon-weight:300;margin:var(--jkl-system-message-message-margin)}.jkl-system-message__dismiss-button{background-color:transparent;color:inherit;cursor:pointer;display:grid;flex-shrink:0;margin-top:.1875rem;padding:0;place-content:center;position:relative}.jkl-system-message__dismiss-button:after{content:"";display:block;height:var(--jkl-system-message-dismiss-button-size);left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:var(--jkl-system-message-dismiss-button-size)}@media screen and (forced-colors:active){.jkl-system-message__dismiss-button,.jkl-system-message__dismiss-button path,.jkl-system-message__dismiss-button svg{stroke:ButtonText}.jkl-system-message__dismiss-button{background-color:ButtonFace}}.jkl-system-message__dismiss-button{border-style:none;outline:0;outline-style:none}.jkl-system-message__dismiss-button:active,.jkl-system-message__dismiss-button:focus,.jkl-system-message__dismiss-button:hover{outline:0;outline-style:none}@media screen and (forced-colors:active){.jkl-system-message__dismiss-button{border-style:revert;outline:revert;outline-style:revert}.jkl-system-message__dismiss-button:active,.jkl-system-message__dismiss-button:focus,.jkl-system-message__dismiss-button:hover{outline:revert;outline-style:revert}}.jkl-system-message__dismiss-button:hover{color:var(--jkl-color-text-interactive-hover)}@media screen and (forced-colors:active){.jkl-system-message__dismiss-button:hover{stroke:ButtonText}.jkl-system-message__dismiss-button:hover path,.jkl-system-message__dismiss-button:hover svg{stroke:ButtonText}}.jkl-system-message__dismiss-button:focus-visible{outline:3px solid var(--jkl-color-border-action);outline-offset:3px}@media screen and (forced-colors:active){.jkl-system-message__dismiss-button:focus-visible{outline:2px solid ButtonText;outline-offset:2px}}.jkl-system-message__message,.jkl-system-message__message:last-child{margin-bottom:0}.jkl-system-message--dismissed{animation:jkl-dismiss-u3q9pup .4s forwards;transition:block .4s .4s}.jkl-system-message--info{--background-color:var(--jkl-color-background-alert-info)}.jkl-system-message--warning{--background-color:var(--jkl-color-background-alert-warning)}.jkl-system-message--error{--background-color:var(--jkl-color-background-alert-error)}.jkl-system-message--success{--background-color:var(--jkl-color-background-alert-success)}@media screen and (forced-colors:active){.jkl-system-message{border:2px solid CanvasText}.jkl-system-message--info{border-style:dotted}.jkl-system-message--warning{border-style:dashed}.jkl-system-message--error{border-style:double;border-width:4px}}@keyframes jkl-dismiss-u3q9pup{0%{display:block;filter:saturate(1);opacity:1;transform:translateY(0)}to{display:none;filter:saturate(.7);opacity:0;transform:translateY(-10%)}}}
1
+ @layer jokul.components{.jkl-system-message{--jkl-system-message-content-padding:var(--jkl-unit-30);--jkl-system-message-dismiss-button-size:var(--jkl-unit-40);--jkl-system-message-dismiss-button-margin:-0.40625rem -1.125rem -0.40625rem auto;--jkl-system-message-message-margin:0 var(--jkl-spacing-20);--background-color:var(--jkl-color-background-alert-neutral);--text-color:var(--jkl-color-text-on-alert);background-color:var(--background-color);box-sizing:border-box;color:var(--text-color);transition-behavior:allow-discrete;width:100%}.jkl-system-message__content{font-size:var(--jkl-font-size-3);font-weight:400;line-height:var(--jkl-line-height-tight);--jkl-icon-weight:300;align-items:start;box-sizing:border-box;display:grid;grid-template-columns:-webkit-min-content 1fr -webkit-min-content;grid-template-columns:min-content 1fr min-content;margin:0 auto;padding:var(--jkl-system-message-content-padding);width:100%}@media screen and (forced-colors:active){.jkl-system-message__icon,.jkl-system-message__icon path,.jkl-system-message__icon svg{stroke:CanvasText}}.jkl-system-message__message{margin:var(--jkl-system-message-message-margin)}.jkl-system-message__dismiss-button{background-color:transparent;color:inherit;cursor:pointer;display:grid;padding:0;place-content:center;position:relative}.jkl-system-message__dismiss-button:after{content:"";display:block;height:var(--jkl-system-message-dismiss-button-size);left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:var(--jkl-system-message-dismiss-button-size)}@media screen and (forced-colors:active){.jkl-system-message__dismiss-button,.jkl-system-message__dismiss-button path,.jkl-system-message__dismiss-button svg{stroke:ButtonText}.jkl-system-message__dismiss-button{background-color:ButtonFace}}.jkl-system-message__dismiss-button{border-style:none;outline:0;outline-style:none}.jkl-system-message__dismiss-button:active,.jkl-system-message__dismiss-button:focus,.jkl-system-message__dismiss-button:hover{outline:0;outline-style:none}@media screen and (forced-colors:active){.jkl-system-message__dismiss-button{border-style:revert;outline:revert;outline-style:revert}.jkl-system-message__dismiss-button:active,.jkl-system-message__dismiss-button:focus,.jkl-system-message__dismiss-button:hover{outline:revert;outline-style:revert}}.jkl-system-message__dismiss-button:hover{color:var(--jkl-color-text-interactive-hover)}@media screen and (forced-colors:active){.jkl-system-message__dismiss-button:hover{stroke:ButtonText}.jkl-system-message__dismiss-button:hover path,.jkl-system-message__dismiss-button:hover svg{stroke:ButtonText}}.jkl-system-message__dismiss-button:focus-visible{outline:3px solid var(--jkl-color-border-action);outline-offset:3px}@media screen and (forced-colors:active){.jkl-system-message__dismiss-button:focus-visible{outline:2px solid ButtonText;outline-offset:2px}}.jkl-system-message__message,.jkl-system-message__message:last-child{margin-bottom:0}.jkl-system-message--dismissed{animation:jkl-dismiss-usgzp54 .4s forwards;transition:block .4s .4s}.jkl-system-message--info{--background-color:var(--jkl-color-background-alert-info)}.jkl-system-message--warning{--background-color:var(--jkl-color-background-alert-warning)}.jkl-system-message--error{--background-color:var(--jkl-color-background-alert-error)}.jkl-system-message--success{--background-color:var(--jkl-color-background-alert-success)}@media screen and (forced-colors:active){.jkl-system-message{border:2px solid CanvasText}.jkl-system-message--info{border-style:dotted}.jkl-system-message--warning{border-style:dashed}.jkl-system-message--error{border-style:double;border-width:4px}}@keyframes jkl-dismiss-usgzp54{0%{display:block;filter:saturate(1);opacity:1;transform:translateY(0)}to{display:none;filter:saturate(.7);opacity:0;transform:translateY(-10%)}}}
@@ -8,8 +8,6 @@ $_dismiss-animation-duration: jkl.timing("lazy");
8
8
 
9
9
  @layer jokul.components {
10
10
  .jkl-system-message {
11
- --jkl-system-message-icon-height: var(--jkl-unit-30);
12
- --jkl-system-message-icon-padding: #{jkl.rem(3px)} 0 0 0;
13
11
  --jkl-system-message-content-padding: var(--jkl-unit-30);
14
12
  --jkl-system-message-dismiss-button-size: var(--jkl-unit-40);
15
13
  --jkl-system-message-dismiss-button-margin: -#{jkl.rem(
@@ -27,25 +25,21 @@ $_dismiss-animation-duration: jkl.timing("lazy");
27
25
  box-sizing: border-box;
28
26
 
29
27
  &__content {
28
+ @include jkl.text-style("text-medium");
30
29
  box-sizing: border-box;
31
30
  padding: var(--jkl-system-message-content-padding);
32
31
  display: grid;
33
32
  grid-template-columns: min-content 1fr min-content;
34
- align-items: flex-start;
33
+ align-items: start;
35
34
  width: 100%;
36
35
  margin: 0 auto;
37
36
  }
38
37
 
39
38
  &__icon {
40
- height: var(--jkl-system-message-icon-height);
41
- margin: var(--jkl-system-message-icon-padding);
42
- flex-shrink: 0;
43
-
44
39
  @include jkl.forced-colors-svg-fallback($stroke: CanvasText);
45
40
  }
46
41
 
47
42
  &__message {
48
- @include jkl.text-style("text-medium");
49
43
  margin: var(--jkl-system-message-message-margin);
50
44
  }
51
45
 
@@ -56,8 +50,6 @@ $_dismiss-animation-duration: jkl.timing("lazy");
56
50
  display: grid;
57
51
  place-content: center;
58
52
  position: relative;
59
- flex-shrink: 0;
60
- margin-top: jkl.rem(3px); // visual alignment with text
61
53
  color: inherit;
62
54
 
63
55
  // Sørg for å ha en stor nok touch target.
@@ -135,12 +135,12 @@
135
135
  }
136
136
  .jkl-toast[data-animation=entering],
137
137
  .jkl-toast[data-animation=queued] {
138
- animation: jkl-entering-ux5jwdd 200ms ease-out forwards;
138
+ animation: jkl-entering-u19c75a 200ms ease-out forwards;
139
139
  }
140
140
  .jkl-toast[data-animation=exiting] {
141
- animation: jkl-exiting-ux5jwdr 150ms ease-in forwards;
141
+ animation: jkl-exiting-u19c75h 150ms ease-in forwards;
142
142
  }
143
- @keyframes jkl-entering-ux5jwdd {
143
+ @keyframes jkl-entering-u19c75a {
144
144
  from {
145
145
  opacity: 0;
146
146
  transform: translate3d(0, 50%, 0);
@@ -150,7 +150,7 @@
150
150
  transform: translate3d(0, 0, 0);
151
151
  }
152
152
  }
153
- @keyframes jkl-exiting-ux5jwdr {
153
+ @keyframes jkl-exiting-u19c75h {
154
154
  from {
155
155
  opacity: 1;
156
156
  transform: translate3d(0, 0, 0);
@@ -1 +1 @@
1
- @layer jokul.components{.jkl-toast-region{background:transparent;bottom:var(--jkl-unit-30);display:flex;justify-content:center;left:0;pointer-events:none;position:fixed;right:0;width:100%;z-index:10000}.jkl-toast-region__toasts{align-items:center;display:flex;flex-direction:column;gap:var(--jkl-unit-20);min-width:18rem;pointer-events:auto}.jkl-toast-region--left{justify-content:flex-start;left:var(--jkl-unit-30)}.jkl-toast{--background-color:var(--jkl-color-background-container-high);--text-color:var(--jkl-color-text-default);--jkl-toast-padding:var(--jkl-unit-20);align-items:start;background-color:var(--background-color);border-radius:4px;box-sizing:border-box;color:var(--text-color);font-size:var(--jkl-font-size-3);font-weight:400;line-height:var(--jkl-line-height-relaxed);overflow:hidden;padding:var(--jkl-toast-padding);position:relative;width:clamp(15em,100%,min(30rem,85vw));--jkl-icon-weight:300}.jkl-toast__progress{--bar-color:var(--text-color);--track-color:transparent;border-radius:0;inset:0 0 auto;position:absolute}@media screen and (forced-colors:active){.jkl-toast__icon,.jkl-toast__icon path,.jkl-toast__icon svg{stroke:CanvasText}}.jkl-toast:not(:has(.jkl-toast__title)) .jkl-toast__icon{-webkit-margin-before:.0625rem;margin-block-start:.0625rem}.jkl-toast:has(.jkl-toast__title) .jkl-toast__icon{-webkit-margin-before:0;margin-block-start:0}.jkl-toast__content{flex-basis:100vw;flex-grow:1}.jkl-toast__action{margin-top:var(--jkl-unit-15)}.jkl-toast__title{font-size:var(--jkl-font-size-4);font-weight:700;line-height:var(--jkl-line-height-tight);--jkl-icon-weight:400}.jkl-toast__dismiss-button{background-color:transparent;color:inherit;cursor:pointer;padding:0}@media screen and (forced-colors:active){.jkl-toast__dismiss-button,.jkl-toast__dismiss-button path,.jkl-toast__dismiss-button svg{stroke:ButtonText}.jkl-toast__dismiss-button{background-color:ButtonFace}}.jkl-toast__dismiss-button:after{--tap-size:44px;content:"";inset:calc((var(--tap-size) - 100%)/2*-1);position:absolute}.jkl-toast--error,.jkl-toast--info,.jkl-toast--success,.jkl-toast--warning{--text-color:var(--jkl-color-text-on-alert)}.jkl-toast--info{--background-color:var(--jkl-color-background-alert-info)}.jkl-toast--warning{--background-color:var(--jkl-color-background-alert-warning)}.jkl-toast--error{--background-color:var(--jkl-color-background-alert-error)}.jkl-toast--success{--background-color:var(--jkl-color-background-alert-success)}@media screen and (forced-colors:active){.jkl-toast{border:2px solid CanvasText}.jkl-toast--info{border-style:dotted}.jkl-toast--warning{border-style:dashed}.jkl-toast--error{border-style:double;border-width:4px}}.jkl-toast[data-animation=entering],.jkl-toast[data-animation=queued]{animation:jkl-entering-ux5jwdd .2s ease-out forwards}.jkl-toast[data-animation=exiting]{animation:jkl-exiting-ux5jwdr .15s ease-in forwards}@keyframes jkl-entering-ux5jwdd{0%{opacity:0;transform:translate3d(0,50%,0)}to{opacity:1;transform:translateZ(0)}}@keyframes jkl-exiting-ux5jwdr{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,50%,0)}}}
1
+ @layer jokul.components{.jkl-toast-region{background:transparent;bottom:var(--jkl-unit-30);display:flex;justify-content:center;left:0;pointer-events:none;position:fixed;right:0;width:100%;z-index:10000}.jkl-toast-region__toasts{align-items:center;display:flex;flex-direction:column;gap:var(--jkl-unit-20);min-width:18rem;pointer-events:auto}.jkl-toast-region--left{justify-content:flex-start;left:var(--jkl-unit-30)}.jkl-toast{--background-color:var(--jkl-color-background-container-high);--text-color:var(--jkl-color-text-default);--jkl-toast-padding:var(--jkl-unit-20);align-items:start;background-color:var(--background-color);border-radius:4px;box-sizing:border-box;color:var(--text-color);font-size:var(--jkl-font-size-3);font-weight:400;line-height:var(--jkl-line-height-relaxed);overflow:hidden;padding:var(--jkl-toast-padding);position:relative;width:clamp(15em,100%,min(30rem,85vw));--jkl-icon-weight:300}.jkl-toast__progress{--bar-color:var(--text-color);--track-color:transparent;border-radius:0;inset:0 0 auto;position:absolute}@media screen and (forced-colors:active){.jkl-toast__icon,.jkl-toast__icon path,.jkl-toast__icon svg{stroke:CanvasText}}.jkl-toast:not(:has(.jkl-toast__title)) .jkl-toast__icon{-webkit-margin-before:.0625rem;margin-block-start:.0625rem}.jkl-toast:has(.jkl-toast__title) .jkl-toast__icon{-webkit-margin-before:0;margin-block-start:0}.jkl-toast__content{flex-basis:100vw;flex-grow:1}.jkl-toast__action{margin-top:var(--jkl-unit-15)}.jkl-toast__title{font-size:var(--jkl-font-size-4);font-weight:700;line-height:var(--jkl-line-height-tight);--jkl-icon-weight:400}.jkl-toast__dismiss-button{background-color:transparent;color:inherit;cursor:pointer;padding:0}@media screen and (forced-colors:active){.jkl-toast__dismiss-button,.jkl-toast__dismiss-button path,.jkl-toast__dismiss-button svg{stroke:ButtonText}.jkl-toast__dismiss-button{background-color:ButtonFace}}.jkl-toast__dismiss-button:after{--tap-size:44px;content:"";inset:calc((var(--tap-size) - 100%)/2*-1);position:absolute}.jkl-toast--error,.jkl-toast--info,.jkl-toast--success,.jkl-toast--warning{--text-color:var(--jkl-color-text-on-alert)}.jkl-toast--info{--background-color:var(--jkl-color-background-alert-info)}.jkl-toast--warning{--background-color:var(--jkl-color-background-alert-warning)}.jkl-toast--error{--background-color:var(--jkl-color-background-alert-error)}.jkl-toast--success{--background-color:var(--jkl-color-background-alert-success)}@media screen and (forced-colors:active){.jkl-toast{border:2px solid CanvasText}.jkl-toast--info{border-style:dotted}.jkl-toast--warning{border-style:dashed}.jkl-toast--error{border-style:double;border-width:4px}}.jkl-toast[data-animation=entering],.jkl-toast[data-animation=queued]{animation:jkl-entering-u19c75a .2s ease-out forwards}.jkl-toast[data-animation=exiting]{animation:jkl-exiting-u19c75h .15s ease-in forwards}@keyframes jkl-entering-u19c75a{0%{opacity:0;transform:translate3d(0,50%,0)}to{opacity:1;transform:translateZ(0)}}@keyframes jkl-exiting-u19c75h{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,50%,0)}}}
@@ -0,0 +1,2 @@
1
+ @forward "text";
2
+ @forward "title";
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Do not edit directly, this file was auto-generated.
3
+ */
4
+ @layer jokul.components {
5
+ :where(.jkl-text) {
6
+ font-weight: var(--jkl-typography-weight-normal);
7
+ line-height: var(--jkl-line-height-relaxed);
8
+ }
9
+ .jkl-text[data-text-size] {
10
+ margin-block: 0;
11
+ }
12
+ .jkl-text[data-text-size=xs] {
13
+ font-size: var(--jkl-font-size-1);
14
+ line-height: var(--jkl-line-height-tight);
15
+ font-weight: 400;
16
+ --jkl-icon-weight: 300;
17
+ }
18
+ .jkl-text[data-text-size=s] {
19
+ font-size: var(--jkl-font-size-2);
20
+ line-height: var(--jkl-line-height-relaxed);
21
+ font-weight: 400;
22
+ --jkl-icon-weight: 300;
23
+ --jkl-icon-size: 1.2em;
24
+ }
25
+ .jkl-text[data-text-size=m] {
26
+ font-size: var(--jkl-font-size-3);
27
+ line-height: var(--jkl-line-height-relaxed);
28
+ font-weight: 400;
29
+ --jkl-icon-weight: 300;
30
+ }
31
+ .jkl-text[data-text-size=l] {
32
+ font-size: var(--jkl-font-size-5);
33
+ line-height: var(--jkl-line-height-relaxed);
34
+ font-weight: 400;
35
+ --jkl-icon-weight: 300;
36
+ }
37
+ .jkl-text[data-bold],
38
+ strong.jkl-text[data-text-size] {
39
+ font-weight: var(--jkl-typography-weight-bold);
40
+ --jkl-icon-weight: 400;
41
+ }
42
+ .jkl-text[data-short] {
43
+ line-height: var(--jkl-line-height-tight);
44
+ }
45
+ :is(code, kbd, samp, var).jkl-text {
46
+ font-family: "Fremtind Grotesk Mono", "Adjusted Courier New Fallback", -apple-system, BlinkMacSystemFont, monospace;
47
+ }
48
+ label.jkl-text {
49
+ display: block;
50
+ margin-block-end: var(--jkl-spacing-8);
51
+ }
52
+ }
@@ -0,0 +1 @@
1
+ @layer jokul.components{:where(.jkl-text){font-weight:var(--jkl-typography-weight-normal);line-height:var(--jkl-line-height-relaxed)}.jkl-text[data-text-size]{margin-block:0}.jkl-text[data-text-size=xs]{font-size:var(--jkl-font-size-1);font-weight:400;line-height:var(--jkl-line-height-tight);--jkl-icon-weight:300}.jkl-text[data-text-size=s]{font-size:var(--jkl-font-size-2);font-weight:400;line-height:var(--jkl-line-height-relaxed);--jkl-icon-weight:300;--jkl-icon-size:1.2em}.jkl-text[data-text-size=m]{font-size:var(--jkl-font-size-3);font-weight:400;line-height:var(--jkl-line-height-relaxed);--jkl-icon-weight:300}.jkl-text[data-text-size=l]{font-size:var(--jkl-font-size-5);font-weight:400;line-height:var(--jkl-line-height-relaxed);--jkl-icon-weight:300}.jkl-text[data-bold],strong.jkl-text[data-text-size]{font-weight:var(--jkl-typography-weight-bold);--jkl-icon-weight:400}.jkl-text[data-short]{line-height:var(--jkl-line-height-tight)}:is(code,kbd,samp,var).jkl-text{font-family:Fremtind Grotesk Mono,Adjusted Courier New Fallback,-apple-system,BlinkMacSystemFont,monospace}label.jkl-text{display:block;-webkit-margin-after:var(--jkl-spacing-8);margin-block-end:var(--jkl-spacing-8)}}
@@ -0,0 +1,55 @@
1
+ @use "../../core/jkl";
2
+
3
+ // Hver `size` mapper til en komplett tekst-stil fra `$text-styles` i
4
+ // `core/jkl/_typography.scss` — både font-size, line-height, font-weight
5
+ // og ikon-variabler settes via `jkl.text-style`-mixinen.
6
+ $_size-styles: (
7
+ "xs": "text-micro",
8
+ "s": "paragraph-small",
9
+ "m": "paragraph-medium",
10
+ "l": "paragraph-large",
11
+ );
12
+
13
+ @layer jokul.components {
14
+ :where(.jkl-text) {
15
+ font-weight: var(--jkl-typography-weight-normal);
16
+ line-height: var(--jkl-line-height-relaxed);
17
+ }
18
+
19
+ // Scope margin-resetten til komponenten via `data-text-size` så vi ikke
20
+ // overstyrer margin på elementer som bare bruker `.jkl-text` som
21
+ // hjelpeklasse.
22
+ .jkl-text[data-text-size] {
23
+ margin-block: 0;
24
+ }
25
+
26
+ @each $name, $style in $_size-styles {
27
+ .jkl-text[data-text-size="#{$name}"] {
28
+ @include jkl.text-style($style);
29
+ }
30
+ }
31
+
32
+ // `bold` og `<strong>` skal sette både font-weight og ikon-weight
33
+ // (samme mønster som `.jkl-bold` og `.jkl strong`). Spesifisiteten må
34
+ // være lik eller høyere enn `.jkl-text[data-text-size="…"]` som ellers
35
+ // tvinger normal weight via `jkl.text-style`-mixinen.
36
+ .jkl-text[data-bold],
37
+ strong.jkl-text[data-text-size] {
38
+ font-weight: var(--jkl-typography-weight-bold);
39
+ --jkl-icon-weight: #{jkl.$icon-weight-bold};
40
+ }
41
+
42
+ .jkl-text[data-short] {
43
+ line-height: var(--jkl-line-height-tight);
44
+ }
45
+
46
+ :is(code, kbd, samp, var).jkl-text {
47
+ @include jkl.use-font-family("Fremtind Grotesk Mono");
48
+ }
49
+
50
+ // Labels er blokk-nivå og har bunnmarg til feltet de beskriver.
51
+ label.jkl-text {
52
+ display: block;
53
+ margin-block-end: var(--jkl-spacing-8);
54
+ }
55
+ }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Do not edit directly, this file was auto-generated.
3
+ */
4
+ @layer jokul.components {
5
+ :where(.jkl-title) {
6
+ font-weight: var(--jkl-typography-weight-normal);
7
+ line-height: var(--jkl-line-height-tight);
8
+ }
9
+ .jkl-title[data-text-size] {
10
+ margin-block: 0;
11
+ }
12
+ .jkl-title[data-text-size=xs],
13
+ .jkl-heading-xs {
14
+ font-size: var(--jkl-font-size-4);
15
+ line-height: var(--jkl-line-height-tight);
16
+ font-weight: 700;
17
+ --jkl-icon-weight: 400;
18
+ }
19
+ :where(.jkl-heading-xs) {
20
+ margin-block: 0;
21
+ }
22
+ .jkl-title[data-text-size=s],
23
+ .jkl-heading-s {
24
+ font-size: var(--jkl-font-size-5);
25
+ line-height: var(--jkl-line-height-tight);
26
+ font-weight: 700;
27
+ --jkl-icon-weight: 400;
28
+ }
29
+ :where(.jkl-heading-s) {
30
+ margin-block: 0;
31
+ }
32
+ .jkl-title[data-text-size=m],
33
+ .jkl-heading-m {
34
+ font-size: var(--jkl-font-size-6);
35
+ line-height: var(--jkl-line-height-tight);
36
+ font-weight: 700;
37
+ --jkl-icon-weight: 400;
38
+ }
39
+ :where(.jkl-heading-m) {
40
+ margin-block: 0;
41
+ }
42
+ .jkl-title[data-text-size=l],
43
+ .jkl-heading-l {
44
+ font-size: var(--jkl-font-size-7);
45
+ line-height: var(--jkl-line-height-tight);
46
+ font-weight: 400;
47
+ --jkl-icon-weight: 300;
48
+ }
49
+ :where(.jkl-heading-l) {
50
+ margin-block: 0;
51
+ }
52
+ .jkl-title[data-text-size=xl],
53
+ .jkl-heading-xl {
54
+ font-size: var(--jkl-font-size-8);
55
+ line-height: var(--jkl-line-height-tight);
56
+ font-weight: 400;
57
+ --jkl-icon-weight: 300;
58
+ }
59
+ :where(.jkl-heading-xl) {
60
+ margin-block: 0;
61
+ }
62
+ :is(label, legend).jkl-title[data-text-size] {
63
+ font-weight: var(--jkl-typography-weight-normal);
64
+ line-height: var(--jkl-line-height-relaxed);
65
+ }
66
+ label.jkl-title[data-text-size] {
67
+ display: block;
68
+ margin-block-end: var(--jkl-spacing-8);
69
+ }
70
+ }
@@ -0,0 +1 @@
1
+ @layer jokul.components{:where(.jkl-title){font-weight:var(--jkl-typography-weight-normal);line-height:var(--jkl-line-height-tight)}.jkl-title[data-text-size]{margin-block:0}.jkl-heading-xs,.jkl-title[data-text-size=xs]{font-size:var(--jkl-font-size-4);font-weight:700;line-height:var(--jkl-line-height-tight);--jkl-icon-weight:400}:where(.jkl-heading-xs){margin-block:0}.jkl-heading-s,.jkl-title[data-text-size=s]{font-size:var(--jkl-font-size-5);font-weight:700;line-height:var(--jkl-line-height-tight);--jkl-icon-weight:400}:where(.jkl-heading-s){margin-block:0}.jkl-heading-m,.jkl-title[data-text-size=m]{font-size:var(--jkl-font-size-6);font-weight:700;line-height:var(--jkl-line-height-tight);--jkl-icon-weight:400}:where(.jkl-heading-m){margin-block:0}.jkl-heading-l,.jkl-title[data-text-size=l]{font-size:var(--jkl-font-size-7);font-weight:400;line-height:var(--jkl-line-height-tight);--jkl-icon-weight:300}:where(.jkl-heading-l){margin-block:0}.jkl-heading-xl,.jkl-title[data-text-size=xl]{font-size:var(--jkl-font-size-8);font-weight:400;line-height:var(--jkl-line-height-tight);--jkl-icon-weight:300}:where(.jkl-heading-xl){margin-block:0}:is(label,legend).jkl-title[data-text-size]{font-weight:var(--jkl-typography-weight-normal);line-height:var(--jkl-line-height-relaxed)}label.jkl-title[data-text-size]{display:block;-webkit-margin-after:var(--jkl-spacing-8);margin-block-end:var(--jkl-spacing-8)}}
@@ -0,0 +1,58 @@
1
+ @use "../../core/jkl";
2
+
3
+ // Hver `size` mapper til en komplett tekst-stil fra `$text-styles` i
4
+ // `core/jkl/_typography.scss` — både font-size, line-height, font-weight
5
+ // og ikon-variabler settes via `jkl.text-style`-mixinen.
6
+ $_size-styles: (
7
+ "xs": "heading-5",
8
+ "s": "heading-4",
9
+ "m": "heading-3",
10
+ "l": "heading-2",
11
+ "xl": "heading-1",
12
+ );
13
+
14
+ @layer jokul.components {
15
+ :where(.jkl-title) {
16
+ font-weight: var(--jkl-typography-weight-normal);
17
+ line-height: var(--jkl-line-height-tight);
18
+ }
19
+
20
+ // Scope margin-resetten til komponenten via `data-text-size` så vi ikke
21
+ // overstyrer margin på elementer som bare bruker `.jkl-title` som
22
+ // hjelpeklasse.
23
+ .jkl-title[data-text-size] {
24
+ margin-block: 0;
25
+ }
26
+
27
+ // Genererer både komponent-regler og ekvivalente hjelpeklasser fra
28
+ // samme kilde slik at de ikke drifter fra hverandre.
29
+ // `.jkl-heading-<size>` tilsvarer `<Title size="<size>">` brukt på et
30
+ // vilkårlig element.
31
+ @each $name, $style in $_size-styles {
32
+ .jkl-title[data-text-size="#{$name}"],
33
+ .jkl-heading-#{$name} {
34
+ @include jkl.text-style($style);
35
+ }
36
+
37
+ :where(.jkl-heading-#{$name}) {
38
+ margin-block: 0;
39
+ }
40
+ }
41
+
42
+ // Skjema-elementer skal ikke arve heading sine fete font-weight og
43
+ // tight line-height. De er tekst som beskriver et skjemafelt eller en
44
+ // gruppe, ikke strukturelle overskrifter. Spesifisiteten må matche
45
+ // `.jkl-title[data-text-size="…"]` (0,2,0) for å overstyre den.
46
+ :is(label, legend).jkl-title[data-text-size] {
47
+ font-weight: var(--jkl-typography-weight-normal);
48
+ line-height: var(--jkl-line-height-relaxed);
49
+ }
50
+
51
+ // Labels er blokk-nivå og har bunnmarg til feltet de beskriver.
52
+ // Spesifisiteten her (0,2,1) overstyrer `.jkl-title[data-text-size]`
53
+ // som ellers nullstiller margin via `margin-block: 0`.
54
+ label.jkl-title[data-text-size] {
55
+ display: block;
56
+ margin-block-end: var(--jkl-spacing-8);
57
+ }
58
+ }
@@ -1138,7 +1138,7 @@
1138
1138
  --jkl-icon-weight: 300;
1139
1139
  --jkl-icon-size: 1.2em;
1140
1140
  }
1141
- .jkl-title {
1141
+ .jkl-title:not([data-text-size]) {
1142
1142
  font-size: var(--jkl-font-size-8);
1143
1143
  line-height: var(--jkl-line-height-tight);
1144
1144
  font-weight: 400;