@fremtind/jokul 3.1.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (990) hide show
  1. package/README.md +2 -0
  2. package/build/build-stats.html +1 -1
  3. package/build/cjs/components/autosuggest/Autosuggest.cjs +1 -1
  4. package/build/cjs/components/autosuggest/Autosuggest.cjs.map +1 -1
  5. package/build/cjs/components/autosuggest/BaseAutosuggest.cjs +1 -24
  6. package/build/cjs/components/autosuggest/BaseAutosuggest.cjs.map +1 -1
  7. package/build/cjs/components/autosuggest/ControllerButton.cjs.map +1 -1
  8. package/build/cjs/components/autosuggest/Menu.cjs +1 -1
  9. package/build/cjs/components/autosuggest/Menu.cjs.map +1 -1
  10. package/build/cjs/components/autosuggest/utils.cjs.map +1 -1
  11. package/build/cjs/components/breadcrumb/Breadcrumb.cjs +1 -1
  12. package/build/cjs/components/breadcrumb/Breadcrumb.cjs.map +1 -1
  13. package/build/cjs/components/breadcrumb/BreadcrumbItem.cjs +1 -1
  14. package/build/cjs/components/breadcrumb/BreadcrumbItem.cjs.map +1 -1
  15. package/build/cjs/components/breadcrumb/documentation/BreadcrumbDocs.cjs.map +1 -1
  16. package/build/cjs/components/button/Button.cjs +1 -1
  17. package/build/cjs/components/button/Button.cjs.map +1 -1
  18. package/build/cjs/components/button/documentation/AnchorDocs.cjs.map +1 -1
  19. package/build/cjs/components/button/documentation/ButtonDocs.cjs +1 -1
  20. package/build/cjs/components/button/documentation/ButtonDocs.cjs.map +1 -1
  21. package/build/cjs/components/card/Card.cjs +1 -1
  22. package/build/cjs/components/card/Card.cjs.map +1 -1
  23. package/build/cjs/components/card/CardImage.cjs +1 -1
  24. package/build/cjs/components/card/CardImage.cjs.map +1 -1
  25. package/build/cjs/components/checkbox/Checkbox.cjs +1 -1
  26. package/build/cjs/components/checkbox/Checkbox.cjs.map +1 -1
  27. package/build/cjs/components/checkbox-panel/CheckboxPanel.cjs +1 -1
  28. package/build/cjs/components/checkbox-panel/CheckboxPanel.cjs.map +1 -1
  29. package/build/cjs/components/checkbox-panel/types.d.cts +12 -0
  30. package/build/cjs/components/chip/Chip.cjs +1 -1
  31. package/build/cjs/components/chip/Chip.cjs.map +1 -1
  32. package/build/cjs/components/combobox/Combobox.cjs +1 -1
  33. package/build/cjs/components/combobox/Combobox.cjs.map +1 -1
  34. package/build/cjs/components/cookie-consent/CookieConsent.cjs +1 -1
  35. package/build/cjs/components/cookie-consent/CookieConsent.cjs.map +1 -1
  36. package/build/cjs/components/cookie-consent/CookieConsentContext.cjs +1 -1
  37. package/build/cjs/components/cookie-consent/CookieConsentContext.cjs.map +1 -1
  38. package/build/cjs/components/cookie-consent/cookieConsentUtils.cjs +1 -1
  39. package/build/cjs/components/cookie-consent/cookieConsentUtils.cjs.map +1 -1
  40. package/build/cjs/components/countdown/Countdown.cjs +1 -1
  41. package/build/cjs/components/countdown/Countdown.cjs.map +1 -1
  42. package/build/cjs/components/datepicker/DatePicker.cjs +1 -1
  43. package/build/cjs/components/datepicker/DatePicker.cjs.map +1 -1
  44. package/build/cjs/components/datepicker/internal/Calendar.cjs +1 -1
  45. package/build/cjs/components/datepicker/internal/Calendar.cjs.map +1 -1
  46. package/build/cjs/components/datepicker/internal/calendarReducer.cjs.map +1 -1
  47. package/build/cjs/components/datepicker/internal/useCalendar.cjs +1 -1
  48. package/build/cjs/components/datepicker/internal/useCalendar.cjs.map +1 -1
  49. package/build/cjs/components/datepicker/internal/utils.cjs +1 -1
  50. package/build/cjs/components/datepicker/internal/utils.cjs.map +1 -1
  51. package/build/cjs/components/datepicker/utils.cjs.map +1 -1
  52. package/build/cjs/components/datepicker/validation.cjs.map +1 -1
  53. package/build/cjs/components/description-list/DescriptionList.cjs.map +1 -1
  54. package/build/cjs/components/description-list/index.cjs +1 -1
  55. package/build/cjs/components/description-list/index.d.cts +3 -0
  56. package/build/cjs/components/expander/ExpandablePanel.cjs +1 -1
  57. package/build/cjs/components/expander/ExpandablePanel.cjs.map +1 -1
  58. package/build/cjs/components/expander/ExpandablePanelContent.cjs +1 -1
  59. package/build/cjs/components/expander/ExpandablePanelContent.cjs.map +1 -1
  60. package/build/cjs/components/expander/Expander.cjs +1 -1
  61. package/build/cjs/components/expander/Expander.cjs.map +1 -1
  62. package/build/cjs/components/feedback/Feedback.cjs.map +1 -1
  63. package/build/cjs/components/feedback/feedbackContext.cjs.map +1 -1
  64. package/build/cjs/components/feedback/followup/Followup.cjs +1 -1
  65. package/build/cjs/components/feedback/followup/Followup.cjs.map +1 -1
  66. package/build/cjs/components/feedback/followup/followupContext.cjs.map +1 -1
  67. package/build/cjs/components/feedback/followup/useFollowup.cjs +1 -1
  68. package/build/cjs/components/feedback/followup/useFollowup.cjs.map +1 -1
  69. package/build/cjs/components/feedback/main-question/MainQuestion.cjs +1 -1
  70. package/build/cjs/components/feedback/main-question/MainQuestion.cjs.map +1 -1
  71. package/build/cjs/components/feedback/main-question/mainQuestionContext.cjs.map +1 -1
  72. package/build/cjs/components/feedback/main-question/useMainQuestion.cjs +1 -1
  73. package/build/cjs/components/feedback/main-question/useMainQuestion.cjs.map +1 -1
  74. package/build/cjs/components/feedback/presets.cjs.map +1 -1
  75. package/build/cjs/components/feedback/questions/AddonQuestion.cjs +1 -1
  76. package/build/cjs/components/feedback/questions/AddonQuestion.cjs.map +1 -1
  77. package/build/cjs/components/feedback/questions/CheckboxQuestion.cjs +1 -1
  78. package/build/cjs/components/feedback/questions/CheckboxQuestion.cjs.map +1 -1
  79. package/build/cjs/components/feedback/questions/ContactQuestion.cjs +1 -1
  80. package/build/cjs/components/feedback/questions/ContactQuestion.cjs.map +1 -1
  81. package/build/cjs/components/feedback/questions/RadioQuestion.cjs +1 -1
  82. package/build/cjs/components/feedback/questions/RadioQuestion.cjs.map +1 -1
  83. package/build/cjs/components/feedback/questions/SmileyQuestion.cjs +1 -1
  84. package/build/cjs/components/feedback/questions/SmileyQuestion.cjs.map +1 -1
  85. package/build/cjs/components/feedback/questions/TextQuestion.cjs +1 -1
  86. package/build/cjs/components/feedback/questions/TextQuestion.cjs.map +1 -1
  87. package/build/cjs/components/feedback/questions/smileyUtils.cjs.map +1 -1
  88. package/build/cjs/components/feedback/utils.cjs +1 -1
  89. package/build/cjs/components/feedback/utils.cjs.map +1 -1
  90. package/build/cjs/components/file/File.cjs.map +1 -1
  91. package/build/cjs/components/file-input/FileInput.cjs +1 -1
  92. package/build/cjs/components/file-input/FileInput.cjs.map +1 -1
  93. package/build/cjs/components/file-input/internal/Dropzone.cjs +1 -1
  94. package/build/cjs/components/file-input/internal/Dropzone.cjs.map +1 -1
  95. package/build/cjs/components/file-input/internal/Input.cjs +1 -1
  96. package/build/cjs/components/file-input/internal/Input.cjs.map +1 -1
  97. package/build/cjs/components/file-input/internal/MaxSize.cjs.map +1 -1
  98. package/build/cjs/components/file-input/internal/fileInputContext.cjs.map +1 -1
  99. package/build/cjs/components/file-input/internal/validateFileInputFiles.cjs +1 -1
  100. package/build/cjs/components/file-input/internal/validateFileInputFiles.cjs.map +1 -1
  101. package/build/cjs/components/file-input/utils.cjs +1 -1
  102. package/build/cjs/components/file-input/utils.cjs.map +1 -1
  103. package/build/cjs/components/flex/Flex.cjs +1 -1
  104. package/build/cjs/components/flex/Flex.cjs.map +1 -1
  105. package/build/cjs/components/help/Help.cjs.map +1 -1
  106. package/build/cjs/components/icon/Icon.cjs +1 -1
  107. package/build/cjs/components/icon/Icon.cjs.map +1 -1
  108. package/build/cjs/components/icon/icons/ArrowDownIcon.cjs.map +1 -1
  109. package/build/cjs/components/icon/icons/ArrowLeftIcon.cjs.map +1 -1
  110. package/build/cjs/components/icon/icons/ArrowNorthEastIcon.cjs.map +1 -1
  111. package/build/cjs/components/icon/icons/ArrowRightIcon.cjs.map +1 -1
  112. package/build/cjs/components/icon/icons/ArrowUpIcon.cjs.map +1 -1
  113. package/build/cjs/components/icon/icons/CalendarIcon.cjs.map +1 -1
  114. package/build/cjs/components/icon/icons/CheckIcon.cjs.map +1 -1
  115. package/build/cjs/components/icon/icons/ChevronDownIcon.cjs.map +1 -1
  116. package/build/cjs/components/icon/icons/ChevronLeftIcon.cjs.map +1 -1
  117. package/build/cjs/components/icon/icons/ChevronRightIcon.cjs.map +1 -1
  118. package/build/cjs/components/icon/icons/ChevronUpIcon.cjs.map +1 -1
  119. package/build/cjs/components/icon/icons/CloseIcon.cjs.map +1 -1
  120. package/build/cjs/components/icon/icons/CopyIcon.cjs.map +1 -1
  121. package/build/cjs/components/icon/icons/DotsIcon.cjs.map +1 -1
  122. package/build/cjs/components/icon/icons/DragIcon.cjs.map +1 -1
  123. package/build/cjs/components/icon/icons/ErrorIcon.cjs.map +1 -1
  124. package/build/cjs/components/icon/icons/GreenCheckIcon.cjs.map +1 -1
  125. package/build/cjs/components/icon/icons/HamburgerIcon.cjs.map +1 -1
  126. package/build/cjs/components/icon/icons/InfoIcon.cjs.map +1 -1
  127. package/build/cjs/components/icon/icons/LinkIcon.cjs.map +1 -1
  128. package/build/cjs/components/icon/icons/MinusIcon.cjs.map +1 -1
  129. package/build/cjs/components/icon/icons/OpenInNewIcon.cjs.map +1 -1
  130. package/build/cjs/components/icon/icons/PenIcon.cjs.map +1 -1
  131. package/build/cjs/components/icon/icons/PlusIcon.cjs.map +1 -1
  132. package/build/cjs/components/icon/icons/QuestionIcon.cjs.map +1 -1
  133. package/build/cjs/components/icon/icons/RedCrossIcon.cjs.map +1 -1
  134. package/build/cjs/components/icon/icons/SearchIcon.cjs.map +1 -1
  135. package/build/cjs/components/icon/icons/SuccessIcon.cjs.map +1 -1
  136. package/build/cjs/components/icon/icons/ThumbDownIcon.cjs.map +1 -1
  137. package/build/cjs/components/icon/icons/ThumbUpIcon.cjs.map +1 -1
  138. package/build/cjs/components/icon/icons/TrashCanIcon.cjs.map +1 -1
  139. package/build/cjs/components/icon/icons/WarningIcon.cjs.map +1 -1
  140. package/build/cjs/components/icon-button/IconButton.cjs +1 -1
  141. package/build/cjs/components/icon-button/IconButton.cjs.map +1 -1
  142. package/build/cjs/components/image/Image.cjs +1 -1
  143. package/build/cjs/components/image/Image.cjs.map +1 -1
  144. package/build/cjs/components/image/useImageLoadingStatus.cjs +1 -1
  145. package/build/cjs/components/image/useImageLoadingStatus.cjs.map +1 -1
  146. package/build/cjs/components/input-group/FieldGroup.cjs.map +1 -1
  147. package/build/cjs/components/input-group/InputGroup.cjs +1 -1
  148. package/build/cjs/components/input-group/InputGroup.cjs.map +1 -1
  149. package/build/cjs/components/input-group/Label.cjs.map +1 -1
  150. package/build/cjs/components/input-group/SupportLabel.cjs.map +1 -1
  151. package/build/cjs/components/link/Link.cjs +1 -1
  152. package/build/cjs/components/link/Link.cjs.map +1 -1
  153. package/build/cjs/components/link-list/LinkList.cjs +1 -1
  154. package/build/cjs/components/link-list/LinkList.cjs.map +1 -1
  155. package/build/cjs/components/link-list/LinkListItem.cjs +2 -0
  156. package/build/cjs/components/link-list/LinkListItem.cjs.map +1 -0
  157. package/build/cjs/components/link-list/LinkListItem.d.cts +3 -0
  158. package/build/cjs/components/link-list/index.cjs +1 -1
  159. package/build/cjs/components/link-list/index.d.cts +2 -0
  160. package/build/cjs/components/list/List.cjs.map +1 -1
  161. package/build/cjs/components/list/ListItem.cjs.map +1 -1
  162. package/build/cjs/components/loader/Loader.cjs.map +1 -1
  163. package/build/cjs/components/loader/skeletons/SkeletonAnimation.cjs.map +1 -1
  164. package/build/cjs/components/loader/skeletons/SkeletonCheckboxGroup.cjs +1 -1
  165. package/build/cjs/components/loader/skeletons/SkeletonCheckboxGroup.cjs.map +1 -1
  166. package/build/cjs/components/loader/skeletons/SkeletonInput.cjs.map +1 -1
  167. package/build/cjs/components/loader/skeletons/SkeletonLabel.cjs.map +1 -1
  168. package/build/cjs/components/loader/skeletons/SkeletonRadioButtonGroup.cjs +1 -1
  169. package/build/cjs/components/loader/skeletons/SkeletonRadioButtonGroup.cjs.map +1 -1
  170. package/build/cjs/components/loader/skeletons/SkeletonTextArea.cjs.map +1 -1
  171. package/build/cjs/components/loader/useDelayedRender.cjs +1 -1
  172. package/build/cjs/components/loader/useDelayedRender.cjs.map +1 -1
  173. package/build/cjs/components/logo/Logo.cjs.map +1 -1
  174. package/build/cjs/components/logo/LogoStamp.cjs.map +1 -1
  175. package/build/cjs/components/logo/useTextSpinner.cjs +1 -1
  176. package/build/cjs/components/logo/useTextSpinner.cjs.map +1 -1
  177. package/build/cjs/components/menu/Menu.cjs +1 -1
  178. package/build/cjs/components/menu/Menu.cjs.map +1 -1
  179. package/build/cjs/components/menu/MenuDivider.cjs.map +1 -1
  180. package/build/cjs/components/menu/MenuItem.cjs +1 -1
  181. package/build/cjs/components/menu/MenuItem.cjs.map +1 -1
  182. package/build/cjs/components/menu/MenuItemCheckbox.cjs +1 -1
  183. package/build/cjs/components/menu/MenuItemCheckbox.cjs.map +1 -1
  184. package/build/cjs/components/menu/useMenuWideEvents.cjs +1 -1
  185. package/build/cjs/components/menu/useMenuWideEvents.cjs.map +1 -1
  186. package/build/cjs/components/message/DismissButton.cjs +1 -1
  187. package/build/cjs/components/message/DismissButton.cjs.map +1 -1
  188. package/build/cjs/components/message/FormErrorMessage.cjs +1 -1
  189. package/build/cjs/components/message/FormErrorMessage.cjs.map +1 -1
  190. package/build/cjs/components/message/Message.cjs +1 -1
  191. package/build/cjs/components/message/Message.cjs.map +1 -1
  192. package/build/cjs/components/modal/Modal.cjs +1 -1
  193. package/build/cjs/components/modal/Modal.cjs.map +1 -1
  194. package/build/cjs/components/modal/useModal.cjs.map +1 -1
  195. package/build/cjs/components/nav-link/NavLink.cjs +1 -1
  196. package/build/cjs/components/nav-link/NavLink.cjs.map +1 -1
  197. package/build/cjs/components/nav-link/index.cjs +1 -1
  198. package/build/cjs/components/nav-link/index.d.cts +2 -0
  199. package/build/cjs/components/pagination/PageButton.cjs.map +1 -1
  200. package/build/cjs/components/pagination/Pagination.cjs +1 -1
  201. package/build/cjs/components/pagination/Pagination.cjs.map +1 -1
  202. package/build/cjs/components/popover/Popover.cjs +1 -1
  203. package/build/cjs/components/popover/Popover.cjs.map +1 -1
  204. package/build/cjs/components/progress-bar/ProgressBar.cjs.map +1 -1
  205. package/build/cjs/components/radio-button/BaseRadioButton.cjs +1 -1
  206. package/build/cjs/components/radio-button/BaseRadioButton.cjs.map +1 -1
  207. package/build/cjs/components/radio-button/RadioButton.cjs +1 -1
  208. package/build/cjs/components/radio-button/RadioButton.cjs.map +1 -1
  209. package/build/cjs/components/radio-button/RadioButtonGroup.cjs.map +1 -1
  210. package/build/cjs/components/radio-panel/RadioPanel.cjs +1 -1
  211. package/build/cjs/components/radio-panel/RadioPanel.cjs.map +1 -1
  212. package/build/cjs/components/radio-panel/RadioPanelGroup.cjs.map +1 -1
  213. package/build/cjs/components/radio-panel/radioPanelContext.cjs.map +1 -1
  214. package/build/cjs/components/radio-panel/types.d.cts +12 -0
  215. package/build/cjs/components/segmented-control/SegmentedControlButton.cjs.map +1 -1
  216. package/build/cjs/components/select/NativeSelect.cjs +1 -1
  217. package/build/cjs/components/select/NativeSelect.cjs.map +1 -1
  218. package/build/cjs/components/select/Select.cjs +1 -1
  219. package/build/cjs/components/select/Select.cjs.map +1 -1
  220. package/build/cjs/components/select/select-utils.cjs.map +1 -1
  221. package/build/cjs/components/summary-table/SummaryTable.cjs +1 -1
  222. package/build/cjs/components/summary-table/SummaryTable.cjs.map +1 -1
  223. package/build/cjs/components/summary-table/SummaryTableRow.cjs.map +1 -1
  224. package/build/cjs/components/summary-table/mocks.cjs.map +1 -1
  225. package/build/cjs/components/system-message/SystemMessage.cjs.map +1 -1
  226. package/build/cjs/components/system-message/common/DismissButton.cjs +1 -1
  227. package/build/cjs/components/system-message/common/DismissButton.cjs.map +1 -1
  228. package/build/cjs/components/system-message/common/MessageIcon.cjs.map +1 -1
  229. package/build/cjs/components/table/DataTable.cjs +1 -1
  230. package/build/cjs/components/table/DataTable.cjs.map +1 -1
  231. package/build/cjs/components/table/ExpandableTableRow.cjs +1 -1
  232. package/build/cjs/components/table/ExpandableTableRow.cjs.map +1 -1
  233. package/build/cjs/components/table/ExpandableTableRowController.cjs +1 -1
  234. package/build/cjs/components/table/ExpandableTableRowController.cjs.map +1 -1
  235. package/build/cjs/components/table/Table.cjs +1 -1
  236. package/build/cjs/components/table/Table.cjs.map +1 -1
  237. package/build/cjs/components/table/TableBody.cjs +1 -1
  238. package/build/cjs/components/table/TableBody.cjs.map +1 -1
  239. package/build/cjs/components/table/TableCaption.cjs +1 -1
  240. package/build/cjs/components/table/TableCaption.cjs.map +1 -1
  241. package/build/cjs/components/table/TableCell.cjs +1 -1
  242. package/build/cjs/components/table/TableCell.cjs.map +1 -1
  243. package/build/cjs/components/table/TableColumn.cjs +1 -1
  244. package/build/cjs/components/table/TableColumn.cjs.map +1 -1
  245. package/build/cjs/components/table/TableColumnGroup.cjs +1 -1
  246. package/build/cjs/components/table/TableColumnGroup.cjs.map +1 -1
  247. package/build/cjs/components/table/TableFooter.cjs +1 -1
  248. package/build/cjs/components/table/TableFooter.cjs.map +1 -1
  249. package/build/cjs/components/table/TableHead.cjs +1 -1
  250. package/build/cjs/components/table/TableHead.cjs.map +1 -1
  251. package/build/cjs/components/table/TableHeader.cjs +1 -1
  252. package/build/cjs/components/table/TableHeader.cjs.map +1 -1
  253. package/build/cjs/components/table/TablePagination.cjs +1 -1
  254. package/build/cjs/components/table/TablePagination.cjs.map +1 -1
  255. package/build/cjs/components/table/TableRow.cjs +1 -1
  256. package/build/cjs/components/table/TableRow.cjs.map +1 -1
  257. package/build/cjs/components/table/tableSectionContext.cjs.map +1 -1
  258. package/build/cjs/components/table/utils.cjs.map +1 -1
  259. package/build/cjs/components/table-of-contents/index.cjs +2 -0
  260. package/build/cjs/components/table-of-contents/index.cjs.map +1 -0
  261. package/build/cjs/components/table-of-contents/index.d.cts +2 -0
  262. package/build/cjs/components/tabs/NavTab.cjs +1 -1
  263. package/build/cjs/components/tabs/NavTab.cjs.map +1 -1
  264. package/build/cjs/components/tabs/NavTabs.cjs +1 -1
  265. package/build/cjs/components/tabs/NavTabs.cjs.map +1 -1
  266. package/build/cjs/components/tabs/Tab.cjs +1 -1
  267. package/build/cjs/components/tabs/Tab.cjs.map +1 -1
  268. package/build/cjs/components/tabs/TabList.cjs +1 -1
  269. package/build/cjs/components/tabs/TabList.cjs.map +1 -1
  270. package/build/cjs/components/tabs/TabPanel.cjs.map +1 -1
  271. package/build/cjs/components/tabs/Tabs.cjs +1 -1
  272. package/build/cjs/components/tabs/Tabs.cjs.map +1 -1
  273. package/build/cjs/components/tabs/tabsContext.cjs.map +1 -1
  274. package/build/cjs/components/tag/Tag.cjs.map +1 -1
  275. package/build/cjs/components/text-area/BaseTextArea.cjs +1 -1
  276. package/build/cjs/components/text-area/BaseTextArea.cjs.map +1 -1
  277. package/build/cjs/components/text-area/TextArea.cjs +1 -1
  278. package/build/cjs/components/text-area/TextArea.cjs.map +1 -1
  279. package/build/cjs/components/text-input/BaseTextInput.cjs +1 -1
  280. package/build/cjs/components/text-input/BaseTextInput.cjs.map +1 -1
  281. package/build/cjs/components/text-input/TextInput.cjs +1 -1
  282. package/build/cjs/components/text-input/TextInput.cjs.map +1 -1
  283. package/build/cjs/components/toast/Toast.cjs +1 -1
  284. package/build/cjs/components/toast/Toast.cjs.map +1 -1
  285. package/build/cjs/components/toast/ToastRegion.cjs +1 -1
  286. package/build/cjs/components/toast/ToastRegion.cjs.map +1 -1
  287. package/build/cjs/components/toast/toastContext.cjs.map +1 -1
  288. package/build/cjs/components/toggle-switch/ToggleSlider.cjs +1 -1
  289. package/build/cjs/components/toggle-switch/ToggleSlider.cjs.map +1 -1
  290. package/build/cjs/components/toggle-switch/ToggleSwitch.cjs +1 -1
  291. package/build/cjs/components/toggle-switch/ToggleSwitch.cjs.map +1 -1
  292. package/build/cjs/components/toggle-switch/usePillStyles.cjs +1 -1
  293. package/build/cjs/components/toggle-switch/usePillStyles.cjs.map +1 -1
  294. package/build/cjs/components/tooltip/PopupTip.cjs.map +1 -1
  295. package/build/cjs/components/tooltip/Tooltip.cjs.map +1 -1
  296. package/build/cjs/components/tooltip/TooltipContent.cjs +1 -1
  297. package/build/cjs/components/tooltip/TooltipContent.cjs.map +1 -1
  298. package/build/cjs/components/tooltip/TooltipTrigger.cjs +1 -1
  299. package/build/cjs/components/tooltip/TooltipTrigger.cjs.map +1 -1
  300. package/build/cjs/components-beta/description-list/DescriptionList.cjs +2 -0
  301. package/build/cjs/components-beta/description-list/DescriptionList.cjs.map +1 -0
  302. package/build/cjs/components-beta/description-list/DescriptionList.d.cts +6 -0
  303. package/build/cjs/components-beta/description-list/DescriptionListItem.cjs +2 -0
  304. package/build/cjs/components-beta/description-list/DescriptionListItem.cjs.map +1 -0
  305. package/build/cjs/components-beta/description-list/DescriptionListItem.d.cts +3 -0
  306. package/build/cjs/components-beta/description-list/index.cjs +2 -0
  307. package/build/cjs/components-beta/description-list/index.cjs.map +1 -0
  308. package/build/cjs/components-beta/description-list/index.d.cts +3 -0
  309. package/build/cjs/components-beta/description-list/types.cjs +2 -0
  310. package/build/cjs/components-beta/description-list/types.cjs.map +1 -0
  311. package/build/cjs/components-beta/description-list/types.d.cts +18 -0
  312. package/build/cjs/components-beta/link-list/LinkList.cjs +2 -0
  313. package/build/cjs/components-beta/link-list/LinkList.cjs.map +1 -0
  314. package/build/cjs/components-beta/link-list/LinkList.d.cts +6 -0
  315. package/build/cjs/components-beta/link-list/LinkListLink.cjs +2 -0
  316. package/build/cjs/components-beta/link-list/LinkListLink.cjs.map +1 -0
  317. package/build/cjs/components-beta/link-list/LinkListLink.d.cts +3 -0
  318. package/build/cjs/components-beta/link-list/index.cjs +2 -0
  319. package/build/cjs/components-beta/link-list/index.cjs.map +1 -0
  320. package/build/cjs/components-beta/link-list/index.d.cts +3 -0
  321. package/build/cjs/components-beta/link-list/types.cjs +2 -0
  322. package/build/cjs/components-beta/link-list/types.cjs.map +1 -0
  323. package/build/cjs/components-beta/link-list/types.d.cts +7 -0
  324. package/build/cjs/components-beta/nav-link/NavLink.cjs +2 -0
  325. package/build/cjs/components-beta/nav-link/NavLink.cjs.map +1 -0
  326. package/build/cjs/components-beta/nav-link/NavLink.d.cts +5 -0
  327. package/build/cjs/components-beta/nav-link/index.cjs +2 -0
  328. package/build/cjs/components-beta/nav-link/index.cjs.map +1 -0
  329. package/build/cjs/components-beta/nav-link/index.d.cts +1 -0
  330. package/build/cjs/components-beta/nav-link/types.cjs +2 -0
  331. package/build/cjs/components-beta/nav-link/types.cjs.map +1 -0
  332. package/build/cjs/components-beta/nav-link/types.d.cts +6 -0
  333. package/build/cjs/components-beta/search/Search.cjs +2 -0
  334. package/build/cjs/components-beta/search/Search.cjs.map +1 -0
  335. package/build/cjs/components-beta/search/Search.d.cts +6 -0
  336. package/build/cjs/components-beta/search/SearchButton.cjs +2 -0
  337. package/build/cjs/components-beta/search/SearchButton.cjs.map +1 -0
  338. package/build/cjs/components-beta/search/SearchButton.d.cts +2 -0
  339. package/build/cjs/components-beta/search/index.cjs +2 -0
  340. package/build/cjs/components-beta/search/index.cjs.map +1 -0
  341. package/build/cjs/components-beta/search/index.d.cts +2 -0
  342. package/build/cjs/components-beta/search/types.cjs +2 -0
  343. package/build/cjs/components-beta/search/types.cjs.map +1 -0
  344. package/build/cjs/components-beta/search/types.d.cts +21 -0
  345. package/build/cjs/components-beta/select/Select.cjs +1 -1
  346. package/build/cjs/components-beta/select/Select.cjs.map +1 -1
  347. package/build/cjs/components-beta/table-of-contents/TableOfContents.cjs +2 -0
  348. package/build/cjs/components-beta/table-of-contents/TableOfContents.cjs.map +1 -0
  349. package/build/cjs/components-beta/table-of-contents/TableOfContents.d.cts +6 -0
  350. package/build/cjs/components-beta/table-of-contents/TableOfContentsLink.cjs +2 -0
  351. package/build/cjs/components-beta/table-of-contents/TableOfContentsLink.cjs.map +1 -0
  352. package/build/cjs/components-beta/table-of-contents/TableOfContentsLink.d.cts +3 -0
  353. package/build/cjs/components-beta/table-of-contents/index.cjs +2 -0
  354. package/build/cjs/components-beta/table-of-contents/index.cjs.map +1 -0
  355. package/build/cjs/components-beta/table-of-contents/index.d.cts +3 -0
  356. package/build/cjs/components-beta/table-of-contents/types.cjs +2 -0
  357. package/build/cjs/components-beta/table-of-contents/types.cjs.map +1 -0
  358. package/build/cjs/components-beta/table-of-contents/types.d.cts +6 -0
  359. package/build/cjs/core/tokens/style-dictionary/config.cjs +1 -1
  360. package/build/cjs/core/tokens/style-dictionary/config.cjs.map +1 -1
  361. package/build/cjs/core/tokens/style-dictionary/formats/css-dynamic-color-variables.cjs +1 -1
  362. package/build/cjs/core/tokens/style-dictionary/formats/css-dynamic-color-variables.cjs.map +1 -1
  363. package/build/cjs/core/tokens/style-dictionary/formats/javascript-esm.cjs +1 -1
  364. package/build/cjs/core/tokens/style-dictionary/formats/javascript-esm.cjs.map +1 -1
  365. package/build/cjs/core/tokens/style-dictionary/formats/scss-theme-variables.cjs +1 -1
  366. package/build/cjs/core/tokens/style-dictionary/formats/scss-theme-variables.cjs.map +1 -1
  367. package/build/cjs/core/tokens/style-dictionary/formats/tailwindcss-colors.cjs +1 -1
  368. package/build/cjs/core/tokens/style-dictionary/formats/tailwindcss-colors.cjs.map +1 -1
  369. package/build/cjs/core/tokens/style-dictionary/transforms/strip-light-dark.cjs +1 -1
  370. package/build/cjs/core/tokens/style-dictionary/transforms/strip-light-dark.cjs.map +1 -1
  371. package/build/cjs/hooks/mediaQueryUtils.cjs.map +1 -1
  372. package/build/cjs/hooks/stories/content.cjs.map +1 -1
  373. package/build/cjs/hooks/useAnimatedDetails/useAnimatedDetails.cjs +1 -1
  374. package/build/cjs/hooks/useAnimatedDetails/useAnimatedDetails.cjs.map +1 -1
  375. package/build/cjs/hooks/useAnimatedHeight/useAnimatedHeight.cjs +1 -1
  376. package/build/cjs/hooks/useAnimatedHeight/useAnimatedHeight.cjs.map +1 -1
  377. package/build/cjs/hooks/useAnimatedHeight/useAnimatedHeightBetween.cjs +1 -1
  378. package/build/cjs/hooks/useAnimatedHeight/useAnimatedHeightBetween.cjs.map +1 -1
  379. package/build/cjs/hooks/useAnimatedHeight/useAutoAnimateHeight.cjs +1 -1
  380. package/build/cjs/hooks/useAnimatedHeight/useAutoAnimateHeight.cjs.map +1 -1
  381. package/build/cjs/hooks/useAriaLiveRegion/useAriaLiveRegion.cjs +1 -1
  382. package/build/cjs/hooks/useAriaLiveRegion/useAriaLiveRegion.cjs.map +1 -1
  383. package/build/cjs/hooks/useBrowserPreferences/useBrowserPreferences.cjs +1 -1
  384. package/build/cjs/hooks/useBrowserPreferences/useBrowserPreferences.cjs.map +1 -1
  385. package/build/cjs/hooks/useClickOutside/useClickOutside.cjs +1 -1
  386. package/build/cjs/hooks/useClickOutside/useClickOutside.cjs.map +1 -1
  387. package/build/cjs/hooks/useElementDimensions/useElementDimensions.cjs +1 -1
  388. package/build/cjs/hooks/useElementDimensions/useElementDimensions.cjs.map +1 -1
  389. package/build/cjs/hooks/useFocusOutside/useFocusOutside.cjs +1 -1
  390. package/build/cjs/hooks/useFocusOutside/useFocusOutside.cjs.map +1 -1
  391. package/build/cjs/hooks/useId/useId.cjs.map +1 -1
  392. package/build/cjs/hooks/useIntersectionObserver/useIntersectionObserver.cjs +1 -1
  393. package/build/cjs/hooks/useIntersectionObserver/useIntersectionObserver.cjs.map +1 -1
  394. package/build/cjs/hooks/useIntersectionObserver/useIntersectionObserver.d.cts +1 -1
  395. package/build/cjs/hooks/useKeyListener/useKeyListener.cjs +1 -1
  396. package/build/cjs/hooks/useKeyListener/useKeyListener.cjs.map +1 -1
  397. package/build/cjs/hooks/useListNavigation/useListNavigation.cjs +1 -1
  398. package/build/cjs/hooks/useListNavigation/useListNavigation.cjs.map +1 -1
  399. package/build/cjs/hooks/useLocalStorage/useLocalStorage.cjs +1 -1
  400. package/build/cjs/hooks/useLocalStorage/useLocalStorage.cjs.map +1 -1
  401. package/build/cjs/hooks/useMutationObserver/useMutationObserver.cjs +1 -1
  402. package/build/cjs/hooks/useMutationObserver/useMutationObserver.cjs.map +1 -1
  403. package/build/cjs/hooks/usePreviousValue/usePreviousValue.cjs +1 -1
  404. package/build/cjs/hooks/usePreviousValue/usePreviousValue.cjs.map +1 -1
  405. package/build/cjs/hooks/useProgressiveImg/useProgressiveImg.cjs +1 -1
  406. package/build/cjs/hooks/useProgressiveImg/useProgressiveImg.cjs.map +1 -1
  407. package/build/cjs/hooks/useScreen/state.cjs.map +1 -1
  408. package/build/cjs/hooks/useScreen/useScreen.cjs +1 -1
  409. package/build/cjs/hooks/useScreen/useScreen.cjs.map +1 -1
  410. package/build/cjs/hooks/useScrollIntoView/useScrollIntoView.cjs +1 -1
  411. package/build/cjs/hooks/useScrollIntoView/useScrollIntoView.cjs.map +1 -1
  412. package/build/cjs/hooks/useSwipeGesture/useSwipeGesture.cjs +1 -1
  413. package/build/cjs/hooks/useSwipeGesture/useSwipeGesture.cjs.map +1 -1
  414. package/build/cjs/index.cjs +1 -1
  415. package/build/cjs/shared/input-panel/BasePanel.cjs +1 -1
  416. package/build/cjs/shared/input-panel/BasePanel.cjs.map +1 -1
  417. package/build/cjs/shared/input-panel/BasePanel.d.cts +14 -2
  418. package/build/cjs/tailwind/plugins/jokulTypographyPlugin.cjs +1 -1
  419. package/build/cjs/tailwind/plugins/jokulTypographyPlugin.cjs.map +1 -1
  420. package/build/cjs/tailwind/tailwindPreset.cjs.map +1 -1
  421. package/build/cjs/utilities/formatters/avstand/formatAvstand.cjs.map +1 -1
  422. package/build/cjs/utilities/formatters/bytes/formatBytes.cjs.map +1 -1
  423. package/build/cjs/utilities/formatters/date/formatDate.cjs.map +1 -1
  424. package/build/cjs/utilities/formatters/fodselsnummer/formatFodselsnummer.cjs.map +1 -1
  425. package/build/cjs/utilities/formatters/kontonummer/formatKontonummer.cjs.map +1 -1
  426. package/build/cjs/utilities/formatters/kortnummer/formatKortnummer.cjs.map +1 -1
  427. package/build/cjs/utilities/formatters/organisasjonsnummer/formatOrganisasjonsnummer.cjs.map +1 -1
  428. package/build/cjs/utilities/formatters/telefonnummer/formatTelefonnummer.cjs.map +1 -1
  429. package/build/cjs/utilities/formatters/util/formatNumber.cjs.map +1 -1
  430. package/build/cjs/utilities/formatters/util/parseNumber.cjs +1 -1
  431. package/build/cjs/utilities/formatters/util/parseNumber.cjs.map +1 -1
  432. package/build/cjs/utilities/formatters/util/registerWithMask.cjs.map +1 -1
  433. package/build/cjs/utilities/formatters/valuta/formatValuta.cjs.map +1 -1
  434. package/build/cjs/utilities/getThemeAndDensity.cjs.map +1 -1
  435. package/build/cjs/utilities/index.cjs +1 -1
  436. package/build/cjs/utilities/index.d.cts +2 -1
  437. package/build/cjs/utilities/mergeRefs.cjs +2 -0
  438. package/build/cjs/utilities/mergeRefs.cjs.map +1 -0
  439. package/build/cjs/utilities/mergeRefs.d.cts +22 -0
  440. package/build/cjs/utilities/polymorphism/SlotComponent.cjs +1 -1
  441. package/build/cjs/utilities/polymorphism/SlotComponent.cjs.map +1 -1
  442. package/build/cjs/utilities/polymorphism/index.cjs +1 -1
  443. package/build/cjs/utilities/polymorphism/index.d.cts +0 -1
  444. package/build/cjs/utilities/polymorphism/mergeProps.cjs.map +1 -1
  445. package/build/cjs/utilities/tabListener.cjs +1 -1
  446. package/build/cjs/utilities/tabListener.cjs.map +1 -1
  447. package/build/cjs/utilities/validators/hasMinimumWords/hasMinimumWords.cjs +1 -1
  448. package/build/cjs/utilities/validators/hasMinimumWords/hasMinimumWords.cjs.map +1 -1
  449. package/build/cjs/utilities/validators/isExactLength/isExactLength.cjs.map +1 -1
  450. package/build/cjs/utilities/validators/isValidFodselsnummer/isValidFodselsnummer.cjs +1 -1
  451. package/build/cjs/utilities/validators/isValidFodselsnummer/isValidFodselsnummer.cjs.map +1 -1
  452. package/build/cjs/utilities/validators/isValidKortnummer/isValidKortnummer.cjs +1 -1
  453. package/build/cjs/utilities/validators/isValidKortnummer/isValidKortnummer.cjs.map +1 -1
  454. package/build/cjs/utilities/validators/isValidOrganisasjonsnummer/isValidOrganisasjonsnummer.cjs +1 -1
  455. package/build/cjs/utilities/validators/isValidOrganisasjonsnummer/isValidOrganisasjonsnummer.cjs.map +1 -1
  456. package/build/cjs/utilities/valuePair.cjs.map +1 -1
  457. package/build/clsx-BeLtu-UY.js.map +1 -1
  458. package/build/clsx-E3yX_9sL.cjs.map +1 -1
  459. package/build/es/components/autosuggest/Autosuggest.js +1 -1
  460. package/build/es/components/autosuggest/Autosuggest.js.map +1 -1
  461. package/build/es/components/autosuggest/BaseAutosuggest.js +1 -24
  462. package/build/es/components/autosuggest/BaseAutosuggest.js.map +1 -1
  463. package/build/es/components/autosuggest/ControllerButton.js.map +1 -1
  464. package/build/es/components/autosuggest/Menu.js +1 -1
  465. package/build/es/components/autosuggest/Menu.js.map +1 -1
  466. package/build/es/components/autosuggest/utils.js.map +1 -1
  467. package/build/es/components/breadcrumb/Breadcrumb.js +1 -1
  468. package/build/es/components/breadcrumb/Breadcrumb.js.map +1 -1
  469. package/build/es/components/breadcrumb/BreadcrumbItem.js +1 -1
  470. package/build/es/components/breadcrumb/BreadcrumbItem.js.map +1 -1
  471. package/build/es/components/breadcrumb/documentation/BreadcrumbDocs.js.map +1 -1
  472. package/build/es/components/button/Button.js +1 -1
  473. package/build/es/components/button/Button.js.map +1 -1
  474. package/build/es/components/button/documentation/AnchorDocs.js.map +1 -1
  475. package/build/es/components/button/documentation/ButtonDocs.js +1 -1
  476. package/build/es/components/button/documentation/ButtonDocs.js.map +1 -1
  477. package/build/es/components/card/Card.js +1 -1
  478. package/build/es/components/card/Card.js.map +1 -1
  479. package/build/es/components/card/CardImage.js +1 -1
  480. package/build/es/components/card/CardImage.js.map +1 -1
  481. package/build/es/components/checkbox/Checkbox.js +1 -1
  482. package/build/es/components/checkbox/Checkbox.js.map +1 -1
  483. package/build/es/components/checkbox-panel/CheckboxPanel.js +1 -1
  484. package/build/es/components/checkbox-panel/CheckboxPanel.js.map +1 -1
  485. package/build/es/components/checkbox-panel/types.d.ts +12 -0
  486. package/build/es/components/chip/Chip.js +1 -1
  487. package/build/es/components/chip/Chip.js.map +1 -1
  488. package/build/es/components/combobox/Combobox.js +1 -1
  489. package/build/es/components/combobox/Combobox.js.map +1 -1
  490. package/build/es/components/cookie-consent/CookieConsent.js +1 -1
  491. package/build/es/components/cookie-consent/CookieConsent.js.map +1 -1
  492. package/build/es/components/cookie-consent/CookieConsentContext.js +1 -1
  493. package/build/es/components/cookie-consent/CookieConsentContext.js.map +1 -1
  494. package/build/es/components/cookie-consent/cookieConsentUtils.js +1 -1
  495. package/build/es/components/cookie-consent/cookieConsentUtils.js.map +1 -1
  496. package/build/es/components/countdown/Countdown.js +1 -1
  497. package/build/es/components/countdown/Countdown.js.map +1 -1
  498. package/build/es/components/datepicker/DatePicker.js +1 -1
  499. package/build/es/components/datepicker/DatePicker.js.map +1 -1
  500. package/build/es/components/datepicker/internal/Calendar.js +1 -1
  501. package/build/es/components/datepicker/internal/Calendar.js.map +1 -1
  502. package/build/es/components/datepicker/internal/calendarReducer.js.map +1 -1
  503. package/build/es/components/datepicker/internal/useCalendar.js +1 -1
  504. package/build/es/components/datepicker/internal/useCalendar.js.map +1 -1
  505. package/build/es/components/datepicker/internal/utils.js +1 -1
  506. package/build/es/components/datepicker/internal/utils.js.map +1 -1
  507. package/build/es/components/datepicker/utils.js.map +1 -1
  508. package/build/es/components/description-list/index.d.ts +3 -0
  509. package/build/es/components/description-list/index.js +1 -1
  510. package/build/es/components/expander/ExpandablePanel.js +1 -1
  511. package/build/es/components/expander/ExpandablePanel.js.map +1 -1
  512. package/build/es/components/expander/ExpandablePanelContent.js +1 -1
  513. package/build/es/components/expander/ExpandablePanelContent.js.map +1 -1
  514. package/build/es/components/expander/Expander.js +1 -1
  515. package/build/es/components/expander/Expander.js.map +1 -1
  516. package/build/es/components/feedback/Feedback.js.map +1 -1
  517. package/build/es/components/feedback/feedbackContext.js.map +1 -1
  518. package/build/es/components/feedback/followup/Followup.js +1 -1
  519. package/build/es/components/feedback/followup/Followup.js.map +1 -1
  520. package/build/es/components/feedback/followup/useFollowup.js +1 -1
  521. package/build/es/components/feedback/followup/useFollowup.js.map +1 -1
  522. package/build/es/components/feedback/main-question/MainQuestion.js +1 -1
  523. package/build/es/components/feedback/main-question/MainQuestion.js.map +1 -1
  524. package/build/es/components/feedback/main-question/useMainQuestion.js +1 -1
  525. package/build/es/components/feedback/main-question/useMainQuestion.js.map +1 -1
  526. package/build/es/components/feedback/questions/AddonQuestion.js +1 -1
  527. package/build/es/components/feedback/questions/AddonQuestion.js.map +1 -1
  528. package/build/es/components/feedback/questions/CheckboxQuestion.js +1 -1
  529. package/build/es/components/feedback/questions/CheckboxQuestion.js.map +1 -1
  530. package/build/es/components/feedback/questions/ContactQuestion.js +1 -1
  531. package/build/es/components/feedback/questions/ContactQuestion.js.map +1 -1
  532. package/build/es/components/feedback/questions/RadioQuestion.js +1 -1
  533. package/build/es/components/feedback/questions/RadioQuestion.js.map +1 -1
  534. package/build/es/components/feedback/questions/SmileyQuestion.js +1 -1
  535. package/build/es/components/feedback/questions/SmileyQuestion.js.map +1 -1
  536. package/build/es/components/feedback/questions/TextQuestion.js +1 -1
  537. package/build/es/components/feedback/questions/TextQuestion.js.map +1 -1
  538. package/build/es/components/feedback/questions/smileyUtils.js.map +1 -1
  539. package/build/es/components/feedback/utils.js +1 -1
  540. package/build/es/components/feedback/utils.js.map +1 -1
  541. package/build/es/components/file/File.js.map +1 -1
  542. package/build/es/components/file-input/FileInput.js +1 -1
  543. package/build/es/components/file-input/FileInput.js.map +1 -1
  544. package/build/es/components/file-input/internal/Dropzone.js +1 -1
  545. package/build/es/components/file-input/internal/Dropzone.js.map +1 -1
  546. package/build/es/components/file-input/internal/Input.js +1 -1
  547. package/build/es/components/file-input/internal/Input.js.map +1 -1
  548. package/build/es/components/file-input/internal/MaxSize.js.map +1 -1
  549. package/build/es/components/file-input/internal/fileInputContext.js.map +1 -1
  550. package/build/es/components/file-input/internal/validateFileInputFiles.js +1 -1
  551. package/build/es/components/file-input/internal/validateFileInputFiles.js.map +1 -1
  552. package/build/es/components/file-input/utils.js +1 -1
  553. package/build/es/components/file-input/utils.js.map +1 -1
  554. package/build/es/components/flex/Flex.js +1 -1
  555. package/build/es/components/flex/Flex.js.map +1 -1
  556. package/build/es/components/help/Help.js.map +1 -1
  557. package/build/es/components/icon/Icon.js +1 -1
  558. package/build/es/components/icon/Icon.js.map +1 -1
  559. package/build/es/components/icon/icons/ArrowDownIcon.js.map +1 -1
  560. package/build/es/components/icon/icons/ArrowLeftIcon.js.map +1 -1
  561. package/build/es/components/icon/icons/ArrowNorthEastIcon.js.map +1 -1
  562. package/build/es/components/icon/icons/ArrowRightIcon.js.map +1 -1
  563. package/build/es/components/icon/icons/ArrowUpIcon.js.map +1 -1
  564. package/build/es/components/icon/icons/CalendarIcon.js.map +1 -1
  565. package/build/es/components/icon/icons/CheckIcon.js.map +1 -1
  566. package/build/es/components/icon/icons/ChevronDownIcon.js.map +1 -1
  567. package/build/es/components/icon/icons/ChevronLeftIcon.js.map +1 -1
  568. package/build/es/components/icon/icons/ChevronRightIcon.js.map +1 -1
  569. package/build/es/components/icon/icons/ChevronUpIcon.js.map +1 -1
  570. package/build/es/components/icon/icons/CloseIcon.js.map +1 -1
  571. package/build/es/components/icon/icons/CopyIcon.js.map +1 -1
  572. package/build/es/components/icon/icons/DotsIcon.js.map +1 -1
  573. package/build/es/components/icon/icons/DragIcon.js.map +1 -1
  574. package/build/es/components/icon/icons/ErrorIcon.js.map +1 -1
  575. package/build/es/components/icon/icons/HamburgerIcon.js.map +1 -1
  576. package/build/es/components/icon/icons/InfoIcon.js.map +1 -1
  577. package/build/es/components/icon/icons/LinkIcon.js.map +1 -1
  578. package/build/es/components/icon/icons/MinusIcon.js.map +1 -1
  579. package/build/es/components/icon/icons/OpenInNewIcon.js.map +1 -1
  580. package/build/es/components/icon/icons/PenIcon.js.map +1 -1
  581. package/build/es/components/icon/icons/PlusIcon.js.map +1 -1
  582. package/build/es/components/icon/icons/QuestionIcon.js.map +1 -1
  583. package/build/es/components/icon/icons/RedCrossIcon.js.map +1 -1
  584. package/build/es/components/icon/icons/SearchIcon.js.map +1 -1
  585. package/build/es/components/icon/icons/SuccessIcon.js.map +1 -1
  586. package/build/es/components/icon/icons/ThumbDownIcon.js.map +1 -1
  587. package/build/es/components/icon/icons/ThumbUpIcon.js.map +1 -1
  588. package/build/es/components/icon/icons/TrashCanIcon.js.map +1 -1
  589. package/build/es/components/icon/icons/WarningIcon.js.map +1 -1
  590. package/build/es/components/icon-button/IconButton.js +1 -1
  591. package/build/es/components/icon-button/IconButton.js.map +1 -1
  592. package/build/es/components/image/Image.js +1 -1
  593. package/build/es/components/image/Image.js.map +1 -1
  594. package/build/es/components/image/useImageLoadingStatus.js +1 -1
  595. package/build/es/components/image/useImageLoadingStatus.js.map +1 -1
  596. package/build/es/components/input-group/FieldGroup.js.map +1 -1
  597. package/build/es/components/input-group/InputGroup.js +1 -1
  598. package/build/es/components/input-group/InputGroup.js.map +1 -1
  599. package/build/es/components/input-group/Label.js.map +1 -1
  600. package/build/es/components/input-group/SupportLabel.js.map +1 -1
  601. package/build/es/components/link/Link.js +1 -1
  602. package/build/es/components/link/Link.js.map +1 -1
  603. package/build/es/components/link-list/LinkList.js +1 -1
  604. package/build/es/components/link-list/LinkList.js.map +1 -1
  605. package/build/es/components/link-list/LinkListItem.d.ts +3 -0
  606. package/build/es/components/link-list/LinkListItem.js +2 -0
  607. package/build/es/components/link-list/LinkListItem.js.map +1 -0
  608. package/build/es/components/link-list/index.d.ts +2 -0
  609. package/build/es/components/link-list/index.js +1 -1
  610. package/build/es/components/list/List.js.map +1 -1
  611. package/build/es/components/list/ListItem.js.map +1 -1
  612. package/build/es/components/loader/Loader.js.map +1 -1
  613. package/build/es/components/loader/skeletons/SkeletonAnimation.js.map +1 -1
  614. package/build/es/components/loader/skeletons/SkeletonCheckboxGroup.js +1 -1
  615. package/build/es/components/loader/skeletons/SkeletonCheckboxGroup.js.map +1 -1
  616. package/build/es/components/loader/skeletons/SkeletonInput.js.map +1 -1
  617. package/build/es/components/loader/skeletons/SkeletonLabel.js.map +1 -1
  618. package/build/es/components/loader/skeletons/SkeletonRadioButtonGroup.js +1 -1
  619. package/build/es/components/loader/skeletons/SkeletonRadioButtonGroup.js.map +1 -1
  620. package/build/es/components/loader/skeletons/SkeletonTextArea.js.map +1 -1
  621. package/build/es/components/loader/useDelayedRender.js +1 -1
  622. package/build/es/components/loader/useDelayedRender.js.map +1 -1
  623. package/build/es/components/logo/Logo.js.map +1 -1
  624. package/build/es/components/logo/LogoStamp.js.map +1 -1
  625. package/build/es/components/logo/useTextSpinner.js +1 -1
  626. package/build/es/components/logo/useTextSpinner.js.map +1 -1
  627. package/build/es/components/menu/Menu.js +1 -1
  628. package/build/es/components/menu/Menu.js.map +1 -1
  629. package/build/es/components/menu/MenuDivider.js.map +1 -1
  630. package/build/es/components/menu/MenuItem.js +1 -1
  631. package/build/es/components/menu/MenuItem.js.map +1 -1
  632. package/build/es/components/menu/MenuItemCheckbox.js +1 -1
  633. package/build/es/components/menu/MenuItemCheckbox.js.map +1 -1
  634. package/build/es/components/menu/useMenuWideEvents.js +1 -1
  635. package/build/es/components/menu/useMenuWideEvents.js.map +1 -1
  636. package/build/es/components/message/DismissButton.js +1 -1
  637. package/build/es/components/message/DismissButton.js.map +1 -1
  638. package/build/es/components/message/FormErrorMessage.js +1 -1
  639. package/build/es/components/message/FormErrorMessage.js.map +1 -1
  640. package/build/es/components/message/Message.js +1 -1
  641. package/build/es/components/message/Message.js.map +1 -1
  642. package/build/es/components/modal/Modal.js +1 -1
  643. package/build/es/components/modal/Modal.js.map +1 -1
  644. package/build/es/components/modal/useModal.js.map +1 -1
  645. package/build/es/components/nav-link/NavLink.js +1 -1
  646. package/build/es/components/nav-link/NavLink.js.map +1 -1
  647. package/build/es/components/nav-link/index.d.ts +2 -0
  648. package/build/es/components/nav-link/index.js +1 -1
  649. package/build/es/components/pagination/PageButton.js.map +1 -1
  650. package/build/es/components/pagination/Pagination.js +1 -1
  651. package/build/es/components/pagination/Pagination.js.map +1 -1
  652. package/build/es/components/popover/Popover.js +1 -1
  653. package/build/es/components/popover/Popover.js.map +1 -1
  654. package/build/es/components/progress-bar/ProgressBar.js.map +1 -1
  655. package/build/es/components/radio-button/BaseRadioButton.js +1 -1
  656. package/build/es/components/radio-button/BaseRadioButton.js.map +1 -1
  657. package/build/es/components/radio-button/RadioButton.js +1 -1
  658. package/build/es/components/radio-button/RadioButton.js.map +1 -1
  659. package/build/es/components/radio-button/RadioButtonGroup.js.map +1 -1
  660. package/build/es/components/radio-panel/RadioPanel.js +1 -1
  661. package/build/es/components/radio-panel/RadioPanel.js.map +1 -1
  662. package/build/es/components/radio-panel/RadioPanelGroup.js.map +1 -1
  663. package/build/es/components/radio-panel/radioPanelContext.js.map +1 -1
  664. package/build/es/components/radio-panel/types.d.ts +12 -0
  665. package/build/es/components/segmented-control/SegmentedControl.js.map +1 -1
  666. package/build/es/components/segmented-control/SegmentedControlButton.js.map +1 -1
  667. package/build/es/components/select/NativeSelect.js +1 -1
  668. package/build/es/components/select/NativeSelect.js.map +1 -1
  669. package/build/es/components/select/Select.js +1 -1
  670. package/build/es/components/select/Select.js.map +1 -1
  671. package/build/es/components/select/select-utils.js.map +1 -1
  672. package/build/es/components/summary-table/SummaryTable.js +1 -1
  673. package/build/es/components/summary-table/SummaryTable.js.map +1 -1
  674. package/build/es/components/summary-table/SummaryTableRow.js.map +1 -1
  675. package/build/es/components/summary-table/mocks.js.map +1 -1
  676. package/build/es/components/system-message/SystemMessage.js.map +1 -1
  677. package/build/es/components/system-message/common/DismissButton.js +1 -1
  678. package/build/es/components/system-message/common/DismissButton.js.map +1 -1
  679. package/build/es/components/system-message/common/MessageIcon.js.map +1 -1
  680. package/build/es/components/table/DataTable.js +1 -1
  681. package/build/es/components/table/DataTable.js.map +1 -1
  682. package/build/es/components/table/ExpandableTableRow.js +1 -1
  683. package/build/es/components/table/ExpandableTableRow.js.map +1 -1
  684. package/build/es/components/table/ExpandableTableRowController.js +1 -1
  685. package/build/es/components/table/ExpandableTableRowController.js.map +1 -1
  686. package/build/es/components/table/Table.js +1 -1
  687. package/build/es/components/table/Table.js.map +1 -1
  688. package/build/es/components/table/TableBody.js +1 -1
  689. package/build/es/components/table/TableBody.js.map +1 -1
  690. package/build/es/components/table/TableCaption.js +1 -1
  691. package/build/es/components/table/TableCaption.js.map +1 -1
  692. package/build/es/components/table/TableCell.js +1 -1
  693. package/build/es/components/table/TableCell.js.map +1 -1
  694. package/build/es/components/table/TableColumn.js +1 -1
  695. package/build/es/components/table/TableColumn.js.map +1 -1
  696. package/build/es/components/table/TableColumnGroup.js +1 -1
  697. package/build/es/components/table/TableColumnGroup.js.map +1 -1
  698. package/build/es/components/table/TableFooter.js +1 -1
  699. package/build/es/components/table/TableFooter.js.map +1 -1
  700. package/build/es/components/table/TableHead.js +1 -1
  701. package/build/es/components/table/TableHead.js.map +1 -1
  702. package/build/es/components/table/TableHeader.js +1 -1
  703. package/build/es/components/table/TableHeader.js.map +1 -1
  704. package/build/es/components/table/TablePagination.js +1 -1
  705. package/build/es/components/table/TablePagination.js.map +1 -1
  706. package/build/es/components/table/TableRow.js +1 -1
  707. package/build/es/components/table/TableRow.js.map +1 -1
  708. package/build/es/components/table/tableSectionContext.js.map +1 -1
  709. package/build/es/components/table/utils.js.map +1 -1
  710. package/build/es/components/table-of-contents/index.d.ts +2 -0
  711. package/build/es/components/table-of-contents/index.js +2 -0
  712. package/build/es/components/table-of-contents/index.js.map +1 -0
  713. package/build/es/components/tabs/NavTab.js +1 -1
  714. package/build/es/components/tabs/NavTab.js.map +1 -1
  715. package/build/es/components/tabs/NavTabs.js +1 -1
  716. package/build/es/components/tabs/NavTabs.js.map +1 -1
  717. package/build/es/components/tabs/Tab.js +1 -1
  718. package/build/es/components/tabs/Tab.js.map +1 -1
  719. package/build/es/components/tabs/TabList.js +1 -1
  720. package/build/es/components/tabs/TabList.js.map +1 -1
  721. package/build/es/components/tabs/TabPanel.js.map +1 -1
  722. package/build/es/components/tabs/Tabs.js +1 -1
  723. package/build/es/components/tabs/Tabs.js.map +1 -1
  724. package/build/es/components/tabs/tabsContext.js.map +1 -1
  725. package/build/es/components/tag/Tag.js.map +1 -1
  726. package/build/es/components/text-area/BaseTextArea.js +1 -1
  727. package/build/es/components/text-area/BaseTextArea.js.map +1 -1
  728. package/build/es/components/text-area/TextArea.js +1 -1
  729. package/build/es/components/text-area/TextArea.js.map +1 -1
  730. package/build/es/components/text-input/BaseTextInput.js +1 -1
  731. package/build/es/components/text-input/BaseTextInput.js.map +1 -1
  732. package/build/es/components/text-input/TextInput.js +1 -1
  733. package/build/es/components/text-input/TextInput.js.map +1 -1
  734. package/build/es/components/toast/Toast.js +1 -1
  735. package/build/es/components/toast/Toast.js.map +1 -1
  736. package/build/es/components/toast/ToastRegion.js +1 -1
  737. package/build/es/components/toast/ToastRegion.js.map +1 -1
  738. package/build/es/components/toast/toastContext.js.map +1 -1
  739. package/build/es/components/toggle-switch/ToggleSlider.js +1 -1
  740. package/build/es/components/toggle-switch/ToggleSlider.js.map +1 -1
  741. package/build/es/components/toggle-switch/ToggleSwitch.js +1 -1
  742. package/build/es/components/toggle-switch/ToggleSwitch.js.map +1 -1
  743. package/build/es/components/toggle-switch/usePillStyles.js +1 -1
  744. package/build/es/components/toggle-switch/usePillStyles.js.map +1 -1
  745. package/build/es/components/tooltip/PopupTip.js.map +1 -1
  746. package/build/es/components/tooltip/Tooltip.js.map +1 -1
  747. package/build/es/components/tooltip/TooltipContent.js +1 -1
  748. package/build/es/components/tooltip/TooltipContent.js.map +1 -1
  749. package/build/es/components/tooltip/TooltipTrigger.js +1 -1
  750. package/build/es/components/tooltip/TooltipTrigger.js.map +1 -1
  751. package/build/es/components-beta/description-list/DescriptionList.d.ts +6 -0
  752. package/build/es/components-beta/description-list/DescriptionList.js +2 -0
  753. package/build/es/components-beta/description-list/DescriptionList.js.map +1 -0
  754. package/build/es/components-beta/description-list/DescriptionListItem.d.ts +3 -0
  755. package/build/es/components-beta/description-list/DescriptionListItem.js +2 -0
  756. package/build/es/components-beta/description-list/DescriptionListItem.js.map +1 -0
  757. package/build/es/components-beta/description-list/index.d.ts +3 -0
  758. package/build/es/components-beta/description-list/index.js +2 -0
  759. package/build/es/components-beta/description-list/index.js.map +1 -0
  760. package/build/es/components-beta/description-list/types.d.ts +18 -0
  761. package/build/es/components-beta/description-list/types.js +2 -0
  762. package/build/es/components-beta/description-list/types.js.map +1 -0
  763. package/build/es/components-beta/link-list/LinkList.d.ts +6 -0
  764. package/build/es/components-beta/link-list/LinkList.js +2 -0
  765. package/build/es/components-beta/link-list/LinkList.js.map +1 -0
  766. package/build/es/components-beta/link-list/LinkListLink.d.ts +3 -0
  767. package/build/es/components-beta/link-list/LinkListLink.js +2 -0
  768. package/build/es/components-beta/link-list/LinkListLink.js.map +1 -0
  769. package/build/es/components-beta/link-list/index.d.ts +3 -0
  770. package/build/es/components-beta/link-list/index.js +2 -0
  771. package/build/es/components-beta/link-list/index.js.map +1 -0
  772. package/build/es/components-beta/link-list/types.d.ts +7 -0
  773. package/build/es/components-beta/link-list/types.js +2 -0
  774. package/build/es/components-beta/link-list/types.js.map +1 -0
  775. package/build/es/components-beta/nav-link/NavLink.d.ts +5 -0
  776. package/build/es/components-beta/nav-link/NavLink.js +2 -0
  777. package/build/es/components-beta/nav-link/NavLink.js.map +1 -0
  778. package/build/es/components-beta/nav-link/index.d.ts +1 -0
  779. package/build/es/components-beta/nav-link/index.js +2 -0
  780. package/build/es/components-beta/nav-link/index.js.map +1 -0
  781. package/build/es/components-beta/nav-link/types.d.ts +6 -0
  782. package/build/es/components-beta/nav-link/types.js +2 -0
  783. package/build/es/components-beta/nav-link/types.js.map +1 -0
  784. package/build/es/components-beta/search/Search.d.ts +6 -0
  785. package/build/es/components-beta/search/Search.js +2 -0
  786. package/build/es/components-beta/search/Search.js.map +1 -0
  787. package/build/es/components-beta/search/SearchButton.d.ts +2 -0
  788. package/build/es/components-beta/search/SearchButton.js +2 -0
  789. package/build/es/components-beta/search/SearchButton.js.map +1 -0
  790. package/build/es/components-beta/search/index.d.ts +2 -0
  791. package/build/es/components-beta/search/index.js +2 -0
  792. package/build/es/components-beta/search/index.js.map +1 -0
  793. package/build/es/components-beta/search/types.d.ts +21 -0
  794. package/build/es/components-beta/search/types.js +2 -0
  795. package/build/es/components-beta/search/types.js.map +1 -0
  796. package/build/es/components-beta/select/Select.js +1 -1
  797. package/build/es/components-beta/select/Select.js.map +1 -1
  798. package/build/es/components-beta/table-of-contents/TableOfContents.d.ts +6 -0
  799. package/build/es/components-beta/table-of-contents/TableOfContents.js +2 -0
  800. package/build/es/components-beta/table-of-contents/TableOfContents.js.map +1 -0
  801. package/build/es/components-beta/table-of-contents/TableOfContentsLink.d.ts +3 -0
  802. package/build/es/components-beta/table-of-contents/TableOfContentsLink.js +2 -0
  803. package/build/es/components-beta/table-of-contents/TableOfContentsLink.js.map +1 -0
  804. package/build/es/components-beta/table-of-contents/index.d.ts +3 -0
  805. package/build/es/components-beta/table-of-contents/index.js +2 -0
  806. package/build/es/components-beta/table-of-contents/index.js.map +1 -0
  807. package/build/es/components-beta/table-of-contents/types.d.ts +6 -0
  808. package/build/es/components-beta/table-of-contents/types.js +2 -0
  809. package/build/es/components-beta/table-of-contents/types.js.map +1 -0
  810. package/build/es/core/tokens/style-dictionary/config.js +1 -1
  811. package/build/es/core/tokens/style-dictionary/config.js.map +1 -1
  812. package/build/es/core/tokens/style-dictionary/formats/css-dynamic-color-variables.js +1 -1
  813. package/build/es/core/tokens/style-dictionary/formats/css-dynamic-color-variables.js.map +1 -1
  814. package/build/es/core/tokens/style-dictionary/formats/javascript-esm.js +1 -1
  815. package/build/es/core/tokens/style-dictionary/formats/javascript-esm.js.map +1 -1
  816. package/build/es/core/tokens/style-dictionary/formats/scss-theme-variables.js +1 -1
  817. package/build/es/core/tokens/style-dictionary/formats/scss-theme-variables.js.map +1 -1
  818. package/build/es/core/tokens/style-dictionary/formats/tailwindcss-colors.js +1 -1
  819. package/build/es/core/tokens/style-dictionary/formats/tailwindcss-colors.js.map +1 -1
  820. package/build/es/core/tokens/style-dictionary/transforms/strip-light-dark.js +1 -1
  821. package/build/es/core/tokens/style-dictionary/transforms/strip-light-dark.js.map +1 -1
  822. package/build/es/core/tokens.js.map +1 -1
  823. package/build/es/hooks/mediaQueryUtils.js.map +1 -1
  824. package/build/es/hooks/stories/content.js.map +1 -1
  825. package/build/es/hooks/useAnimatedDetails/useAnimatedDetails.js +1 -1
  826. package/build/es/hooks/useAnimatedDetails/useAnimatedDetails.js.map +1 -1
  827. package/build/es/hooks/useAnimatedHeight/useAnimatedHeight.js +1 -1
  828. package/build/es/hooks/useAnimatedHeight/useAnimatedHeight.js.map +1 -1
  829. package/build/es/hooks/useAnimatedHeight/useAnimatedHeightBetween.js +1 -1
  830. package/build/es/hooks/useAnimatedHeight/useAnimatedHeightBetween.js.map +1 -1
  831. package/build/es/hooks/useAnimatedHeight/useAutoAnimateHeight.js +1 -1
  832. package/build/es/hooks/useAnimatedHeight/useAutoAnimateHeight.js.map +1 -1
  833. package/build/es/hooks/useAriaLiveRegion/useAriaLiveRegion.js +1 -1
  834. package/build/es/hooks/useAriaLiveRegion/useAriaLiveRegion.js.map +1 -1
  835. package/build/es/hooks/useBrowserPreferences/useBrowserPreferences.js +1 -1
  836. package/build/es/hooks/useBrowserPreferences/useBrowserPreferences.js.map +1 -1
  837. package/build/es/hooks/useClickOutside/useClickOutside.js +1 -1
  838. package/build/es/hooks/useClickOutside/useClickOutside.js.map +1 -1
  839. package/build/es/hooks/useElementDimensions/useElementDimensions.js +1 -1
  840. package/build/es/hooks/useElementDimensions/useElementDimensions.js.map +1 -1
  841. package/build/es/hooks/useFocusOutside/useFocusOutside.js +1 -1
  842. package/build/es/hooks/useFocusOutside/useFocusOutside.js.map +1 -1
  843. package/build/es/hooks/useId/useId.js.map +1 -1
  844. package/build/es/hooks/useIntersectionObserver/useIntersectionObserver.d.ts +1 -1
  845. package/build/es/hooks/useIntersectionObserver/useIntersectionObserver.js +1 -1
  846. package/build/es/hooks/useIntersectionObserver/useIntersectionObserver.js.map +1 -1
  847. package/build/es/hooks/useKeyListener/useKeyListener.js +1 -1
  848. package/build/es/hooks/useKeyListener/useKeyListener.js.map +1 -1
  849. package/build/es/hooks/useListNavigation/useListNavigation.js +1 -1
  850. package/build/es/hooks/useListNavigation/useListNavigation.js.map +1 -1
  851. package/build/es/hooks/useLocalStorage/useLocalStorage.js +1 -1
  852. package/build/es/hooks/useLocalStorage/useLocalStorage.js.map +1 -1
  853. package/build/es/hooks/useMutationObserver/useMutationObserver.js +1 -1
  854. package/build/es/hooks/useMutationObserver/useMutationObserver.js.map +1 -1
  855. package/build/es/hooks/usePreviousValue/usePreviousValue.js +1 -1
  856. package/build/es/hooks/usePreviousValue/usePreviousValue.js.map +1 -1
  857. package/build/es/hooks/useProgressiveImg/useProgressiveImg.js +1 -1
  858. package/build/es/hooks/useProgressiveImg/useProgressiveImg.js.map +1 -1
  859. package/build/es/hooks/useScreen/state.js.map +1 -1
  860. package/build/es/hooks/useScreen/useScreen.js +1 -1
  861. package/build/es/hooks/useScreen/useScreen.js.map +1 -1
  862. package/build/es/hooks/useScrollIntoView/useScrollIntoView.js +1 -1
  863. package/build/es/hooks/useScrollIntoView/useScrollIntoView.js.map +1 -1
  864. package/build/es/hooks/useSwipeGesture/useSwipeGesture.js +1 -1
  865. package/build/es/hooks/useSwipeGesture/useSwipeGesture.js.map +1 -1
  866. package/build/es/index.js +1 -1
  867. package/build/es/shared/input-panel/BasePanel.d.ts +14 -2
  868. package/build/es/shared/input-panel/BasePanel.js +1 -1
  869. package/build/es/shared/input-panel/BasePanel.js.map +1 -1
  870. package/build/es/tailwind/plugins/jokulTypographyPlugin.js +1 -1
  871. package/build/es/tailwind/plugins/jokulTypographyPlugin.js.map +1 -1
  872. package/build/es/utilities/formatters/avstand/formatAvstand.js.map +1 -1
  873. package/build/es/utilities/formatters/bytes/formatBytes.js.map +1 -1
  874. package/build/es/utilities/formatters/date/formatDate.js.map +1 -1
  875. package/build/es/utilities/formatters/fodselsnummer/formatFodselsnummer.js.map +1 -1
  876. package/build/es/utilities/formatters/kontonummer/formatKontonummer.js.map +1 -1
  877. package/build/es/utilities/formatters/kortnummer/formatKortnummer.js.map +1 -1
  878. package/build/es/utilities/formatters/organisasjonsnummer/formatOrganisasjonsnummer.js.map +1 -1
  879. package/build/es/utilities/formatters/telefonnummer/formatTelefonnummer.js.map +1 -1
  880. package/build/es/utilities/formatters/util/formatNumber.js.map +1 -1
  881. package/build/es/utilities/formatters/util/parseNumber.js +1 -1
  882. package/build/es/utilities/formatters/util/parseNumber.js.map +1 -1
  883. package/build/es/utilities/formatters/util/registerWithMask.js.map +1 -1
  884. package/build/es/utilities/formatters/valuta/formatValuta.js.map +1 -1
  885. package/build/es/utilities/getThemeAndDensity.js.map +1 -1
  886. package/build/es/utilities/index.d.ts +2 -1
  887. package/build/es/utilities/index.js +1 -1
  888. package/build/es/utilities/mergeRefs.d.ts +22 -0
  889. package/build/es/utilities/mergeRefs.js +2 -0
  890. package/build/es/utilities/mergeRefs.js.map +1 -0
  891. package/build/es/utilities/polymorphism/SlotComponent.js +1 -1
  892. package/build/es/utilities/polymorphism/SlotComponent.js.map +1 -1
  893. package/build/es/utilities/polymorphism/index.d.ts +0 -1
  894. package/build/es/utilities/polymorphism/index.js +1 -1
  895. package/build/es/utilities/polymorphism/mergeProps.js.map +1 -1
  896. package/build/es/utilities/tabListener.js +1 -1
  897. package/build/es/utilities/tabListener.js.map +1 -1
  898. package/build/es/utilities/validators/hasMinimumWords/hasMinimumWords.js +1 -1
  899. package/build/es/utilities/validators/hasMinimumWords/hasMinimumWords.js.map +1 -1
  900. package/build/es/utilities/validators/isExactLength/isExactLength.js.map +1 -1
  901. package/build/es/utilities/validators/isValidFodselsnummer/isValidFodselsnummer.js +1 -1
  902. package/build/es/utilities/validators/isValidFodselsnummer/isValidFodselsnummer.js.map +1 -1
  903. package/build/es/utilities/validators/isValidKortnummer/isValidKortnummer.js +1 -1
  904. package/build/es/utilities/validators/isValidKortnummer/isValidKortnummer.js.map +1 -1
  905. package/build/es/utilities/validators/isValidOrganisasjonsnummer/isValidOrganisasjonsnummer.js +1 -1
  906. package/build/es/utilities/validators/isValidOrganisasjonsnummer/isValidOrganisasjonsnummer.js.map +1 -1
  907. package/build/es/utilities/valuePair.js.map +1 -1
  908. package/build/index-CWRMnfcx.js.map +1 -1
  909. package/build/index-CaISwoxr.cjs.map +1 -1
  910. package/package.json +27 -2
  911. package/styles/components/card/card.css +86 -85
  912. package/styles/components/card/card.min.css +1 -1
  913. package/styles/components/card/card.scss +82 -80
  914. package/styles/components/checkbox/checkbox.css +4 -4
  915. package/styles/components/checkbox/checkbox.min.css +1 -1
  916. package/styles/components/checkbox-panel/checkbox-panel.css +6 -6
  917. package/styles/components/checkbox-panel/checkbox-panel.min.css +1 -1
  918. package/styles/components/combobox/combobox.min.css +1 -1
  919. package/styles/components/countdown/countdown.css +2 -2
  920. package/styles/components/countdown/countdown.min.css +1 -1
  921. package/styles/components/feedback/feedback.css +2 -2
  922. package/styles/components/feedback/feedback.min.css +1 -1
  923. package/styles/components/file-input/file-input.css +11 -11
  924. package/styles/components/file-input/file-input.min.css +1 -1
  925. package/styles/components/input-group/_labels.scss +11 -10
  926. package/styles/components/input-group/input-group.css +4 -4
  927. package/styles/components/input-group/input-group.min.css +1 -1
  928. package/styles/components/loader/loader.css +6 -6
  929. package/styles/components/loader/loader.min.css +1 -1
  930. package/styles/components/loader/skeleton-loader.css +5 -5
  931. package/styles/components/loader/skeleton-loader.min.css +1 -1
  932. package/styles/components/logo/logo.min.css +1 -1
  933. package/styles/components/message/message.css +2 -2
  934. package/styles/components/message/message.min.css +1 -1
  935. package/styles/components/progress-bar/progress-bar.css +1 -1
  936. package/styles/components/progress-bar/progress-bar.min.css +1 -1
  937. package/styles/components/radio-button/radio-button.css +2 -2
  938. package/styles/components/radio-button/radio-button.min.css +1 -1
  939. package/styles/components/radio-panel/radio-panel.css +2 -2
  940. package/styles/components/radio-panel/radio-panel.min.css +1 -1
  941. package/styles/components/segmented-control/segmented-control.css +6 -6
  942. package/styles/components/segmented-control/segmented-control.min.css +1 -1
  943. package/styles/components/select/select.css +5 -3
  944. package/styles/components/select/select.min.css +1 -1
  945. package/styles/components/system-message/system-message.css +2 -2
  946. package/styles/components/system-message/system-message.min.css +1 -1
  947. package/styles/components/table/_table-pagination.scss +10 -5
  948. package/styles/components/table/table.css +14 -6
  949. package/styles/components/table/table.min.css +1 -1
  950. package/styles/components/table-of-contents/_index.scss +1 -0
  951. package/styles/components/tabs/tabs.min.css +1 -1
  952. package/styles/components/text-area/text-area.css +0 -8
  953. package/styles/components/text-area/text-area.min.css +1 -1
  954. package/styles/components/text-area/text-area.scss +2 -13
  955. package/styles/components/toast/toast.css +4 -4
  956. package/styles/components/toast/toast.min.css +1 -1
  957. package/styles/components-beta/description-list/_index.scss +1 -0
  958. package/styles/components-beta/description-list/description-list.css +64 -0
  959. package/styles/components-beta/description-list/description-list.min.css +1 -0
  960. package/styles/components-beta/description-list/description-list.scss +80 -0
  961. package/styles/components-beta/link-list/_index.scss +2 -0
  962. package/styles/components-beta/link-list/link-list.css +81 -0
  963. package/styles/components-beta/link-list/link-list.min.css +1 -0
  964. package/styles/components-beta/link-list/link-list.scss +81 -0
  965. package/styles/components-beta/nav-link/_index.scss +1 -0
  966. package/styles/components-beta/nav-link/navlink.css +68 -0
  967. package/styles/components-beta/nav-link/navlink.min.css +1 -0
  968. package/styles/components-beta/nav-link/navlink.scss +66 -0
  969. package/styles/components-beta/search/_index.scss +4 -0
  970. package/styles/components-beta/search/search-with-submit-button.css +76 -0
  971. package/styles/components-beta/search/search-with-submit-button.min.css +5 -0
  972. package/styles/components-beta/search/search-with-submit-button.scss +37 -0
  973. package/styles/components-beta/search/search.css +162 -0
  974. package/styles/components-beta/search/search.min.css +5 -0
  975. package/styles/components-beta/search/search.scss +106 -0
  976. package/styles/components-beta/select/select.css +7 -5
  977. package/styles/components-beta/select/select.min.css +1 -1
  978. package/styles/components-beta/table-of-contents/_index.scss +2 -0
  979. package/styles/components-beta/table-of-contents/table-of-contents.css +89 -0
  980. package/styles/components-beta/table-of-contents/table-of-contents.min.css +1 -0
  981. package/styles/components-beta/table-of-contents/table-of-contents.scss +88 -0
  982. package/styles/styles.css +591 -145
  983. package/styles/styles.min.css +2 -2
  984. package/styles/styles.scss +5 -0
  985. package/build/cjs/utilities/polymorphism/mergeRefs.cjs +0 -2
  986. package/build/cjs/utilities/polymorphism/mergeRefs.cjs.map +0 -1
  987. package/build/cjs/utilities/polymorphism/mergeRefs.d.cts +0 -3
  988. package/build/es/utilities/polymorphism/mergeRefs.d.ts +0 -3
  989. package/build/es/utilities/polymorphism/mergeRefs.js +0 -2
  990. package/build/es/utilities/polymorphism/mergeRefs.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CookieConsent.js","sources":["../../../../src/components/cookie-consent/CookieConsent.tsx"],"sourcesContent":["import React, { type FormEventHandler, useEffect, useId } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Button } from \"../button/Button.js\";\nimport { Flex } from \"../flex/index.js\";\nimport { Link } from \"../link/index.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 {\n convertBooleanConsentObjectToConsentObject,\n setConsentCookie,\n} from \"./cookieConsentUtils.js\";\nimport type { Consent, CookieConsentProps } from \"./types.js\";\n\nexport const CookieConsent = ({\n blocking,\n onAccept,\n aboutPage = \"https://www.fremtind.no/informasjonskapsler\",\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 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 statistics: \"denied\",\n });\n }\n\n return null;\n }\n\n const accept = (\n selection = convertBooleanConsentObjectToConsentObject(\n {\n functional: true,\n statistics: 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 },\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 <form>\n <ModalHeader>\n <ModalTitle {...modalConfig.title}>\n Får vi bruke valgfrie informasjonskapsler?\n </ModalTitle>\n </ModalHeader>\n <ModalBody>\n <Flex direction=\"column\" gap=\"m\">\n <p>\n Vi ønsker å samle anonym statistikk for å forstå\n hvordan nettsidene våre brukes. Det hjelper oss\n til å gjøre innhold og løsninger bedre og mer\n brukervennlige.\n </p>\n <p>\n <Link href={aboutPage} target=\"_blank\">\n Les mer om hvilke informasjonskapsler vi\n lagrer her\n </Link>\n .\n </p>\n </Flex>\n </ModalBody>\n <ModalActions>\n <Button\n variant=\"secondary\"\n data-testid=\"jkl-cookie-consent-godta-alle\"\n type=\"button\"\n onClick={() => accept()}\n >\n Ja, det er greit\n </Button>\n <Button\n variant=\"secondary\"\n data-testid=\"jkl-cookie-consent-godta\"\n type=\"submit\"\n >\n Nei takk\n </Button>\n </ModalActions>\n </form>\n </Modal>\n </ModalContainer>,\n document.body,\n );\n};\n"],"names":["CookieConsent","blocking","onAccept","aboutPage","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","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","Flex","direction","gap","Link","href","target","ModalActions","Button","variant","type","onClick","body"],"mappings":"6lBAsBO,MAAMA,EAAgB,EACzBC,SAAAA,EACAC,SAAAA,EACAC,UAAAA,EAAY,iDACTC,MAEG,MACFC,eAAAA,EACAC,WAAAA,EACAC,aAAAA,EACAC,WAAAA,EACAC,YAAAA,EACAC,OAAAA,EACAC,UAAAA,EACAC,sBAAAA,GACAC,KAEGC,EAAUC,GAAeC,EAAS,CACrCC,GAAI,oBAAoBC,MAIxBC,KAAMlB,EAAW,cAAgB,SAGjCmB,MAAO,wBAkBP,GAhBJC,GAAU,KACFX,EACAI,GAAUQ,OAEVR,GAAUS,MAAK,GAEpB,CAACT,EAAUJ,IAEdW,GAAU,KACAG,MAAAA,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,OAAI3B,GACSA,EAAA,CACL4B,WAAY,SACZC,WAAY,WAIb,KAGLC,MAAAA,EAAS,CACXC,EAAYC,EACR,CACIJ,YAAY,EACZC,YAAY,GAEhBtB,MAGJ,MAAM0B,EAA8BC,OAAOC,YACvCD,OAAOE,QAAQL,GAAWM,QACtB,EAAI,CAAAC,YAAkBA,EAAU,OAIlCC,EAA0B,IACzBpC,KACA8B,GAGUO,EAAA,CACbC,QAASF,EACTG,KAAMtC,EACNuC,OAAQtC,EACRuC,KAAMtC,IAGYI,IAEtBV,IAAWuC,GAEX3B,GAAUS,MAAK,EAmBnB,OAAOwB,EAASC,aACZC,EAACC,EAAA,IACOnC,EAAYoC,aACZ/C,EACJ,2BAA0BM,EAE1B0C,SAAA,CAACC,EAAAC,EAAA,IAAiBvC,EAAYwC,UAC7BF,EAAAG,EAAA,CAAMC,UAAU,UAAW1C,EAAY2C,MAAaC,SAvBRC,IACjDA,EAAEC,iBAEF,MAAMC,EAAW,IAAIC,SAASH,EAAEI,eAE1BC,EAAc/B,EAChB,CACIJ,WAA2C,SAA/BgC,EAASI,IAAI,cACzBnC,WAA2C,SAA/B+B,EAASI,IAAI,eAE7BzD,GAGJuB,EAAOiC,EAAW,EAWVb,SAAAH,EAAC,OACG,CAAAG,SAAA,CAAAC,EAACc,GACGf,SAACC,EAAAe,EAAA,IAAerD,EAAYK,MAAOgC,4DAItCiB,EACG,CAAAjB,SAAAH,EAACqB,GAAKC,UAAU,SAASC,IAAI,IACzBpB,SAAA,CAAAC,EAAC,KAAED,SAKH,qKACC,IACG,CAAAA,SAAA,CAAAC,EAACoB,EAAK,CAAAC,KAAMvE,EAAWwE,OAAO,SAASvB,SAGvC,wDAAO,cAKlBwB,EACG,CAAAxB,SAAA,CAAAC,EAACwB,EAAA,CACGC,QAAQ,YACR,cAAY,gCACZC,KAAK,SACLC,QAAS,IAAMhD,IAClBoB,SAAA,qBAGDC,EAACwB,EAAA,CACGC,QAAQ,YACR,cAAY,2BACZC,KAAK,SACR3B,SAAA,wBAOjBzB,SAASsD,KACb"}
