@fremtind/jokul 0.71.2 → 1.0.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 (586) hide show
  1. package/README.md +5 -37
  2. package/build/build-stats.html +1 -1
  3. package/build/cjs/components/autosuggest/BaseAutosuggest.cjs +1 -1
  4. package/build/cjs/components/autosuggest/BaseAutosuggest.cjs.map +1 -1
  5. package/build/cjs/components/autosuggest/Menu.cjs +1 -1
  6. package/build/cjs/components/autosuggest/Menu.cjs.map +1 -1
  7. package/build/cjs/components/button/Button.cjs +1 -1
  8. package/build/cjs/components/button/Button.cjs.map +1 -1
  9. package/build/cjs/components/card/index.cjs +1 -1
  10. package/build/cjs/components/card/index.d.cts +1 -4
  11. package/build/cjs/components/card/types.cjs +1 -1
  12. package/build/cjs/components/card/types.cjs.map +1 -1
  13. package/build/cjs/components/card/types.d.cts +0 -51
  14. package/build/cjs/components/checkbox-panel/CheckboxPanel.cjs +1 -1
  15. package/build/cjs/components/checkbox-panel/CheckboxPanel.cjs.map +1 -1
  16. package/build/cjs/components/combobox/Combobox.cjs +1 -1
  17. package/build/cjs/components/combobox/Combobox.cjs.map +1 -1
  18. package/build/cjs/components/combobox/stories/Combobox.stories.cjs +1 -1
  19. package/build/cjs/components/combobox/stories/Combobox.stories.cjs.map +1 -1
  20. package/build/cjs/components/combobox/stories/Combobox.stories.d.cts +1 -0
  21. package/build/cjs/components/cookie-consent/CookieConsent.cjs +1 -1
  22. package/build/cjs/components/cookie-consent/CookieConsent.cjs.map +1 -1
  23. package/build/cjs/components/datepicker/DatePicker.cjs +1 -1
  24. package/build/cjs/components/datepicker/DatePicker.cjs.map +1 -1
  25. package/build/cjs/components/datepicker/internal/Calendar.cjs +1 -1
  26. package/build/cjs/components/datepicker/internal/Calendar.cjs.map +1 -1
  27. package/build/cjs/components/datepicker/internal/utils.cjs +1 -1
  28. package/build/cjs/components/datepicker/internal/utils.cjs.map +1 -1
  29. package/build/cjs/components/datepicker/stories/Datepicker.stories.cjs +1 -1
  30. package/build/cjs/components/datepicker/stories/Datepicker.stories.cjs.map +1 -1
  31. package/build/cjs/components/datepicker/stories/Datepicker.stories.d.cts +13 -0
  32. package/build/cjs/components/description-list/stories/DescriptionList.stories.cjs +1 -1
  33. package/build/cjs/components/description-list/stories/DescriptionList.stories.cjs.map +1 -1
  34. package/build/cjs/components/expander/ExpandablePanel.cjs +1 -1
  35. package/build/cjs/components/expander/ExpandablePanel.cjs.map +1 -1
  36. package/build/cjs/components/expander/ExpandablePanelContent.cjs +1 -1
  37. package/build/cjs/components/expander/ExpandablePanelContent.cjs.map +1 -1
  38. package/build/cjs/components/expander/Expander.cjs +1 -1
  39. package/build/cjs/components/expander/Expander.cjs.map +1 -1
  40. package/build/cjs/components/expander/index.cjs +1 -1
  41. package/build/cjs/components/expander/index.d.cts +0 -1
  42. package/build/cjs/components/expander/stories/{ExpanderPanel.stories.cjs → ExpandablePanel.stories.cjs} +1 -1
  43. package/build/cjs/components/expander/stories/ExpandablePanel.stories.cjs.map +1 -0
  44. package/build/cjs/components/feedback/followup/Followup.cjs +1 -1
  45. package/build/cjs/components/feedback/followup/Followup.cjs.map +1 -1
  46. package/build/cjs/components/feedback/followup/useFollowup.cjs +1 -1
  47. package/build/cjs/components/feedback/followup/useFollowup.cjs.map +1 -1
  48. package/build/cjs/components/feedback/main-question/MainQuestion.cjs +1 -1
  49. package/build/cjs/components/feedback/main-question/MainQuestion.cjs.map +1 -1
  50. package/build/cjs/components/feedback/main-question/useMainQuestion.cjs +1 -1
  51. package/build/cjs/components/feedback/main-question/useMainQuestion.cjs.map +1 -1
  52. package/build/cjs/components/feedback/questions/AddonQuestion.cjs +1 -1
  53. package/build/cjs/components/feedback/questions/AddonQuestion.cjs.map +1 -1
  54. package/build/cjs/components/feedback/questions/CheckboxQuestion.cjs +1 -1
  55. package/build/cjs/components/feedback/questions/CheckboxQuestion.cjs.map +1 -1
  56. package/build/cjs/components/feedback/questions/ContactQuestion.cjs +1 -1
  57. package/build/cjs/components/feedback/questions/ContactQuestion.cjs.map +1 -1
  58. package/build/cjs/components/feedback/questions/RadioQuestion.cjs +1 -1
  59. package/build/cjs/components/feedback/questions/RadioQuestion.cjs.map +1 -1
  60. package/build/cjs/components/feedback/questions/SmileyQuestion.cjs +1 -1
  61. package/build/cjs/components/feedback/questions/SmileyQuestion.cjs.map +1 -1
  62. package/build/cjs/components/feedback/questions/TextQuestion.cjs +1 -1
  63. package/build/cjs/components/feedback/questions/TextQuestion.cjs.map +1 -1
  64. package/build/cjs/components/file/File.cjs.map +1 -1
  65. package/build/cjs/components/file/stories/File.stories.cjs.map +1 -1
  66. package/build/cjs/components/file/stories/File.stories.d.cts +1 -1
  67. package/build/cjs/components/file-input/FileInput.cjs.map +1 -1
  68. package/build/cjs/components/file-input/internal/Dropzone.cjs.map +1 -1
  69. package/build/cjs/components/file-input/internal/Input.cjs.map +1 -1
  70. package/build/cjs/components/file-input/internal/fileInputContext.cjs.map +1 -1
  71. package/build/cjs/components/file-input/internal/validateFileInputFiles.cjs +1 -1
  72. package/build/cjs/components/file-input/internal/validateFileInputFiles.cjs.map +1 -1
  73. package/build/cjs/components/file-input/stories/FileInput.stories.cjs.map +1 -1
  74. package/build/cjs/components/icon/stories/Icons.stories.cjs +1 -1
  75. package/build/cjs/components/image/useImageLoadingStatus.cjs +1 -1
  76. package/build/cjs/components/image/useImageLoadingStatus.cjs.map +1 -1
  77. package/build/cjs/components/input-group/InputGroup.cjs +1 -1
  78. package/build/cjs/components/input-group/InputGroup.cjs.map +1 -1
  79. package/build/cjs/components/input-group/stories/FieldGroup.stories.cjs +1 -1
  80. package/build/cjs/components/link/stories/Link.stories.cjs +1 -1
  81. package/build/cjs/components/link/stories/Link.stories.cjs.map +1 -1
  82. package/build/cjs/components/menu/Menu.cjs +1 -1
  83. package/build/cjs/components/menu/Menu.cjs.map +1 -1
  84. package/build/cjs/components/menu/MenuItemCheckbox.cjs +1 -1
  85. package/build/cjs/components/menu/MenuItemCheckbox.cjs.map +1 -1
  86. package/build/cjs/components/message/Message.cjs +1 -1
  87. package/build/cjs/components/message/Message.cjs.map +1 -1
  88. package/build/cjs/components/modal/stories/ModalCloseButton.stories.d.cts +1 -1
  89. package/build/cjs/components/modal/stories/ModalOverlay.stories.cjs +1 -1
  90. package/build/cjs/components/modal/stories/ModalOverlay.stories.cjs.map +1 -1
  91. package/build/cjs/components/popover/Popover.cjs +1 -1
  92. package/build/cjs/components/popover/Popover.cjs.map +1 -1
  93. package/build/cjs/components/radio-panel/RadioPanel.cjs +1 -1
  94. package/build/cjs/components/radio-panel/RadioPanel.cjs.map +1 -1
  95. package/build/cjs/components/screen-reader-only/ScreenReaderOnly.cjs.map +1 -0
  96. package/build/cjs/components/screen-reader-only/ScreenReaderOnly.d.cts +3 -0
  97. package/build/cjs/components/screen-reader-only/index.cjs +2 -0
  98. package/build/cjs/components/screen-reader-only/index.d.cts +2 -0
  99. package/build/cjs/components/screen-reader-only/types.d.cts +4 -0
  100. package/build/cjs/components/select/Select.cjs +1 -1
  101. package/build/cjs/components/select/Select.cjs.map +1 -1
  102. package/build/cjs/components/select/select-utils.cjs +1 -1
  103. package/build/cjs/components/select/select-utils.cjs.map +1 -1
  104. package/build/cjs/components/system-message/SystemMessage.cjs +1 -1
  105. package/build/cjs/components/system-message/SystemMessage.cjs.map +1 -1
  106. package/build/cjs/components/table/TableHeader.cjs +1 -1
  107. package/build/cjs/components/table/TableHeader.cjs.map +1 -1
  108. package/build/cjs/components/table/TableRow.cjs +1 -1
  109. package/build/cjs/components/table/TableRow.cjs.map +1 -1
  110. package/build/cjs/components/table/stories/data.cjs +2 -0
  111. package/build/cjs/components/table/stories/data.cjs.map +1 -0
  112. package/build/cjs/components/table/stories/data.d.cts +8 -0
  113. package/build/cjs/components/table/stories/table.stories.cjs +1 -1
  114. package/build/cjs/components/table/stories/table.stories.cjs.map +1 -1
  115. package/build/cjs/components/table/stories/table.stories.d.cts +10 -1
  116. package/build/cjs/components/table/stories/tableCollapsing.stories.cjs +2 -0
  117. package/build/cjs/components/table/stories/tableCollapsing.stories.cjs.map +1 -0
  118. package/build/cjs/components/table/stories/tableCollapsing.stories.d.cts +16 -0
  119. package/build/cjs/components/table/stories/tableComplex.stories.cjs +2 -0
  120. package/build/cjs/components/table/stories/tableComplex.stories.cjs.map +1 -0
  121. package/build/cjs/components/table/stories/tableComplex.stories.d.cts +21 -0
  122. package/build/cjs/components/table/stories/tableFiltering.stories.cjs +2 -0
  123. package/build/cjs/components/table/stories/tableFiltering.stories.cjs.map +1 -0
  124. package/build/cjs/components/table/stories/tableFiltering.stories.d.cts +21 -0
  125. package/build/cjs/components/table/stories/tablePagination.stories.cjs +2 -0
  126. package/build/cjs/components/table/stories/tablePagination.stories.cjs.map +1 -0
  127. package/build/cjs/components/{accordion/stories/Accordion.stories.d.cts → table/stories/tablePagination.stories.d.cts} +2 -2
  128. package/build/cjs/components/tabs/NavTab.cjs +1 -1
  129. package/build/cjs/components/tabs/NavTab.cjs.map +1 -1
  130. package/build/cjs/components/tabs/NavTabs.cjs +1 -1
  131. package/build/cjs/components/tabs/NavTabs.cjs.map +1 -1
  132. package/build/cjs/components/tabs/TabList.cjs +1 -1
  133. package/build/cjs/components/tabs/TabList.cjs.map +1 -1
  134. package/build/cjs/components/text-area/BaseTextArea.cjs +1 -1
  135. package/build/cjs/components/text-area/BaseTextArea.cjs.map +1 -1
  136. package/build/cjs/components/toast/Toast.cjs +1 -1
  137. package/build/cjs/components/toast/Toast.cjs.map +1 -1
  138. package/build/cjs/components/toast/toastContext.cjs +1 -1
  139. package/build/cjs/components/toast/toastContext.cjs.map +1 -1
  140. package/build/cjs/components/toggle-switch/ToggleSwitch.cjs +1 -1
  141. package/build/cjs/components/toggle-switch/ToggleSwitch.cjs.map +1 -1
  142. package/build/cjs/components/toggle-switch/usePillStyles.cjs +1 -1
  143. package/build/cjs/components/toggle-switch/usePillStyles.cjs.map +1 -1
  144. package/build/cjs/components/tooltip/PopupTip.cjs +1 -1
  145. package/build/cjs/components/tooltip/PopupTip.cjs.map +1 -1
  146. package/build/cjs/components/tooltip/Tooltip.cjs +1 -1
  147. package/build/cjs/components/tooltip/Tooltip.cjs.map +1 -1
  148. package/build/cjs/components/tooltip/TooltipTrigger.cjs +1 -1
  149. package/build/cjs/components/tooltip/TooltipTrigger.cjs.map +1 -1
  150. package/build/cjs/hooks/useAnimatedHeight/useAnimatedHeight.cjs +1 -1
  151. package/build/cjs/hooks/useAnimatedHeight/useAnimatedHeight.cjs.map +1 -1
  152. package/build/cjs/hooks/useAnimatedHeight/useAnimatedHeightBetween.cjs +1 -1
  153. package/build/cjs/hooks/useAnimatedHeight/useAnimatedHeightBetween.cjs.map +1 -1
  154. package/build/cjs/hooks/useAnimatedHeight/useAutoAnimateHeight.cjs +1 -1
  155. package/build/cjs/hooks/useAnimatedHeight/useAutoAnimateHeight.cjs.map +1 -1
  156. package/build/cjs/hooks/useAriaLiveRegion/useAriaLiveRegion.cjs +1 -1
  157. package/build/cjs/hooks/useAriaLiveRegion/useAriaLiveRegion.cjs.map +1 -1
  158. package/build/cjs/hooks/useAriaLiveRegion/useAriaLiveRegion.d.cts +1 -1
  159. package/build/cjs/hooks/useClickOutside/useClickOutside.cjs +1 -1
  160. package/build/cjs/hooks/useClickOutside/useClickOutside.cjs.map +1 -1
  161. package/build/cjs/hooks/useElementDimensions/useElementDimensions.cjs +1 -1
  162. package/build/cjs/hooks/useElementDimensions/useElementDimensions.cjs.map +1 -1
  163. package/build/cjs/hooks/useFocusOutside/useFocusOutside.cjs +1 -1
  164. package/build/cjs/hooks/useFocusOutside/useFocusOutside.cjs.map +1 -1
  165. package/build/cjs/hooks/useIntersectionObserver/useIntersectionObserver.cjs +1 -1
  166. package/build/cjs/hooks/useIntersectionObserver/useIntersectionObserver.cjs.map +1 -1
  167. package/build/cjs/hooks/useKeyListener/useKeyListener.cjs +1 -1
  168. package/build/cjs/hooks/useKeyListener/useKeyListener.cjs.map +1 -1
  169. package/build/cjs/hooks/useScrollIntoView/useScrollIntoView.cjs +1 -1
  170. package/build/cjs/hooks/useScrollIntoView/useScrollIntoView.cjs.map +1 -1
  171. package/build/cjs/hooks/useSwipeGesture/useSwipeGesture.cjs +1 -1
  172. package/build/cjs/hooks/useSwipeGesture/useSwipeGesture.cjs.map +1 -1
  173. package/build/cjs/index.cjs +1 -1
  174. package/build/cjs/index.d.cts +0 -1
  175. package/build/cjs/utilities/formatters/date/formatDate.cjs +1 -1
  176. package/build/cjs/utilities/formatters/date/formatDate.cjs.map +1 -1
  177. package/build/cjs/utilities/formatters/fodselsnummer/formatFodselsnummer.cjs +1 -1
  178. package/build/cjs/utilities/formatters/fodselsnummer/formatFodselsnummer.cjs.map +1 -1
  179. package/build/cjs/utilities/formatters/kontonummer/formatKontonummer.cjs +1 -1
  180. package/build/cjs/utilities/formatters/kontonummer/formatKontonummer.cjs.map +1 -1
  181. package/build/cjs/utilities/formatters/kortnummer/formatKortnummer.cjs +1 -1
  182. package/build/cjs/utilities/formatters/kortnummer/formatKortnummer.cjs.map +1 -1
  183. package/build/cjs/utilities/formatters/organisasjonsnummer/formatOrganisasjonsnummer.cjs +1 -1
  184. package/build/cjs/utilities/formatters/organisasjonsnummer/formatOrganisasjonsnummer.cjs.map +1 -1
  185. package/build/cjs/utilities/formatters/telefonnummer/formatTelefonnummer.cjs +1 -1
  186. package/build/cjs/utilities/formatters/telefonnummer/formatTelefonnummer.cjs.map +1 -1
  187. package/build/cjs/utilities/formatters/util/registerWithMask.cjs +1 -1
  188. package/build/cjs/utilities/formatters/util/registerWithMask.cjs.map +1 -1
  189. package/build/cjs/utilities/formatters/valuta/formatValuta.cjs +1 -1
  190. package/build/cjs/utilities/formatters/valuta/formatValuta.cjs.map +1 -1
  191. package/build/cjs/utilities/tabListener.cjs +1 -1
  192. package/build/cjs/utilities/tabListener.cjs.map +1 -1
  193. package/build/cjs/utilities/validators/hasMinimumWords/hasMinimumWords.cjs +1 -1
  194. package/build/cjs/utilities/validators/hasMinimumWords/hasMinimumWords.cjs.map +1 -1
  195. package/build/es/components/autosuggest/BaseAutosuggest.js +2 -2
  196. package/build/es/components/autosuggest/BaseAutosuggest.js.map +1 -1
  197. package/build/es/components/autosuggest/Menu.js +1 -1
  198. package/build/es/components/autosuggest/Menu.js.map +1 -1
  199. package/build/es/components/button/Button.js +1 -1
  200. package/build/es/components/button/Button.js.map +1 -1
  201. package/build/es/components/card/index.d.ts +1 -4
  202. package/build/es/components/card/index.js +1 -1
  203. package/build/es/components/card/types.d.ts +0 -51
  204. package/build/es/components/card/types.js +1 -1
  205. package/build/es/components/card/types.js.map +1 -1
  206. package/build/es/components/checkbox-panel/CheckboxPanel.js +1 -1
  207. package/build/es/components/checkbox-panel/CheckboxPanel.js.map +1 -1
  208. package/build/es/components/combobox/Combobox.js +1 -1
  209. package/build/es/components/combobox/Combobox.js.map +1 -1
  210. package/build/es/components/combobox/stories/Combobox.stories.d.ts +1 -0
  211. package/build/es/components/combobox/stories/Combobox.stories.js +1 -1
  212. package/build/es/components/combobox/stories/Combobox.stories.js.map +1 -1
  213. package/build/es/components/cookie-consent/CookieConsent.js +1 -1
  214. package/build/es/components/cookie-consent/CookieConsent.js.map +1 -1
  215. package/build/es/components/datepicker/DatePicker.js +1 -1
  216. package/build/es/components/datepicker/DatePicker.js.map +1 -1
  217. package/build/es/components/datepicker/internal/Calendar.js +1 -1
  218. package/build/es/components/datepicker/internal/Calendar.js.map +1 -1
  219. package/build/es/components/datepicker/internal/utils.js +1 -1
  220. package/build/es/components/datepicker/internal/utils.js.map +1 -1
  221. package/build/es/components/datepicker/stories/Datepicker.stories.d.ts +13 -0
  222. package/build/es/components/datepicker/stories/Datepicker.stories.js +1 -1
  223. package/build/es/components/datepicker/stories/Datepicker.stories.js.map +1 -1
  224. package/build/es/components/description-list/stories/DescriptionList.stories.js +1 -1
  225. package/build/es/components/description-list/stories/DescriptionList.stories.js.map +1 -1
  226. package/build/es/components/expander/ExpandablePanel.js +1 -1
  227. package/build/es/components/expander/ExpandablePanel.js.map +1 -1
  228. package/build/es/components/expander/ExpandablePanelContent.js +1 -1
  229. package/build/es/components/expander/ExpandablePanelContent.js.map +1 -1
  230. package/build/es/components/expander/Expander.js +1 -1
  231. package/build/es/components/expander/Expander.js.map +1 -1
  232. package/build/es/components/expander/index.d.ts +0 -1
  233. package/build/es/components/expander/index.js +1 -1
  234. package/build/es/components/expander/stories/{ExpanderPanel.stories.js → ExpandablePanel.stories.js} +1 -1
  235. package/build/es/components/expander/stories/ExpandablePanel.stories.js.map +1 -0
  236. package/build/es/components/feedback/followup/Followup.js +1 -1
  237. package/build/es/components/feedback/followup/Followup.js.map +1 -1
  238. package/build/es/components/feedback/followup/useFollowup.js +1 -1
  239. package/build/es/components/feedback/followup/useFollowup.js.map +1 -1
  240. package/build/es/components/feedback/main-question/MainQuestion.js +1 -1
  241. package/build/es/components/feedback/main-question/MainQuestion.js.map +1 -1
  242. package/build/es/components/feedback/main-question/useMainQuestion.js +1 -1
  243. package/build/es/components/feedback/main-question/useMainQuestion.js.map +1 -1
  244. package/build/es/components/feedback/questions/AddonQuestion.js +1 -1
  245. package/build/es/components/feedback/questions/AddonQuestion.js.map +1 -1
  246. package/build/es/components/feedback/questions/CheckboxQuestion.js +1 -1
  247. package/build/es/components/feedback/questions/CheckboxQuestion.js.map +1 -1
  248. package/build/es/components/feedback/questions/ContactQuestion.js +1 -1
  249. package/build/es/components/feedback/questions/ContactQuestion.js.map +1 -1
  250. package/build/es/components/feedback/questions/RadioQuestion.js +1 -1
  251. package/build/es/components/feedback/questions/RadioQuestion.js.map +1 -1
  252. package/build/es/components/feedback/questions/SmileyQuestion.js +1 -1
  253. package/build/es/components/feedback/questions/SmileyQuestion.js.map +1 -1
  254. package/build/es/components/feedback/questions/TextQuestion.js +1 -1
  255. package/build/es/components/feedback/questions/TextQuestion.js.map +1 -1
  256. package/build/es/components/file/File.js.map +1 -1
  257. package/build/es/components/file/stories/File.stories.d.ts +1 -1
  258. package/build/es/components/file/stories/File.stories.js.map +1 -1
  259. package/build/es/components/file-input/FileInput.js.map +1 -1
  260. package/build/es/components/file-input/internal/Dropzone.js.map +1 -1
  261. package/build/es/components/file-input/internal/Input.js.map +1 -1
  262. package/build/es/components/file-input/internal/fileInputContext.js.map +1 -1
  263. package/build/es/components/file-input/internal/validateFileInputFiles.js +1 -1
  264. package/build/es/components/file-input/internal/validateFileInputFiles.js.map +1 -1
  265. package/build/es/components/file-input/stories/FileInput.stories.js.map +1 -1
  266. package/build/es/components/icon/stories/Icons.stories.js +1 -1
  267. package/build/es/components/image/useImageLoadingStatus.js +1 -1
  268. package/build/es/components/image/useImageLoadingStatus.js.map +1 -1
  269. package/build/es/components/input-group/InputGroup.js +1 -1
  270. package/build/es/components/input-group/InputGroup.js.map +1 -1
  271. package/build/es/components/link/stories/Link.stories.js +1 -1
  272. package/build/es/components/link/stories/Link.stories.js.map +1 -1
  273. package/build/es/components/loader/stories/Skeleton.stories.js +1 -1
  274. package/build/es/components/menu/Menu.js +1 -1
  275. package/build/es/components/menu/Menu.js.map +1 -1
  276. package/build/es/components/menu/MenuItemCheckbox.js +1 -1
  277. package/build/es/components/menu/MenuItemCheckbox.js.map +1 -1
  278. package/build/es/components/message/Message.js +1 -1
  279. package/build/es/components/message/Message.js.map +1 -1
  280. package/build/es/components/modal/stories/ModalCloseButton.stories.d.ts +1 -1
  281. package/build/es/components/modal/stories/ModalOverlay.stories.js +1 -1
  282. package/build/es/components/modal/stories/ModalOverlay.stories.js.map +1 -1
  283. package/build/es/components/popover/Popover.js +1 -1
  284. package/build/es/components/popover/Popover.js.map +1 -1
  285. package/build/es/components/radio-panel/RadioPanel.js +1 -1
  286. package/build/es/components/radio-panel/RadioPanel.js.map +1 -1
  287. package/build/es/components/screen-reader-only/ScreenReaderOnly.d.ts +3 -0
  288. package/build/es/components/screen-reader-only/ScreenReaderOnly.js.map +1 -0
  289. package/build/es/components/screen-reader-only/index.d.ts +2 -0
  290. package/build/es/components/screen-reader-only/index.js +2 -0
  291. package/build/es/components/screen-reader-only/types.d.ts +4 -0
  292. package/build/es/components/select/Select.js +1 -1
  293. package/build/es/components/select/Select.js.map +1 -1
  294. package/build/es/components/select/select-utils.js +1 -1
  295. package/build/es/components/select/select-utils.js.map +1 -1
  296. package/build/es/components/system-message/SystemMessage.js +1 -1
  297. package/build/es/components/system-message/SystemMessage.js.map +1 -1
  298. package/build/es/components/table/TableHeader.js +1 -1
  299. package/build/es/components/table/TableHeader.js.map +1 -1
  300. package/build/es/components/table/TableRow.js +1 -1
  301. package/build/es/components/table/TableRow.js.map +1 -1
  302. package/build/es/components/table/stories/data.d.ts +8 -0
  303. package/build/es/components/table/stories/data.js +2 -0
  304. package/build/es/components/table/stories/data.js.map +1 -0
  305. package/build/es/components/table/stories/table.stories.d.ts +10 -1
  306. package/build/es/components/table/stories/table.stories.js +1 -1
  307. package/build/es/components/table/stories/table.stories.js.map +1 -1
  308. package/build/es/components/table/stories/tableCollapsing.stories.d.ts +16 -0
  309. package/build/es/components/table/stories/tableCollapsing.stories.js +2 -0
  310. package/build/es/components/table/stories/tableCollapsing.stories.js.map +1 -0
  311. package/build/es/components/table/stories/tableComplex.stories.d.ts +21 -0
  312. package/build/es/components/table/stories/tableComplex.stories.js +2 -0
  313. package/build/es/components/table/stories/tableComplex.stories.js.map +1 -0
  314. package/build/es/components/table/stories/tableFiltering.stories.d.ts +21 -0
  315. package/build/es/components/table/stories/tableFiltering.stories.js +2 -0
  316. package/build/es/components/table/stories/tableFiltering.stories.js.map +1 -0
  317. package/build/{cjs/components/accordion/stories/AccordionItem.stories.d.cts → es/components/table/stories/tablePagination.stories.d.ts} +2 -2
  318. package/build/es/components/table/stories/tablePagination.stories.js +2 -0
  319. package/build/es/components/table/stories/tablePagination.stories.js.map +1 -0
  320. package/build/es/components/tabs/NavTab.js +1 -1
  321. package/build/es/components/tabs/NavTab.js.map +1 -1
  322. package/build/es/components/tabs/NavTabs.js +1 -1
  323. package/build/es/components/tabs/NavTabs.js.map +1 -1
  324. package/build/es/components/tabs/TabList.js +1 -1
  325. package/build/es/components/tabs/TabList.js.map +1 -1
  326. package/build/es/components/text-area/BaseTextArea.js +1 -1
  327. package/build/es/components/text-area/BaseTextArea.js.map +1 -1
  328. package/build/es/components/toast/Toast.js +1 -1
  329. package/build/es/components/toast/Toast.js.map +1 -1
  330. package/build/es/components/toast/toastContext.js +1 -1
  331. package/build/es/components/toast/toastContext.js.map +1 -1
  332. package/build/es/components/toggle-switch/ToggleSwitch.js +1 -1
  333. package/build/es/components/toggle-switch/ToggleSwitch.js.map +1 -1
  334. package/build/es/components/toggle-switch/usePillStyles.js +1 -1
  335. package/build/es/components/toggle-switch/usePillStyles.js.map +1 -1
  336. package/build/es/components/tooltip/PopupTip.js +1 -1
  337. package/build/es/components/tooltip/PopupTip.js.map +1 -1
  338. package/build/es/components/tooltip/Tooltip.js +1 -1
  339. package/build/es/components/tooltip/Tooltip.js.map +1 -1
  340. package/build/es/components/tooltip/TooltipTrigger.js +1 -1
  341. package/build/es/components/tooltip/TooltipTrigger.js.map +1 -1
  342. package/build/es/hooks/useAnimatedHeight/useAnimatedHeight.js +1 -1
  343. package/build/es/hooks/useAnimatedHeight/useAnimatedHeight.js.map +1 -1
  344. package/build/es/hooks/useAnimatedHeight/useAnimatedHeightBetween.js +1 -1
  345. package/build/es/hooks/useAnimatedHeight/useAnimatedHeightBetween.js.map +1 -1
  346. package/build/es/hooks/useAnimatedHeight/useAutoAnimateHeight.js +1 -1
  347. package/build/es/hooks/useAnimatedHeight/useAutoAnimateHeight.js.map +1 -1
  348. package/build/es/hooks/useAriaLiveRegion/useAriaLiveRegion.d.ts +1 -1
  349. package/build/es/hooks/useAriaLiveRegion/useAriaLiveRegion.js +1 -1
  350. package/build/es/hooks/useAriaLiveRegion/useAriaLiveRegion.js.map +1 -1
  351. package/build/es/hooks/useClickOutside/useClickOutside.js +1 -1
  352. package/build/es/hooks/useClickOutside/useClickOutside.js.map +1 -1
  353. package/build/es/hooks/useElementDimensions/useElementDimensions.js +1 -1
  354. package/build/es/hooks/useElementDimensions/useElementDimensions.js.map +1 -1
  355. package/build/es/hooks/useFocusOutside/useFocusOutside.js +1 -1
  356. package/build/es/hooks/useFocusOutside/useFocusOutside.js.map +1 -1
  357. package/build/es/hooks/useIntersectionObserver/useIntersectionObserver.js +1 -1
  358. package/build/es/hooks/useIntersectionObserver/useIntersectionObserver.js.map +1 -1
  359. package/build/es/hooks/useKeyListener/useKeyListener.js +1 -1
  360. package/build/es/hooks/useKeyListener/useKeyListener.js.map +1 -1
  361. package/build/es/hooks/useScrollIntoView/useScrollIntoView.js +1 -1
  362. package/build/es/hooks/useScrollIntoView/useScrollIntoView.js.map +1 -1
  363. package/build/es/hooks/useSwipeGesture/useSwipeGesture.js +1 -1
  364. package/build/es/hooks/useSwipeGesture/useSwipeGesture.js.map +1 -1
  365. package/build/es/index.d.ts +0 -1
  366. package/build/es/index.js +1 -1
  367. package/build/es/utilities/formatters/date/formatDate.js +1 -1
  368. package/build/es/utilities/formatters/date/formatDate.js.map +1 -1
  369. package/build/es/utilities/formatters/fodselsnummer/formatFodselsnummer.js +1 -1
  370. package/build/es/utilities/formatters/fodselsnummer/formatFodselsnummer.js.map +1 -1
  371. package/build/es/utilities/formatters/kontonummer/formatKontonummer.js +1 -1
  372. package/build/es/utilities/formatters/kontonummer/formatKontonummer.js.map +1 -1
  373. package/build/es/utilities/formatters/kortnummer/formatKortnummer.js +1 -1
  374. package/build/es/utilities/formatters/kortnummer/formatKortnummer.js.map +1 -1
  375. package/build/es/utilities/formatters/organisasjonsnummer/formatOrganisasjonsnummer.js +1 -1
  376. package/build/es/utilities/formatters/organisasjonsnummer/formatOrganisasjonsnummer.js.map +1 -1
  377. package/build/es/utilities/formatters/telefonnummer/formatTelefonnummer.js +1 -1
  378. package/build/es/utilities/formatters/telefonnummer/formatTelefonnummer.js.map +1 -1
  379. package/build/es/utilities/formatters/util/registerWithMask.js +1 -1
  380. package/build/es/utilities/formatters/util/registerWithMask.js.map +1 -1
  381. package/build/es/utilities/formatters/valuta/formatValuta.js +1 -1
  382. package/build/es/utilities/formatters/valuta/formatValuta.js.map +1 -1
  383. package/build/es/utilities/tabListener.js +1 -1
  384. package/build/es/utilities/tabListener.js.map +1 -1
  385. package/build/es/utilities/validators/hasMinimumWords/hasMinimumWords.js +1 -1
  386. package/build/es/utilities/validators/hasMinimumWords/hasMinimumWords.js.map +1 -1
  387. package/build/jokul.css +1 -1
  388. package/build/paginated-table-data-VQZB3_Aj.cjs +2 -0
  389. package/build/paginated-table-data-VQZB3_Aj.cjs.map +1 -0
  390. package/build/paginated-table-data-ZMeh4d0Y.js +2 -0
  391. package/build/paginated-table-data-ZMeh4d0Y.js.map +1 -0
  392. package/package.json +61 -81
  393. package/styles/components/autosuggest/autosuggest.scss +4 -4
  394. package/styles/components/card/card.css +0 -248
  395. package/styles/components/card/card.min.css +1 -1
  396. package/styles/components/card/card.scss +0 -3
  397. package/styles/components/checkbox/checkbox.css +4 -4
  398. package/styles/components/checkbox/checkbox.min.css +1 -1
  399. package/styles/components/checkbox-panel/checkbox-panel.css +2 -2
  400. package/styles/components/checkbox-panel/checkbox-panel.min.css +1 -1
  401. package/styles/components/chip/chip.css +9 -1
  402. package/styles/components/chip/chip.min.css +1 -1
  403. package/styles/components/chip/chip.scss +8 -1
  404. package/styles/components/combobox/combobox.css +17 -19
  405. package/styles/components/combobox/combobox.min.css +1 -1
  406. package/styles/components/combobox/combobox.scss +18 -18
  407. package/styles/components/countdown/countdown.css +2 -2
  408. package/styles/components/countdown/countdown.min.css +1 -1
  409. package/styles/components/datepicker/_index.scss +1 -0
  410. package/styles/components/description-list/description-list.scss +7 -7
  411. package/styles/components/expander/_index.scss +0 -1
  412. package/styles/components/feedback/feedback.css +2 -2
  413. package/styles/components/feedback/feedback.min.css +1 -1
  414. package/styles/components/feedback/feedback.scss +4 -3
  415. package/styles/components/file-input/file-input.css +13 -14
  416. package/styles/components/file-input/file-input.min.css +1 -1
  417. package/styles/components/input-group/_labels.scss +21 -21
  418. package/styles/components/input-group/input-group.css +2 -2
  419. package/styles/components/input-group/input-group.min.css +1 -1
  420. package/styles/components/link/link.css +2 -3
  421. package/styles/components/link/link.min.css +1 -1
  422. package/styles/components/link/link.scss +3 -2
  423. package/styles/components/loader/loader.css +6 -6
  424. package/styles/components/loader/loader.min.css +1 -1
  425. package/styles/components/loader/skeleton-loader.css +5 -5
  426. package/styles/components/loader/skeleton-loader.min.css +1 -1
  427. package/styles/components/loader/skeleton-loader.scss +10 -10
  428. package/styles/components/menu/menu.css +5 -5
  429. package/styles/components/menu/menu.min.css +1 -1
  430. package/styles/components/menu/menu.scss +3 -3
  431. package/styles/components/message/message.css +2 -2
  432. package/styles/components/message/message.min.css +1 -1
  433. package/styles/components/progress-bar/progress-bar.css +1 -1
  434. package/styles/components/progress-bar/progress-bar.min.css +1 -1
  435. package/styles/components/radio-button/radio-button.css +4 -3
  436. package/styles/components/radio-button/radio-button.min.css +1 -1
  437. package/styles/components/radio-button/radio-button.scss +18 -19
  438. package/styles/components/radio-panel/radio-panel.css +2 -2
  439. package/styles/components/radio-panel/radio-panel.min.css +1 -1
  440. package/styles/components/summary-table/summary-table.scss +3 -3
  441. package/styles/components/system-message/system-message.css +2 -2
  442. package/styles/components/system-message/system-message.min.css +1 -1
  443. package/styles/components/system-message/system-message.scss +8 -8
  444. package/styles/components/table/_table-cell.scss +4 -4
  445. package/styles/components/table/_table-header.scss +4 -2
  446. package/styles/components/table/_table-row.scss +13 -12
  447. package/styles/components/table/table.css +13 -11
  448. package/styles/components/text-area/text-area.css +6 -4
  449. package/styles/components/text-area/text-area.min.css +5 -1
  450. package/styles/components/text-input/text-input.css +6 -4
  451. package/styles/components/text-input/text-input.min.css +5 -1
  452. package/styles/components/toast/toast.css +4 -4
  453. package/styles/components/toast/toast.min.css +1 -1
  454. package/styles/components/toggle-switch/_toggle-slider.scss +2 -2
  455. package/styles/core/core.css +0 -160
  456. package/styles/core/core.min.css +1 -1
  457. package/styles/core/jkl/_spacing.scss +1 -62
  458. package/styles/core/jkl/_typography.scss +21 -91
  459. package/styles/shared/input/shared-input-styles.css +6 -4
  460. package/styles/shared/input/shared-input-styles.min.css +5 -1
  461. package/styles/shared/input/shared-input-styles.scss +15 -11
  462. package/styles/styles.css +265 -766
  463. package/styles/styles.min.css +5 -7
  464. package/styles/styles.scss +0 -1
  465. package/build/cjs/components/ScreenReaderOnly.cjs.map +0 -1
  466. package/build/cjs/components/ScreenReaderOnly.d.cts +0 -6
  467. package/build/cjs/components/accordion/Accordion.cjs +0 -2
  468. package/build/cjs/components/accordion/Accordion.cjs.map +0 -1
  469. package/build/cjs/components/accordion/Accordion.d.cts +0 -7
  470. package/build/cjs/components/accordion/AccordionItem.cjs +0 -2
  471. package/build/cjs/components/accordion/AccordionItem.cjs.map +0 -1
  472. package/build/cjs/components/accordion/AccordionItem.d.cts +0 -7
  473. package/build/cjs/components/accordion/documentation/AccordionDocs.cjs +0 -2
  474. package/build/cjs/components/accordion/documentation/AccordionDocs.cjs.map +0 -1
  475. package/build/cjs/components/accordion/documentation/AccordionDocs.d.cts +0 -2
  476. package/build/cjs/components/accordion/index.cjs +0 -2
  477. package/build/cjs/components/accordion/index.d.cts +0 -3
  478. package/build/cjs/components/accordion/stories/Accordion.stories.cjs +0 -2
  479. package/build/cjs/components/accordion/stories/Accordion.stories.cjs.map +0 -1
  480. package/build/cjs/components/accordion/stories/AccordionItem.stories.cjs +0 -2
  481. package/build/cjs/components/accordion/stories/AccordionItem.stories.cjs.map +0 -1
  482. package/build/cjs/components/accordion/types.d.cts +0 -13
  483. package/build/cjs/components/accordion/vite-env.d.cjs +0 -2
  484. package/build/cjs/components/accordion/vite-env.d.cjs.map +0 -1
  485. package/build/cjs/components/card/InfoCard.cjs +0 -2
  486. package/build/cjs/components/card/InfoCard.cjs.map +0 -1
  487. package/build/cjs/components/card/InfoCard.d.cts +0 -13
  488. package/build/cjs/components/card/NavCard.cjs +0 -2
  489. package/build/cjs/components/card/NavCard.cjs.map +0 -1
  490. package/build/cjs/components/card/NavCard.d.cts +0 -26
  491. package/build/cjs/components/card/TaskCard.cjs +0 -2
  492. package/build/cjs/components/card/TaskCard.cjs.map +0 -1
  493. package/build/cjs/components/card/TaskCard.d.cts +0 -23
  494. package/build/cjs/components/card/development/examples/InfoCardExample.d.cts +0 -3
  495. package/build/cjs/components/card/development/examples/NavCardExample.d.cts +0 -3
  496. package/build/cjs/components/card/development/examples/TaskCardExample.d.cts +0 -3
  497. package/build/cjs/components/card/development/examples/TopExample.d.cts +0 -3
  498. package/build/cjs/components/card/development/examples/cardExampleProps.d.cts +0 -13
  499. package/build/cjs/components/card/utils.cjs +0 -2
  500. package/build/cjs/components/card/utils.cjs.map +0 -1
  501. package/build/cjs/components/card/utils.d.cts +0 -3
  502. package/build/cjs/components/expander/deprecated/ExpandSection.cjs +0 -2
  503. package/build/cjs/components/expander/deprecated/ExpandSection.cjs.map +0 -1
  504. package/build/cjs/components/expander/deprecated/ExpandSection.d.cts +0 -26
  505. package/build/cjs/components/expander/deprecated/Expander.cjs +0 -2
  506. package/build/cjs/components/expander/deprecated/Expander.cjs.map +0 -1
  507. package/build/cjs/components/expander/deprecated/Expander.d.cts +0 -27
  508. package/build/cjs/components/expander/stories/ExpanderPanel.stories.cjs.map +0 -1
  509. package/build/cjs/components/index.cjs +0 -2
  510. package/build/cjs/components/index.cjs.map +0 -1
  511. package/build/cjs/components/index.d.cts +0 -47
  512. package/build/es/components/ScreenReaderOnly.d.ts +0 -6
  513. package/build/es/components/ScreenReaderOnly.js.map +0 -1
  514. package/build/es/components/accordion/Accordion.d.ts +0 -7
  515. package/build/es/components/accordion/Accordion.js +0 -2
  516. package/build/es/components/accordion/Accordion.js.map +0 -1
  517. package/build/es/components/accordion/AccordionItem.d.ts +0 -7
  518. package/build/es/components/accordion/AccordionItem.js +0 -2
  519. package/build/es/components/accordion/AccordionItem.js.map +0 -1
  520. package/build/es/components/accordion/documentation/AccordionDocs.d.ts +0 -2
  521. package/build/es/components/accordion/documentation/AccordionDocs.js +0 -2
  522. package/build/es/components/accordion/documentation/AccordionDocs.js.map +0 -1
  523. package/build/es/components/accordion/index.d.ts +0 -3
  524. package/build/es/components/accordion/index.js +0 -2
  525. package/build/es/components/accordion/stories/Accordion.stories.d.ts +0 -13
  526. package/build/es/components/accordion/stories/Accordion.stories.js +0 -2
  527. package/build/es/components/accordion/stories/Accordion.stories.js.map +0 -1
  528. package/build/es/components/accordion/stories/AccordionItem.stories.d.ts +0 -13
  529. package/build/es/components/accordion/stories/AccordionItem.stories.js +0 -2
  530. package/build/es/components/accordion/stories/AccordionItem.stories.js.map +0 -1
  531. package/build/es/components/accordion/types.d.ts +0 -13
  532. package/build/es/components/accordion/vite-env.d.js +0 -2
  533. package/build/es/components/accordion/vite-env.d.js.map +0 -1
  534. package/build/es/components/card/InfoCard.d.ts +0 -13
  535. package/build/es/components/card/InfoCard.js +0 -2
  536. package/build/es/components/card/InfoCard.js.map +0 -1
  537. package/build/es/components/card/NavCard.d.ts +0 -26
  538. package/build/es/components/card/NavCard.js +0 -2
  539. package/build/es/components/card/NavCard.js.map +0 -1
  540. package/build/es/components/card/TaskCard.d.ts +0 -23
  541. package/build/es/components/card/TaskCard.js +0 -2
  542. package/build/es/components/card/TaskCard.js.map +0 -1
  543. package/build/es/components/card/development/examples/InfoCardExample.d.ts +0 -3
  544. package/build/es/components/card/development/examples/NavCardExample.d.ts +0 -3
  545. package/build/es/components/card/development/examples/TaskCardExample.d.ts +0 -3
  546. package/build/es/components/card/development/examples/TopExample.d.ts +0 -3
  547. package/build/es/components/card/development/examples/cardExampleProps.d.ts +0 -13
  548. package/build/es/components/card/utils.d.ts +0 -3
  549. package/build/es/components/card/utils.js +0 -2
  550. package/build/es/components/card/utils.js.map +0 -1
  551. package/build/es/components/expander/deprecated/ExpandSection.d.ts +0 -26
  552. package/build/es/components/expander/deprecated/ExpandSection.js +0 -2
  553. package/build/es/components/expander/deprecated/ExpandSection.js.map +0 -1
  554. package/build/es/components/expander/deprecated/Expander.d.ts +0 -27
  555. package/build/es/components/expander/deprecated/Expander.js +0 -2
  556. package/build/es/components/expander/deprecated/Expander.js.map +0 -1
  557. package/build/es/components/expander/stories/ExpanderPanel.stories.js.map +0 -1
  558. package/build/es/components/index.d.ts +0 -47
  559. package/build/es/components/index.js +0 -2
  560. package/build/es/components/index.js.map +0 -1
  561. package/styles/components/accordion/_index.scss +0 -2
  562. package/styles/components/accordion/accordion.css +0 -189
  563. package/styles/components/accordion/accordion.min.css +0 -7
  564. package/styles/components/accordion/accordion.scss +0 -168
  565. package/styles/components/card/_info-card.scss +0 -42
  566. package/styles/components/card/_nav-card.scss +0 -119
  567. package/styles/components/card/_task-card.scss +0 -55
  568. package/styles/components/card/development/info-card-example.css +0 -26
  569. package/styles/components/card/development/info-card-example.min.css +0 -1
  570. package/styles/components/card/development/info-card-example.scss +0 -14
  571. package/styles/components/card/development/task-card-example.css +0 -9
  572. package/styles/components/card/development/task-card-example.min.css +0 -1
  573. package/styles/components/card/development/task-card-example.scss +0 -8
  574. package/styles/components/expander/deprecated/expander.css +0 -82
  575. package/styles/components/expander/deprecated/expander.min.css +0 -1
  576. package/styles/components/expander/deprecated/expander.scss +0 -87
  577. /package/build/cjs/components/expander/stories/{ExpanderPanel.stories.d.cts → ExpandablePanel.stories.d.cts} +0 -0
  578. /package/build/cjs/components/{ScreenReaderOnly.cjs → screen-reader-only/ScreenReaderOnly.cjs} +0 -0
  579. /package/build/cjs/components/{accordion → screen-reader-only}/index.cjs.map +0 -0
  580. /package/build/cjs/components/{accordion → screen-reader-only}/types.cjs +0 -0
  581. /package/build/cjs/components/{accordion → screen-reader-only}/types.cjs.map +0 -0
  582. /package/build/es/components/expander/stories/{ExpanderPanel.stories.d.ts → ExpandablePanel.stories.d.ts} +0 -0
  583. /package/build/es/components/{ScreenReaderOnly.js → screen-reader-only/ScreenReaderOnly.js} +0 -0
  584. /package/build/es/components/{accordion → screen-reader-only}/index.js.map +0 -0
  585. /package/build/es/components/{accordion → screen-reader-only}/types.js +0 -0
  586. /package/build/es/components/{accordion → screen-reader-only}/types.js.map +0 -0
