@fremtind/jokul 3.6.0 → 3.7.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 (271) hide show
  1. package/README.md +15 -2
  2. package/build/build-stats.html +1 -1
  3. package/build/cjs/components/menu/Menu.cjs +1 -1
  4. package/build/cjs/components/menu/Menu.cjs.map +1 -1
  5. package/build/cjs/components/text-input/BaseTextInput.cjs +1 -1
  6. package/build/cjs/components/text-input/BaseTextInput.cjs.map +1 -1
  7. package/build/cjs/core/tokens/style-dictionary/build.cjs +1 -1
  8. package/build/cjs/core/tokens/style-dictionary/build.cjs.map +1 -1
  9. package/build/cjs/core/tokens.cjs +1 -1
  10. package/build/cjs/core/tokens.cjs.map +1 -1
  11. package/build/cjs/core/tokens.d.cts +114 -0
  12. package/build/cjs/tailwind/plugins/jokulTypographyPlugin.cjs +1 -1
  13. package/build/cjs/tailwind/plugins/jokulTypographyPlugin.cjs.map +1 -1
  14. package/build/es/components/menu/Menu.js +1 -1
  15. package/build/es/components/menu/Menu.js.map +1 -1
  16. package/build/es/components/text-input/BaseTextInput.js +1 -1
  17. package/build/es/components/text-input/BaseTextInput.js.map +1 -1
  18. package/build/es/core/tokens/style-dictionary/build.js +1 -1
  19. package/build/es/core/tokens/style-dictionary/build.js.map +1 -1
  20. package/build/es/core/tokens.d.ts +114 -0
  21. package/build/es/core/tokens.js +1 -1
  22. package/build/es/core/tokens.js.map +1 -1
  23. package/build/es/tailwind/plugins/jokulTypographyPlugin.js +1 -1
  24. package/build/es/tailwind/plugins/jokulTypographyPlugin.js.map +1 -1
  25. package/package.json +4 -2
  26. package/styles/components/autosuggest/_index.scss +2 -0
  27. package/styles/components/autosuggest/autosuggest.scss +87 -0
  28. package/styles/components/breadcrumb/_index.scss +2 -0
  29. package/styles/components/breadcrumb/breadcrumb.scss +38 -0
  30. package/styles/components/button/_index.scss +2 -0
  31. package/styles/components/button/button.scss +169 -0
  32. package/styles/components/card/_index.scss +3 -0
  33. package/styles/components/card/card.scss +105 -0
  34. package/styles/components/checkbox/_index.scss +1 -0
  35. package/styles/components/checkbox/checkbox.css +4 -4
  36. package/styles/components/checkbox/checkbox.min.css +1 -1
  37. package/styles/components/checkbox/checkbox.scss +248 -0
  38. package/styles/components/checkbox-panel/_index.scss +1 -0
  39. package/styles/components/checkbox-panel/checkbox-panel.css +6 -6
  40. package/styles/components/checkbox-panel/checkbox-panel.min.css +1 -1
  41. package/styles/components/checkbox-panel/checkbox-panel.scss +95 -0
  42. package/styles/components/checkbox-panel/development/styles.scss +27 -0
  43. package/styles/components/chip/_index.scss +2 -0
  44. package/styles/components/chip/chip.scss +104 -0
  45. package/styles/components/combobox/_index.scss +6 -0
  46. package/styles/components/combobox/combobox.scss +238 -0
  47. package/styles/components/cookie-consent/_index.scss +5 -0
  48. package/styles/components/cookie-consent/cookie-consent.scss +31 -0
  49. package/styles/components/countdown/_index.scss +1 -0
  50. package/styles/components/countdown/countdown.css +2 -2
  51. package/styles/components/countdown/countdown.min.css +1 -1
  52. package/styles/components/countdown/countdown.scss +25 -0
  53. package/styles/components/datepicker/_calendar-date-button.scss +85 -0
  54. package/styles/components/datepicker/_calendar-navigation-dropdown.scss +52 -0
  55. package/styles/components/datepicker/_calendar-navigation.scss +12 -0
  56. package/styles/components/datepicker/_calendar-table.scss +27 -0
  57. package/styles/components/datepicker/_calendar.scss +36 -0
  58. package/styles/components/datepicker/_index.scss +6 -0
  59. package/styles/components/datepicker/datepicker.scss +47 -0
  60. package/styles/components/description-list/_index.scss +1 -0
  61. package/styles/components/description-list/description-list.scss +58 -0
  62. package/styles/components/expander/_index.scss +4 -0
  63. package/styles/components/expander/expandable.scss +141 -0
  64. package/styles/components/feedback/_index.scss +10 -0
  65. package/styles/components/feedback/feedback.css +2 -2
  66. package/styles/components/feedback/feedback.min.css +1 -1
  67. package/styles/components/feedback/feedback.scss +113 -0
  68. package/styles/components/file/_index.scss +3 -0
  69. package/styles/components/file/file.scss +164 -0
  70. package/styles/components/file-input/_index.scss +5 -0
  71. package/styles/components/file-input/file-input.css +9 -9
  72. package/styles/components/file-input/file-input.min.css +1 -1
  73. package/styles/components/file-input/file-input.scss +130 -0
  74. package/styles/components/flex/_index.scss +1 -0
  75. package/styles/components/flex/flex.scss +252 -0
  76. package/styles/components/help/_index.scss +2 -0
  77. package/styles/components/help/help.scss +47 -0
  78. package/styles/components/icon/_base-styles.scss +21 -0
  79. package/styles/components/icon/_index.scss +1 -0
  80. package/styles/components/icon/development/internal/icons-example-grid.scss +13 -0
  81. package/styles/components/icon/icon.scss +139 -0
  82. package/styles/components/icon-button/_index.scss +1 -0
  83. package/styles/components/icon-button/icon-button.scss +38 -0
  84. package/styles/components/image/_index.scss +1 -0
  85. package/styles/components/image/development/style.scss +9 -0
  86. package/styles/components/image/image.scss +37 -0
  87. package/styles/components/image/stories/styles.scss +9 -0
  88. package/styles/components/input-group/_field-group.scss +5 -0
  89. package/styles/components/input-group/_index.scss +3 -0
  90. package/styles/components/input-group/_labels.scss +159 -0
  91. package/styles/components/input-group/input-group.css +2 -2
  92. package/styles/components/input-group/input-group.min.css +1 -1
  93. package/styles/components/input-group/input-group.scss +11 -0
  94. package/styles/components/input-panel/input-panel.scss +84 -0
  95. package/styles/components/link/_index.scss +1 -0
  96. package/styles/components/link/link.scss +62 -0
  97. package/styles/components/link-list/_index.scss +2 -0
  98. package/styles/components/link-list/link-list.scss +94 -0
  99. package/styles/components/list/_index.scss +1 -0
  100. package/styles/components/list/list.scss +98 -0
  101. package/styles/components/loader/_index.scss +2 -0
  102. package/styles/components/loader/development/styles.scss +11 -0
  103. package/styles/components/loader/loader.css +6 -6
  104. package/styles/components/loader/loader.min.css +1 -1
  105. package/styles/components/loader/loader.scss +139 -0
  106. package/styles/components/loader/skeleton-loader.css +3 -3
  107. package/styles/components/loader/skeleton-loader.min.css +1 -1
  108. package/styles/components/loader/skeleton-loader.scss +137 -0
  109. package/styles/components/logo/_index.scss +1 -0
  110. package/styles/components/logo/development/styles.scss +9 -0
  111. package/styles/components/logo/logo.scss +90 -0
  112. package/styles/components/menu/_index.scss +1 -0
  113. package/styles/components/menu/_menu-divider.scss +10 -0
  114. package/styles/components/menu/_menu-item.scss +71 -0
  115. package/styles/components/menu/menu.scss +40 -0
  116. package/styles/components/message/_index.scss +2 -0
  117. package/styles/components/message/message.css +2 -2
  118. package/styles/components/message/message.min.css +1 -1
  119. package/styles/components/message/message.scss +187 -0
  120. package/styles/components/modal/_index.scss +3 -0
  121. package/styles/components/modal/modal.scss +107 -0
  122. package/styles/components/nav-link/_index.scss +1 -0
  123. package/styles/components/nav-link/nav-link.scss +66 -0
  124. package/styles/components/pagination/_index.scss +5 -0
  125. package/styles/components/pagination/development/styles.scss +35 -0
  126. package/styles/components/pagination/pagination.scss +49 -0
  127. package/styles/components/popover/_index.scss +1 -0
  128. package/styles/components/popover/popover.scss +19 -0
  129. package/styles/components/progress-bar/_index.scss +1 -0
  130. package/styles/components/progress-bar/progress-bar.css +1 -1
  131. package/styles/components/progress-bar/progress-bar.min.css +1 -1
  132. package/styles/components/progress-bar/progress-bar.scss +27 -0
  133. package/styles/components/radio-button/_index.scss +2 -0
  134. package/styles/components/radio-button/radio-button.css +2 -2
  135. package/styles/components/radio-button/radio-button.min.css +1 -1
  136. package/styles/components/radio-button/radio-button.scss +219 -0
  137. package/styles/components/radio-panel/_index.scss +1 -0
  138. package/styles/components/radio-panel/development/styles.scss +27 -0
  139. package/styles/components/radio-panel/radio-panel.css +2 -2
  140. package/styles/components/radio-panel/radio-panel.min.css +1 -1
  141. package/styles/components/radio-panel/radio-panel.scss +82 -0
  142. package/styles/components/segmented-control/_index.scss +3 -0
  143. package/styles/components/segmented-control/segmented-control.css +4 -4
  144. package/styles/components/segmented-control/segmented-control.min.css +1 -1
  145. package/styles/components/segmented-control/segmented-control.scss +99 -0
  146. package/styles/components/select/_index.scss +3 -0
  147. package/styles/components/select/select.scss +299 -0
  148. package/styles/components/summary-table/_index.scss +1 -0
  149. package/styles/components/summary-table/development/summary-table-example.scss +10 -0
  150. package/styles/components/summary-table/summary-table.scss +49 -0
  151. package/styles/components/system-message/_index.scss +2 -0
  152. package/styles/components/system-message/system-message.css +2 -2
  153. package/styles/components/system-message/system-message.min.css +1 -1
  154. package/styles/components/system-message/system-message.scss +177 -0
  155. package/styles/components/table/_index.scss +6 -0
  156. package/styles/components/table/_table-caption.scss +7 -0
  157. package/styles/components/table/_table-cell.scss +90 -0
  158. package/styles/components/table/_table-head.scss +36 -0
  159. package/styles/components/table/_table-header.scss +65 -0
  160. package/styles/components/table/_table-pagination.scss +126 -0
  161. package/styles/components/table/_table-row.scss +177 -0
  162. package/styles/components/table/table.css +4 -0
  163. package/styles/components/table/table.min.css +1 -1
  164. package/styles/components/table/table.scss +53 -0
  165. package/styles/components/table-of-contents/_index.scss +1 -0
  166. package/styles/components/tabs/_index.scss +1 -0
  167. package/styles/components/tabs/tabs.scss +114 -0
  168. package/styles/components/tag/_index.scss +3 -0
  169. package/styles/components/tag/tag.scss +65 -0
  170. package/styles/components/text-area/_index.scss +4 -0
  171. package/styles/components/text-area/text-area.scss +111 -0
  172. package/styles/components/text-input/_index.scss +4 -0
  173. package/styles/components/text-input/text-input.scss +43 -0
  174. package/styles/components/toast/_index.scss +4 -0
  175. package/styles/components/toast/toast.css +4 -4
  176. package/styles/components/toast/toast.min.css +1 -1
  177. package/styles/components/toast/toast.scss +219 -0
  178. package/styles/components/toggle-switch/_index.scss +2 -0
  179. package/styles/components/toggle-switch/_toggle-slider.scss +123 -0
  180. package/styles/components/toggle-switch/toggle-switch.scss +137 -0
  181. package/styles/components/tooltip/_index.scss +3 -0
  182. package/styles/components/tooltip/popuptip.scss +5 -0
  183. package/styles/components/tooltip/tooltip.scss +87 -0
  184. package/styles/components-beta/description-list/_index.scss +1 -0
  185. package/styles/components-beta/description-list/description-list.scss +80 -0
  186. package/styles/components-beta/link-list/_index.scss +2 -0
  187. package/styles/components-beta/link-list/link-list.scss +81 -0
  188. package/styles/components-beta/nav-link/_index.scss +1 -0
  189. package/styles/components-beta/nav-link/navlink.scss +66 -0
  190. package/styles/components-beta/search/_index.scss +4 -0
  191. package/styles/components-beta/search/search-with-submit-button.scss +37 -0
  192. package/styles/components-beta/search/search.scss +106 -0
  193. package/styles/components-beta/select/_index.scss +3 -0
  194. package/styles/components-beta/select/select.scss +128 -0
  195. package/styles/components-beta/table-of-contents/_index.scss +2 -0
  196. package/styles/components-beta/table-of-contents/table-of-contents.scss +88 -0
  197. package/styles/core/_layers.scss +3 -0
  198. package/styles/core/core.css +61 -3
  199. package/styles/core/core.min.css +1 -1
  200. package/styles/core/core.scss +6 -0
  201. package/styles/core/global/_base-class.scss +38 -0
  202. package/styles/core/global/_index.scss +2 -0
  203. package/styles/core/global/_top-layer.scss +20 -0
  204. package/styles/core/jkl/_colors.scss +26 -0
  205. package/styles/core/jkl/_convert.scss +102 -0
  206. package/styles/core/jkl/_helpers.scss +26 -0
  207. package/styles/core/jkl/_index.scss +18 -0
  208. package/styles/core/jkl/_motion.scss +63 -0
  209. package/styles/core/jkl/_navigation.scss +9 -0
  210. package/styles/core/jkl/_ornaments.scss +28 -0
  211. package/styles/core/jkl/_reset.scss +45 -0
  212. package/styles/core/jkl/_responsive-units.scss +30 -0
  213. package/styles/core/jkl/_screenreader.scss +59 -0
  214. package/styles/core/jkl/_screens.scss +135 -0
  215. package/styles/core/jkl/_shadows.scss +25 -0
  216. package/styles/core/jkl/_spacing.scss +149 -0
  217. package/styles/core/jkl/_theme.scss +119 -0
  218. package/styles/core/jkl/_tokens.scss +58 -0
  219. package/styles/core/jkl/_typography.scss +269 -0
  220. package/styles/core/jkl/_underline.scss +16 -0
  221. package/styles/core/jkl/_z-index.scss +23 -0
  222. package/styles/core/jkl/legacy/_dynamic-colors.scss +40 -0
  223. package/styles/core/jkl/legacy/_index.scss +2 -0
  224. package/styles/core/jkl/legacy/_tokens.scss +566 -0
  225. package/styles/core/resets/_index.scss +2 -0
  226. package/styles/core/resets/_normalize.scss +251 -0
  227. package/styles/core/resets/_reset.scss +68 -0
  228. package/styles/core/theme/_color-tokens.scss +73 -0
  229. package/styles/core/theme/_dynamic-spacing.scss +55 -0
  230. package/styles/core/theme/_index.scss +8 -0
  231. package/styles/core/theme/_legacy-color-tokens.scss +81 -0
  232. package/styles/core/theme/_legacy-tokens.scss +215 -0
  233. package/styles/core/theme/_old-vars.scss +30 -0
  234. package/styles/core/theme/_spacing-tokens.scss +32 -0
  235. package/styles/core/theme/_tokens.scss +32 -0
  236. package/styles/core/theme/_typography.scss +27 -0
  237. package/styles/core/utility/_headings.scss +31 -0
  238. package/styles/core/utility/_index.scss +4 -0
  239. package/styles/core/utility/_paragraphs.scss +18 -0
  240. package/styles/core/utility/_screen-reader.scss +11 -0
  241. package/styles/core/utility/_spacing.scss +49 -0
  242. package/styles/hooks/stories/styles.scss +78 -0
  243. package/styles/shared/input/shared-input-styles.scss +181 -0
  244. package/styles/shared/track/track.scss +27 -0
  245. package/styles/styles.css +38 -34
  246. package/styles/styles.min.css +2 -2
  247. package/styles/styles.scss +52 -0
  248. package/styles/components/checkbox/development/public/fonts/webfonts.css +0 -115
  249. package/styles/components/checkbox/development/public/fonts/webfonts.min.css +0 -1
  250. package/styles/components/file-input/development/public/fonts/_index.scss +0 -1
  251. package/styles/components/file-input/development/public/fonts/webfonts.css +0 -108
  252. package/styles/components/file-input/development/public/fonts/webfonts.min.css +0 -1
  253. package/styles/components/file-input/development/public/fonts/webfonts.scss +0 -137
  254. package/styles/components/menu/development/public/fonts/_index.scss +0 -1
  255. package/styles/components/menu/development/public/fonts/webfonts.css +0 -108
  256. package/styles/components/menu/development/public/fonts/webfonts.min.css +0 -1
  257. package/styles/components/menu/development/public/fonts/webfonts.scss +0 -137
  258. package/styles/components/radio-button/development/public/fonts/_index.scss +0 -1
  259. package/styles/components/radio-button/development/public/fonts/webfonts.css +0 -115
  260. package/styles/components/radio-button/development/public/fonts/webfonts.min.css +0 -1
  261. package/styles/components/radio-button/development/public/fonts/webfonts.scss +0 -145
  262. package/styles/components/text-input/development/public/fonts/_index.scss +0 -1
  263. package/styles/components/text-input/development/public/fonts/webfonts.css +0 -115
  264. package/styles/components/text-input/development/public/fonts/webfonts.min.css +0 -1
  265. package/styles/components/text-input/development/public/fonts/webfonts.scss +0 -145
  266. package/styles/components/toggle-switch/development/public/fonts/_index.scss +0 -1
  267. package/styles/components/toggle-switch/development/public/fonts/webfonts.css +0 -115
  268. package/styles/components/toggle-switch/development/public/fonts/webfonts.min.css +0 -1
  269. package/styles/components/toggle-switch/development/public/fonts/webfonts.scss +0 -145
  270. /package/styles/{components/checkbox/development/public/fonts → fonts}/_index.scss +0 -0
  271. /package/styles/{components/checkbox/development/public/fonts → fonts}/webfonts.scss +0 -0
