@fremtind/jokul 0.8.1 → 0.9.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 (277) hide show
  1. package/build/NativeSelect-DOSP8-ZQ.js +2 -0
  2. package/build/NativeSelect-DOSP8-ZQ.js.map +1 -0
  3. package/build/NativeSelect-gBndJVSb.cjs +2 -0
  4. package/build/NativeSelect-gBndJVSb.cjs.map +1 -0
  5. package/build/build-stats.html +1 -1
  6. package/build/cjs/components/accordion/Accordion.js +2 -0
  7. package/build/cjs/components/accordion/Accordion.js.map +1 -0
  8. package/build/cjs/components/accordion/AccordionItem.js +2 -0
  9. package/build/cjs/components/accordion/AccordionItem.js.map +1 -0
  10. package/build/cjs/components/accordion/index.js +2 -0
  11. package/build/cjs/components/accordion/index.js.map +1 -0
  12. package/build/cjs/components/breadcrumb/Breadcrumb.js +2 -0
  13. package/build/cjs/components/breadcrumb/Breadcrumb.js.map +1 -0
  14. package/build/cjs/components/breadcrumb/BreadcrumbItem.js +2 -0
  15. package/build/cjs/components/breadcrumb/BreadcrumbItem.js.map +1 -0
  16. package/build/cjs/components/breadcrumb/index.js +2 -0
  17. package/build/cjs/components/breadcrumb/index.js.map +1 -0
  18. package/build/cjs/components/button/Button.js +2 -0
  19. package/build/cjs/components/button/Button.js.map +1 -0
  20. package/build/cjs/components/button/index.js +2 -0
  21. package/build/cjs/components/button/index.js.map +1 -0
  22. package/build/cjs/components/button/types.js +2 -0
  23. package/build/cjs/components/button/types.js.map +1 -0
  24. package/build/cjs/components/checkbox/Checkbox.js +2 -0
  25. package/build/cjs/components/checkbox/Checkbox.js.map +1 -0
  26. package/build/cjs/components/checkbox/index.js +2 -0
  27. package/build/cjs/components/checkbox/index.js.map +1 -0
  28. package/build/cjs/components/combobox/Combobox.js +2 -0
  29. package/build/cjs/components/combobox/Combobox.js.map +1 -0
  30. package/build/cjs/components/combobox/index.js +2 -0
  31. package/build/cjs/components/combobox/index.js.map +1 -0
  32. package/build/cjs/components/cookie-consent/CookieConsent.js +2 -0
  33. package/build/cjs/components/cookie-consent/CookieConsent.js.map +1 -0
  34. package/build/cjs/components/cookie-consent/CookieConsentContext.js +2 -0
  35. package/build/cjs/components/cookie-consent/CookieConsentContext.js.map +1 -0
  36. package/build/cjs/components/cookie-consent/CookieConsentModal.js +2 -0
  37. package/build/cjs/components/cookie-consent/CookieConsentModal.js.map +1 -0
  38. package/build/cjs/components/cookie-consent/consents/CustomConsents.js +2 -0
  39. package/build/cjs/components/cookie-consent/consents/CustomConsents.js.map +1 -0
  40. package/build/cjs/components/cookie-consent/consents/DefaultConsents.js +2 -0
  41. package/build/cjs/components/cookie-consent/consents/DefaultConsents.js.map +1 -0
  42. package/build/cjs/components/cookie-consent/consents/RequirementCheckbox.js +2 -0
  43. package/build/cjs/components/cookie-consent/consents/RequirementCheckbox.js.map +1 -0
  44. package/build/cjs/components/cookie-consent/cookieConsentUtils.js +2 -0
  45. package/build/cjs/components/cookie-consent/cookieConsentUtils.js.map +1 -0
  46. package/build/cjs/components/cookie-consent/index.js +2 -0
  47. package/build/cjs/components/cookie-consent/index.js.map +1 -0
  48. package/build/cjs/components/cookie-consent/types.js +2 -0
  49. package/build/cjs/components/cookie-consent/types.js.map +1 -0
  50. package/build/cjs/components/index.js +1 -1
  51. package/build/cjs/components/input-group/FieldGroup.js +1 -1
  52. package/build/cjs/components/input-group/FieldGroup.js.map +1 -1
  53. package/build/cjs/components/input-group/InputGroup.js +1 -1
  54. package/build/cjs/components/input-group/InputGroup.js.map +1 -1
  55. package/build/cjs/components/input-group/Label.js +1 -1
  56. package/build/cjs/components/input-group/Label.js.map +1 -1
  57. package/build/cjs/components/input-group/SupportLabel.js +1 -1
  58. package/build/cjs/components/input-group/SupportLabel.js.map +1 -1
  59. package/build/cjs/components/list/List.js +2 -0
  60. package/build/cjs/components/list/List.js.map +1 -0
  61. package/build/cjs/components/list/ListItem.js +2 -0
  62. package/build/cjs/components/list/ListItem.js.map +1 -0
  63. package/build/cjs/components/list/index.js +2 -0
  64. package/build/cjs/components/list/index.js.map +1 -0
  65. package/build/cjs/components/modal/Modal.js +2 -0
  66. package/build/cjs/components/modal/Modal.js.map +1 -0
  67. package/build/cjs/components/modal/index.js +2 -0
  68. package/build/cjs/components/modal/index.js.map +1 -0
  69. package/build/cjs/components/modal/useModal.js +2 -0
  70. package/build/cjs/components/modal/useModal.js.map +1 -0
  71. package/build/cjs/components/radio-button/BaseRadioButton.js +2 -0
  72. package/build/cjs/components/radio-button/BaseRadioButton.js.map +1 -0
  73. package/build/cjs/components/radio-button/RadioButton.js +2 -0
  74. package/build/cjs/components/radio-button/RadioButton.js.map +1 -0
  75. package/build/cjs/components/radio-button/RadioButtonGroup.js +2 -0
  76. package/build/cjs/components/radio-button/RadioButtonGroup.js.map +1 -0
  77. package/build/cjs/components/radio-button/index.js +2 -0
  78. package/build/cjs/components/radio-button/index.js.map +1 -0
  79. package/build/cjs/components/radio-button/radioGroupContext.js +2 -0
  80. package/build/cjs/components/radio-button/radioGroupContext.js.map +1 -0
  81. package/build/cjs/components/select/NativeSelect.js +2 -0
  82. package/build/cjs/components/select/NativeSelect.js.map +1 -0
  83. package/build/cjs/components/select/Select.js +2 -0
  84. package/build/cjs/components/select/Select.js.map +1 -0
  85. package/build/cjs/components/select/index.js +2 -0
  86. package/build/cjs/components/select/index.js.map +1 -0
  87. package/build/cjs/components/select/select-utils.js +2 -0
  88. package/build/cjs/components/select/select-utils.js.map +1 -0
  89. package/build/cjs/components/tag/Tag.js +1 -1
  90. package/build/cjs/components/tag/Tag.js.map +1 -1
  91. package/build/cjs/components/tooltip/PopupTip.js +1 -1
  92. package/build/cjs/components/tooltip/PopupTip.js.map +1 -1
  93. package/build/cjs/components/tooltip/TooltipContent.js +1 -1
  94. package/build/cjs/components/tooltip/TooltipContent.js.map +1 -1
  95. package/build/cjs/components/tooltip/TooltipTrigger.js +1 -1
  96. package/build/cjs/components/tooltip/TooltipTrigger.js.map +1 -1
  97. package/build/cjs/index.js +1 -1
  98. package/build/components/accordion/Accordion.d.ts +8 -0
  99. package/build/components/accordion/AccordionItem.d.ts +10 -0
  100. package/build/components/accordion/index.d.ts +4 -0
  101. package/build/components/breadcrumb/Breadcrumb.d.ts +6 -0
  102. package/build/components/breadcrumb/BreadcrumbItem.d.ts +10 -0
  103. package/build/components/breadcrumb/index.d.ts +4 -0
  104. package/build/components/button/Button.d.ts +7 -0
  105. package/build/components/button/index.d.ts +2 -0
  106. package/build/components/button/types.d.ts +19 -0
  107. package/build/components/checkbox/Checkbox.d.ts +17 -0
  108. package/build/components/checkbox/index.d.ts +2 -0
  109. package/build/components/combobox/Combobox.d.ts +39 -0
  110. package/build/components/combobox/index.d.ts +2 -0
  111. package/build/components/cookie-consent/CookieConsent.d.ts +6 -0
  112. package/build/components/cookie-consent/CookieConsentContext.d.ts +48 -0
  113. package/build/components/cookie-consent/CookieConsentModal.d.ts +3 -0
  114. package/build/components/cookie-consent/consents/CustomConsents.d.ts +9 -0
  115. package/build/components/cookie-consent/consents/DefaultConsents.d.ts +9 -0
  116. package/build/components/cookie-consent/consents/RequirementCheckbox.d.ts +9 -0
  117. package/build/components/cookie-consent/cookieConsentUtils.d.ts +23 -0
  118. package/build/components/cookie-consent/index.d.ts +5 -0
  119. package/build/components/cookie-consent/types.d.ts +12 -0
  120. package/build/components/index.d.ts +10 -0
  121. package/build/components/list/List.d.ts +8 -0
  122. package/build/components/list/ListItem.d.ts +8 -0
  123. package/build/components/list/index.d.ts +3 -0
  124. package/build/components/modal/Modal.d.ts +72 -0
  125. package/build/components/modal/index.d.ts +4 -0
  126. package/build/components/modal/useModal.d.ts +69 -0
  127. package/build/components/radio-button/BaseRadioButton.d.ts +10 -0
  128. package/build/components/radio-button/RadioButton.d.ts +15 -0
  129. package/build/components/radio-button/RadioButtonGroup.d.ts +24 -0
  130. package/build/components/radio-button/index.d.ts +6 -0
  131. package/build/components/radio-button/radioGroupContext.d.ts +16 -0
  132. package/build/components/select/NativeSelect.d.ts +19 -0
  133. package/build/components/select/Select.d.ts +53 -0
  134. package/build/components/select/index.d.ts +4 -0
  135. package/build/components/select/select-utils.d.ts +2 -0
  136. package/build/es/components/accordion/Accordion.js +2 -0
  137. package/build/es/components/accordion/Accordion.js.map +1 -0
  138. package/build/es/components/accordion/AccordionItem.js +2 -0
  139. package/build/es/components/accordion/AccordionItem.js.map +1 -0
  140. package/build/es/components/accordion/index.js +2 -0
  141. package/build/es/components/accordion/index.js.map +1 -0
  142. package/build/es/components/breadcrumb/Breadcrumb.js +2 -0
  143. package/build/es/components/breadcrumb/Breadcrumb.js.map +1 -0
  144. package/build/es/components/breadcrumb/BreadcrumbItem.js +2 -0
  145. package/build/es/components/breadcrumb/BreadcrumbItem.js.map +1 -0
  146. package/build/es/components/breadcrumb/index.js +2 -0
  147. package/build/es/components/breadcrumb/index.js.map +1 -0
  148. package/build/es/components/button/Button.js +2 -0
  149. package/build/es/components/button/Button.js.map +1 -0
  150. package/build/es/components/button/index.js +2 -0
  151. package/build/es/components/button/index.js.map +1 -0
  152. package/build/es/components/button/types.js +2 -0
  153. package/build/es/components/button/types.js.map +1 -0
  154. package/build/es/components/checkbox/Checkbox.js +2 -0
  155. package/build/es/components/checkbox/Checkbox.js.map +1 -0
  156. package/build/es/components/checkbox/index.js +2 -0
  157. package/build/es/components/checkbox/index.js.map +1 -0
  158. package/build/es/components/combobox/Combobox.js +2 -0
  159. package/build/es/components/combobox/Combobox.js.map +1 -0
  160. package/build/es/components/combobox/index.js +2 -0
  161. package/build/es/components/combobox/index.js.map +1 -0
  162. package/build/es/components/cookie-consent/CookieConsent.js +2 -0
  163. package/build/es/components/cookie-consent/CookieConsent.js.map +1 -0
  164. package/build/es/components/cookie-consent/CookieConsentContext.js +2 -0
  165. package/build/es/components/cookie-consent/CookieConsentContext.js.map +1 -0
  166. package/build/es/components/cookie-consent/CookieConsentModal.js +2 -0
  167. package/build/es/components/cookie-consent/CookieConsentModal.js.map +1 -0
  168. package/build/es/components/cookie-consent/consents/CustomConsents.js +2 -0
  169. package/build/es/components/cookie-consent/consents/CustomConsents.js.map +1 -0
  170. package/build/es/components/cookie-consent/consents/DefaultConsents.js +2 -0
  171. package/build/es/components/cookie-consent/consents/DefaultConsents.js.map +1 -0
  172. package/build/es/components/cookie-consent/consents/RequirementCheckbox.js +2 -0
  173. package/build/es/components/cookie-consent/consents/RequirementCheckbox.js.map +1 -0
  174. package/build/es/components/cookie-consent/cookieConsentUtils.js +2 -0
  175. package/build/es/components/cookie-consent/cookieConsentUtils.js.map +1 -0
  176. package/build/es/components/cookie-consent/index.js +2 -0
  177. package/build/es/components/cookie-consent/index.js.map +1 -0
  178. package/build/es/components/cookie-consent/types.js +2 -0
  179. package/build/es/components/cookie-consent/types.js.map +1 -0
  180. package/build/es/components/index.js +1 -1
  181. package/build/es/components/input-group/FieldGroup.js +1 -1
  182. package/build/es/components/input-group/FieldGroup.js.map +1 -1
  183. package/build/es/components/input-group/InputGroup.js +1 -1
  184. package/build/es/components/input-group/InputGroup.js.map +1 -1
  185. package/build/es/components/input-group/Label.js +1 -1
  186. package/build/es/components/input-group/Label.js.map +1 -1
  187. package/build/es/components/input-group/SupportLabel.js +1 -1
  188. package/build/es/components/input-group/SupportLabel.js.map +1 -1
  189. package/build/es/components/list/List.js +2 -0
  190. package/build/es/components/list/List.js.map +1 -0
  191. package/build/es/components/list/ListItem.js +2 -0
  192. package/build/es/components/list/ListItem.js.map +1 -0
  193. package/build/es/components/list/index.js +2 -0
  194. package/build/es/components/list/index.js.map +1 -0
  195. package/build/es/components/modal/Modal.js +2 -0
  196. package/build/es/components/modal/Modal.js.map +1 -0
  197. package/build/es/components/modal/index.js +2 -0
  198. package/build/es/components/modal/index.js.map +1 -0
  199. package/build/es/components/modal/useModal.js +2 -0
  200. package/build/es/components/modal/useModal.js.map +1 -0
  201. package/build/es/components/radio-button/BaseRadioButton.js +2 -0
  202. package/build/es/components/radio-button/BaseRadioButton.js.map +1 -0
  203. package/build/es/components/radio-button/RadioButton.js +2 -0
  204. package/build/es/components/radio-button/RadioButton.js.map +1 -0
  205. package/build/es/components/radio-button/RadioButtonGroup.js +2 -0
  206. package/build/es/components/radio-button/RadioButtonGroup.js.map +1 -0
  207. package/build/es/components/radio-button/index.js +2 -0
  208. package/build/es/components/radio-button/index.js.map +1 -0
  209. package/build/es/components/radio-button/radioGroupContext.js +2 -0
  210. package/build/es/components/radio-button/radioGroupContext.js.map +1 -0
  211. package/build/es/components/select/NativeSelect.js +2 -0
  212. package/build/es/components/select/NativeSelect.js.map +1 -0
  213. package/build/es/components/select/Select.js +2 -0
  214. package/build/es/components/select/Select.js.map +1 -0
  215. package/build/es/components/select/index.js +2 -0
  216. package/build/es/components/select/index.js.map +1 -0
  217. package/build/es/components/select/select-utils.js +2 -0
  218. package/build/es/components/select/select-utils.js.map +1 -0
  219. package/build/es/components/tag/Tag.js +1 -1
  220. package/build/es/components/tag/Tag.js.map +1 -1
  221. package/build/es/components/tooltip/PopupTip.js +1 -1
  222. package/build/es/components/tooltip/PopupTip.js.map +1 -1
  223. package/build/es/components/tooltip/TooltipContent.js +1 -1
  224. package/build/es/components/tooltip/TooltipContent.js.map +1 -1
  225. package/build/es/components/tooltip/TooltipTrigger.js +1 -1
  226. package/build/es/components/tooltip/TooltipTrigger.js.map +1 -1
  227. package/build/es/index.js +1 -1
  228. package/build/hooks/useAriaLiveRegion/useAriaLiveRegion.d.ts +1 -1
  229. package/package.json +26 -4
  230. package/src/components/accordion/styles/_index.scss +1 -0
  231. package/src/components/accordion/styles/accordion.css +166 -0
  232. package/src/components/accordion/styles/accordion.min.css +1 -0
  233. package/src/components/accordion/styles/accordion.scss +147 -0
  234. package/src/components/breadcrumb/styles/_index.scss +1 -0
  235. package/src/components/breadcrumb/styles/breadcrumb.css +29 -0
  236. package/src/components/breadcrumb/styles/breadcrumb.min.css +1 -0
  237. package/src/components/breadcrumb/styles/breadcrumb.scss +34 -0
  238. package/src/components/button/styles/_index.scss +1 -0
  239. package/src/components/button/styles/button.css +251 -0
  240. package/src/components/button/styles/button.min.css +1 -0
  241. package/src/components/button/styles/button.scss +294 -0
  242. package/src/components/checkbox/styles/_index.scss +1 -0
  243. package/src/components/checkbox/styles/checkbox.css +191 -0
  244. package/src/components/checkbox/styles/checkbox.min.css +1 -0
  245. package/src/components/checkbox/styles/checkbox.scss +229 -0
  246. package/src/components/combobox/styles/_index.scss +1 -0
  247. package/src/components/combobox/styles/combobox.css +337 -0
  248. package/src/components/combobox/styles/combobox.min.css +1 -0
  249. package/src/components/combobox/styles/combobox.scss +307 -0
  250. package/src/components/cookie-consent/styles/_index.scss +1 -0
  251. package/src/components/cookie-consent/styles/cookie-consent.css +94 -0
  252. package/src/components/cookie-consent/styles/cookie-consent.min.css +1 -0
  253. package/src/components/cookie-consent/styles/cookie-consent.scss +79 -0
  254. package/src/components/list/styles/_index.scss +1 -0
  255. package/src/components/list/styles/list.css +128 -0
  256. package/src/components/list/styles/list.min.css +1 -0
  257. package/src/components/list/styles/list.scss +166 -0
  258. package/src/components/loader/styles/loader.css +6 -6
  259. package/src/components/loader/styles/loader.min.css +1 -1
  260. package/src/components/loader/styles/skeleton-loader.css +5 -5
  261. package/src/components/loader/styles/skeleton-loader.min.css +1 -1
  262. package/src/components/modal/styles/_index.scss +1 -0
  263. package/src/components/modal/styles/modal.css +115 -0
  264. package/src/components/modal/styles/modal.min.css +1 -0
  265. package/src/components/modal/styles/modal.scss +100 -0
  266. package/src/components/radio-button/styles/_index.scss +1 -0
  267. package/src/components/radio-button/styles/radio-button.css +180 -0
  268. package/src/components/radio-button/styles/radio-button.min.css +1 -0
  269. package/src/components/radio-button/styles/radio-button.scss +201 -0
  270. package/src/components/select/styles/_index.scss +1 -0
  271. package/src/components/select/styles/select.css +350 -0
  272. package/src/components/select/styles/select.min.css +1 -0
  273. package/src/components/select/styles/select.scss +330 -0
  274. package/src/components/tooltip/styles/_index.scss +1 -0
  275. package/src/components/tooltip/styles/tooltip.css +136 -0
  276. package/src/components/tooltip/styles/tooltip.min.css +1 -0
  277. package/src/components/tooltip/styles/tooltip.scss +105 -0