@@ -1,2 +1,2 @@
1
- "use strict";const e=require("react/jsx-runtime"),t=require("react"),s=require("../../../clsx-E3yX_9sL.cjs");module.exports=function({downshiftProps:{getMenuProps:i,getItemProps:l},highlightedIndex:u,items:a,itemToString:n,noHitsMessage:g,maxNumberOfHits:r=Number.POSITIVE_INFINITY,noHits:m}){const o=a.length>r?a.slice(0,r):a;if(0===o.length&&!g&&!m)return null;const c=0===o.length&&m?m.items:o;return e.jsxs("div",{"data-testid":"autosuggest__menu",className:"jkl-autosuggest__menu",children:[(g||m)&&0===o.length&&e.jsx("div",{className:"jkl-autosuggest__no-hits-message","aria-live":"polite",children:g||(null==m?void 0:m.text)}),c.length>0&&e.jsx("ul",{...i({className:"jkl-autosuggest__item-list"}),children:c.map(((e,i)=>t.createElement("li",{...l({item:e,className:s.clsx("jkl-autosuggest__item",{"jkl-autosuggest__item--active":i===u})}),"data-testid":"autosuggest__item",key:n(e)},n(e))))})]})};
1
+ "use strict";const e=require("react/jsx-runtime"),t=require("react"),s=require("../../../clsx-E3yX_9sL.cjs");module.exports=function({downshiftProps:{getMenuProps:i,getItemProps:l},highlightedIndex:u,items:a,itemToString:n,noHitsMessage:g,maxNumberOfHits:r=Number.POSITIVE_INFINITY,noHits:m}){const o=a.length>r?a.slice(0,r):a;if(0===o.length&&!g&&!m)return null;const c=0===o.length&&m?m.items:o;return e.jsxs("div",{"data-testid":"autosuggest__menu",className:"jkl-autosuggest__menu",children:[(g||m)&&0===o.length&&e.jsx("div",{className:"jkl-autosuggest__no-hits-message","aria-live":"polite",children:g||m?.text}),c.length>0&&e.jsx("ul",{...i({className:"jkl-autosuggest__item-list"}),children:c.map(((e,i)=>t.createElement("li",{...l({item:e,className:s.clsx("jkl-autosuggest__item",{"jkl-autosuggest__item--active":i===u})}),"data-testid":"autosuggest__item",key:n(e)},n(e))))})]})};
2
2
  //# sourceMappingURL=Menu.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.cjs","sources":["../../../../src/components/autosuggest/Menu.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport type { PropGetters } from \"downshift\";\nimport React, { type ReactNode } from \"react\";\n\ninterface MenuProps<T> {\n downshiftProps: Pick<PropGetters<T>, \"getMenuProps\" | \"getItemProps\">;\n highlightedIndex: number | undefined | null;\n items: T[];\n itemToString: (item: T | null) => string;\n noHitsMessage?: ReactNode;\n maxNumberOfHits?: number;\n noHits?: { items: T[]; text: ReactNode };\n}\n\nfunction Menu<T>({\n downshiftProps: { getMenuProps, getItemProps },\n highlightedIndex,\n items,\n itemToString,\n noHitsMessage,\n maxNumberOfHits = Number.POSITIVE_INFINITY,\n noHits,\n}: MenuProps<T>): JSX.Element | null {\n const visibleItems =\n items.length > maxNumberOfHits\n ? items.slice(0, maxNumberOfHits)\n : items;\n\n if (visibleItems.length === 0 && !noHitsMessage && !noHits) {\n return null;\n }\n\n const itemList =\n visibleItems.length === 0 && noHits ? noHits.items : visibleItems;\n\n return (\n <div data-testid=\"autosuggest__menu\" className=\"jkl-autosuggest__menu\">\n {(noHitsMessage || noHits) && visibleItems.length === 0 && (\n <div\n className=\"jkl-autosuggest__no-hits-message\"\n aria-live=\"polite\"\n >\n {noHitsMessage || noHits?.text}\n </div>\n )}\n\n {itemList.length > 0 && (\n <ul\n {...getMenuProps({\n className: \"jkl-autosuggest__item-list\",\n })}\n >\n {itemList.map((item, index) => (\n <li\n {...getItemProps({\n item,\n className: clsx(\"jkl-autosuggest__item\", {\n \"jkl-autosuggest__item--active\":\n index === highlightedIndex,\n }),\n })}\n data-testid=\"autosuggest__item\"\n key={itemToString(item)}\n >\n {itemToString(item)}\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n\nexport default Menu;\n"],"names":["downshiftProps","getMenuProps","getItemProps","highlightedIndex","items","itemToString","noHitsMessage","maxNumberOfHits","Number","POSITIVE_INFINITY","noHits","visibleItems","length","slice","itemList","jsxs","className","children","jsx","text","map","item","index","createElement","clsx","key"],"mappings":"4HAcA,UACIA,gBAAkBC,aAAAA,EAAcC,aAAAA,GAChCC,iBAAAA,EACAC,MAAAA,EACAC,aAAAA,EACAC,cAAAA,EACAC,gBAAAA,EAAkBC,OAAOC,kBACzBC,OAAAA,IAEM,MAAAC,EACFP,EAAMQ,OAASL,EACTH,EAAMS,MAAM,EAAGN,GACfH,EAEV,GAA4B,IAAxBO,EAAaC,SAAiBN,IAAkBI,EACzC,OAAA,KAGX,MAAMI,EACsB,IAAxBH,EAAaC,QAAgBF,EAASA,EAAON,MAAQO,EAEzD,OACKI,EAAAA,KAAA,MAAA,CAAI,cAAY,oBAAoBC,UAAU,wBACzCC,SAAA,EAAiBX,GAAAI,IAAmC,IAAxBC,EAAaC,QACvCM,EAAAA,IAAC,MAAA,CACGF,UAAU,mCACV,YAAU,SAETC,aAAiB,MAAAP,OAAAA,EAAAA,EAAQS,QAIjCL,EAASF,OAAS,GACfM,EAAAA,IAAC,KAAA,IACOjB,EAAa,CACbe,UAAW,+BAGdC,SAASH,EAAAM,KAAI,CAACC,EAAMC,IACjBC,EAAAA,cAAC,KAAA,IACOrB,EAAa,CACbmB,KAAAA,EACAL,UAAWQ,OAAK,wBAAyB,CACrC,gCACIF,IAAUnB,MAGtB,cAAY,oBACZsB,IAAKpB,EAAagB,IAEjBhB,EAAagB,UAO1C"}