1
+ {"version":3,"file":"CookieConsent.js","sources":["../../../../src/components/cookie-consent/CookieConsent.tsx"],"sourcesContent":["import React, { type FormEventHandler, useEffect, useId } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Button } from \"../button/Button.js\";\nimport { Flex } from \"../flex/index.js\";\nimport { Link } from \"../link/index.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 {\n convertBooleanConsentObjectToConsentObject,\n setConsentCookie,\n} from \"./cookieConsentUtils.js\";\nimport type { Consent, CookieConsentProps } from \"./types.js\";\n\nexport const CookieConsent = ({\n blocking,\n onAccept,\n aboutPage = \"https://www.fremtind.no/informasjonskapsler\",\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 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 statistics: \"denied\",\n });\n }\n\n return null;\n }\n\n const accept = (\n selection = convertBooleanConsentObjectToConsentObject(\n {\n functional: true,\n statistics: 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 },\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 <form>\n <ModalHeader>\n <ModalTitle {...modalConfig.title}>\n Får vi bruke valgfrie informasjonskapsler?\n </ModalTitle>\n </ModalHeader>\n <ModalBody>\n <Flex direction=\"column\" gap=\"m\">\n <p>\n Vi ønsker å samle anonym statistikk for å forstå\n hvordan nettsidene våre brukes. Det hjelper oss\n til å gjøre innhold og løsninger bedre og mer\n brukervennlige.\n </p>\n <p>\n <Link href={aboutPage} target=\"_blank\">\n Les mer om hvilke informasjonskapsler vi\n lagrer her\n </Link>\n .\n </p>\n </Flex>\n </ModalBody>\n <ModalActions>\n <Button\n variant=\"secondary\"\n data-testid=\"jkl-cookie-consent-godta-alle\"\n type=\"button\"\n onClick={() => accept()}\n >\n Ja, det er greit\n </Button>\n <Button\n variant=\"secondary\"\n data-testid=\"jkl-cookie-consent-godta\"\n type=\"submit\"\n >\n Nei takk\n </Button>\n </ModalActions>\n </form>\n </Modal>\n </ModalContainer>,\n document.body,\n );\n};\n"],"names":["CookieConsent","blocking","onAccept","aboutPage","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","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","Flex","direction","gap","Link","href","target","ModalActions","Button","variant","type","onClick","body"],"mappings":"6lBAsBO,MAAMA,EAAgB,EACzBC,SAAAA,EACAC,SAAAA,EACAC,UAAAA,EAAY,iDACTC,MAEH,MACIC,eAAAA,EACAC,WAAAA,EACAC,aAAAA,EACAC,WAAAA,EACAC,YAAAA,EACAC,OAAAA,EACAC,UAAAA,EACAC,sBAAAA,GACAC,KAEGC,EAAUC,GAAeC,EAAS,CACrCC,GAAI,oBAAoBC,MAIxBC,KAAMlB,EAAW,cAAgB,SAGjCmB,MAAO,wBAkBX,GAhBAC,EAAU,KACFX,EACAI,GAAUQ,OAEVR,GAAUS,QAEf,CAACT,EAAUJ,IAEdW,EAAU,KACN,MAAMG,EAAS,IAAMb,GAAU,GAC/B,OAAAG,GAAUW,GAAG,OAAQD,GACd,KACHV,GAAUY,IAAI,OAAQF,KAE3B,CAACV,EAAUH,WAEHgB,SAAa,IACpB,OAAO,KAIX,UAAWC,UAAc,MAAgBA,UAAUC,cAC/C,OAAI3B,GACAA,EAAS,CACL4B,WAAY,SACZC,WAAY,WAIb,KAGX,MAAMC,EAAS,CACXC,EAAYC,EACR,CACIJ,YAAY,EACZC,YAAY,GAEhBtB,MAGJ,MAAM0B,EAA8BC,OAAOC,YACvCD,OAAOE,QAAQL,GAAWM,OACtB,EAAC,CAAGC,YAAkBA,EAAU,MAIlCC,EAA0B,IACzBpC,KACA8B,GAGPO,EAAiB,CACbC,QAASF,EACTG,KAAMtC,EACNuC,OAAQtC,EACRuC,KAAMtC,IAGVI,IAEAV,IAAWuC,GAEX3B,GAAUS,QAmBd,OAAOwB,EAASC,aACZC,EAACC,EAAA,IACOnC,EAAYoC,aACZ/C,EACJ,2BAA0BM,EAE1B0C,SAAA,CAAAC,EAACC,EAAA,IAAiBvC,EAAYwC,UAC9BF,EAACG,EAAA,CAAMC,UAAU,UAAW1C,EAAY2C,MAAaC,SAvBRC,IACjDA,EAAEC,iBAEF,MAAMC,EAAW,IAAIC,SAASH,EAAEI,eAE1BC,EAAc/B,EAChB,CACIJ,WAA2C,SAA/BgC,EAASI,IAAI,cACzBnC,WAA2C,SAA/B+B,EAASI,IAAI,eAE7BzD,GAGJuB,EAAOiC,IAWCb,SAAAH,EAAC,OAAA,CACGG,SAAA,CAAAC,EAACc,GACGf,SAAAC,EAACe,EAAA,IAAerD,EAAYK,MAAOgC,4DAItCiB,EAAA,CACGjB,SAAAH,EAACqB,GAAKC,UAAU,SAASC,IAAI,IACzBpB,SAAA,CAAAC,EAAC,KAAED,SAAA,qKAMF,IAAA,CACGA,SAAA,CAAAC,EAACoB,EAAA,CAAKC,KAAMvE,EAAWwE,OAAO,SAASvB,SAAA,wDAGhC,cAKlBwB,EAAA,CACGxB,SAAA,CAAAC,EAACwB,EAAA,CACGC,QAAQ,YACR,cAAY,gCACZC,KAAK,SACLC,QAAS,IAAMhD,IAClBoB,SAAA,qBAGDC,EAACwB,EAAA,CACGC,QAAQ,YACR,cAAY,2BACZC,KAAK,SACR3B,SAAA,wBAOjBzB,SAASsD"}
@@ -1,2 +1,2 @@
1
- import{jsx as e}from"react/jsx-runtime";import o,{useState as t,useMemo as n,useContext as s}from"react";import{buildRequirementsObject as i,getConsentCookie as r,shouldShowConsentDialog as a}from"./cookieConsentUtils.js";const c="fremtind-cookie-consent",u=o.createContext(void 0),C=({children:o,cookieAdapter:s,functional:C,statistics:d,cookieName:m=c,cookieDomain:k,cookiePath:l})=>{const[p,h]=t((()=>Date.now())),f=n((()=>i({functional:C,statistics:d})),[C,d]),w=n((()=>r({adapter:s,name:m})??{functional:null,statistics:null}),[s,m,p]),[v,x]=t((()=>a(f,w)));return e(u.Provider,{value:{isOpen:v,setIsOpen:x,updateCurrentConsents:()=>h(Date.now()),requirement:f,currentConsent:w,cookieName:m,cookieDomain:k,cookiePath:l},children:o})},d=()=>{const e=o.useContext(u);if(void 0===e)throw new Error("CookieConsent must be used within a CookieConsentProvider");return e},m=()=>{const e=s(u);if(void 0===e)throw new Error("useCookieConsent must be used within a CookieConsentProvider");return{openConsentModal:()=>{e.setIsOpen(!0)},consents:e.currentConsent}};export{C as CookieConsentProvider,c as DEFAULT_COOKIE_NAME,m as useCookieConsent,d as useInternalState};
1
+ import{jsx as e}from"react/jsx-runtime";import o,{useState as t,useMemo as n,useContext as s}from"react";import{buildRequirementsObject as i,getConsentCookie as r,shouldShowConsentDialog as a}from"./cookieConsentUtils.js";const c="fremtind-cookie-consent",u=o.createContext(void 0),C=({children:o,cookieAdapter:s,functional:C,statistics:d,cookieName:m=c,cookieDomain:k,cookiePath:l})=>{const[p,h]=t(()=>Date.now()),f=n(()=>i({functional:C,statistics:d}),[C,d]),w=n(()=>r({adapter:s,name:m})??{functional:null,statistics:null},[s,m,p]),[v,x]=t(()=>a(f,w));return e(u.Provider,{value:{isOpen:v,setIsOpen:x,updateCurrentConsents:()=>h(Date.now()),requirement:f,currentConsent:w,cookieName:m,cookieDomain:k,cookiePath:l},children:o})},d=()=>{const e=o.useContext(u);if(void 0===e)throw new Error("CookieConsent must be used within a CookieConsentProvider");return e},m=()=>{const e=s(u);if(void 0===e)throw new Error("useCookieConsent must be used within a CookieConsentProvider");return{openConsentModal:()=>{e.setIsOpen(!0)},consents:e.currentConsent}};export{C as CookieConsentProvider,c as DEFAULT_COOKIE_NAME,m as useCookieConsent,d as useInternalState};
2
2
  //# sourceMappingURL=CookieConsentContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CookieConsentContext.js","sources":["../../../../src/components/cookie-consent/CookieConsentContext.tsx"],"sourcesContent":["import React, { useContext, useMemo, useState } from \"react\";\nimport {\n buildRequirementsObject,\n getConsentCookie,\n shouldShowConsentDialog,\n} from \"./cookieConsentUtils.js\";\nimport type {\n Consent,\n CookieConsentProviderProps,\n InternalContext,\n} from \"./types.js\";\n\nexport const DEFAULT_COOKIE_NAME = \"fremtind-cookie-consent\";\n\nconst Context = React.createContext<InternalContext | undefined>(undefined);\n\nexport const CookieConsentProvider: React.FC<CookieConsentProviderProps> = ({\n children,\n cookieAdapter,\n functional,\n statistics,\n cookieName = DEFAULT_COOKIE_NAME,\n cookieDomain,\n cookiePath,\n}) => {\n const [timestamp, setTimestamp] = useState(() => Date.now());\n\n const requirement = useMemo(\n () => buildRequirementsObject({ functional, statistics }),\n [functional, statistics],\n );\n\n /* Use timestamp as a dependency to be able to force re-reading of cookie */\n // biome-ignore lint/correctness/useExhaustiveDependencies:\n const consentCookie = useMemo(() => {\n return (\n getConsentCookie({ adapter: cookieAdapter, name: cookieName }) ?? {\n functional: null,\n statistics: null,\n }\n );\n }, [cookieAdapter, cookieName, timestamp]);\n\n const [isOpen, setIsOpen] = useState(() => {\n return shouldShowConsentDialog(requirement, consentCookie);\n });\n\n return (\n <Context.Provider\n value={{\n isOpen,\n setIsOpen,\n updateCurrentConsents: () => setTimestamp(Date.now()),\n requirement,\n currentConsent: consentCookie,\n cookieName,\n cookieDomain,\n cookiePath,\n }}\n >\n {children}\n </Context.Provider>\n );\n};\n\nexport const useInternalState = () => {\n const context = React.useContext(Context);\n if (context === undefined) {\n throw new Error(\n \"CookieConsent must be used within a CookieConsentProvider\",\n );\n }\n\n return context;\n};\n\ntype UseCookieConsent = {\n openConsentModal: () => void;\n consents: Consent;\n};\n\nexport const useCookieConsent = (): UseCookieConsent => {\n const context = useContext(Context);\n\n if (context === undefined) {\n throw new Error(\n \"useCookieConsent must be used within a CookieConsentProvider\",\n );\n }\n\n const openConsentModal = () => {\n context.setIsOpen(true);\n };\n\n const consents = context.currentConsent;\n\n return { openConsentModal, consents };\n};\n"],"names":["DEFAULT_COOKIE_NAME","Context","React","createContext","CookieConsentProvider","children","cookieAdapter","functional","statistics","cookieName","cookieDomain","cookiePath","timestamp","setTimestamp","useState","Date","now","requirement","useMemo","buildRequirementsObject","consentCookie","getConsentCookie","adapter","name","isOpen","setIsOpen","shouldShowConsentDialog","jsx","Provider","value","updateCurrentConsents","currentConsent","useInternalState","context","useContext","Error","useCookieConsent","openConsentModal","consents"],"mappings":"8NAYO,MAAMA,EAAsB,0BAE7BC,EAAUC,EAAMC,mBAA2C,GAEpDC,EAA8D,EACvEC,SAAAA,EACAC,cAAAA,EACAC,WAAAA,EACAC,WAAAA,EACAC,WAAAA,EAAaT,EACbU,aAAAA,EACAC,WAAAA,MAEM,MAACC,EAAWC,GAAgBC,GAAS,IAAMC,KAAKC,QAEhDC,EAAcC,GAChB,IAAMC,EAAwB,CAAEZ,WAAAA,EAAYC,WAAAA,KAC5C,CAACD,EAAYC,IAKXY,EAAgBF,GAAQ,IAEtBG,EAAiB,CAAEC,QAAShB,EAAeiB,KAAMd,KAAiB,CAC9DF,WAAY,KACZC,WAAY,OAGrB,CAACF,EAAeG,EAAYG,KAExBY,EAAQC,GAAaX,GAAS,IAC1BY,EAAwBT,EAAaG,KAI5C,OAAAO,EAAC1B,EAAQ2B,SAAR,CACGC,MAAO,CACHL,OAAAA,EACAC,UAAAA,EACAK,sBAAuB,IAAMjB,EAAaE,KAAKC,OAC/CC,YAAAA,EACAc,eAAgBX,EAChBX,WAAAA,EACAC,aAAAA,EACAC,WAAAA,GAGHN,SAAAA,GACL,EAIK2B,EAAmB,KACtBC,MAAAA,EAAU/B,EAAMgC,WAAWjC,GACjC,QAAgB,IAAZgC,EACA,MAAM,IAAIE,MACN,6DAIDF,OAAAA,CAAAA,EAQEG,EAAmB,KACtBH,MAAAA,EAAUC,EAAWjC,GAE3B,QAAgB,IAAZgC,EACA,MAAM,IAAIE,MACN,gEAUD,MAAA,CAAEE,iBANgB,KACrBJ,EAAQR,WAAU,EAAI,EAKCa,SAFVL,EAAQF,eAEW"}