@@ -0,0 +1,19 @@
1
+ import { default as React, SelectHTMLAttributes } from 'react';
2
+ import { ValuePair } from '../..';
3
+ import { InputGroupProps } from '../input-group';
4
+ export interface NativeSelectProps extends Omit<InputGroupProps, "children">, SelectHTMLAttributes<HTMLSelectElement> {
5
+ /**
6
+ * Merk som ugyldig uten å sende inn en errorLabel.
7
+ * NB! Brukes kun i tilfeller der valideringsfeil dukker opp andre steder, for eksempel i en FieldGroup.
8
+ */
9
+ invalid?: boolean;
10
+ /**
11
+ * Setter inn et placeholderelement som vises når ingenting er valgt i nedtrekkslisten.
12
+ * @default "Velg"
13
+ */
14
+ placeholder?: string;
15
+ items: Array<string | ValuePair>;
16
+ selectClassName?: string;
17
+ width?: string;
18
+ }
19
+ export declare const NativeSelect: React.ForwardRefExoticComponent<NativeSelectProps & React.RefAttributes<HTMLSelectElement>>;
@@ -0,0 +1,53 @@
1
+ import { default as React, ChangeEvent } from 'react';
2
+ import { ValuePair, DataTestAutoId, Density } from '../..';
3
+ import { LabelProps, InputGroupProps } from '../input-group';
4
+ interface PartialChangeEvent extends Partial<Omit<ChangeEvent<HTMLSelectElement>, "target">> {
5
+ /** Kreves av react-hook-form, det skjer ulike ting avhengig av om det er blur eller change */
6
+ type: "change" | "blur";
7
+ target: {
8
+ /** Kreves av react-hook-form for å vite hvilket skjemafelt som ble endret */
9
+ name: string;
10
+ value: string;
11
+ };
12
+ }
13
+ type ChangeEventHandler = (event: PartialChangeEvent) => void;
14
+ export interface SelectProps extends Omit<InputGroupProps, "children">, DataTestAutoId {
15
+ id?: string;
16
+ name: string;
17
+ label: string;
18
+ labelProps?: Omit<LabelProps, "children" | "density" | "htmlFor" | "standAlone">;
19
+ items: Array<string | ValuePair>;
20
+ /**
21
+ * @default false
22
+ */
23
+ inline?: boolean;
24
+ /**
25
+ * @default "Velg"
26
+ */
27
+ defaultPrompt?: string;
28
+ className?: string;
29
+ value?: string;
30
+ helpLabel?: string;
31
+ errorLabel?: string;
32
+ /**
33
+ * @default false
34
+ */
35
+ searchable?: boolean | ((searchValue: string, searchItem: string | ValuePair) => boolean);
36
+ density?: Density;
37
+ width?: string;
38
+ onChange?: ChangeEventHandler;
39
+ onBlur?: ChangeEventHandler;
40
+ onFocus?: ChangeEventHandler;
41
+ /**
42
+ * Merk som ugyldig uten å sende inn en errorLabel.
43
+ * NB! Brukes kun i tilfeller der valideringsfeil dukker opp andre steder, for eksempel i en FieldGroup.
44
+ */
45
+ invalid?: boolean;
46
+ /**
47
+ * Hvor mange valg skal vises i listen før den begynner å scrolle.
48
+ * @default 5
49
+ */
50
+ maxShownOptions?: number;
51
+ }
52
+ export declare const Select: React.ForwardRefExoticComponent<SelectProps & React.RefAttributes<HTMLSelectElement>>;
53
+ export {};
@@ -0,0 +1,4 @@
1
+ export type { SelectProps } from './Select';
2
+ export { Select } from './Select';
3
+ export type { NativeSelectProps } from './NativeSelect';
4
+ export { NativeSelect } from './NativeSelect';
@@ -0,0 +1,2 @@
1
+ export declare function toLower(str?: string): string;
2
+ export declare function focusSelected(listEl: HTMLElement, selected: string | undefined): void;
@@ -0,0 +1,2 @@
1
+ import{jsx as s}from"react/jsx-runtime";import{c as o}from"../../../clsx-BeLtu-UY.js";const a=({className:a,density:c,id:t,...i})=>s("section",{role:"group","data-testid":"jkl-accordion",className:o("jkl-accordion",a),"data-density":c,id:t,...i});export{a as Accordion};
2
+ //# sourceMappingURL=Accordion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Accordion.js","sources":["../../../../src/components/accordion/Accordion.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { FC } from \"react\";\nimport { Density, WithChildren } from \"../..\";\n\nexport interface AccordionProps extends WithChildren {\n className?: string;\n density?: Density;\n id?: string;\n}\n\nexport const Accordion: FC<AccordionProps> = ({ className, density, id, ...rest }) => {\n return (\n <section\n role=\"group\"\n data-testid=\"jkl-accordion\"\n className={clsx(\"jkl-accordion\", className)}\n data-density={density}\n id={id}\n {...rest}\n />\n );\n};\n"],"names":["Accordion","className","density","id","rest","jsx","role","clsx"],"mappings":"sFAUa,MAAAA,EAAgC,EAAGC,UAAAA,EAAWC,QAAAA,EAASC,GAAAA,KAAOC,KAEnEC,EAAC,UAAA,CACGC,KAAK,QACL,cAAY,gBACZL,UAAWM,EAAK,gBAAiBN,GACjC,eAAcC,EACdC,GAAAA,KACIC"}
@@ -0,0 +1,2 @@
1
+ import{jsxs as o,jsx as i}from"react/jsx-runtime";import{c as n}from"../../../clsx-BeLtu-UY.js";import{useState as c}from"react";import{useAnimatedDetails as s}from"../../hooks/useAnimatedDetails/useAnimatedDetails.js";import"../../hooks/useScreen/useScreen.js";import"../../hooks/useId/useId.js";import"../icon/Icon.js";import{ArrowVerticalAnimated as r}from"../icon/icons/animated/ArrowVerticalAnimated.js";import"../icon/icons/animated/ArrowHorizontalAnimated.js";import"../icon/icons/animated/PlusRemoveAnimated.js";import"../icon/icons/ArrowDownIcon.js";import"../icon/icons/ArrowLeftIcon.js";import"../icon/icons/ArrowNorthEastIcon.js";import"../icon/icons/ArrowRightIcon.js";import"../icon/icons/ArrowUpIcon.js";import"../icon/icons/CalendarIcon.js";import"../icon/icons/CheckIcon.js";import"../icon/icons/ChevronDownIcon.js";import"../icon/icons/ChevronLeftIcon.js";import"../icon/icons/ChevronRightIcon.js";import"../icon/icons/ChevronUpIcon.js";import"../icon/icons/CloseIcon.js";import"../icon/icons/CopyIcon.js";import"../icon/icons/DotsIcon.js";import"../icon/icons/DragIcon.js";import"../icon/icons/ErrorIcon.js";import"../icon/icons/GreenCheckIcon.js";import"../icon/icons/HamburgerIcon.js";import"../icon/icons/InfoIcon.js";import"../icon/icons/LinkIcon.js";import"../icon/icons/PlusIcon.js";import"../icon/icons/QuestionIcon.js";import"../icon/icons/RedCrossIcon.js";import"../icon/icons/SearchIcon.js";import"../icon/icons/SuccessIcon.js";import"../icon/icons/WarningIcon.js";import"../icon/icons/MinusIcon.js";import"../icon/icons/ThumbDownIcon.js";import"../icon/icons/ThumbUpIcon.js";import"../icon/icons/TrashCanIcon.js";import"../icon/icons/PenIcon.js";const t=({children:t,title:e,className:m,startExpanded:a=!1,onClick:p,id:j,...d})=>{const[l,I]=c(a),[h]=c((()=>a)),{detailsRef:u,summaryRef:k,contentRef:A,onSummaryClick:w}=s({onOpenChange:(o,i)=>{I(o),p&&p(i,o)},isExpanded:h});return o("details",{"data-testid":"jkl-accordion-item",...d,className:n("jkl-accordion-item",m),ref:u,id:j,children:[o("summary",{"data-testid":"jkl-accordion-item__title",className:"jkl-accordion-item__title",onClick:w,ref:k,children:[e,i(r,{variant:"inherit",className:"jkl-accordion-item__arrow",pointingDown:!l,bold:l})]}),i("div",{"data-testid":"jkl-accordion-item__content-wrapper",className:"jkl-accordion-item__content-wrapper",ref:A,children:i("div",{className:"jkl-accordion-item__content",children:t})})]})};export{t as AccordionItem};
2
+ //# sourceMappingURL=AccordionItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccordionItem.js","sources":["../../../../src/components/accordion/AccordionItem.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { FC, useState } from \"react\";\nimport { WithChildren } from \"../..\";\nimport { useAnimatedDetails } from \"../../hooks\";\nimport { ArrowVerticalAnimated } from \"../icon\";\n\nexport interface AccordionItemProps extends WithChildren {\n title: string;\n startExpanded?: boolean;\n className?: string;\n onClick?: (e: React.MouseEvent, isOpen: boolean) => void;\n id?: string;\n}\n\nexport const AccordionItem: FC<AccordionItemProps> = ({\n children,\n title,\n className,\n startExpanded = false,\n onClick,\n id,\n ...rest\n}) => {\n const [isOpen, setIsOpen] = useState(startExpanded);\n const [expandOnMount] = useState(() => startExpanded);\n\n const { detailsRef, summaryRef, contentRef, onSummaryClick } = useAnimatedDetails({\n onOpenChange: (open, e) => {\n setIsOpen(open);\n if (onClick) {\n onClick(e, open);\n }\n },\n isExpanded: expandOnMount,\n });\n\n return (\n <details\n data-testid=\"jkl-accordion-item\"\n {...rest}\n className={clsx(\"jkl-accordion-item\", className)}\n ref={detailsRef}\n id={id}\n >\n <summary\n data-testid=\"jkl-accordion-item__title\"\n className=\"jkl-accordion-item__title\"\n onClick={onSummaryClick}\n ref={summaryRef}\n >\n {title}\n <ArrowVerticalAnimated\n variant=\"inherit\"\n className=\"jkl-accordion-item__arrow\"\n pointingDown={!isOpen}\n bold={isOpen}\n />\n </summary>\n <div\n data-testid=\"jkl-accordion-item__content-wrapper\"\n className=\"jkl-accordion-item__content-wrapper\"\n ref={contentRef}\n >\n <div className=\"jkl-accordion-item__content\">{children}</div>\n </div>\n </details>\n );\n};\n"],"names":["AccordionItem","children","title","className","startExpanded","onClick","id","rest","isOpen","setIsOpen","useState","expandOnMount","detailsRef","summaryRef","contentRef","onSummaryClick","useAnimatedDetails","onOpenChange","open","e","isExpanded","jsxs","clsx","ref","jsx","ArrowVerticalAnimated","variant","pointingDown","bold"],"mappings":"4oDAcO,MAAMA,EAAwC,EACjDC,SAAAA,EACAC,MAAAA,EACAC,UAAAA,EACAC,cAAAA,GAAgB,EAChBC,QAAAA,EACAC,GAAAA,KACGC,MAEG,MAACC,EAAQC,GAAaC,EAASN,IAC9BO,GAAiBD,GAAS,IAAMN,KAE/BQ,WAAAA,EAAYC,WAAAA,EAAYC,WAAAA,EAAYC,eAAAA,GAAmBC,EAAmB,CAC9EC,aAAc,CAACC,EAAMC,KACjBV,EAAUS,GACNb,GACAA,EAAQc,EAAGD,EAAI,EAGvBE,WAAYT,IAIZ,OAAAU,EAAC,UAAA,CACG,cAAY,wBACRd,EACJJ,UAAWmB,EAAK,qBAAsBnB,GACtCoB,IAAKX,EACLN,GAAAA,EAEAL,SAAA,CAAAoB,EAAC,UAAA,CACG,cAAY,4BACZlB,UAAU,4BACVE,QAASU,EACTQ,IAAKV,EAEJZ,SAAA,CAAAC,EACDsB,EAACC,EAAA,CACGC,QAAQ,UACRvB,UAAU,4BACVwB,cAAenB,EACfoB,KAAMpB,OAGdgB,EAAC,MAAA,CACG,cAAY,sCACZrB,UAAU,sCACVoB,IAAKT,EAELb,SAACuB,EAAA,MAAA,CAAIrB,UAAU,8BAA+BF,SAAAA,QAClD"}
@@ -0,0 +1,2 @@
1
+ import{AccordionItem as o}from"./AccordionItem.js";import{Accordion as c}from"./Accordion.js";export{c as Accordion,o as AccordionItem};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import{jsx as e,jsxs as a,Fragment as r}from"react/jsx-runtime";import{c as s}from"../../../clsx-BeLtu-UY.js";import t from"react";const l=({className:l,children:n,density:c,...i})=>{const m=t.Children.count(n);return e("nav",{"aria-label":"Sti",className:s("jkl-breadcrumb",l),"data-layout-density":c,...i,children:e("ol",{className:"jkl-breadcrumb__list",children:t.Children.map(n,((s,l)=>{const n=l+1===m;return a(r,{children:[t.isValidElement(s)?t.cloneElement(s,{isLastElement:n}):s,!n&&e("span",{className:"jkl-breadcrumb__item-separator","aria-hidden":"true",children:"›"})]})}))})})};export{l as Breadcrumb};
2
+ //# sourceMappingURL=Breadcrumb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Breadcrumb.js","sources":["../../../../src/components/breadcrumb/Breadcrumb.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React from \"react\";\nimport { Density, WithChildren } from \"../..\";\nimport { BreadcrumbItemProps } from \"./BreadcrumbItem\";\n\nexport interface BreadcrumbProps extends WithChildren {\n className?: string;\n density?: Density;\n}\n\nexport const Breadcrumb = ({ className, children, density, ...rest }: BreadcrumbProps): JSX.Element => {\n const numberOfChildren = React.Children.count(children);\n return (\n <nav aria-label=\"Sti\" className={clsx(\"jkl-breadcrumb\", className)} data-layout-density={density} {...rest}>\n <ol className=\"jkl-breadcrumb__list\">\n {React.Children.map(children, (child, index) => {\n const isLastElement = index + 1 === numberOfChildren;\n return (\n <>\n {React.isValidElement<BreadcrumbItemProps>(child)\n ? React.cloneElement<BreadcrumbItemProps>(child, {\n isLastElement,\n })\n : child}\n {!isLastElement && (\n <span className=\"jkl-breadcrumb__item-separator\" aria-hidden=\"true\">\n ›\n </span>\n )}\n </>\n );\n })}\n </ol>\n </nav>\n );\n};\n"],"names":["Breadcrumb","className","children","density","rest","numberOfChildren","React","Children","count","jsx","clsx","map","child","index","isLastElement","jsxs","Fragment","isValidElement","cloneElement"],"mappings":"mIAUa,MAAAA,EAAa,EAAGC,UAAAA,EAAWC,SAAAA,EAAUC,QAAAA,KAAYC,MAC1D,MAAMC,EAAmBC,EAAMC,SAASC,MAAMN,GAE1C,OAAAO,EAAC,OAAI,aAAW,MAAMR,UAAWS,EAAK,iBAAkBT,GAAY,sBAAqBE,KAAaC,EAClGF,SAAAO,EAAC,KAAG,CAAAR,UAAU,uBACTC,SAAAI,EAAMC,SAASI,IAAIT,GAAU,CAACU,EAAOC,KAC5BC,MAAAA,EAAgBD,EAAQ,IAAMR,EACpC,OAESU,EAAAC,EAAA,CAAAd,SAAA,CAAAI,EAAMW,eAAoCL,GACrCN,EAAMY,aAAkCN,EAAO,CAC3CE,cAAAA,IAEJF,GACJE,GACGL,EAAA,OAAA,CAAKR,UAAU,iCAAiC,cAAY,OAAOC,SAEpE,QAER,OAIhB"}
@@ -0,0 +1,2 @@
1
+ import{jsx as e}from"react/jsx-runtime";import{c as r}from"../../../clsx-BeLtu-UY.js";import a from"react";const m=({className:m,children:s,isLastElement:l,...i})=>e("li",{className:r("jkl-breadcrumb__item",m),...i,children:a.Children.map(s,(e=>a.isValidElement(e)?a.cloneElement(e,{"aria-current":l?"page":void 0,className:"jkl-link"}):e))});export{m as BreadcrumbItem};
2
+ //# sourceMappingURL=BreadcrumbItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BreadcrumbItem.js","sources":["../../../../src/components/breadcrumb/BreadcrumbItem.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { AnchorHTMLAttributes } from \"react\";\nimport { WithChildren } from \"../..\";\n\nexport interface BreadcrumbItemProps extends WithChildren {\n className?: string;\n /**\n * Settes automatisk av Breadcrumb\n * @default false\n */\n isLastElement?: boolean;\n}\n\nexport const BreadcrumbItem = ({ className, children, isLastElement, ...rest }: BreadcrumbItemProps): JSX.Element => {\n return (\n <li className={clsx(\"jkl-breadcrumb__item\", className)} {...rest}>\n {React.Children.map(children, (child) => {\n if (React.isValidElement<AnchorHTMLAttributes<HTMLAnchorElement>>(child)) {\n return React.cloneElement<AnchorHTMLAttributes<HTMLAnchorElement>>(child, {\n \"aria-current\": isLastElement ? \"page\" : undefined,\n className: \"jkl-link\",\n });\n } else {\n return child;\n }\n })}\n </li>\n );\n};\n"],"names":["BreadcrumbItem","className","children","isLastElement","rest","jsx","clsx","React","Children","map","child","isValidElement","cloneElement"],"mappings":"2GAaa,MAAAA,EAAiB,EAAGC,UAAAA,EAAWC,SAAAA,EAAUC,cAAAA,KAAkBC,KAE/DC,EAAA,KAAA,CAAGJ,UAAWK,EAAK,uBAAwBL,MAAgBG,EACvDF,SAAMK,EAAAC,SAASC,IAAIP,GAAWQ,GACvBH,EAAMI,eAAwDD,GACvDH,EAAMK,aAAsDF,EAAO,CACtE,eAAgBP,EAAgB,YAAS,EACzCF,UAAW,aAGRS"}
@@ -0,0 +1,2 @@
1
+ import{Breadcrumb as r}from"./Breadcrumb.js";import{BreadcrumbItem as m}from"./BreadcrumbItem.js";export{r as Breadcrumb,m as BreadcrumbItem};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import{jsx as t,jsxs as o}from"react/jsx-runtime";import{c as e}from"../../../clsx-BeLtu-UY.js";import r,{useCallback as n}from"react";import"../../hooks/useScreen/useScreen.js";import{useAriaLiveRegion as s}from"../../hooks/useAriaLiveRegion/useAriaLiveRegion.js";import"../../hooks/useId/useId.js";import{Loader as a}from"../loader/Loader.js";const i=r.forwardRef((function(r,i){const{as:c="button",children:l,className:u,density:d,onTouchStart:h,loader:m,iconLeft:j,iconRight:p,variant:k="secondary",...y}=r,b=c,v=n((t=>{h&&h(t);const o=t.target;if(o&&t.targetTouches.length){const e=t.targetTouches[0].clientX-o.getBoundingClientRect().x,r=t.targetTouches[0].clientY-o.getBoundingClientRect().y;o.style.setProperty("--jkl-touch-xcoord",e.toPrecision(4)+"px"),o.style.setProperty("--jkl-touch-ycoord",r.toPrecision(4)+"px"),o.classList.add("jkl-button--pressed"),setTimeout((()=>{o.classList.remove("jkl-button--pressed"),o.style.removeProperty("--jkl-touch-xcoord"),o.style.removeProperty("--jkl-touch-ycoord")}),400)}}),[h]),f=s(null==m?void 0:m.showLoader);return t(b,{...f,"data-density":d,className:e("jkl-button","jkl-button--"+k,u,{"jkl-button--icon-left":j,"jkl-button--icon-right":p}),disabled:"button"===c?null==m?void 0:m.showLoader:void 0,onTouchStart:v,...y,ref:i,children:t("div",{className:"jkl-button__content",children:o("div",{className:e("jkl-button__slider",{"jkl-button__slider--show-loader":!(null==m||!m.showLoader)}),children:[j&&t("span",{className:"jkl-button__icon",children:j}),t("span",{className:"jkl-button__children",children:l}),p&&t("span",{className:"jkl-button__icon",children:p}),m&&t("div",{className:"jkl-button__loader",children:t(a,{textDescription:m.textDescription,"aria-hidden":!m.showLoader})})]})})})}));function c(o){const e={...o,variant:"primary"};return t(i,{...e})}function l(o){const e={...o,variant:"secondary"};return t(i,{...e})}function u(o){const e={...o,variant:"tertiary"};return t(i,{...e})}function d(o){const e={...o,variant:"ghost"};return t(i,{...e})}export{i as Button,d as GhostButton,c as PrimaryButton,l as SecondaryButton,u as TertiaryButton};
2
+ //# sourceMappingURL=Button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.js","sources":["../../../../src/components/button/Button.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { ButtonHTMLAttributes, type TouchEvent, useCallback } from \"react\";\nimport type { PolymorphicRef } from \"../..\";\nimport { useAriaLiveRegion } from \"../../hooks\";\nimport { Loader } from \"../loader\";\nimport type { ButtonComponent, ButtonProps } from \"./types\";\n\nexport const Button = React.forwardRef(function Button<ElementType extends React.ElementType = \"button\">(\n props: ButtonProps<ElementType>,\n ref?: PolymorphicRef<ElementType>,\n) {\n const {\n as = \"button\",\n children,\n className,\n density,\n onTouchStart,\n loader,\n iconLeft,\n iconRight,\n variant = \"secondary\",\n ...rest\n } = props;\n\n const Component = as;\n\n const handleTouch = useCallback(\n (event: TouchEvent<HTMLButtonElement>) => {\n onTouchStart && onTouchStart(event);\n\n const target = event.target as HTMLButtonElement;\n if (target && event.targetTouches.length) {\n const Xcoord = event.targetTouches[0].clientX - target.getBoundingClientRect().x;\n const Ycoord = event.targetTouches[0].clientY - target.getBoundingClientRect().y;\n target.style.setProperty(\"--jkl-touch-xcoord\", Xcoord.toPrecision(4) + \"px\");\n target.style.setProperty(\"--jkl-touch-ycoord\", Ycoord.toPrecision(4) + \"px\");\n target.classList.add(\"jkl-button--pressed\");\n\n setTimeout(() => {\n target.classList.remove(\"jkl-button--pressed\");\n target.style.removeProperty(\"--jkl-touch-xcoord\");\n target.style.removeProperty(\"--jkl-touch-ycoord\");\n }, 400);\n }\n },\n [onTouchStart],\n );\n\n const ariaLive = useAriaLiveRegion(loader?.showLoader);\n\n return (\n <Component\n {...ariaLive}\n data-density={density}\n className={clsx(\"jkl-button\", \"jkl-button--\" + variant, className, {\n \"jkl-button--icon-left\": iconLeft,\n \"jkl-button--icon-right\": iconRight,\n })}\n disabled={as === \"button\" ? loader?.showLoader : undefined}\n onTouchStart={handleTouch}\n {...rest}\n ref={ref}\n >\n <div className=\"jkl-button__content\">\n <div\n className={clsx(\"jkl-button__slider\", {\n \"jkl-button__slider--show-loader\": !!loader?.showLoader,\n })}\n >\n {iconLeft && <span className=\"jkl-button__icon\">{iconLeft}</span>}\n <span className=\"jkl-button__children\">{children}</span>\n {iconRight && <span className=\"jkl-button__icon\">{iconRight}</span>}\n\n {loader && (\n <div className=\"jkl-button__loader\">\n <Loader textDescription={loader.textDescription} aria-hidden={!loader.showLoader} />\n </div>\n )}\n </div>\n </div>\n </Component>\n );\n}) as ButtonComponent;\n\nexport function PrimaryButton<ElementType extends React.ElementType = \"button\">(\n props: Omit<ButtonProps<ElementType>, \"variant\" | \"onClick\" | \"as\"> &\n Pick<ButtonHTMLAttributes<HTMLButtonElement>, \"onClick\">,\n) {\n const buttonProps = { ...props, variant: \"primary\" } as ButtonProps<ElementType>;\n return <Button {...buttonProps} />;\n}\n\nexport function SecondaryButton<ElementType extends React.ElementType = \"button\">(\n props: Omit<ButtonProps<ElementType>, \"variant\" | \"onClick\" | \"as\"> &\n Pick<ButtonHTMLAttributes<HTMLButtonElement>, \"onClick\">,\n) {\n const buttonProps = { ...props, variant: \"secondary\" } as ButtonProps<ElementType>;\n return <Button {...buttonProps} />;\n}\n\nexport function TertiaryButton<ElementType extends React.ElementType = \"button\">(\n props: Omit<ButtonProps<ElementType>, \"variant\" | \"onClick\" | \"as\"> &\n Pick<ButtonHTMLAttributes<HTMLButtonElement>, \"onClick\">,\n) {\n const buttonProps = { ...props, variant: \"tertiary\" } as ButtonProps<ElementType>;\n return <Button {...buttonProps} />;\n}\n\nexport function GhostButton<ElementType extends React.ElementType = \"button\">(\n props: Omit<ButtonProps<ElementType>, \"variant\" | \"loader\">,\n) {\n const buttonProps = { ...props, variant: \"ghost\" } as ButtonProps<ElementType>;\n return <Button {...buttonProps} />;\n}\n"],"names":["Button","React","forwardRef","props","ref","as","children","className","density","onTouchStart","loader","iconLeft","iconRight","variant","rest","Component","handleTouch","useCallback","event","target","targetTouches","length","Xcoord","clientX","getBoundingClientRect","x","Ycoord","clientY","y","style","setProperty","toPrecision","classList","add","setTimeout","remove","removeProperty","ariaLive","useAriaLiveRegion","showLoader","jsx","clsx","disabled","jsxs","Loader","textDescription","PrimaryButton","buttonProps","SecondaryButton","TertiaryButton","GhostButton"],"mappings":"yVAOO,MAAMA,EAASC,EAAMC,YAAW,SACnCC,EACAC,GAEM,MACFC,GAAAA,EAAK,SACLC,SAAAA,EACAC,UAAAA,EACAC,QAAAA,EACAC,aAAAA,EACAC,OAAAA,EACAC,SAAAA,EACAC,UAAAA,EACAC,QAAAA,EAAU,eACPC,GACHX,EAEEY,EAAYV,EAEZW,EAAcC,GACfC,IACGT,GAAgBA,EAAaS,GAE7B,MAAMC,EAASD,EAAMC,OACjBA,GAAAA,GAAUD,EAAME,cAAcC,OAAQ,CAChC,MAAAC,EAASJ,EAAME,cAAc,GAAGG,QAAUJ,EAAOK,wBAAwBC,EACzEC,EAASR,EAAME,cAAc,GAAGO,QAAUR,EAAOK,wBAAwBI,EAC/ET,EAAOU,MAAMC,YAAY,qBAAsBR,EAAOS,YAAY,GAAK,MACvEZ,EAAOU,MAAMC,YAAY,qBAAsBJ,EAAOK,YAAY,GAAK,MAChEZ,EAAAa,UAAUC,IAAI,uBAErBC,YAAW,KACAf,EAAAa,UAAUG,OAAO,uBACjBhB,EAAAU,MAAMO,eAAe,sBACrBjB,EAAAU,MAAMO,eAAe,qBAAoB,GACjD,IACP,IAEJ,CAAC3B,IAGC4B,EAAWC,EAAkB,MAAA5B,OAAA,EAAAA,EAAQ6B,YAGvC,OAAAC,EAACzB,EAAA,IACOsB,EACJ,eAAc7B,EACdD,UAAWkC,EAAK,aAAc,eAAiB5B,EAASN,EAAW,CAC/D,wBAAyBI,EACzB,yBAA0BC,IAE9B8B,SAAiB,WAAPrC,EAAkB,MAAAK,OAAA,EAAAA,EAAQ6B,gBAAa,EACjD9B,aAAcO,KACVF,EACJV,IAAAA,EAEAE,SAAAkC,EAAC,MAAI,CAAAjC,UAAU,sBACXD,SAAAqC,EAAC,MAAA,CACGpC,UAAWkC,EAAK,qBAAsB,CAClC,oCAAqC,MAAA/B,IAAAA,EAAQ6B,cAGhDjC,SAAA,CAAAK,GAAa6B,EAAA,OAAA,CAAKjC,UAAU,mBAAoBD,SAASK,IACzD6B,EAAA,OAAA,CAAKjC,UAAU,uBAAwBD,SAAAA,IACvCM,GAAa4B,EAAC,OAAK,CAAAjC,UAAU,mBAAoBD,SAAUM,IAE3DF,GACG8B,EAAC,MAAI,CAAAjC,UAAU,qBACXD,SAACkC,EAAAI,EAAA,CAAOC,gBAAiBnC,EAAOmC,gBAAiB,eAAcnC,EAAO6B,qBAOlG,IAEO,SAASO,EACZ3C,GAGA,MAAM4C,EAAc,IAAK5C,EAAOU,QAAS,WAClC,OAAA2B,EAACxC,EAAQ,IAAG+C,GACvB,CAEO,SAASC,EACZ7C,GAGA,MAAM4C,EAAc,IAAK5C,EAAOU,QAAS,aAClC,OAAA2B,EAACxC,EAAQ,IAAG+C,GACvB,CAEO,SAASE,EACZ9C,GAGA,MAAM4C,EAAc,IAAK5C,EAAOU,QAAS,YAClC,OAAA2B,EAACxC,EAAQ,IAAG+C,GACvB,CAEO,SAASG,EACZ/C,GAEA,MAAM4C,EAAc,IAAK5C,EAAOU,QAAS,SAClC,OAAA2B,EAACxC,EAAQ,IAAG+C,GACvB"}
@@ -0,0 +1,2 @@
1
+ import{Button as t,PrimaryButton as a,SecondaryButton as o,TertiaryButton as r}from"./Button.js";export{t as Button,a as PrimaryButton,o as SecondaryButton,r as TertiaryButton};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ const t=["primary","secondary","tertiary","ghost"];export{t as buttonVariants};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sources":["../../../../src/components/button/types.ts"],"sourcesContent":["import { Density, PolymorphicPropsWithRef } from \"../..\";\n\nexport const buttonVariants = [\"primary\", \"secondary\", \"tertiary\", \"ghost\"] as const;\nexport type ButtonVariant = (typeof buttonVariants)[number];\n\nexport type ButtonProps<ElementType extends React.ElementType> = PolymorphicPropsWithRef<\n ElementType,\n {\n density?: Density;\n /**\n * Hvilken variant av knappen skal vises\n * @default \"secondary\"\n */\n variant?: ButtonVariant;\n className?: string;\n loader?: {\n showLoader: boolean;\n textDescription: string;\n };\n iconLeft?: React.ReactNode;\n iconRight?: React.ReactNode;\n }\n>;\n\nexport type ButtonComponent = <ElementType extends React.ElementType = \"button\">(\n props: ButtonProps<ElementType>,\n) => React.ReactElement | null;\n"],"names":["buttonVariants"],"mappings":"AAEO,MAAMA,EAAiB,CAAC,UAAW,YAAa,WAAY"}
@@ -0,0 +1,2 @@
1
+ import{jsxs as e,jsx as c}from"react/jsx-runtime";import{c as a}from"../../../clsx-BeLtu-UY.js";import{forwardRef as s,useRef as t,useImperativeHandle as n,useEffect as r}from"react";import"../../hooks/useScreen/useScreen.js";import{useId as i}from"../../hooks/useId/useId.js";const o=s(((s,o)=>{const{id:l,children:d,invalid:k,className:h,inline:m=!1,density:x,"data-testautoid":u,checked:b,indeterminate:p,...j}=s,_=t(null);n(o,(()=>_.current),[]);const f=i(l||"jkl-checkbox",{generateSuffix:!l});return r((()=>{!0===b&&!0===p&&"production"!==process.env.NODE_ENV&&console.warn("A Checkbox can not be both checked and indeterminate, and will be treated as checked"),_.current&&(_.current.indeterminate=!b&&!!p)}),[b,p]),e("div",{className:a("jkl-checkbox",h,{"jkl-checkbox--inline":m,"jkl-checkbox--error":k}),"data-density":x,children:[c("input",{id:f,ref:_,className:"jkl-checkbox__input","data-testid":"jkl-checkbox-input","aria-invalid":k,type:"checkbox","data-testautoid":u,checked:b,...j}),e("label",{htmlFor:f,className:"jkl-checkbox__label",children:[e("span",{className:"jkl-checkbox__mark",children:[c("span",{className:"jkl-checkbox__indeterminate-mark"}),c("span",{className:"jkl-checkbox__check-mark"})]}),c("span",{className:"jkl-checkbox__text",children:d})]})]})}));o.displayName="Checkbox";export{o as Checkbox};
2
+ //# sourceMappingURL=Checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.js","sources":["../../../../src/components/checkbox/Checkbox.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, {\n ReactNode,\n forwardRef,\n ChangeEventHandler,\n FocusEventHandler,\n InputHTMLAttributes,\n useEffect,\n useImperativeHandle,\n useRef,\n} from \"react\";\nimport { DataTestAutoId, Density } from \"../..\";\nimport { useId } from \"../../hooks\";\n\nexport interface CheckboxProps extends DataTestAutoId, InputHTMLAttributes<HTMLInputElement> {\n children: ReactNode;\n name: string;\n value: string;\n checked?: boolean;\n inline?: boolean;\n className?: string;\n density?: Density;\n invalid?: boolean;\n onChange?: ChangeEventHandler<HTMLInputElement>;\n onFocus?: FocusEventHandler<HTMLInputElement>;\n onBlur?: FocusEventHandler<HTMLInputElement>;\n indeterminate?: boolean;\n}\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>((props, ref) => {\n const {\n id,\n children,\n invalid,\n className,\n inline = false,\n density,\n \"data-testautoid\": testAutoId,\n checked,\n indeterminate,\n ...rest\n } = props;\n\n const inputRef = useRef<HTMLInputElement>(null);\n useImperativeHandle(ref, () => inputRef.current!, []);\n\n const inputId = useId(id || \"jkl-checkbox\", { generateSuffix: !id });\n\n useEffect(() => {\n if (checked === true && indeterminate === true && process.env.NODE_ENV !== \"production\") {\n console.warn(\"A Checkbox can not be both checked and indeterminate, and will be treated as checked\");\n }\n if (inputRef.current) {\n inputRef.current.indeterminate = !checked && !!indeterminate;\n }\n }, [checked, indeterminate]);\n\n return (\n <div\n className={clsx(\"jkl-checkbox\", className, {\n \"jkl-checkbox--inline\": inline,\n \"jkl-checkbox--error\": invalid,\n })}\n data-density={density}\n >\n <input\n id={inputId}\n ref={inputRef}\n className=\"jkl-checkbox__input\"\n data-testid=\"jkl-checkbox-input\"\n aria-invalid={invalid}\n type=\"checkbox\"\n data-testautoid={testAutoId}\n checked={checked}\n {...rest}\n />\n <label htmlFor={inputId} className=\"jkl-checkbox__label\">\n <span className=\"jkl-checkbox__mark\">\n <span className=\"jkl-checkbox__indeterminate-mark\" />\n <span className=\"jkl-checkbox__check-mark\" />\n </span>\n <span className=\"jkl-checkbox__text\">{children}</span>\n </label>\n </div>\n );\n});\n\nCheckbox.displayName = \"Checkbox\";\n"],"names":["Checkbox","forwardRef","props","ref","id","children","invalid","className","inline","density","testAutoId","checked","indeterminate","rest","inputRef","useRef","useImperativeHandle","current","inputId","useId","generateSuffix","useEffect","process","env","NODE_ENV","console","warn","jsxs","clsx","jsx","type","htmlFor","displayName"],"mappings":"qRA6BO,MAAMA,EAAWC,GAA4C,CAACC,EAAOC,KAClE,MACFC,GAAAA,EACAC,SAAAA,EACAC,QAAAA,EACAC,UAAAA,EACAC,OAAAA,GAAS,EACTC,QAAAA,EACA,kBAAmBC,EACnBC,QAAAA,EACAC,cAAAA,KACGC,GACHX,EAEEY,EAAWC,EAAyB,MAC1CC,EAAoBb,GAAK,IAAMW,EAASG,SAAU,IAE5CC,MAAAA,EAAUC,EAAMf,GAAM,eAAgB,CAAEgB,gBAAiBhB,IAE/D,OAAAiB,GAAU,MACU,IAAZV,IAAsC,IAAlBC,GAAmD,eAAzBU,QAAQC,IAAIC,UAC1DC,QAAQC,KAAK,wFAEbZ,EAASG,UACTH,EAASG,QAAQL,eAAiBD,KAAaC,EAAAA,GAEpD,CAACD,EAASC,IAGTe,EAAC,MAAA,CACGpB,UAAWqB,EAAK,eAAgBrB,EAAW,CACvC,uBAAwBC,EACxB,sBAAuBF,IAE3B,eAAcG,EAEdJ,SAAA,CAAAwB,EAAC,QAAA,CACGzB,GAAIc,EACJf,IAAKW,EACLP,UAAU,sBACV,cAAY,qBACZ,eAAcD,EACdwB,KAAK,WACL,kBAAiBpB,EACjBC,QAAAA,KACIE,IAEPc,EAAA,QAAA,CAAMI,QAASb,EAASX,UAAU,sBAC/BF,SAAA,CAACsB,EAAA,OAAA,CAAKpB,UAAU,qBACZF,SAAA,CAACwB,EAAA,OAAA,CAAKtB,UAAU,qCAChBsB,EAAC,OAAK,CAAAtB,UAAU,gCAEnBsB,EAAA,OAAA,CAAKtB,UAAU,qBAAsBF,SAAAA,SAC1C,IAKZL,EAASgC,YAAc"}
@@ -0,0 +1,2 @@
1
+ import{Checkbox as o}from"./Checkbox.js";export{o as Checkbox};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import{jsx as o,jsxs as e}from"react/jsx-runtime";import{c as n}from"../../../clsx-BeLtu-UY.js";import{useState as t,useRef as i,useEffect as r,useCallback as a,useMemo as s}from"react";import{useAnimatedHeight as c}from"../../hooks/useAnimatedHeight/useAnimatedHeight.js";import"../../hooks/useScreen/useScreen.js";import{useId as l}from"../../hooks/useId/useId.js";import{useListNavigation as u}from"../../hooks/useListNavigation/useListNavigation.js";import"../icon/Icon.js";import{ArrowVerticalAnimated as p}from"../icon/icons/animated/ArrowVerticalAnimated.js";import"../icon/icons/animated/ArrowHorizontalAnimated.js";import"../icon/icons/animated/PlusRemoveAnimated.js";import"../icon/icons/ArrowDownIcon.js";import"../icon/icons/ArrowLeftIcon.js";import"../icon/icons/ArrowNorthEastIcon.js";import"../icon/icons/ArrowRightIcon.js";import"../icon/icons/ArrowUpIcon.js";import"../icon/icons/CalendarIcon.js";import{CheckIcon as m}from"../icon/icons/CheckIcon.js";import"../icon/icons/ChevronDownIcon.js";import"../icon/icons/ChevronLeftIcon.js";import"../icon/icons/ChevronRightIcon.js";import"../icon/icons/ChevronUpIcon.js";import"../icon/icons/CloseIcon.js";import"../icon/icons/CopyIcon.js";import"../icon/icons/DotsIcon.js";import"../icon/icons/DragIcon.js";import"../icon/icons/ErrorIcon.js";import"../icon/icons/GreenCheckIcon.js";import"../icon/icons/HamburgerIcon.js";import"../icon/icons/InfoIcon.js";import"../icon/icons/LinkIcon.js";import"../icon/icons/PlusIcon.js";import"../icon/icons/QuestionIcon.js";import"../icon/icons/RedCrossIcon.js";import"../icon/icons/SearchIcon.js";import"../icon/icons/SuccessIcon.js";import"../icon/icons/WarningIcon.js";import"../icon/icons/MinusIcon.js";import"../icon/icons/ThumbDownIcon.js";import"../icon/icons/ThumbUpIcon.js";import"../icon/icons/TrashCanIcon.js";import"../icon/icons/PenIcon.js";import{IconButton as d}from"../icon-button/IconButton.js";import{Tooltip as b}from"../tooltip/Tooltip.js";import{TooltipContent as j}from"../tooltip/TooltipContent.js";import{TooltipTrigger as v}from"../tooltip/TooltipTrigger.js";import{InputGroup as h}from"../input-group/InputGroup.js";import{Tag as f}from"../tag/Tag.js";function g(o){return"string"==typeof o?{value:o,label:o}:o}const k=({id:k,placeholder:_,items:I,onChange:x,onFocus:w,onBlur:y,value:C,label:A,noMatchingOption:L,labelProps:T,helpLabel:N,errorLabel:$,width:D,density:P,name:B,className:E,invalid:S,hasTagHover:F})=>{var M,O;const H=l(k||"jkl-combobox",{generateSuffix:!k}),K=`${H}_label`,R=`${H}_button`,V=`${H}_search-input`,[U,G]=t(C||[]),[q,z]=t(!0),[Q,W]=t(!1),[J,X]=t(""),[Y,Z]=t(!1),[oo,eo]=t(!1),no=i(null),to=i(null),io=i(!1);r((()=>{X(""),Q&&no.current&&no.current.focus()}),[Q]),r((()=>{G((o=>C||o))}),[C]);const ro=o=>!!U&&U.some((e=>e.value===o.value)),ao=a((o=>U.filter((e=>e.value!==o))),[U]),so=a(((o,e)=>{let n=ao(e);G(n),x({type:"change",target:{name:B,value:e,selectedOptions:n}}),o.stopPropagation(),0===n.length&&eo(!1)}),[ao,G,x,B,eo]),co=a((o=>{var e;let n;if(U.some((e=>e.value===o)))n=ao(o);else{const e=I.find((e=>e.value===o));n=[...U,e]}null==(e=no.current)||e.focus(),G(n),x({type:"change",target:{name:B,value:o,selectedOptions:n}})}),[U,G,x,B,ao,I]),lo=o=>{var e;null==(e=no.current)||e.focus(),W(!0),X(o.target.value)},uo=s((()=>{if(!J)return I;const o=I.filter((o=>o.label.toLowerCase().indexOf(J.toLowerCase())>=0));return Z(0===o.length),o}),[J,I]),[po,mo]=t(null!=(M=uo[0])&&M.value?`${H}-${null==(O=uo[0])?void 0:O.value}`:void 0);r((()=>{z(!Q)}),[Q]),r((()=>{const o=o=>{"Escape"===o.key&&Q&&W(!1)};return typeof window<"u"&&window.addEventListener("keydown",o),()=>{typeof window<"u"&&Q&&window.removeEventListener("keydown",o)}}),[W,Q]);const bo=a((o=>{o?no.current&&no.current.focus():io.current&&to.current&&to.current.focus()}),[]),jo=a((()=>{io.current||(w&&w({type:"change",target:{name:B,value:(null==U?void 0:U[0].value)||"",selectedOptions:U}}),io.current=!0,W(!0))}),[w,U,B]),[vo]=c(Q,{onFirstVisible:bo,onTransitionEnd:bo});u({ref:vo});const ho=i(null),fo=a((o=>{var e,n;const t=ho.current;t&&t.contains(o.relatedTarget)||(X(""),y&&(y({type:"blur",target:{name:B,value:(null==(e=null==U?void 0:U[0])?void 0:e.value)||"",selectedOptions:U}}),null==(n=to.current)||n.dispatchEvent(new Event("focusout",{bubbles:!0}))),io.current=!1,W(!1))}),[y,B,U]),go=a((o=>{o.target.focus({preventScroll:!0})}),[]),ko=a((o=>{var e;if("ArrowDown"===o.key){o.preventDefault(),o.stopPropagation();const n=vo.current;n&&(null==(e=n.querySelector('[role="option"]'))||e.focus())}else"Escape"===o.key&&(o.preventDefault(),o.stopPropagation(),W(!1));if(o.metaKey&&"a"===o.key||o.ctrlKey&&"a"===o.key){o.preventDefault(),o.stopPropagation();const e=U.map((o=>({...o,isMarked:!0})));eo(!0),G(e)}else if("Backspace"===o.key)if(o.stopPropagation(),eo(!1),U.some((o=>o.isMarked))){const o=U.filter((o=>!o.isMarked));G(o),X("")}else U.length>0&&""===J&&so(o,U[U.length-1].value)}),[U,J,vo,so]),_o=a((o=>{if("Tab"===o.key)no.current&&(o.preventDefault(),o.stopPropagation(),o.shiftKey||W(!1),no.current.focus());else if("ArrowUp"===o.key&&vo.current&&no.current){const e=vo.current.querySelector('[role="option"]:not([hidden])');o.currentTarget.id===(null==e?void 0:e.id)&&no.current&&no.current.focus()}}),[W,vo]),Io=U.length>=1;return o(h,{label:A,id:V,ref:ho,"data-testid":"jkl-combobox",className:n("jkl-combobox",E,{"jkl-combobox--invalid":!!$||S,"jkl-combobox--menu-open":Q,"jkl-combobox--menu-closed":!Q&&Io}),labelProps:{id:K,...T},helpLabel:N,errorLabel:$,density:P,render:t=>e("div",{className:n("jkl-combobox__wrapper",{"jkl-combobox__wrapper--active-value":Io}),style:{width:D},tabIndex:-1,onFocus:jo,onBlur:fo,children:[e("div",{className:"jkl-combobox__tags","data-testid":"jkl-combobox__tags",children:[U.map(g).map((n=>o(f,{className:`jkl-tag ${oo&&"jkl-tag__marked"}`,"data-testid":"jkl-tag",dismissAction:{onClick:o=>{no.current&&no.current.focus(),so(o,n.value)},onBlur:fo,label:`Fjern ${n.value}`},children:F?e(b,{children:[e(v,{children:[" ",o("span",{"aria-hidden":"true","data-testid":"jkl-tag__content",children:n.tagLabel?n.tagLabel:n.label})]}),o(j,{children:n.label})]},n.value):o("span",{"aria-hidden":"true","data-testid":"jkl-tag__content",children:n.tagLabel?n.tagLabel:n.label})},n.value))),o("input",{...t,className:"jkl-combobox__search-input",onChange:lo,"data-testid":"jkl-combobox__search-input",onFocus:jo,onBlur:fo,onKeyDown:ko,value:J,ref:no,"aria-controls":H,role:"combobox","aria-autocomplete":"list","aria-expanded":Q,placeholder:U.length>0?"":_,autoComplete:"off"})]}),e("div",{className:"jkl-combobox__menu",role:"listbox",ref:vo,id:H,"aria-labelledby":K,"aria-multiselectable":"true","aria-activedescendant":po,onFocus:jo,onBlur:fo,tabIndex:-1,children:[uo.map(((n,t)=>e("button",{type:"button",id:`${H}__${n.value}`,"aria-selected":ro(n),role:"option",value:n.value,onBlur:fo,className:`jkl-combobox__option ${ro(n)&&"jkl-combobox__option--selected"}`,"data-testid":"jkl-combobox__option","data-testautoid":`jkl-combobox__option-${t}`,onFocus:jo,onKeyDown:_o,onClick:o=>{mo(`${H}__${n.value}`),o.stopPropagation(),co(n.value),X("")},onMouseOver:go,children:[n.description?e("span",{children:[n.label,o("span",{className:"jkl-combobox__option-description",children:n.description})]}):n.label,ro(n)?e("span",{children:[o(m,{})," "]}):null]},`${H}-${n.value}`))),Y&&o("div",{className:"jkl-combobox__no-option",children:L})]}),o("div",{className:"jkl-combobox__actions",children:o(d,{id:R,onFocus:jo,onBlur:fo,className:"jkl-combobox__button","data-testid":"jkl-combobox__button","aria-label":`${U.map((o=>o.label))||"Velg"},${A}`,"aria-expanded":Q,"aria-controls":H,role:"button",onClick:()=>W(!0),onMouseDown:o=>{var e;o.preventDefault(),null==(e=to.current)||e.focus()},children:o(p,{pointingDown:q})})})]})})};k.displayName="Combobox";export{k as Combobox,g as getComboboxValuePair};
2
+ //# sourceMappingURL=Combobox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Combobox.js","sources":["../../../../src/components/combobox/Combobox.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, {\n FC,\n useEffect,\n useRef,\n useState,\n useCallback,\n KeyboardEvent,\n ChangeEvent,\n FocusEvent,\n MouseEvent,\n useMemo,\n} from \"react\";\nimport { ValuePair, Density } from \"../..\";\nimport { useId, useAnimatedHeight, useListNavigation } from \"../../hooks\";\nimport { ArrowVerticalAnimated, CheckIcon } from \"../icon\";\nimport { IconButton } from \"../icon-button\";\nimport { InputGroup, InputGroupProps, type LabelProps } from \"../input-group\";\nimport { Tag } from \"../tag\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../tooltip\";\n\nexport type ComboboxValuePair = ValuePair & {\n tagLabel?: string;\n isMarked?: boolean;\n};\n\nexport function getComboboxValuePair(item: string | ComboboxValuePair): ComboboxValuePair {\n return typeof item === \"string\" ? { value: item, label: item } : item;\n}\n\ninterface PartialChangeEvent extends Partial<Omit<ChangeEvent<HTMLElement>, \"target\">> {\n type: \"change\" | \"blur\";\n target: {\n name: string;\n value: string;\n selectedOptions: Array<ValuePair>;\n };\n}\n\ntype ChangeEventHandler = (event: PartialChangeEvent) => void;\n\ninterface ComboboxProps extends InputGroupProps {\n id?: string;\n placeholder?: string;\n labelProps?: Omit<LabelProps, \"children\" | \"density\" | \"htmlFor\" | \"standAlone\">;\n items: Array<ValuePair>;\n noMatchingOption?: string;\n label: string;\n name: string;\n value?: Array<ValuePair>;\n density?: Density;\n width?: string;\n helpLabel?: string;\n errorLabel?: string;\n className?: string;\n invalid?: boolean;\n hasTagHover?: boolean;\n onChange: ChangeEventHandler;\n onBlur?: ChangeEventHandler;\n onFocus?: ChangeEventHandler;\n}\n\nexport const Combobox: FC<ComboboxProps> = ({\n id,\n placeholder,\n items,\n onChange,\n onFocus,\n onBlur,\n value,\n label,\n noMatchingOption,\n labelProps,\n helpLabel,\n errorLabel,\n width,\n density,\n name,\n className,\n invalid,\n hasTagHover,\n}) => {\n const listId = useId(id || \"jkl-combobox\", { generateSuffix: !id });\n const labelId = `${listId}_label`;\n const buttonId = `${listId}_button`;\n const inputId = `${listId}_search-input`;\n\n const [selectedValue, setSelectedValue] = useState<Array<ComboboxValuePair>>(value || []);\n const [isPointingDown, setIsPointingDown] = useState<boolean>(true);\n const [showMenu, setShowMenu] = useState<boolean>(false);\n const [searchValue, setSearchValue] = useState<string>(\"\");\n const [noResults, setNoResults] = useState(false);\n const [marked, setMarked] = useState<boolean>(false);\n\n const searchRef = useRef<HTMLInputElement>(null);\n const inputRef = useRef<HTMLDivElement>(null);\n const focusInsideRef = useRef(false);\n\n useEffect(() => {\n setSearchValue(\"\");\n if (showMenu && searchRef.current) {\n searchRef.current.focus();\n }\n }, [showMenu]);\n\n useEffect(() => {\n setSelectedValue((prev) => value || prev);\n }, [value]);\n\n // Funksjon for å stile valgt element\n const isSelected = (option: ValuePair) => {\n if (!selectedValue) {\n return false;\n } else {\n return selectedValue.some((value) => value.value === option.value);\n }\n };\n\n // Fjerne ett eller flere valg\n const removeOption = useCallback(\n (option: string) => {\n return selectedValue.filter((value) => value.value !== option);\n },\n [selectedValue],\n );\n\n const onTagRemove = useCallback(\n (\n e: React.MouseEvent<HTMLButtonElement, globalThis.MouseEvent> | React.KeyboardEvent<HTMLInputElement>,\n option: string,\n ) => {\n let newValue = removeOption(option);\n setSelectedValue(newValue);\n onChange({\n type: \"change\",\n target: { name, value: option, selectedOptions: newValue },\n });\n e.stopPropagation();\n\n if (newValue.length === 0) {\n setMarked(false);\n }\n },\n [removeOption, setSelectedValue, onChange, name, setMarked],\n );\n\n // Håndtere valgt verdi i listen\n const onItemClick = useCallback(\n (option: string) => {\n let newValue: Array<ValuePair>;\n\n if (selectedValue.some((value) => value.value === option)) {\n newValue = removeOption(option);\n } else {\n const item = items.find((i) => i.value === option);\n newValue = [...selectedValue, item as ValuePair];\n }\n searchRef.current?.focus();\n setSelectedValue(newValue);\n onChange({\n type: \"change\",\n target: { name, value: option, selectedOptions: newValue },\n });\n },\n [selectedValue, setSelectedValue, onChange, name, removeOption, items],\n );\n\n // Funksjon for søk\n const onSearch = (e: { target: { value: React.SetStateAction<string> } }) => {\n searchRef.current?.focus();\n setShowMenu(true);\n setSearchValue(e.target.value);\n };\n\n const options = useMemo(() => {\n if (!searchValue) {\n return items;\n }\n\n const filteredOptions = items.filter(\n (option) => option.label.toLowerCase().indexOf(searchValue.toLowerCase()) >= 0,\n );\n\n setNoResults(filteredOptions.length === 0);\n\n return filteredOptions;\n }, [searchValue, items]);\n\n // Det første elementet i listen skal være aktivt fram til brukeren klikker på noe annet\n const [activeDescendant, setActiveDescendant] = useState<string | undefined>(\n options[0]?.value ? `${listId}-${options[0]?.value}` : undefined,\n );\n\n // Håndtere arrow-state\n useEffect(() => {\n if (showMenu) {\n setIsPointingDown(false);\n } else {\n setIsPointingDown(true);\n }\n }, [showMenu]);\n\n // Lukk meny med ESC\n useEffect(() => {\n const handleEscape = (e: globalThis.KeyboardEvent) => {\n if (e.key === \"Escape\" && showMenu) {\n setShowMenu(false);\n }\n };\n if (typeof window !== \"undefined\") {\n window.addEventListener(\"keydown\", handleEscape);\n }\n return () => {\n if (typeof window !== \"undefined\" && showMenu) {\n window.removeEventListener(\"keydown\", handleEscape);\n }\n };\n }, [setShowMenu, showMenu]);\n\n // Fokushåndtering\n const handleFocusPlacement = useCallback((isOpen: boolean) => {\n if (isOpen) {\n if (searchRef.current) {\n searchRef.current.focus();\n }\n } else {\n if (focusInsideRef.current && inputRef.current) {\n inputRef.current.focus();\n }\n }\n }, []);\n\n const handleFocus = useCallback(() => {\n if (!focusInsideRef.current) {\n if (onFocus) {\n onFocus({\n type: \"change\",\n target: {\n name,\n value: selectedValue?.[0].value || \"\",\n selectedOptions: selectedValue,\n },\n });\n }\n focusInsideRef.current = true;\n setShowMenu(true);\n }\n }, [onFocus, selectedValue, name]);\n\n const [dropdownRef] = useAnimatedHeight<HTMLDivElement>(showMenu, {\n onFirstVisible: handleFocusPlacement,\n onTransitionEnd: handleFocusPlacement,\n });\n\n useListNavigation({ ref: dropdownRef });\n\n const componentRootElementRef = useRef<HTMLDivElement>(null);\n\n const handleBlur = useCallback(\n (e: FocusEvent<HTMLDivElement | HTMLInputElement | HTMLButtonElement>) => {\n const componentRootElement = componentRootElementRef.current;\n const nextFocusIsInsideComponent =\n componentRootElement && componentRootElement.contains(e.relatedTarget as Node);\n if (!nextFocusIsInsideComponent) {\n setSearchValue(\"\");\n\n if (onBlur) {\n onBlur({\n type: \"blur\",\n target: {\n name,\n value: selectedValue?.[0]?.value || \"\",\n selectedOptions: selectedValue,\n },\n });\n inputRef.current?.dispatchEvent(new Event(\"focusout\", { bubbles: true }));\n }\n focusInsideRef.current = false;\n setShowMenu(false);\n }\n },\n [onBlur, name, selectedValue],\n );\n\n const handleMouseOver = useCallback((e: MouseEvent<HTMLButtonElement>) => {\n // Ved mouseOver på options flytter vi fokus til dem for å unngå \"dobbel fokus\"\n // der det ser ut som to forskjellige elementer er fokusert/hovered samtidig\n (e.target as HTMLButtonElement).focus({ preventScroll: true });\n }, []);\n\n // Tastaturnavigasjon\n const handleSearchOnKeyDown = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n e.stopPropagation();\n const listElement = dropdownRef.current;\n if (listElement) {\n listElement.querySelector<HTMLButtonElement>('[role=\"option\"]')?.focus();\n }\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n setShowMenu(false);\n }\n\n if ((e.metaKey && e.key === \"a\") || (e.ctrlKey && e.key === \"a\")) {\n e.preventDefault();\n e.stopPropagation();\n const updatedSelectedValue = selectedValue.map((item) => ({\n ...item,\n isMarked: true,\n }));\n setMarked(true);\n setSelectedValue(updatedSelectedValue);\n } else if (e.key === \"Backspace\") {\n e.stopPropagation();\n setMarked(false);\n\n // Sjekk om selectedValue er markert\n const selectedValueIsMarked = selectedValue.some((item) => item.isMarked);\n\n if (selectedValueIsMarked) {\n const updatedSelectedValue = selectedValue.filter((item) => !item.isMarked);\n setSelectedValue(updatedSelectedValue);\n setSearchValue(\"\");\n } else if (selectedValue.length > 0 && searchValue === \"\") {\n // Hvis ingen items er markert, fjern siste valgte item\n onTagRemove(e, selectedValue[selectedValue.length - 1].value);\n }\n }\n },\n [selectedValue, searchValue, dropdownRef, onTagRemove],\n );\n\n const handleOptionOnKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"Tab\") {\n if (searchRef.current) {\n e.preventDefault();\n e.stopPropagation();\n\n if (e.shiftKey) {\n searchRef.current.focus();\n } else {\n setShowMenu(false);\n searchRef.current.focus();\n }\n }\n } else if (e.key === \"ArrowUp\") {\n if (dropdownRef.current && searchRef.current) {\n // Can't be based on index since the first item might be filtered out\n const firstVisible = dropdownRef.current.querySelector('[role=\"option\"]:not([hidden])');\n if (e.currentTarget.id === firstVisible?.id && searchRef.current) {\n searchRef.current.focus();\n }\n }\n }\n },\n [setShowMenu, dropdownRef],\n );\n\n const hasSelection = selectedValue.length >= 1;\n\n return (\n <InputGroup\n label={label}\n id={inputId}\n ref={componentRootElementRef}\n data-testid=\"jkl-combobox\"\n className={clsx(\"jkl-combobox\", className, {\n \"jkl-combobox--invalid\": !!errorLabel || invalid,\n \"jkl-combobox--menu-open\": showMenu,\n \"jkl-combobox--menu-closed\": !showMenu && hasSelection,\n })}\n labelProps={{\n id: labelId,\n ...labelProps,\n }}\n helpLabel={helpLabel}\n errorLabel={errorLabel}\n density={density}\n render={(inputProps) => (\n <div\n className={clsx(\"jkl-combobox__wrapper\", { \"jkl-combobox__wrapper--active-value\": hasSelection })}\n style={{ width }}\n tabIndex={-1}\n onFocus={handleFocus}\n onBlur={handleBlur}\n >\n <div className=\"jkl-combobox__tags\" data-testid=\"jkl-combobox__tags\">\n {selectedValue.map(getComboboxValuePair).map((option) => (\n <Tag\n key={option.value}\n className={`jkl-tag ${marked && \"jkl-tag__marked\"}`}\n data-testid=\"jkl-tag\"\n dismissAction={{\n onClick: (e) => {\n if (searchRef.current) {\n searchRef.current.focus();\n }\n onTagRemove(e, option.value);\n },\n onBlur: handleBlur,\n label: `Fjern ${option.value}`,\n }}\n >\n {hasTagHover ? (\n <Tooltip key={option.value}>\n <TooltipTrigger>\n {\" \"}\n <span aria-hidden=\"true\" data-testid=\"jkl-tag__content\">\n {option.tagLabel ? option.tagLabel : option.label}\n </span>\n </TooltipTrigger>\n <TooltipContent>{option.label}</TooltipContent>\n </Tooltip>\n ) : (\n <span aria-hidden=\"true\" data-testid=\"jkl-tag__content\">\n {option.tagLabel ? option.tagLabel : option.label}\n </span>\n )}\n </Tag>\n ))}\n <input\n {...inputProps}\n className=\"jkl-combobox__search-input\"\n onChange={onSearch}\n data-testid=\"jkl-combobox__search-input\"\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleSearchOnKeyDown}\n value={searchValue}\n ref={searchRef}\n aria-controls={listId}\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-expanded={showMenu}\n placeholder={selectedValue.length > 0 ? \"\" : placeholder}\n autoComplete=\"off\"\n />\n </div>\n\n <div\n className=\"jkl-combobox__menu\"\n role=\"listbox\"\n ref={dropdownRef}\n id={listId}\n aria-labelledby={labelId}\n aria-multiselectable=\"true\"\n aria-activedescendant={activeDescendant}\n onFocus={handleFocus}\n onBlur={handleBlur}\n tabIndex={-1}\n >\n {options.map((option, i) => (\n <button\n key={`${listId}-${option.value}`}\n type=\"button\"\n id={`${listId}__${option.value}`}\n aria-selected={isSelected(option)}\n role=\"option\"\n value={option.value}\n onBlur={handleBlur}\n className={`jkl-combobox__option ${\n isSelected(option) && \"jkl-combobox__option--selected\"\n }`}\n data-testid=\"jkl-combobox__option\"\n data-testautoid={`jkl-combobox__option-${i}`}\n onFocus={handleFocus}\n onKeyDown={handleOptionOnKeyDown}\n onClick={(e) => {\n setActiveDescendant(`${listId}__${option.value}`); // https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/listbox_role#required_javascript_features\n e.stopPropagation();\n onItemClick(option.value);\n setSearchValue(\"\");\n }}\n onMouseOver={handleMouseOver}\n >\n {option.description ? (\n <span>\n {option.label}\n <span className=\"jkl-combobox__option-description\">{option.description}</span>\n </span>\n ) : (\n option.label\n )}\n {isSelected(option) ? (\n <span>\n <CheckIcon />{\" \"}\n </span>\n ) : null}\n </button>\n ))}\n {noResults && <div className=\"jkl-combobox__no-option\">{noMatchingOption}</div>}\n </div>\n <div className=\"jkl-combobox__actions\">\n <IconButton\n id={buttonId}\n onFocus={handleFocus}\n onBlur={handleBlur}\n className=\"jkl-combobox__button\"\n data-testid=\"jkl-combobox__button\"\n aria-label={`${selectedValue.map((value) => value.label) || \"Velg\"},${label}`}\n aria-expanded={showMenu}\n aria-controls={listId}\n role=\"button\"\n onClick={() => setShowMenu(true)}\n onMouseDown={(e) => {\n e.preventDefault();\n inputRef.current?.focus();\n }}\n >\n <ArrowVerticalAnimated pointingDown={isPointingDown} />\n </IconButton>\n </div>\n </div>\n )}\n />\n );\n};\nCombobox.displayName = \"Combobox\";\n"],"names":["getComboboxValuePair","item","value","label","Combobox","id","placeholder","items","onChange","onFocus","onBlur","noMatchingOption","labelProps","helpLabel","errorLabel","width","density","name","className","invalid","hasTagHover","listId","useId","generateSuffix","labelId","buttonId","inputId","selectedValue","setSelectedValue","useState","isPointingDown","setIsPointingDown","showMenu","setShowMenu","searchValue","setSearchValue","noResults","setNoResults","marked","setMarked","searchRef","useRef","inputRef","focusInsideRef","useEffect","current","focus","prev","isSelected","option","some","removeOption","useCallback","filter","onTagRemove","e","newValue","type","target","selectedOptions","stopPropagation","length","onItemClick","find","i","_a","onSearch","options","useMemo","filteredOptions","toLowerCase","indexOf","activeDescendant","setActiveDescendant","_b","handleEscape","key","window","addEventListener","removeEventListener","handleFocusPlacement","isOpen","handleFocus","dropdownRef","useAnimatedHeight","onFirstVisible","onTransitionEnd","useListNavigation","ref","componentRootElementRef","handleBlur","componentRootElement","contains","relatedTarget","dispatchEvent","Event","bubbles","handleMouseOver","preventScroll","handleSearchOnKeyDown","preventDefault","listElement","querySelector","metaKey","ctrlKey","updatedSelectedValue","map","isMarked","handleOptionOnKeyDown","shiftKey","firstVisible","currentTarget","hasSelection","jsx","InputGroup","clsx","render","inputProps","jsxs","style","tabIndex","children","Tag","dismissAction","onClick","Tooltip","TooltipTrigger","tagLabel","TooltipContent","onKeyDown","role","autoComplete","onMouseOver","description","CheckIcon","IconButton","onMouseDown","ArrowVerticalAnimated","pointingDown","displayName"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{Combobox as o,getComboboxValuePair as b}from"./Combobox.js";export{o as Combobox,b as getComboboxValuePair};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import{jsx as o}from"react/jsx-runtime";import{useEffect as e}from"react";import{usePreviousValue as t}from"../../hooks/usePreviousValue/usePreviousValue.js";import"../../hooks/useScreen/useScreen.js";import"../../hooks/useId/useId.js";import{useCookieConsentState as s}from"./CookieConsentContext.js";import{CookieConsentModal as n}from"./CookieConsentModal.js";import{setConsentCookie as i}from"./cookieConsentUtils.js";const r=({blocking:r,onAccept:a,...c})=>{const{dispatch:u,consent:m,cookieName:l,cookieDomain:p}=s(),C=t(m);if(e((()=>{a&&m!==C&&a(m)}),[a,m,C]),typeof navigator<"u"&&!navigator.cookieEnabled)return a&&a({functional:"denied",marketing:"denied",statistics:"denied"}),null;return r?o(n,{...c,onAccept:o=>{const e=Object.fromEntries(Object.entries(o).filter((([,o])=>null!=o))),t={...m,...e};u({type:"UPDATE_CONSENT",payload:t}),u({type:"SET_SHOW_CONSENT",payload:!1}),i({consent:t,name:l,domain:p})}}):null};export{r as CookieConsent};
2
+ //# sourceMappingURL=CookieConsent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CookieConsent.js","sources":["../../../../src/components/cookie-consent/CookieConsent.tsx"],"sourcesContent":["import React, { useEffect } from \"react\";\nimport { usePreviousValue } from \"../../hooks\";\nimport { useCookieConsentState } from \"./CookieConsentContext\";\nimport { CookieConsentModal } from \"./CookieConsentModal\";\nimport { setConsentCookie } from \"./cookieConsentUtils\";\nimport { AcceptConsentCallback, Consent } from \"./types\";\n\nexport interface CookieConsentProps {\n blocking?: boolean;\n onAccept?: AcceptConsentCallback;\n}\n\nexport const CookieConsent = ({ blocking, onAccept, ...rest }: CookieConsentProps): JSX.Element | null => {\n const { dispatch, consent, cookieName, cookieDomain } = useCookieConsentState();\n const prevConsent = usePreviousValue(consent);\n\n useEffect(() => {\n if (onAccept) {\n // Prevent onAccept from being triggered every time state changes\\\n if (consent !== prevConsent) {\n onAccept(consent);\n }\n }\n }, [onAccept, consent, prevConsent]);\n\n // Cookies are disabled in the browser\n if (typeof navigator !== \"undefined\" && !navigator.cookieEnabled) {\n if (onAccept) {\n onAccept({\n functional: \"denied\",\n marketing: \"denied\",\n statistics: \"denied\",\n });\n }\n\n return null;\n }\n\n const handleAccept = (newConsent: Partial<Consent>) => {\n // Filter out null values from the new consent\n const newConsentWithoutNullValues = Object.fromEntries(\n Object.entries(newConsent).filter(([, value]) => value != null),\n );\n\n // Merge the existing consent with the new consent\n const updatedConsent: Consent = {\n ...consent,\n ...newConsentWithoutNullValues,\n };\n\n dispatch({ type: \"UPDATE_CONSENT\", payload: updatedConsent });\n dispatch({ type: \"SET_SHOW_CONSENT\", payload: false });\n setConsentCookie({ consent: updatedConsent, name: cookieName, domain: cookieDomain });\n };\n\n // This returns different variants of consents based on the behavior required to get the consent\n // Blocking implies a blocking modal demanding an active action before the user can interact with the application\n if (blocking) {\n return <CookieConsentModal {...rest} onAccept={handleAccept} />;\n }\n\n return null;\n};\n"],"names":["CookieConsent","blocking","onAccept","rest","dispatch","consent","cookieName","cookieDomain","useCookieConsentState","prevConsent","usePreviousValue","useEffect","navigator","cookieEnabled","functional","marketing","statistics","jsx","CookieConsentModal","newConsent","newConsentWithoutNullValues","Object","fromEntries","entries","filter","value","updatedConsent","type","payload","setConsentCookie","name","domain"],"mappings":"saAYO,MAAMA,EAAgB,EAAGC,SAAAA,EAAUC,SAAAA,KAAaC,MACnD,MAAQC,SAAAA,EAAUC,QAAAA,EAASC,WAAAA,EAAYC,aAAAA,GAAiBC,IAClDC,EAAcC,EAAiBL,GAYrC,GAVAM,GAAU,KACFT,GAEIG,IAAYI,GACZP,EAASG,EAAO,GAGzB,CAACH,EAAUG,EAASI,WAGZG,UAAc,MAAgBA,UAAUC,cAC/C,OAAIX,GACSA,EAAA,CACLY,WAAY,SACZC,UAAW,SACXC,WAAY,WAIb,KAsBPf,OAAAA,EACQgB,EAAAC,EAAA,IAAuBf,EAAMD,SApBnBiB,IAElB,MAAMC,EAA8BC,OAAOC,YACvCD,OAAOE,QAAQJ,GAAYK,QAAO,GAAIC,KAAoB,MAATA,KAI/CC,EAA0B,IACzBrB,KACAe,GAGPhB,EAAS,CAAEuB,KAAM,iBAAkBC,QAASF,IAC5CtB,EAAS,CAAEuB,KAAM,mBAAoBC,SAAS,IAC9CC,EAAiB,CAAExB,QAASqB,EAAgBI,KAAMxB,EAAYyB,OAAQxB,GAAc,IASjF,IAAA"}
@@ -0,0 +1,2 @@
1
+ import{jsx as e}from"react/jsx-runtime";import t,{useMemo as o,useEffect as n}from"react";import{getConsentCookie as s,buildRequirementsObject as a,shouldShowConsentDialog as i}from"./cookieConsentUtils.js";const r="fremtind-cookie-consent",c=t.createContext(void 0),d=(e,t)=>{switch(t.type){case"SET_SHOW_CONSENT":return{...e,isOpen:t.payload};case"SET_SHOW_SETTINGS":return{...e,showSettings:t.payload};case"UPDATE_CONSENT":return{...e,consent:{...e.consent,...t.payload}};case"UPDATE_REQUIREMENTS":return{...e,requirement:{...e.requirement,...t.payload}};default:throw new Error(`Unhandled action type: ${t.type}`)}},u=({children:u,cookieAdapter:p,marketing:S,functional:l,statistics:C,cookieName:E=r,cookieDomain:m})=>{const T=o((()=>s({adapter:p,name:E})??{marketing:null,functional:null,statistics:null}),[p,E]),h=o((()=>a({marketing:S,functional:l,statistics:C})),[S,l,C]),[k,N]=t.useReducer(d,{isOpen:!1,showSettings:!1,requirement:h,consent:T});n((()=>{i(h,T)?N({type:"SET_SHOW_CONSENT",payload:!0}):T&&N({type:"UPDATE_CONSENT",payload:T})}),[h,T]);const y={state:k,dispatch:N,cookieName:E,cookieDomain:m};return e(c.Provider,{value:y,children:u})},p=()=>{const e=t.useContext(c);if(void 0===e)throw new Error("useCookieConsentState must be used within a CookieConsentProvider");return{dispatch:e.dispatch,cookieName:e.cookieName,cookieDomain:e.cookieDomain,...e.state}},S=()=>{const e=t.useContext(c);if(void 0===e)throw new Error("useCookieConsent must be used within a CookieConsentProvider");return{openConsentModalWithSettings:()=>{e.dispatch({type:"SET_SHOW_CONSENT",payload:!0}),e.dispatch({type:"SET_SHOW_SETTINGS",payload:!0})},openConsentModalWithDefaults:()=>{e.dispatch({type:"SET_SHOW_CONSENT",payload:!0}),e.dispatch({type:"SET_SHOW_SETTINGS",payload:!1})},consents:e.state.consent}};export{u as CookieConsentProvider,r as DEFAULT_COOKIE_NAME,S as useCookieConsent,p as useCookieConsentState};
2
+ //# sourceMappingURL=CookieConsentContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CookieConsentContext.js","sources":["../../../../src/components/cookie-consent/CookieConsentContext.tsx"],"sourcesContent":["import React, { useEffect, useMemo } from \"react\";\nimport { WithChildren } from \"../..\";\nimport { shouldShowConsentDialog, getConsentCookie, buildRequirementsObject } from \"./cookieConsentUtils\";\nimport type { Consent, ConsentRequirement } from \"./types\";\n\n// https://kentcdodds.com/blog/how-to-use-react-context-effectively\n\ninterface SetShowConsentAction {\n type: \"SET_SHOW_CONSENT\";\n payload: boolean;\n}\n\ninterface SetShowSettingsAction {\n type: \"SET_SHOW_SETTINGS\";\n payload: boolean;\n}\n\ninterface UpdateConsentAction {\n type: \"UPDATE_CONSENT\";\n payload: Consent;\n}\n\ninterface UpdateRequirementsAction {\n type: \"UPDATE_REQUIREMENTS\";\n payload: ConsentRequirement;\n}\n\ntype Action = SetShowConsentAction | UpdateConsentAction | SetShowSettingsAction | UpdateRequirementsAction;\ntype Dispatch = (action: Action) => void;\n\ninterface State {\n isOpen: boolean;\n showSettings: boolean;\n requirement: ConsentRequirement;\n consent: Consent;\n}\n\nexport const DEFAULT_COOKIE_NAME = \"fremtind-cookie-consent\";\n\nconst CookieConsentContext = React.createContext<\n { state: State; dispatch: Dispatch; cookieName: string; cookieDomain?: string } | undefined\n>(undefined);\n\nconst cookieConsentReducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"SET_SHOW_CONSENT\":\n return { ...state, isOpen: action.payload };\n\n case \"SET_SHOW_SETTINGS\":\n return {\n ...state,\n showSettings: action.payload,\n };\n\n case \"UPDATE_CONSENT\":\n return {\n ...state,\n consent: {\n ...state.consent,\n ...action.payload,\n },\n };\n\n case \"UPDATE_REQUIREMENTS\":\n return {\n ...state,\n requirement: {\n ...state.requirement,\n ...action.payload,\n },\n };\n\n default: {\n // @ts-ignore Denne skal ikke oppstå, men den _kan_ oppstå\n throw new Error(`Unhandled action type: ${action.type}`);\n }\n }\n};\n\nexport interface CookieConsentProviderProps extends Partial<ConsentRequirement>, WithChildren {\n cookieAdapter?: () => Consent | undefined;\n cookieName?: string;\n cookieDomain?: string;\n}\n\nconst CookieConsentProvider: React.FC<CookieConsentProviderProps> = ({\n children,\n cookieAdapter,\n marketing,\n functional,\n statistics,\n cookieName = DEFAULT_COOKIE_NAME,\n cookieDomain,\n}) => {\n // Load existing consent at initial render\n const consentCookie = useMemo(() => {\n return (\n getConsentCookie({ adapter: cookieAdapter, name: cookieName }) ?? {\n marketing: null,\n functional: null,\n statistics: null,\n }\n );\n }, [cookieAdapter, cookieName]);\n\n const requirement = useMemo(\n () => buildRequirementsObject({ marketing, functional, statistics }),\n [marketing, functional, statistics],\n );\n\n const [state, dispatch] = React.useReducer(cookieConsentReducer, {\n isOpen: false,\n showSettings: false,\n requirement,\n consent: consentCookie,\n });\n\n useEffect(() => {\n if (shouldShowConsentDialog(requirement, consentCookie)) {\n dispatch({ type: \"SET_SHOW_CONSENT\", payload: true });\n } else if (consentCookie) {\n dispatch({ type: \"UPDATE_CONSENT\", payload: consentCookie });\n }\n }, [requirement, consentCookie]);\n\n const value = { state, dispatch, cookieName, cookieDomain };\n return <CookieConsentContext.Provider value={value}>{children}</CookieConsentContext.Provider>;\n};\n\ninterface UseCookieConsentState extends State {\n dispatch: Dispatch;\n cookieName: string;\n cookieDomain?: string;\n}\n\n// control and state for internal use\nconst useCookieConsentState = (): UseCookieConsentState => {\n const context = React.useContext(CookieConsentContext);\n if (context === undefined) {\n throw new Error(\"useCookieConsentState must be used within a CookieConsentProvider\");\n }\n\n return {\n dispatch: context.dispatch,\n cookieName: context.cookieName,\n cookieDomain: context.cookieDomain,\n ...context.state,\n };\n};\n\ntype UseCookieConsent = {\n openConsentModalWithSettings: () => void;\n openConsentModalWithDefaults: () => void;\n /** Se hvilke samtykker som er gitt, om du for eksempel trenger styre UI basert på samtykker. */\n consents: Consent;\n};\n\n// expose functionality to be used by consumers\nconst useCookieConsent = (): UseCookieConsent => {\n const context = React.useContext(CookieConsentContext);\n if (context === undefined) {\n throw new Error(\"useCookieConsent must be used within a CookieConsentProvider\");\n }\n\n const openConsentModalWithSettings = () => {\n context.dispatch({ type: \"SET_SHOW_CONSENT\", payload: true });\n context.dispatch({ type: \"SET_SHOW_SETTINGS\", payload: true });\n };\n\n const openConsentModalWithDefaults = () => {\n context.dispatch({ type: \"SET_SHOW_CONSENT\", payload: true });\n context.dispatch({ type: \"SET_SHOW_SETTINGS\", payload: false });\n };\n\n const consents = context.state.consent;\n\n return { openConsentModalWithSettings, openConsentModalWithDefaults, consents };\n};\n\nexport { CookieConsentProvider, useCookieConsentState, useCookieConsent };\n"],"names":["DEFAULT_COOKIE_NAME","CookieConsentContext","React","createContext","cookieConsentReducer","state","action","type","isOpen","payload","showSettings","consent","requirement","Error","CookieConsentProvider","children","cookieAdapter","marketing","functional","statistics","cookieName","cookieDomain","consentCookie","useMemo","getConsentCookie","adapter","name","buildRequirementsObject","dispatch","useReducer","useEffect","shouldShowConsentDialog","value","jsx","Provider","useCookieConsentState","context","useContext","useCookieConsent","openConsentModalWithSettings","openConsentModalWithDefaults","consents"],"mappings":"+MAqCO,MAAMA,EAAsB,0BAE7BC,EAAuBC,EAAMC,mBAEjC,GAEIC,EAAuB,CAACC,EAAcC,KACxC,OAAQA,EAAOC,MACX,IAAK,mBACD,MAAO,IAAKF,EAAOG,OAAQF,EAAOG,SAEtC,IAAK,oBACM,MAAA,IACAJ,EACHK,aAAcJ,EAAOG,SAG7B,IAAK,iBACM,MAAA,IACAJ,EACHM,QAAS,IACFN,EAAMM,WACNL,EAAOG,UAItB,IAAK,sBACM,MAAA,IACAJ,EACHO,YAAa,IACNP,EAAMO,eACNN,EAAOG,UAItB,QAEI,MAAM,IAAII,MAAM,0BAA0BP,EAAOC,QAEzD,EASEO,EAA8D,EAChEC,SAAAA,EACAC,cAAAA,EACAC,UAAAA,EACAC,WAAAA,EACAC,WAAAA,EACAC,WAAAA,EAAapB,EACbqB,aAAAA,MAGMC,MAAAA,EAAgBC,GAAQ,IAEtBC,EAAiB,CAAEC,QAAST,EAAeU,KAAMN,KAAiB,CAC9DH,UAAW,KACXC,WAAY,KACZC,WAAY,OAGrB,CAACH,EAAeI,IAEbR,EAAcW,GAChB,IAAMI,EAAwB,CAAEV,UAAAA,EAAWC,WAAAA,EAAYC,WAAAA,KACvD,CAACF,EAAWC,EAAYC,KAGrBd,EAAOuB,GAAY1B,EAAM2B,WAAWzB,EAAsB,CAC7DI,QAAQ,EACRE,cAAc,EACdE,YAAAA,EACAD,QAASW,IAGbQ,GAAU,KACFC,EAAwBnB,EAAaU,GACrCM,EAAS,CAAErB,KAAM,mBAAoBE,SAAS,IACvCa,GACPM,EAAS,CAAErB,KAAM,iBAAkBE,QAASa,GAAe,GAEhE,CAACV,EAAaU,IAEXU,MAAAA,EAAQ,CAAE3B,MAAAA,EAAOuB,SAAAA,EAAUR,WAAAA,EAAYC,aAAAA,GACrC,OAAAY,EAAAhC,EAAqBiC,SAArB,CAA8BF,MAAAA,EAAejB,SAAAA,GAAS,EAU5DoB,EAAwB,KACpBC,MAAAA,EAAUlC,EAAMmC,WAAWpC,GACjC,QAAgB,IAAZmC,EACM,MAAA,IAAIvB,MAAM,qEAGb,MAAA,CACHe,SAAUQ,EAAQR,SAClBR,WAAYgB,EAAQhB,WACpBC,aAAce,EAAQf,gBACnBe,EAAQ/B,MAAA,EAYbiC,EAAmB,KACfF,MAAAA,EAAUlC,EAAMmC,WAAWpC,GACjC,QAAgB,IAAZmC,EACM,MAAA,IAAIvB,MAAM,gEAeb,MAAA,CAAE0B,6BAZ4B,KACjCH,EAAQR,SAAS,CAAErB,KAAM,mBAAoBE,SAAS,IACtD2B,EAAQR,SAAS,CAAErB,KAAM,oBAAqBE,SAAS,GAAM,EAU1B+B,6BAPF,KACjCJ,EAAQR,SAAS,CAAErB,KAAM,mBAAoBE,SAAS,IACtD2B,EAAQR,SAAS,CAAErB,KAAM,oBAAqBE,SAAS,GAAO,EAKGgC,SAFpDL,EAAQ/B,MAAMM"}
@@ -0,0 +1,2 @@
1
+ import{jsxs as o,jsx as e}from"react/jsx-runtime";import{useCallback as s,useEffect as t}from"react";import n from"react-dom";import"../../hooks/useScreen/useScreen.js";import{useId as a}from"../../hooks/useId/useId.js";import{ModalContainer as r,ModalOverlay as m}from"../modal/Modal.js";import{useModal as i}from"../modal/useModal.js";import{CustomConsents as l}from"./consents/CustomConsents.js";import{DefaultConsents as c}from"./consents/DefaultConsents.js";import{useCookieConsentState as d}from"./CookieConsentContext.js";import{convertBooleanConsentObjectToConsentObject as u}from"./cookieConsentUtils.js";const C=({onAccept:C,...p})=>{const{isOpen:f,requirement:j,showSettings:k}=d(),h=s((o=>{C("implicit"===o?u(j):o)}),[C,j]),[M,x]=i({id:a("jkl-cookie-modal"),role:"alertdialog",title:"Informasjonskapsler"});return t((()=>{M&&(f?M.show():M.hide())}),[M,f]),typeof document>"u"?null:n.createPortal(o(r,{...p,...x.container,"data-testautoid":"jkl-cookie-consent-modal",children:[e(m,{...x.overlay}),e(k?l:c,{modalConfig:x,handleAccept:h})]}),document.body)};export{C as CookieConsentModal};
2
+ //# sourceMappingURL=CookieConsentModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CookieConsentModal.js","sources":["../../../../src/components/cookie-consent/CookieConsentModal.tsx"],"sourcesContent":["import React, { FC, useCallback, useEffect } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { useId } from \"../../hooks\";\nimport { ModalContainer, ModalOverlay, useModal } from \"../modal\";\nimport { CustomConsents } from \"./consents/CustomConsents\";\nimport { DefaultConsents } from \"./consents/DefaultConsents\";\nimport { useCookieConsentState } from \"./CookieConsentContext\";\nimport { convertBooleanConsentObjectToConsentObject } from \"./cookieConsentUtils\";\nimport { Consent, ConsentComponentBaseProps } from \"./types\";\n\nexport const CookieConsentModal: FC<ConsentComponentBaseProps> = ({ onAccept, ...rest }) => {\n const { isOpen, requirement, showSettings } = useCookieConsentState();\n\n const handleAccept = useCallback(\n (v: Consent | \"implicit\") => {\n if (v === \"implicit\") {\n onAccept(convertBooleanConsentObjectToConsentObject(requirement));\n } else {\n onAccept(v);\n }\n },\n [onAccept, requirement],\n );\n\n const [instance, modalConfig] = useModal({\n id: useId(\"jkl-cookie-modal\"),\n // The optional `role` attribute of the dialog element, either `dialog`\n // (default) or `alertdialog` to make it a modal (preventing closing on\n // click outside of ESC key).\n role: \"alertdialog\",\n // The required dialog title, mandatory in the document\n // to provide context to assistive technology.\n title: \"Informasjonskapsler\",\n });\n\n useEffect(() => {\n if (!instance) {\n return;\n }\n if (isOpen) {\n instance.show();\n } else {\n instance.hide();\n }\n }, [instance, isOpen]);\n\n if (typeof document === \"undefined\") {\n return null;\n }\n\n return ReactDOM.createPortal(\n <ModalContainer {...rest} {...modalConfig.container} data-testautoid=\"jkl-cookie-consent-modal\">\n <ModalOverlay {...modalConfig.overlay} />\n {showSettings ? (\n <CustomConsents modalConfig={modalConfig} handleAccept={handleAccept} />\n ) : (\n <DefaultConsents modalConfig={modalConfig} handleAccept={handleAccept} />\n )}\n </ModalContainer>,\n document.body,\n );\n};\n"],"names":["CookieConsentModal","onAccept","rest","isOpen","requirement","showSettings","useCookieConsentState","handleAccept","useCallback","v","convertBooleanConsentObjectToConsentObject","instance","modalConfig","useModal","id","useId","role","title","useEffect","show","hide","document","ReactDOM","createPortal","jsxs","ModalContainer","container","children","jsx","ModalOverlay","overlay","CustomConsents","DefaultConsents","body"],"mappings":"smBAUO,MAAMA,EAAoD,EAAGC,SAAAA,KAAaC,MACvE,MAAEC,OAAAA,EAAQC,YAAAA,EAAaC,aAAAA,GAAiBC,IAExCC,EAAeC,GAChBC,IAEgBR,EADH,aAANQ,EACSC,EAA2CN,GAE3CK,EAFuD,GAKxE,CAACR,EAAUG,KAGRO,EAAUC,GAAeC,EAAS,CACrCC,GAAIC,EAAM,oBAIVC,KAAM,cAGNC,MAAO,wBAcP,OAXJC,GAAU,KACDP,IAGDR,EACAQ,EAASQ,OAETR,EAASS,OAAK,GAEnB,CAACT,EAAUR,WAEHkB,SAAa,IACb,KAGJC,EAASC,aACZC,EAACC,MAAmBvB,KAAUU,EAAYc,UAAW,kBAAgB,2BACjEC,SAAA,CAACC,EAAAC,EAAA,IAAiBjB,EAAYkB,YAC7BzB,EACI0B,EAEAC,EAFe,CAAApB,YAAAA,EAA0BL,aAAAA,OAKlDc,SAASY,KAAA"}
@@ -0,0 +1,2 @@
1
+ import{jsxs as e,jsx as t}from"react/jsx-runtime";import{useCallback as s}from"react";import{PrimaryButton as n}from"../../button/Button.js";import{UnorderedList as o}from"../../list/List.js";import{CheckListItem as a}from"../../list/ListItem.js";import{Modal as r,ModalHeader as i,ModalTitle as l,ModalBody as d,ModalActions as m}from"../../modal/Modal.js";import"react-a11y-dialog";import"../../../hooks/useScreen/useScreen.js";import"../../../hooks/useId/useId.js";import{useCookieConsentState as c}from"../CookieConsentContext.js";import{convertBooleanConsentObjectToConsentObject as k}from"../cookieConsentUtils.js";import{RequirementCheckbox as f}from"./RequirementCheckbox.js";const u=({modalConfig:u,handleAccept:p})=>{const{consent:j,requirement:g}=c(),h=s((e=>{e.preventDefault();const t={},s=Object.entries(g).map((([e,t])=>t?e:void 0)).filter(Boolean),n=new FormData(e.target);s.forEach((e=>{t[e]="True"===n.get(e)})),p(k(t))}),[p,g]);return e(r,{component:"form",...u.modal,onSubmit:h,children:[t(i,{children:t(l,{...u.title,children:"Informasjonskapsler"})}),e(d,{children:[t(o,{className:"jkl-cookie-consent-modal__checklist",children:t(a,{children:"Nettsidene skal fungere teknisk"})}),t("p",{className:"jkl-cookie-consent-modal__info-text",children:"For at nettsidene skal fungere, må vi bruke tekniske informasjonskapsler. Denne kan derfor ikke slås av."}),g.functional&&t(f,{name:"functional",label:"Tillat funksjonelle",defaultChecked:"accepted"===j.functional,children:"Funksjonelle informasjonskapsler lagrer opplysninger om din bruk av nettsidene og hvilke innstillinger du har gjort, slik at du kan få funksjonalitet tilpasset deg."}),g.statistics&&t(f,{name:"statistics",label:"Tillat statistikk",defaultChecked:"accepted"===j.statistics,children:"Informasjonskapslene lagrer statistikk som hjelper oss med å forstå hvordan nettsidene blir brukt, slik at vi kan gjøre dem bedre og enklere å bruke."}),g.marketing&&t(f,{name:"marketing",label:"Tillat personlig markedsføring",defaultChecked:"accepted"===j.marketing,children:"Dette gjør at vi kan gi deg mer relevant og tilpasset markedsføring, også gjennom våre samarbeidspartnere, på for eksempel nettsider, annonser og i sosiale medier."})]}),t(m,{children:t(n,{"data-testid":"jkl-cookie-consent-godta",children:"Godta"})})]})};export{u as CustomConsents};
2
+ //# sourceMappingURL=CustomConsents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomConsents.js","sources":["../../../../../src/components/cookie-consent/consents/CustomConsents.tsx"],"sourcesContent":["import React, { FC, FormEvent, useCallback } from \"react\";\nimport { PrimaryButton } from \"../../button\";\nimport { CheckListItem, UnorderedList } from \"../../list\";\nimport { Modal, ModalActions, ModalBody, ModalConfig, ModalHeader, ModalTitle } from \"../../modal\";\nimport { useCookieConsentState } from \"../CookieConsentContext\";\nimport { convertBooleanConsentObjectToConsentObject } from \"../cookieConsentUtils\";\nimport { Consent } from \"../types\";\nimport { RequirementCheckbox } from \"./RequirementCheckbox\";\n\ntype Props = {\n modalConfig: ModalConfig;\n handleAccept: (v: Consent | \"implicit\") => void;\n};\n\nexport const CustomConsents: FC<Props> = ({ modalConfig, handleAccept }) => {\n const { consent, requirement } = useCookieConsentState();\n\n const onSubmit = useCallback(\n (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n\n const formValues: Partial<Record<keyof Consent, boolean>> = {};\n const requiredFormNames = Object.entries(requirement)\n .map(([name, required]) => (required ? name : undefined))\n .filter(Boolean) as Array<keyof Consent>;\n\n const formData = new FormData(event.target as HTMLFormElement);\n requiredFormNames.forEach((name) => {\n formValues[name] = formData.get(name) === \"True\";\n });\n\n handleAccept(convertBooleanConsentObjectToConsentObject(formValues));\n },\n [handleAccept, requirement],\n );\n\n return (\n <Modal component=\"form\" {...modalConfig.modal} {...{ onSubmit }}>\n <ModalHeader>\n <ModalTitle {...modalConfig.title}>Informasjonskapsler</ModalTitle>\n </ModalHeader>\n <ModalBody>\n <UnorderedList className=\"jkl-cookie-consent-modal__checklist\">\n <CheckListItem>Nettsidene skal fungere teknisk</CheckListItem>\n </UnorderedList>\n <p className=\"jkl-cookie-consent-modal__info-text\">\n For at nettsidene skal fungere, må vi bruke tekniske informasjonskapsler. Denne kan derfor ikke slås\n av.\n </p>\n {requirement.functional && (\n <RequirementCheckbox\n name=\"functional\"\n label=\"Tillat funksjonelle\"\n defaultChecked={consent.functional === \"accepted\"}\n >\n Funksjonelle informasjonskapsler lagrer opplysninger om din bruk av nettsidene og hvilke\n innstillinger du har gjort, slik at du kan få funksjonalitet tilpasset deg.\n </RequirementCheckbox>\n )}\n\n {requirement.statistics && (\n <RequirementCheckbox\n name=\"statistics\"\n label=\"Tillat statistikk\"\n defaultChecked={consent.statistics === \"accepted\"}\n >\n Informasjonskapslene lagrer statistikk som hjelper oss med å forstå hvordan nettsidene blir\n brukt, slik at vi kan gjøre dem bedre og enklere å bruke.\n </RequirementCheckbox>\n )}\n\n {requirement.marketing && (\n <RequirementCheckbox\n name=\"marketing\"\n label=\"Tillat personlig markedsføring\"\n defaultChecked={consent.marketing === \"accepted\"}\n >\n Dette gjør at vi kan gi deg mer relevant og tilpasset markedsføring, også gjennom våre\n samarbeidspartnere, på for eksempel nettsider, annonser og i sosiale medier.\n </RequirementCheckbox>\n )}\n </ModalBody>\n <ModalActions>\n <PrimaryButton data-testid=\"jkl-cookie-consent-godta\">Godta</PrimaryButton>\n </ModalActions>\n </Modal>\n );\n};\n"],"names":["CustomConsents","modalConfig","handleAccept","consent","requirement","useCookieConsentState","onSubmit","useCallback","event","preventDefault","formValues","requiredFormNames","Object","entries","map","name","required","filter","Boolean","formData","FormData","target","forEach","get","convertBooleanConsentObjectToConsentObject","jsxs","Modal","component","modal","children","jsx","ModalHeader","ModalTitle","title","ModalBody","UnorderedList","className","CheckListItem","functional","RequirementCheckbox","label","defaultChecked","statistics","marketing","ModalActions","PrimaryButton"],"mappings":"4qBAcO,MAAMA,EAA4B,EAAGC,YAAAA,EAAaC,aAAAA,MAC/C,MAAEC,QAAAA,EAASC,YAAAA,GAAgBC,IAE3BC,EAAWC,GACZC,IACGA,EAAMC,iBAEAC,MAAAA,EAAsD,CAAA,EACtDC,EAAoBC,OAAOC,QAAQT,GACpCU,KAAI,EAAEC,EAAMC,KAAeA,EAAWD,OAAO,IAC7CE,OAAOC,SAENC,EAAW,IAAIC,SAASZ,EAAMa,QAClBV,EAAAW,SAASP,IACvBL,EAAWK,GAA+B,SAAvBI,EAASI,IAAIR,EAAU,IAGjCb,EAAAsB,EAA2Cd,GAAW,GAEvE,CAACR,EAAcE,IAIf,OAAAqB,EAACC,EAAM,CAAAC,UAAU,UAAW1B,EAAY2B,MAAatB,SAAAA,EACjDuB,SAAA,CAAAC,EAACC,GACGF,SAACC,EAAAE,EAAA,IAAe/B,EAAYgC,MAAOJ,qCAEtCK,EACG,CAAAL,SAAA,CAAAC,EAACK,GAAcC,UAAU,sCACrBP,SAACC,EAAAO,EAAA,CAAcR,+CAElBC,EAAA,IAAA,CAAEM,UAAU,sCAAsCP,SAGnD,6GACCzB,EAAYkC,YACTR,EAACS,EAAA,CACGxB,KAAK,aACLyB,MAAM,sBACNC,eAAuC,aAAvBtC,EAAQmC,WAC3BT,SAAA,yKAMJzB,EAAYsC,YACTZ,EAACS,EAAA,CACGxB,KAAK,aACLyB,MAAM,oBACNC,eAAuC,aAAvBtC,EAAQuC,WAC3Bb,SAAA,0JAMJzB,EAAYuC,WACTb,EAACS,EAAA,CACGxB,KAAK,YACLyB,MAAM,iCACNC,eAAsC,aAAtBtC,EAAQwC,UAC3Bd,SAAA,6KAMRe,EACG,CAAAf,SAAAC,EAACe,GAAc,cAAY,2BAA2BhB,uBAE9D"}
@@ -0,0 +1,2 @@
1
+ import{jsxs as e,jsx as t}from"react/jsx-runtime";import{useCallback as s}from"react";import{PrimaryButton as o,TertiaryButton as i}from"../../button/Button.js";import{UnorderedList as n}from"../../list/List.js";import{CheckListItem as r}from"../../list/ListItem.js";import{Modal as a,ModalHeader as l,ModalTitle as d,ModalBody as m,ModalActions as c}from"../../modal/Modal.js";import"react-a11y-dialog";import"../../../hooks/useScreen/useScreen.js";import"../../../hooks/useId/useId.js";import{useCookieConsentState as k}from"../CookieConsentContext.js";const p=({modalConfig:p,handleAccept:u})=>{const{dispatch:h,requirement:g}=k(),f=s((e=>{e.preventDefault(),u("implicit")}),[u]);return e(a,{component:"form",...p.modal,onSubmit:f,children:[t(l,{children:t(d,{...p.title,children:"Vi bruker informasjonskapsler slik at:"})}),t(m,{children:e(n,{className:"jkl-cookie-consent-modal__checklist",children:[t(r,{children:"Nettsidene skal fungere teknisk"}),g.functional&&t(r,{children:"Nettsidene skal tilpasses din bruk, dine valg og dine innstillinger."}),g.statistics&&t(r,{children:"Vi kan samle statistikk på hvordan nettsidene brukes og dermed kunne forbedre tjenestene våre."}),g.marketing&&t(r,{children:"Vi kan gi deg personlig tilpasset innhold og relevante annonser, også gjennom våre samarbeidspartnere, på for eksempel nettsider og i sosiale medier."})]})}),e(c,{children:[t(o,{"data-testid":"jkl-cookie-consent-godta",...p.closeButton,type:"submit",children:"Godta"}),t(i,{type:"button",onClick:()=>{h({type:"SET_SHOW_SETTINGS",payload:!0})},children:"Innstillinger"})]})]})};export{p as DefaultConsents};
2
+ //# sourceMappingURL=DefaultConsents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultConsents.js","sources":["../../../../../src/components/cookie-consent/consents/DefaultConsents.tsx"],"sourcesContent":["import React, { FC, FormEvent, useCallback } from \"react\";\nimport { PrimaryButton, TertiaryButton } from \"../../button\";\nimport { CheckListItem, UnorderedList } from \"../../list\";\nimport { Modal, ModalActions, ModalBody, type ModalConfig, ModalHeader, ModalTitle } from \"../../modal\";\nimport { useCookieConsentState } from \"../CookieConsentContext\";\nimport { Consent } from \"../types\";\n\ntype Props = {\n modalConfig: ModalConfig;\n handleAccept: (v: Consent | \"implicit\") => void;\n};\n\nexport const DefaultConsents: FC<Props> = ({ modalConfig, handleAccept }) => {\n const { dispatch, requirement } = useCookieConsentState();\n\n const onSubmit = useCallback(\n (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n handleAccept(\"implicit\");\n },\n [handleAccept],\n );\n\n return (\n <Modal component=\"form\" {...modalConfig.modal} {...{ onSubmit }}>\n <ModalHeader>\n <ModalTitle {...modalConfig.title}>Vi bruker informasjonskapsler slik at:</ModalTitle>\n </ModalHeader>\n <ModalBody>\n <UnorderedList className=\"jkl-cookie-consent-modal__checklist\">\n <CheckListItem>Nettsidene skal fungere teknisk</CheckListItem>\n {requirement.functional && (\n <CheckListItem>\n Nettsidene skal tilpasses din bruk, dine valg og dine innstillinger.\n </CheckListItem>\n )}\n {requirement.statistics && (\n <CheckListItem>\n Vi kan samle statistikk på hvordan nettsidene brukes og dermed kunne forbedre tjenestene\n våre.\n </CheckListItem>\n )}\n {requirement.marketing && (\n <CheckListItem>\n Vi kan gi deg personlig tilpasset innhold og relevante annonser, også gjennom våre\n samarbeidspartnere, på for eksempel nettsider og i sosiale medier.\n </CheckListItem>\n )}\n </UnorderedList>\n </ModalBody>\n <ModalActions>\n <PrimaryButton data-testid=\"jkl-cookie-consent-godta\" {...modalConfig.closeButton} type={\"submit\"}>\n Godta\n </PrimaryButton>\n\n <TertiaryButton\n type=\"button\"\n onClick={() => {\n dispatch({ type: \"SET_SHOW_SETTINGS\", payload: true });\n }}\n >\n Innstillinger\n </TertiaryButton>\n </ModalActions>\n </Modal>\n );\n};\n"],"names":["DefaultConsents","modalConfig","handleAccept","dispatch","requirement","useCookieConsentState","onSubmit","useCallback","event","preventDefault","jsxs","Modal","component","modal","children","jsx","ModalHeader","ModalTitle","title","ModalBody","UnorderedList","className","CheckListItem","functional","statistics","marketing","ModalActions","PrimaryButton","closeButton","type","TertiaryButton","onClick","payload"],"mappings":"2iBAYO,MAAMA,EAA6B,EAAGC,YAAAA,EAAaC,aAAAA,MAChD,MAAEC,SAAAA,EAAUC,YAAAA,GAAgBC,IAE5BC,EAAWC,GACZC,IACGA,EAAMC,iBACNP,EAAa,WAAU,GAE3B,CAACA,IAID,OAAAQ,EAACC,EAAM,CAAAC,UAAU,UAAWX,EAAYY,MAAaP,SAAAA,EACjDQ,SAAA,CAAAC,EAACC,GACGF,SAACC,EAAAE,EAAA,IAAehB,EAAYiB,MAAOJ,sDAEtCC,EAAAI,EAAA,CACGL,SAACJ,EAAAU,EAAA,CAAcC,UAAU,sCACrBP,SAAA,CAAAC,EAACO,GAAcR,SAA+B,oCAC7CV,EAAYmB,YACRR,EAAAO,EAAA,CAAcR,SAEf,yEAEHV,EAAYoB,YACRT,EAAAO,EAAA,CAAcR,SAGf,mGAEHV,EAAYqB,WACRV,EAAAO,EAAA,CAAcR,SAGf,iKAIXY,EACG,CAAAZ,SAAA,CAACC,EAAAY,EAAA,CAAc,cAAY,8BAA+B1B,EAAY2B,YAAaC,KAAM,SAAUf,SAEnG,UAEAC,EAACe,EAAA,CACGD,KAAK,SACLE,QAAS,KACL5B,EAAS,CAAE0B,KAAM,oBAAqBG,SAAS,GAAM,EAE5DlB,SAAA,uBAIT"}
@@ -0,0 +1,2 @@
1
+ import{jsxs as e,Fragment as c,jsx as o}from"react/jsx-runtime";import{Checkbox as a}from"../../checkbox/Checkbox.js";const s=({defaultChecked:s,name:l,label:n,children:r})=>e(c,{children:[o(a,{className:"jkl-cookie-consent-modal__checkbox",value:"True",name:l,defaultChecked:s,children:n}),o("p",{className:"jkl-cookie-consent-modal__info-text",children:r})]});export{s as RequirementCheckbox};
2
+ //# sourceMappingURL=RequirementCheckbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequirementCheckbox.js","sources":["../../../../../src/components/cookie-consent/consents/RequirementCheckbox.tsx"],"sourcesContent":["import React from \"react\";\nimport { WithChildren } from \"../../..\";\nimport { Checkbox } from \"../../checkbox\";\n\ninterface RequirementCheckboxProps extends WithChildren {\n defaultChecked: boolean;\n name: \"functional\" | \"marketing\" | \"statistics\";\n label: string;\n}\n\nexport const RequirementCheckbox = ({ defaultChecked, name, label, children }: RequirementCheckboxProps) => {\n return (\n <>\n <Checkbox\n className=\"jkl-cookie-consent-modal__checkbox\"\n value=\"True\"\n name={name}\n defaultChecked={defaultChecked}\n >\n {label}\n </Checkbox>\n <p className=\"jkl-cookie-consent-modal__info-text\">{children}</p>\n </>\n );\n};\n"],"names":["RequirementCheckbox","defaultChecked","name","label","children","jsxs","Fragment","jsx","Checkbox","className","value"],"mappings":"sHAUO,MAAMA,EAAsB,EAAGC,eAAAA,EAAgBC,KAAAA,EAAMC,MAAAA,EAAOC,SAAAA,KAGvDC,EAAAC,EAAA,CAAAF,SAAA,CAAAG,EAACC,EAAA,CACGC,UAAU,qCACVC,MAAM,OACNR,KAAAA,EACAD,eAAAA,EAECG,SAAAD,IAEJI,EAAA,IAAA,CAAEE,UAAU,sCAAuCL,SAAAA"}
@@ -0,0 +1,2 @@
1
+ const e=({adapter:e,name:t})=>{const n=(e=>{if(typeof document>"u")return;const t=document.cookie.split(";").map((e=>e.trim().split("="))).find((t=>t[0]===e));return t||void 0})(t);return n?JSON.parse(n[1]):e?e():void 0},t=({consent:e,maxAge:t=10368e3,name:n,domain:o})=>{document.cookie=[`${n}=${JSON.stringify(e)}`,`max-age=${t}`,"SameSite=Lax",!!o&&`domain=${o}`].filter((e=>e)).join(";")},n=(e,t)=>{if(t){const n=new Map(Object.entries(t)),o=Object.entries(e);for(const[e,t]of o)if(t&&null===n.get(e))return!0;return!1}return Object.values(e).some((e=>e))},o=e=>{if(e)return"denied"!==e},s=e=>{const t=Object.entries({functional:null,marketing:null,statistics:null,...e}).map((([e,t])=>[e,o(t)]));return Object.fromEntries(t)},i=e=>typeof e>"u"?null:!1===e||"false"===String(e).toLowerCase()?"denied":"accepted",a=e=>{const t=Object.entries({functional:void 0,marketing:void 0,statistics:void 0,...e}).map((([e,t])=>[e,i(t)]));return Object.fromEntries(t)},r=({marketing:e,functional:t,statistics:n})=>({...e&&{marketing:e},...t&&{functional:t},...n&&{statistics:n}});export{r as buildRequirementsObject,a as convertBooleanConsentObjectToConsentObject,i as convertBooleanToConsentValue,s as convertConsentObjectToBooleans,o as convertConsentValueToFormValue,e as getConsentCookie,t as setConsentCookie,n as shouldShowConsentDialog};
2
+ //# sourceMappingURL=cookieConsentUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookieConsentUtils.js","sources":["../../../../src/components/cookie-consent/cookieConsentUtils.ts"],"sourcesContent":["import type { Consent, ConsentRequirement, ConsentState } from \"./types\";\n\nconst getCookie = (name: string) => {\n if (typeof document === \"undefined\") {\n return undefined;\n }\n\n const cookie = document.cookie\n // split a string of cookies into array of cookies\n .split(\";\")\n // split cookies into [name, value]\n .map((s) => s.trim().split(\"=\"))\n // find our golden nugget\n .find((c) => c[0] === name);\n\n if (!cookie) {\n return undefined;\n }\n\n return cookie;\n};\n\nexport const getConsentCookie = ({\n adapter,\n name,\n}: {\n adapter?: () => Consent | undefined;\n name: string;\n}): Consent | undefined => {\n const cookie = getCookie(name);\n\n if (cookie) {\n const consent = JSON.parse(cookie[1]);\n\n return consent as Consent;\n }\n\n if (adapter) {\n return adapter();\n }\n\n return undefined;\n};\n\n// 120 days\nconst DEFAULT_MAX_AGE = 10368000;\n\nexport const setConsentCookie = ({\n consent,\n maxAge = DEFAULT_MAX_AGE,\n name,\n domain,\n}: {\n consent: Consent;\n maxAge?: number;\n name: string;\n domain?: string;\n}): void => {\n document.cookie = [\n `${name}=${JSON.stringify(consent)}`,\n `max-age=${maxAge}`,\n `SameSite=Lax`,\n !!domain && `domain=${domain}`,\n ]\n .filter((f) => f)\n .join(\";\");\n};\n\nexport const shouldShowConsentDialog = (requirement: ConsentRequirement, consent: Consent | undefined): boolean => {\n if (!consent) {\n // check if requirement has truthy values. should show consent if it has\n return Object.values(requirement).some((requirementValue) => requirementValue);\n } else {\n // convert to a map to ease accessing dynamic keys\n const consentMap = new Map(Object.entries(consent));\n\n // pls spare the CPU of converting to an entries array 3 times\n const requirementEntries = Object.entries(requirement);\n\n for (const [name, required] of requirementEntries) {\n // no need to check more if the value isn't required\n if (!required) {\n continue;\n }\n\n // cancel and show consent if a value isn't decided\n if (consentMap.get(name) === null) {\n return true;\n }\n }\n\n return false;\n }\n};\n\nexport const convertConsentValueToFormValue = (consent: ConsentState): boolean | undefined => {\n if (!consent) {\n return undefined;\n }\n\n if (consent === \"denied\") {\n return false;\n }\n\n return true;\n};\n\nexport const convertConsentObjectToBooleans = (\n consent: Partial<Record<keyof Consent, ConsentState>>,\n): { [k: string]: boolean | undefined } => {\n const defaultConsent = {\n functional: null,\n marketing: null,\n statistics: null,\n };\n\n const consentEntries: Array<[string, boolean | undefined]> = Object.entries({ ...defaultConsent, ...consent }).map(\n ([consentName, value]) => [consentName, convertConsentValueToFormValue(value)],\n );\n return Object.fromEntries(consentEntries);\n};\n\nexport const convertBooleanToConsentValue = (formValue: boolean | undefined): ConsentState => {\n if (typeof formValue === \"undefined\") {\n return null;\n }\n\n if (formValue === false || String(formValue).toLowerCase() === \"false\") {\n return \"denied\";\n }\n\n return \"accepted\";\n};\n\nexport const convertBooleanConsentObjectToConsentObject = (\n consent: Partial<Record<keyof Consent, boolean | undefined>>,\n): Consent => {\n const defaultObject = {\n functional: undefined,\n marketing: undefined,\n statistics: undefined,\n };\n\n const consentEntries = Object.entries({ ...defaultObject, ...consent }).map(([consentName, value]) => [\n consentName,\n convertBooleanToConsentValue(value),\n ]);\n\n return Object.fromEntries(consentEntries);\n};\n\nexport const buildRequirementsObject = ({ marketing, functional, statistics }: ConsentRequirement) => {\n return {\n ...(marketing && { marketing }),\n ...(functional && { functional }),\n ...(statistics && { statistics }),\n };\n};\n"],"names":["getConsentCookie","adapter","name","cookie","document","split","map","s","trim","find","c","getCookie","JSON","parse","setConsentCookie","consent","maxAge","domain","stringify","filter","f","join","shouldShowConsentDialog","requirement","consentMap","Map","Object","entries","requirementEntries","required","get","values","some","requirementValue","convertConsentValueToFormValue","convertConsentObjectToBooleans","consentEntries","functional","marketing","statistics","consentName","value","fromEntries","convertBooleanToConsentValue","formValue","String","toLowerCase","convertBooleanConsentObjectToConsentObject","buildRequirementsObject"],"mappings":"AAEA,MAoBaA,EAAmB,EAC5BC,QAAAA,EACAC,KAAAA,MAKMC,MAAAA,EA3BQ,CAACD,IACX,UAAOE,SAAa,IACb,OAGLD,MAAAA,EAASC,SAASD,OAEnBE,MAAM,KAENC,KAAKC,GAAMA,EAAEC,OAAOH,MAAM,OAE1BI,MAAMC,GAAMA,EAAE,KAAOR,IAErBC,OAAAA,QAAAA,CAIEA,EAUQQ,CAAUT,GAErBC,OAAAA,EACgBS,KAAKC,MAAMV,EAAO,IAKlCF,EACOA,SADPA,CACe,EASVa,EAAmB,EAC5BC,QAAAA,EACAC,OAAAA,EAAS,QACTd,KAAAA,EACAe,OAAAA,MAOAb,SAASD,OAAS,CACd,GAAGD,KAAQU,KAAKM,UAAUH,KAC1B,WAAWC,IACX,iBACEC,GAAU,UAAUA,KAErBE,QAAQC,GAAMA,IACdC,KAAK,IAAG,EAGJC,EAA0B,CAACC,EAAiCR,KACrE,GAAKA,EAGE,CAEGS,MAAAA,EAAa,IAAIC,IAAIC,OAAOC,QAAQZ,IAGpCa,EAAqBF,OAAOC,QAAQJ,GAE/B,IAAA,MAACrB,EAAM2B,KAAaD,EAE3B,GAAKC,GAKwB,OAAzBL,EAAWM,IAAI5B,GACR,OAAA,EAIR,OAAA,CACX,CArBI,OAAOwB,OAAOK,OAAOR,GAAaS,MAAMC,GAAqBA,GAAgB,EAwBxEC,EAAkCnB,IACtCA,GAAAA,EAIL,MAAgB,WAAZA,CAAY,EAOPoB,EACTpB,IAQM,MAAAqB,EAAuDV,OAAOC,QAAQ,CALxEU,WAAY,KACZC,UAAW,KACXC,WAAY,QAGoFxB,IAAWT,KAC3G,EAAEkC,EAAaC,KAAW,CAACD,EAAaN,EAA+BO,MAEpE,OAAAf,OAAOgB,YAAYN,EAAc,EAG/BO,EAAgCC,UAC9BA,EAAc,IACd,MAGO,IAAdA,GAA2D,UAApCC,OAAOD,GAAWE,cAClC,SAGJ,WAGEC,EACThC,IAQA,MAAMqB,EAAiBV,OAAOC,QAAQ,CALlCU,gBAAY,EACZC,eAAW,EACXC,gBAAY,KAG6CxB,IAAWT,KAAI,EAAEkC,EAAaC,KAAW,CAClGD,EACAG,EAA6BF,MAG1B,OAAAf,OAAOgB,YAAYN,EAAc,EAG/BY,EAA0B,EAAGV,UAAAA,EAAWD,WAAAA,EAAYE,WAAAA,MACtD,IACCD,GAAa,CAAEA,UAAAA,MACfD,GAAc,CAAEA,WAAAA,MAChBE,GAAc,CAAEA,WAAAA"}
@@ -0,0 +1,2 @@
1
+ import{CookieConsent as o}from"./CookieConsent.js";import{CookieConsentProvider as e,useCookieConsent as s}from"./CookieConsentContext.js";export{o as CookieConsent,e as CookieConsentProvider,s as useCookieConsent};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +1,2 @@
1
- import{Card as o}from"./card/Card.js";import{CardImage as n}from"./card/CardImage.js";import{InfoBlock as r,NavCard as s}from"./card/NavCard.js";import{TaskCard as a}from"./card/TaskCard.js";import{InfoCard as i}from"./card/InfoCard.js";import{Icon as e}from"./icon/Icon.js";import{ArrowVerticalAnimated as t}from"./icon/icons/animated/ArrowVerticalAnimated.js";import{ArrowHorizontalAnimated as c}from"./icon/icons/animated/ArrowHorizontalAnimated.js";import{PlusRemoveAnimated as m}from"./icon/icons/animated/PlusRemoveAnimated.js";import{ArrowDownIcon as p}from"./icon/icons/ArrowDownIcon.js";import{ArrowLeftIcon as I}from"./icon/icons/ArrowLeftIcon.js";import{ArrowNorthEastIcon as l}from"./icon/icons/ArrowNorthEastIcon.js";import{ArrowRightIcon as f}from"./icon/icons/ArrowRightIcon.js";import{ArrowUpIcon as u}from"./icon/icons/ArrowUpIcon.js";import{CalendarIcon as k}from"./icon/icons/CalendarIcon.js";import{CheckIcon as j}from"./icon/icons/CheckIcon.js";import{ChevronDownIcon as d}from"./icon/icons/ChevronDownIcon.js";import{ChevronLeftIcon as C}from"./icon/icons/ChevronLeftIcon.js";import{ChevronRightIcon as T}from"./icon/icons/ChevronRightIcon.js";import{ChevronUpIcon as g}from"./icon/icons/ChevronUpIcon.js";import{CloseIcon as h}from"./icon/icons/CloseIcon.js";import{CopyIcon as S}from"./icon/icons/CopyIcon.js";import{DotsIcon as A}from"./icon/icons/DotsIcon.js";import{DragIcon as w}from"./icon/icons/DragIcon.js";import{ErrorIcon as L}from"./icon/icons/ErrorIcon.js";import{GreenCheckIcon as b}from"./icon/icons/GreenCheckIcon.js";import{HamburgerIcon as v}from"./icon/icons/HamburgerIcon.js";import{InfoIcon as R}from"./icon/icons/InfoIcon.js";import{LinkIcon as D}from"./icon/icons/LinkIcon.js";import{PlusIcon as G}from"./icon/icons/PlusIcon.js";import{QuestionIcon as P}from"./icon/icons/QuestionIcon.js";import{RedCrossIcon as B}from"./icon/icons/RedCrossIcon.js";import{SearchIcon as E}from"./icon/icons/SearchIcon.js";import{SuccessIcon as N}from"./icon/icons/SuccessIcon.js";import{WarningIcon as U}from"./icon/icons/WarningIcon.js";import{MinusIcon as H}from"./icon/icons/MinusIcon.js";import{ThumbDownIcon as x}from"./icon/icons/ThumbDownIcon.js";import{ThumbUpIcon as y}from"./icon/icons/ThumbUpIcon.js";import{TrashCanIcon as W}from"./icon/icons/TrashCanIcon.js";import{PenIcon as z}from"./icon/icons/PenIcon.js";import{IconButton as F}from"./icon-button/IconButton.js";import{FieldGroup as M}from"./input-group/FieldGroup.js";import{InputGroup as O}from"./input-group/InputGroup.js";import{Label as Q}from"./input-group/Label.js";import{SupportLabel as V}from"./input-group/SupportLabel.js";import{Link as q}from"./link/Link.js";import{NavLink as J}from"./link/NavLink.js";import{LinkList as K}from"./link-list/LinkList.js";import{Loader as X}from"./loader/Loader.js";import{SkeletonAnimation as Y}from"./loader/skeletons/SkeletonAnimation.js";import{SkeletonButton as Z}from"./loader/skeletons/SkeletonButton.js";import{SkeletonCheckboxGroup as $}from"./loader/skeletons/SkeletonCheckboxGroup.js";import{SkeletonElement as _}from"./loader/skeletons/SkeletonElement.js";import{SkeletonInput as oo}from"./loader/skeletons/SkeletonInput.js";import{SkeletonRadioButtonGroup as no}from"./loader/skeletons/SkeletonRadioButtonGroup.js";import{SkeletonTable as ro,SkeletonTableHeader as so,SkeletonTableRow as ao}from"./loader/skeletons/SkeletonTable.js";import{SkeletonTextArea as io}from"./loader/skeletons/SkeletonTextArea.js";import{ErrorTag as eo,InfoTag as to,SuccessTag as co,Tag as mo,WarningTag as po}from"./tag/Tag.js";import{Tooltip as Io}from"./tooltip/Tooltip.js";import{TooltipContent as lo}from"./tooltip/TooltipContent.js";import{TooltipTrigger as fo}from"./tooltip/TooltipTrigger.js";import{PopupTip as uo}from"./tooltip/PopupTip.js";import{ScreenReaderOnly as ko}from"./ScreenReaderOnly.js";export{p as ArrowDownIcon,c as ArrowHorizontalAnimated,I as ArrowLeftIcon,l as ArrowNorthEastIcon,f as ArrowRightIcon,u as ArrowUpIcon,t as ArrowVerticalAnimated,k as CalendarIcon,o as Card,n as CardImage,j as CheckIcon,d as ChevronDownIcon,C as ChevronLeftIcon,T as ChevronRightIcon,g as ChevronUpIcon,h as CloseIcon,S as CopyIcon,A as DotsIcon,w as DragIcon,L as ErrorIcon,eo as ErrorTag,M as FieldGroup,b as GreenCheckIcon,v as HamburgerIcon,e as Icon,F as IconButton,r as InfoBlock,i as InfoCard,R as InfoIcon,to as InfoTag,O as InputGroup,Q as Label,q as Link,D as LinkIcon,K as LinkList,X as Loader,H as MinusIcon,s as NavCard,J as NavLink,z as PenIcon,G as PlusIcon,m as PlusRemoveAnimated,uo as PopupTip,P as QuestionIcon,B as RedCrossIcon,ko as ScreenReaderOnly,E as SearchIcon,Y as SkeletonAnimation,Z as SkeletonButton,$ as SkeletonCheckboxGroup,_ as SkeletonElement,oo as SkeletonInput,no as SkeletonRadioButtonGroup,ro as SkeletonTable,so as SkeletonTableHeader,ao as SkeletonTableRow,io as SkeletonTextArea,N as SuccessIcon,co as SuccessTag,V as SupportLabel,mo as Tag,a as TaskCard,x as ThumbDownIcon,y as ThumbUpIcon,Io as Tooltip,lo as TooltipContent,fo as TooltipTrigger,W as TrashCanIcon,U as WarningIcon,po as WarningTag};
1
+ import{AccordionItem as o}from"./accordion/AccordionItem.js";import{Accordion as s}from"./accordion/Accordion.js";import{Breadcrumb as a}from"./breadcrumb/Breadcrumb.js";import{BreadcrumbItem as n}from"./breadcrumb/BreadcrumbItem.js";import{Button as r,PrimaryButton as t,SecondaryButton as e,TertiaryButton as i}from"./button/Button.js";import{Card as c}from"./card/Card.js";import{CardImage as m}from"./card/CardImage.js";import{InfoBlock as p,NavCard as l}from"./card/NavCard.js";import{TaskCard as I}from"./card/TaskCard.js";import{InfoCard as d}from"./card/InfoCard.js";import{Checkbox as u}from"./checkbox/Checkbox.js";import{Combobox as f,getComboboxValuePair as C}from"./combobox/Combobox.js";import{CookieConsent as k}from"./cookie-consent/CookieConsent.js";import{CookieConsentProvider as j,useCookieConsent as b}from"./cookie-consent/CookieConsentContext.js";import{Icon as T}from"./icon/Icon.js";import{ArrowVerticalAnimated as h}from"./icon/icons/animated/ArrowVerticalAnimated.js";import{ArrowHorizontalAnimated as S}from"./icon/icons/animated/ArrowHorizontalAnimated.js";import{PlusRemoveAnimated as g}from"./icon/icons/animated/PlusRemoveAnimated.js";import{ArrowDownIcon as A}from"./icon/icons/ArrowDownIcon.js";import{ArrowLeftIcon as L}from"./icon/icons/ArrowLeftIcon.js";import{ArrowNorthEastIcon as B}from"./icon/icons/ArrowNorthEastIcon.js";import{ArrowRightIcon as w}from"./icon/icons/ArrowRightIcon.js";import{ArrowUpIcon as R}from"./icon/icons/ArrowUpIcon.js";import{CalendarIcon as v}from"./icon/icons/CalendarIcon.js";import{CheckIcon as M}from"./icon/icons/CheckIcon.js";import{ChevronDownIcon as x}from"./icon/icons/ChevronDownIcon.js";import{ChevronLeftIcon as G}from"./icon/icons/ChevronLeftIcon.js";import{ChevronRightIcon as P}from"./icon/icons/ChevronRightIcon.js";import{ChevronUpIcon as y}from"./icon/icons/ChevronUpIcon.js";import{CloseIcon as D}from"./icon/icons/CloseIcon.js";import{CopyIcon as N}from"./icon/icons/CopyIcon.js";import{DotsIcon as E}from"./icon/icons/DotsIcon.js";import{DragIcon as U}from"./icon/icons/DragIcon.js";import{ErrorIcon as H}from"./icon/icons/ErrorIcon.js";import{GreenCheckIcon as O}from"./icon/icons/GreenCheckIcon.js";import{HamburgerIcon as V}from"./icon/icons/HamburgerIcon.js";import{InfoIcon as W}from"./icon/icons/InfoIcon.js";import{LinkIcon as z}from"./icon/icons/LinkIcon.js";import{PlusIcon as F}from"./icon/icons/PlusIcon.js";import{QuestionIcon as Q}from"./icon/icons/QuestionIcon.js";import{RedCrossIcon as q}from"./icon/icons/RedCrossIcon.js";import{SearchIcon as J}from"./icon/icons/SearchIcon.js";import{SuccessIcon as K}from"./icon/icons/SuccessIcon.js";import{WarningIcon as X}from"./icon/icons/WarningIcon.js";import{MinusIcon as Y}from"./icon/icons/MinusIcon.js";import{ThumbDownIcon as Z}from"./icon/icons/ThumbDownIcon.js";import{ThumbUpIcon as $}from"./icon/icons/ThumbUpIcon.js";import{TrashCanIcon as _}from"./icon/icons/TrashCanIcon.js";import{PenIcon as oo}from"./icon/icons/PenIcon.js";import{IconButton as so}from"./icon-button/IconButton.js";import{FieldGroup as ao}from"./input-group/FieldGroup.js";import{InputGroup as no}from"./input-group/InputGroup.js";import{Label as ro}from"./input-group/Label.js";import{SupportLabel as to}from"./input-group/SupportLabel.js";import{Link as eo}from"./link/Link.js";import{NavLink as io}from"./link/NavLink.js";import{LinkList as co}from"./link-list/LinkList.js";import{List as mo,OrderedList as po,UnorderedList as lo}from"./list/List.js";import{CheckListItem as Io,CrossListItem as uo,ListItem as fo}from"./list/ListItem.js";import{Loader as Co}from"./loader/Loader.js";import{SkeletonAnimation as ko}from"./loader/skeletons/SkeletonAnimation.js";import{SkeletonButton as jo}from"./loader/skeletons/SkeletonButton.js";import{SkeletonCheckboxGroup as bo}from"./loader/skeletons/SkeletonCheckboxGroup.js";import{SkeletonElement as To}from"./loader/skeletons/SkeletonElement.js";import{SkeletonInput as ho}from"./loader/skeletons/SkeletonInput.js";import{SkeletonRadioButtonGroup as So}from"./loader/skeletons/SkeletonRadioButtonGroup.js";import{SkeletonTable as go,SkeletonTableHeader as Ao,SkeletonTableRow as Lo}from"./loader/skeletons/SkeletonTable.js";import{SkeletonTextArea as Bo}from"./loader/skeletons/SkeletonTextArea.js";import{Modal as wo,ModalActions as Ro,ModalBody as vo,ModalCloseButton as Mo,ModalContainer as xo,ModalHeader as Go,ModalOverlay as Po,ModalTitle as yo}from"./modal/Modal.js";import{useModal as Do}from"./modal/useModal.js";import{RadioButton as No}from"./radio-button/RadioButton.js";import{RadioButtonGroup as Eo}from"./radio-button/RadioButtonGroup.js";import{BaseRadioButton as Uo}from"./radio-button/BaseRadioButton.js";import{N as Ho,S as Oo}from"../../NativeSelect-DOSP8-ZQ.js";import{ErrorTag as Vo,InfoTag as Wo,SuccessTag as zo,Tag as Fo,WarningTag as Qo}from"./tag/Tag.js";import{Tooltip as qo}from"./tooltip/Tooltip.js";import{TooltipContent as Jo}from"./tooltip/TooltipContent.js";import{TooltipTrigger as Ko}from"./tooltip/TooltipTrigger.js";import{PopupTip as Xo}from"./tooltip/PopupTip.js";import{ScreenReaderOnly as Yo}from"./ScreenReaderOnly.js";export{s as Accordion,o as AccordionItem,A as ArrowDownIcon,S as ArrowHorizontalAnimated,L as ArrowLeftIcon,B as ArrowNorthEastIcon,w as ArrowRightIcon,R as ArrowUpIcon,h as ArrowVerticalAnimated,Uo as BaseRadioButton,a as Breadcrumb,n as BreadcrumbItem,r as Button,v as CalendarIcon,c as Card,m as CardImage,M as CheckIcon,Io as CheckListItem,u as Checkbox,x as ChevronDownIcon,G as ChevronLeftIcon,P as ChevronRightIcon,y as ChevronUpIcon,D as CloseIcon,f as Combobox,k as CookieConsent,j as CookieConsentProvider,N as CopyIcon,uo as CrossListItem,E as DotsIcon,U as DragIcon,H as ErrorIcon,Vo as ErrorTag,ao as FieldGroup,O as GreenCheckIcon,V as HamburgerIcon,T as Icon,so as IconButton,p as InfoBlock,d as InfoCard,W as InfoIcon,Wo as InfoTag,no as InputGroup,ro as Label,eo as Link,z as LinkIcon,co as LinkList,mo as List,fo as ListItem,Co as Loader,Y as MinusIcon,wo as Modal,Ro as ModalActions,vo as ModalBody,Mo as ModalCloseButton,xo as ModalContainer,Go as ModalHeader,Po as ModalOverlay,yo as ModalTitle,Ho as NativeSelect,l as NavCard,io as NavLink,po as OrderedList,oo as PenIcon,F as PlusIcon,g as PlusRemoveAnimated,Xo as PopupTip,t as PrimaryButton,Q as QuestionIcon,No as RadioButton,Eo as RadioButtonGroup,q as RedCrossIcon,Yo as ScreenReaderOnly,J as SearchIcon,e as SecondaryButton,Oo as Select,ko as SkeletonAnimation,jo as SkeletonButton,bo as SkeletonCheckboxGroup,To as SkeletonElement,ho as SkeletonInput,So as SkeletonRadioButtonGroup,go as SkeletonTable,Ao as SkeletonTableHeader,Lo as SkeletonTableRow,Bo as SkeletonTextArea,K as SuccessIcon,zo as SuccessTag,to as SupportLabel,Fo as Tag,I as TaskCard,i as TertiaryButton,Z as ThumbDownIcon,$ as ThumbUpIcon,qo as Tooltip,Jo as TooltipContent,Ko as TooltipTrigger,_ as TrashCanIcon,lo as UnorderedList,X as WarningIcon,Qo as WarningTag,C as getComboboxValuePair,b as useCookieConsent,Do as useModal};
2
2
  //# sourceMappingURL=index.js.map