1
+ {"version":3,"file":"Menu.cjs","sources":["../../../../src/components/autosuggest/Menu.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport type { PropGetters } from \"downshift\";\nimport React, { type ReactNode } from \"react\";\n\ninterface MenuProps<T> {\n downshiftProps: Pick<PropGetters<T>, \"getMenuProps\" | \"getItemProps\">;\n highlightedIndex: number | undefined | null;\n items: T[];\n itemToString: (item: T | null) => string;\n noHitsMessage?: ReactNode;\n maxNumberOfHits?: number;\n noHits?: { items: T[]; text: ReactNode };\n}\n\nfunction Menu<T>({\n downshiftProps: { getMenuProps, getItemProps },\n highlightedIndex,\n items,\n itemToString,\n noHitsMessage,\n maxNumberOfHits = Number.POSITIVE_INFINITY,\n noHits,\n}: MenuProps<T>): JSX.Element | null {\n const visibleItems =\n items.length > maxNumberOfHits\n ? items.slice(0, maxNumberOfHits)\n : items;\n\n if (visibleItems.length === 0 && !noHitsMessage && !noHits) {\n return null;\n }\n\n const itemList =\n visibleItems.length === 0 && noHits ? noHits.items : visibleItems;\n\n return (\n <div data-testid=\"autosuggest__menu\" className=\"jkl-autosuggest__menu\">\n {(noHitsMessage || noHits) && visibleItems.length === 0 && (\n <div\n className=\"jkl-autosuggest__no-hits-message\"\n aria-live=\"polite\"\n >\n {noHitsMessage || noHits?.text}\n </div>\n )}\n\n {itemList.length > 0 && (\n <ul\n {...getMenuProps({\n className: \"jkl-autosuggest__item-list\",\n })}\n >\n {itemList.map((item, index) => (\n <li\n {...getItemProps({\n item,\n className: clsx(\"jkl-autosuggest__item\", {\n \"jkl-autosuggest__item--active\":\n index === highlightedIndex,\n }),\n })}\n data-testid=\"autosuggest__item\"\n key={itemToString(item)}\n >\n {itemToString(item)}\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n\nexport default Menu;\n"],"names":["downshiftProps","getMenuProps","getItemProps","highlightedIndex","items","itemToString","noHitsMessage","maxNumberOfHits","Number","POSITIVE_INFINITY","noHits","visibleItems","length","slice","itemList","jsxs","className","children","jsx","text","map","item","index","createElement","clsx","key"],"mappings":"4HAcA,UACIA,gBAAkBC,aAAAA,EAAcC,aAAAA,GAChCC,iBAAAA,EACAC,MAAAA,EACAC,aAAAA,EACAC,cAAAA,EACAC,gBAAAA,EAAkBC,OAAOC,kBACzBC,OAAAA,IAEM,MAAAC,EACFP,EAAMQ,OAASL,EACTH,EAAMS,MAAM,EAAGN,GACfH,EAEV,GAA4B,IAAxBO,EAAaC,SAAiBN,IAAkBI,EACzC,OAAA,KAGX,MAAMI,EACsB,IAAxBH,EAAaC,QAAgBF,EAASA,EAAON,MAAQO,EAEzD,OACKI,EAAAA,KAAA,MAAA,CAAI,cAAY,oBAAoBC,UAAU,wBACzCC,SAAA,EAAiBX,GAAAI,IAAmC,IAAxBC,EAAaC,QACvCM,EAAAA,IAAC,MAAA,CACGF,UAAU,mCACV,YAAU,SAETC,YAAiBP,GAAQS,OAIjCL,EAASF,OAAS,GACfM,EAAAA,IAAC,KAAA,IACOjB,EAAa,CACbe,UAAW,+BAGdC,SAASH,EAAAM,KAAI,CAACC,EAAMC,IACjBC,EAAAA,cAAC,KAAA,IACOrB,EAAa,CACbmB,KAAAA,EACAL,UAAWQ,OAAK,wBAAyB,CACrC,gCACIF,IAAUnB,MAGtB,cAAY,oBACZsB,IAAKpB,EAAagB,IAEjBhB,EAAagB,UAO1C"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("../../../clsx-E3yX_9sL.cjs"),n=require("react"),r=require("../../hooks/useAriaLiveRegion/useAriaLiveRegion.cjs"),o=require("../loader/Loader.cjs"),a=n.forwardRef((function(a,i){const{as:s="button",children:l,className:u,density:c,onTouchStart:d,onAnimationEnd:x,loader:j,icon:v,iconPosition:b="left",iconLeft:h,iconRight:m,variant:y="secondary",...g}=a,p=s;"production"!==process.env.NODE_ENV&&0===n.Children.count(l)&&!a["aria-label"]&&!a["aria-labelledby"]&&!a.title&&console.warn("Når du lager en Button uten synlig tekst må du huske å gi den et navn med enten aria-label, aria-labelledby eller title");const f=r.useAriaLiveRegion(null==j?void 0:j.showLoader),L=!!l&&!(null==j||!j.showLoader);return e.jsxs(p,{...f,"data-loading":L,"data-density":c,className:t.clsx("jkl-button",`jkl-button--${y}`,u),disabled:"button"===s?null==j?void 0:j.showLoader:void 0,...g,ref:i,children:[e.jsxs("div",{className:"jkl-button__label",children:[h&&h,v&&"left"===b&&v,l&&e.jsx("span",{className:"jkl-button__text",children:l}),m&&m,v&&"right"===b&&v]}),l&&e.jsx(o.Loader,{className:"jkl-button__loader",variant:"medium",textDescription:(null==j?void 0:j.textDescription)||"Vennligst vent","aria-hidden":!(null!=j&&j.showLoader)})]})}));exports.Button=a,exports.GhostButton=function(t){const n={...t,variant:"ghost"};return e.jsx(a,{...n})},exports.PrimaryButton=function(t){const n={...t,variant:"primary"};return e.jsx(a,{...n})},exports.SecondaryButton=function(t){const n={...t,variant:"secondary"};return e.jsx(a,{...n})},exports.TertiaryButton=function(t){const n={...t,variant:"tertiary"};return e.jsx(a,{...n})};
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("../../../clsx-E3yX_9sL.cjs"),n=require("react"),r=require("../../hooks/useAriaLiveRegion/useAriaLiveRegion.cjs"),o=require("../loader/Loader.cjs"),a=n.forwardRef((function(a,i){const{as:s="button",children:l,className:c,density:u,onTouchStart:d,onAnimationEnd:x,loader:j,icon:b,iconPosition:h="left",iconLeft:v,iconRight:m,variant:y="secondary",...g}=a,p=s;"production"!==process.env.NODE_ENV&&0===n.Children.count(l)&&!a["aria-label"]&&!a["aria-labelledby"]&&!a.title&&console.warn("Når du lager en Button uten synlig tekst må du huske å gi den et navn med enten aria-label, aria-labelledby eller title");const f=r.useAriaLiveRegion(j?.showLoader),L=!!l&&!!j?.showLoader;return e.jsxs(p,{...f,"data-loading":L,"data-density":u,className:t.clsx("jkl-button",`jkl-button--${y}`,c),disabled:"button"===s?j?.showLoader:void 0,...g,ref:i,children:[e.jsxs("div",{className:"jkl-button__label",children:[v&&v,b&&"left"===h&&b,l&&e.jsx("span",{className:"jkl-button__text",children:l}),m&&m,b&&"right"===h&&b]}),l&&e.jsx(o.Loader,{className:"jkl-button__loader",variant:"medium",textDescription:j?.textDescription||"Vennligst vent","aria-hidden":!j?.showLoader})]})}));exports.Button=a,exports.GhostButton=function(t){const n={...t,variant:"ghost"};return e.jsx(a,{...n})},exports.PrimaryButton=function(t){const n={...t,variant:"primary"};return e.jsx(a,{...n})},exports.SecondaryButton=function(t){const n={...t,variant:"secondary"};return e.jsx(a,{...n})},exports.TertiaryButton=function(t){const n={...t,variant:"tertiary"};return e.jsx(a,{...n})};
2
2
  //# sourceMappingURL=Button.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Button.cjs","sources":["../../../../src/components/button/Button.tsx"],"sourcesContent":["import cn from \"clsx\";\nimport React, { type ButtonHTMLAttributes } from \"react\";\nimport { useAriaLiveRegion } from \"../../hooks/useAriaLiveRegion/useAriaLiveRegion.js\";\nimport type { PolymorphicRef } from \"../../utilities/polymorphism/polymorphism.js\";\nimport { Loader } from \"../loader/Loader.js\";\nimport type { ButtonComponent, ButtonProps } from \"./types.js\";\n\nexport const Button = React.forwardRef(function Button<\n ElementType extends React.ElementType = \"button\",\n>(props: ButtonProps<ElementType>, ref?: PolymorphicRef<ElementType>) {\n const {\n as = \"button\",\n children,\n className,\n density,\n onTouchStart,\n onAnimationEnd,\n loader,\n icon,\n iconPosition = \"left\",\n iconLeft,\n iconRight,\n variant = \"secondary\",\n ...rest\n } = props;\n\n const Component = as;\n\n if (\n process.env.NODE_ENV !== \"production\" &&\n React.Children.count(children) === 0 &&\n !props[\"aria-label\"] &&\n !props[\"aria-labelledby\"] &&\n !props.title\n ) {\n console.warn(\n \"Når du lager en Button uten synlig tekst må du huske å gi den et navn med enten aria-label, aria-labelledby eller title\",\n );\n }\n\n const ariaLive = useAriaLiveRegion(loader?.showLoader);\n const showLoader = Boolean(children) && Boolean(loader?.showLoader);\n\n return (\n <Component\n {...ariaLive}\n data-loading={showLoader}\n data-density={density}\n className={cn(\"jkl-button\", `jkl-button--${variant}`, className)}\n disabled={as === \"button\" ? loader?.showLoader : undefined}\n {...rest}\n ref={ref}\n >\n <div className=\"jkl-button__label\">\n {iconLeft && iconLeft}\n {icon && iconPosition === \"left\" && icon}\n {children && (\n <span className=\"jkl-button__text\">{children}</span>\n )}\n {iconRight && iconRight}\n {icon && iconPosition === \"right\" && icon}\n </div>\n\n {children && (\n <Loader\n className=\"jkl-button__loader\"\n variant=\"medium\"\n textDescription={\n loader?.textDescription || \"Vennligst vent\"\n }\n aria-hidden={!loader?.showLoader}\n />\n )}\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 = {\n ...props,\n variant: \"primary\",\n } as ButtonProps<ElementType>;\n return <Button {...buttonProps} />;\n}\n\nexport function SecondaryButton<\n ElementType extends React.ElementType = \"button\",\n>(\n props: Omit<ButtonProps<ElementType>, \"variant\" | \"onClick\" | \"as\"> &\n Pick<ButtonHTMLAttributes<HTMLButtonElement>, \"onClick\">,\n) {\n const buttonProps = {\n ...props,\n variant: \"secondary\",\n } as ButtonProps<ElementType>;\n return <Button {...buttonProps} />;\n}\n\nexport function TertiaryButton<\n ElementType extends React.ElementType = \"button\",\n>(\n props: Omit<ButtonProps<ElementType>, \"variant\" | \"onClick\" | \"as\"> &\n Pick<ButtonHTMLAttributes<HTMLButtonElement>, \"onClick\">,\n) {\n const buttonProps = {\n ...props,\n variant: \"tertiary\",\n } 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 = {\n ...props,\n variant: \"ghost\",\n } as ButtonProps<ElementType>;\n return <Button {...buttonProps} />;\n}\n"],"names":["Button","React","forwardRef","props","ref","as","children","className","density","onTouchStart","onAnimationEnd","loader","icon","iconPosition","iconLeft","iconRight","variant","rest","Component","process","env","NODE_ENV","Children","count","title","console","warn","ariaLive","useAriaLiveRegion","showLoader","jsxs","cn","clsx","disabled","jsx","Loader","textDescription","buttonProps"],"mappings":"mRAOaA,EAASC,EAAMC,YAAW,SAErCC,EAAiCC,GACzB,MACFC,GAAAA,EAAK,SACLC,SAAAA,EACAC,UAAAA,EACAC,QAAAA,EACAC,aAAAA,EACAC,eAAAA,EACAC,OAAAA,EACAC,KAAAA,EACAC,aAAAA,EAAe,OACfC,SAAAA,EACAC,UAAAA,EACAC,QAAAA,EAAU,eACPC,GACHd,EAEEe,EAAYb,EAGW,eAAzBc,QAAQC,IAAIC,UACuB,IAAnCpB,EAAMqB,SAASC,MAAMjB,KACpBH,EAAM,gBACNA,EAAM,qBACNA,EAAMqB,OAECC,QAAAC,KACJ,2HAIF,MAAAC,EAAWC,EAAAA,kBAAkB,MAAAjB,OAAA,EAAAA,EAAQkB,YACrCA,IAAqBvB,KAAqB,MAAAK,IAAAA,EAAQkB,YAGpD,OAAAC,EAAAA,KAACZ,EAAA,IACOS,EACJ,eAAcE,EACd,eAAcrB,EACdD,UAAWwB,EAAGC,KAAA,aAAc,eAAehB,IAAWT,GACtD0B,SAAiB,WAAP5B,EAAkB,MAAAM,SAAAA,EAAQkB,gBAAa,KAC7CZ,EACJb,IAAAA,EAEAE,SAAA,CAACwB,EAAAA,KAAA,MAAA,CAAIvB,UAAU,oBACVD,SAAA,CAAYQ,GAAAA,EACZF,GAAyB,SAAjBC,GAA2BD,EACnCN,GACG4B,EAAAA,IAAC,OAAK,CAAA3B,UAAU,mBAAoBD,SAAAA,IAEvCS,GAAaA,EACbH,GAAyB,UAAjBC,GAA4BD,KAGxCN,GACG4B,EAAAA,IAACC,EAAAA,OAAA,CACG5B,UAAU,qBACVS,QAAQ,SACRoB,iBACI,MAAAzB,OAAA,EAAAA,EAAQyB,kBAAmB,iBAE/B,gBAAc,MAAAzB,GAAAA,EAAQkB,gBAK1C,yCAuCO,SACH1B,GAEA,MAAMkC,EAAc,IACblC,EACHa,QAAS,SAEN,OAAAkB,MAAClC,EAAQ,IAAGqC,GACvB,wBA7CO,SACHlC,GAGA,MAAMkC,EAAc,IACblC,EACHa,QAAS,WAEN,OAAAkB,MAAClC,EAAQ,IAAGqC,GACvB,0BAEO,SAGHlC,GAGA,MAAMkC,EAAc,IACblC,EACHa,QAAS,aAEN,OAAAkB,MAAClC,EAAQ,IAAGqC,GACvB,yBAEO,SAGHlC,GAGA,MAAMkC,EAAc,IACblC,EACHa,QAAS,YAEN,OAAAkB,MAAClC,EAAQ,IAAGqC,GACvB"}
1
+ {"version":3,"file":"Button.cjs","sources":["../../../../src/components/button/Button.tsx"],"sourcesContent":["import cn from \"clsx\";\nimport React, { type ButtonHTMLAttributes } from \"react\";\nimport { useAriaLiveRegion } from \"../../hooks/useAriaLiveRegion/useAriaLiveRegion.js\";\nimport type { PolymorphicRef } from \"../../utilities/polymorphism/polymorphism.js\";\nimport { Loader } from \"../loader/Loader.js\";\nimport type { ButtonComponent, ButtonProps } from \"./types.js\";\n\nexport const Button = React.forwardRef(function Button<\n ElementType extends React.ElementType = \"button\",\n>(props: ButtonProps<ElementType>, ref?: PolymorphicRef<ElementType>) {\n const {\n as = \"button\",\n children,\n className,\n density,\n onTouchStart,\n onAnimationEnd,\n loader,\n icon,\n iconPosition = \"left\",\n iconLeft,\n iconRight,\n variant = \"secondary\",\n ...rest\n } = props;\n\n const Component = as;\n\n if (\n process.env.NODE_ENV !== \"production\" &&\n React.Children.count(children) === 0 &&\n !props[\"aria-label\"] &&\n !props[\"aria-labelledby\"] &&\n !props.title\n ) {\n console.warn(\n \"Når du lager en Button uten synlig tekst må du huske å gi den et navn med enten aria-label, aria-labelledby eller title\",\n );\n }\n\n const ariaLive = useAriaLiveRegion(loader?.showLoader);\n const showLoader = Boolean(children) && Boolean(loader?.showLoader);\n\n return (\n <Component\n {...ariaLive}\n data-loading={showLoader}\n data-density={density}\n className={cn(\"jkl-button\", `jkl-button--${variant}`, className)}\n disabled={as === \"button\" ? loader?.showLoader : undefined}\n {...rest}\n ref={ref}\n >\n <div className=\"jkl-button__label\">\n {iconLeft && iconLeft}\n {icon && iconPosition === \"left\" && icon}\n {children && (\n <span className=\"jkl-button__text\">{children}</span>\n )}\n {iconRight && iconRight}\n {icon && iconPosition === \"right\" && icon}\n </div>\n\n {children && (\n <Loader\n className=\"jkl-button__loader\"\n variant=\"medium\"\n textDescription={\n loader?.textDescription || \"Vennligst vent\"\n }\n aria-hidden={!loader?.showLoader}\n />\n )}\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 = {\n ...props,\n variant: \"primary\",\n } as ButtonProps<ElementType>;\n return <Button {...buttonProps} />;\n}\n\nexport function SecondaryButton<\n ElementType extends React.ElementType = \"button\",\n>(\n props: Omit<ButtonProps<ElementType>, \"variant\" | \"onClick\" | \"as\"> &\n Pick<ButtonHTMLAttributes<HTMLButtonElement>, \"onClick\">,\n) {\n const buttonProps = {\n ...props,\n variant: \"secondary\",\n } as ButtonProps<ElementType>;\n return <Button {...buttonProps} />;\n}\n\nexport function TertiaryButton<\n ElementType extends React.ElementType = \"button\",\n>(\n props: Omit<ButtonProps<ElementType>, \"variant\" | \"onClick\" | \"as\"> &\n Pick<ButtonHTMLAttributes<HTMLButtonElement>, \"onClick\">,\n) {\n const buttonProps = {\n ...props,\n variant: \"tertiary\",\n } 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 = {\n ...props,\n variant: \"ghost\",\n } as ButtonProps<ElementType>;\n return <Button {...buttonProps} />;\n}\n"],"names":["Button","React","forwardRef","props","ref","as","children","className","density","onTouchStart","onAnimationEnd","loader","icon","iconPosition","iconLeft","iconRight","variant","rest","Component","process","env","NODE_ENV","Children","count","title","console","warn","ariaLive","useAriaLiveRegion","showLoader","jsxs","cn","clsx","disabled","jsx","Loader","textDescription","buttonProps"],"mappings":"mRAOaA,EAASC,EAAMC,YAAW,SAErCC,EAAiCC,GACzB,MACFC,GAAAA,EAAK,SACLC,SAAAA,EACAC,UAAAA,EACAC,QAAAA,EACAC,aAAAA,EACAC,eAAAA,EACAC,OAAAA,EACAC,KAAAA,EACAC,aAAAA,EAAe,OACfC,SAAAA,EACAC,UAAAA,EACAC,QAAAA,EAAU,eACPC,GACHd,EAEEe,EAAYb,EAGW,eAAzBc,QAAQC,IAAIC,UACuB,IAAnCpB,EAAMqB,SAASC,MAAMjB,KACpBH,EAAM,gBACNA,EAAM,qBACNA,EAAMqB,OAECC,QAAAC,KACJ,2HAIF,MAAAC,EAAWC,EAAAA,kBAAkBjB,GAAQkB,YACrCA,IAAqBvB,KAAqBK,GAAQkB,WAGpD,OAAAC,EAAAA,KAACZ,EAAA,IACOS,EACJ,eAAcE,EACd,eAAcrB,EACdD,UAAWwB,EAAGC,KAAA,aAAc,eAAehB,IAAWT,GACtD0B,SAAiB,WAAP5B,EAAkBM,GAAQkB,gBAAa,KAC7CZ,EACJb,IAAAA,EAEAE,SAAA,CAACwB,EAAAA,KAAA,MAAA,CAAIvB,UAAU,oBACVD,SAAA,CAAYQ,GAAAA,EACZF,GAAyB,SAAjBC,GAA2BD,EACnCN,GACG4B,EAAAA,IAAC,OAAK,CAAA3B,UAAU,mBAAoBD,SAAAA,IAEvCS,GAAaA,EACbH,GAAyB,UAAjBC,GAA4BD,KAGxCN,GACG4B,EAAAA,IAACC,EAAAA,OAAA,CACG5B,UAAU,qBACVS,QAAQ,SACRoB,gBACIzB,GAAQyB,iBAAmB,iBAE/B,eAAczB,GAAQkB,eAK1C,yCAuCO,SACH1B,GAEA,MAAMkC,EAAc,IACblC,EACHa,QAAS,SAEN,OAAAkB,MAAClC,EAAQ,IAAGqC,GACvB,wBA7CO,SACHlC,GAGA,MAAMkC,EAAc,IACblC,EACHa,QAAS,WAEN,OAAAkB,MAAClC,EAAQ,IAAGqC,GACvB,0BAEO,SAGHlC,GAGA,MAAMkC,EAAc,IACblC,EACHa,QAAS,aAEN,OAAAkB,MAAClC,EAAQ,IAAGqC,GACvB,yBAEO,SAGHlC,GAGA,MAAMkC,EAAc,IACblC,EACHa,QAAS,YAEN,OAAAkB,MAAClC,EAAQ,IAAGqC,GACvB"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./Card.cjs"),e=require("./CardImage.cjs"),a=require("./NavCard.cjs"),o=require("./TaskCard.cjs"),s=require("./InfoCard.cjs");exports.Card=r.Card,exports.CardImage=e.CardImage,exports.InfoBlock=a.InfoBlock,exports.NavCard=a.NavCard,exports.TaskCard=o.TaskCard,exports.InfoCard=s.InfoCard;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./Card.cjs"),r=require("./CardImage.cjs");exports.Card=e.Card,exports.CardImage=r.CardImage;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,6 +1,3 @@
1
1
  export { Card } from './Card.cjs';
2
2
  export { CardImage, type CardImageProps } from './CardImage.cjs';
3
- export { NavCard, InfoBlock, type NavCardProps } from './NavCard.cjs';
4
- export { TaskCard, type TaskCardProps } from './TaskCard.cjs';
5
- export { InfoCard, type InfoCardProps } from './InfoCard.cjs';
6
- export type { SpacingStep, PaddingOptions, CardProps, CardPadding, CardVariant, } from './types.cjs';
3
+ export type { CardProps, CardPadding, CardVariant, } from './types.cjs';
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=["0","m","l","xl","2xl","3xl","4xl"];exports.CARD_PADDINGS=["s","m","l","xl"],exports.CARD_VARIANTS=["outlined","high","low"],exports.NEW_SPACING_STEPS=["0","16","24","40","64","104","168"],exports.SPACING_STEPS=e,exports.isOldSpacingStep=function(t){return e.includes(t)};
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});exports.CARD_PADDINGS=["s","m","l","xl"],exports.CARD_VARIANTS=["outlined","high","low"];
2
2
  //# sourceMappingURL=types.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.cjs","sources":["../../../../src/components/card/types.ts"],"sourcesContent":["import type { PolymorphicPropsWithRef } from \"../../utilities/polymorphism/polymorphism.js\";\n\nexport const SPACING_STEPS = [\n \"0\",\n \"m\",\n \"l\",\n \"xl\",\n \"2xl\",\n \"3xl\",\n \"4xl\",\n] as const;\ntype SpacingSteps = typeof SPACING_STEPS;\nexport const NEW_SPACING_STEPS = [\n \"0\",\n \"16\",\n \"24\",\n \"40\",\n \"64\",\n \"104\",\n \"168\",\n] as const;\ntype NewSpacingSteps = typeof NEW_SPACING_STEPS;\nexport type BasePadding =\n | SpacingSteps[0 | 1 | 2 | 3]\n | NewSpacingSteps[0 | 1 | 2 | 3];\nexport type OldSpacingStep = SpacingSteps[number];\nexport type NewSpacingStep = NewSpacingSteps[number];\nexport type SpacingStep = SpacingSteps[number] | NewSpacingSteps[number];\n\nexport function isOldSpacingStep(value: SpacingStep): value is OldSpacingStep {\n return SPACING_STEPS.includes(value as OldSpacingStep);\n}\n\nexport const CARD_PADDINGS = [\"s\", \"m\", \"l\", \"xl\"] as const;\nexport type CardPadding = (typeof CARD_PADDINGS)[number];\nexport const CARD_VARIANTS = [\"outlined\", \"high\", \"low\"] as const;\nexport type CardVariant = (typeof CARD_VARIANTS)[number];\n\ntype Props = {\n className?: string;\n /**\n * Setter padding på kortet. Tilsvarer samme property i Figma.\n * @default \"s\"\n */\n padding?: CardPadding;\n /**\n * Angir hvilken kortvariant du vil bruke. Velg en variant som gir god kontrast\n * til bakgrunnen på siden, slik at det er enkelt å skille innholdet fra hverandre.\n * @default \"high\"\n */\n variant?: CardVariant;\n /**\n * Angir om kortet visuelt skal fremstå som klikkbart. Du må selv rendre\n * kortet som et klikkbart element (f.eks. `<a>` eller en `<Link>` fra\n * et ruting-bibliotek) og gi det en `href` eller `onClick`-handler.\n * HUSK: Sett aria-label for at støtteverktøy, som skjermlesere, ikke\n * skal lese alt innholdet i kortet.\n */\n clickable?: boolean;\n};\n\nexport type CardProps<ElementType extends React.ElementType> =\n PolymorphicPropsWithRef<ElementType, Props> & Props;\n\nexport interface PaddingShorthand {\n /**\n * Legger til ekstra rom i toppen av kortet, fra spacing-skalaen til Jøkul.\n * Ikke bruk ekstra topPadding sammen med tag. Verdier lavere enn for venstre og høyre padding\n * blir ignorert.\n * @default \"24\"\n */\n top?: SpacingStep;\n /**\n * Bruk stegene fra spacing-skalaen til Jøkul.\n * Hvis left og right har forskjellige verdier brukes den største for begge.\n * @default \"24\"\n */\n right?: BasePadding;\n /**\n * Legger til ekstra rom i bunnen av kortet, fra spacing-skalaen til Jøkul.\n * Verdier lavere enn for venstre og høyre padding blir ignorert.\n * @default \"24\"\n */\n bottom?: SpacingStep;\n /**\n * Bruk stegene fra spacing-skalaen til Jøkul.\n * Hvis left og right har forskjellige verdier brukes den største for begge.\n * @default \"24\"\n */\n left?: BasePadding;\n}\n\nexport interface PaddingOptions {\n /**\n * Hvor mye rom skal det være rundt innholdet i kortet?\n * @default \"24\"\n */\n padding?: BasePadding | PaddingShorthand;\n}\n\nexport type TagType = \"success\" | \"warning\" | \"info\" | \"error\";\n\nexport type CardTag = {\n /**\n * @default <none> Rendres som nøytral tag\n */\n type?: TagType;\n text: string;\n};\n"],"names":["SPACING_STEPS","value","includes"],"mappings":"gFAEO,MAAMA,EAAgB,CACzB,IACA,IACA,IACA,KACA,MACA,MACA,6BAwByB,CAAC,IAAK,IAAK,IAAK,4BAEhB,CAAC,WAAY,OAAQ,iCAvBjB,CAC7B,IACA,KACA,KACA,KACA,KACA,MACA,wDAUG,SAA0BC,GACtB,OAAAD,EAAcE,SAASD,EAClC"}