1
+ {"version":3,"file":"CookieConsentContext.js","sources":["../../../../src/components/cookie-consent/CookieConsentContext.tsx"],"sourcesContent":["import React, { useContext, useMemo, useState } from \"react\";\nimport {\n buildRequirementsObject,\n getConsentCookie,\n shouldShowConsentDialog,\n} from \"./cookieConsentUtils.js\";\nimport type {\n Consent,\n CookieConsentProviderProps,\n InternalContext,\n} from \"./types.js\";\n\nexport const DEFAULT_COOKIE_NAME = \"fremtind-cookie-consent\";\n\nconst Context = React.createContext<InternalContext | undefined>(undefined);\n\nexport const CookieConsentProvider: React.FC<CookieConsentProviderProps> = ({\n children,\n cookieAdapter,\n functional,\n statistics,\n cookieName = DEFAULT_COOKIE_NAME,\n cookieDomain,\n cookiePath,\n}) => {\n const [timestamp, setTimestamp] = useState(() => Date.now());\n\n const requirement = useMemo(\n () => buildRequirementsObject({ functional, statistics }),\n [functional, statistics],\n );\n\n /* Use timestamp as a dependency to be able to force re-reading of cookie */\n // biome-ignore lint/correctness/useExhaustiveDependencies:\n const consentCookie = useMemo(() => {\n return (\n getConsentCookie({ adapter: cookieAdapter, name: cookieName }) ?? {\n functional: null,\n statistics: null,\n }\n );\n }, [cookieAdapter, cookieName, timestamp]);\n\n const [isOpen, setIsOpen] = useState(() => {\n return shouldShowConsentDialog(requirement, consentCookie);\n });\n\n return (\n <Context.Provider\n value={{\n isOpen,\n setIsOpen,\n updateCurrentConsents: () => setTimestamp(Date.now()),\n requirement,\n currentConsent: consentCookie,\n cookieName,\n cookieDomain,\n cookiePath,\n }}\n >\n {children}\n </Context.Provider>\n );\n};\n\nexport const useInternalState = () => {\n const context = React.useContext(Context);\n if (context === undefined) {\n throw new Error(\n \"CookieConsent must be used within a CookieConsentProvider\",\n );\n }\n\n return context;\n};\n\ntype UseCookieConsent = {\n openConsentModal: () => void;\n consents: Consent;\n};\n\nexport const useCookieConsent = (): UseCookieConsent => {\n const context = useContext(Context);\n\n if (context === undefined) {\n throw new Error(\n \"useCookieConsent must be used within a CookieConsentProvider\",\n );\n }\n\n const openConsentModal = () => {\n context.setIsOpen(true);\n };\n\n const consents = context.currentConsent;\n\n return { openConsentModal, consents };\n};\n"],"names":["DEFAULT_COOKIE_NAME","Context","React","createContext","CookieConsentProvider","children","cookieAdapter","functional","statistics","cookieName","cookieDomain","cookiePath","timestamp","setTimestamp","useState","Date","now","requirement","useMemo","buildRequirementsObject","consentCookie","getConsentCookie","adapter","name","isOpen","setIsOpen","shouldShowConsentDialog","jsx","Provider","value","updateCurrentConsents","currentConsent","useInternalState","context","useContext","Error","useCookieConsent","openConsentModal","consents"],"mappings":"8NAYO,MAAMA,EAAsB,0BAE7BC,EAAUC,EAAMC,mBAA2C,GAEpDC,EAA8D,EACvEC,SAAAA,EACAC,cAAAA,EACAC,WAAAA,EACAC,WAAAA,EACAC,WAAAA,EAAaT,EACbU,aAAAA,EACAC,WAAAA,MAEA,MAAOC,EAAWC,GAAgBC,EAAS,IAAMC,KAAKC,OAEhDC,EAAcC,EAChB,IAAMC,EAAwB,CAAEZ,WAAAA,EAAYC,WAAAA,IAC5C,CAACD,EAAYC,IAKXY,EAAgBF,EAAQ,IAEtBG,EAAiB,CAAEC,QAAShB,EAAeiB,KAAMd,KAAiB,CAC9DF,WAAY,KACZC,WAAY,MAGrB,CAACF,EAAeG,EAAYG,KAExBY,EAAQC,GAAaX,EAAS,IAC1BY,EAAwBT,EAAaG,IAGhD,OACIO,EAAC1B,EAAQ2B,SAAR,CACGC,MAAO,CACHL,OAAAA,EACAC,UAAAA,EACAK,sBAAuB,IAAMjB,EAAaE,KAAKC,OAC/CC,YAAAA,EACAc,eAAgBX,EAChBX,WAAAA,EACAC,aAAAA,EACAC,WAAAA,GAGHN,SAAAA,KAKA2B,EAAmB,KAC5B,MAAMC,EAAU/B,EAAMgC,WAAWjC,GACjC,QAAgB,IAAZgC,EACA,MAAM,IAAIE,MACN,6DAIR,OAAOF,GAQEG,EAAmB,KAC5B,MAAMH,EAAUC,EAAWjC,GAE3B,QAAgB,IAAZgC,EACA,MAAM,IAAIE,MACN,gEAUR,MAAO,CAAEE,iBANgB,KACrBJ,EAAQR,WAAU,IAKKa,SAFVL,EAAQF"}
@@ -1,2 +1,2 @@
1
- const t=({adapter:t,name:e})=>{const n=(t=>{if(typeof document>"u")return;const e=document.cookie.split(";").map((t=>t.trim().split("="))).find((e=>e[0]===t));return e||void 0})(e);return n?JSON.parse(n[1]):t?t():void 0},e=({consent:t,maxAge:e=10368e3,name:n,domain:o,path:s})=>{document.cookie=[`${n}=${JSON.stringify(t)}`,`max-age=${e}`,"SameSite=Lax",!!o&&`domain=${o}`,!!s&&`path=${s}`].filter((t=>t)).join(";")},n=(t,e)=>{if(!e)return Object.values(t).some((t=>t));const n=new Map(Object.entries(e)),o=Object.entries(t);for(const[t,e]of o)if(e&&null===n.get(t))return!0;return!1},o=t=>typeof t>"u"?null:!1===t||"false"===String(t).toLowerCase()?"denied":"accepted",s=(t,e)=>({functional:e.functional?o(t.functional):void 0,statistics:e.statistics?o(t.statistics):void 0}),i=({functional:t,statistics:e})=>({...t&&{functional:t},...e&&{statistics:e}});export{i as buildRequirementsObject,s as convertBooleanConsentObjectToConsentObject,o as convertBooleanToConsentValue,t as getConsentCookie,e as setConsentCookie,n as shouldShowConsentDialog};
1
+ const t=({adapter:t,name:e})=>{const n=(t=>{if(typeof document>"u")return;const e=document.cookie.split(";").map(t=>t.trim().split("=")).find(e=>e[0]===t);return e||void 0})(e);return n?JSON.parse(n[1]):t?t():void 0},e=({consent:t,maxAge:e=10368e3,name:n,domain:o,path:s})=>{document.cookie=[`${n}=${JSON.stringify(t)}`,`max-age=${e}`,"SameSite=Lax",!!o&&`domain=${o}`,!!s&&`path=${s}`].filter(t=>t).join(";")},n=(t,e)=>{if(!e)return Object.values(t).some(t=>t);const n=new Map(Object.entries(e)),o=Object.entries(t);for(const[t,e]of o)if(e&&null===n.get(t))return!0;return!1},o=t=>typeof t>"u"?null:!1===t||"false"===String(t).toLowerCase()?"denied":"accepted",s=(t,e)=>({functional:e.functional?o(t.functional):void 0,statistics:e.statistics?o(t.statistics):void 0}),i=({functional:t,statistics:e})=>({...t&&{functional:t},...e&&{statistics:e}});export{i as buildRequirementsObject,s as convertBooleanConsentObjectToConsentObject,o as convertBooleanToConsentValue,t as getConsentCookie,e as setConsentCookie,n as shouldShowConsentDialog};
2
2
  //# sourceMappingURL=cookieConsentUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cookieConsentUtils.js","sources":["../../../../src/components/cookie-consent/cookieConsentUtils.ts"],"sourcesContent":["import type { Consent, ConsentRequirement, ConsentState } from \"./types.js\";\n\nconst getCookie = (name: string) => {\n if (typeof document === \"undefined\") {\n return undefined;\n }\n\n const cookie = document.cookie\n // split a string of cookies into array of cookies\n .split(\";\")\n // split cookies into [name, value]\n .map((s) => s.trim().split(\"=\"))\n // find our golden nugget\n .find((c) => c[0] === name);\n\n if (!cookie) {\n return undefined;\n }\n\n return cookie;\n};\n\nexport const getConsentCookie = ({\n adapter,\n name,\n}: {\n adapter?: () => Consent | undefined;\n name: string;\n}): Consent | undefined => {\n const cookie = getCookie(name);\n\n if (cookie) {\n const consent = JSON.parse(cookie[1]);\n\n return consent as Consent;\n }\n\n if (adapter) {\n return adapter();\n }\n\n return undefined;\n};\n\n// 120 days\nconst DEFAULT_MAX_AGE = 10368000;\n\nexport const setConsentCookie = ({\n consent,\n maxAge = DEFAULT_MAX_AGE,\n name,\n domain,\n path,\n}: {\n consent: Consent;\n maxAge?: number;\n name: string;\n domain?: string;\n path?: string;\n}): void => {\n document.cookie = [\n `${name}=${JSON.stringify(consent)}`,\n `max-age=${maxAge}`,\n \"SameSite=Lax\",\n !!domain && `domain=${domain}`,\n !!path && `path=${path}`,\n ]\n .filter((f) => f)\n .join(\";\");\n};\n\nexport const shouldShowConsentDialog = (\n requirement: ConsentRequirement,\n consent: Consent | undefined,\n): boolean => {\n if (!consent) {\n // check if requirement has truthy values. should show consent if it has\n return Object.values(requirement).some(\n (requirementValue) => requirementValue,\n );\n }\n\n // convert to a map to ease accessing dynamic keys\n const consentMap = new Map(Object.entries(consent));\n\n // pls spare the CPU of converting to an entries array 3 times\n const requirementEntries = Object.entries(requirement);\n\n for (const [name, required] of requirementEntries) {\n // no need to check more if the value isn't required\n if (!required) {\n continue;\n }\n\n // cancel and show consent if a value isn't decided\n if (consentMap.get(name) === null) {\n return true;\n }\n }\n\n return false;\n};\n\nexport const convertBooleanToConsentValue = (\n formValue: boolean | undefined,\n): ConsentState => {\n if (typeof formValue === \"undefined\") {\n return null;\n }\n\n if (formValue === false || String(formValue).toLowerCase() === \"false\") {\n return \"denied\";\n }\n\n return \"accepted\";\n};\n\nexport const convertBooleanConsentObjectToConsentObject = (\n consent: Partial<Record<keyof Consent, boolean | undefined>>,\n requirement: ConsentRequirement,\n): Consent => {\n return {\n functional: requirement.functional\n ? convertBooleanToConsentValue(consent.functional)\n : undefined,\n statistics: requirement.statistics\n ? convertBooleanToConsentValue(consent.statistics)\n : undefined,\n };\n};\n\nexport const buildRequirementsObject = ({\n functional,\n statistics,\n}: ConsentRequirement) => {\n return {\n ...(functional && { functional }),\n ...(statistics && { statistics }),\n };\n};\n"],"names":["getConsentCookie","adapter","name","cookie","document","split","map","s","trim","find","c","getCookie","JSON","parse","setConsentCookie","consent","maxAge","domain","path","stringify","filter","f","join","shouldShowConsentDialog","requirement","Object","values","some","requirementValue","consentMap","Map","entries","requirementEntries","required","get","convertBooleanToConsentValue","formValue","String","toLowerCase","convertBooleanConsentObjectToConsentObject","functional","statistics","buildRequirementsObject"],"mappings":"AAEA,MAoBaA,EAAmB,EAC5BC,QAAAA,EACAC,KAAAA,MAKMC,MAAAA,EA3BQ,CAACD,IACX,UAAOE,SAAa,IACb,OAGLD,MAAAA,EAASC,SAASD,OAEnBE,MAAM,KAENC,KAAKC,GAAMA,EAAEC,OAAOH,MAAM,OAE1BI,MAAMC,GAAMA,EAAE,KAAOR,IAErBC,OAAAA,QAAAA,CAIEA,EAUQQ,CAAUT,GAErBC,OAAAA,EACgBS,KAAKC,MAAMV,EAAO,IAKlCF,EACOA,SADPA,CACe,EASVa,EAAmB,EAC5BC,QAAAA,EACAC,OAAAA,EAAS,QACTd,KAAAA,EACAe,OAAAA,EACAC,KAAAA,MAQAd,SAASD,OAAS,CACd,GAAGD,KAAQU,KAAKO,UAAUJ,KAC1B,WAAWC,IACX,iBACEC,GAAU,UAAUA,MACpBC,GAAQ,QAAQA,KAEjBE,QAAQC,GAAMA,IACdC,KAAK,IAAG,EAGJC,EAA0B,CACnCC,EACAT,KAEA,IAAKA,EAEM,OAAAU,OAAOC,OAAOF,GAAaG,MAC7BC,GAAqBA,IAKxBC,MAAAA,EAAa,IAAIC,IAAIL,OAAOM,QAAQhB,IAGpCiB,EAAqBP,OAAOM,QAAQP,GAE/B,IAAA,MAACtB,EAAM+B,KAAaD,EAE3B,GAAKC,GAKwB,OAAzBJ,EAAWK,IAAIhC,GACR,OAAA,EAIR,OAAA,CAAA,EAGEiC,EACTC,UAEWA,EAAc,IACd,MAGO,IAAdA,GAA2D,UAApCC,OAAOD,GAAWE,cAClC,SAGJ,WAGEC,EAA6C,CACtDxB,EACAS,KAEO,CACHgB,WAAYhB,EAAYgB,WAClBL,EAA6BpB,EAAQyB,iBACrC,EACNC,WAAYjB,EAAYiB,WAClBN,EAA6BpB,EAAQ0B,iBACrC,IAIDC,EAA0B,EACnCF,WAAAA,EACAC,WAAAA,MAEO,IACCD,GAAc,CAAEA,WAAAA,MAChBC,GAAc,CAAEA,WAAAA"}
