@fremtind/jokul 0.22.0 → 0.22.2

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 (412) hide show
  1. package/build/ExpandableTableRow-8_2Qs86T.js +2 -0
  2. package/build/ExpandableTableRow-8_2Qs86T.js.map +1 -0
  3. package/build/ExpandableTableRow-CrPwH3tm.cjs +2 -0
  4. package/build/ExpandableTableRow-CrPwH3tm.cjs.map +1 -0
  5. package/build/build-stats.html +1 -1
  6. package/build/cjs/components/expander/ExpandSection.js +1 -1
  7. package/build/cjs/components/expander/Expander.js +1 -1
  8. package/build/cjs/components/expander/index.js +1 -1
  9. package/build/cjs/components/feedback/followup/Followup.js +1 -1
  10. package/build/cjs/components/icon/icons/animated/ArrowHorizontalAnimated.js +1 -1
  11. package/build/cjs/components/icon/icons/animated/ArrowHorizontalAnimated.js.map +1 -1
  12. package/build/cjs/components/icon/icons/animated/ArrowVerticalAnimated.js +1 -1
  13. package/build/cjs/components/icon/icons/animated/ArrowVerticalAnimated.js.map +1 -1
  14. package/build/cjs/components/icon/icons/animated/PlusRemoveAnimated.js +1 -1
  15. package/build/cjs/components/icon/icons/animated/PlusRemoveAnimated.js.map +1 -1
  16. package/build/cjs/components/index.js +1 -1
  17. package/build/cjs/components/menu/Menu.js +1 -1
  18. package/build/cjs/components/menu/MenuItemCheckbox.js +1 -1
  19. package/build/cjs/components/menu/MenuItemCheckbox.js.map +1 -1
  20. package/build/cjs/components/menu/index.js +1 -1
  21. package/build/cjs/components/select/NativeSelect.js +1 -1
  22. package/build/cjs/components/select/Select.js +1 -1
  23. package/build/cjs/components/select/index.js +1 -1
  24. package/build/cjs/components/table/ExpandableTableRow.js +1 -1
  25. package/build/cjs/components/table/ExpandableTableRowController.js +1 -1
  26. package/build/cjs/components/table/TablePagination.js +1 -1
  27. package/build/cjs/components/table/index.js +1 -1
  28. package/build/cjs/index.js +1 -1
  29. package/build/components/ScreenReaderOnly.d.ts +6 -0
  30. package/build/components/accordion/Accordion.d.ts +8 -0
  31. package/build/components/accordion/AccordionItem.d.ts +10 -0
  32. package/build/components/accordion/index.d.ts +4 -0
  33. package/build/components/breadcrumb/Breadcrumb.d.ts +6 -0
  34. package/build/components/breadcrumb/BreadcrumbItem.d.ts +10 -0
  35. package/build/components/breadcrumb/index.d.ts +4 -0
  36. package/build/components/button/Button.d.ts +7 -0
  37. package/build/components/button/index.d.ts +2 -0
  38. package/build/components/button/types.d.ts +43 -0
  39. package/build/components/card/Card.d.ts +37 -0
  40. package/build/components/card/CardImage.d.ts +19 -0
  41. package/build/components/card/InfoCard.d.ts +13 -0
  42. package/build/components/card/NavCard.d.ts +35 -0
  43. package/build/components/card/TaskCard.d.ts +23 -0
  44. package/build/components/card/documentation/examples/FakturainfoExample.d.ts +4 -0
  45. package/build/components/card/documentation/examples/InfoCardExample.d.ts +3 -0
  46. package/build/components/card/documentation/examples/NavCardExample.d.ts +3 -0
  47. package/build/components/card/documentation/examples/StatuskortExample.d.ts +4 -0
  48. package/build/components/card/documentation/examples/TaskCardExample.d.ts +3 -0
  49. package/build/components/card/documentation/examples/TopExample.d.ts +3 -0
  50. package/build/components/card/documentation/examples/cardExampleProps.d.ts +13 -0
  51. package/build/components/card/index.d.ts +9 -0
  52. package/build/components/card/types.d.ts +44 -0
  53. package/build/components/card/utils.d.ts +3 -0
  54. package/build/components/checkbox/Checkbox.d.ts +17 -0
  55. package/build/components/checkbox/index.d.ts +2 -0
  56. package/build/components/combobox/Combobox.d.ts +39 -0
  57. package/build/components/combobox/index.d.ts +2 -0
  58. package/build/components/cookie-consent/CookieConsent.d.ts +6 -0
  59. package/build/components/cookie-consent/CookieConsentContext.d.ts +48 -0
  60. package/build/components/cookie-consent/CookieConsentModal.d.ts +3 -0
  61. package/build/components/cookie-consent/consents/CustomConsents.d.ts +9 -0
  62. package/build/components/cookie-consent/consents/DefaultConsents.d.ts +9 -0
  63. package/build/components/cookie-consent/consents/RequirementCheckbox.d.ts +9 -0
  64. package/build/components/cookie-consent/cookieConsentUtils.d.ts +23 -0
  65. package/build/components/cookie-consent/index.d.ts +5 -0
  66. package/build/components/cookie-consent/types.d.ts +12 -0
  67. package/build/components/datepicker/DatePicker.d.ts +3 -0
  68. package/build/components/datepicker/index.d.ts +4 -0
  69. package/build/components/datepicker/internal/Calendar.d.ts +17 -0
  70. package/build/components/datepicker/internal/calendarReducer.d.ts +18 -0
  71. package/build/components/datepicker/internal/useCalendar.d.ts +59 -0
  72. package/build/components/datepicker/internal/utils.d.ts +167 -0
  73. package/build/components/datepicker/types.d.ts +269 -0
  74. package/build/components/datepicker/utils.d.ts +23 -0
  75. package/build/components/datepicker/validation.d.ts +11 -0
  76. package/build/components/description-list/DescriptionList.d.ts +14 -0
  77. package/build/components/description-list/index.d.ts +1 -0
  78. package/build/components/expander/ExpandSection.d.ts +22 -0
  79. package/build/components/expander/Expander.d.ts +28 -0
  80. package/build/components/expander/index.d.ts +4 -0
  81. package/build/components/feedback/Feedback.d.ts +50 -0
  82. package/build/components/feedback/FeedbackSuccess.d.ts +3 -0
  83. package/build/components/feedback/FeedbackValues.d.ts +6 -0
  84. package/build/components/feedback/feedbackContext.d.ts +20 -0
  85. package/build/components/feedback/followup/Followup.d.ts +14 -0
  86. package/build/components/feedback/followup/followupContext.d.ts +9 -0
  87. package/build/components/feedback/followup/useFollowup.d.ts +19 -0
  88. package/build/components/feedback/index.d.ts +3 -0
  89. package/build/components/feedback/main-question/MainQuestion.d.ts +16 -0
  90. package/build/components/feedback/main-question/mainQuestionContext.d.ts +9 -0
  91. package/build/components/feedback/main-question/useMainQuestion.d.ts +13 -0
  92. package/build/components/feedback/presets.d.ts +6 -0
  93. package/build/components/feedback/questions/AddonQuestion.d.ts +7 -0
  94. package/build/components/feedback/questions/CheckboxQuestion.d.ts +3 -0
  95. package/build/components/feedback/questions/ContactQuestion.d.ts +28 -0
  96. package/build/components/feedback/questions/RadioQuestion.d.ts +3 -0
  97. package/build/components/feedback/questions/SmileyQuestion.d.ts +3 -0
  98. package/build/components/feedback/questions/TextQuestion.d.ts +3 -0
  99. package/build/components/feedback/questions/index.d.ts +6 -0
  100. package/build/components/feedback/questions/smileyUtils.d.ts +4 -0
  101. package/build/components/feedback/types.d.ts +86 -0
  102. package/build/components/feedback/utils.d.ts +4 -0
  103. package/build/components/flex/Flex.d.ts +14 -0
  104. package/build/components/flex/index.d.ts +1 -0
  105. package/build/components/icon/Icon.d.ts +24 -0
  106. package/build/components/icon/documentation/internal/AnimatedIcon.d.ts +7 -0
  107. package/build/components/icon/documentation/internal/IconExample.d.ts +7 -0
  108. package/build/components/icon/documentation/internal/IconsExampleGrid.d.ts +8 -0
  109. package/build/components/icon/icons/ArrowDownIcon.d.ts +2 -0
  110. package/build/components/icon/icons/ArrowLeftIcon.d.ts +2 -0
  111. package/build/components/icon/icons/ArrowNorthEastIcon.d.ts +2 -0
  112. package/build/components/icon/icons/ArrowRightIcon.d.ts +2 -0
  113. package/build/components/icon/icons/ArrowUpIcon.d.ts +2 -0
  114. package/build/components/icon/icons/CalendarIcon.d.ts +2 -0
  115. package/build/components/icon/icons/CheckIcon.d.ts +2 -0
  116. package/build/components/icon/icons/ChevronDownIcon.d.ts +2 -0
  117. package/build/components/icon/icons/ChevronLeftIcon.d.ts +2 -0
  118. package/build/components/icon/icons/ChevronRightIcon.d.ts +2 -0
  119. package/build/components/icon/icons/ChevronUpIcon.d.ts +2 -0
  120. package/build/components/icon/icons/CloseIcon.d.ts +2 -0
  121. package/build/components/icon/icons/CopyIcon.d.ts +2 -0
  122. package/build/components/icon/icons/DotsIcon.d.ts +2 -0
  123. package/build/components/icon/icons/DragIcon.d.ts +2 -0
  124. package/build/components/icon/icons/ErrorIcon.d.ts +2 -0
  125. package/build/components/icon/icons/GreenCheckIcon.d.ts +3 -0
  126. package/build/components/icon/icons/HamburgerIcon.d.ts +2 -0
  127. package/build/components/icon/icons/InfoIcon.d.ts +2 -0
  128. package/build/components/icon/icons/LinkIcon.d.ts +2 -0
  129. package/build/components/icon/icons/MinusIcon.d.ts +2 -0
  130. package/build/components/icon/icons/PenIcon.d.ts +2 -0
  131. package/build/components/icon/icons/PlusIcon.d.ts +2 -0
  132. package/build/components/icon/icons/QuestionIcon.d.ts +2 -0
  133. package/build/components/icon/icons/RedCrossIcon.d.ts +3 -0
  134. package/build/components/icon/icons/SearchIcon.d.ts +2 -0
  135. package/build/components/icon/icons/SuccessIcon.d.ts +2 -0
  136. package/build/components/icon/icons/ThumbDownIcon.d.ts +2 -0
  137. package/build/components/icon/icons/ThumbUpIcon.d.ts +2 -0
  138. package/build/components/icon/icons/TrashCanIcon.d.ts +2 -0
  139. package/build/components/icon/icons/WarningIcon.d.ts +2 -0
  140. package/build/components/icon/icons/animated/ArrowHorizontalAnimated.d.ts +9 -0
  141. package/build/components/icon/icons/animated/ArrowVerticalAnimated.d.ts +9 -0
  142. package/build/components/icon/icons/animated/PlusRemoveAnimated.d.ts +9 -0
  143. package/build/components/icon/index.d.ts +39 -0
  144. package/build/components/icon/types.d.ts +19 -0
  145. package/build/components/icon-button/IconButton.d.ts +6 -0
  146. package/build/components/icon-button/index.d.ts +2 -0
  147. package/build/components/image/Image.d.ts +13 -0
  148. package/build/components/image/documentation/internal/props.d.ts +5 -0
  149. package/build/components/image/index.d.ts +3 -0
  150. package/build/components/image/useImageLoadingStatus.d.ts +2 -0
  151. package/build/components/index.d.ts +39 -0
  152. package/build/components/input-group/FieldGroup.d.ts +16 -0
  153. package/build/components/input-group/InputGroup.d.ts +40 -0
  154. package/build/components/input-group/Label.d.ts +14 -0
  155. package/build/components/input-group/SupportLabel.d.ts +61 -0
  156. package/build/components/input-group/index.d.ts +4 -0
  157. package/build/components/link/Link.d.ts +7 -0
  158. package/build/components/link/NavLink.d.ts +8 -0
  159. package/build/components/link/index.d.ts +2 -0
  160. package/build/components/link-list/LinkList.d.ts +16 -0
  161. package/build/components/link-list/index.d.ts +1 -0
  162. package/build/components/list/List.d.ts +8 -0
  163. package/build/components/list/ListItem.d.ts +8 -0
  164. package/build/components/list/index.d.ts +3 -0
  165. package/build/components/loader/Loader.d.ts +16 -0
  166. package/build/components/loader/index.d.ts +18 -0
  167. package/build/components/loader/skeletons/SkeletonAnimation.d.ts +16 -0
  168. package/build/components/loader/skeletons/SkeletonButton.d.ts +7 -0
  169. package/build/components/loader/skeletons/SkeletonCheckboxGroup.d.ts +12 -0
  170. package/build/components/loader/skeletons/SkeletonElement.d.ts +8 -0
  171. package/build/components/loader/skeletons/SkeletonInput.d.ts +11 -0
  172. package/build/components/loader/skeletons/SkeletonLabel.d.ts +8 -0
  173. package/build/components/loader/skeletons/SkeletonRadioButtonGroup.d.ts +12 -0
  174. package/build/components/loader/skeletons/SkeletonTable.d.ts +19 -0
  175. package/build/components/loader/skeletons/SkeletonTextArea.d.ts +11 -0
  176. package/build/components/loader/useDelayedRender.d.ts +1 -0
  177. package/build/components/logo/Logo.d.ts +15 -0
  178. package/build/components/logo/LogoStamp.d.ts +16 -0
  179. package/build/components/logo/index.d.ts +5 -0
  180. package/build/components/logo/text-paths/ForsikringLevertAvFremtind.d.ts +2 -0
  181. package/build/components/logo/text-paths/FraSB1ogDNB.d.ts +2 -0
  182. package/build/components/logo/text-paths/InnovasjonFraFremtind.d.ts +2 -0
  183. package/build/components/logo/text-paths/TeknologiFraFremtind.d.ts +2 -0
  184. package/build/components/logo/text-paths/VartEgetForsikringsselskap.d.ts +2 -0
  185. package/build/components/logo/text-paths/VartForsikringsselskap.d.ts +2 -0
  186. package/build/components/logo/text-paths/index.d.ts +6 -0
  187. package/build/components/logo/useTextSpinner.d.ts +5 -0
  188. package/build/components/menu/Menu.d.ts +39 -0
  189. package/build/components/menu/MenuDivider.d.ts +2 -0
  190. package/build/components/menu/MenuItem.d.ts +25 -0
  191. package/build/components/menu/MenuItemCheckbox.d.ts +11 -0
  192. package/build/components/menu/index.d.ts +4 -0
  193. package/build/components/menu/useMenuWideEvents.d.ts +6 -0
  194. package/build/components/message/DismissButton.d.ts +5 -0
  195. package/build/components/message/FormErrorMessage.d.ts +14 -0
  196. package/build/components/message/Message.d.ts +19 -0
  197. package/build/components/message/index.d.ts +2 -0
  198. package/build/components/modal/Modal.d.ts +72 -0
  199. package/build/components/modal/index.d.ts +4 -0
  200. package/build/components/modal/useModal.d.ts +69 -0
  201. package/build/components/pagination/PageButton.d.ts +7 -0
  202. package/build/components/pagination/Pagination.d.ts +18 -0
  203. package/build/components/pagination/index.d.ts +1 -0
  204. package/build/components/popover/Popover.d.ts +154 -0
  205. package/build/components/popover/index.d.ts +1 -0
  206. package/build/components/progress-bar/Countdown.d.ts +12 -0
  207. package/build/components/progress-bar/ProgressBar.d.ts +22 -0
  208. package/build/components/progress-bar/index.d.ts +4 -0
  209. package/build/components/radio-button/BaseRadioButton.d.ts +10 -0
  210. package/build/components/radio-button/RadioButton.d.ts +15 -0
  211. package/build/components/radio-button/RadioButtonGroup.d.ts +24 -0
  212. package/build/components/radio-button/index.d.ts +6 -0
  213. package/build/components/radio-button/radioGroupContext.d.ts +16 -0
  214. package/build/components/select/NativeSelect.d.ts +19 -0
  215. package/build/components/select/Select.d.ts +53 -0
  216. package/build/components/select/index.d.ts +4 -0
  217. package/build/components/select/select-utils.d.ts +2 -0
  218. package/build/components/summary-table/SummaryTable.d.ts +9 -0
  219. package/build/components/summary-table/SummaryTableRow.d.ts +7 -0
  220. package/build/components/summary-table/index.d.ts +2 -0
  221. package/build/components/summary-table/mocks/index.d.ts +10 -0
  222. package/build/components/system-message/SystemMessage.d.ts +21 -0
  223. package/build/components/system-message/common/DismissButton.d.ts +5 -0
  224. package/build/components/system-message/common/MessageIcon.d.ts +7 -0
  225. package/build/components/system-message/index.d.ts +1 -0
  226. package/build/components/table/DataTable.d.ts +18 -0
  227. package/build/components/table/ExpandableTableRow.d.ts +17 -0
  228. package/build/components/table/ExpandableTableRowController.d.ts +10 -0
  229. package/build/components/table/Table.d.ts +11 -0
  230. package/build/components/table/TableBody.d.ts +5 -0
  231. package/build/components/table/TableCaption.d.ts +7 -0
  232. package/build/components/table/TableCell.d.ts +17 -0
  233. package/build/components/table/TableColumn.d.ts +5 -0
  234. package/build/components/table/TableColumnGroup.d.ts +5 -0
  235. package/build/components/table/TableFooter.d.ts +5 -0
  236. package/build/components/table/TableHead.d.ts +7 -0
  237. package/build/components/table/TableHeader.d.ts +22 -0
  238. package/build/components/table/TablePagination.d.ts +43 -0
  239. package/build/components/table/TableRow.d.ts +15 -0
  240. package/build/components/table/index.d.ts +34 -0
  241. package/build/components/table/tableContext.d.ts +12 -0
  242. package/build/components/table/tableSectionContext.d.ts +13 -0
  243. package/build/components/table/utils.d.ts +10 -0
  244. package/build/components/tabs/NavTab.d.ts +25 -0
  245. package/build/components/tabs/NavTabs.d.ts +9 -0
  246. package/build/components/tabs/Tab.d.ts +11 -0
  247. package/build/components/tabs/TabList.d.ts +18 -0
  248. package/build/components/tabs/TabPanel.d.ts +11 -0
  249. package/build/components/tabs/Tabs.d.ts +15 -0
  250. package/build/components/tabs/index.d.ts +6 -0
  251. package/build/components/tabs/tabsContext.d.ts +11 -0
  252. package/build/components/tag/Tag.d.ts +15 -0
  253. package/build/components/tag/index.d.ts +3 -0
  254. package/build/components/text-input/BaseTextArea.d.ts +27 -0
  255. package/build/components/text-input/BaseTextInput.d.ts +42 -0
  256. package/build/components/text-input/TextArea.d.ts +6 -0
  257. package/build/components/text-input/TextInput.d.ts +9 -0
  258. package/build/components/text-input/index.d.ts +4 -0
  259. package/build/components/toast/Toast.d.ts +11 -0
  260. package/build/components/toast/ToastRegion.d.ts +7 -0
  261. package/build/components/toast/index.d.ts +2 -0
  262. package/build/components/toast/toastContext.d.ts +16 -0
  263. package/build/components/toast/types.d.ts +10 -0
  264. package/build/components/toggle-switch/ToggleSlider.d.ts +12 -0
  265. package/build/components/toggle-switch/ToggleSwitch.d.ts +32 -0
  266. package/build/components/toggle-switch/index.d.ts +2 -0
  267. package/build/components/toggle-switch/usePillStyles.d.ts +5 -0
  268. package/build/components/tooltip/PopupTip.d.ts +13 -0
  269. package/build/components/tooltip/TooltipContent.d.ts +2 -0
  270. package/build/components/tooltip/TooltipTrigger.d.ts +2 -0
  271. package/build/components/tooltip/index.d.ts +4 -0
  272. package/build/core/index.d.ts +2 -0
  273. package/build/core/tokens.d.ts +372 -0
  274. package/build/core/types.d.ts +41 -0
  275. package/build/es/components/expander/ExpandSection.js +1 -1
  276. package/build/es/components/expander/Expander.js +1 -1
  277. package/build/es/components/expander/index.js +1 -1
  278. package/build/es/components/feedback/followup/Followup.js +1 -1
  279. package/build/es/components/icon/icons/animated/ArrowHorizontalAnimated.js +1 -1
  280. package/build/es/components/icon/icons/animated/ArrowHorizontalAnimated.js.map +1 -1
  281. package/build/es/components/icon/icons/animated/ArrowVerticalAnimated.js +1 -1
  282. package/build/es/components/icon/icons/animated/ArrowVerticalAnimated.js.map +1 -1
  283. package/build/es/components/icon/icons/animated/PlusRemoveAnimated.js +1 -1
  284. package/build/es/components/icon/icons/animated/PlusRemoveAnimated.js.map +1 -1
  285. package/build/es/components/index.js +1 -1
  286. package/build/es/components/menu/Menu.js +1 -1
  287. package/build/es/components/menu/MenuItemCheckbox.js +1 -1
  288. package/build/es/components/menu/MenuItemCheckbox.js.map +1 -1
  289. package/build/es/components/menu/index.js +1 -1
  290. package/build/es/components/select/NativeSelect.js +1 -1
  291. package/build/es/components/select/Select.js +1 -1
  292. package/build/es/components/select/index.js +1 -1
  293. package/build/es/components/table/ExpandableTableRow.js +1 -1
  294. package/build/es/components/table/ExpandableTableRowController.js +1 -1
  295. package/build/es/components/table/TablePagination.js +1 -1
  296. package/build/es/components/table/index.js +1 -1
  297. package/build/es/index.js +1 -1
  298. package/build/hooks/index.d.ts +18 -0
  299. package/build/hooks/mediaQueryUtils.d.ts +21 -0
  300. package/build/hooks/useAnimatedDetails/index.d.ts +1 -0
  301. package/build/hooks/useAnimatedDetails/useAnimatedDetails.d.ts +20 -0
  302. package/build/hooks/useAnimatedHeight/index.d.ts +4 -0
  303. package/build/hooks/useAnimatedHeight/types.d.ts +26 -0
  304. package/build/hooks/useAnimatedHeight/useAnimatedHeight.d.ts +10 -0
  305. package/build/hooks/useAnimatedHeight/useAnimatedHeightBetween.d.ts +10 -0
  306. package/build/hooks/useAnimatedHeight/useAutoAnimateHeight.d.ts +20 -0
  307. package/build/hooks/useAriaLiveRegion/index.d.ts +1 -0
  308. package/build/hooks/useAriaLiveRegion/useAriaLiveRegion.d.ts +15 -0
  309. package/build/hooks/useBrowserPreferences/index.d.ts +1 -0
  310. package/build/hooks/useBrowserPreferences/useBrowserPreferences.d.ts +12 -0
  311. package/build/hooks/useClickOutside/index.d.ts +1 -0
  312. package/build/hooks/useClickOutside/useClickOutside.d.ts +7 -0
  313. package/build/hooks/useElementDimensions/index.d.ts +1 -0
  314. package/build/hooks/useElementDimensions/useElementDimensions.d.ts +11 -0
  315. package/build/hooks/useFocusOutside/index.d.ts +1 -0
  316. package/build/hooks/useFocusOutside/useFocusOutside.d.ts +7 -0
  317. package/build/hooks/useId/index.d.ts +1 -0
  318. package/build/hooks/useId/useId.d.ts +11 -0
  319. package/build/hooks/useIntersectionObserver/index.d.ts +1 -0
  320. package/build/hooks/useIntersectionObserver/useIntersectionObserver.d.ts +13 -0
  321. package/build/hooks/useKeyListener/index.d.ts +1 -0
  322. package/build/hooks/useKeyListener/useKeyListener.d.ts +8 -0
  323. package/build/hooks/useListNavigation/index.d.ts +1 -0
  324. package/build/hooks/useListNavigation/useListNavigation.d.ts +7 -0
  325. package/build/hooks/useLocalStorage/index.d.ts +1 -0
  326. package/build/hooks/useLocalStorage/useLocalStorage.d.ts +1 -0
  327. package/build/hooks/useMutationObserver/index.d.ts +1 -0
  328. package/build/hooks/useMutationObserver/useMutationObserver.d.ts +9 -0
  329. package/build/hooks/usePreviousValue/index.d.ts +1 -0
  330. package/build/hooks/usePreviousValue/usePreviousValue.d.ts +6 -0
  331. package/build/hooks/useProgressiveImg/index.d.ts +1 -0
  332. package/build/hooks/useProgressiveImg/useProgressiveImg.d.ts +10 -0
  333. package/build/hooks/useScreen/index.d.ts +2 -0
  334. package/build/hooks/useScreen/state.d.ts +17 -0
  335. package/build/hooks/useScreen/useScreen.d.ts +6 -0
  336. package/build/hooks/useScrollIntoView/index.d.ts +1 -0
  337. package/build/hooks/useScrollIntoView/useScrollIntoView.d.ts +11 -0
  338. package/build/hooks/useSwipeGesture/index.d.ts +1 -0
  339. package/build/hooks/useSwipeGesture/useSwipeGesture.d.ts +27 -0
  340. package/build/index.d.ts +4 -0
  341. package/build/utilities/constants/index.d.ts +2 -0
  342. package/build/utilities/constants/unicode.d.ts +13 -0
  343. package/build/utilities/formatters/avstand/formatAvstand.d.ts +23 -0
  344. package/build/utilities/formatters/bytes/formatBytes.d.ts +8 -0
  345. package/build/utilities/formatters/date/formatDate.d.ts +15 -0
  346. package/build/utilities/formatters/fodselsnummer/formatFodselsnummer.d.ts +15 -0
  347. package/build/utilities/formatters/index.d.ts +14 -0
  348. package/build/utilities/formatters/kontonummer/formatKontonummer.d.ts +16 -0
  349. package/build/utilities/formatters/kortnummer/formatKortnummer.d.ts +15 -0
  350. package/build/utilities/formatters/organisasjonsnummer/formatOrganisasjonsnummer.d.ts +15 -0
  351. package/build/utilities/formatters/telefonnummer/formatTelefonnummer.d.ts +18 -0
  352. package/build/utilities/formatters/util/formatNumber.d.ts +14 -0
  353. package/build/utilities/formatters/util/parseNumber.d.ts +6 -0
  354. package/build/utilities/formatters/util/registerWithMask.d.ts +42 -0
  355. package/build/utilities/formatters/valuta/formatValuta.d.ts +18 -0
  356. package/build/utilities/getThemeAndDensity.d.ts +4 -0
  357. package/build/utilities/index.d.ts +7 -0
  358. package/build/utilities/polymorphism/SlotComponent.d.ts +7 -0
  359. package/build/utilities/polymorphism/as-child.d.ts +39 -0
  360. package/build/utilities/polymorphism/index.d.ts +5 -0
  361. package/build/utilities/polymorphism/mergeProps.d.ts +3 -0
  362. package/build/utilities/polymorphism/mergeRefs.d.ts +3 -0
  363. package/build/utilities/polymorphism/polymorphism.d.ts +11 -0
  364. package/build/utilities/tabListener.d.ts +1 -0
  365. package/build/utilities/validators/hasMinimumWords/hasMinimumWords.d.ts +10 -0
  366. package/build/utilities/validators/hasNoIllegalCharacters/hasNoIllegalCharacters.d.ts +7 -0
  367. package/build/utilities/validators/index.d.ts +12 -0
  368. package/build/utilities/validators/isExactLength/isExactLength.d.ts +7 -0
  369. package/build/utilities/validators/isInteger/isInteger.d.ts +7 -0
  370. package/build/utilities/validators/isValidChassisnummer/isValidChassisnummer.d.ts +7 -0
  371. package/build/utilities/validators/isValidDogId/isValidDogId.d.ts +7 -0
  372. package/build/utilities/validators/isValidEpost/isValidEpost.d.ts +7 -0
  373. package/build/utilities/validators/isValidFodselsnummer/isValidFodselsnummer.d.ts +30 -0
  374. package/build/utilities/validators/isValidKortnummer/isValidKortnummer.d.ts +6 -0
  375. package/build/utilities/validators/isValidName/isValidName.d.ts +7 -0
  376. package/build/utilities/validators/isValidOrganisasjonsnummer/isValidOrganisasjonsnummer.d.ts +6 -0
  377. package/build/utilities/validators/isValidRegistreringsnummer/isValidRegistreringsnummer.d.ts +12 -0
  378. package/build/utilities/validators/isValidTelefonnummer/isValidTelefonnummer.d.ts +7 -0
  379. package/build/utilities/valuePair.d.ts +6 -0
  380. package/package.json +2 -2
  381. package/src/components/button/styles/button.css +2 -2
  382. package/src/components/button/styles/button.min.css +1 -1
  383. package/src/components/checkbox/styles/checkbox.css +4 -4
  384. package/src/components/checkbox/styles/checkbox.min.css +1 -1
  385. package/src/components/feedback/styles/feedback.css +2 -2
  386. package/src/components/feedback/styles/feedback.min.css +1 -1
  387. package/src/components/icon/styles/icon.css +4 -4
  388. package/src/components/icon/styles/icon.min.css +1 -1
  389. package/src/components/icon/styles/icon.scss +4 -4
  390. package/src/components/input-group/styles/input-group.css +2 -2
  391. package/src/components/input-group/styles/input-group.min.css +1 -1
  392. package/src/components/loader/styles/loader.css +6 -6
  393. package/src/components/loader/styles/loader.min.css +1 -1
  394. package/src/components/loader/styles/skeleton-loader.css +5 -5
  395. package/src/components/loader/styles/skeleton-loader.min.css +1 -1
  396. package/src/components/message/styles/message.css +2 -2
  397. package/src/components/message/styles/message.min.css +1 -1
  398. package/src/components/progress-bar/styles/progress-bar.css +2 -2
  399. package/src/components/progress-bar/styles/progress-bar.min.css +1 -1
  400. package/src/components/radio-button/styles/radio-button.css +3 -3
  401. package/src/components/radio-button/styles/radio-button.min.css +1 -1
  402. package/src/components/radio-button/styles/radio-button.scss +1 -1
  403. package/src/components/system-message/styles/system-message.css +2 -2
  404. package/src/components/system-message/styles/system-message.min.css +1 -1
  405. package/src/components/toast/styles/toast.css +4 -4
  406. package/src/components/toast/styles/toast.min.css +1 -1
  407. package/src/styles/styles.css +38 -38
  408. package/src/styles/styles.min.css +1 -1
  409. package/build/ExpandableTableRow-DXlyfK8L.cjs +0 -2
  410. package/build/ExpandableTableRow-DXlyfK8L.cjs.map +0 -1
  411. package/build/ExpandableTableRow-_-mY2lEq.js +0 -2
  412. package/build/ExpandableTableRow-_-mY2lEq.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ import{jsxs as e,jsx as n,Fragment as o}from"react/jsx-runtime";import{c as t}from"./clsx-BeLtu-UY.js";import s,{forwardRef as a,useRef as i,useState as r,useEffect as l,useCallback as c,useMemo as p}from"react";import{useAnimatedHeight as m}from"./es/hooks/useAnimatedHeight/useAnimatedHeight.js";import"./es/hooks/useScreen/useScreen.js";import{useId as d}from"./es/hooks/useId/useId.js";import"./es/components/icon/Icon.js";import{ArrowVerticalAnimated as u}from"./es/components/icon/icons/animated/ArrowVerticalAnimated.js";import"./es/components/icon/icons/animated/ArrowHorizontalAnimated.js";import"./es/components/icon/icons/animated/PlusRemoveAnimated.js";import"./es/components/icon/icons/ArrowDownIcon.js";import"./es/components/icon/icons/ArrowLeftIcon.js";import"./es/components/icon/icons/ArrowNorthEastIcon.js";import"./es/components/icon/icons/ArrowRightIcon.js";import"./es/components/icon/icons/ArrowUpIcon.js";import"./es/components/icon/icons/CalendarIcon.js";import"./es/components/icon/icons/CheckIcon.js";import"./es/components/icon/icons/ChevronDownIcon.js";import{ChevronLeftIcon as b}from"./es/components/icon/icons/ChevronLeftIcon.js";import{ChevronRightIcon as j}from"./es/components/icon/icons/ChevronRightIcon.js";import"./es/components/icon/icons/ChevronUpIcon.js";import"./es/components/icon/icons/CloseIcon.js";import"./es/components/icon/icons/CopyIcon.js";import"./es/components/icon/icons/DotsIcon.js";import"./es/components/icon/icons/DragIcon.js";import"./es/components/icon/icons/ErrorIcon.js";import"./es/components/icon/icons/GreenCheckIcon.js";import"./es/components/icon/icons/HamburgerIcon.js";import"./es/components/icon/icons/InfoIcon.js";import"./es/components/icon/icons/LinkIcon.js";import"./es/components/icon/icons/PlusIcon.js";import"./es/components/icon/icons/QuestionIcon.js";import"./es/components/icon/icons/RedCrossIcon.js";import"./es/components/icon/icons/SearchIcon.js";import"./es/components/icon/icons/SuccessIcon.js";import"./es/components/icon/icons/WarningIcon.js";import"./es/components/icon/icons/MinusIcon.js";import"./es/components/icon/icons/ThumbDownIcon.js";import"./es/components/icon/icons/ThumbUpIcon.js";import"./es/components/icon/icons/TrashCanIcon.js";import"./es/components/icon/icons/PenIcon.js";import"./es/components/button/Button.js";import"./es/components/card/Card.js";import"./es/components/card/CardImage.js";import"./es/components/card/NavCard.js";import"./es/components/checkbox/Checkbox.js";import"./es/components/combobox/Combobox.js";import"./es/components/cookie-consent/CookieConsentContext.js";import"react-dom";import"./es/components/modal/Modal.js";import"react-a11y-dialog";import"./es/components/list/List.js";import"./es/components/list/ListItem.js";import"./es/components/datepicker/DatePicker.js";import"./es/components/feedback/feedbackContext.js";import"./es/components/message/Message.js";import"./es/components/message/FormErrorMessage.js";import"./es/components/tooltip/Tooltip.js";import"./es/components/tooltip/TooltipContent.js";import"./es/components/tooltip/TooltipTrigger.js";import{InputGroup as g}from"./es/components/input-group/InputGroup.js";import"./es/components/feedback/followup/followupContext.js";import"./es/components/feedback/main-question/mainQuestionContext.js";import"./es/components/radio-button/RadioButton.js";import"./es/components/radio-button/radioGroupContext.js";import"./es/components/radio-button/BaseRadioButton.js";import"./es/components/text-input/BaseTextArea.js";import"./es/components/text-input/BaseTextInput.js";import"./es/components/text-input/TextArea.js";import{TextInput as v}from"./es/components/text-input/TextInput.js";import"./es/utilities/polymorphism/SlotComponent.js";import"./es/components/flex/Flex.js";import{IconButton as h}from"./es/components/icon-button/IconButton.js";import"./es/components/link/Link.js";import"./es/components/link/NavLink.js";import"./es/components/link-list/LinkList.js";import"./es/components/logo/text-paths/ForsikringLevertAvFremtind.js";import"./es/components/logo/text-paths/FraSB1ogDNB.js";import"./es/components/logo/text-paths/InnovasjonFraFremtind.js";import"./es/components/logo/text-paths/TeknologiFraFremtind.js";import"./es/components/logo/text-paths/VartEgetForsikringsselskap.js";import"./es/components/logo/text-paths/VartForsikringsselskap.js";import{useFloatingTree as k,useFloatingNodeId as f,useFloatingParentNodeId as y,useFloating as w,offset as x,flip as _,shift as C,autoUpdate as N,useInteractions as P,useHover as I,safePolygon as T,useClick as E,useDismiss as F,useRole as L,useListNavigation as D,useMergeRefs as A,FloatingNode as S,FloatingPortal as R,FloatingFocusManager as M,FloatingTree as O}from"@floating-ui/react";import{AnimatePresence as $,motion as V}from"framer-motion";import*as B from"react-is";import{getThemeAndDensity as H}from"./es/utilities/getThemeAndDensity.js";import"./es/components/menu/MenuItem.js";import"./es/components/menu/MenuItemCheckbox.js";import"./es/components/pagination/Pagination.js";import"./es/components/popover/Popover.js";import{usePreviousValue as G}from"./es/hooks/usePreviousValue/usePreviousValue.js";import{useListNavigation as K}from"./es/hooks/useListNavigation/useListNavigation.js";import{getValuePair as U}from"./es/utilities/valuePair.js";import"./es/components/system-message/SystemMessage.js";import"./es/components/table/DataTable.js";import"./es/components/table/Table.js";import"./es/components/table/TableBody.js";import"./es/components/table/TableCaption.js";import{TableCell as q}from"./es/components/table/TableCell.js";import"./es/components/table/TableColumn.js";import"./es/components/table/TableColumnGroup.js";import{useTableContext as W}from"./es/components/table/tableContext.js";import"./es/components/table/tableSectionContext.js";import"./es/components/table/TableFooter.js";import"./es/components/table/TableHead.js";import"./es/components/table/TableHeader.js";import{TableRow as Q}from"./es/components/table/TableRow.js";import"./es/components/tabs/NavTab.js";import"./es/components/tabs/tabsContext.js";import"./es/components/tabs/Tab.js";import"./es/components/tag/Tag.js";import"./es/components/toast/toastContext.js";import"./es/components/toggle-switch/ToggleSwitch.js";import{focusSelected as z,toLower as J}from"./es/components/select/select-utils.js";import{useMenuWideEvents as X}from"./es/components/menu/useMenuWideEvents.js";import{ScreenReaderOnly as Y}from"./es/components/ScreenReaderOnly.js";const Z=s.forwardRef((({as:o="button",className:a,children:i,density:r,expandDirection:l="down",isExpanded:c=!1,hideLabel:p=!1,...m},d)=>{const b=p?Y:s.Fragment,j="down"===l?!c:c;return e(o,{"aria-expanded":c,"data-testid":"jkl-expander",type:"button"===o?"button":void 0,className:t("jkl-expander",a,{"jkl-expander--expanded":c,"jkl-expander--icon-only":!i}),...m,"data-density":r,ref:d,children:[i&&n(b,{children:n("span",{className:"jkl-expander__text",children:i})}),n(u,{className:"jkl-expander__arrow",pointingDown:j,bold:c})]})}));Z.displayName="Expander";const ee=a(((o,a)=>{const{children:c,className:p,initialPlacement:m,openOnHover:u=!1,keepOpenOnClickOutside:b=!1,triggerElement:j,isOpen:g,onToggle:v,...h}=o,O=d("jkl-menu"),G=k(),K=f(),U=y(),q=null!=U,W=i([]),[Q,z]=r(null),{allowHover:J,isOpen:Y,setIsOpen:Z}=X(G,K,U),ee=void 0!==g?g:Y;l((()=>null==v?void 0:v(ee)),[ee,v]);const{x:ne,y:oe,refs:te,placement:se,strategy:ae,context:ie}=w({nodeId:K,open:ee,onOpenChange:Z,placement:m||(q?"right-start":"bottom-start"),middleware:[x(2),_({fallbackAxisSideDirection:"end",crossAxis:!1}),C({padding:8})],whileElementsMounted:N}),{getReferenceProps:re,getFloatingProps:le,getItemProps:ce}=P([I(ie,{enabled:u&&J,delay:{open:75},handleClose:T({requireIntent:!0,blockPointerEvents:!0})}),E(ie,{event:"mousedown"}),F(ie,{outsidePress:!b}),L(ie,{role:"menu"}),D(ie,{listRef:W,activeIndex:Q,nested:q,onNavigate:z})]),pe=A([te.setReference,a]),{theme:me,density:de}=H(te.reference.current);return e(S,{id:K,children:[s.isValidElement(j)&&("button"===j.type||B.isForwardRef(j))?s.cloneElement(j,{...re({...h,ref:pe,role:q?"menuitem":void 0,"aria-controls":O,onClick(e){e.stopPropagation()}})}):j,n($,{children:ee&&n(R,{children:n(M,{context:ie,modal:!1,initialFocus:q?-1:0,returnFocus:!q,children:n(V.div,{className:t("jkl jkl-menu",p),"data-theme":me,"data-layout-density":de,role:"menu",initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{ease:"easeIn",duration:.1},"data-placement":se,"aria-live":"assertive","aria-hidden":!ee,ref:te.setFloating,...le({id:O,style:{position:ae,top:oe??"",left:ne??""}}),children:s.Children.map(c,((e,n)=>s.isValidElement(e)&&B.isForwardRef(e)?s.cloneElement(e,ce({...e.props,tabIndex:Q===n?0:-1,role:"menuitem",ref(e){W.current[n]=e},onClick(n){var o,t;null==(t=(o=e.props).onClick)||t.call(o,n),!n.defaultPrevented&&(null==G||G.events.emit("click"))},onKeyDown(n){var o,t;null==(t=(o=e.props).onKeyDown)||t.call(o,n),!n.defaultPrevented&&(null==G||G.events.emit("keydown"),"menuitemcheckbox"===n.currentTarget.role&&"Enter"===n.key&&Z(!1))},onMouseEnter(){J&&ee&&z(n)}})):e))})})})})]})}));ee.displayName="MenuComponent";const ne=a(((e,o)=>null===y()?n(O,{children:n(ee,{ref:o,...e})}):n(ee,{ref:o,...e})));ne.displayName="Menu";const oe=()=>{},te=a(((s,a)=>{const{id:b,name:j,items:v,value:h,label:k,labelProps:f,onChange:y,onBlur:w,onFocus:x,className:_,helpLabel:C,errorLabel:N,invalid:P,searchable:I=!1,inline:T=!1,defaultPrompt:E="Velg",density:F,width:L,maxShownOptions:D=5,style:A,tooltipProps:S,...R}=s,M=d(b||"jkl-select",{generateSuffix:!b}),O=`${M}_label`,$=`${M}_button`,V=`${M}_search-input`,[B,H]=r(!1),q=c((()=>{H((e=>!e))}),[]),W=!!I,Q=W&&B,[X,Y]=r(""),Z=c((e=>!!e.label.toLowerCase().includes(X.toLowerCase())||"function"==typeof I&&I(X,e)),[I,X]),ee=p((()=>v.map(U).map((e=>{const n=!W||""===X||Z(e);return{...e,visible:n}}))),[v,W,X,Z]),ne=p((()=>!(typeof h>"u")&&v.some((e=>"string"==typeof e?e===h:e.value===h))),[h,v]),[te,se]=r(ne&&void 0!==h?h:""),ae=""!==te,ie=p((()=>{var e;return(null==(e=ee.find((e=>e.value===te)))?void 0:e.label)||E}),[ee,te,E]),re=i(null),le=c((e=>{re.current=e,a&&("function"==typeof a?a(e):a.current=e),e&&se(e.value)}),[re,a]),ce=G(h);l((()=>{h!==ce&&se(typeof h>"u"||!ne?"":h)}),[se,h,ce,ne]);const pe=c((e=>{const n=e.value;Y(""),se(n),q()}),[Y,se,q]),me=G(te);l((()=>{typeof me>"u"||me===te||te===h||(y&&y({type:"change",target:{name:j,value:te}}),re.current&&re.current.dispatchEvent(new Event("change",{bubbles:!0})))}),[y,j,h,te,me]);const de=i(null),ue=i(!1),be=i(null),je=i(null),ge=c(((e,n)=>{if(e&&!W){const e=n.current;e&&z(e,te)}else e?be.current&&be.current.focus():ue.current&&je.current&&je.current.focus()}),[W,te]),[ve]=m(B,{onFirstVisible:ge,onTransitionEnd:ge});K({ref:ve});const he=c((()=>{var e;W&&Y(""),w&&(w({type:"blur",target:{name:j,value:te}}),null==(e=re.current)||e.dispatchEvent(new Event("focusout",{bubbles:!0}))),ue.current=!1,H(!1)}),[w,Y,H,W,j,te]),ke=c((e=>{const n=de.current;n&&n.contains(e.relatedTarget)||he()}),[he]),fe=c((()=>{ue.current||(x&&x({type:"change",target:{name:j,value:te}}),ue.current=!0)}),[x,te,j]),ye=c((e=>{e.target.focus({preventScroll:!0})}),[]);l((()=>{const e=re.current,n=be.current,o=je.current,t=de.current;return null==e||e.addEventListener("focus",(()=>{Q?null==n||n.focus():null==o||o.focus()})),null==e||e.addEventListener("blur",(function(e){t&&t.contains(e.relatedTarget)&&e.preventDefault()})),()=>{null==e||e.removeEventListener("focus",(()=>{Q?null==n||n.focus():null==o||o.focus()})),null==e||e.removeEventListener("blur",(function(e){t&&t.contains(e.relatedTarget)&&e.preventDefault()}))}}),[Q]);const we=c((e=>{"ArrowDown"!==e.key&&" "!==e.key||B?"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),H(!1)):(e.preventDefault(),e.stopPropagation(),H(!0))}),[H,B]),xe=c((e=>{if("ArrowDown"===e.key){e.preventDefault(),e.stopPropagation();const n=ve.current;n&&z(n,W?void 0:te)}else if("Escape"===e.key)e.preventDefault(),e.stopPropagation(),H(!1);else if("Tab"!==e.key||e.shiftKey)"Enter"===e.key&&B&&(e.preventDefault(),e.stopPropagation());else{const n=ve.current;n&&(e.preventDefault(),e.stopPropagation(),z(n,te))}}),[H,ve,te,W,B]),_e=c((e=>{if("Tab"===e.key)e.preventDefault(),e.stopPropagation(),e.shiftKey&&be.current?be.current.focus():je.current&&(se(e.currentTarget.value),H(!1),je.current.focus());else if("ArrowUp"===e.key&&ve.current&&be.current){const n=ve.current.querySelector('[role="option"]:not([hidden])');e.currentTarget.id===(null==n?void 0:n.id)&&be.current&&be.current.focus()}}),[H,ve]);return l((()=>{const e=e=>{"Escape"===e.key&&B&&H(!1)};return typeof window<"u"&&B&&window.addEventListener("keydown",e),()=>{typeof window<"u"&&window.removeEventListener("keydown",e)}}),[H,B]),e(o,{children:[e("select",{name:j,tabIndex:-1,"data-testid":"jkl-native-select",className:"jkl-sr-only","aria-hidden":!0,ref:le,value:te,onChange:oe,children:[n("option",{value:""})," ",ee.map((e=>n("option",{hidden:!e.visible,value:e.value,children:e.label},`${M}-opt-${e.value}`)))]}),n(g,{ref:de,"data-testid":"jkl-select",className:t("jkl-select",_,{"jkl-select--inline":T,"jkl-select--open":B&&ee.some((e=>e.visible)),"jkl-select--no-value":!ae,"jkl-select--invalid":!!N||P}),tooltipProps:S&&{...S,triggerProps:{...S.triggerProps,onFocus:e=>{var n,o;null==(o=null==(n=S.triggerProps)?void 0:n.onFocus)||o.call(n,e),he()}}},...R,id:W?V:$,style:{"--jkl-select-max-shown-options":D,...A},density:F,label:k,labelProps:{id:O,srOnly:T,...f,htmlFor:W?V:$},helpLabel:C,errorLabel:N,render:o=>e("div",{className:"jkl-select__outer-wrapper",style:{width:L},children:[W&&n("input",{...o,id:V,hidden:!Q,ref:be,placeholder:"Søk",value:X,onChange:e=>Y(e.target.value),"data-testid":"jkl-select__search-input",className:"jkl-select__search-input","aria-autocomplete":"list","aria-activedescendant":ae?`${M}__${J(te)}`:void 0,"aria-controls":M,"aria-expanded":B,role:"combobox",onKeyDown:xe,onBlur:ke,onFocus:fe,onClick:e=>{e.stopPropagation()}}),n("button",{...o,id:$,ref:je,hidden:Q,type:"button",name:`${j}-btn`,className:t("jkl-select__button",{"jkl-select__button--active-value":!!te}),"data-testid":"jkl-select__button","aria-label":`${ie||"Velg"},${k}`,"aria-expanded":B,"aria-controls":M,onBlur:ke,onFocus:fe,onKeyDown:we,onClick:q,onMouseDown:e=>{var n;e.preventDefault(),null==(n=je.current)||n.focus()},children:ie}),n("div",{id:M,ref:ve,role:"listbox",className:"jkl-select__options-menu",hidden:!B||ee.every((e=>!e.visible)),"aria-labelledby":O,tabIndex:-1,"data-focus":"controlled",children:ee.map(((o,t)=>o.visible?e("button",{hidden:!o.visible,type:"button",id:`${M}__${J(o.value)}`,className:"jkl-select__option","data-testid":"jkl-select__option","aria-selected":o.value===te,role:"option",value:o.value,"data-testautoid":`jkl-select__option-${t}`,onBlur:ke,onFocus:fe,onKeyDown:_e,onClick:e=>{e.preventDefault(),pe(o)},onMouseOver:ye,children:[o.label,o.description?n("span",{className:"jkl-select__option-description",children:o.description}):null]},`${M}-${o.value}`):null))}),n(u,{variant:"medium",pointingDown:!B,className:"jkl-select__arrow"})]})})]})}));te.displayName="Select";const se=a(((o,s)=>{const{label:a,className:i,density:r,errorLabel:l,helpLabel:c,inline:p,invalid:m,items:d,labelProps:b,placeholder:j="Velg",selectClassName:v,supportLabelProps:h,tooltipProps:k,value:f,width:y,...w}=o;return n(g,{label:a,density:r,errorLabel:l,helpLabel:c,labelProps:b,inline:p,supportLabelProps:h,tooltipProps:k,"data-testid":"jkl-select",className:t("jkl-select",i,{"jkl-select--inline":p,"jkl-select--invalid":!!l||m}),render:o=>e("div",{className:"jkl-select__outer-wrapper",style:{width:y},children:[e("select",{ref:s,className:t("jkl-select__button",v,{"jkl-select__button--active-value":!!f}),defaultValue:f?void 0:"",value:f,...o,...w,children:[j&&!f&&n("option",{disabled:!0,value:"",children:j}),d.map(U).map((e=>n("option",{"data-testid":"jkl-select__option",className:"jkl-select__option",value:e.value,children:e.label},e.value)))]}),n(u,{variant:"medium",pointingDown:!0,className:"jkl-select__arrow"})]})})}));se.displayName="NativeSelect";const ae=a(((o,s)=>{const{activePage:a=0,totalNumberOfRows:i,rowsPerPage:l,rowsPerPageItems:p,className:m,density:u,id:g,withGoToPage:k=!1,onChange:f,onChangeRowsPerPage:y,labels:w={rowsPerPage:"Rader per side",previous:"Forrige",next:"Neste"},...x}=o,_=d(g||"jkl-table-pagination",{generateSuffix:!g}),{density:C}=W(),N=l<=0?1:Math.ceil(i/l),[P,I]=r(function(e,n,o){return n<e?e:n>o?o:n}(0,a,N-1)),T=c((e=>{const n=Number.parseInt(e.currentTarget.dataset.number);f(e,n,P),I(n),F(String(n+1))}),[f,I,P]),[E,F]=r(String(P+1)),L=c((e=>{F(e.target.value);try{const n=Number.parseInt(e.target.value)-1;if(Number.isNaN(n))return;n>=0&&n<N&&(f(e,n,P),I(n))}catch{return}}),[f,F,I,P,N]),D=c((e=>{if(0===P)return void f(e,P,P);const n=P-1;f(e,n,P),I(n),F(String(n+1))}),[f,I,P]),A=c((e=>{if(P===N-1)return void f(e,P,P);const n=P+1;f(e,n,P),I(n),F(String(n+1))}),[f,I,N,P]);return e("div",{className:t("jkl-table-pagination",m),...x,id:_,"data-density":u||C,ref:s,children:[n("div",{className:"jkl-table-pagination__left",children:e("div",{className:"jkl-table-pagination__picker jkl-table-pagination__picker--rows",children:[e("span",{className:"jkl-table-pagination__picker-label","aria-hidden":"true",children:[w.rowsPerPage,":"]}),n(se,{className:"jkl-table-pagination__picker-input",label:w.rowsPerPage,labelProps:{srOnly:!0},name:`${_}-rows-per-page`,items:p.map((e=>"number"==typeof e?String(e):{label:e.label,value:String(e.value)})),value:String(l),onChange:y,width:"min(8rem, 100%)",inline:!0})]})}),n("div",{className:"jkl-table-pagination__right",children:1!==N&&e("nav",{className:"jkl-table-pagination__nav",children:[k&&e("div",{className:"jkl-table-pagination__picker jkl-table-pagination__picker--page",children:[e("span",{className:"jkl-table-pagination__picker-label","aria-hidden":"true",children:["object"==typeof k?k.gotoLabel:"Gå til side",":"]}),n(v,{className:"jkl-table-pagination__picker-input",label:"object"==typeof k?k.gotoLabel:"Gå til side",labelProps:{srOnly:!0},name:`${_}-go-to-page`,value:E,width:"min(4rem, 100%)",onChange:L,"aria-invalid":E&&E!==String(P+1)?"true":void 0})]}),e("ul",{children:[n("li",{children:n(h,{className:"jkl-table-pagination__previous",title:w.previous,onClick:D,children:n(b,{})})}),n(ie,{id:_,activePage:a,numberOfPages:N,onPageClick:T}),n("li",{children:n(h,{className:"jkl-table-pagination__next",title:w.next,onClick:A,children:n(j,{})})})]})]})})]})})),ie=({id:s,activePage:a,numberOfPages:i,onPageClick:r})=>{if(i<=7)return n(o,{children:Array.from({length:i}).map(((e,o)=>n("li",{children:n("button",{className:t("jkl-table-pagination__page",{"jkl-table-pagination__page--active":a===o}),type:"button","data-number":o,onClick:r,children:o+1})},`${s}-page-${o}`)))});const l=a>3&&i>7,c=a<i-4&&i>7,p=Math.min(Math.max(a-2,1),i-6),m=Math.min(p+1,i-5),d=Math.min(m+1,i-4),u=Math.min(m+2,i-3),b=Math.min(m+3,i-2);return e(o,{children:[n("li",{children:n(re,{isActive:0===a,number:0,onClick:r})}),n("li",{children:l?n("span",{className:"jkl-table-pagination__ellipsis","aria-hidden":!0,children:"..."}):n(re,{isActive:a===p,number:p,onClick:r})}),n("li",{children:n(re,{isActive:a===m,number:m,onClick:r})}),n("li",{children:n(re,{isActive:a===d,number:d,onClick:r})}),n("li",{children:n(re,{isActive:a===u,number:u,onClick:r})}),n("li",{children:c?n("span",{className:"jkl-table-pagination__ellipsis","aria-hidden":!0,children:"..."}):n(re,{isActive:a===b,number:b,onClick:r})}),n("li",{children:n(re,{isActive:a===i-1,number:i-1,onClick:r})})]})},re=({isActive:e,number:o,onClick:s,...a})=>n("button",{className:t("jkl-table-pagination__page",{"jkl-table-pagination__page--active":e}),type:"button","data-number":o,onClick:s,...a,children:o+1});ae.displayName="TablePagination";const le=a((({isOpen:e,onClick:o,children:s,className:a,id:i,"aria-controls":r,...l},c)=>{if(void 0===e||"function"!=typeof o)throw new Error("ExpandableTableRowController must have ExpandableTableRow as parent");const{density:p,collapseToList:m}=W(),d=l["data-th"],u=m?d:void 0;return n(q,{className:t("jkl-table-cell--expand",{"jkl-table-cell--expand-without-text":!s},a),...l,ref:c,children:n(Z,{className:t("jkl-table-row-expand-button",{"jkl-table-row-expand-button--expanded":e}),id:i,density:p,isExpanded:e,"aria-controls":r,"aria-label":s?void 0:d||"Ekspander rad",onClick:e=>{e.stopPropagation(),o()},onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.stopPropagation(),e.preventDefault(),o())},children:s??u})})}));le.displayName="ExpandableTableRowController";const ce=a(((a,i)=>{const{className:c,clickable:p,children:u,expandedChildren:b,onToggle:j,colSpan:g=100,isOpen:v,...h}=a,[k,f]=r(v??!1);l((()=>{typeof v>"u"||f(v)}),[v]);const[y]=m(k,{timing:"expressive"}),w=()=>{const e=!k;j&&j(e),f(e)},x=t("jkl-table-row--expandable",c,{"jkl-table-row--expanded":k,"jkl-expandable-table-row--clickable-external":p}),_=t("jkl-expandable-table-row__expanded-row",{"jkl-expandable-table-row__expanded-row--expanded":k}),C=d("jkl-expandable-table-row"),N=d("jkl-expandable-table-row-controller");return e(o,{children:[n(Q,{className:x,clickable:p??{onClick:()=>w()},...h,ref:i,children:s.Children.map(u,(e=>s.isValidElement(e)&&e.type==le?s.cloneElement(e,{isOpen:k,onClick:()=>w(),"aria-controls":C,id:N}):e))}),n("tr",{"aria-hidden":!k,children:n("td",{colSpan:g,children:n("div",{ref:y,className:_,id:C,"aria-labelledby":N,hidden:!k,role:"group",children:b})})})]})}));ce.displayName="ExpandableTableRow";export{Z as E,ne as M,se as N,te as S,ae as T,ce as a,le as b};
2
+ //# sourceMappingURL=ExpandableTableRow-8_2Qs86T.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpandableTableRow-8_2Qs86T.js","sources":["../src/components/expander/Expander.tsx","../src/components/menu/Menu.tsx","../src/components/select/Select.tsx","../src/components/select/NativeSelect.tsx","../src/components/table/TablePagination.tsx","../src/components/table/ExpandableTableRowController.tsx","../src/components/table/ExpandableTableRow.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { ForwardedRef } from \"react\";\nimport { Density, ScreenReaderOnly, WithChildren } from \"../..\";\nimport { ArrowVerticalAnimated } from \"../icon\";\n\nexport type ExpandDirection = \"up\" | \"down\";\n\nexport interface ExpanderProps extends WithChildren {\n as?: \"summary\" | \"button\";\n /** Må settes dersom du ikke bruker CoreToggle. Verdien skal være IDen til innholdet du ekspanderer. */\n \"aria-controls\"?: string;\n /** Må settes dersom du ikke bruker CoreToggle. IDen her skal brukes som verdien til aria-labelledby på innholdet du ekspanderer. */\n id?: string;\n className?: string;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n onKeyDown?: React.KeyboardEventHandler<HTMLButtonElement>;\n /**\n * Styrer retningen til pila, som animeres ved endring. Styrer også aria-expanded.\n * @default false\n */\n isExpanded?: boolean;\n /** @default \"down\" */\n expandDirection?: ExpandDirection;\n density?: Density;\n /**\n * Skjul knappeteksten visuelt.\n *\n * @default false\n */\n hideLabel?: boolean;\n}\n\nexport const Expander = React.forwardRef(\n (\n {\n as = \"button\",\n className,\n children,\n density,\n expandDirection = \"down\",\n isExpanded = false,\n hideLabel = false,\n ...rest\n }: ExpanderProps,\n ref: ForwardedRef<HTMLButtonElement>,\n ): JSX.Element => {\n const ContentWrapper = hideLabel ? ScreenReaderOnly : React.Fragment;\n const pointingDown = expandDirection === \"down\" ? !isExpanded : isExpanded;\n\n const El = as;\n const type = El === \"button\" ? \"button\" : undefined;\n\n return (\n <El\n aria-expanded={isExpanded}\n data-testid=\"jkl-expander\"\n type={type}\n className={clsx(\"jkl-expander\", className, {\n \"jkl-expander--expanded\": isExpanded,\n \"jkl-expander--icon-only\": !children,\n })}\n {...rest}\n data-density={density}\n ref={ref}\n >\n {children && (\n <ContentWrapper>\n <span className=\"jkl-expander__text\">{children}</span>\n </ContentWrapper>\n )}\n <ArrowVerticalAnimated className=\"jkl-expander__arrow\" pointingDown={pointingDown} bold={isExpanded} />\n </El>\n );\n },\n);\n\nExpander.displayName = \"Expander\";\n","import {\n autoUpdate,\n flip,\n FloatingFocusManager,\n FloatingNode,\n FloatingPortal,\n FloatingTree,\n offset,\n type Placement,\n safePolygon,\n shift,\n useClick,\n useDismiss,\n useFloating,\n useFloatingNodeId,\n useFloatingParentNodeId,\n useFloatingTree,\n useHover,\n useInteractions,\n useListNavigation,\n useMergeRefs,\n useRole,\n} from \"@floating-ui/react\";\nimport clsx from \"clsx\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport React, { type ButtonHTMLAttributes, forwardRef, type ReactNode, useEffect, useRef, useState } from \"react\";\nimport * as ReactIs from \"react-is\";\nimport { type DataTestAutoId, getThemeAndDensity, WithChildren } from \"../..\";\nimport { useId } from \"../../hooks\";\nimport { useMenuWideEvents } from \"./useMenuWideEvents\";\n\nexport interface MenuProps\n extends DataTestAutoId,\n WithChildren,\n Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n className?: string;\n /**\n * Initiell plassering av menyen. Dersom det ikke er plass på skjermen der du\n * angir at den skal åpnes vil den slyttes automatisk.\n * @default \"bottom-start\" på toppnivå, \"right-start\" for undermenyer\n * */\n initialPlacement?: Placement;\n /**\n * Angir om menyen skal åpnes ved hover (uten å måtte klikke)\n * @default false\n */\n openOnHover?: boolean;\n /**\n * Angir om menyen skal holdes åpen når man klikker utenfor menyen\n * @default false\n */\n keepOpenOnClickOutside?: boolean;\n /**\n * Elementet som fungerer som trigger for menyen. Dersom elementet ikke er en `<button>`\n * eller en `forwardRef<HTMLButtonElement>` vil det bli lagt inne i en knapp\n * med forhåndsdefinert stil. For å komme raskt i gang kan du bruke komponenten\n * `MenuTriggerButton` fra denne pakken.\n */\n triggerElement: ReactNode;\n /**\n * Kan brukes til å styre utenfra om menyen skal være åpen eller ikke.\n * @default false\n */\n isOpen?: boolean;\n /**\n * Callback som kalles når menyen åpnes eller lukkes.\n */\n onToggle?: (isOpen: boolean) => void;\n}\n\nconst MenuComponent = forwardRef<HTMLButtonElement, MenuProps>((props, forwardedRef) => {\n const {\n children,\n className,\n initialPlacement,\n openOnHover = false,\n keepOpenOnClickOutside = false,\n triggerElement,\n isOpen: isOpenOverride,\n onToggle,\n ...triggerProps\n } = props;\n\n const MenuId = useId(\"jkl-menu\");\n\n const tree = useFloatingTree();\n const nodeId = useFloatingNodeId();\n const parentId = useFloatingParentNodeId();\n const isNested = parentId != null;\n\n const listItemsRef = useRef<Array<HTMLButtonElement | null>>([]);\n const [activeIndex, setActiveIndex] = useState<number | null>(null);\n const { allowHover, isOpen: isOpenDefault, setIsOpen } = useMenuWideEvents(tree, nodeId, parentId);\n\n const isOpen = isOpenOverride !== undefined ? isOpenOverride : isOpenDefault;\n\n useEffect(() => onToggle?.(isOpen), [isOpen, onToggle]);\n\n const { x, y, refs, placement, strategy, context } = useFloating({\n nodeId,\n open: isOpen,\n onOpenChange: setIsOpen,\n placement: initialPlacement || (isNested ? \"right-start\" : \"bottom-start\"),\n middleware: [\n offset(2),\n flip({\n fallbackAxisSideDirection: \"end\", // Allow bottom placement in narrow viewports (https://floating-ui.com/docs/flip#fallbackaxissidedirection)\n crossAxis: false, // See https://floating-ui.com/docs/flip#combining-with-shift\n }),\n shift({ padding: 8 }),\n ],\n whileElementsMounted: autoUpdate,\n });\n\n const { getReferenceProps, getFloatingProps, getItemProps } = useInteractions([\n useHover(context, {\n enabled: openOnHover && allowHover,\n delay: { open: 75 },\n handleClose: safePolygon({\n requireIntent: true,\n blockPointerEvents: true,\n }),\n }),\n useClick(context, {\n event: \"mousedown\",\n }),\n useDismiss(context, { outsidePress: !keepOpenOnClickOutside }),\n useRole(context, { role: \"menu\" }),\n useListNavigation(context, {\n listRef: listItemsRef,\n activeIndex,\n nested: isNested,\n onNavigate: setActiveIndex,\n }),\n ]);\n\n const referenceRef = useMergeRefs([refs.setReference, forwardedRef]);\n\n // Siden menyen rendres på rot må vi hente lokal dark/light-verdi fra triggeren\n // Vi må gjøre dette for å ta hensyn til at tema kan styres lokalt for deler av UIet\n const { theme, density } = getThemeAndDensity(refs.reference.current as HTMLElement);\n\n return (\n <FloatingNode id={nodeId}>\n {React.isValidElement(triggerElement) &&\n (triggerElement.type === \"button\" || ReactIs.isForwardRef(triggerElement))\n ? // Dersom trigger-elementet er en knapp, sett riktige egenskaper på det\n React.cloneElement(triggerElement, {\n ...getReferenceProps({\n ...triggerProps,\n ref: referenceRef,\n role: isNested ? \"menuitem\" : undefined,\n \"aria-controls\": MenuId,\n onClick(event) {\n event.stopPropagation();\n },\n }),\n })\n : // Ellers, rendre elementet as-is, uten interaktivitet. Krev en ferdig brukbar button for å åpne menyen.\n triggerElement}\n <AnimatePresence>\n {isOpen && (\n <FloatingPortal>\n <FloatingFocusManager\n context={context}\n // Prevent outside content interference.\n modal={false}\n // Only initially focus the root floating menu.\n initialFocus={isNested ? -1 : 0}\n // Only return focus to the root menu's reference when menus close.\n returnFocus={!isNested}\n >\n <motion.div\n className={clsx(\"jkl jkl-menu\", className)}\n data-theme={theme}\n data-layout-density={density}\n role=\"menu\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ ease: \"easeIn\", duration: 0.1 }}\n data-placement={placement}\n aria-live=\"assertive\"\n aria-hidden={!isOpen}\n ref={refs.setFloating}\n {...getFloatingProps({\n id: MenuId,\n style: {\n position: strategy,\n top: y ?? \"\",\n left: x ?? \"\",\n },\n })}\n >\n {React.Children.map(children, (child, index) => {\n if (React.isValidElement(child) && ReactIs.isForwardRef(child)) {\n return React.cloneElement(\n child,\n getItemProps({\n ...child.props,\n tabIndex: activeIndex === index ? 0 : -1,\n role: \"menuitem\",\n ref(node: HTMLButtonElement) {\n listItemsRef.current[index] = node;\n },\n onClick(event) {\n child.props.onClick?.(event as React.MouseEvent<HTMLButtonElement>);\n if (event.defaultPrevented) {\n return;\n }\n tree?.events.emit(\"click\");\n },\n onKeyDown(event) {\n child.props.onKeyDown?.(event);\n if (event.defaultPrevented) {\n return;\n }\n tree?.events.emit(\"keydown\");\n if (\n event.currentTarget.role === \"menuitemcheckbox\" &&\n event.key === \"Enter\"\n ) {\n // https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/menuitemcheckbox_role#keyboard_interactions\n setIsOpen(false);\n }\n },\n onMouseEnter() {\n if (allowHover && isOpen) {\n setActiveIndex(index);\n }\n },\n }),\n );\n }\n\n return child;\n })}\n </motion.div>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </AnimatePresence>\n </FloatingNode>\n );\n});\nMenuComponent.displayName = \"MenuComponent\";\n\nexport const Menu = forwardRef<HTMLButtonElement, MenuProps>((props, ref) => {\n const parentId = useFloatingParentNodeId();\n\n if (parentId === null) {\n return (\n <FloatingTree>\n <MenuComponent ref={ref} {...props} />\n </FloatingTree>\n );\n }\n\n return <MenuComponent ref={ref} {...props} />;\n});\nMenu.displayName = \"Menu\";\n","import clsx from \"clsx\";\nimport React, {\n FocusEvent,\n forwardRef,\n useEffect,\n useRef,\n useState,\n KeyboardEvent,\n ChangeEvent,\n useCallback,\n useMemo,\n RefObject,\n MouseEvent,\n CSSProperties,\n} from \"react\";\nimport { type ValuePair, getValuePair, type DataTestAutoId, type Density } from \"../..\";\nimport { useId, useAnimatedHeight, usePreviousValue, useListNavigation } from \"../../hooks\";\nimport { ArrowVerticalAnimated } from \"../icon\";\nimport { InputGroup, type LabelProps, type InputGroupProps } from \"../input-group\";\nimport { toLower, focusSelected } from \"./select-utils\";\n\ninterface PartialChangeEvent extends Partial<Omit<ChangeEvent<HTMLSelectElement>, \"target\">> {\n /** Kreves av react-hook-form, det skjer ulike ting avhengig av om det er blur eller change */\n type: \"change\" | \"blur\";\n target: {\n /** Kreves av react-hook-form for å vite hvilket skjemafelt som ble endret */\n name: string;\n value: string;\n };\n}\n\ntype ChangeEventHandler = (event: PartialChangeEvent) => void;\n\ninterface Option extends ValuePair {\n visible: boolean;\n}\n\nexport interface SelectProps extends Omit<InputGroupProps, \"children\">, DataTestAutoId {\n id?: string;\n name: string;\n label: string;\n labelProps?: Omit<LabelProps, \"children\" | \"density\" | \"htmlFor\" | \"standAlone\">;\n items: Array<string | ValuePair>;\n /**\n * @default false\n */\n inline?: boolean;\n /**\n * @default \"Velg\"\n */\n defaultPrompt?: string;\n className?: string;\n value?: string;\n helpLabel?: string;\n errorLabel?: string;\n /**\n * @default false\n */\n searchable?: boolean | ((searchValue: string, searchItem: string | ValuePair) => boolean);\n density?: Density;\n width?: string;\n onChange?: ChangeEventHandler;\n onBlur?: ChangeEventHandler;\n onFocus?: ChangeEventHandler;\n /**\n * Merk som ugyldig uten å sende inn en errorLabel.\n * NB! Brukes kun i tilfeller der valideringsfeil dukker opp andre steder, for eksempel i en FieldGroup.\n */\n invalid?: boolean;\n /**\n * Hvor mange valg skal vises i listen før den begynner å scrolle.\n * @default 5\n */\n maxShownOptions?: number;\n}\n\nconst noop = () => {\n return;\n};\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>((props, forwardedSelectRef) => {\n const {\n id,\n name,\n items,\n value,\n label,\n labelProps,\n onChange,\n onBlur,\n onFocus,\n className,\n helpLabel,\n errorLabel,\n invalid,\n searchable = false,\n inline = false,\n defaultPrompt = \"Velg\",\n density,\n width,\n maxShownOptions = 5,\n style,\n tooltipProps,\n ...rest\n } = props;\n\n const listId = useId(id || \"jkl-select\", { generateSuffix: !id });\n const labelId = `${listId}_label`;\n const buttonId = `${listId}_button`;\n const searchInputId = `${listId}_search-input`;\n\n const [dropdownIsShown, setShown] = useState(false);\n const toggleListVisibility = useCallback(() => {\n setShown((previousValue) => !previousValue);\n }, []);\n\n /// Søk\n\n const isSearchable = Boolean(searchable);\n const showSearchInputField = isSearchable && dropdownIsShown;\n const [searchValue, setSearchValue] = useState(\"\");\n const searchFn = useCallback(\n (item: ValuePair) => {\n if (item.label.toLowerCase().includes(searchValue.toLowerCase())) {\n return true;\n }\n\n if (typeof searchable === \"function\") {\n return searchable(searchValue, item);\n }\n\n return false;\n },\n [searchable, searchValue],\n );\n const visibleItems: Option[] = useMemo(\n () =>\n items.map(getValuePair).map((item) => {\n const visible = !isSearchable || searchValue === \"\" || searchFn(item);\n return { ...item, visible };\n }),\n [items, isSearchable, searchValue, searchFn],\n );\n const valueIsInItems: boolean = useMemo(() => {\n if (typeof value === \"undefined\") {\n return false;\n }\n return items.some((item) => (typeof item === \"string\" ? item === value : item.value === value));\n }, [value, items]);\n\n /// Valg av <option>\n\n const [selectedValue, setSelectedValue] = useState<string>(valueIsInItems && value !== undefined ? value : \"\");\n const hasSelectedValue = selectedValue !== \"\";\n const selectedValueLabel = useMemo(\n () => visibleItems.find((item) => item.value === selectedValue)?.label || defaultPrompt,\n [visibleItems, selectedValue, defaultPrompt],\n );\n\n const selectRef = useRef<HTMLSelectElement | null>(null);\n // Hjelpefunksjon som gjør det enklere å forwarde refen og å bruke den selv internt\n const unifiedSelectRef = useCallback(\n (instance: HTMLSelectElement | null) => {\n selectRef.current = instance;\n if (forwardedSelectRef) {\n if (typeof forwardedSelectRef === \"function\") {\n forwardedSelectRef(instance);\n } else {\n forwardedSelectRef.current = instance;\n }\n }\n if (instance) {\n setSelectedValue(instance.value);\n }\n },\n [selectRef, forwardedSelectRef],\n );\n\n const previousValue = usePreviousValue(value);\n useEffect(() => {\n if (value === previousValue) {\n return;\n }\n if (typeof value === \"undefined\" || !valueIsInItems) {\n setSelectedValue(\"\");\n } else {\n setSelectedValue(value);\n }\n }, [setSelectedValue, value, previousValue, valueIsInItems]);\n\n const selectOption = useCallback(\n (item: Option) => {\n const nextValue = item.value;\n setSearchValue(\"\");\n setSelectedValue(nextValue);\n toggleListVisibility();\n },\n [setSearchValue, setSelectedValue, toggleListVisibility],\n );\n\n // La komponenten rendre <select> med den valgte verdien før onChange trigges, slik at\n // react-hook-form@>7.41.1 behandler feltet som at det har en verdi.\n const previousSelectedValue = usePreviousValue(selectedValue);\n useEffect(() => {\n // previousSelectedValue er undefined på første render, men da vil vi ikke ha en onChange uansett\n if (\n typeof previousSelectedValue === \"undefined\" ||\n previousSelectedValue === selectedValue ||\n selectedValue === value\n ) {\n return;\n }\n if (onChange) {\n onChange({ type: \"change\", target: { name, value: selectedValue } });\n }\n if (selectRef.current) {\n selectRef.current.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n }, [onChange, name, value, selectedValue, previousSelectedValue]);\n\n /// Fokushåndtering\n\n const componentRootElementRef = useRef<HTMLDivElement>(null);\n const focusInsideRef = useRef(false);\n const searchFieldRef = useRef<HTMLInputElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n const handleFocusPlacement = useCallback(\n (isOpen: boolean, ref: RefObject<HTMLElement>) => {\n if (isOpen && !isSearchable) {\n const listElement = ref.current;\n if (listElement) {\n focusSelected(listElement, selectedValue);\n }\n } else if (isOpen) {\n if (searchFieldRef.current) {\n searchFieldRef.current.focus();\n }\n } else {\n if (focusInsideRef.current && buttonRef.current) {\n buttonRef.current.focus();\n }\n }\n },\n [isSearchable, selectedValue],\n );\n\n const [dropdownRef] = useAnimatedHeight<HTMLDivElement>(dropdownIsShown, {\n onFirstVisible: handleFocusPlacement,\n onTransitionEnd: handleFocusPlacement,\n });\n\n useListNavigation({ ref: dropdownRef });\n\n const close = useCallback(() => {\n if (isSearchable) {\n setSearchValue(\"\");\n }\n if (onBlur) {\n onBlur({ type: \"blur\", target: { name, value: selectedValue } });\n selectRef.current?.dispatchEvent(new Event(\"focusout\", { bubbles: true }));\n }\n focusInsideRef.current = false;\n setShown(false);\n }, [onBlur, setSearchValue, setShown, isSearchable, name, selectedValue]);\n\n const handleBlur = useCallback(\n (e: FocusEvent<HTMLButtonElement | HTMLInputElement>) => {\n const componentRootElement = componentRootElementRef.current;\n // There are known issues in Firefox when using \"relatedTarget\" in onBlur events:\n // https://github.com/facebook/react/issues/2011\n // This might be fixed in react 17. Se issue above.\n const nextFocusIsInsideComponent =\n componentRootElement && componentRootElement.contains(e.relatedTarget as Node);\n if (!nextFocusIsInsideComponent) {\n close();\n }\n },\n [close],\n );\n\n const handleFocus = useCallback(() => {\n if (!focusInsideRef.current) {\n if (onFocus) {\n onFocus({ type: \"change\", target: { name, value: selectedValue } });\n }\n focusInsideRef.current = true;\n }\n }, [onFocus, selectedValue, name]);\n\n const handleMouseOver = useCallback((e: MouseEvent<HTMLButtonElement>) => {\n // Ved mouseOver på options flytter vi fokus til dem for å unngå \"dobbel fokus\"\n // der det ser ut som to forskjellige elementer er fokusert/hovered samtidig\n (e.target as HTMLButtonElement).focus({ preventScroll: true });\n }, []);\n\n // Handle focus and blur of hidden select element\n useEffect(() => {\n const select = selectRef.current;\n const searchField = searchFieldRef.current;\n const button = buttonRef.current;\n const componentRootElement = componentRootElementRef.current;\n\n select?.addEventListener(\"focus\", () => {\n showSearchInputField ? searchField?.focus() : button?.focus();\n });\n select?.addEventListener(\"blur\", function (this, ev) {\n componentRootElement && componentRootElement.contains(ev.relatedTarget as Node) && ev.preventDefault();\n });\n\n return () => {\n select?.removeEventListener(\"focus\", () => {\n showSearchInputField ? searchField?.focus() : button?.focus();\n });\n select?.removeEventListener(\"blur\", function (this, ev) {\n componentRootElement && componentRootElement.contains(ev.relatedTarget as Node) && ev.preventDefault();\n });\n };\n }, [showSearchInputField]);\n\n /// Tastaturnavigasjon\n\n // Add support for opening dropdown with arrowkey down as expected from native select\n // onKeyDown to stop ArrowDown from scrolling the page\n const handleOnKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>) => {\n if ((e.key === \"ArrowDown\" || e.key === \" \") && !dropdownIsShown) {\n e.preventDefault();\n e.stopPropagation();\n setShown(true);\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n setShown(false);\n }\n },\n [setShown, dropdownIsShown],\n );\n\n // onKeyDown to stop ArrowDown from scrolling the page\n const handleSearchOnKeyDown = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n e.stopPropagation();\n\n const listElement = dropdownRef.current;\n if (listElement) {\n if (isSearchable) {\n // Flytt fokus til det første elementet i listen, ikke det forrige valgte.\n // Ved endring i filter er det ikke gitt at vi ønsker å ta utgangspunkt i\n // den valgte verdien.\n focusSelected(listElement, undefined);\n } else {\n focusSelected(listElement, selectedValue);\n }\n }\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n setShown(false);\n } else if (e.key === \"Tab\" && !e.shiftKey) {\n const listElement = dropdownRef.current;\n if (listElement) {\n e.preventDefault();\n e.stopPropagation();\n focusSelected(listElement, selectedValue);\n }\n } else if (e.key === \"Enter\" && dropdownIsShown) {\n // Should not propagate Enter keyevent because form might submit\n e.preventDefault();\n e.stopPropagation();\n }\n },\n [setShown, dropdownRef, selectedValue, isSearchable, dropdownIsShown],\n );\n\n // onKeyDown so this Tab listener isn't triggered by tabbing from search field to option\n const handleOptionOnKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"Tab\") {\n e.preventDefault();\n e.stopPropagation();\n\n if (e.shiftKey && searchFieldRef.current) {\n searchFieldRef.current.focus();\n } else if (buttonRef.current) {\n // Mimic behaviour of Firefox and native select, where Tab selects the current item and closes the menu\n setSelectedValue(e.currentTarget.value);\n setShown(false);\n buttonRef.current.focus();\n }\n } else if (e.key === \"ArrowUp\") {\n if (dropdownRef.current && searchFieldRef.current) {\n // Can't be based on index since the first item might be filtered out\n const firstVisible = dropdownRef.current.querySelector('[role=\"option\"]:not([hidden])');\n if (e.currentTarget.id === firstVisible?.id && searchFieldRef.current) {\n searchFieldRef.current.focus();\n }\n }\n }\n },\n [setShown, dropdownRef],\n );\n\n // Add support for closing the dropdown with Escape like native select. Unfortunately, Escape does not trigger the button onKeyDown.\n useEffect(() => {\n const handleEscape = (e: globalThis.KeyboardEvent) => {\n if (e.key === \"Escape\" && dropdownIsShown) {\n setShown(false);\n }\n };\n if (typeof window !== \"undefined\" && dropdownIsShown) {\n window.addEventListener(\"keydown\", handleEscape);\n }\n return () => {\n if (typeof window !== \"undefined\") {\n window.removeEventListener(\"keydown\", handleEscape);\n }\n };\n }, [setShown, dropdownIsShown]);\n\n return (\n <>\n <select\n name={name}\n tabIndex={-1}\n data-testid=\"jkl-native-select\"\n className=\"jkl-sr-only\"\n aria-hidden\n ref={unifiedSelectRef}\n value={selectedValue}\n onChange={noop} // React complains unless we give an onChange handler. This is technically a read-only field, but readOnly isn't an option here.\n >\n <option value=\"\"></option> {/* Tom option må være et valg, ellers vil <select> alltid ha en value */}\n {visibleItems.map((item) => (\n <option key={`${listId}-opt-${item.value}`} hidden={!item.visible} value={item.value}>\n {item.label}\n </option>\n ))}\n </select>\n <InputGroup\n ref={componentRootElementRef}\n data-testid=\"jkl-select\"\n className={clsx(\"jkl-select\", className, {\n \"jkl-select--inline\": inline,\n \"jkl-select--open\": dropdownIsShown && visibleItems.some((item) => item.visible),\n \"jkl-select--no-value\": !hasSelectedValue,\n \"jkl-select--invalid\": !!errorLabel || invalid,\n })}\n tooltipProps={\n tooltipProps && {\n ...tooltipProps,\n triggerProps: {\n ...tooltipProps.triggerProps,\n onFocus: (e) => {\n tooltipProps.triggerProps?.onFocus?.(e);\n close();\n },\n },\n }\n }\n {...rest}\n id={isSearchable ? searchInputId : buttonId}\n style={{ [\"--jkl-select-max-shown-options\"]: maxShownOptions, ...style } as CSSProperties}\n density={density}\n label={label}\n labelProps={{\n id: labelId,\n srOnly: inline,\n ...labelProps,\n htmlFor: isSearchable ? searchInputId : buttonId,\n }}\n helpLabel={helpLabel}\n errorLabel={errorLabel}\n render={(inputProps) => (\n <div className=\"jkl-select__outer-wrapper\" style={{ width }}>\n {isSearchable && (\n <input\n {...inputProps}\n id={searchInputId}\n hidden={!showSearchInputField}\n ref={searchFieldRef}\n placeholder=\"Søk\"\n value={searchValue}\n onChange={(e) => setSearchValue(e.target.value)}\n data-testid=\"jkl-select__search-input\"\n className=\"jkl-select__search-input\"\n aria-autocomplete=\"list\"\n aria-activedescendant={\n hasSelectedValue ? `${listId}__${toLower(selectedValue)}` : undefined\n }\n aria-controls={listId}\n aria-expanded={dropdownIsShown}\n role=\"combobox\"\n onKeyDown={handleSearchOnKeyDown}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onClick={(e) => {\n e.stopPropagation();\n }}\n />\n )}\n <button\n {...inputProps}\n id={buttonId}\n ref={buttonRef}\n hidden={showSearchInputField}\n type=\"button\"\n name={`${name}-btn`}\n className={clsx(\"jkl-select__button\", {\n \"jkl-select__button--active-value\": !!selectedValue,\n })}\n data-testid=\"jkl-select__button\"\n aria-label={`${selectedValueLabel || \"Velg\"},${label}`}\n aria-expanded={dropdownIsShown}\n aria-controls={listId}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onKeyDown={handleOnKeyDown}\n onClick={toggleListVisibility}\n onMouseDown={(e) => {\n // Workaround for en Safari-bug hvor e.relatedTarget er null i onBlur\n // https://twitter.com/MilesSorce/status/1278762360669265925\n e.preventDefault();\n buttonRef.current?.focus();\n }}\n >\n {selectedValueLabel}\n </button>\n <div\n id={listId}\n ref={dropdownRef}\n role=\"listbox\"\n className=\"jkl-select__options-menu\"\n hidden={!dropdownIsShown || visibleItems.every((item) => !item.visible)}\n aria-labelledby={labelId}\n tabIndex={-1}\n data-focus=\"controlled\" // lar oss styre markering av valg vha focus\n >\n {visibleItems.map((item, i) =>\n // Det er viktig at vi _fjerner_ elementer som ikke er synlige fra DOMen for at tastaturnavigasjon skal fungere.\n // For eksempel, hvis vi har elementene Apple, Samsung og LG i den rekkefølgen og søker etter \"l\"\n // vil Samsung ikke synes. Om vi bare setter hidden-attributtet på Samsung vil ArrowDown fra Apple ikke fungere.\n // Dette lar seg ikke gjenskape i en enhetstest med JSDOM + user-events, og Cypress lukker Select\n // ved første {downArrow} ¯\\_(ツ)_/¯. Så please test scenariet over manuelt om dette skaper trøbbel for deg.\n item.visible ? (\n <button\n key={`${listId}-${item.value}`}\n hidden={!item.visible}\n type=\"button\"\n id={`${listId}__${toLower(item.value)}`}\n className=\"jkl-select__option\"\n data-testid=\"jkl-select__option\"\n aria-selected={item.value === selectedValue}\n role=\"option\"\n value={item.value}\n data-testautoid={`jkl-select__option-${i}`}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onKeyDown={handleOptionOnKeyDown}\n onClick={(e) => {\n e.preventDefault();\n selectOption(item);\n }}\n onMouseOver={handleMouseOver}\n >\n {item.label}\n {item.description ? (\n <span className=\"jkl-select__option-description\">{item.description}</span>\n ) : null}\n </button>\n ) : null,\n )}\n </div>\n <ArrowVerticalAnimated\n variant=\"medium\"\n pointingDown={!dropdownIsShown}\n className=\"jkl-select__arrow\"\n />\n </div>\n )}\n />\n </>\n );\n});\n\nSelect.displayName = \"Select\";\n","import clsx from \"clsx\";\nimport React, { forwardRef, SelectHTMLAttributes } from \"react\";\nimport { type ValuePair, getValuePair } from \"../..\";\nimport { ArrowVerticalAnimated } from \"../icon\";\nimport { InputGroup, type InputGroupProps } from \"../input-group\";\n\nexport interface NativeSelectProps extends Omit<InputGroupProps, \"children\">, SelectHTMLAttributes<HTMLSelectElement> {\n /**\n * Merk som ugyldig uten å sende inn en errorLabel.\n * NB! Brukes kun i tilfeller der valideringsfeil dukker opp andre steder, for eksempel i en FieldGroup.\n */\n invalid?: boolean;\n /**\n * Setter inn et placeholderelement som vises når ingenting er valgt i nedtrekkslisten.\n * @default \"Velg\"\n */\n placeholder?: string;\n items: Array<string | ValuePair>;\n selectClassName?: string;\n width?: string;\n}\n\nexport const NativeSelect = forwardRef<HTMLSelectElement, NativeSelectProps>((props, ref) => {\n const {\n label,\n className,\n density,\n errorLabel,\n helpLabel,\n inline,\n invalid,\n items,\n labelProps,\n placeholder = \"Velg\",\n selectClassName,\n supportLabelProps,\n tooltipProps,\n value,\n width,\n ...rest\n } = props;\n\n const inputGroupProps = {\n label,\n density,\n errorLabel,\n helpLabel,\n labelProps,\n inline,\n supportLabelProps,\n tooltipProps,\n };\n\n return (\n <InputGroup\n {...inputGroupProps}\n data-testid=\"jkl-select\"\n className={clsx(\"jkl-select\", className, {\n \"jkl-select--inline\": inline,\n \"jkl-select--invalid\": !!errorLabel || invalid,\n })}\n render={(inputProps) => (\n <div className=\"jkl-select__outer-wrapper\" style={{ width }}>\n <select\n ref={ref}\n className={clsx(\"jkl-select__button\", selectClassName, {\n \"jkl-select__button--active-value\": !!value,\n })}\n defaultValue={value ? undefined : \"\"}\n value={value}\n {...inputProps}\n {...rest}\n >\n {placeholder && !value && (\n <option disabled value=\"\">\n {placeholder}\n </option>\n )}\n {items.map(getValuePair).map((item) => (\n <option\n data-testid=\"jkl-select__option\"\n className=\"jkl-select__option\"\n key={item.value}\n value={item.value}\n >\n {item.label}\n </option>\n ))}\n </select>\n <ArrowVerticalAnimated variant=\"medium\" pointingDown className=\"jkl-select__arrow\" />\n </div>\n )}\n />\n );\n});\n\nNativeSelect.displayName = \"NativeSelect\";\n","import clsx from \"clsx\";\nimport React, {\n forwardRef,\n useCallback,\n useState,\n type MouseEventHandler,\n type ChangeEventHandler,\n type FC,\n} from \"react\";\nimport { type Density } from \"../..\";\nimport { useId } from \"../../hooks\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"../icon\";\nimport { IconButton } from \"../icon-button\";\nimport { NativeSelect } from \"../select\";\nimport { TextInput } from \"../text-input\";\nimport { useTableContext } from \"./tableContext\";\n\nexport interface TablePaginationProps {\n className?: string;\n id?: string;\n density?: Density;\n /**\n * @default 0\n */\n activePage?: number;\n /**\n * Null eller negativt tall tolkes som \"vis alle\".\n */\n rowsPerPage: number;\n rowsPerPageItems: Array<number | { label: string; value: number }>;\n totalNumberOfRows: number;\n /**\n * Viser et valgfritt inputfelt for å hoppe raskt til en spesifik side.\n * Du kan også sende inn en custom label hvis du ønsker det, ellers bruke\n * true for default label\n * @default false\n */\n withGoToPage?: boolean | { gotoLabel: string };\n onChange: (e: React.SyntheticEvent, toPage: number, fromPage: number) => void;\n onChangeRowsPerPage: ChangeEventHandler<HTMLSelectElement>;\n /**\n * Dersom du ønsker å ha custom labels kan du sende inn disse. \"rowsPerPage\"\n * vises alltid på skjerm mens \"next\" og \"previous\" brukes som hint til\n * skjermlesere for ikon-knappene til Neste/Forrige side\n * @default { rowsPerPage: \"Rader per side\", previous: \"Forrige\", next: \"Neste\" }\n */\n labels?: {\n rowsPerPage: string;\n previous: string;\n next: string;\n };\n}\n\nfunction clamp(min: number, num: number, max: number): number {\n if (num < min) {\n return min;\n } else if (num > max) {\n return max;\n }\n return num;\n}\n\nexport const TablePagination = forwardRef<HTMLDivElement, TablePaginationProps>((props, ref) => {\n const {\n activePage = 0,\n totalNumberOfRows,\n rowsPerPage,\n rowsPerPageItems,\n className,\n density,\n id: idProp,\n withGoToPage = false,\n onChange,\n onChangeRowsPerPage,\n labels = {\n rowsPerPage: \"Rader per side\",\n previous: \"Forrige\",\n next: \"Neste\",\n },\n ...rest\n } = props;\n\n const id = useId(idProp || \"jkl-table-pagination\", { generateSuffix: !idProp });\n const { density: contextDensity } = useTableContext();\n\n const showAll = rowsPerPage <= 0;\n const numberOfPages = showAll ? 1 : Math.ceil(totalNumberOfRows / rowsPerPage);\n\n const [currentPage, setCurrentPage] = useState(clamp(0, activePage, numberOfPages - 1));\n\n const onPageClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n (e) => {\n const toPage = Number.parseInt(e.currentTarget.dataset[\"number\"] as string);\n onChange(e, toPage, currentPage);\n setCurrentPage(toPage);\n setPagePickerValue(String(toPage + 1));\n },\n [onChange, setCurrentPage, currentPage],\n );\n\n const [pagePickerValue, setPagePickerValue] = useState(String(currentPage + 1));\n const onPageChange: ChangeEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n setPagePickerValue(e.target.value);\n try {\n const toPage = Number.parseInt(e.target.value) - 1;\n if (Number.isNaN(toPage)) {\n return;\n }\n\n if (toPage >= 0 && toPage < numberOfPages) {\n onChange(e, toPage, currentPage);\n setCurrentPage(toPage);\n }\n } catch {\n return;\n }\n },\n [onChange, setPagePickerValue, setCurrentPage, currentPage, numberOfPages],\n );\n\n const onPrevious: MouseEventHandler<HTMLButtonElement> = useCallback(\n (e) => {\n if (currentPage === 0) {\n // TODO: skal dette være en no-op i stedet?\n onChange(e, currentPage, currentPage);\n return;\n }\n const toPage = currentPage - 1;\n onChange(e, toPage, currentPage);\n setCurrentPage(toPage);\n setPagePickerValue(String(toPage + 1));\n },\n [onChange, setCurrentPage, currentPage],\n );\n\n const onNext: MouseEventHandler<HTMLButtonElement> = useCallback(\n (e) => {\n if (currentPage === numberOfPages - 1) {\n // TODO: skal dette være en no-op i stedet?\n onChange(e, currentPage, currentPage);\n return;\n }\n const toPage = currentPage + 1;\n onChange(e, toPage, currentPage);\n setCurrentPage(toPage);\n setPagePickerValue(String(toPage + 1));\n },\n [onChange, setCurrentPage, numberOfPages, currentPage],\n );\n\n return (\n <div\n className={clsx(\"jkl-table-pagination\", className)}\n {...rest}\n id={id}\n data-density={density || contextDensity}\n ref={ref}\n >\n <div className=\"jkl-table-pagination__left\">\n <div className=\"jkl-table-pagination__picker jkl-table-pagination__picker--rows\">\n <span className=\"jkl-table-pagination__picker-label\" aria-hidden=\"true\">\n {labels.rowsPerPage}:\n </span>\n <NativeSelect\n className=\"jkl-table-pagination__picker-input\"\n label={labels.rowsPerPage}\n labelProps={{ srOnly: true }}\n name={`${id}-rows-per-page`}\n items={rowsPerPageItems.map((i) =>\n typeof i === \"number\" ? String(i) : { label: i.label, value: String(i.value) },\n )}\n value={String(rowsPerPage)}\n onChange={onChangeRowsPerPage}\n width=\"min(8rem, 100%)\"\n inline\n />\n </div>\n </div>\n <div className=\"jkl-table-pagination__right\">\n {numberOfPages !== 1 && (\n <nav className=\"jkl-table-pagination__nav\">\n {withGoToPage && (\n <div className=\"jkl-table-pagination__picker jkl-table-pagination__picker--page\">\n <span className=\"jkl-table-pagination__picker-label\" aria-hidden=\"true\">\n {typeof withGoToPage === \"object\" ? withGoToPage.gotoLabel : \"Gå til side\"}:\n </span>\n {/* onChange først ved enter/submit */}\n <TextInput\n className=\"jkl-table-pagination__picker-input\"\n label={typeof withGoToPage === \"object\" ? withGoToPage.gotoLabel : \"Gå til side\"}\n labelProps={{ srOnly: true }}\n name={`${id}-go-to-page`}\n value={pagePickerValue}\n width=\"min(4rem, 100%)\"\n onChange={onPageChange}\n aria-invalid={\n pagePickerValue && pagePickerValue !== String(currentPage + 1)\n ? \"true\"\n : undefined\n }\n />\n </div>\n )}\n <ul>\n <li>\n <IconButton\n className=\"jkl-table-pagination__previous\"\n title={labels.previous}\n onClick={onPrevious}\n >\n <ChevronLeftIcon />\n </IconButton>\n </li>\n <PaginationPages\n id={id}\n activePage={activePage}\n numberOfPages={numberOfPages}\n onPageClick={onPageClick}\n />\n <li>\n <IconButton className=\"jkl-table-pagination__next\" title={labels.next} onClick={onNext}>\n <ChevronRightIcon />\n </IconButton>\n </li>\n </ul>\n </nav>\n )}\n </div>\n </div>\n );\n});\n\nconst PaginationPages: FC<{\n id: string;\n activePage: number;\n numberOfPages: number;\n onPageClick: MouseEventHandler;\n}> = ({ id, activePage, numberOfPages, onPageClick }) => {\n if (numberOfPages <= 7) {\n return (\n <>\n {Array.from({ length: numberOfPages }).map((_, i) => (\n <li key={`${id}-page-${i}`}>\n <button\n className={clsx(\"jkl-table-pagination__page\", {\n \"jkl-table-pagination__page--active\": activePage === i,\n })}\n type=\"button\"\n data-number={i}\n onClick={onPageClick}\n >\n {i + 1}\n </button>\n </li>\n ))}\n </>\n );\n }\n\n const showStartEllipsis = activePage > 3 && numberOfPages > 7;\n const showEndEllipsis = activePage < numberOfPages - 4 && numberOfPages > 7;\n\n const startEllipsis = Math.min(Math.max(activePage - 2, 1), numberOfPages - 6);\n const centerPageNumberStart = Math.min(startEllipsis + 1, numberOfPages - 5);\n const centerPageNumber = Math.min(centerPageNumberStart + 1, numberOfPages - 4);\n const centerPageNumberEnd = Math.min(centerPageNumberStart + 2, numberOfPages - 3);\n const endEllipsis = Math.min(centerPageNumberStart + 3, numberOfPages - 2);\n\n return (\n <>\n <li>\n <PaginationPageButton isActive={activePage === 0} number={0} onClick={onPageClick} />\n </li>\n <li>\n {showStartEllipsis ? (\n <span className=\"jkl-table-pagination__ellipsis\" aria-hidden>\n {\"...\"}\n </span>\n ) : (\n <PaginationPageButton\n isActive={activePage === startEllipsis}\n number={startEllipsis}\n onClick={onPageClick}\n />\n )}\n </li>\n <li>\n <PaginationPageButton\n isActive={activePage === centerPageNumberStart}\n number={centerPageNumberStart}\n onClick={onPageClick}\n />\n </li>\n <li>\n <PaginationPageButton\n isActive={activePage === centerPageNumber}\n number={centerPageNumber}\n onClick={onPageClick}\n />\n </li>\n <li>\n <PaginationPageButton\n isActive={activePage === centerPageNumberEnd}\n number={centerPageNumberEnd}\n onClick={onPageClick}\n />\n </li>\n <li>\n {showEndEllipsis ? (\n <span className=\"jkl-table-pagination__ellipsis\" aria-hidden>\n {\"...\"}\n </span>\n ) : (\n <PaginationPageButton\n isActive={activePage === endEllipsis}\n number={endEllipsis}\n onClick={onPageClick}\n />\n )}\n </li>\n <li>\n <PaginationPageButton\n isActive={activePage === numberOfPages - 1}\n number={numberOfPages - 1}\n onClick={onPageClick}\n />\n </li>\n </>\n );\n};\n\nconst PaginationPageButton: FC<{\n isActive: boolean;\n number: number;\n onClick: MouseEventHandler;\n}> = ({ isActive, number, onClick, ...rest }) => (\n <button\n className={clsx(\"jkl-table-pagination__page\", {\n \"jkl-table-pagination__page--active\": isActive,\n })}\n type=\"button\"\n data-number={number}\n onClick={onClick}\n {...rest}\n >\n {number + 1}\n </button>\n);\n\nTablePagination.displayName = \"TablePagination\";\n","import clsx from \"clsx\";\nimport React, { forwardRef } from \"react\";\nimport { Expander } from \"../expander\";\nimport type { TableCellProps } from \"./TableCell\";\nimport { TableCell } from \"./TableCell\";\nimport { useTableContext } from \"./tableContext\";\n\nexport interface ExpandableTableRowControllerProps extends TableCellProps {\n /** Settes automatisk av ExpandableTableRow */\n isOpen?: boolean;\n /** Settes automatisk av ExpandableTableRow */\n onClick?: () => void;\n}\n\nconst ExpandableTableRowController = forwardRef<HTMLTableCellElement, ExpandableTableRowControllerProps>(\n ({ isOpen, onClick, children, className, id, \"aria-controls\": ariaControls, ...rest }, ref) => {\n if (isOpen === undefined || typeof onClick !== \"function\") {\n throw new Error(\"ExpandableTableRowController must have ExpandableTableRow as parent\");\n }\n\n const { density, collapseToList } = useTableContext();\n\n const dataTh = (rest as Record<string, string>)[\"data-th\"];\n\n // pick text from data-th if possible, but only if it's a list\n const showTextFromTh: string | undefined = collapseToList ? dataTh : undefined;\n\n return (\n <TableCell\n className={clsx(\n \"jkl-table-cell--expand\",\n { [\"jkl-table-cell--expand-without-text\"]: !children },\n className,\n )}\n {...rest}\n ref={ref}\n >\n <Expander\n className={clsx(\"jkl-table-row-expand-button\", {\n [\"jkl-table-row-expand-button--expanded\"]: isOpen,\n })}\n id={id}\n density={density}\n isExpanded={isOpen}\n aria-controls={ariaControls}\n aria-label={children ? undefined : dataTh || \"Ekspander rad\"}\n onClick={(e) => {\n e.stopPropagation();\n onClick();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.stopPropagation();\n e.preventDefault();\n onClick();\n }\n }}\n >\n {/* show children. or try to use data-th if children is undefined */}\n {children ?? showTextFromTh}\n </Expander>\n </TableCell>\n );\n },\n);\n\nExpandableTableRowController.displayName = \"ExpandableTableRowController\";\n\nexport { ExpandableTableRowController };\n","import clsx from \"clsx\";\nimport React, { forwardRef, useEffect, useState } from \"react\";\nimport { useAnimatedHeight, useId } from \"../../hooks\";\nimport { ExpandableTableRowController, ExpandableTableRowControllerProps } from \"./ExpandableTableRowController\";\nimport type { TableRowProps } from \"./TableRow\";\nimport { TableRow } from \"./TableRow\";\n\nexport interface ExpandableTableRowProps extends TableRowProps {\n expandedChildren: React.ReactNode;\n /**\n * Setter bredden på raden som blir åpnet\n * @default 100\n */\n colSpan?: number;\n /**\n * Om du ønsker en controlled komponent. Hvis du ikke setter denne vil komponenten håndtere state selv.\n */\n isOpen?: boolean;\n onToggle?: (isOpen: boolean) => void;\n}\n\nconst ExpandableTableRow = forwardRef<HTMLTableRowElement, ExpandableTableRowProps>((props, ref) => {\n const {\n className,\n clickable,\n children,\n expandedChildren,\n onToggle,\n colSpan = 100,\n isOpen: isOpenProp,\n ...rest\n } = props;\n\n const [isOpen, setIsOpen] = useState(isOpenProp ?? false);\n useEffect(() => {\n if (typeof isOpenProp === \"undefined\") {\n return;\n }\n setIsOpen(isOpenProp);\n }, [isOpenProp]);\n\n const [animationRef] = useAnimatedHeight<HTMLDivElement>(isOpen, { timing: \"expressive\" });\n\n const toggleOpen = () => {\n const newIsOpen = !isOpen;\n\n if (onToggle) {\n onToggle(newIsOpen);\n }\n\n setIsOpen(newIsOpen);\n };\n\n const tableRowClassName = clsx(\"jkl-table-row--expandable\", className, {\n [\"jkl-table-row--expanded\"]: isOpen,\n [\"jkl-expandable-table-row--clickable-external\"]: clickable,\n });\n const childWrapperClassName = clsx(\"jkl-expandable-table-row__expanded-row\", {\n [\"jkl-expandable-table-row__expanded-row--expanded\"]: isOpen,\n });\n\n const tableRowId = useId(\"jkl-expandable-table-row\");\n const expandableTableRowControllerId = useId(\"jkl-expandable-table-row-controller\");\n\n return (\n <>\n <TableRow\n className={tableRowClassName}\n clickable={\n clickable ?? {\n onClick: () => toggleOpen(),\n }\n }\n {...rest}\n ref={ref}\n >\n {React.Children.map(children, (child) => {\n if (\n React.isValidElement<ExpandableTableRowControllerProps>(child) &&\n child.type == ExpandableTableRowController\n ) {\n return React.cloneElement<ExpandableTableRowControllerProps>(child, {\n isOpen,\n onClick: () => toggleOpen(),\n \"aria-controls\": tableRowId,\n id: expandableTableRowControllerId,\n });\n } else {\n return child;\n }\n })}\n </TableRow>\n {/*\n Use a table row with a single as wide as possible cell to contain content. This allows\n using useAnimatedHeight to animate the row height.\n */}\n <tr aria-hidden={!isOpen}>\n <td colSpan={colSpan}>\n <div\n ref={animationRef}\n className={childWrapperClassName}\n id={tableRowId}\n aria-labelledby={expandableTableRowControllerId}\n hidden={!isOpen}\n role=\"group\"\n >\n {expandedChildren}\n </div>\n </td>\n </tr>\n </>\n );\n});\n\nExpandableTableRow.displayName = \"ExpandableTableRow\";\n\nexport { ExpandableTableRow };\n"],"names":["Expander","React","forwardRef","as","className","children","density","expandDirection","isExpanded","hideLabel","rest","ref","ContentWrapper","ScreenReaderOnly","Fragment","pointingDown","jsxs","type","clsx","jsx","ArrowVerticalAnimated","bold","displayName","MenuComponent","props","forwardedRef","initialPlacement","openOnHover","keepOpenOnClickOutside","triggerElement","isOpen","isOpenOverride","onToggle","triggerProps","MenuId","useId","tree","useFloatingTree","nodeId","useFloatingNodeId","parentId","useFloatingParentNodeId","isNested","listItemsRef","useRef","activeIndex","setActiveIndex","useState","allowHover","isOpenDefault","setIsOpen","useMenuWideEvents","useEffect","x","y","refs","placement","strategy","context","useFloating","open","onOpenChange","middleware","offset","flip","fallbackAxisSideDirection","crossAxis","shift","padding","whileElementsMounted","autoUpdate","getReferenceProps","getFloatingProps","getItemProps","useInteractions","useHover","enabled","delay","handleClose","safePolygon","requireIntent","blockPointerEvents","useClick","event","useDismiss","outsidePress","useRole","role","useListNavigation","listRef","nested","onNavigate","referenceRef","useMergeRefs","setReference","theme","getThemeAndDensity","reference","current","FloatingNode","id","isValidElement","ReactIs","isForwardRef","cloneElement","onClick","stopPropagation","AnimatePresence","FloatingPortal","FloatingFocusManager","modal","initialFocus","returnFocus","motion","div","initial","opacity","animate","exit","transition","ease","duration","setFloating","style","position","top","left","Children","map","child","index","tabIndex","node","_b","_a","call","defaultPrevented","events","emit","onKeyDown","currentTarget","key","onMouseEnter","Menu","FloatingTree","noop","Select","forwardedSelectRef","name","items","value","label","labelProps","onChange","onBlur","onFocus","helpLabel","errorLabel","invalid","searchable","inline","defaultPrompt","width","maxShownOptions","tooltipProps","listId","generateSuffix","labelId","buttonId","searchInputId","dropdownIsShown","setShown","toggleListVisibility","useCallback","previousValue","isSearchable","showSearchInputField","searchValue","setSearchValue","searchFn","item","toLowerCase","includes","visibleItems","useMemo","getValuePair","visible","valueIsInItems","some","selectedValue","setSelectedValue","hasSelectedValue","selectedValueLabel","find","selectRef","unifiedSelectRef","instance","usePreviousValue","selectOption","nextValue","previousSelectedValue","target","dispatchEvent","Event","bubbles","componentRootElementRef","focusInsideRef","searchFieldRef","buttonRef","handleFocusPlacement","listElement","focusSelected","focus","dropdownRef","useAnimatedHeight","onFirstVisible","onTransitionEnd","close","handleBlur","e","componentRootElement","contains","relatedTarget","handleFocus","handleMouseOver","preventScroll","select","searchField","button","addEventListener","ev","preventDefault","removeEventListener","handleOnKeyDown","handleSearchOnKeyDown","shiftKey","handleOptionOnKeyDown","firstVisible","querySelector","handleEscape","window","hidden","InputGroup","srOnly","htmlFor","render","inputProps","placeholder","toLower","onMouseDown","every","i","onMouseOver","description","variant","NativeSelect","selectClassName","supportLabelProps","defaultValue","disabled","TablePagination","activePage","totalNumberOfRows","rowsPerPage","rowsPerPageItems","idProp","withGoToPage","onChangeRowsPerPage","labels","previous","next","contextDensity","useTableContext","numberOfPages","Math","ceil","currentPage","setCurrentPage","min","num","max","clamp","onPageClick","toPage","Number","parseInt","dataset","number","setPagePickerValue","String","pagePickerValue","onPageChange","isNaN","onPrevious","onNext","gotoLabel","TextInput","IconButton","title","ChevronLeftIcon","PaginationPages","ChevronRightIcon","Array","from","length","_","showStartEllipsis","showEndEllipsis","startEllipsis","centerPageNumberStart","centerPageNumber","centerPageNumberEnd","endEllipsis","PaginationPageButton","isActive","ExpandableTableRowController","ariaControls","Error","collapseToList","dataTh","showTextFromTh","TableCell","ExpandableTableRow","clickable","expandedChildren","colSpan","isOpenProp","animationRef","timing","toggleOpen","newIsOpen","tableRowClassName","childWrapperClassName","tableRowId","expandableTableRowControllerId","TableRow"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("react/jsx-runtime"),n=require("./clsx-E3yX_9sL.cjs"),s=require("react"),t=require("./cjs/hooks/useAnimatedHeight/useAnimatedHeight.js");require("./cjs/hooks/useScreen/useScreen.js");const o=require("./cjs/hooks/useId/useId.js");require("./cjs/components/icon/Icon.js");const r=require("./cjs/components/icon/icons/animated/ArrowVerticalAnimated.js");require("./cjs/components/icon/icons/animated/ArrowHorizontalAnimated.js"),require("./cjs/components/icon/icons/animated/PlusRemoveAnimated.js"),require("./cjs/components/icon/icons/ArrowDownIcon.js"),require("./cjs/components/icon/icons/ArrowLeftIcon.js"),require("./cjs/components/icon/icons/ArrowNorthEastIcon.js"),require("./cjs/components/icon/icons/ArrowRightIcon.js"),require("./cjs/components/icon/icons/ArrowUpIcon.js"),require("./cjs/components/icon/icons/CalendarIcon.js"),require("./cjs/components/icon/icons/CheckIcon.js"),require("./cjs/components/icon/icons/ChevronDownIcon.js");const a=require("./cjs/components/icon/icons/ChevronLeftIcon.js"),i=require("./cjs/components/icon/icons/ChevronRightIcon.js");require("./cjs/components/icon/icons/ChevronUpIcon.js"),require("./cjs/components/icon/icons/CloseIcon.js"),require("./cjs/components/icon/icons/CopyIcon.js"),require("./cjs/components/icon/icons/DotsIcon.js"),require("./cjs/components/icon/icons/DragIcon.js"),require("./cjs/components/icon/icons/ErrorIcon.js"),require("./cjs/components/icon/icons/GreenCheckIcon.js"),require("./cjs/components/icon/icons/HamburgerIcon.js"),require("./cjs/components/icon/icons/InfoIcon.js"),require("./cjs/components/icon/icons/LinkIcon.js"),require("./cjs/components/icon/icons/PlusIcon.js"),require("./cjs/components/icon/icons/QuestionIcon.js"),require("./cjs/components/icon/icons/RedCrossIcon.js"),require("./cjs/components/icon/icons/SearchIcon.js"),require("./cjs/components/icon/icons/SuccessIcon.js"),require("./cjs/components/icon/icons/WarningIcon.js"),require("./cjs/components/icon/icons/MinusIcon.js"),require("./cjs/components/icon/icons/ThumbDownIcon.js"),require("./cjs/components/icon/icons/ThumbUpIcon.js"),require("./cjs/components/icon/icons/TrashCanIcon.js"),require("./cjs/components/icon/icons/PenIcon.js"),require("./cjs/components/button/Button.js"),require("./cjs/components/card/Card.js"),require("./cjs/components/card/CardImage.js"),require("./cjs/components/card/NavCard.js"),require("./cjs/components/checkbox/Checkbox.js"),require("./cjs/components/combobox/Combobox.js"),require("./cjs/components/cookie-consent/CookieConsentContext.js"),require("react-dom"),require("./cjs/components/modal/Modal.js"),require("react-a11y-dialog"),require("./cjs/components/list/List.js"),require("./cjs/components/list/ListItem.js"),require("./cjs/components/datepicker/DatePicker.js"),require("./cjs/components/feedback/feedbackContext.js"),require("./cjs/components/message/Message.js"),require("./cjs/components/message/FormErrorMessage.js"),require("./cjs/components/tooltip/Tooltip.js"),require("./cjs/components/tooltip/TooltipContent.js"),require("./cjs/components/tooltip/TooltipTrigger.js");const l=require("./cjs/components/input-group/InputGroup.js");require("./cjs/components/feedback/followup/followupContext.js"),require("./cjs/components/feedback/main-question/mainQuestionContext.js"),require("./cjs/components/radio-button/RadioButton.js"),require("./cjs/components/radio-button/radioGroupContext.js"),require("./cjs/components/radio-button/BaseRadioButton.js"),require("./cjs/components/text-input/BaseTextArea.js"),require("./cjs/components/text-input/BaseTextInput.js"),require("./cjs/components/text-input/TextArea.js");const c=require("./cjs/components/text-input/TextInput.js");require("./cjs/utilities/polymorphism/SlotComponent.js"),require("./cjs/components/flex/Flex.js");const u=require("./cjs/components/icon-button/IconButton.js");require("./cjs/components/link/Link.js"),require("./cjs/components/link/NavLink.js"),require("./cjs/components/link-list/LinkList.js"),require("./cjs/components/logo/text-paths/ForsikringLevertAvFremtind.js"),require("./cjs/components/logo/text-paths/FraSB1ogDNB.js"),require("./cjs/components/logo/text-paths/InnovasjonFraFremtind.js"),require("./cjs/components/logo/text-paths/TeknologiFraFremtind.js"),require("./cjs/components/logo/text-paths/VartEgetForsikringsselskap.js"),require("./cjs/components/logo/text-paths/VartForsikringsselskap.js");const p=require("@floating-ui/react"),d=require("framer-motion"),j=require("react-is"),m=require("./cjs/utilities/getThemeAndDensity.js");require("./cjs/components/menu/MenuItem.js"),require("./cjs/components/menu/MenuItemCheckbox.js"),require("./cjs/components/pagination/Pagination.js"),require("./cjs/components/popover/Popover.js");const b=require("./cjs/hooks/usePreviousValue/usePreviousValue.js"),g=require("./cjs/hooks/useListNavigation/useListNavigation.js"),x=require("./cjs/utilities/valuePair.js");require("./cjs/components/system-message/SystemMessage.js"),require("./cjs/components/table/DataTable.js"),require("./cjs/components/table/Table.js"),require("./cjs/components/table/TableBody.js"),require("./cjs/components/table/TableCaption.js");const k=require("./cjs/components/table/TableCell.js");require("./cjs/components/table/TableColumn.js"),require("./cjs/components/table/TableColumnGroup.js");const v=require("./cjs/components/table/tableContext.js");require("./cjs/components/table/tableSectionContext.js"),require("./cjs/components/table/TableFooter.js"),require("./cjs/components/table/TableHead.js"),require("./cjs/components/table/TableHeader.js");const h=require("./cjs/components/table/TableRow.js");require("./cjs/components/tabs/NavTab.js"),require("./cjs/components/tabs/tabsContext.js"),require("./cjs/components/tabs/Tab.js"),require("./cjs/components/tag/Tag.js"),require("./cjs/components/toast/toastContext.js"),require("./cjs/components/toggle-switch/ToggleSwitch.js");const f=require("./cjs/components/select/select-utils.js"),q=require("./cjs/components/menu/useMenuWideEvents.js"),w=require("./cjs/components/ScreenReaderOnly.js");const y=function(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e)for(const s in e)if("default"!==s){const t=Object.getOwnPropertyDescriptor(e,s);Object.defineProperty(n,s,t.get?t:{enumerable:!0,get:()=>e[s]})}return n.default=e,Object.freeze(n)}(j),C=s.forwardRef((({as:t="button",className:o,children:a,density:i,expandDirection:l="down",isExpanded:c=!1,hideLabel:u=!1,...p},d)=>{const j=u?w.ScreenReaderOnly:s.Fragment,m="down"===l?!c:c,b=t,g="button"===b?"button":void 0;return e.jsxs(b,{"aria-expanded":c,"data-testid":"jkl-expander",type:g,className:n.clsx("jkl-expander",o,{"jkl-expander--expanded":c,"jkl-expander--icon-only":!a}),...p,"data-density":i,ref:d,children:[a&&e.jsx(j,{children:e.jsx("span",{className:"jkl-expander__text",children:a})}),e.jsx(r.ArrowVerticalAnimated,{className:"jkl-expander__arrow",pointingDown:m,bold:c})]})}));C.displayName="Expander";const _=s.forwardRef(((t,r)=>{const{children:a,className:i,initialPlacement:l,openOnHover:c=!1,keepOpenOnClickOutside:u=!1,triggerElement:j,isOpen:b,onToggle:g,...x}=t,k=o.useId("jkl-menu"),v=p.useFloatingTree(),h=p.useFloatingNodeId(),f=p.useFloatingParentNodeId(),w=null!=f,C=s.useRef([]),[_,N]=s.useState(null),{allowHover:P,isOpen:I,setIsOpen:T}=q.useMenuWideEvents(v,h,f),E=void 0!==b?b:I;s.useEffect((()=>null==g?void 0:g(E)),[E,g]);const{x:S,y:F,refs:R,placement:A,strategy:L,context:D}=p.useFloating({nodeId:h,open:E,onOpenChange:T,placement:l||(w?"right-start":"bottom-start"),middleware:[p.offset(2),p.flip({fallbackAxisSideDirection:"end",crossAxis:!1}),p.shift({padding:8})],whileElementsMounted:p.autoUpdate}),{getReferenceProps:M,getFloatingProps:O,getItemProps:V}=p.useInteractions([p.useHover(D,{enabled:c&&P,delay:{open:75},handleClose:p.safePolygon({requireIntent:!0,blockPointerEvents:!0})}),p.useClick(D,{event:"mousedown"}),p.useDismiss(D,{outsidePress:!u}),p.useRole(D,{role:"menu"}),p.useListNavigation(D,{listRef:C,activeIndex:_,nested:w,onNavigate:N})]),$=p.useMergeRefs([R.setReference,r]),{theme:B,density:H}=m.getThemeAndDensity(R.reference.current);return e.jsxs(p.FloatingNode,{id:h,children:[s.isValidElement(j)&&("button"===j.type||y.isForwardRef(j))?s.cloneElement(j,{...M({...x,ref:$,role:w?"menuitem":void 0,"aria-controls":k,onClick(e){e.stopPropagation()}})}):j,e.jsx(d.AnimatePresence,{children:E&&e.jsx(p.FloatingPortal,{children:e.jsx(p.FloatingFocusManager,{context:D,modal:!1,initialFocus:w?-1:0,returnFocus:!w,children:e.jsx(d.motion.div,{className:n.clsx("jkl jkl-menu",i),"data-theme":B,"data-layout-density":H,role:"menu",initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{ease:"easeIn",duration:.1},"data-placement":A,"aria-live":"assertive","aria-hidden":!E,ref:R.setFloating,...O({id:k,style:{position:L,top:F??"",left:S??""}}),children:s.Children.map(a,((e,n)=>s.isValidElement(e)&&y.isForwardRef(e)?s.cloneElement(e,V({...e.props,tabIndex:_===n?0:-1,role:"menuitem",ref(e){C.current[n]=e},onClick(n){var s,t;null==(t=(s=e.props).onClick)||t.call(s,n),!n.defaultPrevented&&(null==v||v.events.emit("click"))},onKeyDown(n){var s,t;null==(t=(s=e.props).onKeyDown)||t.call(s,n),!n.defaultPrevented&&(null==v||v.events.emit("keydown"),"menuitemcheckbox"===n.currentTarget.role&&"Enter"===n.key&&T(!1))},onMouseEnter(){P&&E&&N(n)}})):e))})})})})]})}));_.displayName="MenuComponent";const N=s.forwardRef(((n,s)=>null===p.useFloatingParentNodeId()?e.jsx(p.FloatingTree,{children:e.jsx(_,{ref:s,...n})}):e.jsx(_,{ref:s,...n})));N.displayName="Menu";const P=()=>{},I=s.forwardRef(((a,i)=>{const{id:c,name:u,items:p,value:d,label:j,labelProps:m,onChange:k,onBlur:v,onFocus:h,className:q,helpLabel:w,errorLabel:y,invalid:C,searchable:_=!1,inline:N=!1,defaultPrompt:I="Velg",density:T,width:E,maxShownOptions:S=5,style:F,tooltipProps:R,...A}=a,L=o.useId(c||"jkl-select",{generateSuffix:!c}),D=`${L}_label`,M=`${L}_button`,O=`${L}_search-input`,[V,$]=s.useState(!1),B=s.useCallback((()=>{$((e=>!e))}),[]),H=!!_,G=H&&V,[K,U]=s.useState(""),W=s.useCallback((e=>!!e.label.toLowerCase().includes(K.toLowerCase())||"function"==typeof _&&_(K,e)),[_,K]),z=s.useMemo((()=>p.map(x.getValuePair).map((e=>{const n=!H||""===K||W(e);return{...e,visible:n}}))),[p,H,K,W]),Q=s.useMemo((()=>!(typeof d>"u")&&p.some((e=>"string"==typeof e?e===d:e.value===d))),[d,p]),[J,X]=s.useState(Q&&void 0!==d?d:""),Y=""!==J,Z=s.useMemo((()=>{var e;return(null==(e=z.find((e=>e.value===J)))?void 0:e.label)||I}),[z,J,I]),ee=s.useRef(null),ne=s.useCallback((e=>{ee.current=e,i&&("function"==typeof i?i(e):i.current=e),e&&X(e.value)}),[ee,i]),se=b.usePreviousValue(d);s.useEffect((()=>{d!==se&&X(typeof d>"u"||!Q?"":d)}),[X,d,se,Q]);const te=s.useCallback((e=>{const n=e.value;U(""),X(n),B()}),[U,X,B]),oe=b.usePreviousValue(J);s.useEffect((()=>{typeof oe>"u"||oe===J||J===d||(k&&k({type:"change",target:{name:u,value:J}}),ee.current&&ee.current.dispatchEvent(new Event("change",{bubbles:!0})))}),[k,u,d,J,oe]);const re=s.useRef(null),ae=s.useRef(!1),ie=s.useRef(null),le=s.useRef(null),ce=s.useCallback(((e,n)=>{if(e&&!H){const e=n.current;e&&f.focusSelected(e,J)}else e?ie.current&&ie.current.focus():ae.current&&le.current&&le.current.focus()}),[H,J]),[ue]=t.useAnimatedHeight(V,{onFirstVisible:ce,onTransitionEnd:ce});g.useListNavigation({ref:ue});const pe=s.useCallback((()=>{var e;H&&U(""),v&&(v({type:"blur",target:{name:u,value:J}}),null==(e=ee.current)||e.dispatchEvent(new Event("focusout",{bubbles:!0}))),ae.current=!1,$(!1)}),[v,U,$,H,u,J]),de=s.useCallback((e=>{const n=re.current;n&&n.contains(e.relatedTarget)||pe()}),[pe]),je=s.useCallback((()=>{ae.current||(h&&h({type:"change",target:{name:u,value:J}}),ae.current=!0)}),[h,J,u]),me=s.useCallback((e=>{e.target.focus({preventScroll:!0})}),[]);s.useEffect((()=>{const e=ee.current,n=ie.current,s=le.current,t=re.current;return null==e||e.addEventListener("focus",(()=>{G?null==n||n.focus():null==s||s.focus()})),null==e||e.addEventListener("blur",(function(e){t&&t.contains(e.relatedTarget)&&e.preventDefault()})),()=>{null==e||e.removeEventListener("focus",(()=>{G?null==n||n.focus():null==s||s.focus()})),null==e||e.removeEventListener("blur",(function(e){t&&t.contains(e.relatedTarget)&&e.preventDefault()}))}}),[G]);const be=s.useCallback((e=>{"ArrowDown"!==e.key&&" "!==e.key||V?"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),$(!1)):(e.preventDefault(),e.stopPropagation(),$(!0))}),[$,V]),ge=s.useCallback((e=>{if("ArrowDown"===e.key){e.preventDefault(),e.stopPropagation();const n=ue.current;n&&(H?f.focusSelected(n,void 0):f.focusSelected(n,J))}else if("Escape"===e.key)e.preventDefault(),e.stopPropagation(),$(!1);else if("Tab"!==e.key||e.shiftKey)"Enter"===e.key&&V&&(e.preventDefault(),e.stopPropagation());else{const n=ue.current;n&&(e.preventDefault(),e.stopPropagation(),f.focusSelected(n,J))}}),[$,ue,J,H,V]),xe=s.useCallback((e=>{if("Tab"===e.key)e.preventDefault(),e.stopPropagation(),e.shiftKey&&ie.current?ie.current.focus():le.current&&(X(e.currentTarget.value),$(!1),le.current.focus());else if("ArrowUp"===e.key&&ue.current&&ie.current){const n=ue.current.querySelector('[role="option"]:not([hidden])');e.currentTarget.id===(null==n?void 0:n.id)&&ie.current&&ie.current.focus()}}),[$,ue]);return s.useEffect((()=>{const e=e=>{"Escape"===e.key&&V&&$(!1)};return typeof window<"u"&&V&&window.addEventListener("keydown",e),()=>{typeof window<"u"&&window.removeEventListener("keydown",e)}}),[$,V]),e.jsxs(e.Fragment,{children:[e.jsxs("select",{name:u,tabIndex:-1,"data-testid":"jkl-native-select",className:"jkl-sr-only","aria-hidden":!0,ref:ne,value:J,onChange:P,children:[e.jsx("option",{value:""})," ",z.map((n=>e.jsx("option",{hidden:!n.visible,value:n.value,children:n.label},`${L}-opt-${n.value}`)))]}),e.jsx(l.InputGroup,{ref:re,"data-testid":"jkl-select",className:n.clsx("jkl-select",q,{"jkl-select--inline":N,"jkl-select--open":V&&z.some((e=>e.visible)),"jkl-select--no-value":!Y,"jkl-select--invalid":!!y||C}),tooltipProps:R&&{...R,triggerProps:{...R.triggerProps,onFocus:e=>{var n,s;null==(s=null==(n=R.triggerProps)?void 0:n.onFocus)||s.call(n,e),pe()}}},...A,id:H?O:M,style:{"--jkl-select-max-shown-options":S,...F},density:T,label:j,labelProps:{id:D,srOnly:N,...m,htmlFor:H?O:M},helpLabel:w,errorLabel:y,render:s=>e.jsxs("div",{className:"jkl-select__outer-wrapper",style:{width:E},children:[H&&e.jsx("input",{...s,id:O,hidden:!G,ref:ie,placeholder:"Søk",value:K,onChange:e=>U(e.target.value),"data-testid":"jkl-select__search-input",className:"jkl-select__search-input","aria-autocomplete":"list","aria-activedescendant":Y?`${L}__${f.toLower(J)}`:void 0,"aria-controls":L,"aria-expanded":V,role:"combobox",onKeyDown:ge,onBlur:de,onFocus:je,onClick:e=>{e.stopPropagation()}}),e.jsx("button",{...s,id:M,ref:le,hidden:G,type:"button",name:`${u}-btn`,className:n.clsx("jkl-select__button",{"jkl-select__button--active-value":!!J}),"data-testid":"jkl-select__button","aria-label":`${Z||"Velg"},${j}`,"aria-expanded":V,"aria-controls":L,onBlur:de,onFocus:je,onKeyDown:be,onClick:B,onMouseDown:e=>{var n;e.preventDefault(),null==(n=le.current)||n.focus()},children:Z}),e.jsx("div",{id:L,ref:ue,role:"listbox",className:"jkl-select__options-menu",hidden:!V||z.every((e=>!e.visible)),"aria-labelledby":D,tabIndex:-1,"data-focus":"controlled",children:z.map(((n,s)=>n.visible?e.jsxs("button",{hidden:!n.visible,type:"button",id:`${L}__${f.toLower(n.value)}`,className:"jkl-select__option","data-testid":"jkl-select__option","aria-selected":n.value===J,role:"option",value:n.value,"data-testautoid":`jkl-select__option-${s}`,onBlur:de,onFocus:je,onKeyDown:xe,onClick:e=>{e.preventDefault(),te(n)},onMouseOver:me,children:[n.label,n.description?e.jsx("span",{className:"jkl-select__option-description",children:n.description}):null]},`${L}-${n.value}`):null))}),e.jsx(r.ArrowVerticalAnimated,{variant:"medium",pointingDown:!V,className:"jkl-select__arrow"})]})})]})}));I.displayName="Select";const T=s.forwardRef(((s,t)=>{const{label:o,className:a,density:i,errorLabel:c,helpLabel:u,inline:p,invalid:d,items:j,labelProps:m,placeholder:b="Velg",selectClassName:g,supportLabelProps:k,tooltipProps:v,value:h,width:f,...q}=s,w={label:o,density:i,errorLabel:c,helpLabel:u,labelProps:m,inline:p,supportLabelProps:k,tooltipProps:v};return e.jsx(l.InputGroup,{...w,"data-testid":"jkl-select",className:n.clsx("jkl-select",a,{"jkl-select--inline":p,"jkl-select--invalid":!!c||d}),render:s=>e.jsxs("div",{className:"jkl-select__outer-wrapper",style:{width:f},children:[e.jsxs("select",{ref:t,className:n.clsx("jkl-select__button",g,{"jkl-select__button--active-value":!!h}),defaultValue:h?void 0:"",value:h,...s,...q,children:[b&&!h&&e.jsx("option",{disabled:!0,value:"",children:b}),j.map(x.getValuePair).map((n=>e.jsx("option",{"data-testid":"jkl-select__option",className:"jkl-select__option",value:n.value,children:n.label},n.value)))]}),e.jsx(r.ArrowVerticalAnimated,{variant:"medium",pointingDown:!0,className:"jkl-select__arrow"})]})})}));T.displayName="NativeSelect";const E=s.forwardRef(((t,r)=>{const{activePage:l=0,totalNumberOfRows:p,rowsPerPage:d,rowsPerPageItems:j,className:m,density:b,id:g,withGoToPage:x=!1,onChange:k,onChangeRowsPerPage:h,labels:f={rowsPerPage:"Rader per side",previous:"Forrige",next:"Neste"},...q}=t,w=o.useId(g||"jkl-table-pagination",{generateSuffix:!g}),{density:y}=v.useTableContext(),C=d<=0?1:Math.ceil(p/d),[_,N]=s.useState(function(e,n,s){return n<e?e:n>s?s:n}(0,l,C-1)),P=s.useCallback((e=>{const n=Number.parseInt(e.currentTarget.dataset.number);k(e,n,_),N(n),E(String(n+1))}),[k,N,_]),[I,E]=s.useState(String(_+1)),F=s.useCallback((e=>{E(e.target.value);try{const n=Number.parseInt(e.target.value)-1;if(Number.isNaN(n))return;n>=0&&n<C&&(k(e,n,_),N(n))}catch{return}}),[k,E,N,_,C]),R=s.useCallback((e=>{if(0===_)return void k(e,_,_);const n=_-1;k(e,n,_),N(n),E(String(n+1))}),[k,N,_]),A=s.useCallback((e=>{if(_===C-1)return void k(e,_,_);const n=_+1;k(e,n,_),N(n),E(String(n+1))}),[k,N,C,_]);return e.jsxs("div",{className:n.clsx("jkl-table-pagination",m),...q,id:w,"data-density":b||y,ref:r,children:[e.jsx("div",{className:"jkl-table-pagination__left",children:e.jsxs("div",{className:"jkl-table-pagination__picker jkl-table-pagination__picker--rows",children:[e.jsxs("span",{className:"jkl-table-pagination__picker-label","aria-hidden":"true",children:[f.rowsPerPage,":"]}),e.jsx(T,{className:"jkl-table-pagination__picker-input",label:f.rowsPerPage,labelProps:{srOnly:!0},name:`${w}-rows-per-page`,items:j.map((e=>"number"==typeof e?String(e):{label:e.label,value:String(e.value)})),value:String(d),onChange:h,width:"min(8rem, 100%)",inline:!0})]})}),e.jsx("div",{className:"jkl-table-pagination__right",children:1!==C&&e.jsxs("nav",{className:"jkl-table-pagination__nav",children:[x&&e.jsxs("div",{className:"jkl-table-pagination__picker jkl-table-pagination__picker--page",children:[e.jsxs("span",{className:"jkl-table-pagination__picker-label","aria-hidden":"true",children:["object"==typeof x?x.gotoLabel:"Gå til side",":"]}),e.jsx(c.TextInput,{className:"jkl-table-pagination__picker-input",label:"object"==typeof x?x.gotoLabel:"Gå til side",labelProps:{srOnly:!0},name:`${w}-go-to-page`,value:I,width:"min(4rem, 100%)",onChange:F,"aria-invalid":I&&I!==String(_+1)?"true":void 0})]}),e.jsxs("ul",{children:[e.jsx("li",{children:e.jsx(u.IconButton,{className:"jkl-table-pagination__previous",title:f.previous,onClick:R,children:e.jsx(a.ChevronLeftIcon,{})})}),e.jsx(S,{id:w,activePage:l,numberOfPages:C,onPageClick:P}),e.jsx("li",{children:e.jsx(u.IconButton,{className:"jkl-table-pagination__next",title:f.next,onClick:A,children:e.jsx(i.ChevronRightIcon,{})})})]})]})})]})})),S=({id:s,activePage:t,numberOfPages:o,onPageClick:r})=>{if(o<=7)return e.jsx(e.Fragment,{children:Array.from({length:o}).map(((o,a)=>e.jsx("li",{children:e.jsx("button",{className:n.clsx("jkl-table-pagination__page",{"jkl-table-pagination__page--active":t===a}),type:"button","data-number":a,onClick:r,children:a+1})},`${s}-page-${a}`)))});const a=t>3&&o>7,i=t<o-4&&o>7,l=Math.min(Math.max(t-2,1),o-6),c=Math.min(l+1,o-5),u=Math.min(c+1,o-4),p=Math.min(c+2,o-3),d=Math.min(c+3,o-2);return e.jsxs(e.Fragment,{children:[e.jsx("li",{children:e.jsx(F,{isActive:0===t,number:0,onClick:r})}),e.jsx("li",{children:a?e.jsx("span",{className:"jkl-table-pagination__ellipsis","aria-hidden":!0,children:"..."}):e.jsx(F,{isActive:t===l,number:l,onClick:r})}),e.jsx("li",{children:e.jsx(F,{isActive:t===c,number:c,onClick:r})}),e.jsx("li",{children:e.jsx(F,{isActive:t===u,number:u,onClick:r})}),e.jsx("li",{children:e.jsx(F,{isActive:t===p,number:p,onClick:r})}),e.jsx("li",{children:i?e.jsx("span",{className:"jkl-table-pagination__ellipsis","aria-hidden":!0,children:"..."}):e.jsx(F,{isActive:t===d,number:d,onClick:r})}),e.jsx("li",{children:e.jsx(F,{isActive:t===o-1,number:o-1,onClick:r})})]})},F=({isActive:s,number:t,onClick:o,...r})=>e.jsx("button",{className:n.clsx("jkl-table-pagination__page",{"jkl-table-pagination__page--active":s}),type:"button","data-number":t,onClick:o,...r,children:t+1});E.displayName="TablePagination";const R=s.forwardRef((({isOpen:s,onClick:t,children:o,className:r,id:a,"aria-controls":i,...l},c)=>{if(void 0===s||"function"!=typeof t)throw new Error("ExpandableTableRowController must have ExpandableTableRow as parent");const{density:u,collapseToList:p}=v.useTableContext(),d=l["data-th"],j=p?d:void 0;return e.jsx(k.TableCell,{className:n.clsx("jkl-table-cell--expand",{"jkl-table-cell--expand-without-text":!o},r),...l,ref:c,children:e.jsx(C,{className:n.clsx("jkl-table-row-expand-button",{"jkl-table-row-expand-button--expanded":s}),id:a,density:u,isExpanded:s,"aria-controls":i,"aria-label":o?void 0:d||"Ekspander rad",onClick:e=>{e.stopPropagation(),t()},onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.stopPropagation(),e.preventDefault(),t())},children:o??j})})}));R.displayName="ExpandableTableRowController";const A=s.forwardRef(((r,a)=>{const{className:i,clickable:l,children:c,expandedChildren:u,onToggle:p,colSpan:d=100,isOpen:j,...m}=r,[b,g]=s.useState(j??!1);s.useEffect((()=>{typeof j>"u"||g(j)}),[j]);const[x]=t.useAnimatedHeight(b,{timing:"expressive"}),k=()=>{const e=!b;p&&p(e),g(e)},v=n.clsx("jkl-table-row--expandable",i,{"jkl-table-row--expanded":b,"jkl-expandable-table-row--clickable-external":l}),f=n.clsx("jkl-expandable-table-row__expanded-row",{"jkl-expandable-table-row__expanded-row--expanded":b}),q=o.useId("jkl-expandable-table-row"),w=o.useId("jkl-expandable-table-row-controller");return e.jsxs(e.Fragment,{children:[e.jsx(h.TableRow,{className:v,clickable:l??{onClick:()=>k()},...m,ref:a,children:s.Children.map(c,(e=>s.isValidElement(e)&&e.type==R?s.cloneElement(e,{isOpen:b,onClick:()=>k(),"aria-controls":q,id:w}):e))}),e.jsx("tr",{"aria-hidden":!b,children:e.jsx("td",{colSpan:d,children:e.jsx("div",{ref:x,className:f,id:q,"aria-labelledby":w,hidden:!b,role:"group",children:u})})})]})}));A.displayName="ExpandableTableRow",exports.ExpandableTableRow=A,exports.ExpandableTableRowController=R,exports.Expander=C,exports.Menu=N,exports.NativeSelect=T,exports.Select=I,exports.TablePagination=E;
2
+ //# sourceMappingURL=ExpandableTableRow-CrPwH3tm.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpandableTableRow-CrPwH3tm.cjs","sources":["../src/components/expander/Expander.tsx","../src/components/menu/Menu.tsx","../src/components/select/Select.tsx","../src/components/select/NativeSelect.tsx","../src/components/table/TablePagination.tsx","../src/components/table/ExpandableTableRowController.tsx","../src/components/table/ExpandableTableRow.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { ForwardedRef } from \"react\";\nimport { Density, ScreenReaderOnly, WithChildren } from \"../..\";\nimport { ArrowVerticalAnimated } from \"../icon\";\n\nexport type ExpandDirection = \"up\" | \"down\";\n\nexport interface ExpanderProps extends WithChildren {\n as?: \"summary\" | \"button\";\n /** Må settes dersom du ikke bruker CoreToggle. Verdien skal være IDen til innholdet du ekspanderer. */\n \"aria-controls\"?: string;\n /** Må settes dersom du ikke bruker CoreToggle. IDen her skal brukes som verdien til aria-labelledby på innholdet du ekspanderer. */\n id?: string;\n className?: string;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n onKeyDown?: React.KeyboardEventHandler<HTMLButtonElement>;\n /**\n * Styrer retningen til pila, som animeres ved endring. Styrer også aria-expanded.\n * @default false\n */\n isExpanded?: boolean;\n /** @default \"down\" */\n expandDirection?: ExpandDirection;\n density?: Density;\n /**\n * Skjul knappeteksten visuelt.\n *\n * @default false\n */\n hideLabel?: boolean;\n}\n\nexport const Expander = React.forwardRef(\n (\n {\n as = \"button\",\n className,\n children,\n density,\n expandDirection = \"down\",\n isExpanded = false,\n hideLabel = false,\n ...rest\n }: ExpanderProps,\n ref: ForwardedRef<HTMLButtonElement>,\n ): JSX.Element => {\n const ContentWrapper = hideLabel ? ScreenReaderOnly : React.Fragment;\n const pointingDown = expandDirection === \"down\" ? !isExpanded : isExpanded;\n\n const El = as;\n const type = El === \"button\" ? \"button\" : undefined;\n\n return (\n <El\n aria-expanded={isExpanded}\n data-testid=\"jkl-expander\"\n type={type}\n className={clsx(\"jkl-expander\", className, {\n \"jkl-expander--expanded\": isExpanded,\n \"jkl-expander--icon-only\": !children,\n })}\n {...rest}\n data-density={density}\n ref={ref}\n >\n {children && (\n <ContentWrapper>\n <span className=\"jkl-expander__text\">{children}</span>\n </ContentWrapper>\n )}\n <ArrowVerticalAnimated className=\"jkl-expander__arrow\" pointingDown={pointingDown} bold={isExpanded} />\n </El>\n );\n },\n);\n\nExpander.displayName = \"Expander\";\n","import {\n autoUpdate,\n flip,\n FloatingFocusManager,\n FloatingNode,\n FloatingPortal,\n FloatingTree,\n offset,\n type Placement,\n safePolygon,\n shift,\n useClick,\n useDismiss,\n useFloating,\n useFloatingNodeId,\n useFloatingParentNodeId,\n useFloatingTree,\n useHover,\n useInteractions,\n useListNavigation,\n useMergeRefs,\n useRole,\n} from \"@floating-ui/react\";\nimport clsx from \"clsx\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport React, { type ButtonHTMLAttributes, forwardRef, type ReactNode, useEffect, useRef, useState } from \"react\";\nimport * as ReactIs from \"react-is\";\nimport { type DataTestAutoId, getThemeAndDensity, WithChildren } from \"../..\";\nimport { useId } from \"../../hooks\";\nimport { useMenuWideEvents } from \"./useMenuWideEvents\";\n\nexport interface MenuProps\n extends DataTestAutoId,\n WithChildren,\n Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n className?: string;\n /**\n * Initiell plassering av menyen. Dersom det ikke er plass på skjermen der du\n * angir at den skal åpnes vil den slyttes automatisk.\n * @default \"bottom-start\" på toppnivå, \"right-start\" for undermenyer\n * */\n initialPlacement?: Placement;\n /**\n * Angir om menyen skal åpnes ved hover (uten å måtte klikke)\n * @default false\n */\n openOnHover?: boolean;\n /**\n * Angir om menyen skal holdes åpen når man klikker utenfor menyen\n * @default false\n */\n keepOpenOnClickOutside?: boolean;\n /**\n * Elementet som fungerer som trigger for menyen. Dersom elementet ikke er en `<button>`\n * eller en `forwardRef<HTMLButtonElement>` vil det bli lagt inne i en knapp\n * med forhåndsdefinert stil. For å komme raskt i gang kan du bruke komponenten\n * `MenuTriggerButton` fra denne pakken.\n */\n triggerElement: ReactNode;\n /**\n * Kan brukes til å styre utenfra om menyen skal være åpen eller ikke.\n * @default false\n */\n isOpen?: boolean;\n /**\n * Callback som kalles når menyen åpnes eller lukkes.\n */\n onToggle?: (isOpen: boolean) => void;\n}\n\nconst MenuComponent = forwardRef<HTMLButtonElement, MenuProps>((props, forwardedRef) => {\n const {\n children,\n className,\n initialPlacement,\n openOnHover = false,\n keepOpenOnClickOutside = false,\n triggerElement,\n isOpen: isOpenOverride,\n onToggle,\n ...triggerProps\n } = props;\n\n const MenuId = useId(\"jkl-menu\");\n\n const tree = useFloatingTree();\n const nodeId = useFloatingNodeId();\n const parentId = useFloatingParentNodeId();\n const isNested = parentId != null;\n\n const listItemsRef = useRef<Array<HTMLButtonElement | null>>([]);\n const [activeIndex, setActiveIndex] = useState<number | null>(null);\n const { allowHover, isOpen: isOpenDefault, setIsOpen } = useMenuWideEvents(tree, nodeId, parentId);\n\n const isOpen = isOpenOverride !== undefined ? isOpenOverride : isOpenDefault;\n\n useEffect(() => onToggle?.(isOpen), [isOpen, onToggle]);\n\n const { x, y, refs, placement, strategy, context } = useFloating({\n nodeId,\n open: isOpen,\n onOpenChange: setIsOpen,\n placement: initialPlacement || (isNested ? \"right-start\" : \"bottom-start\"),\n middleware: [\n offset(2),\n flip({\n fallbackAxisSideDirection: \"end\", // Allow bottom placement in narrow viewports (https://floating-ui.com/docs/flip#fallbackaxissidedirection)\n crossAxis: false, // See https://floating-ui.com/docs/flip#combining-with-shift\n }),\n shift({ padding: 8 }),\n ],\n whileElementsMounted: autoUpdate,\n });\n\n const { getReferenceProps, getFloatingProps, getItemProps } = useInteractions([\n useHover(context, {\n enabled: openOnHover && allowHover,\n delay: { open: 75 },\n handleClose: safePolygon({\n requireIntent: true,\n blockPointerEvents: true,\n }),\n }),\n useClick(context, {\n event: \"mousedown\",\n }),\n useDismiss(context, { outsidePress: !keepOpenOnClickOutside }),\n useRole(context, { role: \"menu\" }),\n useListNavigation(context, {\n listRef: listItemsRef,\n activeIndex,\n nested: isNested,\n onNavigate: setActiveIndex,\n }),\n ]);\n\n const referenceRef = useMergeRefs([refs.setReference, forwardedRef]);\n\n // Siden menyen rendres på rot må vi hente lokal dark/light-verdi fra triggeren\n // Vi må gjøre dette for å ta hensyn til at tema kan styres lokalt for deler av UIet\n const { theme, density } = getThemeAndDensity(refs.reference.current as HTMLElement);\n\n return (\n <FloatingNode id={nodeId}>\n {React.isValidElement(triggerElement) &&\n (triggerElement.type === \"button\" || ReactIs.isForwardRef(triggerElement))\n ? // Dersom trigger-elementet er en knapp, sett riktige egenskaper på det\n React.cloneElement(triggerElement, {\n ...getReferenceProps({\n ...triggerProps,\n ref: referenceRef,\n role: isNested ? \"menuitem\" : undefined,\n \"aria-controls\": MenuId,\n onClick(event) {\n event.stopPropagation();\n },\n }),\n })\n : // Ellers, rendre elementet as-is, uten interaktivitet. Krev en ferdig brukbar button for å åpne menyen.\n triggerElement}\n <AnimatePresence>\n {isOpen && (\n <FloatingPortal>\n <FloatingFocusManager\n context={context}\n // Prevent outside content interference.\n modal={false}\n // Only initially focus the root floating menu.\n initialFocus={isNested ? -1 : 0}\n // Only return focus to the root menu's reference when menus close.\n returnFocus={!isNested}\n >\n <motion.div\n className={clsx(\"jkl jkl-menu\", className)}\n data-theme={theme}\n data-layout-density={density}\n role=\"menu\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ ease: \"easeIn\", duration: 0.1 }}\n data-placement={placement}\n aria-live=\"assertive\"\n aria-hidden={!isOpen}\n ref={refs.setFloating}\n {...getFloatingProps({\n id: MenuId,\n style: {\n position: strategy,\n top: y ?? \"\",\n left: x ?? \"\",\n },\n })}\n >\n {React.Children.map(children, (child, index) => {\n if (React.isValidElement(child) && ReactIs.isForwardRef(child)) {\n return React.cloneElement(\n child,\n getItemProps({\n ...child.props,\n tabIndex: activeIndex === index ? 0 : -1,\n role: \"menuitem\",\n ref(node: HTMLButtonElement) {\n listItemsRef.current[index] = node;\n },\n onClick(event) {\n child.props.onClick?.(event as React.MouseEvent<HTMLButtonElement>);\n if (event.defaultPrevented) {\n return;\n }\n tree?.events.emit(\"click\");\n },\n onKeyDown(event) {\n child.props.onKeyDown?.(event);\n if (event.defaultPrevented) {\n return;\n }\n tree?.events.emit(\"keydown\");\n if (\n event.currentTarget.role === \"menuitemcheckbox\" &&\n event.key === \"Enter\"\n ) {\n // https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/menuitemcheckbox_role#keyboard_interactions\n setIsOpen(false);\n }\n },\n onMouseEnter() {\n if (allowHover && isOpen) {\n setActiveIndex(index);\n }\n },\n }),\n );\n }\n\n return child;\n })}\n </motion.div>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </AnimatePresence>\n </FloatingNode>\n );\n});\nMenuComponent.displayName = \"MenuComponent\";\n\nexport const Menu = forwardRef<HTMLButtonElement, MenuProps>((props, ref) => {\n const parentId = useFloatingParentNodeId();\n\n if (parentId === null) {\n return (\n <FloatingTree>\n <MenuComponent ref={ref} {...props} />\n </FloatingTree>\n );\n }\n\n return <MenuComponent ref={ref} {...props} />;\n});\nMenu.displayName = \"Menu\";\n","import clsx from \"clsx\";\nimport React, {\n FocusEvent,\n forwardRef,\n useEffect,\n useRef,\n useState,\n KeyboardEvent,\n ChangeEvent,\n useCallback,\n useMemo,\n RefObject,\n MouseEvent,\n CSSProperties,\n} from \"react\";\nimport { type ValuePair, getValuePair, type DataTestAutoId, type Density } from \"../..\";\nimport { useId, useAnimatedHeight, usePreviousValue, useListNavigation } from \"../../hooks\";\nimport { ArrowVerticalAnimated } from \"../icon\";\nimport { InputGroup, type LabelProps, type InputGroupProps } from \"../input-group\";\nimport { toLower, focusSelected } from \"./select-utils\";\n\ninterface PartialChangeEvent extends Partial<Omit<ChangeEvent<HTMLSelectElement>, \"target\">> {\n /** Kreves av react-hook-form, det skjer ulike ting avhengig av om det er blur eller change */\n type: \"change\" | \"blur\";\n target: {\n /** Kreves av react-hook-form for å vite hvilket skjemafelt som ble endret */\n name: string;\n value: string;\n };\n}\n\ntype ChangeEventHandler = (event: PartialChangeEvent) => void;\n\ninterface Option extends ValuePair {\n visible: boolean;\n}\n\nexport interface SelectProps extends Omit<InputGroupProps, \"children\">, DataTestAutoId {\n id?: string;\n name: string;\n label: string;\n labelProps?: Omit<LabelProps, \"children\" | \"density\" | \"htmlFor\" | \"standAlone\">;\n items: Array<string | ValuePair>;\n /**\n * @default false\n */\n inline?: boolean;\n /**\n * @default \"Velg\"\n */\n defaultPrompt?: string;\n className?: string;\n value?: string;\n helpLabel?: string;\n errorLabel?: string;\n /**\n * @default false\n */\n searchable?: boolean | ((searchValue: string, searchItem: string | ValuePair) => boolean);\n density?: Density;\n width?: string;\n onChange?: ChangeEventHandler;\n onBlur?: ChangeEventHandler;\n onFocus?: ChangeEventHandler;\n /**\n * Merk som ugyldig uten å sende inn en errorLabel.\n * NB! Brukes kun i tilfeller der valideringsfeil dukker opp andre steder, for eksempel i en FieldGroup.\n */\n invalid?: boolean;\n /**\n * Hvor mange valg skal vises i listen før den begynner å scrolle.\n * @default 5\n */\n maxShownOptions?: number;\n}\n\nconst noop = () => {\n return;\n};\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>((props, forwardedSelectRef) => {\n const {\n id,\n name,\n items,\n value,\n label,\n labelProps,\n onChange,\n onBlur,\n onFocus,\n className,\n helpLabel,\n errorLabel,\n invalid,\n searchable = false,\n inline = false,\n defaultPrompt = \"Velg\",\n density,\n width,\n maxShownOptions = 5,\n style,\n tooltipProps,\n ...rest\n } = props;\n\n const listId = useId(id || \"jkl-select\", { generateSuffix: !id });\n const labelId = `${listId}_label`;\n const buttonId = `${listId}_button`;\n const searchInputId = `${listId}_search-input`;\n\n const [dropdownIsShown, setShown] = useState(false);\n const toggleListVisibility = useCallback(() => {\n setShown((previousValue) => !previousValue);\n }, []);\n\n /// Søk\n\n const isSearchable = Boolean(searchable);\n const showSearchInputField = isSearchable && dropdownIsShown;\n const [searchValue, setSearchValue] = useState(\"\");\n const searchFn = useCallback(\n (item: ValuePair) => {\n if (item.label.toLowerCase().includes(searchValue.toLowerCase())) {\n return true;\n }\n\n if (typeof searchable === \"function\") {\n return searchable(searchValue, item);\n }\n\n return false;\n },\n [searchable, searchValue],\n );\n const visibleItems: Option[] = useMemo(\n () =>\n items.map(getValuePair).map((item) => {\n const visible = !isSearchable || searchValue === \"\" || searchFn(item);\n return { ...item, visible };\n }),\n [items, isSearchable, searchValue, searchFn],\n );\n const valueIsInItems: boolean = useMemo(() => {\n if (typeof value === \"undefined\") {\n return false;\n }\n return items.some((item) => (typeof item === \"string\" ? item === value : item.value === value));\n }, [value, items]);\n\n /// Valg av <option>\n\n const [selectedValue, setSelectedValue] = useState<string>(valueIsInItems && value !== undefined ? value : \"\");\n const hasSelectedValue = selectedValue !== \"\";\n const selectedValueLabel = useMemo(\n () => visibleItems.find((item) => item.value === selectedValue)?.label || defaultPrompt,\n [visibleItems, selectedValue, defaultPrompt],\n );\n\n const selectRef = useRef<HTMLSelectElement | null>(null);\n // Hjelpefunksjon som gjør det enklere å forwarde refen og å bruke den selv internt\n const unifiedSelectRef = useCallback(\n (instance: HTMLSelectElement | null) => {\n selectRef.current = instance;\n if (forwardedSelectRef) {\n if (typeof forwardedSelectRef === \"function\") {\n forwardedSelectRef(instance);\n } else {\n forwardedSelectRef.current = instance;\n }\n }\n if (instance) {\n setSelectedValue(instance.value);\n }\n },\n [selectRef, forwardedSelectRef],\n );\n\n const previousValue = usePreviousValue(value);\n useEffect(() => {\n if (value === previousValue) {\n return;\n }\n if (typeof value === \"undefined\" || !valueIsInItems) {\n setSelectedValue(\"\");\n } else {\n setSelectedValue(value);\n }\n }, [setSelectedValue, value, previousValue, valueIsInItems]);\n\n const selectOption = useCallback(\n (item: Option) => {\n const nextValue = item.value;\n setSearchValue(\"\");\n setSelectedValue(nextValue);\n toggleListVisibility();\n },\n [setSearchValue, setSelectedValue, toggleListVisibility],\n );\n\n // La komponenten rendre <select> med den valgte verdien før onChange trigges, slik at\n // react-hook-form@>7.41.1 behandler feltet som at det har en verdi.\n const previousSelectedValue = usePreviousValue(selectedValue);\n useEffect(() => {\n // previousSelectedValue er undefined på første render, men da vil vi ikke ha en onChange uansett\n if (\n typeof previousSelectedValue === \"undefined\" ||\n previousSelectedValue === selectedValue ||\n selectedValue === value\n ) {\n return;\n }\n if (onChange) {\n onChange({ type: \"change\", target: { name, value: selectedValue } });\n }\n if (selectRef.current) {\n selectRef.current.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n }, [onChange, name, value, selectedValue, previousSelectedValue]);\n\n /// Fokushåndtering\n\n const componentRootElementRef = useRef<HTMLDivElement>(null);\n const focusInsideRef = useRef(false);\n const searchFieldRef = useRef<HTMLInputElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n const handleFocusPlacement = useCallback(\n (isOpen: boolean, ref: RefObject<HTMLElement>) => {\n if (isOpen && !isSearchable) {\n const listElement = ref.current;\n if (listElement) {\n focusSelected(listElement, selectedValue);\n }\n } else if (isOpen) {\n if (searchFieldRef.current) {\n searchFieldRef.current.focus();\n }\n } else {\n if (focusInsideRef.current && buttonRef.current) {\n buttonRef.current.focus();\n }\n }\n },\n [isSearchable, selectedValue],\n );\n\n const [dropdownRef] = useAnimatedHeight<HTMLDivElement>(dropdownIsShown, {\n onFirstVisible: handleFocusPlacement,\n onTransitionEnd: handleFocusPlacement,\n });\n\n useListNavigation({ ref: dropdownRef });\n\n const close = useCallback(() => {\n if (isSearchable) {\n setSearchValue(\"\");\n }\n if (onBlur) {\n onBlur({ type: \"blur\", target: { name, value: selectedValue } });\n selectRef.current?.dispatchEvent(new Event(\"focusout\", { bubbles: true }));\n }\n focusInsideRef.current = false;\n setShown(false);\n }, [onBlur, setSearchValue, setShown, isSearchable, name, selectedValue]);\n\n const handleBlur = useCallback(\n (e: FocusEvent<HTMLButtonElement | HTMLInputElement>) => {\n const componentRootElement = componentRootElementRef.current;\n // There are known issues in Firefox when using \"relatedTarget\" in onBlur events:\n // https://github.com/facebook/react/issues/2011\n // This might be fixed in react 17. Se issue above.\n const nextFocusIsInsideComponent =\n componentRootElement && componentRootElement.contains(e.relatedTarget as Node);\n if (!nextFocusIsInsideComponent) {\n close();\n }\n },\n [close],\n );\n\n const handleFocus = useCallback(() => {\n if (!focusInsideRef.current) {\n if (onFocus) {\n onFocus({ type: \"change\", target: { name, value: selectedValue } });\n }\n focusInsideRef.current = true;\n }\n }, [onFocus, selectedValue, name]);\n\n const handleMouseOver = useCallback((e: MouseEvent<HTMLButtonElement>) => {\n // Ved mouseOver på options flytter vi fokus til dem for å unngå \"dobbel fokus\"\n // der det ser ut som to forskjellige elementer er fokusert/hovered samtidig\n (e.target as HTMLButtonElement).focus({ preventScroll: true });\n }, []);\n\n // Handle focus and blur of hidden select element\n useEffect(() => {\n const select = selectRef.current;\n const searchField = searchFieldRef.current;\n const button = buttonRef.current;\n const componentRootElement = componentRootElementRef.current;\n\n select?.addEventListener(\"focus\", () => {\n showSearchInputField ? searchField?.focus() : button?.focus();\n });\n select?.addEventListener(\"blur\", function (this, ev) {\n componentRootElement && componentRootElement.contains(ev.relatedTarget as Node) && ev.preventDefault();\n });\n\n return () => {\n select?.removeEventListener(\"focus\", () => {\n showSearchInputField ? searchField?.focus() : button?.focus();\n });\n select?.removeEventListener(\"blur\", function (this, ev) {\n componentRootElement && componentRootElement.contains(ev.relatedTarget as Node) && ev.preventDefault();\n });\n };\n }, [showSearchInputField]);\n\n /// Tastaturnavigasjon\n\n // Add support for opening dropdown with arrowkey down as expected from native select\n // onKeyDown to stop ArrowDown from scrolling the page\n const handleOnKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>) => {\n if ((e.key === \"ArrowDown\" || e.key === \" \") && !dropdownIsShown) {\n e.preventDefault();\n e.stopPropagation();\n setShown(true);\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n setShown(false);\n }\n },\n [setShown, dropdownIsShown],\n );\n\n // onKeyDown to stop ArrowDown from scrolling the page\n const handleSearchOnKeyDown = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n e.stopPropagation();\n\n const listElement = dropdownRef.current;\n if (listElement) {\n if (isSearchable) {\n // Flytt fokus til det første elementet i listen, ikke det forrige valgte.\n // Ved endring i filter er det ikke gitt at vi ønsker å ta utgangspunkt i\n // den valgte verdien.\n focusSelected(listElement, undefined);\n } else {\n focusSelected(listElement, selectedValue);\n }\n }\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n setShown(false);\n } else if (e.key === \"Tab\" && !e.shiftKey) {\n const listElement = dropdownRef.current;\n if (listElement) {\n e.preventDefault();\n e.stopPropagation();\n focusSelected(listElement, selectedValue);\n }\n } else if (e.key === \"Enter\" && dropdownIsShown) {\n // Should not propagate Enter keyevent because form might submit\n e.preventDefault();\n e.stopPropagation();\n }\n },\n [setShown, dropdownRef, selectedValue, isSearchable, dropdownIsShown],\n );\n\n // onKeyDown so this Tab listener isn't triggered by tabbing from search field to option\n const handleOptionOnKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"Tab\") {\n e.preventDefault();\n e.stopPropagation();\n\n if (e.shiftKey && searchFieldRef.current) {\n searchFieldRef.current.focus();\n } else if (buttonRef.current) {\n // Mimic behaviour of Firefox and native select, where Tab selects the current item and closes the menu\n setSelectedValue(e.currentTarget.value);\n setShown(false);\n buttonRef.current.focus();\n }\n } else if (e.key === \"ArrowUp\") {\n if (dropdownRef.current && searchFieldRef.current) {\n // Can't be based on index since the first item might be filtered out\n const firstVisible = dropdownRef.current.querySelector('[role=\"option\"]:not([hidden])');\n if (e.currentTarget.id === firstVisible?.id && searchFieldRef.current) {\n searchFieldRef.current.focus();\n }\n }\n }\n },\n [setShown, dropdownRef],\n );\n\n // Add support for closing the dropdown with Escape like native select. Unfortunately, Escape does not trigger the button onKeyDown.\n useEffect(() => {\n const handleEscape = (e: globalThis.KeyboardEvent) => {\n if (e.key === \"Escape\" && dropdownIsShown) {\n setShown(false);\n }\n };\n if (typeof window !== \"undefined\" && dropdownIsShown) {\n window.addEventListener(\"keydown\", handleEscape);\n }\n return () => {\n if (typeof window !== \"undefined\") {\n window.removeEventListener(\"keydown\", handleEscape);\n }\n };\n }, [setShown, dropdownIsShown]);\n\n return (\n <>\n <select\n name={name}\n tabIndex={-1}\n data-testid=\"jkl-native-select\"\n className=\"jkl-sr-only\"\n aria-hidden\n ref={unifiedSelectRef}\n value={selectedValue}\n onChange={noop} // React complains unless we give an onChange handler. This is technically a read-only field, but readOnly isn't an option here.\n >\n <option value=\"\"></option> {/* Tom option må være et valg, ellers vil <select> alltid ha en value */}\n {visibleItems.map((item) => (\n <option key={`${listId}-opt-${item.value}`} hidden={!item.visible} value={item.value}>\n {item.label}\n </option>\n ))}\n </select>\n <InputGroup\n ref={componentRootElementRef}\n data-testid=\"jkl-select\"\n className={clsx(\"jkl-select\", className, {\n \"jkl-select--inline\": inline,\n \"jkl-select--open\": dropdownIsShown && visibleItems.some((item) => item.visible),\n \"jkl-select--no-value\": !hasSelectedValue,\n \"jkl-select--invalid\": !!errorLabel || invalid,\n })}\n tooltipProps={\n tooltipProps && {\n ...tooltipProps,\n triggerProps: {\n ...tooltipProps.triggerProps,\n onFocus: (e) => {\n tooltipProps.triggerProps?.onFocus?.(e);\n close();\n },\n },\n }\n }\n {...rest}\n id={isSearchable ? searchInputId : buttonId}\n style={{ [\"--jkl-select-max-shown-options\"]: maxShownOptions, ...style } as CSSProperties}\n density={density}\n label={label}\n labelProps={{\n id: labelId,\n srOnly: inline,\n ...labelProps,\n htmlFor: isSearchable ? searchInputId : buttonId,\n }}\n helpLabel={helpLabel}\n errorLabel={errorLabel}\n render={(inputProps) => (\n <div className=\"jkl-select__outer-wrapper\" style={{ width }}>\n {isSearchable && (\n <input\n {...inputProps}\n id={searchInputId}\n hidden={!showSearchInputField}\n ref={searchFieldRef}\n placeholder=\"Søk\"\n value={searchValue}\n onChange={(e) => setSearchValue(e.target.value)}\n data-testid=\"jkl-select__search-input\"\n className=\"jkl-select__search-input\"\n aria-autocomplete=\"list\"\n aria-activedescendant={\n hasSelectedValue ? `${listId}__${toLower(selectedValue)}` : undefined\n }\n aria-controls={listId}\n aria-expanded={dropdownIsShown}\n role=\"combobox\"\n onKeyDown={handleSearchOnKeyDown}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onClick={(e) => {\n e.stopPropagation();\n }}\n />\n )}\n <button\n {...inputProps}\n id={buttonId}\n ref={buttonRef}\n hidden={showSearchInputField}\n type=\"button\"\n name={`${name}-btn`}\n className={clsx(\"jkl-select__button\", {\n \"jkl-select__button--active-value\": !!selectedValue,\n })}\n data-testid=\"jkl-select__button\"\n aria-label={`${selectedValueLabel || \"Velg\"},${label}`}\n aria-expanded={dropdownIsShown}\n aria-controls={listId}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onKeyDown={handleOnKeyDown}\n onClick={toggleListVisibility}\n onMouseDown={(e) => {\n // Workaround for en Safari-bug hvor e.relatedTarget er null i onBlur\n // https://twitter.com/MilesSorce/status/1278762360669265925\n e.preventDefault();\n buttonRef.current?.focus();\n }}\n >\n {selectedValueLabel}\n </button>\n <div\n id={listId}\n ref={dropdownRef}\n role=\"listbox\"\n className=\"jkl-select__options-menu\"\n hidden={!dropdownIsShown || visibleItems.every((item) => !item.visible)}\n aria-labelledby={labelId}\n tabIndex={-1}\n data-focus=\"controlled\" // lar oss styre markering av valg vha focus\n >\n {visibleItems.map((item, i) =>\n // Det er viktig at vi _fjerner_ elementer som ikke er synlige fra DOMen for at tastaturnavigasjon skal fungere.\n // For eksempel, hvis vi har elementene Apple, Samsung og LG i den rekkefølgen og søker etter \"l\"\n // vil Samsung ikke synes. Om vi bare setter hidden-attributtet på Samsung vil ArrowDown fra Apple ikke fungere.\n // Dette lar seg ikke gjenskape i en enhetstest med JSDOM + user-events, og Cypress lukker Select\n // ved første {downArrow} ¯\\_(ツ)_/¯. Så please test scenariet over manuelt om dette skaper trøbbel for deg.\n item.visible ? (\n <button\n key={`${listId}-${item.value}`}\n hidden={!item.visible}\n type=\"button\"\n id={`${listId}__${toLower(item.value)}`}\n className=\"jkl-select__option\"\n data-testid=\"jkl-select__option\"\n aria-selected={item.value === selectedValue}\n role=\"option\"\n value={item.value}\n data-testautoid={`jkl-select__option-${i}`}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onKeyDown={handleOptionOnKeyDown}\n onClick={(e) => {\n e.preventDefault();\n selectOption(item);\n }}\n onMouseOver={handleMouseOver}\n >\n {item.label}\n {item.description ? (\n <span className=\"jkl-select__option-description\">{item.description}</span>\n ) : null}\n </button>\n ) : null,\n )}\n </div>\n <ArrowVerticalAnimated\n variant=\"medium\"\n pointingDown={!dropdownIsShown}\n className=\"jkl-select__arrow\"\n />\n </div>\n )}\n />\n </>\n );\n});\n\nSelect.displayName = \"Select\";\n","import clsx from \"clsx\";\nimport React, { forwardRef, SelectHTMLAttributes } from \"react\";\nimport { type ValuePair, getValuePair } from \"../..\";\nimport { ArrowVerticalAnimated } from \"../icon\";\nimport { InputGroup, type InputGroupProps } from \"../input-group\";\n\nexport interface NativeSelectProps extends Omit<InputGroupProps, \"children\">, SelectHTMLAttributes<HTMLSelectElement> {\n /**\n * Merk som ugyldig uten å sende inn en errorLabel.\n * NB! Brukes kun i tilfeller der valideringsfeil dukker opp andre steder, for eksempel i en FieldGroup.\n */\n invalid?: boolean;\n /**\n * Setter inn et placeholderelement som vises når ingenting er valgt i nedtrekkslisten.\n * @default \"Velg\"\n */\n placeholder?: string;\n items: Array<string | ValuePair>;\n selectClassName?: string;\n width?: string;\n}\n\nexport const NativeSelect = forwardRef<HTMLSelectElement, NativeSelectProps>((props, ref) => {\n const {\n label,\n className,\n density,\n errorLabel,\n helpLabel,\n inline,\n invalid,\n items,\n labelProps,\n placeholder = \"Velg\",\n selectClassName,\n supportLabelProps,\n tooltipProps,\n value,\n width,\n ...rest\n } = props;\n\n const inputGroupProps = {\n label,\n density,\n errorLabel,\n helpLabel,\n labelProps,\n inline,\n supportLabelProps,\n tooltipProps,\n };\n\n return (\n <InputGroup\n {...inputGroupProps}\n data-testid=\"jkl-select\"\n className={clsx(\"jkl-select\", className, {\n \"jkl-select--inline\": inline,\n \"jkl-select--invalid\": !!errorLabel || invalid,\n })}\n render={(inputProps) => (\n <div className=\"jkl-select__outer-wrapper\" style={{ width }}>\n <select\n ref={ref}\n className={clsx(\"jkl-select__button\", selectClassName, {\n \"jkl-select__button--active-value\": !!value,\n })}\n defaultValue={value ? undefined : \"\"}\n value={value}\n {...inputProps}\n {...rest}\n >\n {placeholder && !value && (\n <option disabled value=\"\">\n {placeholder}\n </option>\n )}\n {items.map(getValuePair).map((item) => (\n <option\n data-testid=\"jkl-select__option\"\n className=\"jkl-select__option\"\n key={item.value}\n value={item.value}\n >\n {item.label}\n </option>\n ))}\n </select>\n <ArrowVerticalAnimated variant=\"medium\" pointingDown className=\"jkl-select__arrow\" />\n </div>\n )}\n />\n );\n});\n\nNativeSelect.displayName = \"NativeSelect\";\n","import clsx from \"clsx\";\nimport React, {\n forwardRef,\n useCallback,\n useState,\n type MouseEventHandler,\n type ChangeEventHandler,\n type FC,\n} from \"react\";\nimport { type Density } from \"../..\";\nimport { useId } from \"../../hooks\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"../icon\";\nimport { IconButton } from \"../icon-button\";\nimport { NativeSelect } from \"../select\";\nimport { TextInput } from \"../text-input\";\nimport { useTableContext } from \"./tableContext\";\n\nexport interface TablePaginationProps {\n className?: string;\n id?: string;\n density?: Density;\n /**\n * @default 0\n */\n activePage?: number;\n /**\n * Null eller negativt tall tolkes som \"vis alle\".\n */\n rowsPerPage: number;\n rowsPerPageItems: Array<number | { label: string; value: number }>;\n totalNumberOfRows: number;\n /**\n * Viser et valgfritt inputfelt for å hoppe raskt til en spesifik side.\n * Du kan også sende inn en custom label hvis du ønsker det, ellers bruke\n * true for default label\n * @default false\n */\n withGoToPage?: boolean | { gotoLabel: string };\n onChange: (e: React.SyntheticEvent, toPage: number, fromPage: number) => void;\n onChangeRowsPerPage: ChangeEventHandler<HTMLSelectElement>;\n /**\n * Dersom du ønsker å ha custom labels kan du sende inn disse. \"rowsPerPage\"\n * vises alltid på skjerm mens \"next\" og \"previous\" brukes som hint til\n * skjermlesere for ikon-knappene til Neste/Forrige side\n * @default { rowsPerPage: \"Rader per side\", previous: \"Forrige\", next: \"Neste\" }\n */\n labels?: {\n rowsPerPage: string;\n previous: string;\n next: string;\n };\n}\n\nfunction clamp(min: number, num: number, max: number): number {\n if (num < min) {\n return min;\n } else if (num > max) {\n return max;\n }\n return num;\n}\n\nexport const TablePagination = forwardRef<HTMLDivElement, TablePaginationProps>((props, ref) => {\n const {\n activePage = 0,\n totalNumberOfRows,\n rowsPerPage,\n rowsPerPageItems,\n className,\n density,\n id: idProp,\n withGoToPage = false,\n onChange,\n onChangeRowsPerPage,\n labels = {\n rowsPerPage: \"Rader per side\",\n previous: \"Forrige\",\n next: \"Neste\",\n },\n ...rest\n } = props;\n\n const id = useId(idProp || \"jkl-table-pagination\", { generateSuffix: !idProp });\n const { density: contextDensity } = useTableContext();\n\n const showAll = rowsPerPage <= 0;\n const numberOfPages = showAll ? 1 : Math.ceil(totalNumberOfRows / rowsPerPage);\n\n const [currentPage, setCurrentPage] = useState(clamp(0, activePage, numberOfPages - 1));\n\n const onPageClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n (e) => {\n const toPage = Number.parseInt(e.currentTarget.dataset[\"number\"] as string);\n onChange(e, toPage, currentPage);\n setCurrentPage(toPage);\n setPagePickerValue(String(toPage + 1));\n },\n [onChange, setCurrentPage, currentPage],\n );\n\n const [pagePickerValue, setPagePickerValue] = useState(String(currentPage + 1));\n const onPageChange: ChangeEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n setPagePickerValue(e.target.value);\n try {\n const toPage = Number.parseInt(e.target.value) - 1;\n if (Number.isNaN(toPage)) {\n return;\n }\n\n if (toPage >= 0 && toPage < numberOfPages) {\n onChange(e, toPage, currentPage);\n setCurrentPage(toPage);\n }\n } catch {\n return;\n }\n },\n [onChange, setPagePickerValue, setCurrentPage, currentPage, numberOfPages],\n );\n\n const onPrevious: MouseEventHandler<HTMLButtonElement> = useCallback(\n (e) => {\n if (currentPage === 0) {\n // TODO: skal dette være en no-op i stedet?\n onChange(e, currentPage, currentPage);\n return;\n }\n const toPage = currentPage - 1;\n onChange(e, toPage, currentPage);\n setCurrentPage(toPage);\n setPagePickerValue(String(toPage + 1));\n },\n [onChange, setCurrentPage, currentPage],\n );\n\n const onNext: MouseEventHandler<HTMLButtonElement> = useCallback(\n (e) => {\n if (currentPage === numberOfPages - 1) {\n // TODO: skal dette være en no-op i stedet?\n onChange(e, currentPage, currentPage);\n return;\n }\n const toPage = currentPage + 1;\n onChange(e, toPage, currentPage);\n setCurrentPage(toPage);\n setPagePickerValue(String(toPage + 1));\n },\n [onChange, setCurrentPage, numberOfPages, currentPage],\n );\n\n return (\n <div\n className={clsx(\"jkl-table-pagination\", className)}\n {...rest}\n id={id}\n data-density={density || contextDensity}\n ref={ref}\n >\n <div className=\"jkl-table-pagination__left\">\n <div className=\"jkl-table-pagination__picker jkl-table-pagination__picker--rows\">\n <span className=\"jkl-table-pagination__picker-label\" aria-hidden=\"true\">\n {labels.rowsPerPage}:\n </span>\n <NativeSelect\n className=\"jkl-table-pagination__picker-input\"\n label={labels.rowsPerPage}\n labelProps={{ srOnly: true }}\n name={`${id}-rows-per-page`}\n items={rowsPerPageItems.map((i) =>\n typeof i === \"number\" ? String(i) : { label: i.label, value: String(i.value) },\n )}\n value={String(rowsPerPage)}\n onChange={onChangeRowsPerPage}\n width=\"min(8rem, 100%)\"\n inline\n />\n </div>\n </div>\n <div className=\"jkl-table-pagination__right\">\n {numberOfPages !== 1 && (\n <nav className=\"jkl-table-pagination__nav\">\n {withGoToPage && (\n <div className=\"jkl-table-pagination__picker jkl-table-pagination__picker--page\">\n <span className=\"jkl-table-pagination__picker-label\" aria-hidden=\"true\">\n {typeof withGoToPage === \"object\" ? withGoToPage.gotoLabel : \"Gå til side\"}:\n </span>\n {/* onChange først ved enter/submit */}\n <TextInput\n className=\"jkl-table-pagination__picker-input\"\n label={typeof withGoToPage === \"object\" ? withGoToPage.gotoLabel : \"Gå til side\"}\n labelProps={{ srOnly: true }}\n name={`${id}-go-to-page`}\n value={pagePickerValue}\n width=\"min(4rem, 100%)\"\n onChange={onPageChange}\n aria-invalid={\n pagePickerValue && pagePickerValue !== String(currentPage + 1)\n ? \"true\"\n : undefined\n }\n />\n </div>\n )}\n <ul>\n <li>\n <IconButton\n className=\"jkl-table-pagination__previous\"\n title={labels.previous}\n onClick={onPrevious}\n >\n <ChevronLeftIcon />\n </IconButton>\n </li>\n <PaginationPages\n id={id}\n activePage={activePage}\n numberOfPages={numberOfPages}\n onPageClick={onPageClick}\n />\n <li>\n <IconButton className=\"jkl-table-pagination__next\" title={labels.next} onClick={onNext}>\n <ChevronRightIcon />\n </IconButton>\n </li>\n </ul>\n </nav>\n )}\n </div>\n </div>\n );\n});\n\nconst PaginationPages: FC<{\n id: string;\n activePage: number;\n numberOfPages: number;\n onPageClick: MouseEventHandler;\n}> = ({ id, activePage, numberOfPages, onPageClick }) => {\n if (numberOfPages <= 7) {\n return (\n <>\n {Array.from({ length: numberOfPages }).map((_, i) => (\n <li key={`${id}-page-${i}`}>\n <button\n className={clsx(\"jkl-table-pagination__page\", {\n \"jkl-table-pagination__page--active\": activePage === i,\n })}\n type=\"button\"\n data-number={i}\n onClick={onPageClick}\n >\n {i + 1}\n </button>\n </li>\n ))}\n </>\n );\n }\n\n const showStartEllipsis = activePage > 3 && numberOfPages > 7;\n const showEndEllipsis = activePage < numberOfPages - 4 && numberOfPages > 7;\n\n const startEllipsis = Math.min(Math.max(activePage - 2, 1), numberOfPages - 6);\n const centerPageNumberStart = Math.min(startEllipsis + 1, numberOfPages - 5);\n const centerPageNumber = Math.min(centerPageNumberStart + 1, numberOfPages - 4);\n const centerPageNumberEnd = Math.min(centerPageNumberStart + 2, numberOfPages - 3);\n const endEllipsis = Math.min(centerPageNumberStart + 3, numberOfPages - 2);\n\n return (\n <>\n <li>\n <PaginationPageButton isActive={activePage === 0} number={0} onClick={onPageClick} />\n </li>\n <li>\n {showStartEllipsis ? (\n <span className=\"jkl-table-pagination__ellipsis\" aria-hidden>\n {\"...\"}\n </span>\n ) : (\n <PaginationPageButton\n isActive={activePage === startEllipsis}\n number={startEllipsis}\n onClick={onPageClick}\n />\n )}\n </li>\n <li>\n <PaginationPageButton\n isActive={activePage === centerPageNumberStart}\n number={centerPageNumberStart}\n onClick={onPageClick}\n />\n </li>\n <li>\n <PaginationPageButton\n isActive={activePage === centerPageNumber}\n number={centerPageNumber}\n onClick={onPageClick}\n />\n </li>\n <li>\n <PaginationPageButton\n isActive={activePage === centerPageNumberEnd}\n number={centerPageNumberEnd}\n onClick={onPageClick}\n />\n </li>\n <li>\n {showEndEllipsis ? (\n <span className=\"jkl-table-pagination__ellipsis\" aria-hidden>\n {\"...\"}\n </span>\n ) : (\n <PaginationPageButton\n isActive={activePage === endEllipsis}\n number={endEllipsis}\n onClick={onPageClick}\n />\n )}\n </li>\n <li>\n <PaginationPageButton\n isActive={activePage === numberOfPages - 1}\n number={numberOfPages - 1}\n onClick={onPageClick}\n />\n </li>\n </>\n );\n};\n\nconst PaginationPageButton: FC<{\n isActive: boolean;\n number: number;\n onClick: MouseEventHandler;\n}> = ({ isActive, number, onClick, ...rest }) => (\n <button\n className={clsx(\"jkl-table-pagination__page\", {\n \"jkl-table-pagination__page--active\": isActive,\n })}\n type=\"button\"\n data-number={number}\n onClick={onClick}\n {...rest}\n >\n {number + 1}\n </button>\n);\n\nTablePagination.displayName = \"TablePagination\";\n","import clsx from \"clsx\";\nimport React, { forwardRef } from \"react\";\nimport { Expander } from \"../expander\";\nimport type { TableCellProps } from \"./TableCell\";\nimport { TableCell } from \"./TableCell\";\nimport { useTableContext } from \"./tableContext\";\n\nexport interface ExpandableTableRowControllerProps extends TableCellProps {\n /** Settes automatisk av ExpandableTableRow */\n isOpen?: boolean;\n /** Settes automatisk av ExpandableTableRow */\n onClick?: () => void;\n}\n\nconst ExpandableTableRowController = forwardRef<HTMLTableCellElement, ExpandableTableRowControllerProps>(\n ({ isOpen, onClick, children, className, id, \"aria-controls\": ariaControls, ...rest }, ref) => {\n if (isOpen === undefined || typeof onClick !== \"function\") {\n throw new Error(\"ExpandableTableRowController must have ExpandableTableRow as parent\");\n }\n\n const { density, collapseToList } = useTableContext();\n\n const dataTh = (rest as Record<string, string>)[\"data-th\"];\n\n // pick text from data-th if possible, but only if it's a list\n const showTextFromTh: string | undefined = collapseToList ? dataTh : undefined;\n\n return (\n <TableCell\n className={clsx(\n \"jkl-table-cell--expand\",\n { [\"jkl-table-cell--expand-without-text\"]: !children },\n className,\n )}\n {...rest}\n ref={ref}\n >\n <Expander\n className={clsx(\"jkl-table-row-expand-button\", {\n [\"jkl-table-row-expand-button--expanded\"]: isOpen,\n })}\n id={id}\n density={density}\n isExpanded={isOpen}\n aria-controls={ariaControls}\n aria-label={children ? undefined : dataTh || \"Ekspander rad\"}\n onClick={(e) => {\n e.stopPropagation();\n onClick();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.stopPropagation();\n e.preventDefault();\n onClick();\n }\n }}\n >\n {/* show children. or try to use data-th if children is undefined */}\n {children ?? showTextFromTh}\n </Expander>\n </TableCell>\n );\n },\n);\n\nExpandableTableRowController.displayName = \"ExpandableTableRowController\";\n\nexport { ExpandableTableRowController };\n","import clsx from \"clsx\";\nimport React, { forwardRef, useEffect, useState } from \"react\";\nimport { useAnimatedHeight, useId } from \"../../hooks\";\nimport { ExpandableTableRowController, ExpandableTableRowControllerProps } from \"./ExpandableTableRowController\";\nimport type { TableRowProps } from \"./TableRow\";\nimport { TableRow } from \"./TableRow\";\n\nexport interface ExpandableTableRowProps extends TableRowProps {\n expandedChildren: React.ReactNode;\n /**\n * Setter bredden på raden som blir åpnet\n * @default 100\n */\n colSpan?: number;\n /**\n * Om du ønsker en controlled komponent. Hvis du ikke setter denne vil komponenten håndtere state selv.\n */\n isOpen?: boolean;\n onToggle?: (isOpen: boolean) => void;\n}\n\nconst ExpandableTableRow = forwardRef<HTMLTableRowElement, ExpandableTableRowProps>((props, ref) => {\n const {\n className,\n clickable,\n children,\n expandedChildren,\n onToggle,\n colSpan = 100,\n isOpen: isOpenProp,\n ...rest\n } = props;\n\n const [isOpen, setIsOpen] = useState(isOpenProp ?? false);\n useEffect(() => {\n if (typeof isOpenProp === \"undefined\") {\n return;\n }\n setIsOpen(isOpenProp);\n }, [isOpenProp]);\n\n const [animationRef] = useAnimatedHeight<HTMLDivElement>(isOpen, { timing: \"expressive\" });\n\n const toggleOpen = () => {\n const newIsOpen = !isOpen;\n\n if (onToggle) {\n onToggle(newIsOpen);\n }\n\n setIsOpen(newIsOpen);\n };\n\n const tableRowClassName = clsx(\"jkl-table-row--expandable\", className, {\n [\"jkl-table-row--expanded\"]: isOpen,\n [\"jkl-expandable-table-row--clickable-external\"]: clickable,\n });\n const childWrapperClassName = clsx(\"jkl-expandable-table-row__expanded-row\", {\n [\"jkl-expandable-table-row__expanded-row--expanded\"]: isOpen,\n });\n\n const tableRowId = useId(\"jkl-expandable-table-row\");\n const expandableTableRowControllerId = useId(\"jkl-expandable-table-row-controller\");\n\n return (\n <>\n <TableRow\n className={tableRowClassName}\n clickable={\n clickable ?? {\n onClick: () => toggleOpen(),\n }\n }\n {...rest}\n ref={ref}\n >\n {React.Children.map(children, (child) => {\n if (\n React.isValidElement<ExpandableTableRowControllerProps>(child) &&\n child.type == ExpandableTableRowController\n ) {\n return React.cloneElement<ExpandableTableRowControllerProps>(child, {\n isOpen,\n onClick: () => toggleOpen(),\n \"aria-controls\": tableRowId,\n id: expandableTableRowControllerId,\n });\n } else {\n return child;\n }\n })}\n </TableRow>\n {/*\n Use a table row with a single as wide as possible cell to contain content. This allows\n using useAnimatedHeight to animate the row height.\n */}\n <tr aria-hidden={!isOpen}>\n <td colSpan={colSpan}>\n <div\n ref={animationRef}\n className={childWrapperClassName}\n id={tableRowId}\n aria-labelledby={expandableTableRowControllerId}\n hidden={!isOpen}\n role=\"group\"\n >\n {expandedChildren}\n </div>\n </td>\n </tr>\n </>\n );\n});\n\nExpandableTableRow.displayName = \"ExpandableTableRow\";\n\nexport { ExpandableTableRow };\n"],"names":["Expander","React","forwardRef","as","className","children","density","expandDirection","isExpanded","hideLabel","rest","ref","ContentWrapper","ScreenReaderOnly","Fragment","pointingDown","El","type","jsxs","clsx","jsx","ArrowVerticalAnimated","bold","displayName","MenuComponent","props","forwardedRef","initialPlacement","openOnHover","keepOpenOnClickOutside","triggerElement","isOpen","isOpenOverride","onToggle","triggerProps","MenuId","useId","tree","useFloatingTree","nodeId","useFloatingNodeId","parentId","useFloatingParentNodeId","isNested","listItemsRef","useRef","activeIndex","setActiveIndex","useState","allowHover","isOpenDefault","setIsOpen","useMenuWideEvents","useEffect","x","y","refs","placement","strategy","context","useFloating","open","onOpenChange","middleware","offset","flip","fallbackAxisSideDirection","crossAxis","shift","padding","whileElementsMounted","autoUpdate","getReferenceProps","getFloatingProps","getItemProps","useInteractions","useHover","enabled","delay","handleClose","safePolygon","requireIntent","blockPointerEvents","useClick","event","useDismiss","outsidePress","useRole","role","useListNavigation","listRef","nested","onNavigate","referenceRef","useMergeRefs","setReference","theme","getThemeAndDensity","reference","current","FloatingNode","id","isValidElement","ReactIs","isForwardRef","cloneElement","onClick","stopPropagation","AnimatePresence","FloatingPortal","FloatingFocusManager","modal","initialFocus","returnFocus","motion","div","initial","opacity","animate","exit","transition","ease","duration","setFloating","style","position","top","left","Children","map","child","index","tabIndex","node","_b","_a","call","defaultPrevented","events","emit","onKeyDown","currentTarget","key","onMouseEnter","Menu","FloatingTree","noop","Select","forwardedSelectRef","name","items","value","label","labelProps","onChange","onBlur","onFocus","helpLabel","errorLabel","invalid","searchable","inline","defaultPrompt","width","maxShownOptions","tooltipProps","listId","generateSuffix","labelId","buttonId","searchInputId","dropdownIsShown","setShown","toggleListVisibility","useCallback","previousValue","isSearchable","showSearchInputField","searchValue","setSearchValue","searchFn","item","toLowerCase","includes","visibleItems","useMemo","getValuePair","visible","valueIsInItems","some","selectedValue","setSelectedValue","hasSelectedValue","selectedValueLabel","find","selectRef","unifiedSelectRef","instance","usePreviousValue","selectOption","nextValue","previousSelectedValue","target","dispatchEvent","Event","bubbles","componentRootElementRef","focusInsideRef","searchFieldRef","buttonRef","handleFocusPlacement","listElement","focusSelected","focus","dropdownRef","useAnimatedHeight","onFirstVisible","onTransitionEnd","close","handleBlur","e","componentRootElement","contains","relatedTarget","handleFocus","handleMouseOver","preventScroll","select","searchField","button","addEventListener","ev","preventDefault","removeEventListener","handleOnKeyDown","handleSearchOnKeyDown","shiftKey","handleOptionOnKeyDown","firstVisible","querySelector","handleEscape","window","hidden","InputGroup","srOnly","htmlFor","render","inputProps","placeholder","toLower","onMouseDown","every","i","onMouseOver","description","variant","NativeSelect","selectClassName","supportLabelProps","inputGroupProps","defaultValue","disabled","TablePagination","activePage","totalNumberOfRows","rowsPerPage","rowsPerPageItems","idProp","withGoToPage","onChangeRowsPerPage","labels","previous","next","contextDensity","useTableContext","numberOfPages","Math","ceil","currentPage","setCurrentPage","min","num","max","clamp","onPageClick","toPage","Number","parseInt","dataset","number","setPagePickerValue","String","pagePickerValue","onPageChange","isNaN","onPrevious","onNext","gotoLabel","TextInput","IconButton","title","ChevronLeftIcon","PaginationPages","ChevronRightIcon","Array","from","length","_","showStartEllipsis","showEndEllipsis","startEllipsis","centerPageNumberStart","centerPageNumber","centerPageNumberEnd","endEllipsis","PaginationPageButton","isActive","ExpandableTableRowController","ariaControls","Error","collapseToList","dataTh","showTextFromTh","TableCell","ExpandableTableRow","clickable","expandedChildren","colSpan","isOpenProp","animationRef","timing","toggleOpen","newIsOpen","tableRowClassName","childWrapperClassName","tableRowId","expandableTableRowControllerId","TableRow"],"mappings":"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"}