1
+ {"version":3,"file":"types.cjs","sources":["../../../../src/components/card/types.ts"],"sourcesContent":["import type { PolymorphicPropsWithRef } from \"../../utilities/polymorphism/polymorphism.js\";\n\nexport const CARD_PADDINGS = [\"s\", \"m\", \"l\", \"xl\"] as const;\nexport type CardPadding = (typeof CARD_PADDINGS)[number];\nexport const CARD_VARIANTS = [\"outlined\", \"high\", \"low\"] as const;\nexport type CardVariant = (typeof CARD_VARIANTS)[number];\n\ntype Props = {\n className?: string;\n /**\n * Setter padding på kortet. Tilsvarer samme property i Figma.\n * @default \"s\"\n */\n padding?: CardPadding;\n /**\n * Angir hvilken kortvariant du vil bruke. Velg en variant som gir god kontrast\n * til bakgrunnen på siden, slik at det er enkelt å skille innholdet fra hverandre.\n * @default \"high\"\n */\n variant?: CardVariant;\n /**\n * Angir om kortet visuelt skal fremstå som klikkbart. Du må selv rendre\n * kortet som et klikkbart element (f.eks. `<a>` eller en `<Link>` fra\n * et ruting-bibliotek) og gi det en `href` eller `onClick`-handler.\n * HUSK: Sett aria-label for at støtteverktøy, som skjermlesere, ikke\n * skal lese alt innholdet i kortet.\n */\n clickable?: boolean;\n};\n\nexport type CardProps<ElementType extends React.ElementType> =\n PolymorphicPropsWithRef<ElementType, Props> & Props;\n"],"names":[],"mappings":"sGAE6B,CAAC,IAAK,IAAK,IAAK,4BAEhB,CAAC,WAAY,OAAQ"}
@@ -1,13 +1,4 @@
1
1
  import { PolymorphicPropsWithRef } from '../../utilities/polymorphism/polymorphism.cjs';
2
- export declare const SPACING_STEPS: readonly ["0", "m", "l", "xl", "2xl", "3xl", "4xl"];
3
- type SpacingSteps = typeof SPACING_STEPS;
4
- export declare const NEW_SPACING_STEPS: readonly ["0", "16", "24", "40", "64", "104", "168"];
5
- type NewSpacingSteps = typeof NEW_SPACING_STEPS;
6
- export type BasePadding = SpacingSteps[0 | 1 | 2 | 3] | NewSpacingSteps[0 | 1 | 2 | 3];
7
- export type OldSpacingStep = SpacingSteps[number];
8
- export type NewSpacingStep = NewSpacingSteps[number];
9
- export type SpacingStep = SpacingSteps[number] | NewSpacingSteps[number];
10
- export declare function isOldSpacingStep(value: SpacingStep): value is OldSpacingStep;
11
2
  export declare const CARD_PADDINGS: readonly ["s", "m", "l", "xl"];
12
3
  export type CardPadding = (typeof CARD_PADDINGS)[number];
13
4
  export declare const CARD_VARIANTS: readonly ["outlined", "high", "low"];
@@ -35,46 +26,4 @@ type Props = {
35
26
  clickable?: boolean;
36
27
  };
37
28
  export type CardProps<ElementType extends React.ElementType> = PolymorphicPropsWithRef<ElementType, Props> & Props;