1
+ {"version":3,"file":"cookieConsentUtils.js","sources":["../../../../src/components/cookie-consent/cookieConsentUtils.ts"],"sourcesContent":["import type { Consent, ConsentRequirement, ConsentState } from \"./types.js\";\n\nconst getCookie = (name: string) => {\n if (typeof document === \"undefined\") {\n return undefined;\n }\n\n const cookie = document.cookie\n // split a string of cookies into array of cookies\n .split(\";\")\n // split cookies into [name, value]\n .map((s) => s.trim().split(\"=\"))\n // find our golden nugget\n .find((c) => c[0] === name);\n\n if (!cookie) {\n return undefined;\n }\n\n return cookie;\n};\n\nexport const getConsentCookie = ({\n adapter,\n name,\n}: {\n adapter?: () => Consent | undefined;\n name: string;\n}): Consent | undefined => {\n const cookie = getCookie(name);\n\n if (cookie) {\n const consent = JSON.parse(cookie[1]);\n\n return consent as Consent;\n }\n\n if (adapter) {\n return adapter();\n }\n\n return undefined;\n};\n\n// 120 days\nconst DEFAULT_MAX_AGE = 10368000;\n\nexport const setConsentCookie = ({\n consent,\n maxAge = DEFAULT_MAX_AGE,\n name,\n domain,\n path,\n}: {\n consent: Consent;\n maxAge?: number;\n name: string;\n domain?: string;\n path?: string;\n}): void => {\n document.cookie = [\n `${name}=${JSON.stringify(consent)}`,\n `max-age=${maxAge}`,\n \"SameSite=Lax\",\n !!domain && `domain=${domain}`,\n !!path && `path=${path}`,\n ]\n .filter((f) => f)\n .join(\";\");\n};\n\nexport const shouldShowConsentDialog = (\n requirement: ConsentRequirement,\n consent: Consent | undefined,\n): boolean => {\n if (!consent) {\n // check if requirement has truthy values. should show consent if it has\n return Object.values(requirement).some(\n (requirementValue) => requirementValue,\n );\n }\n\n // convert to a map to ease accessing dynamic keys\n const consentMap = new Map(Object.entries(consent));\n\n // pls spare the CPU of converting to an entries array 3 times\n const requirementEntries = Object.entries(requirement);\n\n for (const [name, required] of requirementEntries) {\n // no need to check more if the value isn't required\n if (!required) {\n continue;\n }\n\n // cancel and show consent if a value isn't decided\n if (consentMap.get(name) === null) {\n return true;\n }\n }\n\n return false;\n};\n\nexport const convertBooleanToConsentValue = (\n formValue: boolean | undefined,\n): ConsentState => {\n if (typeof formValue === \"undefined\") {\n return null;\n }\n\n if (formValue === false || String(formValue).toLowerCase() === \"false\") {\n return \"denied\";\n }\n\n return \"accepted\";\n};\n\nexport const convertBooleanConsentObjectToConsentObject = (\n consent: Partial<Record<keyof Consent, boolean | undefined>>,\n requirement: ConsentRequirement,\n): Consent => {\n return {\n functional: requirement.functional\n ? convertBooleanToConsentValue(consent.functional)\n : undefined,\n statistics: requirement.statistics\n ? convertBooleanToConsentValue(consent.statistics)\n : undefined,\n };\n};\n\nexport const buildRequirementsObject = ({\n functional,\n statistics,\n}: ConsentRequirement) => {\n return {\n ...(functional && { functional }),\n ...(statistics && { statistics }),\n };\n};\n"],"names":["getConsentCookie","adapter","name","cookie","document","split","map","s","trim","find","c","getCookie","JSON","parse","setConsentCookie","consent","maxAge","domain","path","stringify","filter","f","join","shouldShowConsentDialog","requirement","Object","values","some","requirementValue","consentMap","Map","entries","requirementEntries","required","get","convertBooleanToConsentValue","formValue","String","toLowerCase","convertBooleanConsentObjectToConsentObject","functional","statistics","buildRequirementsObject"],"mappings":"AAEA,MAoBaA,EAAmB,EAC5BC,QAAAA,EACAC,KAAAA,MAKA,MAAMC,EA3BQ,CAACD,IACf,UAAWE,SAAa,IACpB,OAGJ,MAAMD,EAASC,SAASD,OAEnBE,MAAM,KAENC,IAAKC,GAAMA,EAAEC,OAAOH,MAAM,MAE1BI,KAAMC,GAAMA,EAAE,KAAOR,GAE1B,OAAKC,QAAL,GAceQ,CAAUT,GAEzB,OAAIC,EACgBS,KAAKC,MAAMV,EAAO,IAKlCF,EACOA,SADX,GAUSa,EAAmB,EAC5BC,QAAAA,EACAC,OAAAA,EAAS,QACTd,KAAAA,EACAe,OAAAA,EACAC,KAAAA,MAQAd,SAASD,OAAS,CACd,GAAGD,KAAQU,KAAKO,UAAUJ,KAC1B,WAAWC,IACX,iBACEC,GAAU,UAAUA,MACpBC,GAAQ,QAAQA,KAEjBE,OAAQC,GAAMA,GACdC,KAAK,MAGDC,EAA0B,CACnCC,EACAT,KAEA,IAAKA,EAED,OAAOU,OAAOC,OAAOF,GAAaG,KAC7BC,GAAqBA,GAK9B,MAAMC,EAAa,IAAIC,IAAIL,OAAOM,QAAQhB,IAGpCiB,EAAqBP,OAAOM,QAAQP,GAE1C,IAAA,MAAYtB,EAAM+B,KAAaD,EAE3B,GAAKC,GAKwB,OAAzBJ,EAAWK,IAAIhC,GACf,OAAO,EAIf,OAAO,GAGEiC,EACTC,UAEWA,EAAc,IACd,MAGO,IAAdA,GAA2D,UAApCC,OAAOD,GAAWE,cAClC,SAGJ,WAGEC,EAA6C,CACtDxB,EACAS,KAAAA,CAGIgB,WAAYhB,EAAYgB,WAClBL,EAA6BpB,EAAQyB,iBACrC,EACNC,WAAYjB,EAAYiB,WAClBN,EAA6BpB,EAAQ0B,iBACrC,IAIDC,EAA0B,EACnCF,WAAAA,EACAC,WAAAA,MACJ,IAEYD,GAAc,CAAEA,WAAAA,MAChBC,GAAc,CAAEA,WAAAA"}
@@ -1,2 +1,2 @@
1
- import{jsxs as t,jsx as s}from"react/jsx-runtime";import{useState as e,useEffect as a}from"react";const o=({className:o,from:n,isPaused:r,...c})=>{const[l,d]=e(Math.floor(n/1e3));return a((()=>{l<=0||setTimeout((()=>{r||d((t=>t-1))}),1e3)}),[r,l]),t("div",{className:`jkl-countdown ${o??""}`,role:"timer","data-testid":"jkl-countdown",...c,children:[s("span",{className:"jkl-countdown__tracker",role:"presentation",style:{"--duration":`${n}ms`,"--play-state":r?"paused":"running"},"data-testid":"jkl-countdown__tracker"}),s("span",{className:"jkl-sr-only",children:l})]})};export{o as Countdown};
1
+ import{jsxs as t,jsx as s}from"react/jsx-runtime";import{useState as e,useEffect as a}from"react";const o=({className:o,from:n,isPaused:r,...c})=>{const[l,d]=e(Math.floor(n/1e3));return a(()=>{l<=0||setTimeout(()=>{r||d(t=>t-1)},1e3)},[r,l]),t("div",{className:`jkl-countdown ${o??""}`,role:"timer","data-testid":"jkl-countdown",...c,children:[s("span",{className:"jkl-countdown__tracker",role:"presentation",style:{"--duration":`${n}ms`,"--play-state":r?"paused":"running"},"data-testid":"jkl-countdown__tracker"}),s("span",{className:"jkl-sr-only",children:l})]})};export{o as Countdown};
2
2
  //# sourceMappingURL=Countdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Countdown.js","sources":["../../../../src/components/countdown/Countdown.tsx"],"sourcesContent":["import React, { useState, type CSSProperties, type FC, useEffect } from \"react\";\nimport type { CountdownProps } from \"./types.js\";\n\nexport const Countdown: FC<CountdownProps> = ({\n className,\n from,\n isPaused,\n ...rest\n}) => {\n const [remainingSeconds, setRemainingSeconds] = useState(\n Math.floor(from / 1000),\n );\n\n useEffect(() => {\n if (remainingSeconds <= 0) {\n return;\n }\n\n setTimeout(() => {\n if (!isPaused) {\n setRemainingSeconds((sec) => sec - 1);\n }\n }, 1000);\n }, [isPaused, remainingSeconds]);\n\n return (\n <div\n className={`jkl-countdown ${className ?? \"\"}`}\n role=\"timer\"\n data-testid=\"jkl-countdown\"\n {...rest}\n >\n <span\n className=\"jkl-countdown__tracker\"\n role=\"presentation\"\n style={\n {\n \"--duration\": `${from}ms`,\n \"--play-state\": isPaused ? \"paused\" : \"running\",\n } as CSSProperties\n }\n data-testid=\"jkl-countdown__tracker\"\n />\n <span className=\"jkl-sr-only\">{remainingSeconds}</span>\n </div>\n );\n};\n"],"names":["Countdown","className","from","isPaused","rest","remainingSeconds","setRemainingSeconds","useState","Math","floor","useEffect","setTimeout","sec","jsxs","role","children","jsx","style"],"mappings":"kGAGO,MAAMA,EAAgC,EACzCC,UAAAA,EACAC,KAAAA,EACAC,SAAAA,KACGC,MAEG,MAACC,EAAkBC,GAAuBC,EAC5CC,KAAKC,MAAMP,EAAO,MAGtB,OAAAQ,GAAU,KACFL,GAAoB,GAIxBM,YAAW,KACFR,GACmBG,GAACM,GAAQA,EAAM,GAAC,GAEzC,IAAI,GACR,CAACT,EAAUE,IAGVQ,EAAC,MAAA,CACGZ,UAAW,iBAAiBA,GAAa,KACzCa,KAAK,QACL,cAAY,mBACRV,EAEJW,SAAA,CAAAC,EAAC,OAAA,CACGf,UAAU,yBACVa,KAAK,eACLG,MACI,CACI,aAAc,GAAGf,MACjB,eAAgBC,EAAW,SAAW,WAG9C,cAAY,2BAEfa,EAAA,OAAA,CAAKf,UAAU,cAAec,SAAiBV,MACpD"}