@@ -0,0 +1,20 @@
1
+ @use "../jkl";
2
+
3
+ @layer jokul.global {
4
+ [popover] {
5
+ opacity: 0;
6
+ transition: opacity,
7
+ overlay allow-discrete,
8
+ display allow-discrete;
9
+
10
+ @include jkl.motion("standard", "productive");
11
+
12
+ &:popover-open {
13
+ opacity: 1;
14
+
15
+ @starting-style {
16
+ opacity: 0;
17
+ }
18
+ }
19
+ }
20
+ }
@@ -0,0 +1,26 @@
1
+ @use "sass:map";
2
+ @use "./legacy" as *;
3
+
4
+ /// @type Color
5
+ $color-focus-color: $color-granitt;
6
+
7
+ /// @type Color
8
+ $color-focus-color--darkbg: $color-snohvit;
9
+
10
+ // Varslingsfarger / Meldingsfarger.
11
+ // Kun til bruk som bakgrunn i komponenter som gir varslinger til bruker.
12
+ $_varslingsfarger: (
13
+ "suksess": var(--jkl-success),
14
+ "feil": var(--jkl-error),
15
+ "info": var(--jkl-info),
16
+ "advarsel": var(--jkl-warning),
17
+ );
18
+
19
+ /// Hent fargekoden til en navngitt varslingsfarge
20
+ /// @param {"suksess" | "feil" | "info" | "advarsel"} $farge - Navn på fargen du ønsker verdien til
21
+ /// @deprecated Bruk tokens direkte ($color-success, $color-error, $color-info, $color-warning)
22
+ /// @return {Color} - fargekoden til den ønskede fargen
23
+ /// @access private - forwardes ikke ut av modulen, men er tilgjengelig ved direkteimport. KUN FOR INTERN BRUK I JØKUL.
24
+ @function varslingsfarge($farge) {
25
+ @return map.get($_varslingsfarger, $farge);
26
+ }
@@ -0,0 +1,102 @@
1
+ @use "sass:color";
2
+ @use "sass:list";
3
+ @use "sass:map";
4
+ @use "sass:math";
5
+ @use "sass:meta";
6
+ @use "sass:string";
7
+
8
+ /// Casts a string into a number
9
+ /// https://hugogiraudel.com/2014/01/15/sass-string-to-number/
10
+ /// @author Hugo Giraudel
11
+ /// @param {String | Number} $value - Value to be parsed
12
+ /// @return {Number} - $value converted to a number
13
+ @function to-number($value) {
14
+ @if meta.type-of($value) == "number" {
15
+ @return $value;
16
+ } @else if meta.type-of($value) != "string" {
17
+ @warn "Value for `to-number` should be a number or a string.";
18
+ }
19
+
20
+ $result: 0;
21
+ $digits: 0;
22
+ $minus: string.slice($value, 1, 1) == "-";
23
+ $numbers: (
24
+ "0": 0,
25
+ "1": 1,
26
+ "2": 2,
27
+ "3": 3,
28
+ "4": 4,
29
+ "5": 5,
30
+ "6": 6,
31
+ "7": 7,
32
+ "8": 8,
33
+ "9": 9,
34
+ );
35
+
36
+ @for $i from if($minus, 2, 1) through string.length($value) {
37
+ $character: string.slice($value, $i, $i);
38
+
39
+ @if not(list.index(map.keys($numbers), $character) or $character == ".")
40
+ {
41
+ @return to-length(
42
+ if($minus, -$result, $result),
43
+ string.slice($value, $i)
44
+ );
45
+ }
46
+
47
+ @if $character == "." {
48
+ $digits: 1;
49
+ } @else if $digits == 0 {
50
+ $result: $result * 10 + map.get($numbers, $character);
51
+ } @else {
52
+ $digits: $digits * 10;
53
+ $result: $result + math.div(map.get($numbers, $character), $digits);
54
+ }
55
+ }
56
+
57
+ @return if($minus, -$result, $result);
58
+ }
59
+
60
+ /// Add `$unit` to `$value`
61
+ /// @param {Number} $value - Value to add unit to
62
+ /// @param {String} $unit - String representation of the unit
63
+ /// @return {Number} - `$value` expressed in `$unit`
64
+ @function to-length($value, $unit) {
65
+ $units: (
66
+ "px": 1px,
67
+ "cm": 1cm,
68
+ "mm": 1mm,
69
+ "%": 1%,
70
+ "ch": 1ch,
71
+ "pc": 1pc,
72
+ "in": 1in,
73
+ "em": 1em,
74
+ "rem": 1rem,
75
+ "pt": 1pt,
76
+ "ex": 1ex,
77
+ "vw": 1vw,
78
+ "vh": 1vh,
79
+ "vmin": 1vmin,
80
+ "vmax": 1vmax,
81
+ );
82
+
83
+ @if not list.index(map.keys($units), $unit) {
84
+ @warn "Invalid unit `#{$unit}`.";
85
+ }
86
+
87
+ @return $value * map.get($units, $unit);
88
+ }
89
+
90
+ /// Gjør en fargeverdi URL-safe, for eksempel til bruk i inline SVG
91
+ /// @param {Color} $color - Sass fargetype. Kan være HEX, hsl, hsla, rgb eller rgba.
92
+ /// @return {String} - input konvertert til en URL-safe HEX-verdi
93
+ @function urlencodecolor($color) {
94
+ @if meta.type-of($color) == "color" and string.index(#{$color}, "#") == 1 {
95
+ $hex: string.slice(color.ie-hex-str($color), 4);
96
+ $converted-color: string.unquote("#{$hex}");
97
+
98
+ @return "%23" + $converted-color;
99
+ }
100
+
101
+ @return $color;
102
+ }
@@ -0,0 +1,26 @@
1
+ /// Gjør flexbox litt mindre verbos. Setter display: flex; med gitt align-items og justify-content.
2
+ /// @param {String} $align-items [center] – settes på align-items
3
+ /// @param {String} $justify-content [center] – settes på justify-content
4
+ /// @output display: flex og angitt align-items og justify-content
5
+ @mixin flex($align-items: center, $justify-content: center) {
6
+ display: flex;
7
+ align-items: $align-items;
8
+ justify-content: $justify-content;
9
+ }
10
+
11
+ /// Samle alt som har med posisjonering å gjøre i én mixin. Alle parameternavn matcher CSS-attributtet.
12
+ /// @param {String} $position
13
+ /// @param {String} $top [initial]
14
+ /// @param {String} $left [initial]
15
+ /// @param {String} $right [initial]
16
+ /// @param {String} $bottom [initial]
17
+ @mixin position(
18
+ $position,
19
+ $top: initial,
20
+ $left: initial,
21
+ $right: initial,
22
+ $bottom: initial
23
+ ) {
24
+ position: $position;
25
+ inset: $top $right $bottom $left;
26
+ }
@@ -0,0 +1,18 @@
1
+ @forward "legacy";
2
+ @forward "colors" hide varslingsfarge;
3
+ @forward "convert";
4
+ @forward "helpers";
5
+ @forward "motion";
6
+ @forward "navigation";
7
+ @forward "ornaments";
8
+ @forward "reset";
9
+ @forward "responsive-units";
10
+ @forward "screenreader";
11
+ @forward "screens";
12
+ @forward "shadows";
13
+ @forward "spacing" hide $spacing, $combinations, $positions;
14
+ @forward "theme";
15
+ @forward "tokens" hide $color-background-page, $color-border-subdued, $color-text-default, $color-text-subdued;
16
+ @forward "typography" hide $text-styles;
17
+ @forward "underline";
18
+ @forward "z-index";
@@ -0,0 +1,63 @@
1
+ @use "sass:map";
2
+ @use "sass:list";
3
+
4
+ // Oppdater verdier i motion.ts også
5
+ $_easings: (
6
+ "standard": ease,
7
+ "entrance": ease-out,
8
+ "exit": ease-in,
9
+ "easeInBounceOut": cubic-bezier(0, 0, 0.375, 1.17),
10
+ "focus": cubic-bezier(0.6, 0.2, 0.35, 1),
11
+ );
12
+
13
+ /// Hent en easing til bruk i animasjoner. Se også `timing`-funksjonen og `motion`-mixinen.
14
+ /// @param {"standard" | "entrance" | "exit" | "easeInBounceOut" | "focus"} $name - Navn på easingen du ønsker verdien til
15
+ /// @return {String} - easingverdi til bruk i animasjoner
16
+ /// @see timing
17
+ /// @see motion
18
+ @function easing($name, $easings: $_easings) {
19
+ @if map.has-key($easings, $name) {
20
+ @return map.get($easings, $name);
21
+ } @else {
22
+ @error 'Unable to find an easing named #{$name} in our supported easings.';
23
+ }
24
+ }
25
+
26
+ // Oppdater verdier i motion.ts også
27
+ $_timings: (
28
+ "energetic": 75ms,
29
+ "snappy": 100ms,
30
+ "productive": 150ms,
31
+ "polite": 200ms,
32
+ "expressive": 250ms,
33
+ "lazy": 400ms,
34
+ );
35
+
36
+ /// Hent en timing til bruk i animasjoner. Se også `easing`-funksjonen og `motion`-mixinen.
37
+ /// @param {"energetic" | "snappy" | "productive" | "expressive" | "lazy"} $mode - Navn på timingen du ønsker verdien til
38
+ /// @return {String} - timingverdi til bruk i animasjoner
39
+ /// @see easing
40
+ /// @see motion
41
+ @function timing($mode, $timings: $_timings) {
42
+ @if map.has-key($timings, $mode) {
43
+ @return map.get($timings, $mode);
44
+ } @else {
45
+ @error 'Unable to find a timing named #{$mode} in our supported timings';
46
+ }
47
+ }
48
+
49
+ /// Setter transition-timing-function og transition-duration, for bruk i animasjoner.
50
+ /// Se også `timing`- og `easing`-funksjonene.
51
+ /// @param {"standard" | "entrance" | "exit" | "easeInBounceOut" | "focus"} $name [standard] - Navn på easingen du ønsker verdien til
52
+ /// @param {"energetic" | "snappy" | "productive" | "expressive" | "lazy"} $mode [productive] - Navn på timingen du ønsker verdien til
53
+ /// @param $properties - Kommaseparert liste over egenskapene du ønsker å animere
54
+ /// @see easing
55
+ /// @see timing
56
+ @mixin motion($name: "standard", $mode: "productive", $properties...) {
57
+ transition-timing-function: easing($name);
58
+ transition-duration: timing($mode);
59
+
60
+ @if list.length($properties) > 0 {
61
+ transition-property: $properties;
62
+ }
63
+ }
@@ -0,0 +1,9 @@
1
+ /// Brukes for CSS som skal gjelde bare ved tastaturnavigasjon.
2
+ /// Brukes typisk til ekstra tydelige fokus-stiler. Krever at
3
+ /// `initTabListener()` fra core er kjørt. Se README til core.
4
+ /// @content Innholdet plasseres i en selector som bare matcher dersom vi _ikke_ har data-mousenavigation eller data-touchnavigation på html-elementet.
5
+ @mixin keyboard-navigation {
6
+ @at-root html:not([data-mousenavigation]):not([data-touchnavigation]) #{&} {
7
+ @content;
8
+ }
9
+ }
@@ -0,0 +1,28 @@
1
+ @use "motion";
2
+
3
+ @mixin chevron($size, $color, $weight: 0.125rem, $rotate: 0, $state: closed) {
4
+ box-sizing: border-box;
5
+ width: $size;
6
+ height: $size;
7
+
8
+ transform-origin: 26.33% 73.66%; // places origin in center of chevron
9
+ transform: rotate(
10
+ (-45 + $rotate) * 1deg
11
+ ); // default orientation is pointing down
12
+
13
+ border-left: $weight solid $color;
14
+ border-bottom: $weight solid $color;
15
+ transition: transform motion.timing("lazy") ease;
16
+ }
17
+
18
+ @mixin decorative($content) {
19
+ // Detaljer finnes her: https://github.com/fremtind/jokul/issues/2774#issuecomment-1056575107
20
+ content: $content; // Fallback for nettlesere som ikke støtter ny syntaks (Firefox, Safari)
21
+ content: $content / ""; // Tom alternativ tekst
22
+ alt: " "; // WebKit-alternativ, fases ut når varianten fra speccen er støttet
23
+ }
24
+
25
+ @mixin focus-outline($offset: 3px, $thickness: 3px) {
26
+ outline: $thickness solid var(--jkl-color-border-action);
27
+ outline-offset: $offset;
28
+ }
@@ -0,0 +1,45 @@
1
+ @use "theme";
2
+
3
+ /// En omfattende reset for alt av outlines og borders på interaktive elementer
4
+ @mixin reset-outline {
5
+ & {
6
+ outline: 0;
7
+ border-style: none;
8
+ outline-style: none;
9
+ }
10
+
11
+ &:active,
12
+ &:hover,
13
+ &:focus {
14
+ outline: 0;
15
+ outline-style: none;
16
+ }
17
+
18
+ // Reset alt som er gjort over hvis brukeren har på forced-colors.
19
+ // Da mister vi box-shadow og er avhengig av at borders og outlines synes.
20
+ @include theme.forced-colors-mode {
21
+ outline: revert;
22
+ border-style: revert;
23
+ outline-style: revert;
24
+
25
+ &:active,
26
+ &:hover,
27
+ &:focus {
28
+ outline: revert;
29
+ outline-style: revert;
30
+ }
31
+ }
32
+ }
33
+
34
+ /// Removes increment and decrement buttons
35
+ /// for number input fields.
36
+ @mixin remove-inner-outer-button {
37
+ input[type="number"]::-webkit-outer-spin-button,
38
+ input[type="number"]::-webkit-inner-spin-button {
39
+ -webkit-appearance: none;
40
+ }
41
+
42
+ input[type="number"] {
43
+ -moz-appearance: textfield;
44
+ }
45
+ }
@@ -0,0 +1,30 @@
1
+ @use "sass:math";
2
+ @use "convert";
3
+
4
+ /// Kalkuler riktig rem-verdi basert på en gitt pixelverdi
5
+ /// @param {Number} $px-size - Pixelverdi, helst med unit
6
+ /// @return {Number} - Pixelverdien konvertert til rem
7
+ /// @example
8
+ /// jkl.rem(16px);
9
+ @function rem($px-size) {
10
+ @if $px-size == 0 {
11
+ @return 0;
12
+ }
13
+ $rem-size: math.div($px-size, 16px);
14
+ // Default font size on html element is 100%, equivalent to 16px;
15
+ @return convert.to-number(#{$rem-size}rem);
16
+ }
17
+
18
+ /// Calculate a responsive size value relative to a given screen size
19
+ /// Will return a CSS rule that corresponds to the given pixel size at
20
+ /// the given screen size and scales with changes in screen size
21
+ /// @param {Number} $px-size - Size to calculate from, in px without unit
22
+ /// @param {Number} $screen-width - Screen width to calculate from, in px without unit, default 1400
23
+ /// @param {Number} $screen-height - Screen height to calculate from, in px without unit, default 900
24
+ /// @return {Number} - Input expressed as a responsive value
25
+ @function relative-size($px-size, $screen-width: 1400, $screen-height: 900) {
26
+ $hor-size: math.div($px-size, $screen-width) * 100 * 1vw;
27
+ $ver-size: math.div($px-size, $screen-height) * 100 * 1vh;
28
+
29
+ @return min(#{$hor-size}, #{$ver-size});
30
+ }
@@ -0,0 +1,59 @@
1
+ /// Improved screen reader only CSS class
2
+ /// @author Gaël Poupard
3
+ /// licence https://codepen.io/ffoodd/pen/gwKZyq/license
4
+ /// Based on Yahoo!'s technique
5
+ /// @author Thierry Koblentz
6
+ /// @link https://developer.yahoo.com/blogs/ydn/clip-hidden-content-better-accessibility-53456.html
7
+ /// 1.
8
+ /// `clip` is deprecated but works everywhere
9
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/clip
10
+ /// 2.
11
+ /// `clip-path` is the future-proof version, but not very well supported yet
12
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/clip-path
13
+ /// @link http://caniuse.com/#search=clip-path
14
+ /// @author Yvain Liechti
15
+ /// @link https://twitter.com/ryuran78/status/778943389819604992
16
+ /// 3.
17
+ /// preventing text to be condensed
18
+ /// @author J. Renée Beach
19
+ /// @link https://medium.com/@jessebeach/beware-smushed-off-screen-accessible-text-5952a4c2cbfe
20
+ /// Drupal 8 goes with word-wrap: normal instead
21
+ /// @link https://www.drupal.org/node/2045151
22
+ /// @link http://cgit.drupalcode.org/drupal/commit/?id=5b847ea
23
+ /// 4.
24
+ /// !important is important
25
+ /// Obviously you wanna hide something
26
+ /// @author Harry Roberts
27
+ /// @link https://csswizardry.com/2016/05/the-importance-of-important/
28
+ @mixin screenreader-only {
29
+ border: 0 !important;
30
+ clip: rect(1px, 1px, 1px, 1px) !important; /* 1 */
31
+ clip-path: inset(50%) !important; /* 2 */
32
+ height: 1px !important;
33
+ margin: -1px !important;
34
+ overflow: hidden !important;
35
+ padding: 0 !important;
36
+ position: absolute !important;
37
+ width: 1px !important;
38
+ white-space: nowrap !important; /* 3 */
39
+ }
40
+
41
+ /// Use in conjunction with .sr-only to only display content when it's focused.
42
+ /// Useful for skip links
43
+ /// @link http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
44
+ /// Based on a HTML5 Boilerplate technique, included in Bootstrap
45
+ /// Fixed a bug with position: static on iOS 10.0.2 + VoiceOver
46
+ /// @author Sylvain Pigeard
47
+ /// @link https://github.com/twbs/bootstrap/issues/20732
48
+ @mixin screenreader-only-focusable {
49
+ &:focus,
50
+ &:active {
51
+ clip: auto !important;
52
+ clip-path: none !important;
53
+ height: auto !important;
54
+ margin: auto !important;
55
+ overflow: visible !important;
56
+ width: auto !important;
57
+ white-space: normal !important;
58
+ }
59
+ }
@@ -0,0 +1,135 @@
1
+ /// @type Number
2
+ $breakpoint--medium: 680px;
3
+
4
+ /// @type Number
5
+ $breakpoint--large: 1200px;
6
+
7
+ /// @type Number
8
+ $breakpoint--xl: 1600px;
9
+
10
+ /// Forenkler media queries som skal gjelde mellom to skjermbredder.
11
+ /// Maksverdien er _eksklusiv_ (verdien vil bli $max - 1px).
12
+ /// @content Plasseres i et media query med min-width lik $min og max-width lik $max - 1px
13
+ /// @example
14
+ /// .class {
15
+ /// @include jkl.screen-between(42px, 420px) {
16
+ /// display: none;
17
+ /// }
18
+ /// }
19
+ @mixin screen-between($min, $max) {
20
+ @media (min-width: $min) and (max-width: #{$max - 1px}) {
21
+ @content;
22
+ }
23
+ }
24
+
25
+ /// Forenkler å skrive CSS som skal gjelde fra en viss pixelbredde og oppover.
26
+ /// @content Plasseres i et media query med min-width lik $min
27
+ /// @example
28
+ /// .class {
29
+ /// @include jkl.screen-from(42px) {
30
+ /// display: none;
31
+ /// }
32
+ /// }
33
+ @mixin screen-from($min) {
34
+ @media (min-width: $min) {
35
+ @content;
36
+ }
37
+ }
38
+
39
+ /// Forenkler å skrive CSS som skal gjelde opp til en viss pixelbredde
40
+ /// @content Plasseres i et media query med max-width lik $max - 1
41
+ /// @example
42
+ /// .class {
43
+ /// @include jkl.screen-to(375px) {
44
+ /// display: none;
45
+ /// }
46
+ /// }
47
+ @mixin screen-to($max) {
48
+ @media (width >= 0) and (max-width: #{$max - 1px}) {
49
+ @content;
50
+ }
51
+ }
52
+
53
+ /// Forenkler å skrive CSS som skal gjelde for hva Jøkul definerer som små skjermer.
54
+ /// @content Plasseres i et media query for små skjermer
55
+ /// @example
56
+ /// .class {
57
+ /// @include jkl.small-device {
58
+ /// display: none;
59
+ /// }
60
+ /// }
61
+ @mixin small-device {
62
+ @media (width >= 0) and (max-width: #{$breakpoint--medium - 1px}) {
63
+ @content;
64
+ }
65
+ }
66
+
67
+ /// Forenkler å skrive CSS som skal gjelde for hva Jøkul definerer som mellomstore skjermer.
68
+ /// @content Plasseres i et media query for mellomstore skjermer
69
+ /// @example
70
+ /// .class {
71
+ /// @include jkl.medium-device {
72
+ /// display: none;
73
+ /// }
74
+ /// }
75
+ @mixin medium-device {
76
+ @media (min-width: #{$breakpoint--medium}) and (max-width: #{$breakpoint--large - 1px}) {
77
+ @content;
78
+ }
79
+ }
80
+
81
+ /// Forenkler å skrive CSS som skal gjelde for hva Jøkul definerer som mellomstore skjermer _og større_
82
+ /// @content Plasseres i et media query som gjelder mellomstore skjermer og oppover
83
+ /// @example
84
+ /// .class {
85
+ /// @include jkl.from-medium-device {
86
+ /// display: none;
87
+ /// }
88
+ /// }
89
+ @mixin from-medium-device {
90
+ @media (min-width: #{$breakpoint--medium}) {
91
+ @content;
92
+ }
93
+ }
94
+
95
+ /// Forenkler å skrive CSS som skal gjelde for hva Jøkul definerer som store skjermer.
96
+ /// @content Plasseres i et media query for store skjermer
97
+ /// @example
98
+ /// .class {
99
+ /// @include jkl.large-device {
100
+ /// display: none;
101
+ /// }
102
+ /// }
103
+ @mixin large-device {
104
+ @media (min-width: #{$breakpoint--large}) and (max-width: #{$breakpoint--xl - 1px}) {
105
+ @content;
106
+ }
107
+ }
108
+
109
+ /// Forenkler å skrive CSS som skal gjelde for hva Jøkul definerer som store skjermer _og større_
110
+ /// @content Plasseres i et media query som gjelder store skjermer og oppover
111
+ /// @example
112
+ /// .class {
113
+ /// @include jkl.from-large-device {
114
+ /// display: none;
115
+ /// }
116
+ /// }
117
+ @mixin from-large-device {
118
+ @media (min-width: #{$breakpoint--large}) {
119
+ @content;
120
+ }
121
+ }
122
+
123
+ /// Forenkler å skrive CSS som skal gjelde for hva Jøkul definerer som ekstra store skjermer.
124
+ /// @content Plasseres i et media query for ekstra store skjermer
125
+ /// @example
126
+ /// .class {
127
+ /// @include jkl.xl-device {
128
+ /// display: none;
129
+ /// }
130
+ /// }
131
+ @mixin xl-device {
132
+ @media (min-width: #{$breakpoint--xl}) {
133
+ @content;
134
+ }
135
+ }
@@ -0,0 +1,25 @@
1
+ @use "responsive-units" as ru;
2
+
3
+ /// Skygge som indikerer at noe er klikkbart og vil ta deg til et annet sted
4
+ /// @type List
5
+ $shadow-navigation: 0 ru.rem(4px) ru.rem(15px) rgb(37 42 49 / 10%);
6
+
7
+ /// Skygge som indikerer at pekeren er over noe sin er klikkbart og vil ta deg til et annet sted
8
+ /// @type List
9
+ $shadow-navigation--hover: 0 ru.rem(6px) ru.rem(25px) rgb(37 42 49 / 12%);
10
+
11
+ /// Skygge som indikerer at noe er klikkbart og at klikk vil gjøre en endring på nåværende side
12
+ /// @type List
13
+ $shadow-task-card: 0 ru.rem(4px) ru.rem(12px) rgb(37 42 49 / 3%);
14
+
15
+ /// @type List
16
+ /// @deprecated Se tilgjengelige skygger i _shadows.scss
17
+ $drop-shadow--small: 0 ru.rem(4px) ru.rem(8px) rgb(0 0 0 / 8%);
18
+
19
+ /// @type List
20
+ /// @deprecated Se tilgjengelige skygger i _shadows.scss
21
+ $drop-shadow--medium: ru.rem(4px) ru.rem(4px) ru.rem(8px) rgb(0 0 0 / 8%);
22
+
23
+ /// @type List
24
+ /// @deprecated Se tilgjengelige skygger i _shadows.scss
25
+ $drop-shadow--large: ru.rem(4px) ru.rem(6px) ru.rem(16px) rgb(0 0 0 / 15%);