38
- export interface PaddingShorthand {
39
- /**
40
- * Legger til ekstra rom i toppen av kortet, fra spacing-skalaen til Jøkul.
41
- * Ikke bruk ekstra topPadding sammen med tag. Verdier lavere enn for venstre og høyre padding
42
- * blir ignorert.
43
- * @default "24"
44
- */
45
- top?: SpacingStep;
46
- /**
47
- * Bruk stegene fra spacing-skalaen til Jøkul.
48
- * Hvis left og right har forskjellige verdier brukes den største for begge.
49
- * @default "24"
50
- */
51
- right?: BasePadding;
52
- /**
53
- * Legger til ekstra rom i bunnen av kortet, fra spacing-skalaen til Jøkul.
54
- * Verdier lavere enn for venstre og høyre padding blir ignorert.
55
- * @default "24"
56
- */
57
- bottom?: SpacingStep;
58
- /**
59
- * Bruk stegene fra spacing-skalaen til Jøkul.
60
- * Hvis left og right har forskjellige verdier brukes den største for begge.
61
- * @default "24"
62
- */
63
- left?: BasePadding;
64
- }
65
- export interface PaddingOptions {
66
- /**
67
- * Hvor mye rom skal det være rundt innholdet i kortet?
68
- * @default "24"
69
- */
70
- padding?: BasePadding | PaddingShorthand;
71
- }
72
- export type TagType = "success" | "warning" | "info" | "error";
73
- export type CardTag = {
74
- /**
75
- * @default <none> Rendres som nøytral tag
76
- */
77
- type?: TagType;
78
- text: string;
79
- };
80
29
  export {};
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),a=require("react"),t=require("../../shared/input-panel/BasePanel.cjs"),r=a.forwardRef((function({label:r,extraLabel:c,alwaysOpen:l=!1,checked:n,defaultChecked:s,onChange:o,...u},d){const[h,i]=a.useState(s||!1),b=a.useCallback((e=>{null==o||o(e),i(e.target.checked)}),[o]),k=typeof n<"u",p=k?n:h;return e.jsx(t.BasePanel,{ref:d,type:"checkbox",isChecked:p,defaultChecked:s,checked:k?n:void 0,onChange:b,alwaysOpen:l,label:r,extraLabel:c,...u})}));exports.CheckboxPanel=r;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),a=require("react"),t=require("../../shared/input-panel/BasePanel.cjs"),r=a.forwardRef((function({label:r,extraLabel:c,alwaysOpen:l=!1,checked:n,defaultChecked:s,onChange:o,...u},d){const[h,i]=a.useState(s||!1),b=a.useCallback((e=>{o?.(e),i(e.target.checked)}),[o]),k=typeof n<"u",p=k?n:h;return e.jsx(t.BasePanel,{ref:d,type:"checkbox",isChecked:p,defaultChecked:s,checked:k?n:void 0,onChange:b,alwaysOpen:l,label:r,extraLabel:c,...u})}));exports.CheckboxPanel=r;
2
2
  //# sourceMappingURL=CheckboxPanel.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"CheckboxPanel.cjs","sources":["../../../../src/components/checkbox-panel/CheckboxPanel.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n type ForwardedRef,\n forwardRef,\n useCallback,\n useState,\n} from \"react\";\nimport { BasePanel } from \"../../shared/input-panel/BasePanel.js\";\nimport type { CheckboxPanelProps } from \"./types.js\";\n\nexport const CheckboxPanel = forwardRef(function CheckboxPanel(\n {\n label,\n extraLabel,\n alwaysOpen = false,\n checked,\n defaultChecked,\n onChange,\n ...rest\n }: CheckboxPanelProps,\n ref: ForwardedRef<HTMLInputElement>,\n) {\n const [_isChecked, setIsChecked] = useState(defaultChecked || false);\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n onChange?.(e);\n setIsChecked(e.target.checked);\n },\n [onChange],\n );\n\n const isControlled = typeof checked !== \"undefined\";\n const isChecked = isControlled ? checked : _isChecked;\n\n return (\n <BasePanel\n ref={ref}\n type=\"checkbox\"\n isChecked={isChecked}\n defaultChecked={defaultChecked}\n checked={isControlled ? checked : undefined}\n onChange={handleChange}\n alwaysOpen={alwaysOpen}\n label={label}\n extraLabel={extraLabel}\n {...rest}\n />\n );\n});\n"],"names":["CheckboxPanel","forwardRef","label","extraLabel","alwaysOpen","checked","defaultChecked","onChange","rest","ref","_isChecked","setIsChecked","useState","handleChange","useCallback","e","target","isControlled","isChecked","jsx","BasePanel","type"],"mappings":"4LAUaA,EAAgBC,EAAAA,YAAW,UAEhCC,MAAAA,EACAC,WAAAA,EACAC,WAAAA,GAAa,EACbC,QAAAA,EACAC,eAAAA,EACAC,SAAAA,KACGC,GAEPC,GAEA,MAAOC,EAAYC,GAAgBC,EAAAA,SAASN,IAAkB,GAExDO,EAAeC,EAAAA,aAChBC,IACG,MAAAR,GAAAA,EAAWQ,GACEJ,EAAAI,EAAEC,OAAOX,QAAO,GAEjC,CAACE,IAGCU,SAAsBZ,EAAY,IAClCa,EAAYD,EAAeZ,EAAUK,EAGvC,OAAAS,EAAAA,IAACC,EAAAA,UAAA,CACGX,IAAAA,EACAY,KAAK,WACLH,UAAAA,EACAZ,eAAAA,EACAD,QAASY,EAAeZ,OAAU,EAClCE,SAAUM,EACVT,WAAAA,EACAF,MAAAA,EACAC,WAAAA,KACIK,GAGhB"}