1
+ {"version":3,"file":"Countdown.js","sources":["../../../../src/components/countdown/Countdown.tsx"],"sourcesContent":["import React, { useState, type CSSProperties, type FC, useEffect } from \"react\";\nimport type { CountdownProps } from \"./types.js\";\n\nexport const Countdown: FC<CountdownProps> = ({\n className,\n from,\n isPaused,\n ...rest\n}) => {\n const [remainingSeconds, setRemainingSeconds] = useState(\n Math.floor(from / 1000),\n );\n\n useEffect(() => {\n if (remainingSeconds <= 0) {\n return;\n }\n\n setTimeout(() => {\n if (!isPaused) {\n setRemainingSeconds((sec) => sec - 1);\n }\n }, 1000);\n }, [isPaused, remainingSeconds]);\n\n return (\n <div\n className={`jkl-countdown ${className ?? \"\"}`}\n role=\"timer\"\n data-testid=\"jkl-countdown\"\n {...rest}\n >\n <span\n className=\"jkl-countdown__tracker\"\n role=\"presentation\"\n style={\n {\n \"--duration\": `${from}ms`,\n \"--play-state\": isPaused ? \"paused\" : \"running\",\n } as CSSProperties\n }\n data-testid=\"jkl-countdown__tracker\"\n />\n <span className=\"jkl-sr-only\">{remainingSeconds}</span>\n </div>\n );\n};\n"],"names":["Countdown","className","from","isPaused","rest","remainingSeconds","setRemainingSeconds","useState","Math","floor","useEffect","setTimeout","sec","jsxs","role","children","jsx","style"],"mappings":"kGAGO,MAAMA,EAAgC,EACzCC,UAAAA,EACAC,KAAAA,EACAC,SAAAA,KACGC,MAEH,MAAOC,EAAkBC,GAAuBC,EAC5CC,KAAKC,MAAMP,EAAO,MAGtB,OAAAQ,EAAU,KACFL,GAAoB,GAIxBM,WAAW,KACFR,GACDG,EAAqBM,GAAQA,EAAM,IAExC,MACJ,CAACT,EAAUE,IAGVQ,EAAC,MAAA,CACGZ,UAAW,iBAAiBA,GAAa,KACzCa,KAAK,QACL,cAAY,mBACRV,EAEJW,SAAA,CAAAC,EAAC,OAAA,CACGf,UAAU,yBACVa,KAAK,eACLG,MACI,CACI,aAAc,GAAGf,MACjB,eAAgBC,EAAW,SAAW,WAG9C,cAAY,2BAEhBa,EAAC,OAAA,CAAKf,UAAU,cAAec,SAAAV"}
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as t}from"react/jsx-runtime";import{c as a}from"../../../clsx-BeLtu-UY.js";import{startOfDay as r}from"date-fns";import{forwardRef as o,useState as n,useRef as l,useCallback as s}from"react";import{flushSync as i}from"react-dom";import{IconButton as u}from"../icon-button/IconButton.js";import{CalendarIcon as d}from"../icon/icons/CalendarIcon.js";import{InputGroup as c}from"../input-group/InputGroup.js";import{Popover as p}from"../popover/Popover.js";import{BaseTextInput as m}from"../text-input/BaseTextInput.js";import{Calendar as f}from"./internal/Calendar.js";import{getInitialDate as v}from"./internal/utils.js";import{parseDateString as h,formatInput as b}from"./utils.js";import{isWithinLowerBound as k,isWithinUpperBound as D}from"./validation.js";const g=o(((o,g)=>{const{"data-testautoid":y,id:j,className:L="",label:w="Velg dato",labelProps:C,defaultValue:I,defaultShow:x=!1,value:P,disableBeforeDate:B,disableAfterDate:_,yearsToShow:E,name:O,helpLabel:T,errorLabel:N,invalid:S,density:R,days:U,months:V,monthLabel:F,yearLabel:K,placeholder:W="dd.mm.åååå",width:A="11.25rem",onChange:G,onBlur:q,onFocus:H,onKeyDown:M,action:z,showCalendarLabel:J="Åpne kalender",hideCalendarLabel:Q="Lukk kalender",supportLabelProps:X,tooltip:Y,textInputProps:Z,description:$,...ee}=o;"production"!==process.env.NODE_ENV&&P&&I&&console.warn("DatePicker må enten være controlled eller uncontrolled. Hvis du bruker defaultValue og value sammen vil defaultValue bli ignorert.");const te=h(B),ae=te?r(te):void 0,re=h(_),oe=re?r(re):void 0,[ne,le]=n(v(P,I,ae,oe)),[se,ie]=n(null),[ue,de]=n(x),ce=l(null),pe=l(null),me=l(null),fe=l(null),ve=s((e=>{fe.current=e,g&&("function"==typeof g?g(e):g.current=e)}),[g]),he=s((e=>{H&&pe.current&&(pe.current.contains(e.relatedTarget)||H(e,ne,{error:se,value:e.target.value}))}),[H,ne,se]),be=s((e=>{q&&q(e,ne,{error:se,value:e.target.value})}),[q,ne,se]),ke=s((e=>{"Escape"===e.key&&(de(!1),e.preventDefault(),e.stopPropagation()),z?.onKeyDown&&z.onKeyDown(e)}),[z]),De=s((e=>{let t=null,a=null;if(e.target.value){const r=h(e.target.value);r?ae&&!k(r,ae)?a="OUTSIDE_LOWER_BOUND":oe&&!D(r,oe)?a="OUTSIDE_UPPER_BOUND":de(!1):a="WRONG_FORMAT",t=r||null}ie(a),le(t),G&&G(e,t,{error:a,value:e.target.value})}),[G,ae,oe]),ge=s((e=>{i((()=>{de(!ue)}));const t=ce.current,a=t&&t.querySelector('[aria-pressed="true"]');window.requestAnimationFrame((()=>a?.focus())),z?.onClick&&z.onClick(e)}),[ue,z]),ye=s((({date:e})=>{if(de(!1),le(e),fe.current){const t=fe.current;t.value=b(e);const a=document.createEvent("HTMLEvents");a.initEvent("input",!0,!1),t.dispatchEvent(a),t.focus(),G&&G(a,e,{error:null,value:t.value})}}),[G]),je=s((e=>{e.preventDefault(),de(!1),me.current?.focus()}),[]);return e(c,{id:j,className:a("jkl-datepicker",L),...ee,ref:pe,label:w,labelProps:C,density:R,helpLabel:T,errorLabel:N,supportLabelProps:X,tooltip:Y,description:$,render:a=>e(m,{"data-focused":ue?"true":void 0,ref:ve,"data-testid":"jkl-datepicker__input","data-testautoid":y,className:"jkl-datepicker__input",name:O,defaultValue:I,density:R,value:P,type:"text",placeholder:W,width:A,onFocus:he,onBlur:be,onChange:De,actionButton:t(p,{positionReference:fe,open:ue,onOpenChange:()=>de(!ue),offset:8,children:[e(p.Trigger,{...z,"data-testid":"jkl-datepicker__trigger",className:"jkl-text-input-action-button",title:ue?Q:J,tabIndex:0,onClick:ge,onKeyDown:ke,asChild:!0,children:e(u,{children:e(d,{})})}),e(p.Content,{initialFocus:-1,padding:24,children:e(f,{ref:ce,density:R,date:ne,minDate:ae,maxDate:oe,days:U,months:V,monthLabel:F,yearLabel:K,yearsToShow:E,onDateSelected:ye,onTabOutside:je})})]}),...Z,...a,"aria-invalid":S||!!N})})}));g.displayName="DatePicker";export{g as DatePicker};
1
+ import{jsx as e,jsxs as t}from"react/jsx-runtime";import{c as a}from"../../../clsx-BeLtu-UY.js";import{startOfDay as r}from"date-fns";import{forwardRef as o,useState as n,useRef as l,useCallback as s}from"react";import{flushSync as i}from"react-dom";import{IconButton as u}from"../icon-button/IconButton.js";import{CalendarIcon as d}from"../icon/icons/CalendarIcon.js";import{InputGroup as c}from"../input-group/InputGroup.js";import{Popover as p}from"../popover/Popover.js";import{BaseTextInput as m}from"../text-input/BaseTextInput.js";import{Calendar as f}from"./internal/Calendar.js";import{getInitialDate as v}from"./internal/utils.js";import{parseDateString as h,formatInput as b}from"./utils.js";import{isWithinLowerBound as k,isWithinUpperBound as D}from"./validation.js";const g=o((o,g)=>{const{"data-testautoid":y,id:j,className:L="",label:w="Velg dato",labelProps:C,defaultValue:I,defaultShow:x=!1,value:P,disableBeforeDate:B,disableAfterDate:_,yearsToShow:E,name:O,helpLabel:T,errorLabel:N,invalid:S,density:R,days:U,months:V,monthLabel:F,yearLabel:K,placeholder:W="dd.mm.åååå",width:A="11.25rem",onChange:G,onBlur:q,onFocus:H,onKeyDown:M,action:z,showCalendarLabel:J="Åpne kalender",hideCalendarLabel:Q="Lukk kalender",supportLabelProps:X,tooltip:Y,textInputProps:Z,description:$,...ee}=o;"production"!==process.env.NODE_ENV&&P&&I&&console.warn("DatePicker må enten være controlled eller uncontrolled. Hvis du bruker defaultValue og value sammen vil defaultValue bli ignorert.");const te=h(B),ae=te?r(te):void 0,re=h(_),oe=re?r(re):void 0,[ne,le]=n(v(P,I,ae,oe)),[se,ie]=n(null),[ue,de]=n(x),ce=l(null),pe=l(null),me=l(null),fe=l(null),ve=s(e=>{fe.current=e,g&&("function"==typeof g?g(e):g.current=e)},[g]),he=s(e=>{H&&pe.current&&(pe.current.contains(e.relatedTarget)||H(e,ne,{error:se,value:e.target.value}))},[H,ne,se]),be=s(e=>{q&&q(e,ne,{error:se,value:e.target.value})},[q,ne,se]),ke=s(e=>{"Escape"===e.key&&(de(!1),e.preventDefault(),e.stopPropagation()),z?.onKeyDown&&z.onKeyDown(e)},[z]),De=s(e=>{let t=null,a=null;if(e.target.value){const r=h(e.target.value);r?ae&&!k(r,ae)?a="OUTSIDE_LOWER_BOUND":oe&&!D(r,oe)?a="OUTSIDE_UPPER_BOUND":de(!1):a="WRONG_FORMAT",t=r||null}ie(a),le(t),G&&G(e,t,{error:a,value:e.target.value})},[G,ae,oe]),ge=s(e=>{i(()=>{de(!ue)});const t=ce.current,a=t&&t.querySelector('[aria-pressed="true"]');window.requestAnimationFrame(()=>a?.focus()),z?.onClick&&z.onClick(e)},[ue,z]),ye=s(({date:e})=>{if(de(!1),le(e),fe.current){const t=fe.current;t.value=b(e);const a=document.createEvent("HTMLEvents");a.initEvent("input",!0,!1),t.dispatchEvent(a),t.focus(),G&&G(a,e,{error:null,value:t.value})}},[G]),je=s(e=>{e.preventDefault(),de(!1),me.current?.focus()},[]);return e(c,{id:j,className:a("jkl-datepicker",L),...ee,ref:pe,label:w,labelProps:C,density:R,helpLabel:T,errorLabel:N,supportLabelProps:X,tooltip:Y,description:$,render:a=>e(m,{"data-focused":ue?"true":void 0,ref:ve,"data-testid":"jkl-datepicker__input","data-testautoid":y,className:"jkl-datepicker__input",name:O,defaultValue:I,density:R,value:P,type:"text",placeholder:W,width:A,onFocus:he,onBlur:be,onChange:De,actionButton:t(p,{positionReference:fe,open:ue,onOpenChange:()=>de(!ue),offset:8,children:[e(p.Trigger,{...z,"data-testid":"jkl-datepicker__trigger",className:"jkl-text-input-action-button",title:ue?Q:J,tabIndex:0,onClick:ge,onKeyDown:ke,asChild:!0,children:e(u,{children:e(d,{})})}),e(p.Content,{initialFocus:-1,padding:24,children:e(f,{ref:ce,density:R,date:ne,minDate:ae,maxDate:oe,days:U,months:V,monthLabel:F,yearLabel:K,yearsToShow:E,onDateSelected:ye,onTabOutside:je})})]}),...Z,...a,"aria-invalid":S||!!N})})});g.displayName="DatePicker";export{g as DatePicker};
2
2
  //# sourceMappingURL=DatePicker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker.js","sources":["../../../../src/components/datepicker/DatePicker.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { startOfDay } from \"date-fns\";\nimport React, {\n type ChangeEvent,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n forwardRef,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { IconButton } from \"../icon-button/IconButton.js\";\nimport { CalendarIcon } from \"../icon/icons/CalendarIcon.js\";\nimport { InputGroup } from \"../input-group/InputGroup.js\";\nimport Popover from \"../popover/Popover.js\";\nimport { BaseTextInput } from \"../text-input/BaseTextInput.js\";\nimport { Calendar } from \"./internal/Calendar.js\";\nimport { type DateInfo, getInitialDate } from \"./internal/utils.js\";\nimport type { DatePickerProps, DateValidationError } from \"./types.js\";\nimport { formatInput, parseDateString } from \"./utils.js\";\nimport { isWithinLowerBound, isWithinUpperBound } from \"./validation.js\";\n\nexport const DatePicker = forwardRef<HTMLInputElement, DatePickerProps>(\n (props, forwardedInputRef) => {\n const {\n \"data-testautoid\": testAutoId,\n id,\n className = \"\",\n label = \"Velg dato\",\n labelProps,\n defaultValue,\n defaultShow = false,\n value,\n disableBeforeDate: disableBefore,\n disableAfterDate: disableAfter,\n yearsToShow,\n name,\n helpLabel,\n errorLabel,\n invalid,\n density,\n days,\n months,\n monthLabel,\n yearLabel,\n placeholder = \"dd.mm.åååå\",\n width = \"11.25rem\",\n onChange,\n onBlur,\n onFocus,\n onKeyDown,\n action,\n showCalendarLabel = \"Åpne kalender\",\n hideCalendarLabel = \"Lukk kalender\",\n supportLabelProps,\n tooltip,\n textInputProps,\n description,\n ...rest\n } = props;\n\n if (process.env.NODE_ENV !== \"production\" && value && defaultValue) {\n console.warn(\n \"DatePicker må enten være controlled eller uncontrolled. Hvis du bruker defaultValue og value sammen vil defaultValue bli ignorert.\",\n );\n }\n /// Input state\n\n const disableBeforeDate = parseDateString(disableBefore);\n const minDate = disableBeforeDate\n ? startOfDay(disableBeforeDate)\n : undefined;\n const disableAfterDate = parseDateString(disableAfter);\n const maxDate = disableAfterDate\n ? startOfDay(disableAfterDate)\n : undefined;\n\n const [date, setDate] = useState(\n getInitialDate(value, defaultValue, minDate, maxDate),\n );\n const [error, setError] = useState<DateValidationError | null>(null);\n\n /// Calendar state\n\n const [showCalendar, setShowCalendar] = useState(defaultShow);\n\n const calendarRef = useRef<HTMLDivElement>(null);\n const datepickerRef = useRef<HTMLDivElement>(null);\n\n /// Input events\n\n const iconButtonRef = useRef<HTMLButtonElement | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n // Hjelper for å gjøre det enklere å både forwarde refen men også bruke den selv internt\n const unifiedInputRef = useCallback(\n (instance: HTMLInputElement | null) => {\n inputRef.current = instance;\n if (forwardedInputRef) {\n if (typeof forwardedInputRef === \"function\") {\n forwardedInputRef(instance);\n } else {\n forwardedInputRef.current = instance;\n }\n }\n },\n [forwardedInputRef],\n );\n\n const handleFocus = useCallback(\n (e: FocusEvent<HTMLInputElement>) => {\n if (!onFocus || !datepickerRef.current) {\n return;\n }\n\n const nextFocusIsInside = datepickerRef.current.contains(\n e.relatedTarget as Node,\n );\n if (!nextFocusIsInside) {\n onFocus(e, date, { error, value: e.target.value });\n }\n },\n [onFocus, date, error],\n );\n\n const handleBlur = useCallback(\n (e: FocusEvent<HTMLInputElement>) => {\n if (onBlur) {\n onBlur(e, date, { error, value: e.target.value });\n }\n },\n [onBlur, date, error],\n );\n\n const handleKeyDownAction = useCallback(\n (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"Escape\") {\n setShowCalendar(false);\n e.preventDefault();\n e.stopPropagation();\n }\n\n if (action?.onKeyDown) {\n action.onKeyDown(e);\n }\n },\n [action],\n );\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n let nextDate: Date | null = null;\n let nextError: DateValidationError | null = null;\n\n if (e.target.value) {\n const val = parseDateString(e.target.value);\n if (!val) {\n nextError = \"WRONG_FORMAT\";\n } else if (minDate && !isWithinLowerBound(val, minDate)) {\n nextError = \"OUTSIDE_LOWER_BOUND\";\n } else if (maxDate && !isWithinUpperBound(val, maxDate)) {\n nextError = \"OUTSIDE_UPPER_BOUND\";\n } else {\n setShowCalendar(false);\n }\n nextDate = val || null;\n }\n\n setError(nextError);\n setDate(nextDate);\n\n if (onChange) {\n onChange(e, nextDate, {\n error: nextError,\n value: e.target.value,\n });\n }\n },\n [onChange, minDate, maxDate],\n );\n\n /// Calendar events\n\n const clickCalendar = useCallback(\n (e: MouseEvent<HTMLButtonElement>) => {\n flushSync(() => {\n setShowCalendar(!showCalendar);\n });\n\n const calendarEl = calendarRef.current;\n const button =\n calendarEl &&\n (calendarEl.querySelector(\n '[aria-pressed=\"true\"]',\n ) as HTMLButtonElement);\n // Make sure the popover-modal is correctly positioned before focusing a button\n // so we avoid accidentally scrolling to the top of the page\n window.requestAnimationFrame(() => button?.focus());\n\n if (action?.onClick) {\n action.onClick(e);\n }\n },\n [showCalendar, action],\n );\n\n const handleClickCalendarDay = useCallback(\n ({ date }: DateInfo) => {\n setShowCalendar(false);\n setDate(date);\n\n if (inputRef.current) {\n const node = inputRef.current;\n\n node.value = formatInput(date);\n\n // Simulér et change-event så APIet blir så likt som mulig en endring av inputfeltet\n const event = document.createEvent(\"HTMLEvents\");\n event.initEvent(\"input\", true, false);\n node.dispatchEvent(event);\n\n node.focus();\n\n if (onChange) {\n // Det er ikke helt sant at dette er et React.SyntheticEvent, men it's fine – probably?\n // Den har tingene man kan forvente, men hvis du gjør serdeles fancy ting med events\n // så kan det hende du må utvide denne for å dekke behovet ditt.\n onChange(\n event as unknown as ChangeEvent<HTMLInputElement>,\n date,\n {\n error: null,\n value: node.value,\n },\n );\n }\n }\n },\n [onChange],\n );\n\n const handleTabOutsideCalendar = useCallback((e: KeyboardEvent) => {\n e.preventDefault();\n setShowCalendar(false);\n iconButtonRef.current?.focus();\n }, []);\n\n return (\n <InputGroup\n id={id}\n className={clsx(\"jkl-datepicker\", className)}\n {...rest}\n ref={datepickerRef}\n label={label}\n labelProps={labelProps}\n density={density}\n helpLabel={helpLabel}\n errorLabel={errorLabel}\n supportLabelProps={supportLabelProps}\n tooltip={tooltip}\n description={description}\n render={(inputProps) => (\n <BaseTextInput\n data-focused={showCalendar ? \"true\" : undefined}\n ref={unifiedInputRef}\n data-testid=\"jkl-datepicker__input\"\n data-testautoid={testAutoId}\n className=\"jkl-datepicker__input\"\n name={name}\n defaultValue={defaultValue}\n density={density}\n value={value}\n type=\"text\"\n placeholder={placeholder}\n width={width}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n actionButton={\n <Popover\n positionReference={inputRef}\n open={showCalendar}\n onOpenChange={() =>\n setShowCalendar(!showCalendar)\n }\n offset={8}\n >\n <Popover.Trigger\n {...action}\n data-testid=\"jkl-datepicker__trigger\"\n className=\"jkl-text-input-action-button\"\n title={\n showCalendar\n ? hideCalendarLabel\n : showCalendarLabel\n }\n tabIndex={0}\n onClick={clickCalendar}\n onKeyDown={handleKeyDownAction}\n asChild\n >\n <IconButton>\n <CalendarIcon />\n </IconButton>\n </Popover.Trigger>\n <Popover.Content initialFocus={-1} padding={24}>\n <Calendar\n ref={calendarRef}\n density={density}\n date={date}\n minDate={minDate}\n maxDate={maxDate}\n days={days}\n months={months}\n monthLabel={monthLabel}\n yearLabel={yearLabel}\n yearsToShow={yearsToShow}\n onDateSelected={handleClickCalendarDay}\n onTabOutside={handleTabOutsideCalendar}\n />\n </Popover.Content>\n </Popover>\n }\n {...textInputProps}\n {...inputProps}\n aria-invalid={invalid || !!errorLabel}\n />\n )}\n />\n );\n },\n);\n\nDatePicker.displayName = \"DatePicker\";\n"],"names":["DatePicker","forwardRef","props","forwardedInputRef","testAutoId","id","className","label","labelProps","defaultValue","defaultShow","value","disableBeforeDate","disableBefore","disableAfterDate","disableAfter","yearsToShow","name","helpLabel","errorLabel","invalid","density","days","months","monthLabel","yearLabel","placeholder","width","onChange","onBlur","onFocus","onKeyDown","action","showCalendarLabel","hideCalendarLabel","supportLabelProps","tooltip","textInputProps","description","rest","process","env","NODE_ENV","console","warn","parseDateString","minDate","startOfDay","maxDate","date","setDate","useState","getInitialDate","error","setError","showCalendar","setShowCalendar","calendarRef","useRef","datepickerRef","iconButtonRef","inputRef","unifiedInputRef","useCallback","instance","current","handleFocus","e","contains","relatedTarget","target","handleBlur","handleKeyDownAction","key","preventDefault","stopPropagation","handleChange","nextDate","nextError","val","isWithinLowerBound","isWithinUpperBound","clickCalendar","flushSync","calendarEl","button","querySelector","window","requestAnimationFrame","focus","onClick","handleClickCalendarDay","node","formatInput","event","document","createEvent","initEvent","dispatchEvent","handleTabOutsideCalendar","jsx","InputGroup","clsx","ref","render","inputProps","BaseTextInput","type","actionButton","jsxs","Popover","positionReference","open","onOpenChange","offset","children","Trigger","title","tabIndex","asChild","IconButton","CalendarIcon","Content","initialFocus","padding","Calendar","onDateSelected","onTabOutside","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"DatePicker.js","sources":["../../../../src/components/datepicker/DatePicker.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { startOfDay } from \"date-fns\";\nimport React, {\n type ChangeEvent,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n forwardRef,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { IconButton } from \"../icon-button/IconButton.js\";\nimport { CalendarIcon } from \"../icon/icons/CalendarIcon.js\";\nimport { InputGroup } from \"../input-group/InputGroup.js\";\nimport Popover from \"../popover/Popover.js\";\nimport { BaseTextInput } from \"../text-input/BaseTextInput.js\";\nimport { Calendar } from \"./internal/Calendar.js\";\nimport { type DateInfo, getInitialDate } from \"./internal/utils.js\";\nimport type { DatePickerProps, DateValidationError } from \"./types.js\";\nimport { formatInput, parseDateString } from \"./utils.js\";\nimport { isWithinLowerBound, isWithinUpperBound } from \"./validation.js\";\n\nexport const DatePicker = forwardRef<HTMLInputElement, DatePickerProps>(\n (props, forwardedInputRef) => {\n const {\n \"data-testautoid\": testAutoId,\n id,\n className = \"\",\n label = \"Velg dato\",\n labelProps,\n defaultValue,\n defaultShow = false,\n value,\n disableBeforeDate: disableBefore,\n disableAfterDate: disableAfter,\n yearsToShow,\n name,\n helpLabel,\n errorLabel,\n invalid,\n density,\n days,\n months,\n monthLabel,\n yearLabel,\n placeholder = \"dd.mm.åååå\",\n width = \"11.25rem\",\n onChange,\n onBlur,\n onFocus,\n onKeyDown,\n action,\n showCalendarLabel = \"Åpne kalender\",\n hideCalendarLabel = \"Lukk kalender\",\n supportLabelProps,\n tooltip,\n textInputProps,\n description,\n ...rest\n } = props;\n\n if (process.env.NODE_ENV !== \"production\" && value && defaultValue) {\n console.warn(\n \"DatePicker må enten være controlled eller uncontrolled. Hvis du bruker defaultValue og value sammen vil defaultValue bli ignorert.\",\n );\n }\n /// Input state\n\n const disableBeforeDate = parseDateString(disableBefore);\n const minDate = disableBeforeDate\n ? startOfDay(disableBeforeDate)\n : undefined;\n const disableAfterDate = parseDateString(disableAfter);\n const maxDate = disableAfterDate\n ? startOfDay(disableAfterDate)\n : undefined;\n\n const [date, setDate] = useState(\n getInitialDate(value, defaultValue, minDate, maxDate),\n );\n const [error, setError] = useState<DateValidationError | null>(null);\n\n /// Calendar state\n\n const [showCalendar, setShowCalendar] = useState(defaultShow);\n\n const calendarRef = useRef<HTMLDivElement>(null);\n const datepickerRef = useRef<HTMLDivElement>(null);\n\n /// Input events\n\n const iconButtonRef = useRef<HTMLButtonElement | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n // Hjelper for å gjøre det enklere å både forwarde refen men også bruke den selv internt\n const unifiedInputRef = useCallback(\n (instance: HTMLInputElement | null) => {\n inputRef.current = instance;\n if (forwardedInputRef) {\n if (typeof forwardedInputRef === \"function\") {\n forwardedInputRef(instance);\n } else {\n forwardedInputRef.current = instance;\n }\n }\n },\n [forwardedInputRef],\n );\n\n const handleFocus = useCallback(\n (e: FocusEvent<HTMLInputElement>) => {\n if (!onFocus || !datepickerRef.current) {\n return;\n }\n\n const nextFocusIsInside = datepickerRef.current.contains(\n e.relatedTarget as Node,\n );\n if (!nextFocusIsInside) {\n onFocus(e, date, { error, value: e.target.value });\n }\n },\n [onFocus, date, error],\n );\n\n const handleBlur = useCallback(\n (e: FocusEvent<HTMLInputElement>) => {\n if (onBlur) {\n onBlur(e, date, { error, value: e.target.value });\n }\n },\n [onBlur, date, error],\n );\n\n const handleKeyDownAction = useCallback(\n (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"Escape\") {\n setShowCalendar(false);\n e.preventDefault();\n e.stopPropagation();\n }\n\n if (action?.onKeyDown) {\n action.onKeyDown(e);\n }\n },\n [action],\n );\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n let nextDate: Date | null = null;\n let nextError: DateValidationError | null = null;\n\n if (e.target.value) {\n const val = parseDateString(e.target.value);\n if (!val) {\n nextError = \"WRONG_FORMAT\";\n } else if (minDate && !isWithinLowerBound(val, minDate)) {\n nextError = \"OUTSIDE_LOWER_BOUND\";\n } else if (maxDate && !isWithinUpperBound(val, maxDate)) {\n nextError = \"OUTSIDE_UPPER_BOUND\";\n } else {\n setShowCalendar(false);\n }\n nextDate = val || null;\n }\n\n setError(nextError);\n setDate(nextDate);\n\n if (onChange) {\n onChange(e, nextDate, {\n error: nextError,\n value: e.target.value,\n });\n }\n },\n [onChange, minDate, maxDate],\n );\n\n /// Calendar events\n\n const clickCalendar = useCallback(\n (e: MouseEvent<HTMLButtonElement>) => {\n flushSync(() => {\n setShowCalendar(!showCalendar);\n });\n\n const calendarEl = calendarRef.current;\n const button =\n calendarEl &&\n (calendarEl.querySelector(\n '[aria-pressed=\"true\"]',\n ) as HTMLButtonElement);\n // Make sure the popover-modal is correctly positioned before focusing a button\n // so we avoid accidentally scrolling to the top of the page\n window.requestAnimationFrame(() => button?.focus());\n\n if (action?.onClick) {\n action.onClick(e);\n }\n },\n [showCalendar, action],\n );\n\n const handleClickCalendarDay = useCallback(\n ({ date }: DateInfo) => {\n setShowCalendar(false);\n setDate(date);\n\n if (inputRef.current) {\n const node = inputRef.current;\n\n node.value = formatInput(date);\n\n // Simulér et change-event så APIet blir så likt som mulig en endring av inputfeltet\n const event = document.createEvent(\"HTMLEvents\");\n event.initEvent(\"input\", true, false);\n node.dispatchEvent(event);\n\n node.focus();\n\n if (onChange) {\n // Det er ikke helt sant at dette er et React.SyntheticEvent, men it's fine – probably?\n // Den har tingene man kan forvente, men hvis du gjør serdeles fancy ting med events\n // så kan det hende du må utvide denne for å dekke behovet ditt.\n onChange(\n event as unknown as ChangeEvent<HTMLInputElement>,\n date,\n {\n error: null,\n value: node.value,\n },\n );\n }\n }\n },\n [onChange],\n );\n\n const handleTabOutsideCalendar = useCallback((e: KeyboardEvent) => {\n e.preventDefault();\n setShowCalendar(false);\n iconButtonRef.current?.focus();\n }, []);\n\n return (\n <InputGroup\n id={id}\n className={clsx(\"jkl-datepicker\", className)}\n {...rest}\n ref={datepickerRef}\n label={label}\n labelProps={labelProps}\n density={density}\n helpLabel={helpLabel}\n errorLabel={errorLabel}\n supportLabelProps={supportLabelProps}\n tooltip={tooltip}\n description={description}\n render={(inputProps) => (\n <BaseTextInput\n data-focused={showCalendar ? \"true\" : undefined}\n ref={unifiedInputRef}\n data-testid=\"jkl-datepicker__input\"\n data-testautoid={testAutoId}\n className=\"jkl-datepicker__input\"\n name={name}\n defaultValue={defaultValue}\n density={density}\n value={value}\n type=\"text\"\n placeholder={placeholder}\n width={width}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n actionButton={\n <Popover\n positionReference={inputRef}\n open={showCalendar}\n onOpenChange={() =>\n setShowCalendar(!showCalendar)\n }\n offset={8}\n >\n <Popover.Trigger\n {...action}\n data-testid=\"jkl-datepicker__trigger\"\n className=\"jkl-text-input-action-button\"\n title={\n showCalendar\n ? hideCalendarLabel\n : showCalendarLabel\n }\n tabIndex={0}\n onClick={clickCalendar}\n onKeyDown={handleKeyDownAction}\n asChild\n >\n <IconButton>\n <CalendarIcon />\n </IconButton>\n </Popover.Trigger>\n <Popover.Content initialFocus={-1} padding={24}>\n <Calendar\n ref={calendarRef}\n density={density}\n date={date}\n minDate={minDate}\n maxDate={maxDate}\n days={days}\n months={months}\n monthLabel={monthLabel}\n yearLabel={yearLabel}\n yearsToShow={yearsToShow}\n onDateSelected={handleClickCalendarDay}\n onTabOutside={handleTabOutsideCalendar}\n />\n </Popover.Content>\n </Popover>\n }\n {...textInputProps}\n {...inputProps}\n aria-invalid={invalid || !!errorLabel}\n />\n )}\n />\n );\n },\n);\n\nDatePicker.displayName = \"DatePicker\";\n"],"names":["DatePicker","forwardRef","props","forwardedInputRef","testAutoId","id","className","label","labelProps","defaultValue","defaultShow","value","disableBeforeDate","disableBefore","disableAfterDate","disableAfter","yearsToShow","name","helpLabel","errorLabel","invalid","density","days","months","monthLabel","yearLabel","placeholder","width","onChange","onBlur","onFocus","onKeyDown","action","showCalendarLabel","hideCalendarLabel","supportLabelProps","tooltip","textInputProps","description","rest","process","env","NODE_ENV","console","warn","parseDateString","minDate","startOfDay","maxDate","date","setDate","useState","getInitialDate","error","setError","showCalendar","setShowCalendar","calendarRef","useRef","datepickerRef","iconButtonRef","inputRef","unifiedInputRef","useCallback","instance","current","handleFocus","e","contains","relatedTarget","target","handleBlur","handleKeyDownAction","key","preventDefault","stopPropagation","handleChange","nextDate","nextError","val","isWithinLowerBound","isWithinUpperBound","clickCalendar","flushSync","calendarEl","button","querySelector","window","requestAnimationFrame","focus","onClick","handleClickCalendarDay","node","formatInput","event","document","createEvent","initEvent","dispatchEvent","handleTabOutsideCalendar","jsx","InputGroup","clsx","ref","render","inputProps","BaseTextInput","type","actionButton","jsxs","Popover","positionReference","open","onOpenChange","offset","children","Trigger","title","tabIndex","asChild","IconButton","CalendarIcon","Content","initialFocus","padding","Calendar","onDateSelected","onTabOutside","displayName"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as t}from"react/jsx-runtime";import{forwardRef as a,useReducer as n,useEffect as r,useCallback as l,useRef as o}from"react";import{flushSync as s}from"react-dom";import{useId as d}from"../../../hooks/useId/useId.js";import{Button as c}from"../../button/Button.js";import{ArrowLeftIcon as i}from"../../icon/icons/ArrowLeftIcon.js";import{ArrowRightIcon as u}from"../../icon/icons/ArrowRightIcon.js";import{ChevronDownIcon as h}from"../../icon/icons/ChevronDownIcon.js";import{calendarReducer as m,calendarInitializer as g}from"./calendarReducer.js";import{useCalendar as f}from"./useCalendar.js";import{DEFAULT_YEARS_TO_SHOW as b,getInitialDateShown as p,isBackDisabled as v,subtractMonth as D,isForwardDisabled as k,addMonth as j,getYearSelectOptions as w,getMonthSelectOptions as y}from"./utils.js";const M=["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"],S=["man","tir","ons","tor","fre","lør","søn"],F=a(((a,F)=>{const{date:A,defaultSelected:_,density:N,minDate:$,maxDate:E,days:Y=S,months:x=M,monthLabel:O="Velg måned",yearLabel:C="Velg år",yearsToShow:I=b,onTabOutside:T,...R}=a,L=d("jkl-calendar"),[{offset:q,selectedDate:B,shownDate:K},J]=n(m,p(A,_,$,E),g),P=K.getMonth(),U=K.getFullYear();r((()=>{J({type:"SET_SELECTED_DATE",newDate:p(A,_,$,E)})}),[A,_,$,E]);const V=l((e=>{J({type:"SET_OFFSET",newOffset:e})}),[]),{calendars:W,getBackProps:z,getDateProps:H,getForwardProps:G,handleOffsetChanged:Q}=f({date:B,selected:B,minDate:$,maxDate:E,offset:q,onOffsetChanged:V,firstDayOfWeek:1,...R}),X=o(null),Z=l((e=>{if(!X.current)return;const t=document.activeElement,a=X.current.querySelectorAll('button.jkl-calendar-date-button:not([data-adjacent="true"]'),n=async e=>{t?.setAttribute("tabindex","-1"),e.setAttribute("tabindex","0"),e.focus()};a.forEach(((r,l)=>{const o=l+e;if(r===t)if(o<=a.length-1&&o>=0)n(a[o]);else if(e<0){if(v({calendars:W,minDate:$})||(s((()=>{Q(q-D({calendars:W,offset:1,minDate:$}))})),!X.current))return;const e=X.current.querySelectorAll('button.jkl-calendar-date-button:not([data-adjacent="true"]');e[e.length+o]&&(e[0].setAttribute("tabindex","-1"),n(e[e.length+o]))}else{if(k({calendars:W,maxDate:E})||(s((()=>{Q(q+j({calendars:W,offset:1,maxDate:E}))})),!X.current))return;const e=X.current.querySelectorAll('button.jkl-calendar-date-button:not([data-adjacent="true"]');e[o-a.length]&&(e[0].setAttribute("tabindex","-1"),n(e[o-a.length]))}}))}),[Q,q,W,E,$]),ee=l((e=>{switch(e.key){case"ArrowUp":Z(-7),e.preventDefault();break;case"ArrowRight":Z(1),e.preventDefault();break;case"ArrowDown":Z(7),e.preventDefault();break;case"ArrowLeft":Z(-1),e.preventDefault()}}),[Z]),te=l((e=>{if("Tab"!==e.key)return;const t=X.current?.querySelectorAll('button:not([disabled]):not([tabindex="-1"]), select');if(!t)return;const a=t[0],n=t[t.length-1];e.shiftKey||document.activeElement!==n?e.shiftKey&&document.activeElement===a&&(n.focus(),e.preventDefault()):(a.focus(),e.preventDefault())}),[]),ae=l((e=>{const{date:t,selected:a,selectable:n,prevMonth:r,nextMonth:l}=e;return!!n&&!(!a&&t.toString()!==$?.toString()&&(r||l||K.getFullYear()!==t.getFullYear()||B.getMonth()===t.getMonth()||1!==t.getDate()))}),[K,$,B]),ne=l((()=>{$&&K.getFullYear()-$.getFullYear()==0&&K.getMonth()-$.getMonth()==1?document.querySelector(`[data-testid="${L}-forward-button"]`)?.focus():E&&E.getFullYear()-K.getFullYear()==0&&E.getMonth()-K.getMonth()==1&&document.querySelector(`[data-testid="${L}-back-button"]`)?.focus()}),[$,E,K,L]),re=l((e=>{if(4!==e.target.value.length)return;const t=Number.parseInt(e.target.value);if(Number.isNaN(t))return;let a=12*(t-K.getFullYear());const n=new Date(K.getFullYear(),K.getMonth()+a,K.getDate());E&&E.getFullYear()===n.getFullYear()&&E.getMonth()<n.getMonth()?a-=n.getMonth()-E.getMonth():$&&$.getFullYear()===n.getFullYear()&&$.getMonth()>n.getMonth()&&(a+=$.getMonth()-n.getMonth()),J({type:"ADD_OFFSET",addedOffset:a})}),[K,$,E]),le=l((e=>{if(!B&&!A)return;const t=K.getFullYear()-(B||new Date).getFullYear(),a=Number.parseInt(e.target.value)-(B||new Date).getMonth();J({type:"SET_OFFSET",newOffset:12*t+a})}),[B,A,K]),oe=w(U,$,E,I),se=y(U,x,$,E);return e("div",{ref:F,id:L,className:"jkl-calendar","data-testid":"jkl-calendar",children:t("div",{className:"jkl-calendar__padding",ref:X,onKeyDown:te,children:[t("fieldset",{className:"jkl-calendar-navigation",children:[t("div",{children:[e(c,{...z({calendars:W,onClick:ne}),"data-testid":`${L}-back-button`,variant:"ghost",icon:e(i,{variant:"medium",bold:!0})}),e(c,{...G({calendars:W,onClick:ne}),variant:"ghost","data-testid":`${L}-forward-button`,icon:e(u,{variant:"medium",bold:!0})})]}),t("div",{children:[t("div",{className:"jkl-calendar-navigation-dropdown",children:[e("select",{onChange:le,className:"jkl-calendar-navigation-dropdown__select","aria-label":O,value:P.toString(),children:se.map((({label:t,value:a})=>e("option",{value:a,children:t},a)))}),e(h,{bold:!0,className:"jkl-calendar-navigation-dropdown__chevron"})]}),t("div",{className:"jkl-calendar-navigation-dropdown",children:[e("select",{onChange:re,className:"jkl-calendar-navigation-dropdown__select","aria-label":C,value:U.toString(),children:oe.map((t=>e("option",{value:t,children:t},t)))}),e(h,{bold:!0,className:"jkl-calendar-navigation-dropdown__chevron"})]})]})]}),W.map((a=>t("table",{className:"jkl-calendar-table","data-testid":"jkl-datepicker-calendar",children:[t("caption",{className:"jkl-sr-only",children:[x[a.month],", ",a.year]}),e("thead",{children:e("tr",{children:Y.map((t=>e("th",{children:t},`${a.month}${a.year}${t}`)))})}),e("tbody",{"data-testid":"jkl-datepicker-dates",children:a.weeks.map(((t,n)=>e("tr",{children:t.map(((t,r)=>{const l=`${a.month}${a.year}${n}${r}`;if("string"==typeof t)return e("td",{className:"jkl-calendar__date jkl-calendar__date--empty",children:t},l);const{date:o,selectable:s,today:d,prevMonth:c,nextMonth:i}=t;return e("td",{children:e("button",{...H({dateObj:t}),type:"button",className:"jkl-calendar-date-button",tabIndex:ae(t)?0:-1,"aria-label":`${o.getDate()}. ${x[o.getMonth()].toLowerCase()}`,"aria-current":d?"date":void 0,"data-adjacent":c||i?"true":void 0,disabled:!s,onKeyDown:ee,children:e("span",{"aria-hidden":"true",children:o.getDate()})})},l)}))},`${a.month}${a.year}${n}`)))})]},`${a.month}${a.year}`)))]})})}));F.displayName="Calendar";export{F as Calendar};
1
+ import{jsx as e,jsxs as t}from"react/jsx-runtime";import{forwardRef as a,useReducer as n,useEffect as r,useCallback as l,useRef as o}from"react";import{flushSync as s}from"react-dom";import{useId as d}from"../../../hooks/useId/useId.js";import{Button as c}from"../../button/Button.js";import{ArrowLeftIcon as i}from"../../icon/icons/ArrowLeftIcon.js";import{ArrowRightIcon as u}from"../../icon/icons/ArrowRightIcon.js";import{ChevronDownIcon as h}from"../../icon/icons/ChevronDownIcon.js";import{calendarReducer as m,calendarInitializer as g}from"./calendarReducer.js";import{useCalendar as f}from"./useCalendar.js";import{DEFAULT_YEARS_TO_SHOW as b,getInitialDateShown as p,isBackDisabled as v,subtractMonth as D,isForwardDisabled as k,addMonth as j,getYearSelectOptions as w,getMonthSelectOptions as y}from"./utils.js";const M=["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"],S=["man","tir","ons","tor","fre","lør","søn"],F=a((a,F)=>{const{date:A,defaultSelected:_,density:N,minDate:$,maxDate:E,days:Y=S,months:x=M,monthLabel:O="Velg måned",yearLabel:C="Velg år",yearsToShow:I=b,onTabOutside:T,...R}=a,L=d("jkl-calendar"),[{offset:q,selectedDate:B,shownDate:K},J]=n(m,p(A,_,$,E),g),P=K.getMonth(),U=K.getFullYear();r(()=>{J({type:"SET_SELECTED_DATE",newDate:p(A,_,$,E)})},[A,_,$,E]);const V=l(e=>{J({type:"SET_OFFSET",newOffset:e})},[]),{calendars:W,getBackProps:z,getDateProps:H,getForwardProps:G,handleOffsetChanged:Q}=f({date:B,selected:B,minDate:$,maxDate:E,offset:q,onOffsetChanged:V,firstDayOfWeek:1,...R}),X=o(null),Z=l(e=>{if(!X.current)return;const t=document.activeElement,a=X.current.querySelectorAll('button.jkl-calendar-date-button:not([data-adjacent="true"]'),n=async e=>{t?.setAttribute("tabindex","-1"),e.setAttribute("tabindex","0"),e.focus()};a.forEach((r,l)=>{const o=l+e;if(r===t)if(o<=a.length-1&&o>=0)n(a[o]);else if(e<0){if(v({calendars:W,minDate:$})||(s(()=>{Q(q-D({calendars:W,offset:1,minDate:$}))}),!X.current))return;const e=X.current.querySelectorAll('button.jkl-calendar-date-button:not([data-adjacent="true"]');e[e.length+o]&&(e[0].setAttribute("tabindex","-1"),n(e[e.length+o]))}else{if(k({calendars:W,maxDate:E})||(s(()=>{Q(q+j({calendars:W,offset:1,maxDate:E}))}),!X.current))return;const e=X.current.querySelectorAll('button.jkl-calendar-date-button:not([data-adjacent="true"]');e[o-a.length]&&(e[0].setAttribute("tabindex","-1"),n(e[o-a.length]))}})},[Q,q,W,E,$]),ee=l(e=>{switch(e.key){case"ArrowUp":Z(-7),e.preventDefault();break;case"ArrowRight":Z(1),e.preventDefault();break;case"ArrowDown":Z(7),e.preventDefault();break;case"ArrowLeft":Z(-1),e.preventDefault()}},[Z]),te=l(e=>{if("Tab"!==e.key)return;const t=X.current?.querySelectorAll('button:not([disabled]):not([tabindex="-1"]), select');if(!t)return;const a=t[0],n=t[t.length-1];e.shiftKey||document.activeElement!==n?e.shiftKey&&document.activeElement===a&&(n.focus(),e.preventDefault()):(a.focus(),e.preventDefault())},[]),ae=l(e=>{const{date:t,selected:a,selectable:n,prevMonth:r,nextMonth:l}=e;return!!n&&!(!a&&t.toString()!==$?.toString()&&(r||l||K.getFullYear()!==t.getFullYear()||B.getMonth()===t.getMonth()||1!==t.getDate()))},[K,$,B]),ne=l(()=>{$&&K.getFullYear()-$.getFullYear()===0&&K.getMonth()-$.getMonth()===1?document.querySelector(`[data-testid="${L}-forward-button"]`)?.focus():E&&E.getFullYear()-K.getFullYear()===0&&E.getMonth()-K.getMonth()===1&&document.querySelector(`[data-testid="${L}-back-button"]`)?.focus()},[$,E,K,L]),re=l(e=>{if(4!==e.target.value.length)return;const t=Number.parseInt(e.target.value);if(Number.isNaN(t))return;let a=12*(t-K.getFullYear());const n=new Date(K.getFullYear(),K.getMonth()+a,K.getDate());E&&E.getFullYear()===n.getFullYear()&&E.getMonth()<n.getMonth()?a-=n.getMonth()-E.getMonth():$&&$.getFullYear()===n.getFullYear()&&$.getMonth()>n.getMonth()&&(a+=$.getMonth()-n.getMonth()),J({type:"ADD_OFFSET",addedOffset:a})},[K,$,E]),le=l(e=>{if(!B&&!A)return;const t=K.getFullYear()-(B||new Date).getFullYear(),a=Number.parseInt(e.target.value)-(B||new Date).getMonth();J({type:"SET_OFFSET",newOffset:12*t+a})},[B,A,K]),oe=w(U,$,E,I),se=y(U,x,$,E);return e("div",{ref:F,id:L,className:"jkl-calendar","data-testid":"jkl-calendar",children:t("div",{className:"jkl-calendar__padding",ref:X,onKeyDown:te,children:[t("fieldset",{className:"jkl-calendar-navigation",children:[t("div",{children:[e(c,{...z({calendars:W,onClick:ne}),"data-testid":`${L}-back-button`,variant:"ghost",icon:e(i,{variant:"medium",bold:!0})}),e(c,{...G({calendars:W,onClick:ne}),variant:"ghost","data-testid":`${L}-forward-button`,icon:e(u,{variant:"medium",bold:!0})})]}),t("div",{children:[t("div",{className:"jkl-calendar-navigation-dropdown",children:[e("select",{onChange:le,className:"jkl-calendar-navigation-dropdown__select","aria-label":O,value:P.toString(),children:se.map(({label:t,value:a})=>e("option",{value:a,children:t},a))}),e(h,{bold:!0,className:"jkl-calendar-navigation-dropdown__chevron"})]}),t("div",{className:"jkl-calendar-navigation-dropdown",children:[e("select",{onChange:re,className:"jkl-calendar-navigation-dropdown__select","aria-label":C,value:U.toString(),children:oe.map(t=>e("option",{value:t,children:t},t))}),e(h,{bold:!0,className:"jkl-calendar-navigation-dropdown__chevron"})]})]})]}),W.map(a=>t("table",{className:"jkl-calendar-table","data-testid":"jkl-datepicker-calendar",children:[t("caption",{className:"jkl-sr-only",children:[x[a.month],", ",a.year]}),e("thead",{children:e("tr",{children:Y.map(t=>e("th",{children:t},`${a.month}${a.year}${t}`))})}),e("tbody",{"data-testid":"jkl-datepicker-dates",children:a.weeks.map((t,n)=>e("tr",{children:t.map((t,r)=>{const l=`${a.month}${a.year}${n}${r}`;if("string"==typeof t)return e("td",{className:"jkl-calendar__date jkl-calendar__date--empty",children:t},l);const{date:o,selectable:s,today:d,prevMonth:c,nextMonth:i}=t;return e("td",{children:e("button",{...H({dateObj:t}),type:"button",className:"jkl-calendar-date-button",tabIndex:ae(t)?0:-1,"aria-label":`${o.getDate()}. ${x[o.getMonth()].toLowerCase()}`,"aria-current":d?"date":void 0,"data-adjacent":c||i?"true":void 0,disabled:!s,onKeyDown:ee,children:e("span",{"aria-hidden":"true",children:o.getDate()})})},l)})},`${a.month}${a.year}${n}`))})]},`${a.month}${a.year}`))]})})});F.displayName="Calendar";export{F as Calendar};
2
2
  //# sourceMappingURL=Calendar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Calendar.js","sources":["../../../../../src/components/datepicker/internal/Calendar.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useReducer,\n useRef,\n} from \"react\";\nimport { flushSync } from \"react-dom\";\nimport type { Density } from \"../../../core/types.js\";\nimport { useId } from \"../../../hooks/useId/useId.js\";\nimport { Button } from \"../../button/Button.js\";\nimport { ArrowLeftIcon } from \"../../icon/icons/ArrowLeftIcon.js\";\nimport { ArrowRightIcon } from \"../../icon/icons/ArrowRightIcon.js\";\nimport { ChevronDownIcon } from \"../../icon/icons/ChevronDownIcon.js\";\nimport type { YearsToShow } from \"../types.js\";\nimport { calendarInitializer, calendarReducer } from \"./calendarReducer.js\";\nimport { type UseCalendarProps, useCalendar } from \"./useCalendar.js\";\nimport {\n DEFAULT_YEARS_TO_SHOW,\n type DateInfo,\n addMonth,\n getInitialDateShown,\n getMonthSelectOptions,\n getYearSelectOptions,\n isBackDisabled,\n isForwardDisabled,\n subtractMonth,\n} from \"./utils.js\";\n\ninterface CalendarProps\n extends Omit<\n UseCalendarProps,\n \"date\" | \"onOffsetChanged\" | \"offset\" | \"firstDayOfWeek\" | \"selected\"\n > {\n date: Date | null;\n density?: Density;\n defaultSelected?: Date;\n days?: string[];\n months?: string[];\n monthLabel?: string;\n yearLabel?: string;\n yearsToShow?: YearsToShow;\n onTabOutside: React.KeyboardEventHandler;\n}\n\nconst defaultMonths = [\n \"Januar\",\n \"Februar\",\n \"Mars\",\n \"April\",\n \"Mai\",\n \"Juni\",\n \"Juli\",\n \"August\",\n \"September\",\n \"Oktober\",\n \"November\",\n \"Desember\",\n];\n\nconst defaultDays = [\"man\", \"tir\", \"ons\", \"tor\", \"fre\", \"lør\", \"søn\"];\n\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps>(\n (props, ref) => {\n const {\n date,\n defaultSelected,\n density,\n minDate,\n maxDate,\n days = defaultDays,\n months = defaultMonths,\n monthLabel = \"Velg måned\",\n yearLabel = \"Velg år\",\n yearsToShow = DEFAULT_YEARS_TO_SHOW,\n onTabOutside,\n ...rest\n } = props;\n\n const id = useId(\"jkl-calendar\");\n\n const [{ offset, selectedDate, shownDate }, dispatch] = useReducer(\n calendarReducer,\n getInitialDateShown(date, defaultSelected, minDate, maxDate),\n calendarInitializer,\n );\n\n const shownMonth = shownDate.getMonth();\n const shownYear = shownDate.getFullYear();\n\n useEffect(() => {\n dispatch({\n type: \"SET_SELECTED_DATE\",\n newDate: getInitialDateShown(\n date,\n defaultSelected,\n minDate,\n maxDate,\n ),\n });\n }, [date, defaultSelected, minDate, maxDate]);\n\n const onOffsetChanged = useCallback((newOffset: number) => {\n dispatch({\n type: \"SET_OFFSET\",\n newOffset,\n });\n }, []);\n\n const {\n calendars,\n getBackProps,\n getDateProps,\n getForwardProps,\n handleOffsetChanged,\n } = useCalendar({\n date: selectedDate,\n selected: selectedDate,\n minDate,\n maxDate,\n offset,\n onOffsetChanged,\n firstDayOfWeek: 1,\n ...rest,\n });\n\n /// Calendar keyboard navigation\n\n const calendarPaddingRef = useRef<HTMLDivElement>(null);\n const doFocusChange = useCallback(\n (offsetDiff: number) => {\n if (!calendarPaddingRef.current) {\n return;\n }\n\n const e = document.activeElement;\n const buttons =\n calendarPaddingRef.current.querySelectorAll<HTMLButtonElement>(\n 'button.jkl-calendar-date-button:not([data-adjacent=\"true\"]',\n );\n\n const changeFocusTo = async (nextButton: HTMLButtonElement) => {\n e?.setAttribute(\"tabindex\", \"-1\");\n nextButton.setAttribute(\"tabindex\", \"0\");\n nextButton.focus();\n };\n\n buttons.forEach((el, i) => {\n const newNodeKey = i + offsetDiff;\n\n if (el === e) {\n if (\n newNodeKey <= buttons.length - 1 &&\n newNodeKey >= 0\n ) {\n changeFocusTo(buttons[newNodeKey]);\n } else if (offsetDiff < 0) {\n if (isBackDisabled({ calendars, minDate })) {\n return;\n }\n\n // Hvis newNodeKey er utenfor samlingen med knapper så har vi prøvd å gå til\n // en dag utenfor måneden. Er offsetDiff negativ så har vi gått tilbake en\n // måned.\n flushSync(() => {\n handleOffsetChanged(\n offset -\n subtractMonth({\n calendars,\n offset: 1,\n minDate,\n }),\n );\n });\n if (!calendarPaddingRef.current) {\n return;\n }\n const newButtons =\n calendarPaddingRef.current.querySelectorAll<HTMLButtonElement>(\n 'button.jkl-calendar-date-button:not([data-adjacent=\"true\"]',\n );\n // + - = -\n if (newButtons[newButtons.length + newNodeKey]) {\n // Sørg for at ikke både 1. i måneden og valgt dag er fokuserbare\n newButtons[0].setAttribute(\"tabindex\", \"-1\");\n changeFocusTo(\n newButtons[newButtons.length + newNodeKey],\n );\n }\n } else {\n if (isForwardDisabled({ calendars, maxDate })) {\n return;\n }\n\n // Hvis newNodeKey er utenfor samlingen med knapper så har vi prøvd å gå til\n // en dag utenfor måneden. Er offsetDiff positiv så har vi gått frem en\n // måned.\n flushSync(() => {\n handleOffsetChanged(\n offset +\n addMonth({\n calendars,\n offset: 1,\n maxDate,\n }),\n );\n });\n if (!calendarPaddingRef.current) {\n return;\n }\n const newButtons =\n calendarPaddingRef.current.querySelectorAll<HTMLButtonElement>(\n 'button.jkl-calendar-date-button:not([data-adjacent=\"true\"]',\n );\n // NewNodeKey er basert på forrige måneds liste med knapper. For at verdien skal bli\n // riktig i vår nye måned må vi trekke fra anntal dager fra forrige måned.\n if (newButtons[newNodeKey - buttons.length]) {\n // Sørg for at ikke både 1. i måneden og valgt dag er fokuserbare\n newButtons[0].setAttribute(\"tabindex\", \"-1\");\n changeFocusTo(\n newButtons[newNodeKey - buttons.length],\n );\n }\n }\n }\n });\n },\n [handleOffsetChanged, offset, calendars, maxDate, minDate],\n );\n\n const handleArrowNavigation = useCallback(\n (event: React.KeyboardEvent) => {\n switch (event.key) {\n case \"ArrowUp\":\n doFocusChange(-7);\n event.preventDefault();\n break;\n case \"ArrowRight\":\n doFocusChange(1);\n event.preventDefault();\n break;\n case \"ArrowDown\":\n doFocusChange(7);\n event.preventDefault();\n break;\n case \"ArrowLeft\":\n doFocusChange(-1);\n event.preventDefault();\n break;\n default:\n break;\n }\n },\n [doFocusChange],\n );\n\n const handleTabInside: React.KeyboardEventHandler = useCallback(\n (event) => {\n if (event.key !== \"Tab\") return;\n\n const focusableElements =\n calendarPaddingRef.current?.querySelectorAll<HTMLElement>(\n 'button:not([disabled]):not([tabindex=\"-1\"]), select',\n );\n\n if (!focusableElements) return;\n\n const firstElement = focusableElements[0];\n const lastElement =\n focusableElements[focusableElements.length - 1];\n\n if (!event.shiftKey && document.activeElement === lastElement) {\n firstElement.focus();\n event.preventDefault();\n } else if (\n event.shiftKey &&\n document.activeElement === firstElement\n ) {\n lastElement.focus();\n event.preventDefault();\n }\n },\n [],\n );\n\n const isFocusableDate = useCallback(\n (dateInfo: DateInfo) => {\n const { date, selected, selectable, prevMonth, nextMonth } =\n dateInfo;\n\n // Datoen kan ikke velges\n if (!selectable) {\n return false;\n }\n // Datoen er valgt dato\n if (selected) {\n return true;\n }\n // Datoen er første valgbare dato\n if (date.toString() === minDate?.toString()) {\n return true;\n }\n\n // Datoen er første i måneden som vises\n if (\n !prevMonth &&\n !nextMonth &&\n shownDate.getFullYear() === date.getFullYear() &&\n selectedDate.getMonth() !== date.getMonth() &&\n date.getDate() === 1\n ) {\n return true;\n }\n\n return false;\n },\n [shownDate, minDate, selectedDate],\n );\n\n const handleGotoEdgeMonth = useCallback(() => {\n if (\n // Vi er i ferd med å gå til første måned\n minDate &&\n shownDate.getFullYear() - minDate.getFullYear() === 0 &&\n shownDate.getMonth() - minDate.getMonth() === 1\n ) {\n // Fokuser på \"neste månded\"-knappen\n document\n .querySelector<HTMLButtonElement>(\n `[data-testid=\"${id}-forward-button\"]`,\n )\n ?.focus();\n } else if (\n // Vi er i ferd med å gå til siste måned\n maxDate &&\n maxDate.getFullYear() - shownDate.getFullYear() === 0 &&\n maxDate.getMonth() - shownDate.getMonth() === 1\n ) {\n // Fokuser på \"forrige månded\"-knappen\n document\n .querySelector<HTMLButtonElement>(\n `[data-testid=\"${id}-back-button\"]`,\n )\n ?.focus();\n }\n }, [minDate, maxDate, shownDate, id]);\n\n /// Extended variant events\n\n const handleYearChange = useCallback<\n React.ChangeEventHandler<HTMLSelectElement>\n >(\n (event) => {\n if (event.target.value.length !== 4) {\n return;\n }\n\n const year: number = Number.parseInt(event.target.value);\n if (Number.isNaN(year)) {\n return;\n }\n\n let offset = (year - shownDate.getFullYear()) * 12;\n const expectedDate = new Date(\n shownDate.getFullYear(),\n shownDate.getMonth() + offset,\n shownDate.getDate(),\n );\n\n // Pass på at vi ikke hopper forbi maks. eller min. dato\n if (\n maxDate &&\n maxDate.getFullYear() === expectedDate.getFullYear() &&\n maxDate.getMonth() < expectedDate.getMonth()\n ) {\n offset -= expectedDate.getMonth() - maxDate.getMonth();\n } else if (\n minDate &&\n minDate.getFullYear() === expectedDate.getFullYear() &&\n minDate.getMonth() > expectedDate.getMonth()\n ) {\n offset += minDate.getMonth() - expectedDate.getMonth();\n }\n\n dispatch({\n type: \"ADD_OFFSET\",\n addedOffset: offset,\n });\n\n return;\n },\n [shownDate, minDate, maxDate],\n );\n\n const handleMonthChange = useCallback<\n React.ChangeEventHandler<HTMLSelectElement>\n >(\n (event) => {\n if (!selectedDate && !date) {\n return;\n }\n\n const yearDiff =\n shownDate.getFullYear() -\n (selectedDate || new Date()).getFullYear();\n const monthDiff =\n Number.parseInt(event.target.value) -\n (selectedDate || new Date()).getMonth();\n\n dispatch({\n type: \"SET_OFFSET\",\n newOffset: yearDiff * 12 + monthDiff,\n });\n\n return;\n },\n [selectedDate, date, shownDate],\n );\n\n const yearSelectOptions = getYearSelectOptions(\n shownYear,\n minDate,\n maxDate,\n yearsToShow,\n );\n const monthSelectOptions = getMonthSelectOptions(\n shownYear,\n months,\n minDate,\n maxDate,\n );\n\n return (\n <div\n ref={ref}\n id={id}\n className=\"jkl-calendar\"\n data-testid=\"jkl-calendar\"\n >\n {/* Vi lytter på på trykk på Tab inne i kalenderen for å håndtere fokus */}\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div\n className=\"jkl-calendar__padding\"\n ref={calendarPaddingRef}\n onKeyDown={handleTabInside}\n >\n <fieldset className=\"jkl-calendar-navigation\">\n <div>\n <Button\n {...getBackProps({\n calendars,\n onClick: handleGotoEdgeMonth,\n })}\n data-testid={`${id}-back-button`}\n variant=\"ghost\"\n icon={<ArrowLeftIcon variant=\"medium\" bold />}\n />\n <Button\n {...getForwardProps({\n calendars,\n onClick: handleGotoEdgeMonth,\n })}\n variant=\"ghost\"\n data-testid={`${id}-forward-button`}\n icon={<ArrowRightIcon variant=\"medium\" bold />}\n />\n </div>\n <div>\n <div className=\"jkl-calendar-navigation-dropdown\">\n <select\n onChange={handleMonthChange}\n className=\"jkl-calendar-navigation-dropdown__select\"\n aria-label={monthLabel}\n value={shownMonth.toString()}\n >\n {monthSelectOptions.map(\n ({ label, value }) => (\n <option key={value} value={value}>\n {label}\n </option>\n ),\n )}\n </select>\n <ChevronDownIcon\n bold\n className=\"jkl-calendar-navigation-dropdown__chevron\"\n />\n </div>\n <div className=\"jkl-calendar-navigation-dropdown\">\n <select\n onChange={handleYearChange}\n className=\"jkl-calendar-navigation-dropdown__select\"\n aria-label={yearLabel}\n value={shownYear.toString()}\n >\n {yearSelectOptions.map((year) => (\n <option key={year} value={year}>\n {year}\n </option>\n ))}\n </select>\n <ChevronDownIcon\n bold\n className=\"jkl-calendar-navigation-dropdown__chevron\"\n />\n </div>\n </div>\n </fieldset>\n {calendars.map((calendar) => (\n <table\n className=\"jkl-calendar-table\"\n key={`${calendar.month}${calendar.year}`}\n data-testid=\"jkl-datepicker-calendar\"\n >\n <caption className=\"jkl-sr-only\">\n {months[calendar.month]}, {calendar.year}\n </caption>\n <thead>\n <tr>\n {days.map((weekday) => (\n <th\n key={`${calendar.month}${calendar.year}${weekday}`}\n >\n {weekday}\n </th>\n ))}\n </tr>\n </thead>\n <tbody data-testid=\"jkl-datepicker-dates\">\n {calendar.weeks.map((week, weekIndex) => (\n <tr\n key={`${calendar.month}${calendar.year}${weekIndex}`}\n >\n {week.map((dateInfo, index) => {\n const key = `${calendar.month}${calendar.year}${weekIndex}${index}`;\n if (typeof dateInfo === \"string\") {\n return (\n <td\n className=\"jkl-calendar__date jkl-calendar__date--empty\"\n key={key}\n >\n {dateInfo}\n </td>\n );\n }\n const {\n date,\n selectable,\n today,\n prevMonth,\n nextMonth,\n } = dateInfo;\n\n return (\n <td key={key}>\n <button\n {...getDateProps({\n dateObj: dateInfo,\n })}\n type=\"button\"\n className=\"jkl-calendar-date-button\"\n tabIndex={\n isFocusableDate(\n dateInfo,\n )\n ? 0\n : -1\n }\n aria-label={`${date.getDate()}. ${months[\n date.getMonth()\n ].toLowerCase()}`}\n aria-current={\n today\n ? \"date\"\n : undefined\n }\n data-adjacent={\n prevMonth ||\n nextMonth\n ? \"true\"\n : undefined\n }\n disabled={!selectable}\n onKeyDown={\n handleArrowNavigation\n }\n >\n <span aria-hidden=\"true\">\n {date.getDate()}\n </span>\n </button>\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n ))}\n </div>\n </div>\n );\n },\n);\n\nCalendar.displayName = \"Calendar\";\n"],"names":["defaultMonths","defaultDays","Calendar","forwardRef","props","ref","date","defaultSelected","density","minDate","maxDate","days","months","monthLabel","yearLabel","yearsToShow","DEFAULT_YEARS_TO_SHOW","onTabOutside","rest","id","useId","offset","selectedDate","shownDate","dispatch","useReducer","calendarReducer","getInitialDateShown","calendarInitializer","shownMonth","getMonth","shownYear","getFullYear","useEffect","type","newDate","onOffsetChanged","useCallback","newOffset","calendars","getBackProps","getDateProps","getForwardProps","handleOffsetChanged","useCalendar","selected","firstDayOfWeek","calendarPaddingRef","useRef","doFocusChange","offsetDiff","current","e","document","activeElement","buttons","querySelectorAll","changeFocusTo","async","nextButton","setAttribute","focus","forEach","el","i","newNodeKey","length","isBackDisabled","flushSync","subtractMonth","newButtons","isForwardDisabled","addMonth","handleArrowNavigation","event","key","preventDefault","handleTabInside","focusableElements","firstElement","lastElement","shiftKey","isFocusableDate","dateInfo","selectable","prevMonth","nextMonth","toString","getDate","handleGotoEdgeMonth","querySelector","handleYearChange","target","value","year","Number","parseInt","isNaN","expectedDate","Date","addedOffset","handleMonthChange","yearDiff","monthDiff","yearSelectOptions","getYearSelectOptions","monthSelectOptions","getMonthSelectOptions","jsx","className","children","jsxs","onKeyDown","Button","onClick","variant","icon","ArrowLeftIcon","bold","ArrowRightIcon","onChange","map","label","ChevronDownIcon","calendar","month","weekday","weeks","week","weekIndex","index","today","dateObj","tabIndex","toLowerCase","disabled","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"Calendar.js","sources":["../../../../../src/components/datepicker/internal/Calendar.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useReducer,\n useRef,\n} from \"react\";\nimport { flushSync } from \"react-dom\";\nimport type { Density } from \"../../../core/types.js\";\nimport { useId } from \"../../../hooks/useId/useId.js\";\nimport { Button } from \"../../button/Button.js\";\nimport { ArrowLeftIcon } from \"../../icon/icons/ArrowLeftIcon.js\";\nimport { ArrowRightIcon } from \"../../icon/icons/ArrowRightIcon.js\";\nimport { ChevronDownIcon } from \"../../icon/icons/ChevronDownIcon.js\";\nimport type { YearsToShow } from \"../types.js\";\nimport { calendarInitializer, calendarReducer } from \"./calendarReducer.js\";\nimport { type UseCalendarProps, useCalendar } from \"./useCalendar.js\";\nimport {\n DEFAULT_YEARS_TO_SHOW,\n type DateInfo,\n addMonth,\n getInitialDateShown,\n getMonthSelectOptions,\n getYearSelectOptions,\n isBackDisabled,\n isForwardDisabled,\n subtractMonth,\n} from \"./utils.js\";\n\ninterface CalendarProps\n extends Omit<\n UseCalendarProps,\n \"date\" | \"onOffsetChanged\" | \"offset\" | \"firstDayOfWeek\" | \"selected\"\n > {\n date: Date | null;\n density?: Density;\n defaultSelected?: Date;\n days?: string[];\n months?: string[];\n monthLabel?: string;\n yearLabel?: string;\n yearsToShow?: YearsToShow;\n onTabOutside: React.KeyboardEventHandler;\n}\n\nconst defaultMonths = [\n \"Januar\",\n \"Februar\",\n \"Mars\",\n \"April\",\n \"Mai\",\n \"Juni\",\n \"Juli\",\n \"August\",\n \"September\",\n \"Oktober\",\n \"November\",\n \"Desember\",\n];\n\nconst defaultDays = [\"man\", \"tir\", \"ons\", \"tor\", \"fre\", \"lør\", \"søn\"];\n\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps>(\n (props, ref) => {\n const {\n date,\n defaultSelected,\n density,\n minDate,\n maxDate,\n days = defaultDays,\n months = defaultMonths,\n monthLabel = \"Velg måned\",\n yearLabel = \"Velg år\",\n yearsToShow = DEFAULT_YEARS_TO_SHOW,\n onTabOutside,\n ...rest\n } = props;\n\n const id = useId(\"jkl-calendar\");\n\n const [{ offset, selectedDate, shownDate }, dispatch] = useReducer(\n calendarReducer,\n getInitialDateShown(date, defaultSelected, minDate, maxDate),\n calendarInitializer,\n );\n\n const shownMonth = shownDate.getMonth();\n const shownYear = shownDate.getFullYear();\n\n useEffect(() => {\n dispatch({\n type: \"SET_SELECTED_DATE\",\n newDate: getInitialDateShown(\n date,\n defaultSelected,\n minDate,\n maxDate,\n ),\n });\n }, [date, defaultSelected, minDate, maxDate]);\n\n const onOffsetChanged = useCallback((newOffset: number) => {\n dispatch({\n type: \"SET_OFFSET\",\n newOffset,\n });\n }, []);\n\n const {\n calendars,\n getBackProps,\n getDateProps,\n getForwardProps,\n handleOffsetChanged,\n } = useCalendar({\n date: selectedDate,\n selected: selectedDate,\n minDate,\n maxDate,\n offset,\n onOffsetChanged,\n firstDayOfWeek: 1,\n ...rest,\n });\n\n /// Calendar keyboard navigation\n\n const calendarPaddingRef = useRef<HTMLDivElement>(null);\n const doFocusChange = useCallback(\n (offsetDiff: number) => {\n if (!calendarPaddingRef.current) {\n return;\n }\n\n const e = document.activeElement;\n const buttons =\n calendarPaddingRef.current.querySelectorAll<HTMLButtonElement>(\n 'button.jkl-calendar-date-button:not([data-adjacent=\"true\"]',\n );\n\n const changeFocusTo = async (nextButton: HTMLButtonElement) => {\n e?.setAttribute(\"tabindex\", \"-1\");\n nextButton.setAttribute(\"tabindex\", \"0\");\n nextButton.focus();\n };\n\n buttons.forEach((el, i) => {\n const newNodeKey = i + offsetDiff;\n\n if (el === e) {\n if (\n newNodeKey <= buttons.length - 1 &&\n newNodeKey >= 0\n ) {\n changeFocusTo(buttons[newNodeKey]);\n } else if (offsetDiff < 0) {\n if (isBackDisabled({ calendars, minDate })) {\n return;\n }\n\n // Hvis newNodeKey er utenfor samlingen med knapper så har vi prøvd å gå til\n // en dag utenfor måneden. Er offsetDiff negativ så har vi gått tilbake en\n // måned.\n flushSync(() => {\n handleOffsetChanged(\n offset -\n subtractMonth({\n calendars,\n offset: 1,\n minDate,\n }),\n );\n });\n if (!calendarPaddingRef.current) {\n return;\n }\n const newButtons =\n calendarPaddingRef.current.querySelectorAll<HTMLButtonElement>(\n 'button.jkl-calendar-date-button:not([data-adjacent=\"true\"]',\n );\n // + - = -\n if (newButtons[newButtons.length + newNodeKey]) {\n // Sørg for at ikke både 1. i måneden og valgt dag er fokuserbare\n newButtons[0].setAttribute(\"tabindex\", \"-1\");\n changeFocusTo(\n newButtons[newButtons.length + newNodeKey],\n );\n }\n } else {\n if (isForwardDisabled({ calendars, maxDate })) {\n return;\n }\n\n // Hvis newNodeKey er utenfor samlingen med knapper så har vi prøvd å gå til\n // en dag utenfor måneden. Er offsetDiff positiv så har vi gått frem en\n // måned.\n flushSync(() => {\n handleOffsetChanged(\n offset +\n addMonth({\n calendars,\n offset: 1,\n maxDate,\n }),\n );\n });\n if (!calendarPaddingRef.current) {\n return;\n }\n const newButtons =\n calendarPaddingRef.current.querySelectorAll<HTMLButtonElement>(\n 'button.jkl-calendar-date-button:not([data-adjacent=\"true\"]',\n );\n // NewNodeKey er basert på forrige måneds liste med knapper. For at verdien skal bli\n // riktig i vår nye måned må vi trekke fra anntal dager fra forrige måned.\n if (newButtons[newNodeKey - buttons.length]) {\n // Sørg for at ikke både 1. i måneden og valgt dag er fokuserbare\n newButtons[0].setAttribute(\"tabindex\", \"-1\");\n changeFocusTo(\n newButtons[newNodeKey - buttons.length],\n );\n }\n }\n }\n });\n },\n [handleOffsetChanged, offset, calendars, maxDate, minDate],\n );\n\n const handleArrowNavigation = useCallback(\n (event: React.KeyboardEvent) => {\n switch (event.key) {\n case \"ArrowUp\":\n doFocusChange(-7);\n event.preventDefault();\n break;\n case \"ArrowRight\":\n doFocusChange(1);\n event.preventDefault();\n break;\n case \"ArrowDown\":\n doFocusChange(7);\n event.preventDefault();\n break;\n case \"ArrowLeft\":\n doFocusChange(-1);\n event.preventDefault();\n break;\n default:\n break;\n }\n },\n [doFocusChange],\n );\n\n const handleTabInside: React.KeyboardEventHandler = useCallback(\n (event) => {\n if (event.key !== \"Tab\") return;\n\n const focusableElements =\n calendarPaddingRef.current?.querySelectorAll<HTMLElement>(\n 'button:not([disabled]):not([tabindex=\"-1\"]), select',\n );\n\n if (!focusableElements) return;\n\n const firstElement = focusableElements[0];\n const lastElement =\n focusableElements[focusableElements.length - 1];\n\n if (!event.shiftKey && document.activeElement === lastElement) {\n firstElement.focus();\n event.preventDefault();\n } else if (\n event.shiftKey &&\n document.activeElement === firstElement\n ) {\n lastElement.focus();\n event.preventDefault();\n }\n },\n [],\n );\n\n const isFocusableDate = useCallback(\n (dateInfo: DateInfo) => {\n const { date, selected, selectable, prevMonth, nextMonth } =\n dateInfo;\n\n // Datoen kan ikke velges\n if (!selectable) {\n return false;\n }\n // Datoen er valgt dato\n if (selected) {\n return true;\n }\n // Datoen er første valgbare dato\n if (date.toString() === minDate?.toString()) {\n return true;\n }\n\n // Datoen er første i måneden som vises\n if (\n !prevMonth &&\n !nextMonth &&\n shownDate.getFullYear() === date.getFullYear() &&\n selectedDate.getMonth() !== date.getMonth() &&\n date.getDate() === 1\n ) {\n return true;\n }\n\n return false;\n },\n [shownDate, minDate, selectedDate],\n );\n\n const handleGotoEdgeMonth = useCallback(() => {\n if (\n // Vi er i ferd med å gå til første måned\n minDate &&\n shownDate.getFullYear() - minDate.getFullYear() === 0 &&\n shownDate.getMonth() - minDate.getMonth() === 1\n ) {\n // Fokuser på \"neste månded\"-knappen\n document\n .querySelector<HTMLButtonElement>(\n `[data-testid=\"${id}-forward-button\"]`,\n )\n ?.focus();\n } else if (\n // Vi er i ferd med å gå til siste måned\n maxDate &&\n maxDate.getFullYear() - shownDate.getFullYear() === 0 &&\n maxDate.getMonth() - shownDate.getMonth() === 1\n ) {\n // Fokuser på \"forrige månded\"-knappen\n document\n .querySelector<HTMLButtonElement>(\n `[data-testid=\"${id}-back-button\"]`,\n )\n ?.focus();\n }\n }, [minDate, maxDate, shownDate, id]);\n\n /// Extended variant events\n\n const handleYearChange = useCallback<\n React.ChangeEventHandler<HTMLSelectElement>\n >(\n (event) => {\n if (event.target.value.length !== 4) {\n return;\n }\n\n const year: number = Number.parseInt(event.target.value);\n if (Number.isNaN(year)) {\n return;\n }\n\n let offset = (year - shownDate.getFullYear()) * 12;\n const expectedDate = new Date(\n shownDate.getFullYear(),\n shownDate.getMonth() + offset,\n shownDate.getDate(),\n );\n\n // Pass på at vi ikke hopper forbi maks. eller min. dato\n if (\n maxDate &&\n maxDate.getFullYear() === expectedDate.getFullYear() &&\n maxDate.getMonth() < expectedDate.getMonth()\n ) {\n offset -= expectedDate.getMonth() - maxDate.getMonth();\n } else if (\n minDate &&\n minDate.getFullYear() === expectedDate.getFullYear() &&\n minDate.getMonth() > expectedDate.getMonth()\n ) {\n offset += minDate.getMonth() - expectedDate.getMonth();\n }\n\n dispatch({\n type: \"ADD_OFFSET\",\n addedOffset: offset,\n });\n\n return;\n },\n [shownDate, minDate, maxDate],\n );\n\n const handleMonthChange = useCallback<\n React.ChangeEventHandler<HTMLSelectElement>\n >(\n (event) => {\n if (!selectedDate && !date) {\n return;\n }\n\n const yearDiff =\n shownDate.getFullYear() -\n (selectedDate || new Date()).getFullYear();\n const monthDiff =\n Number.parseInt(event.target.value) -\n (selectedDate || new Date()).getMonth();\n\n dispatch({\n type: \"SET_OFFSET\",\n newOffset: yearDiff * 12 + monthDiff,\n });\n\n return;\n },\n [selectedDate, date, shownDate],\n );\n\n const yearSelectOptions = getYearSelectOptions(\n shownYear,\n minDate,\n maxDate,\n yearsToShow,\n );\n const monthSelectOptions = getMonthSelectOptions(\n shownYear,\n months,\n minDate,\n maxDate,\n );\n\n return (\n <div\n ref={ref}\n id={id}\n className=\"jkl-calendar\"\n data-testid=\"jkl-calendar\"\n >\n {/* Vi lytter på på trykk på Tab inne i kalenderen for å håndtere fokus */}\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div\n className=\"jkl-calendar__padding\"\n ref={calendarPaddingRef}\n onKeyDown={handleTabInside}\n >\n <fieldset className=\"jkl-calendar-navigation\">\n <div>\n <Button\n {...getBackProps({\n calendars,\n onClick: handleGotoEdgeMonth,\n })}\n data-testid={`${id}-back-button`}\n variant=\"ghost\"\n icon={<ArrowLeftIcon variant=\"medium\" bold />}\n />\n <Button\n {...getForwardProps({\n calendars,\n onClick: handleGotoEdgeMonth,\n })}\n variant=\"ghost\"\n data-testid={`${id}-forward-button`}\n icon={<ArrowRightIcon variant=\"medium\" bold />}\n />\n </div>\n <div>\n <div className=\"jkl-calendar-navigation-dropdown\">\n <select\n onChange={handleMonthChange}\n className=\"jkl-calendar-navigation-dropdown__select\"\n aria-label={monthLabel}\n value={shownMonth.toString()}\n >\n {monthSelectOptions.map(\n ({ label, value }) => (\n <option key={value} value={value}>\n {label}\n </option>\n ),\n )}\n </select>\n <ChevronDownIcon\n bold\n className=\"jkl-calendar-navigation-dropdown__chevron\"\n />\n </div>\n <div className=\"jkl-calendar-navigation-dropdown\">\n <select\n onChange={handleYearChange}\n className=\"jkl-calendar-navigation-dropdown__select\"\n aria-label={yearLabel}\n value={shownYear.toString()}\n >\n {yearSelectOptions.map((year) => (\n <option key={year} value={year}>\n {year}\n </option>\n ))}\n </select>\n <ChevronDownIcon\n bold\n className=\"jkl-calendar-navigation-dropdown__chevron\"\n />\n </div>\n </div>\n </fieldset>\n {calendars.map((calendar) => (\n <table\n className=\"jkl-calendar-table\"\n key={`${calendar.month}${calendar.year}`}\n data-testid=\"jkl-datepicker-calendar\"\n >\n <caption className=\"jkl-sr-only\">\n {months[calendar.month]}, {calendar.year}\n </caption>\n <thead>\n <tr>\n {days.map((weekday) => (\n <th\n key={`${calendar.month}${calendar.year}${weekday}`}\n >\n {weekday}\n </th>\n ))}\n </tr>\n </thead>\n <tbody data-testid=\"jkl-datepicker-dates\">\n {calendar.weeks.map((week, weekIndex) => (\n <tr\n key={`${calendar.month}${calendar.year}${weekIndex}`}\n >\n {week.map((dateInfo, index) => {\n const key = `${calendar.month}${calendar.year}${weekIndex}${index}`;\n if (typeof dateInfo === \"string\") {\n return (\n <td\n className=\"jkl-calendar__date jkl-calendar__date--empty\"\n key={key}\n >\n {dateInfo}\n </td>\n );\n }\n const {\n date,\n selectable,\n today,\n prevMonth,\n nextMonth,\n } = dateInfo;\n\n return (\n <td key={key}>\n <button\n {...getDateProps({\n dateObj: dateInfo,\n })}\n type=\"button\"\n className=\"jkl-calendar-date-button\"\n tabIndex={\n isFocusableDate(\n dateInfo,\n )\n ? 0\n : -1\n }\n aria-label={`${date.getDate()}. ${months[\n date.getMonth()\n ].toLowerCase()}`}\n aria-current={\n today\n ? \"date\"\n : undefined\n }\n data-adjacent={\n prevMonth ||\n nextMonth\n ? \"true\"\n : undefined\n }\n disabled={!selectable}\n onKeyDown={\n handleArrowNavigation\n }\n >\n <span aria-hidden=\"true\">\n {date.getDate()}\n </span>\n </button>\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n ))}\n </div>\n </div>\n );\n },\n);\n\nCalendar.displayName = \"Calendar\";\n"],"names":["defaultMonths","defaultDays","Calendar","forwardRef","props","ref","date","defaultSelected","density","minDate","maxDate","days","months","monthLabel","yearLabel","yearsToShow","DEFAULT_YEARS_TO_SHOW","onTabOutside","rest","id","useId","offset","selectedDate","shownDate","dispatch","useReducer","calendarReducer","getInitialDateShown","calendarInitializer","shownMonth","getMonth","shownYear","getFullYear","useEffect","type","newDate","onOffsetChanged","useCallback","newOffset","calendars","getBackProps","getDateProps","getForwardProps","handleOffsetChanged","useCalendar","selected","firstDayOfWeek","calendarPaddingRef","useRef","doFocusChange","offsetDiff","current","e","document","activeElement","buttons","querySelectorAll","changeFocusTo","async","nextButton","setAttribute","focus","forEach","el","i","newNodeKey","length","isBackDisabled","flushSync","subtractMonth","newButtons","isForwardDisabled","addMonth","handleArrowNavigation","event","key","preventDefault","handleTabInside","focusableElements","firstElement","lastElement","shiftKey","isFocusableDate","dateInfo","selectable","prevMonth","nextMonth","toString","getDate","handleGotoEdgeMonth","querySelector","handleYearChange","target","value","year","Number","parseInt","isNaN","expectedDate","Date","addedOffset","handleMonthChange","yearDiff","monthDiff","yearSelectOptions","getYearSelectOptions","monthSelectOptions","getMonthSelectOptions","jsx","className","children","jsxs","onKeyDown","Button","onClick","variant","icon","ArrowLeftIcon","bold","ArrowRightIcon","onChange","map","label","ChevronDownIcon","calendar","month","weekday","weeks","week","weekIndex","index","today","dateObj","tabIndex","toLowerCase","disabled","displayName"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"calendarReducer.js","sources":["../../../../../src/components/datepicker/internal/calendarReducer.ts"],"sourcesContent":["import type { Reducer } from \"react\";\n\nexport type CalendarAction =\n | {\n type: \"SET_SELECTED_DATE\";\n newDate: Date;\n }\n | {\n type: \"SET_OFFSET\";\n newOffset: number;\n }\n | {\n type: \"ADD_OFFSET\";\n addedOffset: number;\n };\n\nexport type CalendarState = {\n selectedDate: Date;\n offset: number;\n shownDate: Date;\n};\n\nexport const calendarReducer: Reducer<CalendarState, CalendarAction> = (\n currentState,\n action,\n) => {\n let shownDate: Date;\n\n switch (action.type) {\n case \"SET_OFFSET\":\n shownDate = new Date(currentState.selectedDate);\n shownDate.setMonth(\n currentState.selectedDate.getMonth() + action.newOffset,\n );\n\n return {\n ...currentState,\n offset: action.newOffset,\n shownDate,\n };\n\n case \"ADD_OFFSET\":\n shownDate = new Date(currentState.selectedDate);\n shownDate.setMonth(\n currentState.selectedDate.getMonth() +\n currentState.offset +\n action.addedOffset,\n );\n\n return {\n ...currentState,\n offset: currentState.offset + action.addedOffset,\n shownDate,\n };\n\n case \"SET_SELECTED_DATE\":\n return calendarInitializer(action.newDate);\n\n default:\n return currentState;\n }\n};\n\nexport const calendarInitializer = (initialDate: Date): CalendarState => ({\n selectedDate: initialDate,\n offset: 0,\n shownDate: initialDate,\n});\n"],"names":["calendarReducer","currentState","action","shownDate","type","Date","selectedDate","setMonth","getMonth","newOffset","offset","addedOffset","calendarInitializer","newDate","initialDate"],"mappings":"AAsBa,MAAAA,EAA0D,CACnEC,EACAC,KAEIC,IAAAA,EAEJ,OAAQD,EAAOE,MACX,IAAK,aACW,OAAAD,EAAA,IAAIE,KAAKJ,EAAaK,cACxBH,EAAAI,SACNN,EAAaK,aAAaE,WAAaN,EAAOO,WAG3C,IACAR,EACHS,OAAQR,EAAOO,UACfN,UAAAA,GAGR,IAAK,aACW,OAAAA,EAAA,IAAIE,KAAKJ,EAAaK,cACxBH,EAAAI,SACNN,EAAaK,aAAaE,WACtBP,EAAaS,OACbR,EAAOS,aAGR,IACAV,EACHS,OAAQT,EAAaS,OAASR,EAAOS,YACrCR,UAAAA,GAGR,IAAK,oBACMS,OAAAA,EAAoBV,EAAOW,SAEtC,QACWZ,OAAAA,EAAA,EAINW,EAAuBE,IAAsC,CACtER,aAAcQ,EACdJ,OAAQ,EACRP,UAAWW"}