1
+ {"version":3,"file":"CheckboxPanel.cjs","sources":["../../../../src/components/checkbox-panel/CheckboxPanel.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n type ForwardedRef,\n forwardRef,\n useCallback,\n useState,\n} from \"react\";\nimport { BasePanel } from \"../../shared/input-panel/BasePanel.js\";\nimport type { CheckboxPanelProps } from \"./types.js\";\n\nexport const CheckboxPanel = forwardRef(function CheckboxPanel(\n {\n label,\n extraLabel,\n alwaysOpen = false,\n checked,\n defaultChecked,\n onChange,\n ...rest\n }: CheckboxPanelProps,\n ref: ForwardedRef<HTMLInputElement>,\n) {\n const [_isChecked, setIsChecked] = useState(defaultChecked || false);\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n onChange?.(e);\n setIsChecked(e.target.checked);\n },\n [onChange],\n );\n\n const isControlled = typeof checked !== \"undefined\";\n const isChecked = isControlled ? checked : _isChecked;\n\n return (\n <BasePanel\n ref={ref}\n type=\"checkbox\"\n isChecked={isChecked}\n defaultChecked={defaultChecked}\n checked={isControlled ? checked : undefined}\n onChange={handleChange}\n alwaysOpen={alwaysOpen}\n label={label}\n extraLabel={extraLabel}\n {...rest}\n />\n );\n});\n"],"names":["CheckboxPanel","forwardRef","label","extraLabel","alwaysOpen","checked","defaultChecked","onChange","rest","ref","_isChecked","setIsChecked","useState","handleChange","useCallback","e","target","isControlled","isChecked","jsx","BasePanel","type"],"mappings":"4LAUaA,EAAgBC,EAAAA,YAAW,UAEhCC,MAAAA,EACAC,WAAAA,EACAC,WAAAA,GAAa,EACbC,QAAAA,EACAC,eAAAA,EACAC,SAAAA,KACGC,GAEPC,GAEA,MAAOC,EAAYC,GAAgBC,EAAAA,SAASN,IAAkB,GAExDO,EAAeC,EAAAA,aAChBC,IACGR,IAAWQ,GACEJ,EAAAI,EAAEC,OAAOX,QAAO,GAEjC,CAACE,IAGCU,SAAsBZ,EAAY,IAClCa,EAAYD,EAAeZ,EAAUK,EAGvC,OAAAS,EAAAA,IAACC,EAAAA,UAAA,CACGX,IAAAA,EACAY,KAAK,WACLH,UAAAA,EACAZ,eAAAA,EACAD,QAASY,EAAeZ,OAAU,EAClCE,SAAUM,EACVT,WAAAA,EACAF,MAAAA,EACAC,WAAAA,KACIK,GAGhB"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),o=require("../../../clsx-E3yX_9sL.cjs"),t=require("react"),l=require("../../hooks/useAnimatedHeight/useAnimatedHeight.cjs"),a=require("../../hooks/useId/useId.cjs"),n=require("../../hooks/useListNavigation/useListNavigation.cjs"),r=require("../chip/Chip.cjs"),s=require("../icon-button/IconButton.cjs"),i=require("../icon/icons/CheckIcon.cjs"),c=require("../icon/icons/animated/ArrowVerticalAnimated.cjs"),u=require("../input-group/InputGroup.cjs"),d=require("../tooltip/Tooltip.cjs"),b=require("../tooltip/TooltipContent.cjs"),p=require("../tooltip/TooltipTrigger.cjs");function m(e){return"string"==typeof e?{value:e,label:e}:e}const v=({id:v,placeholder:x,items:j,onChange:k,onFocus:f,onBlur:h,value:g,label:_,noMatchingOption:y,labelProps:C,helpLabel:w,errorLabel:$,width:q,density:N,name:L,className:T,invalid:S,hasTagHover:I})=>{var P,B;const D=a.useId(v||"jkl-combobox",{generateSuffix:!v}),E=`${D}_label`,A=`${D}_button`,F=`${D}_search-input`,[M,O]=t.useState(g||[]),[K,V]=t.useState(!1),[H,R]=t.useState(""),[G,U]=t.useState(!1),[z,J]=t.useState(!1),Q=t.useRef(null),W=t.useRef(null),X=t.useRef(!1);t.useEffect((()=>{R(""),K&&Q.current&&Q.current.focus()}),[K]),t.useEffect((()=>{O((e=>g||e))}),[g]);const Y=e=>!!M&&M.some((o=>o.value===e.value)),Z=t.useCallback((e=>M.filter((o=>o.value!==e))),[M]),ee=t.useCallback(((e,o)=>{const t=Z(o);O(t),k({type:"change",target:{name:L,value:o,selectedOptions:t}}),e.stopPropagation(),0===t.length&&J(!1)}),[Z,k,L]),oe=t.useCallback((e=>{var o;let t;if(M.some((o=>o.value===e)))t=Z(e);else{const o=j.find((o=>o.value===e));t=[...M,o]}null==(o=Q.current)||o.focus(),O(t),k({type:"change",target:{name:L,value:e,selectedOptions:t}})}),[M,k,L,Z,j]),te=e=>{var o;null==(o=Q.current)||o.focus(),V(!0),R(e.target.value)},le=t.useMemo((()=>{if(!H)return j;const e=j.filter((e=>e.label.toLowerCase().indexOf(H.toLowerCase())>=0));return U(0===e.length),e}),[H,j]),[ae,ne]=t.useState(null!=(P=le[0])&&P.value?`${D}-${null==(B=le[0])?void 0:B.value}`:void 0),re=!K;t.useEffect((()=>{const e=e=>{"Escape"===e.key&&K&&V(!1)};return typeof window<"u"&&window.addEventListener("keydown",e),()=>{typeof window<"u"&&K&&window.removeEventListener("keydown",e)}}),[K]);const se=t.useCallback((e=>{e?Q.current&&Q.current.focus():X.current&&W.current&&W.current.focus()}),[]),ie=t.useCallback((()=>{X.current||(f&&f({type:"change",target:{name:L,value:(null==M?void 0:M[0].value)||"",selectedOptions:M}}),X.current=!0,V(!0))}),[f,M,L]),[ce]=l.useAnimatedHeight(K,{onFirstVisible:se,onTransitionEnd:se});n.useListNavigation({ref:ce});const ue=t.useRef(null),de=t.useCallback((e=>{var o,t;const l=ue.current;(null==l?void 0:l.contains(e.relatedTarget))||(R(""),h&&(h({type:"blur",target:{name:L,value:(null==(o=null==M?void 0:M[0])?void 0:o.value)||"",selectedOptions:M}}),null==(t=W.current)||t.dispatchEvent(new Event("focusout",{bubbles:!0}))),X.current=!1,V(!1))}),[h,L,M]),be=t.useCallback((e=>{e.target.focus({preventScroll:!0})}),[]),pe=t.useCallback((e=>{var o;if("ArrowDown"===e.key){e.preventDefault(),e.stopPropagation();const t=ce.current;t&&(null==(o=t.querySelector('[role="option"]'))||o.focus())}else"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),V(!1));if(e.metaKey&&"a"===e.key||e.ctrlKey&&"a"===e.key){e.preventDefault(),e.stopPropagation();const o=M.map((e=>({...e,isMarked:!0})));J(!0),O(o)}else if("Backspace"===e.key)if(e.stopPropagation(),J(!1),M.some((e=>e.isMarked))){const e=M.filter((e=>!e.isMarked));O(e),R("")}else M.length>0&&""===H&&ee(e,M[M.length-1].value)}),[M,H,ce,ee]),me=t.useCallback((e=>{if("Tab"===e.key)Q.current&&(e.preventDefault(),e.stopPropagation(),e.shiftKey||V(!1),Q.current.focus());else if("ArrowUp"===e.key&&ce.current&&Q.current){const o=ce.current.querySelector('[role="option"]:not([hidden])');e.currentTarget.id===(null==o?void 0:o.id)&&Q.current&&Q.current.focus()}}),[ce]),ve=M.length>=1,xe=t.useCallback((o=>e.jsx(r.Chip,{"data-testid":"jkl-chip","aria-label":`Fjern ${o.tagLabel}`,className:`jkl-combobox__selected-option ${z&&"jkl-combobox__selected-option--marked"}`,variant:"input",onClick:e=>{Q.current&&Q.current.focus(),ee(e,o.value)},onBlur:de,children:o.tagLabel?o.tagLabel:o.label},o.value)),[de,ee,z]);return e.jsx(u.InputGroup,{label:_,id:F,ref:ue,"data-testid":"jkl-combobox",className:o.clsx("jkl-combobox",T,{"jkl-combobox--invalid":!!$||S,"jkl-combobox--menu-open":K,"jkl-combobox--menu-closed":!K&&ve}),labelProps:{id:E,...C},helpLabel:w,errorLabel:$,density:N,render:t=>e.jsxs("div",{className:o.clsx("jkl-combobox__wrapper",{"jkl-combobox__wrapper--active-value":ve}),style:{width:q},tabIndex:-1,onFocus:ie,onBlur:de,children:[e.jsxs("div",{className:"jkl-combobox__chips","data-testid":"jkl-combobox__chips",children:[M.map(m).map((o=>I?e.jsxs(d.Tooltip,{children:[e.jsx(p.TooltipTrigger,{children:xe(o)}),e.jsx(b.TooltipContent,{children:o.label})]},o.value):xe(o))),e.jsx("input",{...t,className:"jkl-combobox__search-input",onChange:te,"data-testid":"jkl-combobox__search-input",onFocus:ie,onBlur:de,onKeyDown:pe,value:H,ref:Q,"aria-controls":D,role:"combobox","aria-autocomplete":"list","aria-expanded":K,placeholder:M.length>0?"":x,autoComplete:"off"})]}),e.jsxs("div",{className:"jkl-combobox__menu",role:"listbox",ref:ce,id:D,"aria-labelledby":E,"aria-multiselectable":"true","aria-activedescendant":ae,onFocus:ie,onBlur:de,tabIndex:-1,children:[le.map(((o,t)=>e.jsxs("button",{type:"button",id:`${D}__${o.value}`,"aria-selected":Y(o),role:"option",value:o.value,onBlur:de,className:`jkl-combobox__option ${Y(o)&&"jkl-combobox__option--selected"}`,"data-testid":"jkl-combobox__option","data-testautoid":`jkl-combobox__option-${t}`,onFocus:ie,onKeyDown:me,onClick:e=>{ne(`${D}__${o.value}`),e.stopPropagation(),oe(o.value),R("")},onMouseOver:be,children:[o.description?e.jsxs("span",{children:[o.label,e.jsx("span",{className:"jkl-combobox__option-description",children:o.description})]}):o.label,Y(o)?e.jsxs("span",{children:[e.jsx(i.CheckIcon,{})," "]}):null]},`${D}-${o.value}`))),G&&e.jsx("div",{className:"jkl-combobox__no-option",children:y})]}),e.jsx("div",{className:"jkl-combobox__actions",children:e.jsx(s.IconButton,{id:A,onFocus:ie,onBlur:de,className:"jkl-combobox__button","data-testid":"jkl-combobox__button","aria-label":`${M.map((e=>e.label))||"Velg"},${_}`,"aria-expanded":K,"aria-controls":D,onClick:()=>V((e=>!e)),onMouseDown:e=>{var o;e.preventDefault(),null==(o=W.current)||o.focus()},children:e.jsx(c.ArrowVerticalAnimated,{pointingDown:re})})})]})})};v.displayName="Combobox",exports.Combobox=v,exports.getComboboxValuePair=m;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),o=require("../../../clsx-E3yX_9sL.cjs"),t=require("react"),a=require("../../hooks/useAnimatedHeight/useAnimatedHeight.cjs"),n=require("../../hooks/useId/useId.cjs"),l=require("../../hooks/useListNavigation/useListNavigation.cjs"),r=require("../chip/Chip.cjs"),s=require("../icon-button/IconButton.cjs"),c=require("../icon/icons/CheckIcon.cjs"),i=require("../icon/icons/animated/ArrowVerticalAnimated.cjs"),u=require("../input-group/InputGroup.cjs"),p=require("../tooltip/Tooltip.cjs"),b=require("../tooltip/TooltipContent.cjs"),d=require("../tooltip/TooltipTrigger.cjs");function m(e){return"string"==typeof e?{value:e,label:e}:e}const x=({id:x,placeholder:j,items:k,onChange:v,onFocus:f,onBlur:h,value:g,label:_,noMatchingOption:y,labelProps:C,helpLabel:w,errorLabel:q,width:N,density:$,name:L,className:T,invalid:S,hasTagHover:I})=>{const P=n.useId(x||"jkl-combobox",{generateSuffix:!x}),B=`${P}_label`,D=`${P}_button`,E=`${P}_search-input`,[A,F]=t.useState(g||[]),[M,O]=t.useState(!1),[K,H]=t.useState(""),[R,V]=t.useState(!1),[G,U]=t.useState(!1),z=t.useRef(null),J=t.useRef(null),Q=t.useRef(!1);t.useEffect((()=>{H(""),M&&z.current&&z.current.focus()}),[M]),t.useEffect((()=>{F((e=>g||e))}),[g]);const W=e=>!!A&&A.some((o=>o.value===e.value)),X=t.useCallback((e=>A.filter((o=>o.value!==e))),[A]),Y=t.useCallback(((e,o)=>{const t=X(o);F(t),v({type:"change",target:{name:L,value:o,selectedOptions:t}}),e.stopPropagation(),0===t.length&&U(!1)}),[X,v,L]),Z=t.useCallback((e=>{let o;if(A.some((o=>o.value===e)))o=X(e);else{const t=k.find((o=>o.value===e));o=[...A,t]}z.current?.focus(),F(o),v({type:"change",target:{name:L,value:e,selectedOptions:o}})}),[A,v,L,X,k]),ee=e=>{z.current?.focus(),O(!0),H(e.target.value)},oe=t.useMemo((()=>{if(!K)return k;const e=k.filter((e=>e.label.toLowerCase().indexOf(K.toLowerCase())>=0));return V(0===e.length),e}),[K,k]),[te,ae]=t.useState(oe[0]?.value?`${P}-${oe[0]?.value}`:void 0),ne=!M;t.useEffect((()=>{const e=e=>{"Escape"===e.key&&M&&O(!1)};return typeof window<"u"&&window.addEventListener("keydown",e),()=>{typeof window<"u"&&M&&window.removeEventListener("keydown",e)}}),[M]);const le=t.useCallback((e=>{e?z.current&&z.current.focus():Q.current&&J.current&&J.current.focus()}),[]),re=t.useCallback((()=>{Q.current||(f&&f({type:"change",target:{name:L,value:A?.[0].value||"",selectedOptions:A}}),Q.current=!0,O(!0))}),[f,A,L]),[se]=a.useAnimatedHeight(M,{onFirstVisible:le,onTransitionEnd:le});l.useListNavigation({ref:se});const ce=t.useRef(null),ie=t.useCallback((e=>{ce.current?.contains(e.relatedTarget)||(H(""),h&&(h({type:"blur",target:{name:L,value:A?.[0]?.value||"",selectedOptions:A}}),J.current?.dispatchEvent(new Event("focusout",{bubbles:!0}))),Q.current=!1,O(!1))}),[h,L,A]),ue=t.useCallback((e=>{e.target.focus({preventScroll:!0})}),[]),pe=t.useCallback((e=>{if("ArrowDown"===e.key){e.preventDefault(),e.stopPropagation();const o=se.current;o&&o.querySelector('[role="option"]')?.focus()}else"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),O(!1));if(e.metaKey&&"a"===e.key||e.ctrlKey&&"a"===e.key){e.preventDefault(),e.stopPropagation();const o=A.map((e=>({...e,isMarked:!0})));U(!0),F(o)}else if("Backspace"===e.key)if(e.stopPropagation(),U(!1),A.some((e=>e.isMarked))){const e=A.filter((e=>!e.isMarked));F(e),H("")}else A.length>0&&""===K&&Y(e,A[A.length-1].value)}),[A,K,se,Y]),be=t.useCallback((e=>{if("Tab"===e.key)z.current&&(e.preventDefault(),e.stopPropagation(),e.shiftKey||O(!1),z.current.focus());else if("ArrowUp"===e.key&&se.current&&z.current){const o=se.current.querySelector('[role="option"]:not([hidden])');e.currentTarget.id===o?.id&&z.current&&z.current.focus()}}),[se]),de=A.length>=1,me=t.useCallback((o=>e.jsx(r.Chip,{"data-testid":"jkl-chip","aria-label":`Fjern ${o.tagLabel}`,className:`jkl-combobox__selected-option ${G&&"jkl-combobox__selected-option--marked"}`,variant:"input",onClick:e=>{z.current&&z.current.focus(),Y(e,o.value)},onBlur:ie,children:o.tagLabel?o.tagLabel:o.label},o.value)),[ie,Y,G]);return e.jsx(u.InputGroup,{label:_,id:E,ref:ce,"data-testid":"jkl-combobox",className:o.clsx("jkl-combobox",T,{"jkl-combobox--invalid":!!q||S,"jkl-combobox--menu-open":M,"jkl-combobox--menu-closed":!M&&de}),labelProps:{id:B,...C},helpLabel:w,errorLabel:q,density:$,render:t=>e.jsxs("div",{className:o.clsx("jkl-combobox__wrapper",{"jkl-combobox__wrapper--active-value":de}),style:{width:N},tabIndex:-1,onFocus:re,onBlur:ie,children:[e.jsxs("div",{className:"jkl-combobox__chips","data-testid":"jkl-combobox__chips",children:[A.map(m).map((o=>I?e.jsxs(p.Tooltip,{children:[e.jsx(d.TooltipTrigger,{children:me(o)}),e.jsx(b.TooltipContent,{children:o.label})]},o.value):me(o))),e.jsx("input",{...t,className:"jkl-combobox__search-input",onChange:ee,"data-testid":"jkl-combobox__search-input",onFocus:re,onBlur:ie,onKeyDown:pe,value:K,ref:z,"aria-controls":P,role:"combobox","aria-autocomplete":"list","aria-expanded":M,placeholder:A.length>0?"":j,autoComplete:"off"})]}),e.jsxs("div",{className:"jkl-combobox__menu",role:"listbox",ref:se,id:P,"aria-labelledby":B,"aria-multiselectable":"true","aria-activedescendant":te,onFocus:re,onBlur:ie,tabIndex:-1,children:[oe.map(((o,t)=>e.jsxs("button",{type:"button",id:`${P}__${o.value}`,"aria-selected":W(o),role:"option",value:o.value,onBlur:ie,className:`jkl-combobox__option ${W(o)&&"jkl-combobox__option--selected"}`,"data-testid":"jkl-combobox__option","data-testautoid":`jkl-combobox__option-${t}`,onFocus:re,onKeyDown:be,onClick:e=>{ae(`${P}__${o.value}`),e.stopPropagation(),Z(o.value),H("")},onMouseOver:ue,children:[o.description?e.jsxs("span",{children:[o.label,e.jsx("span",{className:"jkl-combobox__option-description",children:o.description})]}):o.label,W(o)?e.jsxs("span",{children:[e.jsx(c.CheckIcon,{})," "]}):null]},`${P}-${o.value}`))),R&&e.jsx("div",{className:"jkl-combobox__no-option",children:y})]}),e.jsx("div",{className:"jkl-combobox__actions",children:e.jsx(s.IconButton,{id:D,onFocus:re,onBlur:ie,className:"jkl-combobox__button","data-testid":"jkl-combobox__button","aria-label":"Åpne meny","aria-expanded":M,"aria-controls":P,onClick:()=>O((e=>!e)),onMouseDown:e=>{e.preventDefault(),J.current?.focus()},children:e.jsx(i.ArrowVerticalAnimated,{pointingDown:ne})})})]})})};x.displayName="Combobox",exports.Combobox=x,exports.getComboboxValuePair=m;
2
2
  //# sourceMappingURL=Combobox.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Combobox.cjs","sources":["../../../../src/components/combobox/Combobox.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, {\n type FC,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useAnimatedHeight } from \"../../hooks/useAnimatedHeight/useAnimatedHeight.js\";\nimport { useId } from \"../../hooks/useId/useId.js\";\nimport { useListNavigation } from \"../../hooks/useListNavigation/useListNavigation.js\";\nimport type { ValuePair } from \"../../utilities/valuePair.js\";\nimport { Chip } from \"../chip/Chip.js\";\nimport { IconButton } from \"../icon-button/IconButton.js\";\nimport { CheckIcon } from \"../icon/icons/CheckIcon.js\";\nimport { ArrowVerticalAnimated } from \"../icon/icons/animated/ArrowVerticalAnimated.js\";\nimport { InputGroup } from \"../input-group/InputGroup.js\";\nimport { Tooltip } from \"../tooltip/Tooltip.js\";\nimport { TooltipContent } from \"../tooltip/TooltipContent.js\";\nimport { TooltipTrigger } from \"../tooltip/TooltipTrigger.js\";\nimport type { ComboboxProps, ComboboxValuePair } from \"./types.js\";\n\nexport function getComboboxValuePair(\n item: string | ComboboxValuePair,\n): ComboboxValuePair {\n return typeof item === \"string\" ? { value: item, label: item } : item;\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<\n Array<ComboboxValuePair>\n >(value || []);\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 }\n\n return selectedValue.some((value) => value.value === option.value);\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:\n | React.MouseEvent<HTMLButtonElement, globalThis.MouseEvent>\n | React.KeyboardEvent<HTMLInputElement>,\n option: string,\n ) => {\n const 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, onChange, name],\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, onChange, name, removeOption, items],\n );\n\n // Funksjon for søk\n const onSearch = (e: {\n target: { value: React.SetStateAction<string> };\n }) => {\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) =>\n option.label.toLowerCase().indexOf(searchValue.toLowerCase()) >=\n 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<\n string | undefined\n >(options[0]?.value ? `${listId}-${options[0]?.value}` : undefined);\n\n // Håndtere arrow-state\n const isPointingDown = !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 }, [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 (\n e: FocusEvent<\n HTMLDivElement | HTMLInputElement | HTMLButtonElement\n >,\n ) => {\n const componentRootElement = componentRootElementRef.current;\n const nextFocusIsInsideComponent = componentRootElement?.contains(\n e.relatedTarget as Node,\n );\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(\n new Event(\"focusout\", { bubbles: true }),\n );\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\n .querySelector<HTMLButtonElement>('[role=\"option\"]')\n ?.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(\n (item) => item.isMarked,\n );\n\n if (selectedValueIsMarked) {\n const updatedSelectedValue = selectedValue.filter(\n (item) => !item.isMarked,\n );\n setSelectedValue(updatedSelectedValue);\n setSearchValue(\"\");\n } else if (selectedValue.length > 0 && searchValue === \"\") {\n // Hvis ingen items er markert, fjern siste valgte item\n onTagRemove(\n e,\n selectedValue[selectedValue.length - 1].value,\n );\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(\n '[role=\"option\"]:not([hidden])',\n );\n if (\n e.currentTarget.id === firstVisible?.id &&\n searchRef.current\n ) {\n searchRef.current.focus();\n }\n }\n }\n },\n [dropdownRef],\n );\n\n const hasSelection = selectedValue.length >= 1;\n\n const renderSelectedOption = useCallback(\n (option: ComboboxValuePair) => (\n <Chip\n key={option.value}\n data-testid=\"jkl-chip\"\n aria-label={`Fjern ${option.tagLabel}`}\n className={`jkl-combobox__selected-option ${\n marked && \"jkl-combobox__selected-option--marked\"\n }`}\n variant=\"input\"\n onClick={(e) => {\n if (searchRef.current) {\n searchRef.current.focus();\n }\n onTagRemove(e, option.value);\n }}\n onBlur={handleBlur}\n >\n {option.tagLabel ? option.tagLabel : option.label}\n </Chip>\n ),\n [handleBlur, onTagRemove, marked],\n );\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\", {\n \"jkl-combobox__wrapper--active-value\": hasSelection,\n })}\n style={{ width }}\n tabIndex={-1}\n onFocus={handleFocus}\n onBlur={handleBlur}\n >\n <div\n className=\"jkl-combobox__chips\"\n data-testid=\"jkl-combobox__chips\"\n >\n {selectedValue\n .map(getComboboxValuePair)\n .map((option) => {\n return hasTagHover ? (\n <Tooltip key={option.value}>\n <TooltipTrigger>\n {renderSelectedOption(option)}\n </TooltipTrigger>\n <TooltipContent>\n {option.label}\n </TooltipContent>\n </Tooltip>\n ) : (\n renderSelectedOption(option)\n );\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={\n selectedValue.length > 0 ? \"\" : placeholder\n }\n autoComplete=\"off\"\n />\n </div>\n\n <div\n className=\"jkl-combobox__menu\"\n // biome-ignore lint/a11y/useSemanticElements: Dette er en reimplementering av en liste\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 // biome-ignore lint/a11y/useSemanticElements: Dette er en reimplementering av en liste\n role=\"option\"\n value={option.value}\n onBlur={handleBlur}\n className={`jkl-combobox__option ${\n isSelected(option) &&\n \"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(\n `${listId}__${option.value}`,\n ); // 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\">\n {option.description}\n </span>\n </span>\n ) : (\n option.label\n )}\n {isSelected(option) ? (\n <span>\n <CheckIcon />{\" \"}\n </span>\n ) : null}\n </button>\n ))}\n {noResults && (\n <div className=\"jkl-combobox__no-option\">\n {noMatchingOption}\n </div>\n )}\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={`${\n selectedValue.map((value) => value.label) ||\n \"Velg\"\n },${label}`}\n aria-expanded={showMenu}\n aria-controls={listId}\n onClick={() => setShowMenu((previous) => !previous)}\n onMouseDown={(e) => {\n e.preventDefault();\n inputRef.current?.focus();\n }}\n >\n <ArrowVerticalAnimated\n pointingDown={isPointingDown}\n />\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","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","isPointingDown","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","renderSelectedOption","jsx","Chip","tagLabel","variant","onClick","children","InputGroup","clsx","render","inputProps","jsxs","style","tabIndex","Tooltip","TooltipTrigger","TooltipContent","onKeyDown","role","autoComplete","onMouseOver","description","CheckIcon","IconButton","previous","onMouseDown","ArrowVerticalAnimated","pointingDown","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"Combobox.cjs","sources":["../../../../src/components/combobox/Combobox.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, {\n type FC,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {useAnimatedHeight} from \"../../hooks/useAnimatedHeight/useAnimatedHeight.js\";\nimport {useId} from \"../../hooks/useId/useId.js\";\nimport {useListNavigation} from \"../../hooks/useListNavigation/useListNavigation.js\";\nimport type {ValuePair} from \"../../utilities/valuePair.js\";\nimport {Chip} from \"../chip/Chip.js\";\nimport {IconButton} from \"../icon-button/IconButton.js\";\nimport {CheckIcon} from \"../icon/icons/CheckIcon.js\";\nimport {ArrowVerticalAnimated} from \"../icon/icons/animated/ArrowVerticalAnimated.js\";\nimport {InputGroup} from \"../input-group/InputGroup.js\";\nimport {Tooltip} from \"../tooltip/Tooltip.js\";\nimport {TooltipContent} from \"../tooltip/TooltipContent.js\";\nimport {TooltipTrigger} from \"../tooltip/TooltipTrigger.js\";\nimport type {ComboboxProps, ComboboxValuePair} from \"./types.js\";\n\nexport function getComboboxValuePair(\n item: string | ComboboxValuePair,\n): ComboboxValuePair {\n return typeof item === \"string\" ? { value: item, label: item } : item;\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<\n Array<ComboboxValuePair>\n >(value || []);\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 }\n\n return selectedValue.some((value) => value.value === option.value);\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:\n | React.MouseEvent<HTMLButtonElement, globalThis.MouseEvent>\n | React.KeyboardEvent<HTMLInputElement>,\n option: string,\n ) => {\n const 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, onChange, name],\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, onChange, name, removeOption, items],\n );\n\n // Funksjon for søk\n const onSearch = (e: {\n target: { value: React.SetStateAction<string> };\n }) => {\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) =>\n option.label.toLowerCase().indexOf(searchValue.toLowerCase()) >=\n 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<\n string | undefined\n >(options[0]?.value ? `${listId}-${options[0]?.value}` : undefined);\n\n // Håndtere arrow-state\n const isPointingDown = !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 }, [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 (\n e: FocusEvent<\n HTMLDivElement | HTMLInputElement | HTMLButtonElement\n >,\n ) => {\n const componentRootElement = componentRootElementRef.current;\n const nextFocusIsInsideComponent = componentRootElement?.contains(\n e.relatedTarget as Node,\n );\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(\n new Event(\"focusout\", { bubbles: true }),\n );\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\n .querySelector<HTMLButtonElement>('[role=\"option\"]')\n ?.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(\n (item) => item.isMarked,\n );\n\n if (selectedValueIsMarked) {\n const updatedSelectedValue = selectedValue.filter(\n (item) => !item.isMarked,\n );\n setSelectedValue(updatedSelectedValue);\n setSearchValue(\"\");\n } else if (selectedValue.length > 0 && searchValue === \"\") {\n // Hvis ingen items er markert, fjern siste valgte item\n onTagRemove(\n e,\n selectedValue[selectedValue.length - 1].value,\n );\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(\n '[role=\"option\"]:not([hidden])',\n );\n if (\n e.currentTarget.id === firstVisible?.id &&\n searchRef.current\n ) {\n searchRef.current.focus();\n }\n }\n }\n },\n [dropdownRef],\n );\n\n const hasSelection = selectedValue.length >= 1;\n\n const renderSelectedOption = useCallback(\n (option: ComboboxValuePair) => (\n <Chip\n key={option.value}\n data-testid=\"jkl-chip\"\n aria-label={`Fjern ${option.tagLabel}`}\n className={`jkl-combobox__selected-option ${\n marked && \"jkl-combobox__selected-option--marked\"\n }`}\n variant=\"input\"\n onClick={(e) => {\n if (searchRef.current) {\n searchRef.current.focus();\n }\n onTagRemove(e, option.value);\n }}\n onBlur={handleBlur}\n >\n {option.tagLabel ? option.tagLabel : option.label}\n </Chip>\n ),\n [handleBlur, onTagRemove, marked],\n );\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\", {\n \"jkl-combobox__wrapper--active-value\": hasSelection,\n })}\n style={{ width }}\n tabIndex={-1}\n onFocus={handleFocus}\n onBlur={handleBlur}\n >\n <div\n className=\"jkl-combobox__chips\"\n data-testid=\"jkl-combobox__chips\"\n >\n {selectedValue\n .map(getComboboxValuePair)\n .map((option) => {\n return hasTagHover ? (\n <Tooltip key={option.value}>\n <TooltipTrigger>\n {renderSelectedOption(option)}\n </TooltipTrigger>\n <TooltipContent>\n {option.label}\n </TooltipContent>\n </Tooltip>\n ) : (\n renderSelectedOption(option)\n );\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={\n selectedValue.length > 0 ? \"\" : placeholder\n }\n autoComplete=\"off\"\n />\n </div>\n\n <div\n className=\"jkl-combobox__menu\"\n // biome-ignore lint/a11y/useSemanticElements: Dette er en reimplementering av en liste\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 // biome-ignore lint/a11y/useSemanticElements: Dette er en reimplementering av en liste\n role=\"option\"\n value={option.value}\n onBlur={handleBlur}\n className={`jkl-combobox__option ${\n isSelected(option) &&\n \"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(\n `${listId}__${option.value}`,\n ); // 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\">\n {option.description}\n </span>\n </span>\n ) : (\n option.label\n )}\n {isSelected(option) ? (\n <span>\n <CheckIcon />{\" \"}\n </span>\n ) : null}\n </button>\n ))}\n {noResults && (\n <div className=\"jkl-combobox__no-option\">\n {noMatchingOption}\n </div>\n )}\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=\"Åpne meny\"\n aria-expanded={showMenu}\n aria-controls={listId}\n onClick={() => setShowMenu((previous) => !previous)}\n onMouseDown={(e) => {\n e.preventDefault();\n inputRef.current?.focus();\n }}\n >\n <ArrowVerticalAnimated\n pointingDown={isPointingDown}\n />\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","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","onSearch","options","useMemo","filteredOptions","toLowerCase","indexOf","activeDescendant","setActiveDescendant","isPointingDown","handleEscape","key","window","addEventListener","removeEventListener","handleFocusPlacement","isOpen","handleFocus","dropdownRef","useAnimatedHeight","onFirstVisible","onTransitionEnd","useListNavigation","ref","componentRootElementRef","handleBlur","contains","relatedTarget","dispatchEvent","Event","bubbles","handleMouseOver","preventScroll","handleSearchOnKeyDown","preventDefault","listElement","querySelector","metaKey","ctrlKey","updatedSelectedValue","map","isMarked","handleOptionOnKeyDown","shiftKey","firstVisible","currentTarget","hasSelection","renderSelectedOption","jsx","Chip","tagLabel","variant","onClick","children","InputGroup","clsx","render","inputProps","jsxs","style","tabIndex","Tooltip","TooltipTrigger","TooltipContent","onKeyDown","role","autoComplete","onMouseOver","description","CheckIcon","IconButton","previous","onMouseDown","ArrowVerticalAnimated","pointingDown","displayName"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),a=require("../Combobox.cjs");require("react");const t={title:"Komponenter/Combobox",component:a.Combobox,parameters:{layout:"centered"},tags:["autodocs"]},l={args:{items:[{value:"a080",label:"A080 - Rotavirusenteritt",tagLabel:"A080"},{value:"a081",label:"A081 - Akutt gastroenteritt som skyldes norovirus",tagLabel:"A081"},{value:"a082",label:"A082 - Adenovirusenteritt",tagLabel:"A082"},{value:"a083",label:"A083 - Annen virusenteritt",tagLabel:"A083"},{value:"a084",label:"A084 - Uspesifisert virusinfeksjon i mage-tarmkanalen",tagLabel:"A084"},{value:"a085",label:"A085 - Annen spesifisert mage-tarminfeksjon",tagLabel:"A085"},{value:"a090",label:"A090 - Annen eller uspesifisert gastroenteritt eller kolitt av infeksiøs årsak",tagLabel:"A090"},{value:"a099",label:"A099 - Gastroenteritt eller kolitt av uspesifisert årsak",tagLabel:"A099"},{value:"a150",label:"A150 - Lungetuberkulose bekreftet ved mikroskopi av sputum med eller uten kultur",tagLabel:"A150"}],label:"Velg sykdommer",name:"disease",onChange:()=>{}},decorators:a=>e.jsx("div",{style:{maxWidth:220},children:e.jsx(a,{})})};exports.Combobox=l,exports.default=t;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),a=require("../Combobox.cjs");/* empty css */require("react");const t={title:"Komponenter/Combobox",component:a.Combobox,parameters:{layout:"centered"},tags:["autodocs"]},l={args:{items:[{value:"a080",label:"A080 - Rotavirusenteritt",tagLabel:"A080"},{value:"a081",label:"A081 - Akutt gastroenteritt som skyldes norovirus",tagLabel:"A081"},{value:"a082",label:"A082 - Adenovirusenteritt",tagLabel:"A082"},{value:"a083",label:"A083 - Annen virusenteritt",tagLabel:"A083"},{value:"a084",label:"A084 - Uspesifisert virusinfeksjon i mage-tarmkanalen",tagLabel:"A084"},{value:"a085",label:"A085 - Annen spesifisert mage-tarminfeksjon",tagLabel:"A085"},{value:"a090",label:"A090 - Annen eller uspesifisert gastroenteritt eller kolitt av infeksiøs årsak",tagLabel:"A090"},{value:"a099",label:"A099 - Gastroenteritt eller kolitt av uspesifisert årsak",tagLabel:"A099"},{value:"a150",label:"A150 - Lungetuberkulose bekreftet ved mikroskopi av sputum med eller uten kultur",tagLabel:"A150"}],label:"Velg sykdommer",name:"disease",onChange:()=>{}},decorators:a=>e.jsx("div",{children:e.jsx(a,{})})},r={name:"Combobox uten tag label",args:{items:[{label:"DNB",value:"dnb"},{label:"Sparebank 1",value:"sb1"},{label:"Eika",value:"eik"},{label:"Fremtind",value:"fre"}],label:"Filtrer",name:"filter",onChange:()=>{}},decorators:a=>e.jsx("div",{children:e.jsx(a,{})})};exports.Combobox=l,exports.ComboboxNoTagLabel=r,exports.default=t;