1
+ {"version":3,"file":"calendarReducer.js","sources":["../../../../../src/components/datepicker/internal/calendarReducer.ts"],"sourcesContent":["import type { Reducer } from \"react\";\n\nexport type CalendarAction =\n | {\n type: \"SET_SELECTED_DATE\";\n newDate: Date;\n }\n | {\n type: \"SET_OFFSET\";\n newOffset: number;\n }\n | {\n type: \"ADD_OFFSET\";\n addedOffset: number;\n };\n\nexport type CalendarState = {\n selectedDate: Date;\n offset: number;\n shownDate: Date;\n};\n\nexport const calendarReducer: Reducer<CalendarState, CalendarAction> = (\n currentState,\n action,\n) => {\n let shownDate: Date;\n\n switch (action.type) {\n case \"SET_OFFSET\":\n shownDate = new Date(currentState.selectedDate);\n shownDate.setMonth(\n currentState.selectedDate.getMonth() + action.newOffset,\n );\n\n return {\n ...currentState,\n offset: action.newOffset,\n shownDate,\n };\n\n case \"ADD_OFFSET\":\n shownDate = new Date(currentState.selectedDate);\n shownDate.setMonth(\n currentState.selectedDate.getMonth() +\n currentState.offset +\n action.addedOffset,\n );\n\n return {\n ...currentState,\n offset: currentState.offset + action.addedOffset,\n shownDate,\n };\n\n case \"SET_SELECTED_DATE\":\n return calendarInitializer(action.newDate);\n\n default:\n return currentState;\n }\n};\n\nexport const calendarInitializer = (initialDate: Date): CalendarState => ({\n selectedDate: initialDate,\n offset: 0,\n shownDate: initialDate,\n});\n"],"names":["calendarReducer","currentState","action","shownDate","type","Date","selectedDate","setMonth","getMonth","newOffset","offset","addedOffset","calendarInitializer","newDate","initialDate"],"mappings":"AAsBO,MAAMA,EAA0D,CACnEC,EACAC,KAEA,IAAIC,EAEJ,OAAQD,EAAOE,MACX,IAAK,aACD,OAAAD,EAAY,IAAIE,KAAKJ,EAAaK,cAClCH,EAAUI,SACNN,EAAaK,aAAaE,WAAaN,EAAOO,WAG3C,IACAR,EACHS,OAAQR,EAAOO,UACfN,UAAAA,GAGR,IAAK,aACD,OAAAA,EAAY,IAAIE,KAAKJ,EAAaK,cAClCH,EAAUI,SACNN,EAAaK,aAAaE,WACtBP,EAAaS,OACbR,EAAOS,aAGR,IACAV,EACHS,OAAQT,EAAaS,OAASR,EAAOS,YACrCR,UAAAA,GAGR,IAAK,oBACD,OAAOS,EAAoBV,EAAOW,SAEtC,QACI,OAAOZ,IAINW,EAAuBE,IAAAA,CAChCR,aAAcQ,EACdJ,OAAQ,EACRP,UAAWW"}
@@ -1,2 +1,2 @@
1
- import{startOfDay as e}from"date-fns";import{useState as a}from"react";import{getCalendars as t,isForwardDisabled as n,composeEventHandlers as s,isBackDisabled as o,subtractMonth as d,addMonth as f}from"./utils.js";function l(e){return void 0!==e}function r(e,{onClick:a,dateObj:t}){return{onClick:s(a,(a=>{e(t,a)})),disabled:!t.selectable,"aria-pressed":t.selected,role:"button"}}function i({minDate:e,offsetMonth:a,handleOffsetChanged:t},{onClick:n,offset:f=1,calendars:l}){const r=`Gå tilbake ${f} måned${1===f?"":"er"}`;return{onClick:s(n,(()=>{t(a-d({calendars:l,offset:f,minDate:e}))})),disabled:o({calendars:l,minDate:e}),"aria-label":r,title:r}}function c({maxDate:e,offsetMonth:a,handleOffsetChanged:t},{onClick:o,offset:d=1,calendars:l}){const r=`Gå frem ${d} måned${1===d?"":"er"}`;return{onClick:s(o,(()=>{t(a+f({calendars:l,offset:d,maxDate:e}))})),disabled:n({calendars:l,maxDate:e}),"aria-label":r,title:r}}function m({date:n=e(new Date),maxDate:s,minDate:o,monthsToDisplay:d=1,firstDayOfWeek:f=0,showOutsideDays:m=!0,offset:D,onDateSelected:u,onOffsetChanged:h,selected:b}){const[C,O]=a(0),k=function(e,a){return l(e)?e:a}(D,C);function p(e){l(D)||O(e),h(e)}return{calendars:t({date:n,selected:b,monthsToDisplay:d,minDate:o,maxDate:s,offset:k,firstDayOfWeek:f,showOutsideDays:m}),getDateProps:r.bind(null,u),getBackProps:i.bind(null,{minDate:o,offsetMonth:k,handleOffsetChanged:p}),getForwardProps:c.bind(null,{maxDate:s,offsetMonth:k,handleOffsetChanged:p}),handleOffsetChanged:p}}export{m as useCalendar};
1
+ import{startOfDay as e}from"date-fns";import{useState as a}from"react";import{getCalendars as t,isForwardDisabled as n,composeEventHandlers as s,isBackDisabled as o,subtractMonth as d,addMonth as f}from"./utils.js";function l(e){return void 0!==e}function r(e,{onClick:a,dateObj:t}){return{onClick:s(a,a=>{e(t,a)}),disabled:!t.selectable,"aria-pressed":t.selected,role:"button"}}function i({minDate:e,offsetMonth:a,handleOffsetChanged:t},{onClick:n,offset:f=1,calendars:l}){const r=`Gå tilbake ${f} måned${1===f?"":"er"}`;return{onClick:s(n,()=>{t(a-d({calendars:l,offset:f,minDate:e}))}),disabled:o({calendars:l,minDate:e}),"aria-label":r,title:r}}function c({maxDate:e,offsetMonth:a,handleOffsetChanged:t},{onClick:o,offset:d=1,calendars:l}){const r=`Gå frem ${d} måned${1===d?"":"er"}`;return{onClick:s(o,()=>{t(a+f({calendars:l,offset:d,maxDate:e}))}),disabled:n({calendars:l,maxDate:e}),"aria-label":r,title:r}}function m({date:n=e(new Date),maxDate:s,minDate:o,monthsToDisplay:d=1,firstDayOfWeek:f=0,showOutsideDays:m=!0,offset:D,onDateSelected:u,onOffsetChanged:h,selected:b}){const[C,O]=a(0),k=function(e,a){return l(e)?e:a}(D,C);function p(e){l(D)||O(e),h(e)}return{calendars:t({date:n,selected:b,monthsToDisplay:d,minDate:o,maxDate:s,offset:k,firstDayOfWeek:f,showOutsideDays:m}),getDateProps:r.bind(null,u),getBackProps:i.bind(null,{minDate:o,offsetMonth:k,handleOffsetChanged:p}),getForwardProps:c.bind(null,{maxDate:s,offsetMonth:k,handleOffsetChanged:p}),handleOffsetChanged:p}}export{m as useCalendar};
2
2
  //# sourceMappingURL=useCalendar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useCalendar.js","sources":["../../../../../src/components/datepicker/internal/useCalendar.ts"],"sourcesContent":["/***\n * MIT License\n *\n * Copyright (c) 2017 Deseret Digital Media. 2022 Fremtind Forsikring AS.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nimport { startOfDay } from \"date-fns\";\nimport React, { useState } from \"react\";\nimport {\n type CalendarMonth,\n type DateInfo,\n addMonth,\n composeEventHandlers,\n getCalendars,\n isBackDisabled,\n isForwardDisabled,\n subtractMonth,\n} from \"./utils.js\";\n\nfunction isOffsetControlled(propOffset: number | undefined): boolean {\n return propOffset !== undefined;\n}\n\nfunction getOffset(prop: number, state: number): number {\n return isOffsetControlled(prop) ? prop : state;\n}\n\ntype BoundGetDateProps = (dateInfo: DateInfo, event: React.MouseEvent) => void;\n\ntype GetDateProps = {\n onClick?: React.MouseEventHandler;\n dateObj: DateInfo;\n};\n\ntype GetDatePropsResult = {\n onClick: React.MouseEventHandler;\n disabled: boolean;\n \"aria-pressed\": boolean;\n role: \"button\";\n};\n\nfunction getDateProps(\n onDateSelected: BoundGetDateProps,\n { onClick, dateObj }: GetDateProps,\n): GetDatePropsResult {\n return {\n onClick: composeEventHandlers(onClick, (event) => {\n onDateSelected(dateObj, event);\n }),\n disabled: !dateObj.selectable,\n \"aria-pressed\": dateObj.selected,\n role: \"button\",\n };\n}\n\ntype BoundGetBackProps = {\n handleOffsetChanged: (newOffset: number) => void;\n offsetMonth: number;\n minDate?: Date;\n};\n\ntype GetBackProps = {\n onClick?: React.MouseEventHandler;\n offset?: number;\n calendars: CalendarMonth[];\n};\n\ntype GetBackPropsResult = {\n onClick: React.MouseEventHandler;\n disabled: boolean;\n \"aria-label\": string;\n title: string;\n};\n\nfunction getBackProps(\n { minDate, offsetMonth, handleOffsetChanged }: BoundGetBackProps,\n { onClick, offset = 1, calendars }: GetBackProps,\n): GetBackPropsResult {\n const label = `Gå tilbake ${offset} måned${offset === 1 ? \"\" : \"er\"}`;\n return {\n onClick: composeEventHandlers(onClick, () => {\n handleOffsetChanged(\n offsetMonth - subtractMonth({ calendars, offset, minDate }),\n );\n }),\n disabled: isBackDisabled({ calendars, minDate }),\n \"aria-label\": label,\n title: label,\n };\n}\n\ntype BoundGetForwardProps = {\n handleOffsetChanged: (newOffset: number) => void;\n offsetMonth: number;\n maxDate?: Date;\n};\n\ntype GetForwardProps = {\n onClick?: React.MouseEventHandler;\n offset?: number;\n calendars: CalendarMonth[];\n};\n\ntype GetForwardPropsResult = {\n onClick: React.MouseEventHandler;\n disabled: boolean;\n \"aria-label\": string;\n title: string;\n};\n\nfunction getForwardProps(\n { maxDate, offsetMonth, handleOffsetChanged }: BoundGetForwardProps,\n { onClick, offset = 1, calendars }: GetForwardProps,\n): GetForwardPropsResult {\n const label = `Gå frem ${offset} måned${offset === 1 ? \"\" : \"er\"}`;\n return {\n onClick: composeEventHandlers(onClick, () => {\n handleOffsetChanged(\n offsetMonth + addMonth({ calendars, offset, maxDate }),\n );\n }),\n disabled: isForwardDisabled({ calendars, maxDate }),\n \"aria-label\": label,\n title: label,\n };\n}\n\nexport interface UseCalendarProps {\n date?: Date;\n maxDate?: Date;\n minDate?: Date;\n monthsToDisplay?: number;\n firstDayOfWeek?: number;\n showOutsideDays?: boolean;\n offset: number;\n onDateSelected: (dateObj: DateInfo, event: React.MouseEvent) => void;\n onOffsetChanged: (newOffset: number) => void;\n selected?: Date | Date[];\n}\n\nexport type GetDatePropsFunc = (props: GetDateProps) => GetDatePropsResult;\nexport type GetBackPropsFunc = (props: GetBackProps) => GetBackPropsResult;\nexport type GetForwardPropsFunc = (\n props: GetForwardProps,\n) => GetForwardPropsResult;\nexport type HandleOffsetFunc = (newOffset: number) => void;\n\nexport type UseCalendarResult = {\n calendars: CalendarMonth[];\n getDateProps: GetDatePropsFunc;\n getBackProps: GetBackPropsFunc;\n getForwardProps: GetForwardPropsFunc;\n handleOffsetChanged: HandleOffsetFunc;\n};\n\nexport function useCalendar({\n date = startOfDay(new Date()),\n maxDate,\n minDate,\n monthsToDisplay = 1,\n firstDayOfWeek = 0,\n showOutsideDays = true,\n offset,\n onDateSelected,\n onOffsetChanged,\n selected,\n}: UseCalendarProps): UseCalendarResult {\n const [stateOffset, setStateOffset] = useState(0);\n const offsetMonth = getOffset(offset, stateOffset);\n\n function handleOffsetChanged(newOffset: number) {\n if (!isOffsetControlled(offset)) {\n setStateOffset(newOffset);\n }\n onOffsetChanged(newOffset);\n }\n\n const calendars = getCalendars({\n date,\n selected,\n monthsToDisplay,\n minDate,\n maxDate,\n offset: offsetMonth,\n firstDayOfWeek,\n showOutsideDays,\n });\n return {\n calendars,\n getDateProps: getDateProps.bind(null, onDateSelected),\n getBackProps: getBackProps.bind(null, {\n minDate,\n offsetMonth,\n handleOffsetChanged,\n }),\n getForwardProps: getForwardProps.bind(null, {\n maxDate,\n offsetMonth,\n handleOffsetChanged,\n }),\n handleOffsetChanged,\n };\n}\n"],"names":["isOffsetControlled","propOffset","getDateProps","onDateSelected","onClick","dateObj","composeEventHandlers","event","disabled","selectable","selected","role","getBackProps","minDate","offsetMonth","handleOffsetChanged","offset","calendars","label","subtractMonth","isBackDisabled","title","getForwardProps","maxDate","addMonth","isForwardDisabled","useCalendar","date","startOfDay","Date","monthsToDisplay","firstDayOfWeek","showOutsideDays","onOffsetChanged","stateOffset","setStateOffset","useState","prop","state","getOffset","newOffset","getCalendars","bind"],"mappings":"uNAoCA,SAASA,EAAmBC,GACxB,YAAsB,IAAfA,CACX,CAoBA,SAASC,EACLC,GACEC,QAAAA,EAASC,QAAAA,IAEJ,MAAA,CACHD,QAASE,EAAqBF,GAAUG,IACpCJ,EAAeE,EAASE,EAAK,IAEjCC,UAAWH,EAAQI,WACnB,eAAgBJ,EAAQK,SACxBC,KAAM,SAEd,CAqBA,SAASC,GACHC,QAAAA,EAASC,YAAAA,EAAaC,oBAAAA,IACtBX,QAAAA,EAASY,OAAAA,EAAS,EAAGC,UAAAA,IAEvB,MAAMC,EAAQ,cAAcF,UAA0B,IAAXA,EAAe,GAAK,OACxD,MAAA,CACHZ,QAASE,EAAqBF,GAAS,KACnCW,EACID,EAAcK,EAAc,CAAEF,UAAAA,EAAWD,OAAAA,EAAQH,QAAAA,IACrD,IAEJL,SAAUY,EAAe,CAAEH,UAAAA,EAAWJ,QAAAA,IACtC,aAAcK,EACdG,MAAOH,EAEf,CAqBA,SAASI,GACHC,QAAAA,EAAST,YAAAA,EAAaC,oBAAAA,IACtBX,QAAAA,EAASY,OAAAA,EAAS,EAAGC,UAAAA,IAEvB,MAAMC,EAAQ,WAAWF,UAA0B,IAAXA,EAAe,GAAK,OACrD,MAAA,CACHZ,QAASE,EAAqBF,GAAS,KACnCW,EACID,EAAcU,EAAS,CAAEP,UAAAA,EAAWD,OAAAA,EAAQO,QAAAA,IAChD,IAEJf,SAAUiB,EAAkB,CAAER,UAAAA,EAAWM,QAAAA,IACzC,aAAcL,EACdG,MAAOH,EAEf,CA8BO,SAASQ,GACZC,KAAAA,EAAOC,EAAe,IAAAC,MACtBN,QAAAA,EACAV,QAAAA,EACAiB,gBAAAA,EAAkB,EAClBC,eAAAA,EAAiB,EACjBC,gBAAAA,GAAkB,EAClBhB,OAAAA,EACAb,eAAAA,EACA8B,gBAAAA,EACAvB,SAAAA,IAEM,MAACwB,EAAaC,GAAkBC,EAAS,GACzCtB,EAjJV,SAAmBuB,EAAcC,GACtBtC,OAAAA,EAAmBqC,GAAQA,EAAOC,CAC7C,CA+IwBC,CAAUvB,EAAQkB,GAEtC,SAASnB,EAAoByB,GACpBxC,EAAmBgB,IACpBmB,EAAeK,GAEnBP,EAAgBO,EAAS,CAatB,MAAA,CACHvB,UAXcwB,EAAa,CAC3Bd,KAAAA,EACAjB,SAAAA,EACAoB,gBAAAA,EACAjB,QAAAA,EACAU,QAAAA,EACAP,OAAQF,EACRiB,eAAAA,EACAC,gBAAAA,IAIA9B,aAAcA,EAAawC,KAAK,KAAMvC,GACtCS,aAAcA,EAAa8B,KAAK,KAAM,CAClC7B,QAAAA,EACAC,YAAAA,EACAC,oBAAAA,IAEJO,gBAAiBA,EAAgBoB,KAAK,KAAM,CACxCnB,QAAAA,EACAT,YAAAA,EACAC,oBAAAA,IAEJA,oBAAAA,EAER"}