2
2
  //# sourceMappingURL=Combobox.stories.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Combobox.stories.cjs","sources":["../../../../../src/components/combobox/stories/Combobox.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from \"@storybook/react\";\nimport { Combobox as ComboboxComponent } from \"../Combobox.js\";\nimport \"../styles/_index.scss\";\nimport React from \"react\";\nimport type { ComboboxValuePair } from \"../../combobox/types.js\";\n\nconst meta = {\n title: \"Komponenter/Combobox\",\n component: ComboboxComponent,\n parameters: {\n layout: \"centered\",\n },\n tags: [\"autodocs\"],\n} satisfies Meta<typeof ComboboxComponent>;\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\nconst items: ComboboxValuePair[] = [\n { value: \"a080\", label: \"A080 - Rotavirusenteritt\", tagLabel: \"A080\" },\n {\n value: \"a081\",\n label: \"A081 - Akutt gastroenteritt som skyldes norovirus\",\n tagLabel: \"A081\",\n },\n { value: \"a082\", label: \"A082 - Adenovirusenteritt\", tagLabel: \"A082\" },\n {\n value: \"a083\",\n label: \"A083 - Annen virusenteritt\",\n tagLabel: \"A083\",\n },\n {\n value: \"a084\",\n label: \"A084 - Uspesifisert virusinfeksjon i mage-tarmkanalen\",\n tagLabel: \"A084\",\n },\n {\n value: \"a085\",\n label: \"A085 - Annen spesifisert mage-tarminfeksjon\",\n tagLabel: \"A085\",\n },\n {\n value: \"a090\",\n label: \"A090 - Annen eller uspesifisert gastroenteritt eller kolitt av infeksiøs årsak\",\n tagLabel: \"A090\",\n },\n {\n value: \"a099\",\n label: \"A099 - Gastroenteritt eller kolitt av uspesifisert årsak\",\n tagLabel: \"A099\",\n },\n {\n value: \"a150\",\n label: \"A150 - Lungetuberkulose bekreftet ved mikroskopi av sputum med eller uten kultur\",\n tagLabel: \"A150\",\n },\n];\n\nexport const Combobox: Story = {\n args: {\n items,\n label: \"Velg sykdommer\",\n name: \"disease\",\n onChange: () => {},\n },\n decorators: (Story) => (\n <div style={{ maxWidth: 220 }}>\n <Story />\n </div>\n ),\n};\n"],"names":["meta","title","component","ComboboxComponent","Combobox","parameters","layout","tags","args","items","value","label","tagLabel","name","onChange","decorators","Story","jsx","style","maxWidth","children"],"mappings":"+LAMA,MAAMA,EAAO,CACTC,MAAO,uBACPC,UAAWC,EAAAC,SACXC,WAAY,CACRC,OAAQ,YAEZC,KAAM,CAAC,aA8CEH,EAAkB,CAC3BI,KAAM,CACFC,MA1C2B,CAC/B,CAAEC,MAAO,OAAQC,MAAO,2BAA4BC,SAAU,QAC9D,CACIF,MAAO,OACPC,MAAO,oDACPC,SAAU,QAEd,CAAEF,MAAO,OAAQC,MAAO,4BAA6BC,SAAU,QAC/D,CACIF,MAAO,OACPC,MAAO,6BACPC,SAAU,QAEd,CACIF,MAAO,OACPC,MAAO,wDACPC,SAAU,QAEd,CACIF,MAAO,OACPC,MAAO,8CACPC,SAAU,QAEd,CACIF,MAAO,OACPC,MAAO,iFACPC,SAAU,QAEd,CACIF,MAAO,OACPC,MAAO,2DACPC,SAAU,QAEd,CACIF,MAAO,OACPC,MAAO,mFACPC,SAAU,SAOVD,MAAO,iBACPE,KAAM,UACNC,SAAU,QAEdC,WAAaC,GACTC,EAAAA,IAAC,MAAI,CAAAC,MAAO,CAAEC,SAAU,KACpBC,SAACH,EAAAA,IAAAD,EAAA,CAAM"}