1
+ {"version":3,"file":"useCalendar.js","sources":["../../../../../src/components/datepicker/internal/useCalendar.ts"],"sourcesContent":["/***\n * MIT License\n *\n * Copyright (c) 2017 Deseret Digital Media. 2022 Fremtind Forsikring AS.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nimport { startOfDay } from \"date-fns\";\nimport React, { useState } from \"react\";\nimport {\n type CalendarMonth,\n type DateInfo,\n addMonth,\n composeEventHandlers,\n getCalendars,\n isBackDisabled,\n isForwardDisabled,\n subtractMonth,\n} from \"./utils.js\";\n\nfunction isOffsetControlled(propOffset: number | undefined): boolean {\n return propOffset !== undefined;\n}\n\nfunction getOffset(prop: number, state: number): number {\n return isOffsetControlled(prop) ? prop : state;\n}\n\ntype BoundGetDateProps = (dateInfo: DateInfo, event: React.MouseEvent) => void;\n\ntype GetDateProps = {\n onClick?: React.MouseEventHandler;\n dateObj: DateInfo;\n};\n\ntype GetDatePropsResult = {\n onClick: React.MouseEventHandler;\n disabled: boolean;\n \"aria-pressed\": boolean;\n role: \"button\";\n};\n\nfunction getDateProps(\n onDateSelected: BoundGetDateProps,\n { onClick, dateObj }: GetDateProps,\n): GetDatePropsResult {\n return {\n onClick: composeEventHandlers(onClick, (event) => {\n onDateSelected(dateObj, event);\n }),\n disabled: !dateObj.selectable,\n \"aria-pressed\": dateObj.selected,\n role: \"button\",\n };\n}\n\ntype BoundGetBackProps = {\n handleOffsetChanged: (newOffset: number) => void;\n offsetMonth: number;\n minDate?: Date;\n};\n\ntype GetBackProps = {\n onClick?: React.MouseEventHandler;\n offset?: number;\n calendars: CalendarMonth[];\n};\n\ntype GetBackPropsResult = {\n onClick: React.MouseEventHandler;\n disabled: boolean;\n \"aria-label\": string;\n title: string;\n};\n\nfunction getBackProps(\n { minDate, offsetMonth, handleOffsetChanged }: BoundGetBackProps,\n { onClick, offset = 1, calendars }: GetBackProps,\n): GetBackPropsResult {\n const label = `Gå tilbake ${offset} måned${offset === 1 ? \"\" : \"er\"}`;\n return {\n onClick: composeEventHandlers(onClick, () => {\n handleOffsetChanged(\n offsetMonth - subtractMonth({ calendars, offset, minDate }),\n );\n }),\n disabled: isBackDisabled({ calendars, minDate }),\n \"aria-label\": label,\n title: label,\n };\n}\n\ntype BoundGetForwardProps = {\n handleOffsetChanged: (newOffset: number) => void;\n offsetMonth: number;\n maxDate?: Date;\n};\n\ntype GetForwardProps = {\n onClick?: React.MouseEventHandler;\n offset?: number;\n calendars: CalendarMonth[];\n};\n\ntype GetForwardPropsResult = {\n onClick: React.MouseEventHandler;\n disabled: boolean;\n \"aria-label\": string;\n title: string;\n};\n\nfunction getForwardProps(\n { maxDate, offsetMonth, handleOffsetChanged }: BoundGetForwardProps,\n { onClick, offset = 1, calendars }: GetForwardProps,\n): GetForwardPropsResult {\n const label = `Gå frem ${offset} måned${offset === 1 ? \"\" : \"er\"}`;\n return {\n onClick: composeEventHandlers(onClick, () => {\n handleOffsetChanged(\n offsetMonth + addMonth({ calendars, offset, maxDate }),\n );\n }),\n disabled: isForwardDisabled({ calendars, maxDate }),\n \"aria-label\": label,\n title: label,\n };\n}\n\nexport interface UseCalendarProps {\n date?: Date;\n maxDate?: Date;\n minDate?: Date;\n monthsToDisplay?: number;\n firstDayOfWeek?: number;\n showOutsideDays?: boolean;\n offset: number;\n onDateSelected: (dateObj: DateInfo, event: React.MouseEvent) => void;\n onOffsetChanged: (newOffset: number) => void;\n selected?: Date | Date[];\n}\n\nexport type GetDatePropsFunc = (props: GetDateProps) => GetDatePropsResult;\nexport type GetBackPropsFunc = (props: GetBackProps) => GetBackPropsResult;\nexport type GetForwardPropsFunc = (\n props: GetForwardProps,\n) => GetForwardPropsResult;\nexport type HandleOffsetFunc = (newOffset: number) => void;\n\nexport type UseCalendarResult = {\n calendars: CalendarMonth[];\n getDateProps: GetDatePropsFunc;\n getBackProps: GetBackPropsFunc;\n getForwardProps: GetForwardPropsFunc;\n handleOffsetChanged: HandleOffsetFunc;\n};\n\nexport function useCalendar({\n date = startOfDay(new Date()),\n maxDate,\n minDate,\n monthsToDisplay = 1,\n firstDayOfWeek = 0,\n showOutsideDays = true,\n offset,\n onDateSelected,\n onOffsetChanged,\n selected,\n}: UseCalendarProps): UseCalendarResult {\n const [stateOffset, setStateOffset] = useState(0);\n const offsetMonth = getOffset(offset, stateOffset);\n\n function handleOffsetChanged(newOffset: number) {\n if (!isOffsetControlled(offset)) {\n setStateOffset(newOffset);\n }\n onOffsetChanged(newOffset);\n }\n\n const calendars = getCalendars({\n date,\n selected,\n monthsToDisplay,\n minDate,\n maxDate,\n offset: offsetMonth,\n firstDayOfWeek,\n showOutsideDays,\n });\n return {\n calendars,\n getDateProps: getDateProps.bind(null, onDateSelected),\n getBackProps: getBackProps.bind(null, {\n minDate,\n offsetMonth,\n handleOffsetChanged,\n }),\n getForwardProps: getForwardProps.bind(null, {\n maxDate,\n offsetMonth,\n handleOffsetChanged,\n }),\n handleOffsetChanged,\n };\n}\n"],"names":["isOffsetControlled","propOffset","getDateProps","onDateSelected","onClick","dateObj","composeEventHandlers","event","disabled","selectable","selected","role","getBackProps","minDate","offsetMonth","handleOffsetChanged","offset","calendars","label","subtractMonth","isBackDisabled","title","getForwardProps","maxDate","addMonth","isForwardDisabled","useCalendar","date","startOfDay","Date","monthsToDisplay","firstDayOfWeek","showOutsideDays","onOffsetChanged","stateOffset","setStateOffset","useState","prop","state","getOffset","newOffset","getCalendars","bind"],"mappings":"uNAoCA,SAASA,EAAmBC,GACxB,YAAsB,IAAfA,CACX,CAoBA,SAASC,EACLC,GACEC,QAAAA,EAASC,QAAAA,IAEX,MAAO,CACHD,QAASE,EAAqBF,EAAUG,IACpCJ,EAAeE,EAASE,KAE5BC,UAAWH,EAAQI,WACnB,eAAgBJ,EAAQK,SACxBC,KAAM,SAEd,CAqBA,SAASC,GACHC,QAAAA,EAASC,YAAAA,EAAaC,oBAAAA,IACtBX,QAAAA,EAASY,OAAAA,EAAS,EAAGC,UAAAA,IAEvB,MAAMC,EAAQ,cAAcF,UAA0B,IAAXA,EAAe,GAAK,OAC/D,MAAO,CACHZ,QAASE,EAAqBF,EAAS,KACnCW,EACID,EAAcK,EAAc,CAAEF,UAAAA,EAAWD,OAAAA,EAAQH,QAAAA,OAGzDL,SAAUY,EAAe,CAAEH,UAAAA,EAAWJ,QAAAA,IACtC,aAAcK,EACdG,MAAOH,EAEf,CAqBA,SAASI,GACHC,QAAAA,EAAST,YAAAA,EAAaC,oBAAAA,IACtBX,QAAAA,EAASY,OAAAA,EAAS,EAAGC,UAAAA,IAEvB,MAAMC,EAAQ,WAAWF,UAA0B,IAAXA,EAAe,GAAK,OAC5D,MAAO,CACHZ,QAASE,EAAqBF,EAAS,KACnCW,EACID,EAAcU,EAAS,CAAEP,UAAAA,EAAWD,OAAAA,EAAQO,QAAAA,OAGpDf,SAAUiB,EAAkB,CAAER,UAAAA,EAAWM,QAAAA,IACzC,aAAcL,EACdG,MAAOH,EAEf,CA8BO,SAASQ,GACZC,KAAAA,EAAOC,EAAW,IAAIC,MACtBN,QAAAA,EACAV,QAAAA,EACAiB,gBAAAA,EAAkB,EAClBC,eAAAA,EAAiB,EACjBC,gBAAAA,GAAkB,EAClBhB,OAAAA,EACAb,eAAAA,EACA8B,gBAAAA,EACAvB,SAAAA,IAEA,MAAOwB,EAAaC,GAAkBC,EAAS,GACzCtB,EAjJV,SAAmBuB,EAAcC,GAC7B,OAAOtC,EAAmBqC,GAAQA,EAAOC,CAC7C,CA+IwBC,CAAUvB,EAAQkB,GAEtC,SAASnB,EAAoByB,GACpBxC,EAAmBgB,IACpBmB,EAAeK,GAEnBP,EAAgBO,EACpB,CAYA,MAAO,CACHvB,UAXcwB,EAAa,CAC3Bd,KAAAA,EACAjB,SAAAA,EACAoB,gBAAAA,EACAjB,QAAAA,EACAU,QAAAA,EACAP,OAAQF,EACRiB,eAAAA,EACAC,gBAAAA,IAIA9B,aAAcA,EAAawC,KAAK,KAAMvC,GACtCS,aAAcA,EAAa8B,KAAK,KAAM,CAClC7B,QAAAA,EACAC,YAAAA,EACAC,oBAAAA,IAEJO,gBAAiBA,EAAgBoB,KAAK,KAAM,CACxCnB,QAAAA,EACAT,YAAAA,EACAC,oBAAAA,IAEJA,oBAAAA,EAER"}