1
+ {"version":3,"file":"Combobox.stories.cjs","sources":["../../../../../src/components/combobox/stories/Combobox.stories.tsx"],"sourcesContent":["import type {Meta, StoryObj} from \"@storybook/react\";\nimport {Combobox as ComboboxComponent} from \"../Combobox.js\";\nimport \"../styles/_index.scss\";\nimport React from \"react\";\nimport type {ComboboxValuePair} from \"../../combobox/types.js\";\n\nconst meta = {\n title: \"Komponenter/Combobox\",\n component: ComboboxComponent,\n parameters: {\n layout: \"centered\",\n },\n tags: [\"autodocs\"],\n} satisfies Meta<typeof ComboboxComponent>;\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\nconst items: ComboboxValuePair[] = [\n { value: \"a080\", label: \"A080 - Rotavirusenteritt\", tagLabel: \"A080\" },\n {\n value: \"a081\",\n label: \"A081 - Akutt gastroenteritt som skyldes norovirus\",\n tagLabel: \"A081\",\n },\n { value: \"a082\", label: \"A082 - Adenovirusenteritt\", tagLabel: \"A082\" },\n {\n value: \"a083\",\n label: \"A083 - Annen virusenteritt\",\n tagLabel: \"A083\",\n },\n {\n value: \"a084\",\n label: \"A084 - Uspesifisert virusinfeksjon i mage-tarmkanalen\",\n tagLabel: \"A084\",\n },\n {\n value: \"a085\",\n label: \"A085 - Annen spesifisert mage-tarminfeksjon\",\n tagLabel: \"A085\",\n },\n {\n value: \"a090\",\n label: \"A090 - Annen eller uspesifisert gastroenteritt eller kolitt av infeksiøs årsak\",\n tagLabel: \"A090\",\n },\n {\n value: \"a099\",\n label: \"A099 - Gastroenteritt eller kolitt av uspesifisert årsak\",\n tagLabel: \"A099\",\n },\n {\n value: \"a150\",\n label: \"A150 - Lungetuberkulose bekreftet ved mikroskopi av sputum med eller uten kultur\",\n tagLabel: \"A150\",\n },\n];\n\nconst itemsNoTagLabel: ComboboxValuePair[] = [\n {label: \"DNB\", value: \"dnb\"},\n {label: \"Sparebank 1\", value: \"sb1\"},\n {label: \"Eika\", value: \"eik\"},\n {label: \"Fremtind\", value: \"fre\"},\n];\n\nexport const Combobox: Story = {\n args: {\n items,\n label: \"Velg sykdommer\",\n name: \"disease\",\n onChange: () => {},\n },\n decorators: (Story) => (\n <div>\n <Story/>\n </div>\n ),\n};\n\nexport const ComboboxNoTagLabel: Story = {\n name: \"Combobox uten tag label\",\n args: {\n items: itemsNoTagLabel,\n label: \"Filtrer\",\n name: \"filter\",\n onChange: () => {\n },\n },\n decorators: (Story) => (\n <div>\n <Story />\n </div>\n ),\n};\n"],"names":["meta","title","component","ComboboxComponent","Combobox","parameters","layout","tags","args","items","value","label","tagLabel","name","onChange","decorators","Story","children","jsx","ComboboxNoTagLabel"],"mappings":"0OAMA,MAAMA,EAAO,CACTC,MAAO,uBACPC,UAAWC,EAAAC,SACXC,WAAY,CACRC,OAAQ,YAEZC,KAAM,CAAC,aAqDEH,EAAkB,CAC3BI,KAAM,CACFC,MAjD2B,CAC/B,CAAEC,MAAO,OAAQC,MAAO,2BAA4BC,SAAU,QAC9D,CACIF,MAAO,OACPC,MAAO,oDACPC,SAAU,QAEd,CAAEF,MAAO,OAAQC,MAAO,4BAA6BC,SAAU,QAC/D,CACIF,MAAO,OACPC,MAAO,6BACPC,SAAU,QAEd,CACIF,MAAO,OACPC,MAAO,wDACPC,SAAU,QAEd,CACIF,MAAO,OACPC,MAAO,8CACPC,SAAU,QAEd,CACIF,MAAO,OACPC,MAAO,iFACPC,SAAU,QAEd,CACIF,MAAO,OACPC,MAAO,2DACPC,SAAU,QAEd,CACIF,MAAO,OACPC,MAAO,mFACPC,SAAU,SAcVD,MAAO,iBACPE,KAAM,UACNC,SAAU,QAEdC,WAAaC,SACR,MACG,CAAAC,SAAAC,EAAAA,IAACF,SAKAG,EAA4B,CACrCN,KAAM,0BACNL,KAAM,CACFC,MAxBqC,CACzC,CAACE,MAAO,MAAOD,MAAO,OACtB,CAACC,MAAO,cAAeD,MAAO,OAC9B,CAACC,MAAO,OAAQD,MAAO,OACvB,CAACC,MAAO,WAAYD,MAAO,QAqBvBC,MAAO,UACPE,KAAM,SACNC,SAAU,QAGdC,WAAaC,SACR,MACG,CAAAC,SAAAC,EAAAA,IAACF"}
@@ -11,3 +11,4 @@ declare const meta: {
11
11
  export default meta;
12
12
  type Story = StoryObj<typeof meta>;
13
13
  export declare const Combobox: Story;
14
+ export declare const ComboboxNoTagLabel: Story;
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("react"),n=require("react-dom"),o=require("../button/Button.cjs"),i=require("../modal/Modal.cjs"),s=require("../modal/useModal.cjs"),r=require("./CookieConsentContext.cjs"),a=require("./RequirementCheckbox.cjs"),l=require("./cookieConsentUtils.cjs");exports.CookieConsent=({blocking:c,onAccept:d,...u})=>{const{currentConsent:k,cookieName:m,cookieDomain:g,cookiePath:j,requirement:f,isOpen:p,setIsOpen:h,updateCurrentConsents:b}=r.useInternalState(),[C,x]=s.useModal({id:`jkl-cookie-modal-${t.useId()}`,role:c?"alertdialog":"dialog",title:"Informasjonskapsler"});if(t.useEffect((()=>{p?null==C||C.show():null==C||C.hide()}),[C,p]),t.useEffect((()=>{const e=()=>h(!1);return null==C||C.on("hide",e),()=>{null==C||C.off("hide",e)}}),[C,h]),typeof document>"u")return null;if(typeof navigator<"u"&&!navigator.cookieEnabled)return d&&d({functional:"denied",marketing:"denied",statistics:"denied"}),null;const v=(e=l.convertBooleanConsentObjectToConsentObject({functional:!0,statistics:!0,marketing:!0},f))=>{const t=Object.fromEntries(Object.entries(e).filter((([,e])=>typeof e<"u"))),n={...k,...t};l.setConsentCookie({consent:n,name:m,domain:g,path:j}),b(),null==d||d(n),null==C||C.hide()};return n.createPortal(e.jsxs(i.ModalContainer,{...x.container,...u,"data-cookie-consent-open":p,children:[e.jsx(i.ModalOverlay,{...x.overlay}),e.jsxs(i.Modal,{component:"form",...x.modal,onSubmit:e=>{e.preventDefault();const t=new FormData(e.currentTarget),n=l.convertBooleanConsentObjectToConsentObject({functional:"true"===t.get("functional"),statistics:"true"===t.get("statistics"),marketing:"true"===t.get("marketing")},f);v(n)},children:[e.jsx(i.ModalHeader,{children:e.jsx(i.ModalTitle,{...x.title,children:"Velg informasjonskapsler"})}),e.jsxs(i.ModalBody,{children:[e.jsx("p",{children:"For at nettsidene skal fungere må vi bruke tekniske informasjonskaplser. Disse lagres derfor uten samtykke."}),f.functional&&e.jsx(a.RequirementCheckbox,{name:"functional",label:"Tillat funksjonelle",defaultChecked:"accepted"===k.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."},`functional-${k.functional}`),f.statistics&&e.jsx(a.RequirementCheckbox,{name:"statistics",label:"Tillat statistikk",defaultChecked:"accepted"===k.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."},`statistics-${k.statistics}`),f.marketing&&e.jsx(a.RequirementCheckbox,{name:"marketing",label:"Tillat personlig markedsføring",defaultChecked:"accepted"===k.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."},`marketing-${k.marketing}`)]}),e.jsxs(i.ModalActions,{children:[e.jsx(o.SecondaryButton,{"data-testid":"jkl-cookie-consent-godta-alle",type:"button",onClick:()=>v(),children:"Godta alle"}),e.jsx(o.SecondaryButton,{"data-testid":"jkl-cookie-consent-godta",type:"submit",children:"Godta mine valg"})]})]})]}),document.body)};
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("react"),n=require("react-dom"),o=require("../button/Button.cjs"),i=require("../modal/Modal.cjs"),s=require("../modal/useModal.cjs"),r=require("./CookieConsentContext.cjs"),a=require("./RequirementCheckbox.cjs"),l=require("./cookieConsentUtils.cjs");exports.CookieConsent=({blocking:c,onAccept:d,...u})=>{const{currentConsent:k,cookieName:m,cookieDomain:g,cookiePath:j,requirement:f,isOpen:p,setIsOpen:h,updateCurrentConsents:b}=r.useInternalState(),[C,x]=s.useModal({id:`jkl-cookie-modal-${t.useId()}`,role:c?"alertdialog":"dialog",title:"Informasjonskapsler"});if(t.useEffect((()=>{p?C?.show():C?.hide()}),[C,p]),t.useEffect((()=>{const e=()=>h(!1);return C?.on("hide",e),()=>{C?.off("hide",e)}}),[C,h]),typeof document>"u")return null;if(typeof navigator<"u"&&!navigator.cookieEnabled)return d&&d({functional:"denied",marketing:"denied",statistics:"denied"}),null;const v=(e=l.convertBooleanConsentObjectToConsentObject({functional:!0,statistics:!0,marketing:!0},f))=>{const t=Object.fromEntries(Object.entries(e).filter((([,e])=>typeof e<"u"))),n={...k,...t};l.setConsentCookie({consent:n,name:m,domain:g,path:j}),b(),d?.(n),C?.hide()};return n.createPortal(e.jsxs(i.ModalContainer,{...x.container,...u,"data-cookie-consent-open":p,children:[e.jsx(i.ModalOverlay,{...x.overlay}),e.jsxs(i.Modal,{component:"form",...x.modal,onSubmit:e=>{e.preventDefault();const t=new FormData(e.currentTarget),n=l.convertBooleanConsentObjectToConsentObject({functional:"true"===t.get("functional"),statistics:"true"===t.get("statistics"),marketing:"true"===t.get("marketing")},f);v(n)},children:[e.jsx(i.ModalHeader,{children:e.jsx(i.ModalTitle,{...x.title,children:"Velg informasjonskapsler"})}),e.jsxs(i.ModalBody,{children:[e.jsx("p",{children:"For at nettsidene skal fungere må vi bruke tekniske informasjonskaplser. Disse lagres derfor uten samtykke."}),f.functional&&e.jsx(a.RequirementCheckbox,{name:"functional",label:"Tillat funksjonelle",defaultChecked:"accepted"===k.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."},`functional-${k.functional}`),f.statistics&&e.jsx(a.RequirementCheckbox,{name:"statistics",label:"Tillat statistikk",defaultChecked:"accepted"===k.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."},`statistics-${k.statistics}`),f.marketing&&e.jsx(a.RequirementCheckbox,{name:"marketing",label:"Tillat personlig markedsføring",defaultChecked:"accepted"===k.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."},`marketing-${k.marketing}`)]}),e.jsxs(i.ModalActions,{children:[e.jsx(o.SecondaryButton,{"data-testid":"jkl-cookie-consent-godta-alle",type:"button",onClick:()=>v(),children:"Godta alle"}),e.jsx(o.SecondaryButton,{"data-testid":"jkl-cookie-consent-godta",type:"submit",children:"Godta mine valg"})]})]})]}),document.body)};
2
2
  //# sourceMappingURL=CookieConsent.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"CookieConsent.cjs","sources":["../../../../src/components/cookie-consent/CookieConsent.tsx"],"sourcesContent":["import React, { type FormEventHandler, useEffect, useId } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { SecondaryButton } from \"../button/Button.js\";\nimport {\n Modal,\n ModalActions,\n ModalBody,\n ModalContainer,\n ModalHeader,\n ModalOverlay,\n ModalTitle,\n} from \"../modal/Modal.js\";\nimport { useModal } from \"../modal/useModal.js\";\nimport { useInternalState } from \"./CookieConsentContext.js\";\nimport { RequirementCheckbox } from \"./RequirementCheckbox.js\";\nimport {\n convertBooleanConsentObjectToConsentObject,\n setConsentCookie,\n} from \"./cookieConsentUtils.js\";\nimport type { AcceptConsentCallback, Consent } from \"./types.js\";\n\nexport interface CookieConsentProps {\n blocking?: boolean;\n onAccept?: AcceptConsentCallback;\n}\n\nexport const CookieConsent = ({\n blocking,\n onAccept,\n ...rest\n}: CookieConsentProps): JSX.Element | null => {\n const {\n currentConsent,\n cookieName,\n cookieDomain,\n cookiePath,\n requirement,\n isOpen,\n setIsOpen,\n updateCurrentConsents,\n } = useInternalState();\n\n const [instance, modalConfig] = useModal({\n id: `jkl-cookie-modal-${useId()}`,\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: blocking ? \"alertdialog\" : \"dialog\",\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 (isOpen) {\n instance?.show();\n } else {\n instance?.hide();\n }\n }, [instance, isOpen]);\n\n useEffect(() => {\n const onHide = () => setIsOpen(false);\n instance?.on(\"hide\", onHide);\n return () => {\n instance?.off(\"hide\", onHide);\n };\n }, [instance, setIsOpen]);\n\n if (typeof document === \"undefined\") {\n return null;\n }\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 accept = (\n selection = convertBooleanConsentObjectToConsentObject(\n {\n functional: true,\n statistics: true,\n marketing: true,\n },\n requirement,\n ),\n ) => {\n const selectionWithoutEmptyValues = Object.fromEntries(\n Object.entries(selection).filter(\n ([, value]) => typeof value !== \"undefined\",\n ),\n );\n\n const updatedConsent: Consent = {\n ...currentConsent,\n ...selectionWithoutEmptyValues,\n };\n\n setConsentCookie({\n consent: updatedConsent,\n name: cookieName,\n domain: cookieDomain,\n path: cookiePath,\n });\n\n updateCurrentConsents();\n\n onAccept?.(updatedConsent);\n\n instance?.hide();\n };\n\n const onSubmit: FormEventHandler<HTMLFormElement> = (e) => {\n e.preventDefault();\n\n const formData = new FormData(e.currentTarget);\n\n const newConsents = convertBooleanConsentObjectToConsentObject(\n {\n functional: formData.get(\"functional\") === \"true\",\n statistics: formData.get(\"statistics\") === \"true\",\n marketing: formData.get(\"marketing\") === \"true\",\n },\n requirement,\n );\n\n accept(newConsents);\n };\n\n return ReactDOM.createPortal(\n <ModalContainer\n {...modalConfig.container}\n {...rest}\n data-cookie-consent-open={isOpen}\n >\n <ModalOverlay {...modalConfig.overlay} />\n <Modal component=\"form\" {...modalConfig.modal} {...{ onSubmit }}>\n <ModalHeader>\n <ModalTitle {...modalConfig.title}>\n Velg informasjonskapsler\n </ModalTitle>\n </ModalHeader>\n <ModalBody>\n <p>\n For at nettsidene skal fungere må vi bruke tekniske\n informasjonskaplser. Disse lagres derfor uten samtykke.\n </p>\n {requirement.functional && (\n <RequirementCheckbox\n name=\"functional\"\n label=\"Tillat funksjonelle\"\n defaultChecked={\n currentConsent.functional === \"accepted\"\n }\n key={`functional-${currentConsent.functional}`}\n >\n Funksjonelle informasjonskapsler lagrer opplysninger\n om din bruk av nettsidene og hvilke innstillinger du\n har gjort, slik at du kan få funksjonalitet\n tilpasset deg.\n </RequirementCheckbox>\n )}\n {requirement.statistics && (\n <RequirementCheckbox\n name=\"statistics\"\n label=\"Tillat statistikk\"\n defaultChecked={\n currentConsent.statistics === \"accepted\"\n }\n key={`statistics-${currentConsent.statistics}`}\n >\n Informasjonskapslene lagrer statistikk som hjelper\n oss med å forstå hvordan nettsidene blir brukt, slik\n at vi kan gjøre dem bedre og enklere å bruke.\n </RequirementCheckbox>\n )}\n {requirement.marketing && (\n <RequirementCheckbox\n name=\"marketing\"\n label=\"Tillat personlig markedsføring\"\n defaultChecked={\n currentConsent.marketing === \"accepted\"\n }\n key={`marketing-${currentConsent.marketing}`}\n >\n Dette gjør at vi kan gi deg mer relevant og\n tilpasset markedsføring, også gjennom våre\n samarbeidspartnere, på for eksempel nettsider,\n annonser og i sosiale medier.\n </RequirementCheckbox>\n )}\n </ModalBody>\n <ModalActions>\n <SecondaryButton\n data-testid=\"jkl-cookie-consent-godta-alle\"\n type=\"button\"\n onClick={() => accept()}\n >\n Godta alle\n </SecondaryButton>\n <SecondaryButton\n data-testid=\"jkl-cookie-consent-godta\"\n type=\"submit\"\n >\n Godta mine valg\n </SecondaryButton>\n </ModalActions>\n </Modal>\n </ModalContainer>,\n document.body,\n );\n};\n"],"names":["blocking","onAccept","rest","currentConsent","cookieName","cookieDomain","cookiePath","requirement","isOpen","setIsOpen","updateCurrentConsents","useInternalState","instance","modalConfig","useModal","id","useId","role","title","useEffect","show","hide","onHide","on","off","document","navigator","cookieEnabled","functional","marketing","statistics","accept","selection","convertBooleanConsentObjectToConsentObject","selectionWithoutEmptyValues","Object","fromEntries","entries","filter","value","updatedConsent","setConsentCookie","consent","name","domain","path","ReactDOM","createPortal","jsxs","ModalContainer","container","children","jsx","ModalOverlay","overlay","Modal","component","modal","onSubmit","e","preventDefault","formData","FormData","currentTarget","newConsents","get","ModalHeader","ModalTitle","ModalBody","RequirementCheckbox","label","defaultChecked","ModalActions","SecondaryButton","type","onClick","body"],"mappings":"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"}
1
+ {"version":3,"file":"CookieConsent.cjs","sources":["../../../../src/components/cookie-consent/CookieConsent.tsx"],"sourcesContent":["import React, { type FormEventHandler, useEffect, useId } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { SecondaryButton } from \"../button/Button.js\";\nimport {\n Modal,\n ModalActions,\n ModalBody,\n ModalContainer,\n ModalHeader,\n ModalOverlay,\n ModalTitle,\n} from \"../modal/Modal.js\";\nimport { useModal } from \"../modal/useModal.js\";\nimport { useInternalState } from \"./CookieConsentContext.js\";\nimport { RequirementCheckbox } from \"./RequirementCheckbox.js\";\nimport {\n convertBooleanConsentObjectToConsentObject,\n setConsentCookie,\n} from \"./cookieConsentUtils.js\";\nimport type { AcceptConsentCallback, Consent } from \"./types.js\";\n\nexport interface CookieConsentProps {\n blocking?: boolean;\n onAccept?: AcceptConsentCallback;\n}\n\nexport const CookieConsent = ({\n blocking,\n onAccept,\n ...rest\n}: CookieConsentProps): JSX.Element | null => {\n const {\n currentConsent,\n cookieName,\n cookieDomain,\n cookiePath,\n requirement,\n isOpen,\n setIsOpen,\n updateCurrentConsents,\n } = useInternalState();\n\n const [instance, modalConfig] = useModal({\n id: `jkl-cookie-modal-${useId()}`,\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: blocking ? \"alertdialog\" : \"dialog\",\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 (isOpen) {\n instance?.show();\n } else {\n instance?.hide();\n }\n }, [instance, isOpen]);\n\n useEffect(() => {\n const onHide = () => setIsOpen(false);\n instance?.on(\"hide\", onHide);\n return () => {\n instance?.off(\"hide\", onHide);\n };\n }, [instance, setIsOpen]);\n\n if (typeof document === \"undefined\") {\n return null;\n }\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 accept = (\n selection = convertBooleanConsentObjectToConsentObject(\n {\n functional: true,\n statistics: true,\n marketing: true,\n },\n requirement,\n ),\n ) => {\n const selectionWithoutEmptyValues = Object.fromEntries(\n Object.entries(selection).filter(\n ([, value]) => typeof value !== \"undefined\",\n ),\n );\n\n const updatedConsent: Consent = {\n ...currentConsent,\n ...selectionWithoutEmptyValues,\n };\n\n setConsentCookie({\n consent: updatedConsent,\n name: cookieName,\n domain: cookieDomain,\n path: cookiePath,\n });\n\n updateCurrentConsents();\n\n onAccept?.(updatedConsent);\n\n instance?.hide();\n };\n\n const onSubmit: FormEventHandler<HTMLFormElement> = (e) => {\n e.preventDefault();\n\n const formData = new FormData(e.currentTarget);\n\n const newConsents = convertBooleanConsentObjectToConsentObject(\n {\n functional: formData.get(\"functional\") === \"true\",\n statistics: formData.get(\"statistics\") === \"true\",\n marketing: formData.get(\"marketing\") === \"true\",\n },\n requirement,\n );\n\n accept(newConsents);\n };\n\n return ReactDOM.createPortal(\n <ModalContainer\n {...modalConfig.container}\n {...rest}\n data-cookie-consent-open={isOpen}\n >\n <ModalOverlay {...modalConfig.overlay} />\n <Modal component=\"form\" {...modalConfig.modal} {...{ onSubmit }}>\n <ModalHeader>\n <ModalTitle {...modalConfig.title}>\n Velg informasjonskapsler\n </ModalTitle>\n </ModalHeader>\n <ModalBody>\n <p>\n For at nettsidene skal fungere må vi bruke tekniske\n informasjonskaplser. Disse lagres derfor uten samtykke.\n </p>\n {requirement.functional && (\n <RequirementCheckbox\n name=\"functional\"\n label=\"Tillat funksjonelle\"\n defaultChecked={\n currentConsent.functional === \"accepted\"\n }\n key={`functional-${currentConsent.functional}`}\n >\n Funksjonelle informasjonskapsler lagrer opplysninger\n om din bruk av nettsidene og hvilke innstillinger du\n har gjort, slik at du kan få funksjonalitet\n tilpasset deg.\n </RequirementCheckbox>\n )}\n {requirement.statistics && (\n <RequirementCheckbox\n name=\"statistics\"\n label=\"Tillat statistikk\"\n defaultChecked={\n currentConsent.statistics === \"accepted\"\n }\n key={`statistics-${currentConsent.statistics}`}\n >\n Informasjonskapslene lagrer statistikk som hjelper\n oss med å forstå hvordan nettsidene blir brukt, slik\n at vi kan gjøre dem bedre og enklere å bruke.\n </RequirementCheckbox>\n )}\n {requirement.marketing && (\n <RequirementCheckbox\n name=\"marketing\"\n label=\"Tillat personlig markedsføring\"\n defaultChecked={\n currentConsent.marketing === \"accepted\"\n }\n key={`marketing-${currentConsent.marketing}`}\n >\n Dette gjør at vi kan gi deg mer relevant og\n tilpasset markedsføring, også gjennom våre\n samarbeidspartnere, på for eksempel nettsider,\n annonser og i sosiale medier.\n </RequirementCheckbox>\n )}\n </ModalBody>\n <ModalActions>\n <SecondaryButton\n data-testid=\"jkl-cookie-consent-godta-alle\"\n type=\"button\"\n onClick={() => accept()}\n >\n Godta alle\n </SecondaryButton>\n <SecondaryButton\n data-testid=\"jkl-cookie-consent-godta\"\n type=\"submit\"\n >\n Godta mine valg\n </SecondaryButton>\n </ModalActions>\n </Modal>\n </ModalContainer>,\n document.body,\n );\n};\n"],"names":["blocking","onAccept","rest","currentConsent","cookieName","cookieDomain","cookiePath","requirement","isOpen","setIsOpen","updateCurrentConsents","useInternalState","instance","modalConfig","useModal","id","useId","role","title","useEffect","show","hide","onHide","on","off","document","navigator","cookieEnabled","functional","marketing","statistics","accept","selection","convertBooleanConsentObjectToConsentObject","selectionWithoutEmptyValues","Object","fromEntries","entries","filter","value","updatedConsent","setConsentCookie","consent","name","domain","path","ReactDOM","createPortal","jsxs","ModalContainer","container","children","jsx","ModalOverlay","overlay","Modal","component","modal","onSubmit","e","preventDefault","formData","FormData","currentTarget","newConsents","get","ModalHeader","ModalTitle","ModalBody","RequirementCheckbox","label","defaultChecked","ModalActions","SecondaryButton","type","onClick","body"],"mappings":"+YA0B6B,EACzBA,SAAAA,EACAC,SAAAA,KACGC,MAEG,MACFC,eAAAA,EACAC,WAAAA,EACAC,aAAAA,EACAC,WAAAA,EACAC,YAAAA,EACAC,OAAAA,EACAC,UAAAA,EACAC,sBAAAA,GACAC,sBAEGC,EAAUC,GAAeC,WAAS,CACrCC,GAAI,oBAAoBC,EAAAA,UAIxBC,KAAMjB,EAAW,cAAgB,SAGjCkB,MAAO,wBAmBP,GAhBJC,EAAAA,WAAU,KACFX,EACAI,GAAUQ,OAEVR,GAAUS,MAAK,GAEpB,CAACT,EAAUJ,IAEdW,EAAAA,WAAU,KACA,MAAAG,EAAS,IAAMb,GAAU,GACrB,OAAAG,GAAAW,GAAG,OAAQD,GACd,KACOV,GAAAY,IAAI,OAAQF,EAAM,CAChC,GACD,CAACV,EAAUH,WAEHgB,SAAa,IACb,OAAA,KAIX,UAAWC,UAAc,MAAgBA,UAAUC,cAC/C,OAAI1B,GACSA,EAAA,CACL2B,WAAY,SACZC,UAAW,SACXC,WAAY,WAIb,KAGL,MAAAC,EAAS,CACXC,EAAYC,EAAAA,2CACR,CACIL,YAAY,EACZE,YAAY,EACZD,WAAW,GAEftB,MAGJ,MAAM2B,EAA8BC,OAAOC,YACvCD,OAAOE,QAAQL,GAAWM,QACtB,EAAI,CAAAC,YAAkBA,EAAU,OAIlCC,EAA0B,IACzBrC,KACA+B,GAGUO,mBAAA,CACbC,QAASF,EACTG,KAAMvC,EACNwC,OAAQvC,EACRwC,KAAMvC,IAGYI,IAEtBT,IAAWuC,GAEX5B,GAAUS,MAAK,EAoBnB,OAAOyB,EAASC,aACZC,EAAAA,KAACC,EAAAA,eAAA,IACOpC,EAAYqC,aACZhD,EACJ,2BAA0BM,EAE1B2C,SAAA,CAACC,EAAAA,IAAAC,EAAAA,aAAA,IAAiBxC,EAAYyC,UAC9BN,EAAAA,KAACO,EAAMA,MAAA,CAAAC,UAAU,UAAW3C,EAAY4C,MAAaC,SAxBRC,IACjDA,EAAEC,iBAEF,MAAMC,EAAW,IAAIC,SAASH,EAAEI,eAE1BC,EAAc/B,EAAAA,2CAChB,CACIL,WAA2C,SAA/BiC,EAASI,IAAI,cACzBnC,WAA2C,SAA/B+B,EAASI,IAAI,cACzBpC,UAAyC,SAA9BgC,EAASI,IAAI,cAE5B1D,GAGJwB,EAAOiC,EAAW,EAWVb,SAAA,CAAAC,EAAAA,IAACc,eACGf,SAACC,EAAAA,IAAAe,EAAAA,WAAA,IAAetD,EAAYK,MAAOiC,+CAItCiB,EAAAA,UACG,CAAAjB,SAAA,CAAAC,EAAAA,IAAC,KAAED,SAGH,gHACC5C,EAAYqB,YACTwB,EAAAA,IAACiB,EAAAA,oBAAA,CACG1B,KAAK,aACL2B,MAAM,sBACNC,eACkC,aAA9BpE,EAAeyB,WAGtBuB,SAAA,wKADQ,cAAchD,EAAeyB,cAQzCrB,EAAYuB,YACTsB,EAAAA,IAACiB,EAAAA,oBAAA,CACG1B,KAAK,aACL2B,MAAM,oBACNC,eACkC,aAA9BpE,EAAe2B,WAGtBqB,SAAA,yJADQ,cAAchD,EAAe2B,cAOzCvB,EAAYsB,WACTuB,EAAAA,IAACiB,EAAAA,oBAAA,CACG1B,KAAK,YACL2B,MAAM,iCACNC,eACiC,aAA7BpE,EAAe0B,UAGtBsB,SAAA,uKADQ,aAAahD,EAAe0B,uBAS5C2C,EAAAA,aACG,CAAArB,SAAA,CAAAC,EAAAA,IAACqB,EAAAA,gBAAA,CACG,cAAY,gCACZC,KAAK,SACLC,QAAS,IAAM5C,IAClBoB,SAAA,eAGDC,EAAAA,IAACqB,EAAAA,gBAAA,CACG,cAAY,2BACZC,KAAK,SACRvB,SAAA,6BAMb1B,SAASmD,KACb"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("../../../clsx-E3yX_9sL.cjs"),a=require("date-fns"),r=require("react"),n=require("react-dom"),l=require("../icon-button/IconButton.cjs"),o=require("../icon/icons/CalendarIcon.cjs"),u=require("../input-group/InputGroup.cjs"),s=require("../popover/Popover.cjs"),i=require("../text-input/BaseTextInput.cjs"),c=require("./internal/Calendar.cjs"),d=require("./internal/utils.cjs"),p=require("./utils.cjs"),v=require("./validation.cjs"),f=r.forwardRef(((f,b)=>{const{"data-testautoid":k,id:h,className:m="",label:g="Velg dato",labelProps:j,defaultValue:D,defaultShow:y=!1,value:C,disableBeforeDate:x,disableAfterDate:q,yearsToShow:L,name:P,helpLabel:S,errorLabel:w,invalid:I,density:O,days:B,months:T,monthLabel:_,yearLabel:E,placeholder:N="dd.mm.åååå",width:R="11.25rem",onChange:U,onBlur:V,onFocus:F,onKeyDown:K,action:W,showCalendarLabel:A="Åpne kalender",hideCalendarLabel:G="Lukk kalender",supportLabelProps:M,tooltip:H,textInputProps:z,...J}=f;"production"!==process.env.NODE_ENV&&C&&D&&console.warn("DatePicker må enten være controlled eller uncontrolled. Hvis du bruker defaultValue og value sammen vil defaultValue bli ignorert.");const Q=p.parseDateString(x),X=Q?a.startOfDay(Q):void 0,Y=p.parseDateString(q),Z=Y?a.startOfDay(Y):void 0,[$,ee]=r.useState(d.getInitialDate(C,D,X,Z)),[te,ae]=r.useState(null),[re,ne]=r.useState(y),le=r.useRef(null),oe=r.useRef(null),ue=r.useRef(null),se=r.useRef(null),ie=r.useCallback((e=>{se.current=e,b&&("function"==typeof b?b(e):b.current=e)}),[b]),ce=r.useCallback((e=>{F&&oe.current&&(oe.current.contains(e.relatedTarget)||F(e,$,{error:te,value:e.target.value}))}),[F,$,te]),de=r.useCallback((e=>{V&&V(e,$,{error:te,value:e.target.value})}),[V,$,te]),pe=r.useCallback((e=>{"Escape"===e.key&&(ne(!1),e.preventDefault(),e.stopPropagation()),null!=W&&W.onKeyDown&&W.onKeyDown(e)}),[W]),ve=r.useCallback((e=>{let t=null,a=null;if(e.target.value){const r=p.parseDateString(e.target.value);r?X&&!v.isWithinLowerBound(r,X)?a="OUTSIDE_LOWER_BOUND":Z&&!v.isWithinUpperBound(r,Z)?a="OUTSIDE_UPPER_BOUND":ne(!1):a="WRONG_FORMAT",t=r||null}ae(a),ee(t),U&&U(e,t,{error:a,value:e.target.value})}),[U,X,Z]),fe=r.useCallback((e=>{n.flushSync((()=>{ne(!re)}));const t=le.current,a=t&&t.querySelector('[aria-pressed="true"]');window.requestAnimationFrame((()=>null==a?void 0:a.focus())),null!=W&&W.onClick&&W.onClick(e)}),[re,W]),be=r.useCallback((({date:e})=>{if(ne(!1),ee(e),se.current){const t=se.current;t.value=p.formatInput(e);const a=document.createEvent("HTMLEvents");a.initEvent("input",!0,!1),t.dispatchEvent(a),t.focus(),U&&U(a,e,{error:null,value:t.value})}}),[U]),ke=r.useCallback((e=>{var t;e.preventDefault(),ne(!1),null==(t=ue.current)||t.focus()}),[]);return e.jsx(u.InputGroup,{id:h,className:t.clsx("jkl-datepicker",m),...J,ref:oe,label:g,labelProps:j,density:O,helpLabel:S,errorLabel:w,supportLabelProps:M,tooltip:H,render:t=>e.jsx(i.BaseTextInput,{"data-focused":re?"true":void 0,ref:ie,"data-testid":"jkl-datepicker__input","data-testautoid":k,className:"jkl-datepicker__input",name:P,defaultValue:D,density:O,value:C,type:"text",placeholder:N,width:R,onFocus:ce,onBlur:de,onChange:ve,actionButton:e.jsxs(s.Popover,{positionReference:se,open:re,onOpenChange:()=>ne(!re),offset:8,children:[e.jsx(s.Popover.Trigger,{...W,"data-testid":"jkl-datepicker__trigger",className:"jkl-text-input-action-button",title:re?G:A,tabIndex:0,onClick:fe,onKeyDown:pe,asChild:!0,children:e.jsx(l.IconButton,{children:e.jsx(o.CalendarIcon,{})})}),e.jsx(s.Popover.Content,{initialFocus:-1,padding:24,children:e.jsx(c.Calendar,{ref:le,density:O,date:$,minDate:X,maxDate:Z,days:B,months:T,monthLabel:_,yearLabel:E,yearsToShow:L,onDateSelected:be,onTabOutside:ke})})]}),...z,...t,"aria-invalid":I||!!w})})}));f.displayName="DatePicker",exports.DatePicker=f;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("../../../clsx-E3yX_9sL.cjs"),a=require("date-fns"),r=require("react"),n=require("react-dom"),l=require("../icon-button/IconButton.cjs"),o=require("../icon/icons/CalendarIcon.cjs"),u=require("../input-group/InputGroup.cjs"),s=require("../popover/Popover.cjs"),i=require("../text-input/BaseTextInput.cjs"),c=require("./internal/Calendar.cjs"),d=require("./internal/utils.cjs"),p=require("./utils.cjs"),v=require("./validation.cjs"),f=r.forwardRef(((f,b)=>{const{"data-testautoid":k,id:h,className:m="",label:g="Velg dato",labelProps:j,defaultValue:D,defaultShow:y=!1,value:C,disableBeforeDate:x,disableAfterDate:q,yearsToShow:L,name:P,helpLabel:S,errorLabel:w,invalid:I,density:O,days:B,months:T,monthLabel:_,yearLabel:E,placeholder:N="dd.mm.åååå",width:R="11.25rem",onChange:U,onBlur:V,onFocus:F,onKeyDown:K,action:W,showCalendarLabel:A="Åpne kalender",hideCalendarLabel:G="Lukk kalender",supportLabelProps:M,tooltip:H,textInputProps:z,...J}=f;"production"!==process.env.NODE_ENV&&C&&D&&console.warn("DatePicker må enten være controlled eller uncontrolled. Hvis du bruker defaultValue og value sammen vil defaultValue bli ignorert.");const Q=p.parseDateString(x),X=Q?a.startOfDay(Q):void 0,Y=p.parseDateString(q),Z=Y?a.startOfDay(Y):void 0,[$,ee]=r.useState(d.getInitialDate(C,D,X,Z)),[te,ae]=r.useState(null),[re,ne]=r.useState(y),le=r.useRef(null),oe=r.useRef(null),ue=r.useRef(null),se=r.useRef(null),ie=r.useCallback((e=>{se.current=e,b&&("function"==typeof b?b(e):b.current=e)}),[b]),ce=r.useCallback((e=>{F&&oe.current&&(oe.current.contains(e.relatedTarget)||F(e,$,{error:te,value:e.target.value}))}),[F,$,te]),de=r.useCallback((e=>{V&&V(e,$,{error:te,value:e.target.value})}),[V,$,te]),pe=r.useCallback((e=>{"Escape"===e.key&&(ne(!1),e.preventDefault(),e.stopPropagation()),W?.onKeyDown&&W.onKeyDown(e)}),[W]),ve=r.useCallback((e=>{let t=null,a=null;if(e.target.value){const r=p.parseDateString(e.target.value);r?X&&!v.isWithinLowerBound(r,X)?a="OUTSIDE_LOWER_BOUND":Z&&!v.isWithinUpperBound(r,Z)?a="OUTSIDE_UPPER_BOUND":ne(!1):a="WRONG_FORMAT",t=r||null}ae(a),ee(t),U&&U(e,t,{error:a,value:e.target.value})}),[U,X,Z]),fe=r.useCallback((e=>{n.flushSync((()=>{ne(!re)}));const t=le.current,a=t&&t.querySelector('[aria-pressed="true"]');window.requestAnimationFrame((()=>a?.focus())),W?.onClick&&W.onClick(e)}),[re,W]),be=r.useCallback((({date:e})=>{if(ne(!1),ee(e),se.current){const t=se.current;t.value=p.formatInput(e);const a=document.createEvent("HTMLEvents");a.initEvent("input",!0,!1),t.dispatchEvent(a),t.focus(),U&&U(a,e,{error:null,value:t.value})}}),[U]),ke=r.useCallback((e=>{e.preventDefault(),ne(!1),ue.current?.focus()}),[]);return e.jsx(u.InputGroup,{id:h,className:t.clsx("jkl-datepicker",m),...J,ref:oe,label:g,labelProps:j,density:O,helpLabel:S,errorLabel:w,supportLabelProps:M,tooltip:H,render:t=>e.jsx(i.BaseTextInput,{"data-focused":re?"true":void 0,ref:ie,"data-testid":"jkl-datepicker__input","data-testautoid":k,className:"jkl-datepicker__input",name:P,defaultValue:D,density:O,value:C,type:"text",placeholder:N,width:R,onFocus:ce,onBlur:de,onChange:ve,actionButton:e.jsxs(s.Popover,{positionReference:se,open:re,onOpenChange:()=>ne(!re),offset:8,children:[e.jsx(s.Popover.Trigger,{...W,"data-testid":"jkl-datepicker__trigger",className:"jkl-text-input-action-button",title:re?G:A,tabIndex:0,onClick:fe,onKeyDown:pe,asChild:!0,children:e.jsx(l.IconButton,{children:e.jsx(o.CalendarIcon,{})})}),e.jsx(s.Popover.Content,{initialFocus:-1,padding:24,children:e.jsx(c.Calendar,{ref:le,density:O,date:$,minDate:X,maxDate:Z,days:B,months:T,monthLabel:_,yearLabel:E,yearsToShow:L,onDateSelected:be,onTabOutside:ke})})]}),...z,...t,"aria-invalid":I||!!w})})}));f.displayName="DatePicker",exports.DatePicker=f;
2
2
  //# sourceMappingURL=DatePicker.cjs.map