@fremtind/jokul 0.71.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (588) hide show
  1. package/README.md +5 -37
  2. package/build/build-stats.html +1 -1
  3. package/build/cjs/components/autosuggest/BaseAutosuggest.cjs +1 -1
  4. package/build/cjs/components/autosuggest/BaseAutosuggest.cjs.map +1 -1
  5. package/build/cjs/components/autosuggest/Menu.cjs +1 -1
  6. package/build/cjs/components/autosuggest/Menu.cjs.map +1 -1
  7. package/build/cjs/components/button/Button.cjs +1 -1
  8. package/build/cjs/components/button/Button.cjs.map +1 -1
  9. package/build/cjs/components/card/index.cjs +1 -1
  10. package/build/cjs/components/card/index.d.cts +1 -4
  11. package/build/cjs/components/card/types.cjs +1 -1
  12. package/build/cjs/components/card/types.cjs.map +1 -1
  13. package/build/cjs/components/card/types.d.cts +0 -51
  14. package/build/cjs/components/checkbox-panel/CheckboxPanel.cjs +1 -1
  15. package/build/cjs/components/checkbox-panel/CheckboxPanel.cjs.map +1 -1
  16. package/build/cjs/components/combobox/Combobox.cjs +1 -1
  17. package/build/cjs/components/combobox/Combobox.cjs.map +1 -1
  18. package/build/cjs/components/combobox/stories/Combobox.stories.cjs +1 -1
  19. package/build/cjs/components/combobox/stories/Combobox.stories.cjs.map +1 -1
  20. package/build/cjs/components/combobox/stories/Combobox.stories.d.cts +1 -0
  21. package/build/cjs/components/cookie-consent/CookieConsent.cjs +1 -1
  22. package/build/cjs/components/cookie-consent/CookieConsent.cjs.map +1 -1
  23. package/build/cjs/components/datepicker/DatePicker.cjs +1 -1
  24. package/build/cjs/components/datepicker/DatePicker.cjs.map +1 -1
  25. package/build/cjs/components/datepicker/internal/Calendar.cjs +1 -1
  26. package/build/cjs/components/datepicker/internal/Calendar.cjs.map +1 -1
  27. package/build/cjs/components/datepicker/internal/utils.cjs +1 -1
  28. package/build/cjs/components/datepicker/internal/utils.cjs.map +1 -1
  29. package/build/cjs/components/datepicker/stories/Datepicker.stories.cjs +1 -1
  30. package/build/cjs/components/datepicker/stories/Datepicker.stories.cjs.map +1 -1
  31. package/build/cjs/components/datepicker/stories/Datepicker.stories.d.cts +13 -0
  32. package/build/cjs/components/description-list/stories/DescriptionList.stories.cjs +1 -1
  33. package/build/cjs/components/description-list/stories/DescriptionList.stories.cjs.map +1 -1
  34. package/build/cjs/components/expander/ExpandablePanel.cjs +1 -1
  35. package/build/cjs/components/expander/ExpandablePanel.cjs.map +1 -1
  36. package/build/cjs/components/expander/ExpandablePanelContent.cjs +1 -1
  37. package/build/cjs/components/expander/ExpandablePanelContent.cjs.map +1 -1
  38. package/build/cjs/components/expander/Expander.cjs +1 -1
  39. package/build/cjs/components/expander/Expander.cjs.map +1 -1
  40. package/build/cjs/components/expander/index.cjs +1 -1
  41. package/build/cjs/components/expander/index.d.cts +0 -1
  42. package/build/cjs/components/expander/stories/{ExpanderPanel.stories.cjs → ExpandablePanel.stories.cjs} +1 -1
  43. package/build/cjs/components/expander/stories/ExpandablePanel.stories.cjs.map +1 -0
  44. package/build/cjs/components/feedback/followup/Followup.cjs +1 -1
  45. package/build/cjs/components/feedback/followup/Followup.cjs.map +1 -1
  46. package/build/cjs/components/feedback/followup/useFollowup.cjs +1 -1
  47. package/build/cjs/components/feedback/followup/useFollowup.cjs.map +1 -1
  48. package/build/cjs/components/feedback/main-question/MainQuestion.cjs +1 -1
  49. package/build/cjs/components/feedback/main-question/MainQuestion.cjs.map +1 -1
  50. package/build/cjs/components/feedback/main-question/useMainQuestion.cjs +1 -1
  51. package/build/cjs/components/feedback/main-question/useMainQuestion.cjs.map +1 -1
  52. package/build/cjs/components/feedback/questions/AddonQuestion.cjs +1 -1
  53. package/build/cjs/components/feedback/questions/AddonQuestion.cjs.map +1 -1
  54. package/build/cjs/components/feedback/questions/CheckboxQuestion.cjs +1 -1
  55. package/build/cjs/components/feedback/questions/CheckboxQuestion.cjs.map +1 -1
  56. package/build/cjs/components/feedback/questions/ContactQuestion.cjs +1 -1
  57. package/build/cjs/components/feedback/questions/ContactQuestion.cjs.map +1 -1
  58. package/build/cjs/components/feedback/questions/RadioQuestion.cjs +1 -1
  59. package/build/cjs/components/feedback/questions/RadioQuestion.cjs.map +1 -1
  60. package/build/cjs/components/feedback/questions/SmileyQuestion.cjs +1 -1
  61. package/build/cjs/components/feedback/questions/SmileyQuestion.cjs.map +1 -1
  62. package/build/cjs/components/feedback/questions/TextQuestion.cjs +1 -1
  63. package/build/cjs/components/feedback/questions/TextQuestion.cjs.map +1 -1
  64. package/build/cjs/components/file/File.cjs.map +1 -1
  65. package/build/cjs/components/file/stories/File.stories.cjs.map +1 -1
  66. package/build/cjs/components/file/stories/File.stories.d.cts +1 -1
  67. package/build/cjs/components/file-input/FileInput.cjs.map +1 -1
  68. package/build/cjs/components/file-input/index.d.cts +1 -1
  69. package/build/cjs/components/file-input/internal/Dropzone.cjs.map +1 -1
  70. package/build/cjs/components/file-input/internal/Input.cjs.map +1 -1
  71. package/build/cjs/components/file-input/internal/fileInputContext.cjs.map +1 -1
  72. package/build/cjs/components/file-input/internal/validateFileInputFiles.cjs +1 -1
  73. package/build/cjs/components/file-input/internal/validateFileInputFiles.cjs.map +1 -1
  74. package/build/cjs/components/file-input/stories/FileInput.stories.cjs.map +1 -1
  75. package/build/cjs/components/icon/stories/Icons.stories.cjs +1 -1
  76. package/build/cjs/components/image/useImageLoadingStatus.cjs +1 -1
  77. package/build/cjs/components/image/useImageLoadingStatus.cjs.map +1 -1
  78. package/build/cjs/components/input-group/InputGroup.cjs +1 -1
  79. package/build/cjs/components/input-group/InputGroup.cjs.map +1 -1
  80. package/build/cjs/components/input-group/stories/FieldGroup.stories.cjs +1 -1
  81. package/build/cjs/components/link/stories/Link.stories.cjs +1 -1
  82. package/build/cjs/components/link/stories/Link.stories.cjs.map +1 -1
  83. package/build/cjs/components/menu/Menu.cjs +1 -1
  84. package/build/cjs/components/menu/Menu.cjs.map +1 -1
  85. package/build/cjs/components/menu/MenuItemCheckbox.cjs +1 -1
  86. package/build/cjs/components/menu/MenuItemCheckbox.cjs.map +1 -1
  87. package/build/cjs/components/message/Message.cjs +1 -1
  88. package/build/cjs/components/message/Message.cjs.map +1 -1
  89. package/build/cjs/components/modal/stories/ModalCloseButton.stories.d.cts +1 -1
  90. package/build/cjs/components/modal/stories/ModalOverlay.stories.cjs +1 -1
  91. package/build/cjs/components/modal/stories/ModalOverlay.stories.cjs.map +1 -1
  92. package/build/cjs/components/popover/Popover.cjs +1 -1
  93. package/build/cjs/components/popover/Popover.cjs.map +1 -1
  94. package/build/cjs/components/radio-panel/RadioPanel.cjs +1 -1
  95. package/build/cjs/components/radio-panel/RadioPanel.cjs.map +1 -1
  96. package/build/cjs/components/screen-reader-only/ScreenReaderOnly.cjs.map +1 -0
  97. package/build/cjs/components/screen-reader-only/ScreenReaderOnly.d.cts +3 -0
  98. package/build/cjs/components/screen-reader-only/index.cjs +2 -0
  99. package/build/cjs/components/screen-reader-only/index.d.cts +2 -0
  100. package/build/cjs/components/screen-reader-only/types.d.cts +4 -0
  101. package/build/cjs/components/select/Select.cjs +1 -1
  102. package/build/cjs/components/select/Select.cjs.map +1 -1
  103. package/build/cjs/components/select/select-utils.cjs +1 -1
  104. package/build/cjs/components/select/select-utils.cjs.map +1 -1
  105. package/build/cjs/components/system-message/SystemMessage.cjs +1 -1
  106. package/build/cjs/components/system-message/SystemMessage.cjs.map +1 -1
  107. package/build/cjs/components/table/TableHeader.cjs +1 -1
  108. package/build/cjs/components/table/TableHeader.cjs.map +1 -1
  109. package/build/cjs/components/table/TableRow.cjs +1 -1
  110. package/build/cjs/components/table/TableRow.cjs.map +1 -1
  111. package/build/cjs/components/table/stories/data.cjs +2 -0
  112. package/build/cjs/components/table/stories/data.cjs.map +1 -0
  113. package/build/cjs/components/table/stories/data.d.cts +8 -0
  114. package/build/cjs/components/table/stories/table.stories.cjs +1 -1
  115. package/build/cjs/components/table/stories/table.stories.cjs.map +1 -1
  116. package/build/cjs/components/table/stories/table.stories.d.cts +10 -1
  117. package/build/cjs/components/table/stories/tableCollapsing.stories.cjs +2 -0
  118. package/build/cjs/components/table/stories/tableCollapsing.stories.cjs.map +1 -0
  119. package/build/cjs/components/table/stories/tableCollapsing.stories.d.cts +16 -0
  120. package/build/cjs/components/table/stories/tableComplex.stories.cjs +2 -0
  121. package/build/cjs/components/table/stories/tableComplex.stories.cjs.map +1 -0
  122. package/build/cjs/components/table/stories/tableComplex.stories.d.cts +21 -0
  123. package/build/cjs/components/table/stories/tableFiltering.stories.cjs +2 -0
  124. package/build/cjs/components/table/stories/tableFiltering.stories.cjs.map +1 -0
  125. package/build/cjs/components/table/stories/tableFiltering.stories.d.cts +21 -0
  126. package/build/cjs/components/table/stories/tablePagination.stories.cjs +2 -0
  127. package/build/cjs/components/table/stories/tablePagination.stories.cjs.map +1 -0
  128. package/build/cjs/components/{accordion/stories/Accordion.stories.d.cts → table/stories/tablePagination.stories.d.cts} +2 -2
  129. package/build/cjs/components/tabs/NavTab.cjs +1 -1
  130. package/build/cjs/components/tabs/NavTab.cjs.map +1 -1
  131. package/build/cjs/components/tabs/NavTabs.cjs +1 -1
  132. package/build/cjs/components/tabs/NavTabs.cjs.map +1 -1
  133. package/build/cjs/components/tabs/TabList.cjs +1 -1
  134. package/build/cjs/components/tabs/TabList.cjs.map +1 -1
  135. package/build/cjs/components/text-area/BaseTextArea.cjs +1 -1
  136. package/build/cjs/components/text-area/BaseTextArea.cjs.map +1 -1
  137. package/build/cjs/components/toast/Toast.cjs +1 -1
  138. package/build/cjs/components/toast/Toast.cjs.map +1 -1
  139. package/build/cjs/components/toast/toastContext.cjs +1 -1
  140. package/build/cjs/components/toast/toastContext.cjs.map +1 -1
  141. package/build/cjs/components/toggle-switch/ToggleSwitch.cjs +1 -1
  142. package/build/cjs/components/toggle-switch/ToggleSwitch.cjs.map +1 -1
  143. package/build/cjs/components/toggle-switch/usePillStyles.cjs +1 -1
  144. package/build/cjs/components/toggle-switch/usePillStyles.cjs.map +1 -1
  145. package/build/cjs/components/tooltip/PopupTip.cjs +1 -1
  146. package/build/cjs/components/tooltip/PopupTip.cjs.map +1 -1
  147. package/build/cjs/components/tooltip/Tooltip.cjs +1 -1
  148. package/build/cjs/components/tooltip/Tooltip.cjs.map +1 -1
  149. package/build/cjs/components/tooltip/TooltipTrigger.cjs +1 -1
  150. package/build/cjs/components/tooltip/TooltipTrigger.cjs.map +1 -1
  151. package/build/cjs/hooks/useAnimatedHeight/useAnimatedHeight.cjs +1 -1
  152. package/build/cjs/hooks/useAnimatedHeight/useAnimatedHeight.cjs.map +1 -1
  153. package/build/cjs/hooks/useAnimatedHeight/useAnimatedHeightBetween.cjs +1 -1
  154. package/build/cjs/hooks/useAnimatedHeight/useAnimatedHeightBetween.cjs.map +1 -1
  155. package/build/cjs/hooks/useAnimatedHeight/useAutoAnimateHeight.cjs +1 -1
  156. package/build/cjs/hooks/useAnimatedHeight/useAutoAnimateHeight.cjs.map +1 -1
  157. package/build/cjs/hooks/useAriaLiveRegion/useAriaLiveRegion.cjs +1 -1
  158. package/build/cjs/hooks/useAriaLiveRegion/useAriaLiveRegion.cjs.map +1 -1
  159. package/build/cjs/hooks/useAriaLiveRegion/useAriaLiveRegion.d.cts +1 -1
  160. package/build/cjs/hooks/useClickOutside/useClickOutside.cjs +1 -1
  161. package/build/cjs/hooks/useClickOutside/useClickOutside.cjs.map +1 -1
  162. package/build/cjs/hooks/useElementDimensions/useElementDimensions.cjs +1 -1
  163. package/build/cjs/hooks/useElementDimensions/useElementDimensions.cjs.map +1 -1
  164. package/build/cjs/hooks/useFocusOutside/useFocusOutside.cjs +1 -1
  165. package/build/cjs/hooks/useFocusOutside/useFocusOutside.cjs.map +1 -1
  166. package/build/cjs/hooks/useIntersectionObserver/useIntersectionObserver.cjs +1 -1
  167. package/build/cjs/hooks/useIntersectionObserver/useIntersectionObserver.cjs.map +1 -1
  168. package/build/cjs/hooks/useKeyListener/useKeyListener.cjs +1 -1
  169. package/build/cjs/hooks/useKeyListener/useKeyListener.cjs.map +1 -1
  170. package/build/cjs/hooks/useScrollIntoView/useScrollIntoView.cjs +1 -1
  171. package/build/cjs/hooks/useScrollIntoView/useScrollIntoView.cjs.map +1 -1
  172. package/build/cjs/hooks/useSwipeGesture/useSwipeGesture.cjs +1 -1
  173. package/build/cjs/hooks/useSwipeGesture/useSwipeGesture.cjs.map +1 -1
  174. package/build/cjs/index.cjs +1 -1
  175. package/build/cjs/index.d.cts +0 -1
  176. package/build/cjs/utilities/formatters/date/formatDate.cjs +1 -1
  177. package/build/cjs/utilities/formatters/date/formatDate.cjs.map +1 -1
  178. package/build/cjs/utilities/formatters/fodselsnummer/formatFodselsnummer.cjs +1 -1
  179. package/build/cjs/utilities/formatters/fodselsnummer/formatFodselsnummer.cjs.map +1 -1
  180. package/build/cjs/utilities/formatters/kontonummer/formatKontonummer.cjs +1 -1
  181. package/build/cjs/utilities/formatters/kontonummer/formatKontonummer.cjs.map +1 -1
  182. package/build/cjs/utilities/formatters/kortnummer/formatKortnummer.cjs +1 -1
  183. package/build/cjs/utilities/formatters/kortnummer/formatKortnummer.cjs.map +1 -1
  184. package/build/cjs/utilities/formatters/organisasjonsnummer/formatOrganisasjonsnummer.cjs +1 -1
  185. package/build/cjs/utilities/formatters/organisasjonsnummer/formatOrganisasjonsnummer.cjs.map +1 -1
  186. package/build/cjs/utilities/formatters/telefonnummer/formatTelefonnummer.cjs +1 -1
  187. package/build/cjs/utilities/formatters/telefonnummer/formatTelefonnummer.cjs.map +1 -1
  188. package/build/cjs/utilities/formatters/util/registerWithMask.cjs +1 -1
  189. package/build/cjs/utilities/formatters/util/registerWithMask.cjs.map +1 -1
  190. package/build/cjs/utilities/formatters/valuta/formatValuta.cjs +1 -1
  191. package/build/cjs/utilities/formatters/valuta/formatValuta.cjs.map +1 -1
  192. package/build/cjs/utilities/tabListener.cjs +1 -1
  193. package/build/cjs/utilities/tabListener.cjs.map +1 -1
  194. package/build/cjs/utilities/validators/hasMinimumWords/hasMinimumWords.cjs +1 -1
  195. package/build/cjs/utilities/validators/hasMinimumWords/hasMinimumWords.cjs.map +1 -1
  196. package/build/es/components/autosuggest/BaseAutosuggest.js +2 -2
  197. package/build/es/components/autosuggest/BaseAutosuggest.js.map +1 -1
  198. package/build/es/components/autosuggest/Menu.js +1 -1
  199. package/build/es/components/autosuggest/Menu.js.map +1 -1
  200. package/build/es/components/button/Button.js +1 -1
  201. package/build/es/components/button/Button.js.map +1 -1
  202. package/build/es/components/card/index.d.ts +1 -4
  203. package/build/es/components/card/index.js +1 -1
  204. package/build/es/components/card/types.d.ts +0 -51
  205. package/build/es/components/card/types.js +1 -1
  206. package/build/es/components/card/types.js.map +1 -1
  207. package/build/es/components/checkbox-panel/CheckboxPanel.js +1 -1
  208. package/build/es/components/checkbox-panel/CheckboxPanel.js.map +1 -1
  209. package/build/es/components/combobox/Combobox.js +1 -1
  210. package/build/es/components/combobox/Combobox.js.map +1 -1
  211. package/build/es/components/combobox/stories/Combobox.stories.d.ts +1 -0
  212. package/build/es/components/combobox/stories/Combobox.stories.js +1 -1
  213. package/build/es/components/combobox/stories/Combobox.stories.js.map +1 -1
  214. package/build/es/components/cookie-consent/CookieConsent.js +1 -1
  215. package/build/es/components/cookie-consent/CookieConsent.js.map +1 -1
  216. package/build/es/components/datepicker/DatePicker.js +1 -1
  217. package/build/es/components/datepicker/DatePicker.js.map +1 -1
  218. package/build/es/components/datepicker/internal/Calendar.js +1 -1
  219. package/build/es/components/datepicker/internal/Calendar.js.map +1 -1
  220. package/build/es/components/datepicker/internal/utils.js +1 -1
  221. package/build/es/components/datepicker/internal/utils.js.map +1 -1
  222. package/build/es/components/datepicker/stories/Datepicker.stories.d.ts +13 -0
  223. package/build/es/components/datepicker/stories/Datepicker.stories.js +1 -1
  224. package/build/es/components/datepicker/stories/Datepicker.stories.js.map +1 -1
  225. package/build/es/components/description-list/stories/DescriptionList.stories.js +1 -1
  226. package/build/es/components/description-list/stories/DescriptionList.stories.js.map +1 -1
  227. package/build/es/components/expander/ExpandablePanel.js +1 -1
  228. package/build/es/components/expander/ExpandablePanel.js.map +1 -1
  229. package/build/es/components/expander/ExpandablePanelContent.js +1 -1
  230. package/build/es/components/expander/ExpandablePanelContent.js.map +1 -1
  231. package/build/es/components/expander/Expander.js +1 -1
  232. package/build/es/components/expander/Expander.js.map +1 -1
  233. package/build/es/components/expander/index.d.ts +0 -1
  234. package/build/es/components/expander/index.js +1 -1
  235. package/build/es/components/expander/stories/{ExpanderPanel.stories.js → ExpandablePanel.stories.js} +1 -1
  236. package/build/es/components/expander/stories/ExpandablePanel.stories.js.map +1 -0
  237. package/build/es/components/feedback/followup/Followup.js +1 -1
  238. package/build/es/components/feedback/followup/Followup.js.map +1 -1
  239. package/build/es/components/feedback/followup/useFollowup.js +1 -1
  240. package/build/es/components/feedback/followup/useFollowup.js.map +1 -1
  241. package/build/es/components/feedback/main-question/MainQuestion.js +1 -1
  242. package/build/es/components/feedback/main-question/MainQuestion.js.map +1 -1
  243. package/build/es/components/feedback/main-question/useMainQuestion.js +1 -1
  244. package/build/es/components/feedback/main-question/useMainQuestion.js.map +1 -1
  245. package/build/es/components/feedback/questions/AddonQuestion.js +1 -1
  246. package/build/es/components/feedback/questions/AddonQuestion.js.map +1 -1
  247. package/build/es/components/feedback/questions/CheckboxQuestion.js +1 -1
  248. package/build/es/components/feedback/questions/CheckboxQuestion.js.map +1 -1
  249. package/build/es/components/feedback/questions/ContactQuestion.js +1 -1
  250. package/build/es/components/feedback/questions/ContactQuestion.js.map +1 -1
  251. package/build/es/components/feedback/questions/RadioQuestion.js +1 -1
  252. package/build/es/components/feedback/questions/RadioQuestion.js.map +1 -1
  253. package/build/es/components/feedback/questions/SmileyQuestion.js +1 -1
  254. package/build/es/components/feedback/questions/SmileyQuestion.js.map +1 -1
  255. package/build/es/components/feedback/questions/TextQuestion.js +1 -1
  256. package/build/es/components/feedback/questions/TextQuestion.js.map +1 -1
  257. package/build/es/components/file/File.js.map +1 -1
  258. package/build/es/components/file/stories/File.stories.d.ts +1 -1
  259. package/build/es/components/file/stories/File.stories.js.map +1 -1
  260. package/build/es/components/file-input/FileInput.js.map +1 -1
  261. package/build/es/components/file-input/index.d.ts +1 -1
  262. package/build/es/components/file-input/internal/Dropzone.js.map +1 -1
  263. package/build/es/components/file-input/internal/Input.js.map +1 -1
  264. package/build/es/components/file-input/internal/fileInputContext.js.map +1 -1
  265. package/build/es/components/file-input/internal/validateFileInputFiles.js +1 -1
  266. package/build/es/components/file-input/internal/validateFileInputFiles.js.map +1 -1
  267. package/build/es/components/file-input/stories/FileInput.stories.js.map +1 -1
  268. package/build/es/components/icon/stories/Icons.stories.js +1 -1
  269. package/build/es/components/image/useImageLoadingStatus.js +1 -1
  270. package/build/es/components/image/useImageLoadingStatus.js.map +1 -1
  271. package/build/es/components/input-group/InputGroup.js +1 -1
  272. package/build/es/components/input-group/InputGroup.js.map +1 -1
  273. package/build/es/components/link/stories/Link.stories.js +1 -1
  274. package/build/es/components/link/stories/Link.stories.js.map +1 -1
  275. package/build/es/components/loader/stories/Skeleton.stories.js +1 -1
  276. package/build/es/components/menu/Menu.js +1 -1
  277. package/build/es/components/menu/Menu.js.map +1 -1
  278. package/build/es/components/menu/MenuItemCheckbox.js +1 -1
  279. package/build/es/components/menu/MenuItemCheckbox.js.map +1 -1
  280. package/build/es/components/message/Message.js +1 -1
  281. package/build/es/components/message/Message.js.map +1 -1
  282. package/build/es/components/modal/stories/ModalCloseButton.stories.d.ts +1 -1
  283. package/build/es/components/modal/stories/ModalOverlay.stories.js +1 -1
  284. package/build/es/components/modal/stories/ModalOverlay.stories.js.map +1 -1
  285. package/build/es/components/popover/Popover.js +1 -1
  286. package/build/es/components/popover/Popover.js.map +1 -1
  287. package/build/es/components/radio-panel/RadioPanel.js +1 -1
  288. package/build/es/components/radio-panel/RadioPanel.js.map +1 -1
  289. package/build/es/components/screen-reader-only/ScreenReaderOnly.d.ts +3 -0
  290. package/build/es/components/screen-reader-only/ScreenReaderOnly.js.map +1 -0
  291. package/build/es/components/screen-reader-only/index.d.ts +2 -0
  292. package/build/es/components/screen-reader-only/index.js +2 -0
  293. package/build/es/components/screen-reader-only/types.d.ts +4 -0
  294. package/build/es/components/select/Select.js +1 -1
  295. package/build/es/components/select/Select.js.map +1 -1
  296. package/build/es/components/select/select-utils.js +1 -1
  297. package/build/es/components/select/select-utils.js.map +1 -1
  298. package/build/es/components/system-message/SystemMessage.js +1 -1
  299. package/build/es/components/system-message/SystemMessage.js.map +1 -1
  300. package/build/es/components/table/TableHeader.js +1 -1
  301. package/build/es/components/table/TableHeader.js.map +1 -1
  302. package/build/es/components/table/TableRow.js +1 -1
  303. package/build/es/components/table/TableRow.js.map +1 -1
  304. package/build/es/components/table/stories/data.d.ts +8 -0
  305. package/build/es/components/table/stories/data.js +2 -0
  306. package/build/es/components/table/stories/data.js.map +1 -0
  307. package/build/es/components/table/stories/table.stories.d.ts +10 -1
  308. package/build/es/components/table/stories/table.stories.js +1 -1
  309. package/build/es/components/table/stories/table.stories.js.map +1 -1
  310. package/build/es/components/table/stories/tableCollapsing.stories.d.ts +16 -0
  311. package/build/es/components/table/stories/tableCollapsing.stories.js +2 -0
  312. package/build/es/components/table/stories/tableCollapsing.stories.js.map +1 -0
  313. package/build/es/components/table/stories/tableComplex.stories.d.ts +21 -0
  314. package/build/es/components/table/stories/tableComplex.stories.js +2 -0
  315. package/build/es/components/table/stories/tableComplex.stories.js.map +1 -0
  316. package/build/es/components/table/stories/tableFiltering.stories.d.ts +21 -0
  317. package/build/es/components/table/stories/tableFiltering.stories.js +2 -0
  318. package/build/es/components/table/stories/tableFiltering.stories.js.map +1 -0
  319. package/build/{cjs/components/accordion/stories/AccordionItem.stories.d.cts → es/components/table/stories/tablePagination.stories.d.ts} +2 -2
  320. package/build/es/components/table/stories/tablePagination.stories.js +2 -0
  321. package/build/es/components/table/stories/tablePagination.stories.js.map +1 -0
  322. package/build/es/components/tabs/NavTab.js +1 -1
  323. package/build/es/components/tabs/NavTab.js.map +1 -1
  324. package/build/es/components/tabs/NavTabs.js +1 -1
  325. package/build/es/components/tabs/NavTabs.js.map +1 -1
  326. package/build/es/components/tabs/TabList.js +1 -1
  327. package/build/es/components/tabs/TabList.js.map +1 -1
  328. package/build/es/components/text-area/BaseTextArea.js +1 -1
  329. package/build/es/components/text-area/BaseTextArea.js.map +1 -1
  330. package/build/es/components/toast/Toast.js +1 -1
  331. package/build/es/components/toast/Toast.js.map +1 -1
  332. package/build/es/components/toast/toastContext.js +1 -1
  333. package/build/es/components/toast/toastContext.js.map +1 -1
  334. package/build/es/components/toggle-switch/ToggleSwitch.js +1 -1
  335. package/build/es/components/toggle-switch/ToggleSwitch.js.map +1 -1
  336. package/build/es/components/toggle-switch/usePillStyles.js +1 -1
  337. package/build/es/components/toggle-switch/usePillStyles.js.map +1 -1
  338. package/build/es/components/tooltip/PopupTip.js +1 -1
  339. package/build/es/components/tooltip/PopupTip.js.map +1 -1
  340. package/build/es/components/tooltip/Tooltip.js +1 -1
  341. package/build/es/components/tooltip/Tooltip.js.map +1 -1
  342. package/build/es/components/tooltip/TooltipTrigger.js +1 -1
  343. package/build/es/components/tooltip/TooltipTrigger.js.map +1 -1
  344. package/build/es/hooks/useAnimatedHeight/useAnimatedHeight.js +1 -1
  345. package/build/es/hooks/useAnimatedHeight/useAnimatedHeight.js.map +1 -1
  346. package/build/es/hooks/useAnimatedHeight/useAnimatedHeightBetween.js +1 -1
  347. package/build/es/hooks/useAnimatedHeight/useAnimatedHeightBetween.js.map +1 -1
  348. package/build/es/hooks/useAnimatedHeight/useAutoAnimateHeight.js +1 -1
  349. package/build/es/hooks/useAnimatedHeight/useAutoAnimateHeight.js.map +1 -1
  350. package/build/es/hooks/useAriaLiveRegion/useAriaLiveRegion.d.ts +1 -1
  351. package/build/es/hooks/useAriaLiveRegion/useAriaLiveRegion.js +1 -1
  352. package/build/es/hooks/useAriaLiveRegion/useAriaLiveRegion.js.map +1 -1
  353. package/build/es/hooks/useClickOutside/useClickOutside.js +1 -1
  354. package/build/es/hooks/useClickOutside/useClickOutside.js.map +1 -1
  355. package/build/es/hooks/useElementDimensions/useElementDimensions.js +1 -1
  356. package/build/es/hooks/useElementDimensions/useElementDimensions.js.map +1 -1
  357. package/build/es/hooks/useFocusOutside/useFocusOutside.js +1 -1
  358. package/build/es/hooks/useFocusOutside/useFocusOutside.js.map +1 -1
  359. package/build/es/hooks/useIntersectionObserver/useIntersectionObserver.js +1 -1
  360. package/build/es/hooks/useIntersectionObserver/useIntersectionObserver.js.map +1 -1
  361. package/build/es/hooks/useKeyListener/useKeyListener.js +1 -1
  362. package/build/es/hooks/useKeyListener/useKeyListener.js.map +1 -1
  363. package/build/es/hooks/useScrollIntoView/useScrollIntoView.js +1 -1
  364. package/build/es/hooks/useScrollIntoView/useScrollIntoView.js.map +1 -1
  365. package/build/es/hooks/useSwipeGesture/useSwipeGesture.js +1 -1
  366. package/build/es/hooks/useSwipeGesture/useSwipeGesture.js.map +1 -1
  367. package/build/es/index.d.ts +0 -1
  368. package/build/es/index.js +1 -1
  369. package/build/es/utilities/formatters/date/formatDate.js +1 -1
  370. package/build/es/utilities/formatters/date/formatDate.js.map +1 -1
  371. package/build/es/utilities/formatters/fodselsnummer/formatFodselsnummer.js +1 -1
  372. package/build/es/utilities/formatters/fodselsnummer/formatFodselsnummer.js.map +1 -1
  373. package/build/es/utilities/formatters/kontonummer/formatKontonummer.js +1 -1
  374. package/build/es/utilities/formatters/kontonummer/formatKontonummer.js.map +1 -1
  375. package/build/es/utilities/formatters/kortnummer/formatKortnummer.js +1 -1
  376. package/build/es/utilities/formatters/kortnummer/formatKortnummer.js.map +1 -1
  377. package/build/es/utilities/formatters/organisasjonsnummer/formatOrganisasjonsnummer.js +1 -1
  378. package/build/es/utilities/formatters/organisasjonsnummer/formatOrganisasjonsnummer.js.map +1 -1
  379. package/build/es/utilities/formatters/telefonnummer/formatTelefonnummer.js +1 -1
  380. package/build/es/utilities/formatters/telefonnummer/formatTelefonnummer.js.map +1 -1
  381. package/build/es/utilities/formatters/util/registerWithMask.js +1 -1
  382. package/build/es/utilities/formatters/util/registerWithMask.js.map +1 -1
  383. package/build/es/utilities/formatters/valuta/formatValuta.js +1 -1
  384. package/build/es/utilities/formatters/valuta/formatValuta.js.map +1 -1
  385. package/build/es/utilities/tabListener.js +1 -1
  386. package/build/es/utilities/tabListener.js.map +1 -1
  387. package/build/es/utilities/validators/hasMinimumWords/hasMinimumWords.js +1 -1
  388. package/build/es/utilities/validators/hasMinimumWords/hasMinimumWords.js.map +1 -1
  389. package/build/jokul.css +1 -1
  390. package/build/paginated-table-data-VQZB3_Aj.cjs +2 -0
  391. package/build/paginated-table-data-VQZB3_Aj.cjs.map +1 -0
  392. package/build/paginated-table-data-ZMeh4d0Y.js +2 -0
  393. package/build/paginated-table-data-ZMeh4d0Y.js.map +1 -0
  394. package/package.json +61 -81
  395. package/styles/components/autosuggest/autosuggest.scss +4 -4
  396. package/styles/components/card/card.css +0 -248
  397. package/styles/components/card/card.min.css +1 -1
  398. package/styles/components/card/card.scss +0 -3
  399. package/styles/components/checkbox/checkbox.css +4 -4
  400. package/styles/components/checkbox/checkbox.min.css +1 -1
  401. package/styles/components/checkbox-panel/checkbox-panel.css +2 -2
  402. package/styles/components/checkbox-panel/checkbox-panel.min.css +1 -1
  403. package/styles/components/chip/chip.css +9 -1
  404. package/styles/components/chip/chip.min.css +1 -1
  405. package/styles/components/chip/chip.scss +8 -1
  406. package/styles/components/combobox/combobox.css +17 -19
  407. package/styles/components/combobox/combobox.min.css +1 -1
  408. package/styles/components/combobox/combobox.scss +18 -18
  409. package/styles/components/countdown/countdown.css +2 -2
  410. package/styles/components/countdown/countdown.min.css +1 -1
  411. package/styles/components/datepicker/_index.scss +1 -0
  412. package/styles/components/description-list/description-list.scss +7 -7
  413. package/styles/components/expander/_index.scss +0 -1
  414. package/styles/components/feedback/feedback.css +2 -2
  415. package/styles/components/feedback/feedback.min.css +1 -1
  416. package/styles/components/feedback/feedback.scss +4 -3
  417. package/styles/components/file-input/file-input.css +13 -14
  418. package/styles/components/file-input/file-input.min.css +1 -1
  419. package/styles/components/input-group/_labels.scss +21 -21
  420. package/styles/components/input-group/input-group.css +2 -2
  421. package/styles/components/input-group/input-group.min.css +1 -1
  422. package/styles/components/link/link.css +2 -3
  423. package/styles/components/link/link.min.css +1 -1
  424. package/styles/components/link/link.scss +3 -2
  425. package/styles/components/loader/loader.css +6 -6
  426. package/styles/components/loader/loader.min.css +1 -1
  427. package/styles/components/loader/skeleton-loader.css +5 -5
  428. package/styles/components/loader/skeleton-loader.min.css +1 -1
  429. package/styles/components/loader/skeleton-loader.scss +10 -10
  430. package/styles/components/menu/menu.css +5 -5
  431. package/styles/components/menu/menu.min.css +1 -1
  432. package/styles/components/menu/menu.scss +3 -3
  433. package/styles/components/message/message.css +2 -2
  434. package/styles/components/message/message.min.css +1 -1
  435. package/styles/components/progress-bar/progress-bar.css +1 -1
  436. package/styles/components/progress-bar/progress-bar.min.css +1 -1
  437. package/styles/components/radio-button/radio-button.css +4 -3
  438. package/styles/components/radio-button/radio-button.min.css +1 -1
  439. package/styles/components/radio-button/radio-button.scss +18 -19
  440. package/styles/components/radio-panel/radio-panel.css +2 -2
  441. package/styles/components/radio-panel/radio-panel.min.css +1 -1
  442. package/styles/components/summary-table/summary-table.scss +3 -3
  443. package/styles/components/system-message/system-message.css +2 -2
  444. package/styles/components/system-message/system-message.min.css +1 -1
  445. package/styles/components/system-message/system-message.scss +8 -8
  446. package/styles/components/table/_table-cell.scss +4 -4
  447. package/styles/components/table/_table-header.scss +4 -2
  448. package/styles/components/table/_table-row.scss +13 -12
  449. package/styles/components/table/table.css +13 -11
  450. package/styles/components/text-area/text-area.css +6 -4
  451. package/styles/components/text-area/text-area.min.css +5 -1
  452. package/styles/components/text-input/text-input.css +6 -4
  453. package/styles/components/text-input/text-input.min.css +5 -1
  454. package/styles/components/toast/toast.css +4 -4
  455. package/styles/components/toast/toast.min.css +1 -1
  456. package/styles/components/toggle-switch/_toggle-slider.scss +2 -2
  457. package/styles/core/core.css +0 -160
  458. package/styles/core/core.min.css +1 -1
  459. package/styles/core/jkl/_spacing.scss +1 -62
  460. package/styles/core/jkl/_typography.scss +21 -91
  461. package/styles/shared/input/shared-input-styles.css +6 -4
  462. package/styles/shared/input/shared-input-styles.min.css +5 -1
  463. package/styles/shared/input/shared-input-styles.scss +15 -11
  464. package/styles/styles.css +265 -766
  465. package/styles/styles.min.css +5 -7
  466. package/styles/styles.scss +0 -1
  467. package/build/cjs/components/ScreenReaderOnly.cjs.map +0 -1
  468. package/build/cjs/components/ScreenReaderOnly.d.cts +0 -6
  469. package/build/cjs/components/accordion/Accordion.cjs +0 -2
  470. package/build/cjs/components/accordion/Accordion.cjs.map +0 -1
  471. package/build/cjs/components/accordion/Accordion.d.cts +0 -7
  472. package/build/cjs/components/accordion/AccordionItem.cjs +0 -2
  473. package/build/cjs/components/accordion/AccordionItem.cjs.map +0 -1
  474. package/build/cjs/components/accordion/AccordionItem.d.cts +0 -7
  475. package/build/cjs/components/accordion/documentation/AccordionDocs.cjs +0 -2
  476. package/build/cjs/components/accordion/documentation/AccordionDocs.cjs.map +0 -1
  477. package/build/cjs/components/accordion/documentation/AccordionDocs.d.cts +0 -2
  478. package/build/cjs/components/accordion/index.cjs +0 -2
  479. package/build/cjs/components/accordion/index.d.cts +0 -3
  480. package/build/cjs/components/accordion/stories/Accordion.stories.cjs +0 -2
  481. package/build/cjs/components/accordion/stories/Accordion.stories.cjs.map +0 -1
  482. package/build/cjs/components/accordion/stories/AccordionItem.stories.cjs +0 -2
  483. package/build/cjs/components/accordion/stories/AccordionItem.stories.cjs.map +0 -1
  484. package/build/cjs/components/accordion/types.d.cts +0 -13
  485. package/build/cjs/components/accordion/vite-env.d.cjs +0 -2
  486. package/build/cjs/components/accordion/vite-env.d.cjs.map +0 -1
  487. package/build/cjs/components/card/InfoCard.cjs +0 -2
  488. package/build/cjs/components/card/InfoCard.cjs.map +0 -1
  489. package/build/cjs/components/card/InfoCard.d.cts +0 -13
  490. package/build/cjs/components/card/NavCard.cjs +0 -2
  491. package/build/cjs/components/card/NavCard.cjs.map +0 -1
  492. package/build/cjs/components/card/NavCard.d.cts +0 -26
  493. package/build/cjs/components/card/TaskCard.cjs +0 -2
  494. package/build/cjs/components/card/TaskCard.cjs.map +0 -1
  495. package/build/cjs/components/card/TaskCard.d.cts +0 -23
  496. package/build/cjs/components/card/development/examples/InfoCardExample.d.cts +0 -3
  497. package/build/cjs/components/card/development/examples/NavCardExample.d.cts +0 -3
  498. package/build/cjs/components/card/development/examples/TaskCardExample.d.cts +0 -3
  499. package/build/cjs/components/card/development/examples/TopExample.d.cts +0 -3
  500. package/build/cjs/components/card/development/examples/cardExampleProps.d.cts +0 -13
  501. package/build/cjs/components/card/utils.cjs +0 -2
  502. package/build/cjs/components/card/utils.cjs.map +0 -1
  503. package/build/cjs/components/card/utils.d.cts +0 -3
  504. package/build/cjs/components/expander/deprecated/ExpandSection.cjs +0 -2
  505. package/build/cjs/components/expander/deprecated/ExpandSection.cjs.map +0 -1
  506. package/build/cjs/components/expander/deprecated/ExpandSection.d.cts +0 -26
  507. package/build/cjs/components/expander/deprecated/Expander.cjs +0 -2
  508. package/build/cjs/components/expander/deprecated/Expander.cjs.map +0 -1
  509. package/build/cjs/components/expander/deprecated/Expander.d.cts +0 -27
  510. package/build/cjs/components/expander/stories/ExpanderPanel.stories.cjs.map +0 -1
  511. package/build/cjs/components/index.cjs +0 -2
  512. package/build/cjs/components/index.cjs.map +0 -1
  513. package/build/cjs/components/index.d.cts +0 -47
  514. package/build/es/components/ScreenReaderOnly.d.ts +0 -6
  515. package/build/es/components/ScreenReaderOnly.js.map +0 -1
  516. package/build/es/components/accordion/Accordion.d.ts +0 -7
  517. package/build/es/components/accordion/Accordion.js +0 -2
  518. package/build/es/components/accordion/Accordion.js.map +0 -1
  519. package/build/es/components/accordion/AccordionItem.d.ts +0 -7
  520. package/build/es/components/accordion/AccordionItem.js +0 -2
  521. package/build/es/components/accordion/AccordionItem.js.map +0 -1
  522. package/build/es/components/accordion/documentation/AccordionDocs.d.ts +0 -2
  523. package/build/es/components/accordion/documentation/AccordionDocs.js +0 -2
  524. package/build/es/components/accordion/documentation/AccordionDocs.js.map +0 -1
  525. package/build/es/components/accordion/index.d.ts +0 -3
  526. package/build/es/components/accordion/index.js +0 -2
  527. package/build/es/components/accordion/stories/Accordion.stories.d.ts +0 -13
  528. package/build/es/components/accordion/stories/Accordion.stories.js +0 -2
  529. package/build/es/components/accordion/stories/Accordion.stories.js.map +0 -1
  530. package/build/es/components/accordion/stories/AccordionItem.stories.d.ts +0 -13
  531. package/build/es/components/accordion/stories/AccordionItem.stories.js +0 -2
  532. package/build/es/components/accordion/stories/AccordionItem.stories.js.map +0 -1
  533. package/build/es/components/accordion/types.d.ts +0 -13
  534. package/build/es/components/accordion/vite-env.d.js +0 -2
  535. package/build/es/components/accordion/vite-env.d.js.map +0 -1
  536. package/build/es/components/card/InfoCard.d.ts +0 -13
  537. package/build/es/components/card/InfoCard.js +0 -2
  538. package/build/es/components/card/InfoCard.js.map +0 -1
  539. package/build/es/components/card/NavCard.d.ts +0 -26
  540. package/build/es/components/card/NavCard.js +0 -2
  541. package/build/es/components/card/NavCard.js.map +0 -1
  542. package/build/es/components/card/TaskCard.d.ts +0 -23
  543. package/build/es/components/card/TaskCard.js +0 -2
  544. package/build/es/components/card/TaskCard.js.map +0 -1
  545. package/build/es/components/card/development/examples/InfoCardExample.d.ts +0 -3
  546. package/build/es/components/card/development/examples/NavCardExample.d.ts +0 -3
  547. package/build/es/components/card/development/examples/TaskCardExample.d.ts +0 -3
  548. package/build/es/components/card/development/examples/TopExample.d.ts +0 -3
  549. package/build/es/components/card/development/examples/cardExampleProps.d.ts +0 -13
  550. package/build/es/components/card/utils.d.ts +0 -3
  551. package/build/es/components/card/utils.js +0 -2
  552. package/build/es/components/card/utils.js.map +0 -1
  553. package/build/es/components/expander/deprecated/ExpandSection.d.ts +0 -26
  554. package/build/es/components/expander/deprecated/ExpandSection.js +0 -2
  555. package/build/es/components/expander/deprecated/ExpandSection.js.map +0 -1
  556. package/build/es/components/expander/deprecated/Expander.d.ts +0 -27
  557. package/build/es/components/expander/deprecated/Expander.js +0 -2
  558. package/build/es/components/expander/deprecated/Expander.js.map +0 -1
  559. package/build/es/components/expander/stories/ExpanderPanel.stories.js.map +0 -1
  560. package/build/es/components/index.d.ts +0 -47
  561. package/build/es/components/index.js +0 -2
  562. package/build/es/components/index.js.map +0 -1
  563. package/styles/components/accordion/_index.scss +0 -2
  564. package/styles/components/accordion/accordion.css +0 -189
  565. package/styles/components/accordion/accordion.min.css +0 -7
  566. package/styles/components/accordion/accordion.scss +0 -168
  567. package/styles/components/card/_info-card.scss +0 -42
  568. package/styles/components/card/_nav-card.scss +0 -119
  569. package/styles/components/card/_task-card.scss +0 -55
  570. package/styles/components/card/development/info-card-example.css +0 -26
  571. package/styles/components/card/development/info-card-example.min.css +0 -1
  572. package/styles/components/card/development/info-card-example.scss +0 -14
  573. package/styles/components/card/development/task-card-example.css +0 -9
  574. package/styles/components/card/development/task-card-example.min.css +0 -1
  575. package/styles/components/card/development/task-card-example.scss +0 -8
  576. package/styles/components/expander/deprecated/expander.css +0 -82
  577. package/styles/components/expander/deprecated/expander.min.css +0 -1
  578. package/styles/components/expander/deprecated/expander.scss +0 -87
  579. /package/build/cjs/components/expander/stories/{ExpanderPanel.stories.d.cts → ExpandablePanel.stories.d.cts} +0 -0
  580. /package/build/cjs/components/{ScreenReaderOnly.cjs → screen-reader-only/ScreenReaderOnly.cjs} +0 -0
  581. /package/build/cjs/components/{accordion → screen-reader-only}/index.cjs.map +0 -0
  582. /package/build/cjs/components/{accordion → screen-reader-only}/types.cjs +0 -0
  583. /package/build/cjs/components/{accordion → screen-reader-only}/types.cjs.map +0 -0
  584. /package/build/es/components/expander/stories/{ExpanderPanel.stories.d.ts → ExpandablePanel.stories.d.ts} +0 -0
  585. /package/build/es/components/{ScreenReaderOnly.js → screen-reader-only/ScreenReaderOnly.js} +0 -0
  586. /package/build/es/components/{accordion → screen-reader-only}/index.js.map +0 -0
  587. /package/build/es/components/{accordion → screen-reader-only}/types.js +0 -0
  588. /package/build/es/components/{accordion → screen-reader-only}/types.js.map +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"toastContext.js","sources":["../../../../src/components/toast/toastContext.tsx"],"sourcesContent":["import { ToastQueue } from \"@react-stately/toast\";\nimport React, { createContext, useContext, useState, type FC } from \"react\";\nimport { ToastRegion } from \"./ToastRegion.js\";\nimport type {\n ToastContent,\n ToastContext,\n ToastContextProviderProps,\n ToastOptions,\n} from \"./types.js\";\n\nconst context = createContext<ToastContext>({\n add: () => {\n return \"missing-provider\";\n },\n close: () => {},\n});\n\nexport const useToast = (): ToastContext => useContext(context);\n\nexport const ToastProvider: FC<ToastContextProviderProps> = ({\n children,\n maxVisibleToasts = 5,\n placement = \"center\",\n}) => {\n const [queue] = useState(\n new ToastQueue<ToastContent>({\n maxVisibleToasts,\n hasExitAnimation: true,\n }),\n );\n\n return (\n <context.Provider\n value={{\n close: queue.close.bind(queue),\n add: (toast: ToastContent, options?: ToastOptions) => {\n let timeout: number | undefined = 5000;\n\n if (typeof options?.timeout === \"number\") {\n timeout = options.timeout as number;\n } else if (\n options?.timeout === null ||\n options?.timeout === \"off\"\n ) {\n timeout = undefined;\n }\n\n return queue.add(toast, {\n ...options,\n timeout,\n });\n },\n }}\n >\n {children}\n <ToastRegion queue={queue} placement={placement} />\n </context.Provider>\n );\n};\n"],"names":["context","createContext","add","close","useToast","useContext","ToastProvider","children","maxVisibleToasts","placement","queue","useState","ToastQueue","hasExitAnimation","jsxs","Provider","value","bind","toast","options","timeout","jsx","ToastRegion"],"mappings":"uNAUA,MAAMA,EAAUC,EAA4B,CACxCC,IAAK,IACM,mBAEXC,MAAO,SAGEC,EAAW,IAAoBC,EAAWL,GAE1CM,EAA+C,EACxDC,SAAAA,EACAC,iBAAAA,EAAmB,EACnBC,UAAAA,EAAY,aAEN,MAACC,GAASC,EACZ,IAAIC,EAAyB,CACzBJ,iBAAAA,EACAK,kBAAkB,KAKtB,OAAAC,EAACd,EAAQe,SAAR,CACGC,MAAO,CACHb,MAAOO,EAAMP,MAAMc,KAAKP,GACxBR,IAAK,CAACgB,EAAqBC,KACvB,IAAIC,EAA8B,IAE9B,MAA4B,iBAArB,MAAAD,OAAAA,EAAAA,EAASC,SAChBA,EAAUD,EAAQC,SAEG,QAArB,MAAAD,OAAA,EAAAA,EAASC,UACY,SAArB,MAAAD,OAAA,EAAAA,EAASC,YAECA,OAAA,GAGPV,EAAMR,IAAIgB,EAAO,IACjBC,EACHC,QAAAA,GACH,GAIRb,SAAA,CAAAA,EACDc,EAACC,EAAY,CAAAZ,MAAAA,EAAcD,UAAAA,MAC/B"}
1
+ {"version":3,"file":"toastContext.js","sources":["../../../../src/components/toast/toastContext.tsx"],"sourcesContent":["import { ToastQueue } from \"@react-stately/toast\";\nimport React, { createContext, useContext, useState, type FC } from \"react\";\nimport { ToastRegion } from \"./ToastRegion.js\";\nimport type {\n ToastContent,\n ToastContext,\n ToastContextProviderProps,\n ToastOptions,\n} from \"./types.js\";\n\nconst context = createContext<ToastContext>({\n add: () => {\n return \"missing-provider\";\n },\n close: () => {},\n});\n\nexport const useToast = (): ToastContext => useContext(context);\n\nexport const ToastProvider: FC<ToastContextProviderProps> = ({\n children,\n maxVisibleToasts = 5,\n placement = \"center\",\n}) => {\n const [queue] = useState(\n new ToastQueue<ToastContent>({\n maxVisibleToasts,\n hasExitAnimation: true,\n }),\n );\n\n return (\n <context.Provider\n value={{\n close: queue.close.bind(queue),\n add: (toast: ToastContent, options?: ToastOptions) => {\n let timeout: number | undefined = 5000;\n\n if (typeof options?.timeout === \"number\") {\n timeout = options.timeout as number;\n } else if (\n options?.timeout === null ||\n options?.timeout === \"off\"\n ) {\n timeout = undefined;\n }\n\n return queue.add(toast, {\n ...options,\n timeout,\n });\n },\n }}\n >\n {children}\n <ToastRegion queue={queue} placement={placement} />\n </context.Provider>\n );\n};\n"],"names":["context","createContext","add","close","useToast","useContext","ToastProvider","children","maxVisibleToasts","placement","queue","useState","ToastQueue","hasExitAnimation","jsxs","Provider","value","bind","toast","options","timeout","jsx","ToastRegion"],"mappings":"uNAUA,MAAMA,EAAUC,EAA4B,CACxCC,IAAK,IACM,mBAEXC,MAAO,SAGEC,EAAW,IAAoBC,EAAWL,GAE1CM,EAA+C,EACxDC,SAAAA,EACAC,iBAAAA,EAAmB,EACnBC,UAAAA,EAAY,aAEN,MAACC,GAASC,EACZ,IAAIC,EAAyB,CACzBJ,iBAAAA,EACAK,kBAAkB,KAKtB,OAAAC,EAACd,EAAQe,SAAR,CACGC,MAAO,CACHb,MAAOO,EAAMP,MAAMc,KAAKP,GACxBR,IAAK,CAACgB,EAAqBC,KACvB,IAAIC,EAA8B,IAE9B,MAA4B,iBAArBD,GAASC,QAChBA,EAAUD,EAAQC,SAEG,OAArBD,GAASC,SACY,QAArBD,GAASC,WAECA,OAAA,GAGPV,EAAMR,IAAIgB,EAAO,IACjBC,EACHC,QAAAA,GACH,GAIRb,SAAA,CAAAA,EACDc,EAACC,EAAY,CAAAZ,MAAAA,EAAcD,UAAAA,MAC/B"}
@@ -1,2 +1,2 @@
1
- import{jsxs as e,jsx as s}from"react/jsx-runtime";import{c as o}from"../../../clsx-BeLtu-UY.js";import i,{forwardRef as t}from"react";import{useId as n}from"../../hooks/useId/useId.js";import{useSwipeGesture as r}from"../../hooks/useSwipeGesture/useSwipeGesture.js";import{CheckIcon as a}from"../icon/icons/CheckIcon.js";const l=t((({"aria-pressed":t=!1,children:l,className:c,density:d,id:g,onChange:m,...h},u)=>{const w=n(g||"jkl-toggle-switch",{generateSuffix:!g}),[p,f]=i.useState(t);i.useEffect((()=>{f(t)}),[t]);const{onClick:j,onPointerCancel:k,onPointerDown:C,onPointerMove:P,onPointerUp:N,...S}=h,{gestureHandlers:v}=r({onClick:e=>{f(!p),null==m||m(e,!p),null==j||j(e)},onChange:(e,s)=>{s!==p&&(f(s),null==m||m(e,s))},onPointerCancel:k,onPointerDown:C,onPointerMove:P,onPointerUp:N});return e("button",{className:o("jkl-toggle-switch",c),id:w,ref:u,"aria-pressed":p,"data-density":d,...S,...S.disabled?{}:v,children:[l,s("div",{"aria-hidden":!0,className:"jkl-toggle-switch-widget",children:e("div",{className:"jkl-toggle-switch-widget__slider",children:[s("div",{className:"jkl-toggle-switch-widget__knob"}),s(a,{variant:"small",bold:!0,className:"jkl-toggle-switch-widget__indicator"})]})})]})}));l.displayName="ToggleSwitch";export{l as ToggleSwitch};
1
+ import{jsxs as e,jsx as s}from"react/jsx-runtime";import{c as o}from"../../../clsx-BeLtu-UY.js";import i,{forwardRef as t}from"react";import{useId as n}from"../../hooks/useId/useId.js";import{useSwipeGesture as r}from"../../hooks/useSwipeGesture/useSwipeGesture.js";import{CheckIcon as a}from"../icon/icons/CheckIcon.js";const c=t((({"aria-pressed":t=!1,children:c,className:l,density:d,id:g,onChange:m,...h},w)=>{const u=n(g||"jkl-toggle-switch",{generateSuffix:!g}),[p,f]=i.useState(t);i.useEffect((()=>{f(t)}),[t]);const{onClick:j,onPointerCancel:k,onPointerDown:C,onPointerMove:P,onPointerUp:N,...S}=h,{gestureHandlers:v}=r({onClick:e=>{f(!p),m?.(e,!p),j?.(e)},onChange:(e,s)=>{s!==p&&(f(s),m?.(e,s))},onPointerCancel:k,onPointerDown:C,onPointerMove:P,onPointerUp:N});return e("button",{className:o("jkl-toggle-switch",l),id:u,ref:w,"aria-pressed":p,"data-density":d,...S,...S.disabled?{}:v,children:[c,s("div",{"aria-hidden":!0,className:"jkl-toggle-switch-widget",children:e("div",{className:"jkl-toggle-switch-widget__slider",children:[s("div",{className:"jkl-toggle-switch-widget__knob"}),s(a,{variant:"small",bold:!0,className:"jkl-toggle-switch-widget__indicator"})]})})]})}));c.displayName="ToggleSwitch";export{c as ToggleSwitch};
2
2
  //# sourceMappingURL=ToggleSwitch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ToggleSwitch.js","sources":["../../../../src/components/toggle-switch/ToggleSwitch.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { type MouseEventHandler, forwardRef } from \"react\";\nimport { useId } from \"../../hooks/useId/useId.js\";\nimport { useSwipeGesture } from \"../../hooks/useSwipeGesture/useSwipeGesture.js\";\nimport { CheckIcon } from \"../icon/icons/CheckIcon.js\";\nimport type { ToggleChangeHandler, ToggleSwitchProps } from \"./types.js\";\n\nexport const ToggleSwitch = forwardRef<HTMLButtonElement, ToggleSwitchProps>(\n (\n {\n \"aria-pressed\": ariaPressed = false,\n children,\n className,\n density,\n id,\n onChange,\n ...rest\n },\n ref,\n ) => {\n const uid = useId(id || \"jkl-toggle-switch\", { generateSuffix: !id });\n const [pressed, setPressed] = React.useState(ariaPressed);\n React.useEffect(() => {\n setPressed(ariaPressed);\n }, [ariaPressed]);\n\n const {\n onClick,\n onPointerCancel,\n onPointerDown,\n onPointerMove,\n onPointerUp,\n ...buttonProps\n } = rest;\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n setPressed(!pressed);\n onChange?.(event, !pressed);\n onClick?.(event);\n };\n\n const handleChange: ToggleChangeHandler<HTMLButtonElement> = (\n event,\n toggleTo,\n ) => {\n if (toggleTo !== pressed) {\n setPressed(toggleTo);\n onChange?.(event, toggleTo);\n }\n };\n\n const { gestureHandlers } = useSwipeGesture({\n onClick: handleClick,\n onChange: handleChange,\n onPointerCancel,\n onPointerDown,\n onPointerMove,\n onPointerUp,\n });\n\n return (\n <button\n className={clsx(\"jkl-toggle-switch\", className)}\n id={uid}\n ref={ref}\n aria-pressed={pressed}\n data-density={density}\n {...buttonProps}\n {...(buttonProps.disabled ? {} : gestureHandlers)}\n >\n {children}\n <div aria-hidden className=\"jkl-toggle-switch-widget\">\n <div className=\"jkl-toggle-switch-widget__slider\">\n <div className=\"jkl-toggle-switch-widget__knob\" />\n <CheckIcon\n variant=\"small\"\n bold\n className=\"jkl-toggle-switch-widget__indicator\"\n />\n </div>\n </div>\n </button>\n );\n },\n);\nToggleSwitch.displayName = \"ToggleSwitch\";\n"],"names":["ToggleSwitch","forwardRef","ariaPressed","children","className","density","id","onChange","rest","ref","uid","useId","generateSuffix","pressed","setPressed","React","useState","useEffect","onClick","onPointerCancel","onPointerDown","onPointerMove","onPointerUp","buttonProps","gestureHandlers","useSwipeGesture","event","toggleTo","jsxs","clsx","disabled","jsx","CheckIcon","variant","bold","displayName"],"mappings":"iUAOO,MAAMA,EAAeC,GACxB,EAEQ,eAAgBC,GAAc,EAC9BC,SAAAA,EACAC,UAAAA,EACAC,QAAAA,EACAC,GAAAA,EACAC,SAAAA,KACGC,GAEPC,KAEM,MAAAC,EAAMC,EAAML,GAAM,oBAAqB,CAAEM,gBAAiBN,KACzDO,EAASC,GAAcC,EAAMC,SAASd,GAC7Ca,EAAME,WAAU,KACZH,EAAWZ,EAAW,GACvB,CAACA,IAEE,MACFgB,QAAAA,EACAC,gBAAAA,EACAC,cAAAA,EACAC,cAAAA,EACAC,YAAAA,KACGC,GACHf,GAkBIgB,gBAAAA,GAAoBC,EAAgB,CACxCP,QAjBuDQ,IACvDZ,GAAYD,GACD,MAAAN,GAAAA,EAAAmB,GAAQb,GACnB,MAAAK,GAAAA,EAAUQ,EAAAA,EAeVnB,SAZyD,CACzDmB,EACAC,KAEIA,IAAad,IACbC,EAAWa,GACX,MAAApB,GAAAA,EAAWmB,EAAOC,GAAAA,EAOtBR,gBAAAA,EACAC,cAAAA,EACAC,cAAAA,EACAC,YAAAA,IAIA,OAAAM,EAAC,SAAA,CACGxB,UAAWyB,EAAK,oBAAqBzB,GACrCE,GAAII,EACJD,IAAAA,EACA,eAAcI,EACd,eAAcR,KACVkB,KACCA,EAAYO,SAAW,CAAA,EAAKN,EAEhCrB,SAAA,CAAAA,EACD4B,EAAC,OAAI,eAAW,EAAC3B,UAAU,2BACvBD,SAAAyB,EAAC,MAAI,CAAAxB,UAAU,mCACXD,SAAA,CAAC4B,EAAA,MAAA,CAAI3B,UAAU,mCACf2B,EAACC,EAAA,CACGC,QAAQ,QACRC,MAAI,EACJ9B,UAAU,+CAI1B,IAIZJ,EAAamC,YAAc"}
1
+ {"version":3,"file":"ToggleSwitch.js","sources":["../../../../src/components/toggle-switch/ToggleSwitch.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { type MouseEventHandler, forwardRef } from \"react\";\nimport { useId } from \"../../hooks/useId/useId.js\";\nimport { useSwipeGesture } from \"../../hooks/useSwipeGesture/useSwipeGesture.js\";\nimport { CheckIcon } from \"../icon/icons/CheckIcon.js\";\nimport type { ToggleChangeHandler, ToggleSwitchProps } from \"./types.js\";\n\nexport const ToggleSwitch = forwardRef<HTMLButtonElement, ToggleSwitchProps>(\n (\n {\n \"aria-pressed\": ariaPressed = false,\n children,\n className,\n density,\n id,\n onChange,\n ...rest\n },\n ref,\n ) => {\n const uid = useId(id || \"jkl-toggle-switch\", { generateSuffix: !id });\n const [pressed, setPressed] = React.useState(ariaPressed);\n React.useEffect(() => {\n setPressed(ariaPressed);\n }, [ariaPressed]);\n\n const {\n onClick,\n onPointerCancel,\n onPointerDown,\n onPointerMove,\n onPointerUp,\n ...buttonProps\n } = rest;\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n setPressed(!pressed);\n onChange?.(event, !pressed);\n onClick?.(event);\n };\n\n const handleChange: ToggleChangeHandler<HTMLButtonElement> = (\n event,\n toggleTo,\n ) => {\n if (toggleTo !== pressed) {\n setPressed(toggleTo);\n onChange?.(event, toggleTo);\n }\n };\n\n const { gestureHandlers } = useSwipeGesture({\n onClick: handleClick,\n onChange: handleChange,\n onPointerCancel,\n onPointerDown,\n onPointerMove,\n onPointerUp,\n });\n\n return (\n <button\n className={clsx(\"jkl-toggle-switch\", className)}\n id={uid}\n ref={ref}\n aria-pressed={pressed}\n data-density={density}\n {...buttonProps}\n {...(buttonProps.disabled ? {} : gestureHandlers)}\n >\n {children}\n <div aria-hidden className=\"jkl-toggle-switch-widget\">\n <div className=\"jkl-toggle-switch-widget__slider\">\n <div className=\"jkl-toggle-switch-widget__knob\" />\n <CheckIcon\n variant=\"small\"\n bold\n className=\"jkl-toggle-switch-widget__indicator\"\n />\n </div>\n </div>\n </button>\n );\n },\n);\nToggleSwitch.displayName = \"ToggleSwitch\";\n"],"names":["ToggleSwitch","forwardRef","ariaPressed","children","className","density","id","onChange","rest","ref","uid","useId","generateSuffix","pressed","setPressed","React","useState","useEffect","onClick","onPointerCancel","onPointerDown","onPointerMove","onPointerUp","buttonProps","gestureHandlers","useSwipeGesture","event","toggleTo","jsxs","clsx","disabled","jsx","CheckIcon","variant","bold","displayName"],"mappings":"iUAOO,MAAMA,EAAeC,GACxB,EAEQ,eAAgBC,GAAc,EAC9BC,SAAAA,EACAC,UAAAA,EACAC,QAAAA,EACAC,GAAAA,EACAC,SAAAA,KACGC,GAEPC,KAEM,MAAAC,EAAMC,EAAML,GAAM,oBAAqB,CAAEM,gBAAiBN,KACzDO,EAASC,GAAcC,EAAMC,SAASd,GAC7Ca,EAAME,WAAU,KACZH,EAAWZ,EAAW,GACvB,CAACA,IAEE,MACFgB,QAAAA,EACAC,gBAAAA,EACAC,cAAAA,EACAC,cAAAA,EACAC,YAAAA,KACGC,GACHf,GAkBIgB,gBAAAA,GAAoBC,EAAgB,CACxCP,QAjBuDQ,IACvDZ,GAAYD,GACDN,IAAAmB,GAAQb,GACnBK,IAAUQ,EAAK,EAefnB,SAZyD,CACzDmB,EACAC,KAEIA,IAAad,IACbC,EAAWa,GACXpB,IAAWmB,EAAOC,GAAQ,EAO9BR,gBAAAA,EACAC,cAAAA,EACAC,cAAAA,EACAC,YAAAA,IAIA,OAAAM,EAAC,SAAA,CACGxB,UAAWyB,EAAK,oBAAqBzB,GACrCE,GAAII,EACJD,IAAAA,EACA,eAAcI,EACd,eAAcR,KACVkB,KACCA,EAAYO,SAAW,CAAA,EAAKN,EAEhCrB,SAAA,CAAAA,EACD4B,EAAC,OAAI,eAAW,EAAC3B,UAAU,2BACvBD,SAAAyB,EAAC,MAAI,CAAAxB,UAAU,mCACXD,SAAA,CAAC4B,EAAA,MAAA,CAAI3B,UAAU,mCACf2B,EAACC,EAAA,CACGC,QAAQ,QACRC,MAAI,EACJ9B,UAAU,+CAI1B,IAIZJ,EAAamC,YAAc"}
@@ -1,2 +1,2 @@
1
- import{useState as e,useCallback as t,useMemo as n,useEffect as r}from"react";const i=(i,s,o)=>{const[u,a]=e(0),[c,l]=e(0),d=t((()=>{var e;if(null!=(e=i.current)&&e.parentElement){a(i.current.clientWidth);const e=s?i.current.parentElement.clientWidth-i.current.clientWidth:0;l(e)}}),[i,s,...o]),w=n((()=>function(e){let t=!1;return(...n)=>{if(t)return;const r=e(...n);return t=!0,window.setTimeout((()=>{t=!1}),200),r}}(d)),[d]);return r((()=>(d(),typeof window<"u"&&window.addEventListener("resize",w),()=>{typeof window<"u"&&window.removeEventListener("resize",w)})),[d,w]),{width:u,transform:`translateX(${c}px)`}};export{i as usePillStyles};
1
+ import{useState as e,useCallback as t,useMemo as n,useEffect as r}from"react";const i=(i,s,o)=>{const[u,a]=e(0),[c,l]=e(0),d=t((()=>{if(i.current?.parentElement){a(i.current.clientWidth);const e=s?i.current.parentElement.clientWidth-i.current.clientWidth:0;l(e)}}),[i,s,...o]),w=n((()=>function(e){let t=!1;return(...n)=>{if(t)return;const r=e(...n);return t=!0,window.setTimeout((()=>{t=!1}),200),r}}(d)),[d]);return r((()=>(d(),typeof window<"u"&&window.addEventListener("resize",w),()=>{typeof window<"u"&&window.removeEventListener("resize",w)})),[d,w]),{width:u,transform:`translateX(${c}px)`}};export{i as usePillStyles};
2
2
  //# sourceMappingURL=usePillStyles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePillStyles.js","sources":["../../../../src/components/toggle-switch/usePillStyles.ts"],"sourcesContent":["import {\n type RefObject,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\n\nfunction throttle<R, A extends any[]>(fn: (...args: A) => R) {\n let wait = false;\n\n return (...args: A) => {\n if (wait) return undefined;\n\n const result = fn(...args);\n\n wait = true;\n window.setTimeout(() => {\n wait = false;\n }, 200);\n\n return result;\n };\n}\n\nexport const usePillStyles = (\n ref: RefObject<HTMLLabelElement | null>,\n shouldTransform: boolean,\n dependencies: unknown[],\n) => {\n const [width, setWidth] = useState(0);\n const [distance, setDistance] = useState(0);\n\n const setStyles = useCallback(() => {\n if (ref.current?.parentElement) {\n setWidth(ref.current.clientWidth);\n\n const translateDistance = shouldTransform\n ? ref.current.parentElement.clientWidth -\n ref.current.clientWidth\n : 0;\n\n setDistance(translateDistance);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref, shouldTransform, ...dependencies]);\n\n const throttledSetStyles = useMemo(() => throttle(setStyles), [setStyles]);\n\n useEffect(() => {\n setStyles();\n typeof window !== \"undefined\" &&\n window.addEventListener(\"resize\", throttledSetStyles);\n return () => {\n typeof window !== \"undefined\" &&\n window.removeEventListener(\"resize\", throttledSetStyles);\n };\n }, [setStyles, throttledSetStyles]);\n\n return {\n width,\n transform: `translateX(${distance}px)`,\n };\n};\n"],"names":["usePillStyles","ref","shouldTransform","dependencies","width","setWidth","useState","distance","setDistance","setStyles","useCallback","_a","current","parentElement","clientWidth","translateDistance","throttledSetStyles","useMemo","fn","wait","args","result","window","setTimeout","throttle","useEffect","addEventListener","removeEventListener","transform"],"mappings":"8EAyBO,MAAMA,EAAgB,CACzBC,EACAC,EACAC,KAEA,MAAOC,EAAOC,GAAYC,EAAS,IAC5BC,EAAUC,GAAeF,EAAS,GAEnCG,EAAYC,GAAY,WACtB,GAAA,OAAAC,EAAAV,EAAIW,UAAJD,EAAaE,cAAe,CACnBR,EAAAJ,EAAIW,QAAQE,aAEfC,MAAAA,EAAoBb,EACpBD,EAAIW,QAAQC,cAAcC,YAC1Bb,EAAIW,QAAQE,YACZ,EAENN,EAAYO,EAAiB,IAGlC,CAACd,EAAKC,KAAoBC,IAEvBa,EAAqBC,GAAQ,IAvCvC,SAAsCC,GAClC,IAAIC,GAAO,EAEX,MAAO,IAAIC,KACP,GAAID,EAAa,OAEXE,MAAAA,EAASH,KAAME,GAEd,OAAAD,GAAA,EACPG,OAAOC,YAAW,KACPJ,GAAA,CAAA,GACR,KAEIE,CAAAA,CAEf,CAwB6CG,CAASf,IAAY,CAACA,IAE/D,OAAAgB,GAAU,KACIhB,WACHa,OAAW,KACdA,OAAOI,iBAAiB,SAAUV,GAC/B,YACIM,OAAW,KACdA,OAAOK,oBAAoB,SAAUX,EAAkB,IAEhE,CAACP,EAAWO,IAER,CACHZ,MAAAA,EACAwB,UAAW,cAAcrB,OAC7B"}
1
+ {"version":3,"file":"usePillStyles.js","sources":["../../../../src/components/toggle-switch/usePillStyles.ts"],"sourcesContent":["import {\n type RefObject,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\n\nfunction throttle<R, A extends any[]>(fn: (...args: A) => R) {\n let wait = false;\n\n return (...args: A) => {\n if (wait) return undefined;\n\n const result = fn(...args);\n\n wait = true;\n window.setTimeout(() => {\n wait = false;\n }, 200);\n\n return result;\n };\n}\n\nexport const usePillStyles = (\n ref: RefObject<HTMLLabelElement | null>,\n shouldTransform: boolean,\n dependencies: unknown[],\n) => {\n const [width, setWidth] = useState(0);\n const [distance, setDistance] = useState(0);\n\n const setStyles = useCallback(() => {\n if (ref.current?.parentElement) {\n setWidth(ref.current.clientWidth);\n\n const translateDistance = shouldTransform\n ? ref.current.parentElement.clientWidth -\n ref.current.clientWidth\n : 0;\n\n setDistance(translateDistance);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref, shouldTransform, ...dependencies]);\n\n const throttledSetStyles = useMemo(() => throttle(setStyles), [setStyles]);\n\n useEffect(() => {\n setStyles();\n typeof window !== \"undefined\" &&\n window.addEventListener(\"resize\", throttledSetStyles);\n return () => {\n typeof window !== \"undefined\" &&\n window.removeEventListener(\"resize\", throttledSetStyles);\n };\n }, [setStyles, throttledSetStyles]);\n\n return {\n width,\n transform: `translateX(${distance}px)`,\n };\n};\n"],"names":["usePillStyles","ref","shouldTransform","dependencies","width","setWidth","useState","distance","setDistance","setStyles","useCallback","current","parentElement","clientWidth","translateDistance","throttledSetStyles","useMemo","fn","wait","args","result","window","setTimeout","throttle","useEffect","addEventListener","removeEventListener","transform"],"mappings":"8EAyBO,MAAMA,EAAgB,CACzBC,EACAC,EACAC,KAEA,MAAOC,EAAOC,GAAYC,EAAS,IAC5BC,EAAUC,GAAeF,EAAS,GAEnCG,EAAYC,GAAY,KACtBT,GAAAA,EAAIU,SAASC,cAAe,CACnBP,EAAAJ,EAAIU,QAAQE,aAEfC,MAAAA,EAAoBZ,EACpBD,EAAIU,QAAQC,cAAcC,YAC1BZ,EAAIU,QAAQE,YACZ,EAENL,EAAYM,EAAiB,IAGlC,CAACb,EAAKC,KAAoBC,IAEvBY,EAAqBC,GAAQ,IAvCvC,SAAsCC,GAClC,IAAIC,GAAO,EAEX,MAAO,IAAIC,KACP,GAAID,EAAa,OAEXE,MAAAA,EAASH,KAAME,GAEd,OAAAD,GAAA,EACPG,OAAOC,YAAW,KACPJ,GAAA,CAAA,GACR,KAEIE,CAAAA,CAEf,CAwB6CG,CAASd,IAAY,CAACA,IAE/D,OAAAe,GAAU,KACIf,WACHY,OAAW,KACdA,OAAOI,iBAAiB,SAAUV,GAC/B,YACIM,OAAW,KACdA,OAAOK,oBAAoB,SAAUX,EAAkB,IAEhE,CAACN,EAAWM,IAER,CACHX,MAAAA,EACAuB,UAAW,cAAcpB,OAC7B"}
@@ -1,2 +1,2 @@
1
- import{jsxs as t,jsx as o}from"react/jsx-runtime";import{c as i}from"../../../clsx-BeLtu-UY.js";import{useState as s}from"react";import{QuestionIcon as n}from"../icon/icons/QuestionIcon.js";import{Tooltip as r}from"./Tooltip.js";import{TooltipContent as e}from"./TooltipContent.js";import{TooltipTrigger as p}from"./TooltipTrigger.js";const a=({content:a,triggerProps:l,...c})=>{const[m,u]=s(!1);return t(r,{onOpenChange:u,triggerOn:"click",...c,children:[o(p,{children:t("button",{...l,type:"button",className:i("jkl-tooltip-question-button",null==l?void 0:l.className),"data-testid":"jkl-tooltip-question-button",children:[o(n,{variant:"inherit",bold:m}),o("span",{className:"jkl-sr-only",children:"Vis hjelpetekst"})]})}),o(e,{"data-ispopup":!0,children:o("div",{className:"jkl-popuptip__content-wrapper",tabIndex:0,children:a})})]})};export{a as PopupTip};
1
+ import{jsxs as t,jsx as o}from"react/jsx-runtime";import{c as i}from"../../../clsx-BeLtu-UY.js";import{useState as s}from"react";import{QuestionIcon as r}from"../icon/icons/QuestionIcon.js";import{Tooltip as e}from"./Tooltip.js";import{TooltipContent as n}from"./TooltipContent.js";import{TooltipTrigger as p}from"./TooltipTrigger.js";const a=({content:a,triggerProps:l,...c})=>{const[m,u]=s(!1);return t(e,{onOpenChange:u,triggerOn:"click",...c,children:[o(p,{children:t("button",{...l,type:"button",className:i("jkl-tooltip-question-button",l?.className),"data-testid":"jkl-tooltip-question-button",children:[o(r,{variant:"inherit",bold:m}),o("span",{className:"jkl-sr-only",children:"Vis hjelpetekst"})]})}),o(n,{"data-ispopup":!0,children:o("div",{className:"jkl-popuptip__content-wrapper",tabIndex:0,children:a})})]})};export{a as PopupTip};
2
2
  //# sourceMappingURL=PopupTip.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PopupTip.js","sources":["../../../../src/components/tooltip/PopupTip.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { useState, type FC } from \"react\";\nimport { QuestionIcon } from \"../icon/icons/QuestionIcon.js\";\nimport { Tooltip } from \"./Tooltip.js\";\nimport { TooltipContent } from \"./TooltipContent.js\";\nimport { TooltipTrigger } from \"./TooltipTrigger.js\";\nimport type { PopupTipProps } from \"./types.js\";\n\nexport const PopupTip: FC<PopupTipProps> = ({\n content,\n triggerProps,\n ...tooltipProps\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n\n return (\n <Tooltip onOpenChange={setIsOpen} triggerOn=\"click\" {...tooltipProps}>\n <TooltipTrigger>\n <button\n {...triggerProps}\n type=\"button\"\n className={clsx(\n \"jkl-tooltip-question-button\",\n triggerProps?.className,\n )}\n data-testid=\"jkl-tooltip-question-button\"\n >\n <QuestionIcon variant=\"inherit\" bold={isOpen} />\n <span className=\"jkl-sr-only\">Vis hjelpetekst</span>\n </button>\n </TooltipTrigger>\n\n <TooltipContent data-ispopup={true}>\n {/* biome-ignore lint/a11y/noNoninteractiveTabindex: */}\n <div className=\"jkl-popuptip__content-wrapper\" tabIndex={0}>\n {content}\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n"],"names":["PopupTip","content","triggerProps","tooltipProps","isOpen","setIsOpen","useState","Tooltip","onOpenChange","triggerOn","children","jsx","TooltipTrigger","jsxs","type","className","clsx","QuestionIcon","variant","bold","TooltipContent","tabIndex"],"mappings":"+UAQO,MAAMA,EAA8B,EACvCC,QAAAA,EACAC,aAAAA,KACGC,MAEH,MAAOC,EAAQC,GAAaC,GAAS,YAGhCC,EAAQ,CAAAC,aAAcH,EAAWI,UAAU,WAAYN,EACpDO,SAAA,CAAAC,EAACC,EACG,CAAAF,SAAAG,EAAC,SAAA,IACOX,EACJY,KAAK,SACLC,UAAWC,EACP,8BACA,MAAAd,SAAAA,EAAca,WAElB,cAAY,8BAEZL,SAAA,CAAAC,EAACM,EAAa,CAAAC,QAAQ,UAAUC,KAAMf,IACrCO,EAAA,OAAA,CAAKI,UAAU,cAAcL,SAAe,yBAIrDC,EAACS,EAAe,CAAA,gBAAc,EAE1BV,SAAAC,EAAC,MAAI,CAAAI,UAAU,gCAAgCM,SAAU,EACpDX,SAAAT,QAGb"}
1
+ {"version":3,"file":"PopupTip.js","sources":["../../../../src/components/tooltip/PopupTip.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { useState, type FC } from \"react\";\nimport { QuestionIcon } from \"../icon/icons/QuestionIcon.js\";\nimport { Tooltip } from \"./Tooltip.js\";\nimport { TooltipContent } from \"./TooltipContent.js\";\nimport { TooltipTrigger } from \"./TooltipTrigger.js\";\nimport type { PopupTipProps } from \"./types.js\";\n\nexport const PopupTip: FC<PopupTipProps> = ({\n content,\n triggerProps,\n ...tooltipProps\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n\n return (\n <Tooltip onOpenChange={setIsOpen} triggerOn=\"click\" {...tooltipProps}>\n <TooltipTrigger>\n <button\n {...triggerProps}\n type=\"button\"\n className={clsx(\n \"jkl-tooltip-question-button\",\n triggerProps?.className,\n )}\n data-testid=\"jkl-tooltip-question-button\"\n >\n <QuestionIcon variant=\"inherit\" bold={isOpen} />\n <span className=\"jkl-sr-only\">Vis hjelpetekst</span>\n </button>\n </TooltipTrigger>\n\n <TooltipContent data-ispopup={true}>\n {/* biome-ignore lint/a11y/noNoninteractiveTabindex: */}\n <div className=\"jkl-popuptip__content-wrapper\" tabIndex={0}>\n {content}\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n"],"names":["PopupTip","content","triggerProps","tooltipProps","isOpen","setIsOpen","useState","Tooltip","onOpenChange","triggerOn","children","jsx","TooltipTrigger","jsxs","type","className","clsx","QuestionIcon","variant","bold","TooltipContent","tabIndex"],"mappings":"+UAQO,MAAMA,EAA8B,EACvCC,QAAAA,EACAC,aAAAA,KACGC,MAEH,MAAOC,EAAQC,GAAaC,GAAS,YAGhCC,EAAQ,CAAAC,aAAcH,EAAWI,UAAU,WAAYN,EACpDO,SAAA,CAAAC,EAACC,EACG,CAAAF,SAAAG,EAAC,SAAA,IACOX,EACJY,KAAK,SACLC,UAAWC,EACP,8BACAd,GAAca,WAElB,cAAY,8BAEZL,SAAA,CAAAC,EAACM,EAAa,CAAAC,QAAQ,UAAUC,KAAMf,IACrCO,EAAA,OAAA,CAAKI,UAAU,cAAcL,SAAe,yBAIrDC,EAACS,EAAe,CAAA,gBAAc,EAE1BV,SAAAC,EAAC,MAAI,CAAAI,UAAU,gCAAgCM,SAAU,EACpDX,SAAAT,QAGb"}
@@ -1,2 +1,2 @@
1
- import{jsx as e}from"react/jsx-runtime";import{useFloating as t,offset as n,flip as o,shift as s,arrow as r,autoUpdate as a,useRole as i,useDismiss as l,useClick as u,useHover as p,useFocus as c,useInteractions as d}from"@floating-ui/react";import{createContext as m,useContext as f,useState as x,useRef as g}from"react";const h=m(null),v=h.Provider,O=()=>{const e=f(h);if(null===e)throw new Error("Tooltip-komponentene kan kun brukes inne i <Tooltip />");return e},k=({children:m,...f})=>{const h=(({initialOpen:e=!1,placement:m="top",delay:f=250,triggerOn:h="hover",onOpenChange:v})=>{const[O,k]=x(e),w=g(null),C=g(null),T=t({open:O,onOpenChange:e=>{null==v||v(e),k(e)},placement:m,whileElementsMounted:a,middleware:[n(16),o(),s({padding:16}),r({element:w,padding:8})]}),b=i(T.context,{role:"tooltip"}),E=l(T.context),j=u(T.context,{enabled:"click"===h}),y=p(T.context,{enabled:"hover"===h,delay:O?0:f}),D=c(T.context,{enabled:"hover"===h}),F=d([E,D,b,j,y]);return{triggerOn:h,isOpen:O,setOpen:k,arrowElement:w,...T,refs:{...T.refs,description:C,setDescription:e=>{C.current=e}},...F}})(f);return e(v,{value:h,children:m})};export{k as Tooltip,v as TooltipProvider,O as useTooltipContext};
1
+ import{jsx as e}from"react/jsx-runtime";import{useFloating as t,offset as n,flip as o,shift as s,arrow as r,autoUpdate as a,useRole as i,useDismiss as l,useClick as u,useHover as p,useFocus as c,useInteractions as d}from"@floating-ui/react";import{createContext as m,useContext as f,useState as x,useRef as g}from"react";const h=m(null),v=h.Provider,O=()=>{const e=f(h);if(null===e)throw new Error("Tooltip-komponentene kan kun brukes inne i <Tooltip />");return e},k=({children:m,...f})=>{const h=(({initialOpen:e=!1,placement:m="top",delay:f=250,triggerOn:h="hover",onOpenChange:v})=>{const[O,k]=x(e),w=g(null),C=g(null),T=t({open:O,onOpenChange:e=>{v?.(e),k(e)},placement:m,whileElementsMounted:a,middleware:[n(16),o(),s({padding:16}),r({element:w,padding:8})]}),b=i(T.context,{role:"tooltip"}),E=l(T.context),j=u(T.context,{enabled:"click"===h}),y=p(T.context,{enabled:"hover"===h,delay:O?0:f}),D=c(T.context,{enabled:"hover"===h}),F=d([E,D,b,j,y]);return{triggerOn:h,isOpen:O,setOpen:k,arrowElement:w,...T,refs:{...T.refs,description:C,setDescription:e=>{C.current=e}},...F}})(f);return e(v,{value:h,children:m})};export{k as Tooltip,v as TooltipProvider,O as useTooltipContext};
2
2
  //# sourceMappingURL=Tooltip.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip.js","sources":["../../../../src/components/tooltip/Tooltip.tsx"],"sourcesContent":["import {\n type UseFloatingReturn,\n arrow,\n autoUpdate,\n flip,\n offset,\n shift,\n useClick,\n useDismiss,\n useFloating,\n useFocus,\n useHover,\n useInteractions,\n useRole,\n} from \"@floating-ui/react\";\nimport React, {\n type FC,\n createContext,\n useContext,\n useRef,\n useState,\n} from \"react\";\nimport type { WithChildren } from \"../../core/types.js\";\nimport type { TooltipProps } from \"./types.js\";\n\ntype UseTooltipReturn = {\n triggerOn: NonNullable<TooltipProps[\"triggerOn\"]>;\n isOpen: boolean;\n setOpen: React.Dispatch<React.SetStateAction<boolean>>;\n arrowElement: React.RefObject<SVGSVGElement>;\n refs: {\n description: React.MutableRefObject<HTMLElement | null>;\n setDescription: (element: HTMLElement | null) => void;\n } & UseFloatingReturn[\"refs\"];\n} & UseFloatingReturn &\n ReturnType<typeof useInteractions>;\n\nconst useTooltip = ({\n initialOpen = false,\n placement = \"top\",\n delay = 250,\n triggerOn = \"hover\",\n onOpenChange,\n}: TooltipProps): UseTooltipReturn => {\n const [isOpen, setOpen] = useState(initialOpen);\n const arrowElement = useRef<SVGSVGElement>(null);\n const description = useRef<HTMLElement | null>(null);\n const setDescription = (element: HTMLElement | null) => {\n description.current = element;\n };\n\n const data = useFloating({\n open: isOpen,\n onOpenChange: (open) => {\n onOpenChange?.(open);\n setOpen(open);\n },\n placement,\n whileElementsMounted: autoUpdate,\n middleware: [\n offset(16),\n flip(),\n shift({ padding: 16 }),\n arrow({ element: arrowElement, padding: 8 }),\n ],\n });\n\n const role = useRole(data.context, { role: \"tooltip\" });\n const dismiss = useDismiss(data.context);\n const click = useClick(data.context, {\n enabled: triggerOn === \"click\",\n });\n const hover = useHover(data.context, {\n enabled: triggerOn === \"hover\",\n delay: isOpen ? 0 : delay,\n });\n const focus = useFocus(data.context, {\n enabled: triggerOn === \"hover\",\n });\n\n const interactions = useInteractions([dismiss, focus, role, click, hover]);\n\n return {\n triggerOn,\n isOpen,\n setOpen,\n arrowElement,\n ...data,\n refs: {\n ...data.refs,\n description,\n setDescription,\n },\n ...interactions,\n };\n};\n\nexport type TooltipContext = ReturnType<typeof useTooltip> | null;\n\nconst tooltipContext = createContext<TooltipContext>(null);\n\nexport const TooltipProvider = tooltipContext.Provider;\n\nexport const useTooltipContext = () => {\n const context = useContext(tooltipContext);\n\n if (context === null) {\n throw new Error(\n \"Tooltip-komponentene kan kun brukes inne i <Tooltip />\",\n );\n }\n\n return context;\n};\n\nexport const Tooltip: FC<TooltipProps & WithChildren> = ({\n children,\n ...options\n}) => {\n const tooltip = useTooltip(options);\n\n return <TooltipProvider value={tooltip}>{children}</TooltipProvider>;\n};\n"],"names":["tooltipContext","createContext","TooltipProvider","Provider","useTooltipContext","context","useContext","Error","Tooltip","children","options","tooltip","initialOpen","placement","delay","triggerOn","onOpenChange","isOpen","setOpen","useState","arrowElement","useRef","description","data","useFloating","open","whileElementsMounted","autoUpdate","middleware","offset","flip","shift","padding","arrow","element","role","useRole","dismiss","useDismiss","click","useClick","enabled","hover","useHover","focus","useFocus","interactions","useInteractions","refs","setDescription","current","useTooltip","jsx","value"],"mappings":"iUAqCA,MA8DMA,EAAiBC,EAA8B,MAExCC,EAAkBF,EAAeG,SAEjCC,EAAoB,KACvBC,MAAAA,EAAUC,EAAWN,GAE3B,GAAgB,OAAZK,EACA,MAAM,IAAIE,MACN,0DAIDF,OAAAA,CAAAA,EAGEG,EAA2C,EACpDC,SAAAA,KACGC,MAEGC,MAAAA,EAlFS,GACfC,YAAAA,GAAc,EACdC,UAAAA,EAAY,MACZC,MAAAA,EAAQ,IACRC,UAAAA,EAAY,QACZC,aAAAA,MAEA,MAAOC,EAAQC,GAAWC,EAASP,GAC7BQ,EAAeC,EAAsB,MACrCC,EAAcD,EAA2B,MAKzCE,EAAOC,EAAY,CACrBC,KAAMR,EACND,aAAeS,IACX,MAAAT,GAAAA,EAAeS,GACfP,EAAQO,EAAI,EAEhBZ,UAAAA,EACAa,qBAAsBC,EACtBC,WAAY,CACRC,EAAO,IACPC,IACAC,EAAM,CAAEC,QAAS,KACjBC,EAAM,CAAEC,QAASd,EAAcY,QAAS,OAI1CG,EAAOC,EAAQb,EAAKlB,QAAS,CAAE8B,KAAM,YACrCE,EAAUC,EAAWf,EAAKlB,SAC1BkC,EAAQC,EAASjB,EAAKlB,QAAS,CACjCoC,QAAuB,UAAd1B,IAEP2B,EAAQC,EAASpB,EAAKlB,QAAS,CACjCoC,QAAuB,UAAd1B,EACTD,MAAOG,EAAS,EAAIH,IAElB8B,EAAQC,EAAStB,EAAKlB,QAAS,CACjCoC,QAAuB,UAAd1B,IAGP+B,EAAeC,EAAgB,CAACV,EAASO,EAAOT,EAAMI,EAAOG,IAE5D,MAAA,CACH3B,UAAAA,EACAE,OAAAA,EACAC,QAAAA,EACAE,aAAAA,KACGG,EACHyB,KAAM,IACCzB,EAAKyB,KACR1B,YAAAA,EACA2B,eA5CgBf,IACpBZ,EAAY4B,QAAUhB,CAAAA,MA6CnBY,EACP,EAyBgBK,CAAWzC,GAEnB,OAAA0C,EAAAlD,EAAA,CAAgBmD,MAAO1C,EAAUF,SAAAA,GAAS"}
1
+ {"version":3,"file":"Tooltip.js","sources":["../../../../src/components/tooltip/Tooltip.tsx"],"sourcesContent":["import {\n type UseFloatingReturn,\n arrow,\n autoUpdate,\n flip,\n offset,\n shift,\n useClick,\n useDismiss,\n useFloating,\n useFocus,\n useHover,\n useInteractions,\n useRole,\n} from \"@floating-ui/react\";\nimport React, {\n type FC,\n createContext,\n useContext,\n useRef,\n useState,\n} from \"react\";\nimport type { WithChildren } from \"../../core/types.js\";\nimport type { TooltipProps } from \"./types.js\";\n\ntype UseTooltipReturn = {\n triggerOn: NonNullable<TooltipProps[\"triggerOn\"]>;\n isOpen: boolean;\n setOpen: React.Dispatch<React.SetStateAction<boolean>>;\n arrowElement: React.RefObject<SVGSVGElement>;\n refs: {\n description: React.MutableRefObject<HTMLElement | null>;\n setDescription: (element: HTMLElement | null) => void;\n } & UseFloatingReturn[\"refs\"];\n} & UseFloatingReturn &\n ReturnType<typeof useInteractions>;\n\nconst useTooltip = ({\n initialOpen = false,\n placement = \"top\",\n delay = 250,\n triggerOn = \"hover\",\n onOpenChange,\n}: TooltipProps): UseTooltipReturn => {\n const [isOpen, setOpen] = useState(initialOpen);\n const arrowElement = useRef<SVGSVGElement>(null);\n const description = useRef<HTMLElement | null>(null);\n const setDescription = (element: HTMLElement | null) => {\n description.current = element;\n };\n\n const data = useFloating({\n open: isOpen,\n onOpenChange: (open) => {\n onOpenChange?.(open);\n setOpen(open);\n },\n placement,\n whileElementsMounted: autoUpdate,\n middleware: [\n offset(16),\n flip(),\n shift({ padding: 16 }),\n arrow({ element: arrowElement, padding: 8 }),\n ],\n });\n\n const role = useRole(data.context, { role: \"tooltip\" });\n const dismiss = useDismiss(data.context);\n const click = useClick(data.context, {\n enabled: triggerOn === \"click\",\n });\n const hover = useHover(data.context, {\n enabled: triggerOn === \"hover\",\n delay: isOpen ? 0 : delay,\n });\n const focus = useFocus(data.context, {\n enabled: triggerOn === \"hover\",\n });\n\n const interactions = useInteractions([dismiss, focus, role, click, hover]);\n\n return {\n triggerOn,\n isOpen,\n setOpen,\n arrowElement,\n ...data,\n refs: {\n ...data.refs,\n description,\n setDescription,\n },\n ...interactions,\n };\n};\n\nexport type TooltipContext = ReturnType<typeof useTooltip> | null;\n\nconst tooltipContext = createContext<TooltipContext>(null);\n\nexport const TooltipProvider = tooltipContext.Provider;\n\nexport const useTooltipContext = () => {\n const context = useContext(tooltipContext);\n\n if (context === null) {\n throw new Error(\n \"Tooltip-komponentene kan kun brukes inne i <Tooltip />\",\n );\n }\n\n return context;\n};\n\nexport const Tooltip: FC<TooltipProps & WithChildren> = ({\n children,\n ...options\n}) => {\n const tooltip = useTooltip(options);\n\n return <TooltipProvider value={tooltip}>{children}</TooltipProvider>;\n};\n"],"names":["tooltipContext","createContext","TooltipProvider","Provider","useTooltipContext","context","useContext","Error","Tooltip","children","options","tooltip","initialOpen","placement","delay","triggerOn","onOpenChange","isOpen","setOpen","useState","arrowElement","useRef","description","data","useFloating","open","whileElementsMounted","autoUpdate","middleware","offset","flip","shift","padding","arrow","element","role","useRole","dismiss","useDismiss","click","useClick","enabled","hover","useHover","focus","useFocus","interactions","useInteractions","refs","setDescription","current","useTooltip","jsx","value"],"mappings":"iUAqCA,MA8DMA,EAAiBC,EAA8B,MAExCC,EAAkBF,EAAeG,SAEjCC,EAAoB,KACvBC,MAAAA,EAAUC,EAAWN,GAE3B,GAAgB,OAAZK,EACA,MAAM,IAAIE,MACN,0DAIDF,OAAAA,CAAAA,EAGEG,EAA2C,EACpDC,SAAAA,KACGC,MAEGC,MAAAA,EAlFS,GACfC,YAAAA,GAAc,EACdC,UAAAA,EAAY,MACZC,MAAAA,EAAQ,IACRC,UAAAA,EAAY,QACZC,aAAAA,MAEA,MAAOC,EAAQC,GAAWC,EAASP,GAC7BQ,EAAeC,EAAsB,MACrCC,EAAcD,EAA2B,MAKzCE,EAAOC,EAAY,CACrBC,KAAMR,EACND,aAAeS,IACXT,IAAeS,GACfP,EAAQO,EAAI,EAEhBZ,UAAAA,EACAa,qBAAsBC,EACtBC,WAAY,CACRC,EAAO,IACPC,IACAC,EAAM,CAAEC,QAAS,KACjBC,EAAM,CAAEC,QAASd,EAAcY,QAAS,OAI1CG,EAAOC,EAAQb,EAAKlB,QAAS,CAAE8B,KAAM,YACrCE,EAAUC,EAAWf,EAAKlB,SAC1BkC,EAAQC,EAASjB,EAAKlB,QAAS,CACjCoC,QAAuB,UAAd1B,IAEP2B,EAAQC,EAASpB,EAAKlB,QAAS,CACjCoC,QAAuB,UAAd1B,EACTD,MAAOG,EAAS,EAAIH,IAElB8B,EAAQC,EAAStB,EAAKlB,QAAS,CACjCoC,QAAuB,UAAd1B,IAGP+B,EAAeC,EAAgB,CAACV,EAASO,EAAOT,EAAMI,EAAOG,IAE5D,MAAA,CACH3B,UAAAA,EACAE,OAAAA,EACAC,QAAAA,EACAE,aAAAA,KACGG,EACHyB,KAAM,IACCzB,EAAKyB,KACR1B,YAAAA,EACA2B,eA5CgBf,IACpBZ,EAAY4B,QAAUhB,CAAAA,MA6CnBY,EACP,EAyBgBK,CAAWzC,GAEnB,OAAA0C,EAAAlD,EAAA,CAAgBmD,MAAO1C,EAAUF,SAAAA,GAAS"}
@@ -1,2 +1,2 @@
1
- import{jsx as e}from"react/jsx-runtime";import{useMergeRefs as t}from"@floating-ui/react";import{c as r}from"../../../clsx-BeLtu-UY.js";import o,{forwardRef as l}from"react";import{useTooltipContext as a}from"./Tooltip.js";const s=l((function({children:l,className:s,...n},i){var p,c;const{isOpen:f,getReferenceProps:m,refs:u,triggerOn:d}=a(),g=l.ref,x=t([g,u.setReference,i]),j=[null==(p=u.reference.current)?void 0:p.textContent,null==(c=u.description.current)?void 0:c.textContent].map((e=>null==e?void 0:e.replaceAll(/[\ue003-\uf8aa]/g,""))).filter(Boolean).join(". ");return o.isValidElement(l)?o.cloneElement(l,m({ref:x,"aria-label":j,...l.props,...n,className:r(l.props.className,s),"data-tooltip-shown":f,style:{...l.props.style},tabIndex:"click"===d?0:void 0})):e("button",{"data-tooltip-shown":f,...m({className:r(s,"jkl-tooltip-trigger"),type:"button",ref:x,"aria-label":j,...n}),children:l})}));export{s as TooltipTrigger};
1
+ import{jsx as e}from"react/jsx-runtime";import{useMergeRefs as t}from"@floating-ui/react";import{c as r}from"../../../clsx-BeLtu-UY.js";import o,{forwardRef as s}from"react";import{useTooltipContext as a}from"./Tooltip.js";const n=s((function({children:s,className:n,...i},l){const{isOpen:c,getReferenceProps:p,refs:f,triggerOn:m}=a(),u=s.ref,g=t([u,f.setReference,l]),d=[f.reference.current?.textContent,f.description.current?.textContent].map((e=>e?.replaceAll(/[\ue003-\uf8aa]/g,""))).filter(Boolean).join(". ");return o.isValidElement(s)?o.cloneElement(s,p({ref:g,"aria-label":d,...s.props,...i,className:r(s.props.className,n),"data-tooltip-shown":c,style:{...s.props.style},tabIndex:"click"===m?0:void 0})):e("button",{"data-tooltip-shown":c,...p({className:r(n,"jkl-tooltip-trigger"),type:"button",ref:g,"aria-label":d,...i}),children:s})}));export{n as TooltipTrigger};
2
2
  //# sourceMappingURL=TooltipTrigger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TooltipTrigger.js","sources":["../../../../src/components/tooltip/TooltipTrigger.tsx"],"sourcesContent":["import { useMergeRefs } from \"@floating-ui/react\";\nimport clsx from \"clsx\";\nimport React, { forwardRef, type HTMLProps } from \"react\";\nimport { useTooltipContext } from \"./Tooltip.js\";\n\nexport const TooltipTrigger = forwardRef<HTMLElement, HTMLProps<HTMLElement>>(\n function TooltipTrigger({ children, className, ...props }, forwardedRef) {\n const { isOpen, getReferenceProps, refs, triggerOn } =\n useTooltipContext();\n const childrenRef = (children as any).ref;\n const ref = useMergeRefs([\n childrenRef,\n refs.setReference,\n forwardedRef,\n ]);\n\n const filterMaterialSymbols = (\n maybeText: string | null | undefined,\n ) => {\n return maybeText?.replaceAll(/[\\ue003-\\uf8aa]/g, \"\");\n };\n\n const ariaLabel = [\n (refs.reference.current as HTMLElement | null)?.textContent,\n refs.description.current?.textContent,\n ]\n .map(filterMaterialSymbols)\n .filter(Boolean)\n .join(\". \");\n\n if (React.isValidElement(children)) {\n return React.cloneElement(\n children,\n getReferenceProps({\n ref,\n \"aria-label\": ariaLabel,\n ...children.props,\n ...props,\n className: clsx(children.props.className, className),\n \"data-tooltip-shown\": isOpen,\n style: { ...children.props.style },\n tabIndex: triggerOn === \"click\" ? 0 : undefined,\n }),\n );\n }\n\n return (\n <button\n data-tooltip-shown={isOpen}\n {...getReferenceProps({\n className: clsx(className, \"jkl-tooltip-trigger\"),\n // Sørg for at vi ikke sender inn skjemaer ved klikk på knappen\n type: \"button\",\n ref,\n \"aria-label\": ariaLabel,\n ...props,\n })}\n >\n {children}\n </button>\n );\n },\n);\n"],"names":["TooltipTrigger","forwardRef","children","className","props","forwardedRef","isOpen","getReferenceProps","refs","triggerOn","useTooltipContext","childrenRef","ref","useMergeRefs","setReference","ariaLabel","_a","reference","current","textContent","_b","description","map","maybeText","replaceAll","filter","Boolean","join","React","isValidElement","cloneElement","clsx","style","tabIndex","jsx","type"],"mappings":"+NAKO,MAAMA,EAAiBC,GAC1B,UAA0BC,SAAAA,EAAUC,UAAAA,KAAcC,GAASC,WACvD,MAAQC,OAAAA,EAAQC,kBAAAA,EAAmBC,KAAAA,EAAMC,UAAAA,GACrCC,IACEC,EAAeT,EAAiBU,IAChCA,EAAMC,EAAa,CACrBF,EACAH,EAAKM,aACLT,IASEU,EAAY,CACb,OAAAC,EAAAR,EAAKS,UAAUC,gBAAfF,EAA+CG,YAChD,OAAAC,EAAAZ,EAAKa,YAAYH,gBAAjBE,EAA0BD,aAEzBG,KATDC,GAEO,MAAAA,OAAA,EAAAA,EAAWC,WAAW,mBAAoB,MAQhDC,OAAOC,SACPC,KAAK,MAEN,OAAAC,EAAMC,eAAe3B,GACd0B,EAAME,aACT5B,EACAK,EAAkB,CACdK,IAAAA,EACA,aAAcG,KACXb,EAASE,SACTA,EACHD,UAAW4B,EAAK7B,EAASE,MAAMD,UAAWA,GAC1C,qBAAsBG,EACtB0B,MAAO,IAAK9B,EAASE,MAAM4B,OAC3BC,SAAwB,UAAdxB,EAAwB,OAAI,KAM9CyB,EAAC,SAAA,CACG,qBAAoB5B,KAChBC,EAAkB,CAClBJ,UAAW4B,EAAK5B,EAAW,uBAE3BgC,KAAM,SACNvB,IAAAA,EACA,aAAcG,KACXX,IAGNF,SAAAA,GACL"}
1
+ {"version":3,"file":"TooltipTrigger.js","sources":["../../../../src/components/tooltip/TooltipTrigger.tsx"],"sourcesContent":["import { useMergeRefs } from \"@floating-ui/react\";\nimport clsx from \"clsx\";\nimport React, { forwardRef, type HTMLProps } from \"react\";\nimport { useTooltipContext } from \"./Tooltip.js\";\n\nexport const TooltipTrigger = forwardRef<HTMLElement, HTMLProps<HTMLElement>>(\n function TooltipTrigger({ children, className, ...props }, forwardedRef) {\n const { isOpen, getReferenceProps, refs, triggerOn } =\n useTooltipContext();\n const childrenRef = (children as any).ref;\n const ref = useMergeRefs([\n childrenRef,\n refs.setReference,\n forwardedRef,\n ]);\n\n const filterMaterialSymbols = (\n maybeText: string | null | undefined,\n ) => {\n return maybeText?.replaceAll(/[\\ue003-\\uf8aa]/g, \"\");\n };\n\n const ariaLabel = [\n (refs.reference.current as HTMLElement | null)?.textContent,\n refs.description.current?.textContent,\n ]\n .map(filterMaterialSymbols)\n .filter(Boolean)\n .join(\". \");\n\n if (React.isValidElement(children)) {\n return React.cloneElement(\n children,\n getReferenceProps({\n ref,\n \"aria-label\": ariaLabel,\n ...children.props,\n ...props,\n className: clsx(children.props.className, className),\n \"data-tooltip-shown\": isOpen,\n style: { ...children.props.style },\n tabIndex: triggerOn === \"click\" ? 0 : undefined,\n }),\n );\n }\n\n return (\n <button\n data-tooltip-shown={isOpen}\n {...getReferenceProps({\n className: clsx(className, \"jkl-tooltip-trigger\"),\n // Sørg for at vi ikke sender inn skjemaer ved klikk på knappen\n type: \"button\",\n ref,\n \"aria-label\": ariaLabel,\n ...props,\n })}\n >\n {children}\n </button>\n );\n },\n);\n"],"names":["TooltipTrigger","forwardRef","children","className","props","forwardedRef","isOpen","getReferenceProps","refs","triggerOn","useTooltipContext","childrenRef","ref","useMergeRefs","setReference","ariaLabel","reference","current","textContent","description","map","maybeText","replaceAll","filter","Boolean","join","React","isValidElement","cloneElement","clsx","style","tabIndex","jsx","type"],"mappings":"+NAKO,MAAMA,EAAiBC,GAC1B,UAA0BC,SAAAA,EAAUC,UAAAA,KAAcC,GAASC,GACvD,MAAQC,OAAAA,EAAQC,kBAAAA,EAAmBC,KAAAA,EAAMC,UAAAA,GACrCC,IACEC,EAAeT,EAAiBU,IAChCA,EAAMC,EAAa,CACrBF,EACAH,EAAKM,aACLT,IASEU,EAAY,CACbP,EAAKQ,UAAUC,SAAgCC,YAChDV,EAAKW,YAAYF,SAASC,aAEzBE,KATDC,GAEOA,GAAWC,WAAW,mBAAoB,MAQhDC,OAAOC,SACPC,KAAK,MAEN,OAAAC,EAAMC,eAAezB,GACdwB,EAAME,aACT1B,EACAK,EAAkB,CACdK,IAAAA,EACA,aAAcG,KACXb,EAASE,SACTA,EACHD,UAAW0B,EAAK3B,EAASE,MAAMD,UAAWA,GAC1C,qBAAsBG,EACtBwB,MAAO,IAAK5B,EAASE,MAAM0B,OAC3BC,SAAwB,UAAdtB,EAAwB,OAAI,KAM9CuB,EAAC,SAAA,CACG,qBAAoB1B,KAChBC,EAAkB,CAClBJ,UAAW0B,EAAK1B,EAAW,uBAE3B8B,KAAM,SACNrB,IAAAA,EACA,aAAcG,KACXX,IAGNF,SAAAA,GACL"}
@@ -1,2 +1,2 @@
1
- import{useRef as e,useCallback as t,useEffect as n}from"react";import r from"../../core/tokens.js";import{useBrowserPreferences as i}from"../useBrowserPreferences/useBrowserPreferences.js";import{usePreviousValue as s}from"../usePreviousValue/usePreviousValue.js";function l(l,o){const u=s(l),a=(null==o?void 0:o.easing)||"standard",c=(null==o?void 0:o.timing)||"productive",d=(null==o?void 0:o.display)||"block",m=`${r.motion.timing[c]} height ${r.motion.easing[a]}`,{prefersReducedMotion:v}=i(),f=e(),y=e(),h=e(null);function g(e){var t;const n=h.current;n&&e.target===n&&(l?n.removeAttribute("style"):(n.removeAttribute("style"),n.style.display="none"),null==(t=null==o?void 0:o.onTransitionEnd)||t.call(o,l,h))}const p=t((()=>{var e,t,n,r;const i=h.current;if(i&&void 0!==u){if(l){if(l&&u)return}else if(i.style.display="none",!u)return;if(null==(e=null==o?void 0:o.onTransitionStart)||e.call(o,l,h),v)return i.removeAttribute("style"),l&&(null==(t=null==o?void 0:o.onFirstVisible)||t.call(o,l,h)),void(null==(n=null==o?void 0:o.onTransitionEnd)||n.call(o,l,h));if(i.style.transition=m,i.style.display=d,i.style.overflow="hidden",l)null==(r=null==o?void 0:o.onFirstVisible)||r.call(o,l,h),i.style.height="0",i.style.height=`${i.scrollHeight}px`;else{if(0===i.scrollHeight)return void i.removeAttribute("style");i.style.height=`${i.scrollHeight}px`,f.current=requestAnimationFrame((()=>{y.current=requestAnimationFrame((()=>{i.style.height="0px"}))}))}}}),[l,o,u,m,v,d]);return n((()=>{p()}),[l,p]),n((()=>{const e=h.current;return e&&e.addEventListener("transitionend",g),()=>{e&&e.removeEventListener("transitionend",g)}}),[l]),n((()=>{const e=f.current,t=y.current;return()=>{e&&cancelAnimationFrame(e),t&&cancelAnimationFrame(t)}}),[]),[h,p]}export{l as useAnimatedHeight};
1
+ import{useRef as e,useCallback as t,useEffect as r}from"react";import n from"../../core/tokens.js";import{useBrowserPreferences as i}from"../useBrowserPreferences/useBrowserPreferences.js";import{usePreviousValue as s}from"../usePreviousValue/usePreviousValue.js";function o(o,u){const a=s(o),l=u?.easing||"standard",c=u?.timing||"productive",m=u?.display||"block",d=`${n.motion.timing[c]} height ${n.motion.easing[l]}`,{prefersReducedMotion:f}=i(),y=e(),h=e(),v=e(null);function g(e){const t=v.current;t&&e.target===t&&(o?t.removeAttribute("style"):(t.removeAttribute("style"),t.style.display="none"),u?.onTransitionEnd?.(o,v))}const p=t((()=>{const e=v.current;if(e&&void 0!==a){if(o){if(o&&a)return}else if(e.style.display="none",!a)return;if(u?.onTransitionStart?.(o,v),f)return e.removeAttribute("style"),o&&u?.onFirstVisible?.(o,v),void u?.onTransitionEnd?.(o,v);if(e.style.transition=d,e.style.display=m,e.style.overflow="hidden",o)u?.onFirstVisible?.(o,v),e.style.height="0",e.style.height=`${e.scrollHeight}px`;else{if(0===e.scrollHeight)return void e.removeAttribute("style");e.style.height=`${e.scrollHeight}px`,y.current=requestAnimationFrame((()=>{h.current=requestAnimationFrame((()=>{e.style.height="0px"}))}))}}}),[o,u,a,d,f,m]);return r((()=>{p()}),[o,p]),r((()=>{const e=v.current;return e&&e.addEventListener("transitionend",g),()=>{e&&e.removeEventListener("transitionend",g)}}),[o]),r((()=>{const e=y.current,t=h.current;return()=>{e&&cancelAnimationFrame(e),t&&cancelAnimationFrame(t)}}),[]),[v,p]}export{o as useAnimatedHeight};
2
2
  //# sourceMappingURL=useAnimatedHeight.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAnimatedHeight.js","sources":["../../../../src/hooks/useAnimatedHeight/useAnimatedHeight.ts"],"sourcesContent":["import { type RefObject, useCallback, useEffect, useRef } from \"react\";\nimport tokens from \"../../core/tokens.js\";\nimport { useBrowserPreferences } from \"../useBrowserPreferences/useBrowserPreferences.js\";\nimport { usePreviousValue } from \"../usePreviousValue/usePreviousValue.js\";\nimport type { UseAnimatedHeightOptions } from \"./types.js\";\n\nconst defaultDisplay = \"block\";\nconst defaultEasing = \"standard\";\nconst defaultTiming = \"productive\";\n\n/**\n * Lar deg animere et element opp til sin maksimale høyde, eller ned til 0.\n *\n * @param isOpen Om elementet er åpent eller lukket.\n * @param options Konfigurer display-property, easing og timing, og eventuelle callbacks for life cycle til animasjonen.\n * @returns Ref til elementet som skal animeres, og en funksjon for å trigge animasjonen manuelt.\n */\nexport function useAnimatedHeight<T extends HTMLElement>(\n isOpen: boolean,\n options?: UseAnimatedHeightOptions<T>,\n): [RefObject<T>, () => void] {\n const wasOpen = usePreviousValue(isOpen);\n const easing = options?.easing || defaultEasing;\n const timing = options?.timing || defaultTiming;\n const display = options?.display || defaultDisplay;\n const transition = `${tokens.motion.timing[timing]} height ${tokens.motion.easing[easing]}`;\n\n const { prefersReducedMotion } = useBrowserPreferences();\n\n const raf1 = useRef<number>();\n const raf2 = useRef<number>();\n const elementRef = useRef<T>(null);\n\n function handleTransitionEnd(event: TransitionEvent) {\n const element = elementRef.current;\n\n // Ignore bubbling transitions from within container\n if (element && event.target === element) {\n if (isOpen) {\n element.removeAttribute(\"style\");\n } else {\n element.removeAttribute(\"style\");\n element.style.display = \"none\";\n }\n options?.onTransitionEnd?.(isOpen, elementRef);\n }\n }\n\n const runAnimation = useCallback(() => {\n const element = elementRef.current;\n\n // Ikke kjør animasjonen hvis elementet ikke er rendret,\n // eller hvis det er første render.\n if (!element || wasOpen === undefined) {\n return;\n }\n\n if (!isOpen) {\n element.style.display = \"none\";\n if (!wasOpen) {\n // Første render eller rerender med isOpen false\n return;\n }\n } else if (isOpen && wasOpen) {\n // Re-render etter å ha vært lukket, men forblitt åpen.\n return;\n }\n\n options?.onTransitionStart?.(isOpen, elementRef);\n\n if (prefersReducedMotion) {\n element.removeAttribute(\"style\");\n if (isOpen) {\n options?.onFirstVisible?.(isOpen, elementRef);\n }\n options?.onTransitionEnd?.(isOpen, elementRef); // make sure to call callback when animation is off\n return;\n }\n\n element.style.transition = transition;\n element.style.display = display;\n element.style.overflow = \"hidden\";\n\n if (isOpen) {\n options?.onFirstVisible?.(isOpen, elementRef);\n element.style.height = \"0\";\n element.style.height = `${element.scrollHeight}px`;\n } else {\n // If the scrollHeight is 0 it means that we are transitioning from height 0 -> 0.\n // This causes the \"transitionend\"-event to never fire and the element gets stuck with\n // style: height: 0; display: block; overflow:hidden\n if (element.scrollHeight === 0) {\n element.removeAttribute(\"style\");\n return;\n }\n\n element.style.height = `${element.scrollHeight}px`;\n\n raf1.current = requestAnimationFrame(() => {\n raf2.current = requestAnimationFrame(() => {\n element.style.height = `${0}px`;\n });\n });\n }\n }, [isOpen, options, wasOpen, transition, prefersReducedMotion, display]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Vi trigger med isOpen\n useEffect(() => {\n runAnimation();\n }, [isOpen, runAnimation]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies:\n useEffect(() => {\n const element = elementRef.current;\n if (element) {\n element.addEventListener(\"transitionend\", handleTransitionEnd);\n }\n\n return () => {\n if (element) {\n element.removeEventListener(\n \"transitionend\",\n handleTransitionEnd,\n );\n }\n };\n }, [isOpen]);\n\n useEffect(() => {\n const r1 = raf1.current;\n const r2 = raf2.current;\n return () => {\n r1 && cancelAnimationFrame(r1);\n r2 && cancelAnimationFrame(r2);\n };\n }, []);\n\n return [elementRef, runAnimation];\n}\n"],"names":["useAnimatedHeight","isOpen","options","wasOpen","usePreviousValue","easing","timing","display","transition","tokens","motion","prefersReducedMotion","useBrowserPreferences","raf1","useRef","raf2","elementRef","handleTransitionEnd","event","element","current","target","removeAttribute","style","_a","onTransitionEnd","call","runAnimation","useCallback","onTransitionStart","_b","onFirstVisible","_c","overflow","_d","height","scrollHeight","requestAnimationFrame","useEffect","addEventListener","removeEventListener","r1","r2","cancelAnimationFrame"],"mappings":"wQAiBgB,SAAAA,EACZC,EACAC,GAEMC,MAAAA,EAAUC,EAAiBH,GAC3BI,GAAS,MAAAH,OAAA,EAAAA,EAASG,SAfN,WAgBZC,GAAS,MAAAJ,OAAAA,EAAAA,EAASI,SAfN,aAgBZC,GAAU,MAAAL,SAAAA,EAASK,UAlBN,QAmBbC,EAAa,GAAGC,EAAOC,OAAOJ,OAAOA,aAAkBG,EAAOC,OAAOL,OAAOA,MAE1EM,qBAAAA,GAAyBC,IAE3BC,EAAOC,IACPC,EAAOD,IACPE,EAAaF,EAAU,MAE7B,SAASG,EAAoBC,SACzB,MAAMC,EAAUH,EAAWI,QAGvBD,GAAWD,EAAMG,SAAWF,IACxBlB,EACAkB,EAAQG,gBAAgB,UAExBH,EAAQG,gBAAgB,SACxBH,EAAQI,MAAMhB,QAAU,QAEnB,OAAAiB,EAAA,MAAAtB,OAAA,EAAAA,EAAAuB,kBAAAD,EAAAE,KAAAxB,EAAkBD,EAAQe,GACvC,CAGEW,MAAAA,EAAeC,GAAY,iBAC7B,MAAMT,EAAUH,EAAWI,QAIvB,GAACD,QAAuB,IAAZhB,EAIhB,CAAKF,GAAAA,GAML,GAAWA,GAAUE,EAEjB,YAAA,GAPAgB,EAAQI,MAAMhB,QAAU,QACnBJ,EAED,OAOCqB,GAAA,OAAAA,EAAA,MAAAtB,OAAA,EAAAA,EAAA2B,oBAAAL,EAAAE,KAAAxB,EAAoBD,EAAQe,GAEjCL,EAMA,OALAQ,EAAQG,gBAAgB,SACpBrB,IACS,OAAA6B,EAAA,MAAA5B,OAAA,EAAAA,EAAA6B,iBAAAD,EAAAJ,KAAAxB,EAAiBD,EAAQe,SAE7B,OAAAgB,EAAA,MAAA9B,OAAA,EAAAA,EAAAuB,kBAAAO,EAAAN,KAAAxB,EAAkBD,EAAQe,IAIvCG,GAAAA,EAAQI,MAAMf,WAAaA,EAC3BW,EAAQI,MAAMhB,QAAUA,EACxBY,EAAQI,MAAMU,SAAW,SAErBhC,EACS,OAAAiC,EAAA,MAAAhC,OAAAA,EAAAA,EAAA6B,iBAAAG,EAAAR,KAAAxB,EAAiBD,EAAQe,GAClCG,EAAQI,MAAMY,OAAS,IACvBhB,EAAQI,MAAMY,OAAS,GAAGhB,EAAQiB,qBAC/B,CAICjB,GAAyB,IAAzBA,EAAQiB,aAER,YADAjB,EAAQG,gBAAgB,SAI5BH,EAAQI,MAAMY,OAAS,GAAGhB,EAAQiB,iBAE7BvB,EAAAO,QAAUiB,uBAAsB,KAC5BtB,EAAAK,QAAUiB,uBAAsB,KACzBlB,EAAAI,MAAMY,OAAS,KAAA,GAC1B,GACJ,CAAA,IAEN,CAAClC,EAAQC,EAASC,EAASK,EAAYG,EAAsBJ,IAGhE,OAAA+B,GAAU,KACOX,GAAA,GACd,CAAC1B,EAAQ0B,IAGZW,GAAU,KACN,MAAMnB,EAAUH,EAAWI,QAC3B,OAAID,GACQA,EAAAoB,iBAAiB,gBAAiBtB,GAGvC,KACCE,GACQA,EAAAqB,oBACJ,gBACAvB,EACJ,CAER,GACD,CAAChB,IAEJqC,GAAU,KACN,MAAMG,EAAK5B,EAAKO,QACVsB,EAAK3B,EAAKK,QAChB,MAAO,KACHqB,GAAME,qBAAqBF,GAC3BC,GAAMC,qBAAqBD,EAAE,CACjC,GACD,IAEI,CAAC1B,EAAYW,EACxB"}
1
+ {"version":3,"file":"useAnimatedHeight.js","sources":["../../../../src/hooks/useAnimatedHeight/useAnimatedHeight.ts"],"sourcesContent":["import { type RefObject, useCallback, useEffect, useRef } from \"react\";\nimport tokens from \"../../core/tokens.js\";\nimport { useBrowserPreferences } from \"../useBrowserPreferences/useBrowserPreferences.js\";\nimport { usePreviousValue } from \"../usePreviousValue/usePreviousValue.js\";\nimport type { UseAnimatedHeightOptions } from \"./types.js\";\n\nconst defaultDisplay = \"block\";\nconst defaultEasing = \"standard\";\nconst defaultTiming = \"productive\";\n\n/**\n * Lar deg animere et element opp til sin maksimale høyde, eller ned til 0.\n *\n * @param isOpen Om elementet er åpent eller lukket.\n * @param options Konfigurer display-property, easing og timing, og eventuelle callbacks for life cycle til animasjonen.\n * @returns Ref til elementet som skal animeres, og en funksjon for å trigge animasjonen manuelt.\n */\nexport function useAnimatedHeight<T extends HTMLElement>(\n isOpen: boolean,\n options?: UseAnimatedHeightOptions<T>,\n): [RefObject<T>, () => void] {\n const wasOpen = usePreviousValue(isOpen);\n const easing = options?.easing || defaultEasing;\n const timing = options?.timing || defaultTiming;\n const display = options?.display || defaultDisplay;\n const transition = `${tokens.motion.timing[timing]} height ${tokens.motion.easing[easing]}`;\n\n const { prefersReducedMotion } = useBrowserPreferences();\n\n const raf1 = useRef<number>();\n const raf2 = useRef<number>();\n const elementRef = useRef<T>(null);\n\n function handleTransitionEnd(event: TransitionEvent) {\n const element = elementRef.current;\n\n // Ignore bubbling transitions from within container\n if (element && event.target === element) {\n if (isOpen) {\n element.removeAttribute(\"style\");\n } else {\n element.removeAttribute(\"style\");\n element.style.display = \"none\";\n }\n options?.onTransitionEnd?.(isOpen, elementRef);\n }\n }\n\n const runAnimation = useCallback(() => {\n const element = elementRef.current;\n\n // Ikke kjør animasjonen hvis elementet ikke er rendret,\n // eller hvis det er første render.\n if (!element || wasOpen === undefined) {\n return;\n }\n\n if (!isOpen) {\n element.style.display = \"none\";\n if (!wasOpen) {\n // Første render eller rerender med isOpen false\n return;\n }\n } else if (isOpen && wasOpen) {\n // Re-render etter å ha vært lukket, men forblitt åpen.\n return;\n }\n\n options?.onTransitionStart?.(isOpen, elementRef);\n\n if (prefersReducedMotion) {\n element.removeAttribute(\"style\");\n if (isOpen) {\n options?.onFirstVisible?.(isOpen, elementRef);\n }\n options?.onTransitionEnd?.(isOpen, elementRef); // make sure to call callback when animation is off\n return;\n }\n\n element.style.transition = transition;\n element.style.display = display;\n element.style.overflow = \"hidden\";\n\n if (isOpen) {\n options?.onFirstVisible?.(isOpen, elementRef);\n element.style.height = \"0\";\n element.style.height = `${element.scrollHeight}px`;\n } else {\n // If the scrollHeight is 0 it means that we are transitioning from height 0 -> 0.\n // This causes the \"transitionend\"-event to never fire and the element gets stuck with\n // style: height: 0; display: block; overflow:hidden\n if (element.scrollHeight === 0) {\n element.removeAttribute(\"style\");\n return;\n }\n\n element.style.height = `${element.scrollHeight}px`;\n\n raf1.current = requestAnimationFrame(() => {\n raf2.current = requestAnimationFrame(() => {\n element.style.height = `${0}px`;\n });\n });\n }\n }, [isOpen, options, wasOpen, transition, prefersReducedMotion, display]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Vi trigger med isOpen\n useEffect(() => {\n runAnimation();\n }, [isOpen, runAnimation]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies:\n useEffect(() => {\n const element = elementRef.current;\n if (element) {\n element.addEventListener(\"transitionend\", handleTransitionEnd);\n }\n\n return () => {\n if (element) {\n element.removeEventListener(\n \"transitionend\",\n handleTransitionEnd,\n );\n }\n };\n }, [isOpen]);\n\n useEffect(() => {\n const r1 = raf1.current;\n const r2 = raf2.current;\n return () => {\n r1 && cancelAnimationFrame(r1);\n r2 && cancelAnimationFrame(r2);\n };\n }, []);\n\n return [elementRef, runAnimation];\n}\n"],"names":["useAnimatedHeight","isOpen","options","wasOpen","usePreviousValue","easing","timing","display","transition","tokens","motion","prefersReducedMotion","useBrowserPreferences","raf1","useRef","raf2","elementRef","handleTransitionEnd","event","element","current","target","removeAttribute","style","onTransitionEnd","runAnimation","useCallback","onTransitionStart","onFirstVisible","overflow","height","scrollHeight","requestAnimationFrame","useEffect","addEventListener","removeEventListener","r1","r2","cancelAnimationFrame"],"mappings":"wQAiBgB,SAAAA,EACZC,EACAC,GAEMC,MAAAA,EAAUC,EAAiBH,GAC3BI,EAASH,GAASG,QAfN,WAgBZC,EAASJ,GAASI,QAfN,aAgBZC,EAAUL,GAASK,SAlBN,QAmBbC,EAAa,GAAGC,EAAOC,OAAOJ,OAAOA,aAAkBG,EAAOC,OAAOL,OAAOA,MAE1EM,qBAAAA,GAAyBC,IAE3BC,EAAOC,IACPC,EAAOD,IACPE,EAAaF,EAAU,MAE7B,SAASG,EAAoBC,GACzB,MAAMC,EAAUH,EAAWI,QAGvBD,GAAWD,EAAMG,SAAWF,IACxBlB,EACAkB,EAAQG,gBAAgB,UAExBH,EAAQG,gBAAgB,SACxBH,EAAQI,MAAMhB,QAAU,QAEnBL,GAAAsB,kBAAkBvB,EAAQe,GACvC,CAGES,MAAAA,EAAeC,GAAY,KAC7B,MAAMP,EAAUH,EAAWI,QAIvB,GAACD,QAAuB,IAAZhB,EAIhB,CAAKF,GAAAA,GAML,GAAWA,GAAUE,EAEjB,YAAA,GAPAgB,EAAQI,MAAMhB,QAAU,QACnBJ,EAED,OASR,GAFSD,GAAAyB,oBAAoB1B,EAAQe,GAEjCL,EAMA,OALAQ,EAAQG,gBAAgB,SACpBrB,GACSC,GAAA0B,iBAAiB3B,EAAQe,QAE7Bd,GAAAsB,kBAAkBvB,EAAQe,GAIvCG,GAAAA,EAAQI,MAAMf,WAAaA,EAC3BW,EAAQI,MAAMhB,QAAUA,EACxBY,EAAQI,MAAMM,SAAW,SAErB5B,EACSC,GAAA0B,iBAAiB3B,EAAQe,GAClCG,EAAQI,MAAMO,OAAS,IACvBX,EAAQI,MAAMO,OAAS,GAAGX,EAAQY,qBAC/B,CAICZ,GAAyB,IAAzBA,EAAQY,aAER,YADAZ,EAAQG,gBAAgB,SAI5BH,EAAQI,MAAMO,OAAS,GAAGX,EAAQY,iBAE7BlB,EAAAO,QAAUY,uBAAsB,KAC5BjB,EAAAK,QAAUY,uBAAsB,KACzBb,EAAAI,MAAMO,OAAS,KAAA,GAC1B,GACJ,CAAA,IAEN,CAAC7B,EAAQC,EAASC,EAASK,EAAYG,EAAsBJ,IAGhE,OAAA0B,GAAU,KACOR,GAAA,GACd,CAACxB,EAAQwB,IAGZQ,GAAU,KACN,MAAMd,EAAUH,EAAWI,QAC3B,OAAID,GACQA,EAAAe,iBAAiB,gBAAiBjB,GAGvC,KACCE,GACQA,EAAAgB,oBACJ,gBACAlB,EACJ,CAER,GACD,CAAChB,IAEJgC,GAAU,KACN,MAAMG,EAAKvB,EAAKO,QACViB,EAAKtB,EAAKK,QAChB,MAAO,KACHgB,GAAME,qBAAqBF,GAC3BC,GAAMC,qBAAqBD,EAAE,CACjC,GACD,IAEI,CAACrB,EAAYS,EACxB"}
@@ -1,2 +1,2 @@
1
- import{useRef as e,useCallback as t,useEffect as r}from"react";import n from"../../core/tokens.js";import{useBrowserPreferences as s}from"../useBrowserPreferences/useBrowserPreferences.js";import{usePreviousValue as o}from"../usePreviousValue/usePreviousValue.js";function i(i,a){const u=o(i),l=(null==a?void 0:a.easing)||"standard",d=(null==a?void 0:a.timing)||"productive",c=`${n.motion.timing[d]} height ${n.motion.easing[l]}`,{prefersReducedMotion:m}=s(),p=e(),y=e(),f=e(null),v=t((e=>{var t;const r=f.current;r&&e.target===r&&(r.removeAttribute("style"),null==(t=null==a?void 0:a.onTransitionEnd)||t.call(a,i,f))}),[a,i]),g=t((()=>{var e,t;const r=f.current;if(r&&(void 0===u&&(r.dataset.expanded=i?"true":"false"),!(!i&&!u||i&&u))){if(null==(e=null==a?void 0:a.onTransitionStart)||e.call(a,i,f),m)return r.removeAttribute("style"),r.dataset.expanded=i?"true":"false",void(null==(t=null==a?void 0:a.onTransitionEnd)||t.call(a,i,f));i?function(e,t,r,n){const s=e.current;if(!s)return;s.removeAttribute("style");const o=s.scrollHeight;r.current=requestAnimationFrame((()=>{s.style.removeProperty("transition"),s.dataset.expanded="false";const e=s.getBoundingClientRect().height;s.style.setProperty("height",`${e}px`),s.style.setProperty("overflow-y","hidden"),n.current=requestAnimationFrame((()=>{s.style.setProperty("transition",t),s.style.setProperty("height",`${o}px`),s.dataset.expanded="true"}))}))}(f,c,p,y):function(e,t,r,n){const s=e.current;if(!s)return;s.removeAttribute("style");const o=s.scrollHeight;r.current=requestAnimationFrame((()=>{s.style.removeProperty("transition"),s.dataset.expanded="false";const e=s.getBoundingClientRect().height;s.dataset.expanded="true",s.style.setProperty("height",`${o}px`),s.style.setProperty("overflow-y","hidden"),n.current=requestAnimationFrame((()=>{s.style.setProperty("transition",t),s.style.setProperty("height",`${e}px`),s.dataset.expanded="false"}))}))}(f,c,p,y)}}),[u,i,a,m,c]);return r((()=>{g()}),[i,g]),r((()=>{const e=f.current;return e&&e.addEventListener("transitionend",v),()=>{e&&e.removeEventListener("transitionend",v)}}),[i]),r((()=>{const e=p.current,t=y.current;return()=>{e&&cancelAnimationFrame(e),t&&cancelAnimationFrame(t)}}),[]),[f,g]}export{i as useAnimatedHeightBetween};
1
+ import{useRef as e,useCallback as t,useEffect as r}from"react";import n from"../../core/tokens.js";import{useBrowserPreferences as s}from"../useBrowserPreferences/useBrowserPreferences.js";import{usePreviousValue as o}from"../usePreviousValue/usePreviousValue.js";function i(i,a){const u=o(i),c=a?.easing||"standard",d=a?.timing||"productive",l=`${n.motion.timing[d]} height ${n.motion.easing[c]}`,{prefersReducedMotion:m}=s(),p=e(),y=e(),f=e(null),g=t((e=>{const t=f.current;t&&e.target===t&&(t.removeAttribute("style"),a?.onTransitionEnd?.(i,f))}),[a,i]),h=t((()=>{const e=f.current;if(e&&(void 0===u&&(e.dataset.expanded=i?"true":"false"),!(!i&&!u||i&&u))){if(a?.onTransitionStart?.(i,f),m)return e.removeAttribute("style"),e.dataset.expanded=i?"true":"false",void a?.onTransitionEnd?.(i,f);i?function(e,t,r,n){const s=e.current;if(!s)return;s.removeAttribute("style");const o=s.scrollHeight;r.current=requestAnimationFrame((()=>{s.style.removeProperty("transition"),s.dataset.expanded="false";const e=s.getBoundingClientRect().height;s.style.setProperty("height",`${e}px`),s.style.setProperty("overflow-y","hidden"),n.current=requestAnimationFrame((()=>{s.style.setProperty("transition",t),s.style.setProperty("height",`${o}px`),s.dataset.expanded="true"}))}))}(f,l,p,y):function(e,t,r,n){const s=e.current;if(!s)return;s.removeAttribute("style");const o=s.scrollHeight;r.current=requestAnimationFrame((()=>{s.style.removeProperty("transition"),s.dataset.expanded="false";const e=s.getBoundingClientRect().height;s.dataset.expanded="true",s.style.setProperty("height",`${o}px`),s.style.setProperty("overflow-y","hidden"),n.current=requestAnimationFrame((()=>{s.style.setProperty("transition",t),s.style.setProperty("height",`${e}px`),s.dataset.expanded="false"}))}))}(f,l,p,y)}}),[u,i,a,m,l]);return r((()=>{h()}),[i,h]),r((()=>{const e=f.current;return e&&e.addEventListener("transitionend",g),()=>{e&&e.removeEventListener("transitionend",g)}}),[i]),r((()=>{const e=p.current,t=y.current;return()=>{e&&cancelAnimationFrame(e),t&&cancelAnimationFrame(t)}}),[]),[f,h]}export{i as useAnimatedHeightBetween};
2
2
  //# sourceMappingURL=useAnimatedHeightBetween.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAnimatedHeightBetween.js","sources":["../../../../src/hooks/useAnimatedHeight/useAnimatedHeightBetween.ts"],"sourcesContent":["import { type RefObject, useCallback, useEffect, useRef } from \"react\";\nimport tokens from \"../../core/tokens.js\";\nimport { useBrowserPreferences } from \"../useBrowserPreferences/useBrowserPreferences.js\";\nimport { usePreviousValue } from \"../usePreviousValue/usePreviousValue.js\";\nimport type { UseAnimatedHeightOptions } from \"./types.js\";\n\nconst defaultEasing = \"standard\";\nconst defaultTiming = \"productive\";\n\nfunction collapseElement<T extends HTMLElement>(\n elementRef: RefObject<T | null>,\n transition: string,\n raf1: React.MutableRefObject<number | undefined>,\n raf2: React.MutableRefObject<number | undefined>,\n) {\n const element = elementRef.current;\n\n if (!element) return;\n\n element.removeAttribute(\"style\");\n const expandedHeight = element.scrollHeight;\n\n raf1.current = requestAnimationFrame(() => {\n // Hent kollapset høyde\n element.style.removeProperty(\"transition\");\n element.dataset.expanded = \"false\";\n const collapsedHeight = element.getBoundingClientRect().height;\n element.dataset.expanded = \"true\";\n\n // Sett høyde tilbake til utvidet høyde\n element.style.setProperty(\"height\", `${expandedHeight}px`);\n element.style.setProperty(\"overflow-y\", \"hidden\");\n\n raf2.current = requestAnimationFrame(() => {\n // Sett høyde til kollapset høyde og start transition\n element.style.setProperty(\"transition\", transition);\n element.style.setProperty(\"height\", `${collapsedHeight}px`);\n element.dataset.expanded = \"false\";\n });\n });\n}\n\nfunction expandElement<T extends HTMLElement>(\n elementRef: RefObject<T | null>,\n transition: string,\n raf1: React.MutableRefObject<number | undefined>,\n raf2: React.MutableRefObject<number | undefined>,\n) {\n const element = elementRef.current;\n\n if (!element) return;\n\n element.removeAttribute(\"style\");\n const expandedHeight = element.scrollHeight;\n\n raf1.current = requestAnimationFrame(() => {\n // Hent utvidet høyde\n element.style.removeProperty(\"transition\");\n element.dataset.expanded = \"false\";\n const collapsedHeight = element.getBoundingClientRect().height;\n\n // Sett høyde tilbake til kollapset høyde\n element.style.setProperty(\"height\", `${collapsedHeight}px`);\n element.style.setProperty(\"overflow-y\", \"hidden\");\n\n raf2.current = requestAnimationFrame(() => {\n // Sett høyde til utvidet høyde og start transition\n element.style.setProperty(\"transition\", transition);\n element.style.setProperty(\"height\", `${expandedHeight}px`);\n element.dataset.expanded = \"true\";\n });\n });\n}\n\n/**\n * Lar deg enklere animere mellom to tilstander, gitt ved å sette `data-expanded` på et element til `true` eller `false`.\n * Du bestemmer selv hvilke stiler elementet skal ha i de to tilstandene (vha CSS/Sass), og høyden animeres dersom den endrer seg.\n * @param isExpanded indikerer om elementet skal være utvidet eller ikke\n * @param options konfigurasjon for animasjonen, og lyttere for når animasjonen starter og slutter\n * @returns En tuple med referanse til elementet og en funksjon som kan trigge animasjonen\n */\nexport function useAnimatedHeightBetween<T extends HTMLElement>(\n isExpanded: boolean,\n options?: Omit<UseAnimatedHeightOptions<T>, \"display\" | \"onFirstVisible\">,\n): [RefObject<T>, () => void] {\n const wasExpanded = usePreviousValue(isExpanded);\n const easing = options?.easing || defaultEasing;\n const timing = options?.timing || defaultTiming;\n const transition = `${tokens.motion.timing[timing]} height ${tokens.motion.easing[easing]}`;\n\n const { prefersReducedMotion } = useBrowserPreferences();\n\n const raf1 = useRef<number>();\n const raf2 = useRef<number>();\n const elementRef = useRef<T>(null);\n\n const handleTransitionEnd = useCallback(\n (event: TransitionEvent) => {\n const element = elementRef.current;\n\n // Ignore bubbling transitions from within container\n if (element && event.target === element) {\n element.removeAttribute(\"style\");\n options?.onTransitionEnd?.(isExpanded, elementRef);\n }\n },\n [options, isExpanded],\n );\n\n const runAnimation = useCallback(() => {\n const element = elementRef.current;\n\n if (!element) return;\n\n if (wasExpanded === undefined) {\n // Første render\n element.dataset.expanded = isExpanded ? \"true\" : \"false\";\n }\n\n if ((!isExpanded && !wasExpanded) || (isExpanded && wasExpanded)) {\n // Ingen endring\n return;\n }\n\n options?.onTransitionStart?.(isExpanded, elementRef);\n\n if (prefersReducedMotion) {\n element.removeAttribute(\"style\");\n element.dataset.expanded = isExpanded ? \"true\" : \"false\";\n options?.onTransitionEnd?.(isExpanded, elementRef); // make sure to call callback when animation is off\n return;\n }\n\n if (isExpanded) {\n expandElement(elementRef, transition, raf1, raf2);\n } else {\n collapseElement(elementRef, transition, raf1, raf2);\n }\n }, [wasExpanded, isExpanded, options, prefersReducedMotion, transition]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Vi trigger med isExpanded\n useEffect(() => {\n runAnimation();\n }, [isExpanded, runAnimation]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies:\n useEffect(() => {\n const element = elementRef.current;\n if (element) {\n element.addEventListener(\"transitionend\", handleTransitionEnd);\n }\n\n return () => {\n if (element) {\n element.removeEventListener(\n \"transitionend\",\n handleTransitionEnd,\n );\n }\n };\n }, [isExpanded]);\n\n useEffect(() => {\n const r1 = raf1.current;\n const r2 = raf2.current;\n return () => {\n r1 && cancelAnimationFrame(r1);\n r2 && cancelAnimationFrame(r2);\n };\n }, []);\n\n return [elementRef, runAnimation];\n}\n"],"names":["useAnimatedHeightBetween","isExpanded","options","wasExpanded","usePreviousValue","easing","timing","transition","tokens","motion","prefersReducedMotion","useBrowserPreferences","raf1","useRef","raf2","elementRef","handleTransitionEnd","useCallback","event","element","current","target","removeAttribute","_a","onTransitionEnd","call","runAnimation","dataset","expanded","onTransitionStart","_b","expandedHeight","scrollHeight","requestAnimationFrame","style","removeProperty","collapsedHeight","getBoundingClientRect","height","setProperty","expandElement","collapseElement","useEffect","addEventListener","removeEventListener","r1","r2","cancelAnimationFrame"],"mappings":"wQAiFgB,SAAAA,EACZC,EACAC,GAEMC,MAAAA,EAAcC,EAAiBH,GAC/BI,GAAS,MAAAH,OAAA,EAAAA,EAASG,SAhFN,WAiFZC,GAAS,MAAAJ,OAAA,EAAAA,EAASI,SAhFN,aAiFZC,EAAa,GAAGC,EAAOC,OAAOH,OAAOA,aAAkBE,EAAOC,OAAOJ,OAAOA,MAE1EK,qBAAAA,GAAyBC,IAE3BC,EAAOC,IACPC,EAAOD,IACPE,EAAaF,EAAU,MAEvBG,EAAsBC,GACvBC,UACG,MAAMC,EAAUJ,EAAWK,QAGvBD,GAAWD,EAAMG,SAAWF,IAC5BA,EAAQG,gBAAgB,SACf,OAAAC,EAAA,MAAArB,SAAAA,EAAAsB,kBAAAD,EAAAE,KAAAvB,EAAkBD,EAAYc,GAAAA,GAG/C,CAACb,EAASD,IAGRyB,EAAeT,GAAY,aAC7B,MAAME,EAAUJ,EAAWK,QAE3B,GAAKD,SAEe,IAAhBhB,IAEQgB,EAAAQ,QAAQC,SAAW3B,EAAa,OAAS,YAG/CA,IAAeE,GAAiBF,GAAcE,IAOpD,CAFSoB,GAAA,OAAAA,EAAA,MAAArB,OAAA,EAAAA,EAAA2B,oBAAAN,EAAAE,KAAAvB,EAAoBD,EAAYc,GAErCL,EAIA,OAHAS,EAAQG,gBAAgB,SAChBH,EAAAQ,QAAQC,SAAW3B,EAAa,OAAS,aACxC,OAAA6B,EAAA,MAAA5B,SAAAA,EAAAsB,kBAAAM,EAAAL,KAAAvB,EAAkBD,EAAYc,IAIvCd,EA3FZ,SACIc,EACAR,EACAK,EACAE,GAEA,MAAMK,EAAUJ,EAAWK,QAE3B,IAAKD,EAAS,OAEdA,EAAQG,gBAAgB,SACxB,MAAMS,EAAiBZ,EAAQa,aAE1BpB,EAAAQ,QAAUa,uBAAsB,KAEzBd,EAAAe,MAAMC,eAAe,cAC7BhB,EAAQQ,QAAQC,SAAW,QACrBQ,MAAAA,EAAkBjB,EAAQkB,wBAAwBC,OAGxDnB,EAAQe,MAAMK,YAAY,SAAU,GAAGH,OAC/BjB,EAAAe,MAAMK,YAAY,aAAc,UAEnCzB,EAAAM,QAAUa,uBAAsB,KAEzBd,EAAAe,MAAMK,YAAY,aAAchC,GACxCY,EAAQe,MAAMK,YAAY,SAAU,GAAGR,OACvCZ,EAAQQ,QAAQC,SAAW,MAAA,GAC9B,GAET,CA8D0BY,CAAAzB,EAAYR,EAAYK,EAAME,GA7HxD,SACIC,EACAR,EACAK,EACAE,GAEA,MAAMK,EAAUJ,EAAWK,QAE3B,IAAKD,EAAS,OAEdA,EAAQG,gBAAgB,SACxB,MAAMS,EAAiBZ,EAAQa,aAE1BpB,EAAAQ,QAAUa,uBAAsB,KAEzBd,EAAAe,MAAMC,eAAe,cAC7BhB,EAAQQ,QAAQC,SAAW,QACrBQ,MAAAA,EAAkBjB,EAAQkB,wBAAwBC,OACxDnB,EAAQQ,QAAQC,SAAW,OAG3BT,EAAQe,MAAMK,YAAY,SAAU,GAAGR,OAC/BZ,EAAAe,MAAMK,YAAY,aAAc,UAEnCzB,EAAAM,QAAUa,uBAAsB,KAEzBd,EAAAe,MAAMK,YAAY,aAAchC,GACxCY,EAAQe,MAAMK,YAAY,SAAU,GAAGH,OACvCjB,EAAQQ,QAAQC,SAAW,OAAA,GAC9B,GAET,CAgG4Ba,CAAA1B,EAAYR,EAAYK,EAAME,EAAI,IAEvD,CAACX,EAAaF,EAAYC,EAASQ,EAAsBH,IAG5D,OAAAmC,GAAU,KACOhB,GAAA,GACd,CAACzB,EAAYyB,IAGhBgB,GAAU,KACN,MAAMvB,EAAUJ,EAAWK,QAC3B,OAAID,GACQA,EAAAwB,iBAAiB,gBAAiB3B,GAGvC,KACCG,GACQA,EAAAyB,oBACJ,gBACA5B,EACJ,CAER,GACD,CAACf,IAEJyC,GAAU,KACN,MAAMG,EAAKjC,EAAKQ,QACV0B,EAAKhC,EAAKM,QAChB,MAAO,KACHyB,GAAME,qBAAqBF,GAC3BC,GAAMC,qBAAqBD,EAAE,CACjC,GACD,IAEI,CAAC/B,EAAYW,EACxB"}
1
+ {"version":3,"file":"useAnimatedHeightBetween.js","sources":["../../../../src/hooks/useAnimatedHeight/useAnimatedHeightBetween.ts"],"sourcesContent":["import { type RefObject, useCallback, useEffect, useRef } from \"react\";\nimport tokens from \"../../core/tokens.js\";\nimport { useBrowserPreferences } from \"../useBrowserPreferences/useBrowserPreferences.js\";\nimport { usePreviousValue } from \"../usePreviousValue/usePreviousValue.js\";\nimport type { UseAnimatedHeightOptions } from \"./types.js\";\n\nconst defaultEasing = \"standard\";\nconst defaultTiming = \"productive\";\n\nfunction collapseElement<T extends HTMLElement>(\n elementRef: RefObject<T | null>,\n transition: string,\n raf1: React.MutableRefObject<number | undefined>,\n raf2: React.MutableRefObject<number | undefined>,\n) {\n const element = elementRef.current;\n\n if (!element) return;\n\n element.removeAttribute(\"style\");\n const expandedHeight = element.scrollHeight;\n\n raf1.current = requestAnimationFrame(() => {\n // Hent kollapset høyde\n element.style.removeProperty(\"transition\");\n element.dataset.expanded = \"false\";\n const collapsedHeight = element.getBoundingClientRect().height;\n element.dataset.expanded = \"true\";\n\n // Sett høyde tilbake til utvidet høyde\n element.style.setProperty(\"height\", `${expandedHeight}px`);\n element.style.setProperty(\"overflow-y\", \"hidden\");\n\n raf2.current = requestAnimationFrame(() => {\n // Sett høyde til kollapset høyde og start transition\n element.style.setProperty(\"transition\", transition);\n element.style.setProperty(\"height\", `${collapsedHeight}px`);\n element.dataset.expanded = \"false\";\n });\n });\n}\n\nfunction expandElement<T extends HTMLElement>(\n elementRef: RefObject<T | null>,\n transition: string,\n raf1: React.MutableRefObject<number | undefined>,\n raf2: React.MutableRefObject<number | undefined>,\n) {\n const element = elementRef.current;\n\n if (!element) return;\n\n element.removeAttribute(\"style\");\n const expandedHeight = element.scrollHeight;\n\n raf1.current = requestAnimationFrame(() => {\n // Hent utvidet høyde\n element.style.removeProperty(\"transition\");\n element.dataset.expanded = \"false\";\n const collapsedHeight = element.getBoundingClientRect().height;\n\n // Sett høyde tilbake til kollapset høyde\n element.style.setProperty(\"height\", `${collapsedHeight}px`);\n element.style.setProperty(\"overflow-y\", \"hidden\");\n\n raf2.current = requestAnimationFrame(() => {\n // Sett høyde til utvidet høyde og start transition\n element.style.setProperty(\"transition\", transition);\n element.style.setProperty(\"height\", `${expandedHeight}px`);\n element.dataset.expanded = \"true\";\n });\n });\n}\n\n/**\n * Lar deg enklere animere mellom to tilstander, gitt ved å sette `data-expanded` på et element til `true` eller `false`.\n * Du bestemmer selv hvilke stiler elementet skal ha i de to tilstandene (vha CSS/Sass), og høyden animeres dersom den endrer seg.\n * @param isExpanded indikerer om elementet skal være utvidet eller ikke\n * @param options konfigurasjon for animasjonen, og lyttere for når animasjonen starter og slutter\n * @returns En tuple med referanse til elementet og en funksjon som kan trigge animasjonen\n */\nexport function useAnimatedHeightBetween<T extends HTMLElement>(\n isExpanded: boolean,\n options?: Omit<UseAnimatedHeightOptions<T>, \"display\" | \"onFirstVisible\">,\n): [RefObject<T>, () => void] {\n const wasExpanded = usePreviousValue(isExpanded);\n const easing = options?.easing || defaultEasing;\n const timing = options?.timing || defaultTiming;\n const transition = `${tokens.motion.timing[timing]} height ${tokens.motion.easing[easing]}`;\n\n const { prefersReducedMotion } = useBrowserPreferences();\n\n const raf1 = useRef<number>();\n const raf2 = useRef<number>();\n const elementRef = useRef<T>(null);\n\n const handleTransitionEnd = useCallback(\n (event: TransitionEvent) => {\n const element = elementRef.current;\n\n // Ignore bubbling transitions from within container\n if (element && event.target === element) {\n element.removeAttribute(\"style\");\n options?.onTransitionEnd?.(isExpanded, elementRef);\n }\n },\n [options, isExpanded],\n );\n\n const runAnimation = useCallback(() => {\n const element = elementRef.current;\n\n if (!element) return;\n\n if (wasExpanded === undefined) {\n // Første render\n element.dataset.expanded = isExpanded ? \"true\" : \"false\";\n }\n\n if ((!isExpanded && !wasExpanded) || (isExpanded && wasExpanded)) {\n // Ingen endring\n return;\n }\n\n options?.onTransitionStart?.(isExpanded, elementRef);\n\n if (prefersReducedMotion) {\n element.removeAttribute(\"style\");\n element.dataset.expanded = isExpanded ? \"true\" : \"false\";\n options?.onTransitionEnd?.(isExpanded, elementRef); // make sure to call callback when animation is off\n return;\n }\n\n if (isExpanded) {\n expandElement(elementRef, transition, raf1, raf2);\n } else {\n collapseElement(elementRef, transition, raf1, raf2);\n }\n }, [wasExpanded, isExpanded, options, prefersReducedMotion, transition]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Vi trigger med isExpanded\n useEffect(() => {\n runAnimation();\n }, [isExpanded, runAnimation]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies:\n useEffect(() => {\n const element = elementRef.current;\n if (element) {\n element.addEventListener(\"transitionend\", handleTransitionEnd);\n }\n\n return () => {\n if (element) {\n element.removeEventListener(\n \"transitionend\",\n handleTransitionEnd,\n );\n }\n };\n }, [isExpanded]);\n\n useEffect(() => {\n const r1 = raf1.current;\n const r2 = raf2.current;\n return () => {\n r1 && cancelAnimationFrame(r1);\n r2 && cancelAnimationFrame(r2);\n };\n }, []);\n\n return [elementRef, runAnimation];\n}\n"],"names":["useAnimatedHeightBetween","isExpanded","options","wasExpanded","usePreviousValue","easing","timing","transition","tokens","motion","prefersReducedMotion","useBrowserPreferences","raf1","useRef","raf2","elementRef","handleTransitionEnd","useCallback","event","element","current","target","removeAttribute","onTransitionEnd","runAnimation","dataset","expanded","onTransitionStart","expandedHeight","scrollHeight","requestAnimationFrame","style","removeProperty","collapsedHeight","getBoundingClientRect","height","setProperty","expandElement","collapseElement","useEffect","addEventListener","removeEventListener","r1","r2","cancelAnimationFrame"],"mappings":"wQAiFgB,SAAAA,EACZC,EACAC,GAEM,MAAAC,EAAcC,EAAiBH,GAC/BI,EAASH,GAASG,QAhFN,WAiFZC,EAASJ,GAASI,QAhFN,aAiFZC,EAAa,GAAGC,EAAOC,OAAOH,OAAOA,aAAkBE,EAAOC,OAAOJ,OAAOA,MAE1EK,qBAAAA,GAAyBC,IAE3BC,EAAOC,IACPC,EAAOD,IACPE,EAAaF,EAAU,MAEvBG,EAAsBC,GACvBC,IACG,MAAMC,EAAUJ,EAAWK,QAGvBD,GAAWD,EAAMG,SAAWF,IAC5BA,EAAQG,gBAAgB,SACfpB,GAAAqB,kBAAkBtB,EAAYc,GAAU,GAGzD,CAACb,EAASD,IAGRuB,EAAeP,GAAY,KAC7B,MAAME,EAAUJ,EAAWK,QAE3B,GAAKD,SAEe,IAAhBhB,IAEQgB,EAAAM,QAAQC,SAAWzB,EAAa,OAAS,YAG/CA,IAAeE,GAAiBF,GAAcE,IAOpD,CAAA,GAFSD,GAAAyB,oBAAoB1B,EAAYc,GAErCL,EAIA,OAHAS,EAAQG,gBAAgB,SAChBH,EAAAM,QAAQC,SAAWzB,EAAa,OAAS,aACxCC,GAAAqB,kBAAkBtB,EAAYc,GAIvCd,EA3FZ,SACIc,EACAR,EACAK,EACAE,GAEA,MAAMK,EAAUJ,EAAWK,QAE3B,IAAKD,EAAS,OAEdA,EAAQG,gBAAgB,SACxB,MAAMM,EAAiBT,EAAQU,aAE1BjB,EAAAQ,QAAUU,uBAAsB,KAEzBX,EAAAY,MAAMC,eAAe,cAC7Bb,EAAQM,QAAQC,SAAW,QACrBO,MAAAA,EAAkBd,EAAQe,wBAAwBC,OAGxDhB,EAAQY,MAAMK,YAAY,SAAU,GAAGH,OAC/Bd,EAAAY,MAAMK,YAAY,aAAc,UAEnCtB,EAAAM,QAAUU,uBAAsB,KAEzBX,EAAAY,MAAMK,YAAY,aAAc7B,GACxCY,EAAQY,MAAMK,YAAY,SAAU,GAAGR,OACvCT,EAAQM,QAAQC,SAAW,MAAA,GAC9B,GAET,CA8D0BW,CAAAtB,EAAYR,EAAYK,EAAME,GA7HxD,SACIC,EACAR,EACAK,EACAE,GAEA,MAAMK,EAAUJ,EAAWK,QAE3B,IAAKD,EAAS,OAEdA,EAAQG,gBAAgB,SACxB,MAAMM,EAAiBT,EAAQU,aAE1BjB,EAAAQ,QAAUU,uBAAsB,KAEzBX,EAAAY,MAAMC,eAAe,cAC7Bb,EAAQM,QAAQC,SAAW,QACrBO,MAAAA,EAAkBd,EAAQe,wBAAwBC,OACxDhB,EAAQM,QAAQC,SAAW,OAG3BP,EAAQY,MAAMK,YAAY,SAAU,GAAGR,OAC/BT,EAAAY,MAAMK,YAAY,aAAc,UAEnCtB,EAAAM,QAAUU,uBAAsB,KAEzBX,EAAAY,MAAMK,YAAY,aAAc7B,GACxCY,EAAQY,MAAMK,YAAY,SAAU,GAAGH,OACvCd,EAAQM,QAAQC,SAAW,OAAA,GAC9B,GAET,CAgG4BY,CAAAvB,EAAYR,EAAYK,EAAME,EAAI,IAEvD,CAACX,EAAaF,EAAYC,EAASQ,EAAsBH,IAG5D,OAAAgC,GAAU,KACOf,GAAA,GACd,CAACvB,EAAYuB,IAGhBe,GAAU,KACN,MAAMpB,EAAUJ,EAAWK,QAC3B,OAAID,GACQA,EAAAqB,iBAAiB,gBAAiBxB,GAGvC,KACCG,GACQA,EAAAsB,oBACJ,gBACAzB,EACJ,CAER,GACD,CAACf,IAEJsC,GAAU,KACN,MAAMG,EAAK9B,EAAKQ,QACVuB,EAAK7B,EAAKM,QAChB,MAAO,KACHsB,GAAME,qBAAqBF,GAC3BC,GAAMC,qBAAqBD,EAAE,CACjC,GACD,IAEI,CAAC5B,EAAYS,EACxB"}
@@ -1,2 +1,2 @@
1
- import{useState as e,useRef as r,useCallback as t,useEffect as n}from"react";import s from"../../core/tokens.js";import{useBrowserPreferences as o}from"../useBrowserPreferences/useBrowserPreferences.js";import{usePreviousValue as i}from"../usePreviousValue/usePreviousValue.js";function u(u,a){const l=i(u),[c,m]=e(0),d=(null==a?void 0:a.easing)||"standard",v=(null==a?void 0:a.timing)||"expressive",f=`${s.motion.timing[v]} height ${s.motion.easing[d]}`,{prefersReducedMotion:p}=o(),y=r(),g=r(),P=r(null),h=t((e=>{var r;const t=P.current;t&&e.target===t&&(t.removeAttribute("style"),null==(r=null==a?void 0:a.onTransitionEnd)||r.call(a,P))}),[a]),A=t((()=>{const e=P.current;if(!e)return;e.removeAttribute("style");const r=e.scrollHeight;y.current=requestAnimationFrame((()=>{e.style.removeProperty("transition"),e.style.setProperty("height",`${c}px`),e.style.setProperty("overflow-y","hidden"),g.current=requestAnimationFrame((()=>{e.style.setProperty("transition",f),e.style.setProperty("height",`${r}px`)}))})),m(r)}),[f,c]),E=t((()=>{var e,r;const t=P.current;if(t){if(void 0===l)return void m(t.scrollHeight);if(u!==l){if(null==(e=null==a?void 0:a.onTransitionStart)||e.call(a,P),p)return void(null==(r=null==a?void 0:a.onTransitionEnd)||r.call(a,P));A()}}}),[A,u,l,a,p]);return n((()=>{E()}),[u,E]),n((()=>{const e=P.current;return e&&e.addEventListener("transitionend",h),()=>{e&&e.removeEventListener("transitionend",h)}}),[h]),n((()=>{const e=y.current,r=g.current;return()=>{e&&cancelAnimationFrame(e),r&&cancelAnimationFrame(r)}}),[]),P}export{u as useAutoAnimatedHeight};
1
+ import{useState as e,useRef as r,useCallback as t,useEffect as n}from"react";import s from"../../core/tokens.js";import{useBrowserPreferences as o}from"../useBrowserPreferences/useBrowserPreferences.js";import{usePreviousValue as i}from"../usePreviousValue/usePreviousValue.js";function a(a,u){const c=i(a),[m,l]=e(0),f=u?.easing||"standard",d=u?.timing||"expressive",p=`${s.motion.timing[d]} height ${s.motion.easing[f]}`,{prefersReducedMotion:v}=o(),y=r(),g=r(),P=r(null),h=t((e=>{const r=P.current;r&&e.target===r&&(r.removeAttribute("style"),u?.onTransitionEnd?.(P))}),[u]),A=t((()=>{const e=P.current;if(!e)return;e.removeAttribute("style");const r=e.scrollHeight;y.current=requestAnimationFrame((()=>{e.style.removeProperty("transition"),e.style.setProperty("height",`${m}px`),e.style.setProperty("overflow-y","hidden"),g.current=requestAnimationFrame((()=>{e.style.setProperty("transition",p),e.style.setProperty("height",`${r}px`)}))})),l(r)}),[p,m]),E=t((()=>{const e=P.current;if(e){if(void 0===c)return void l(e.scrollHeight);if(a!==c){if(u?.onTransitionStart?.(P),v)return void u?.onTransitionEnd?.(P);A()}}}),[A,a,c,u,v]);return n((()=>{E()}),[a,E]),n((()=>{const e=P.current;return e&&e.addEventListener("transitionend",h),()=>{e&&e.removeEventListener("transitionend",h)}}),[h]),n((()=>{const e=y.current,r=g.current;return()=>{e&&cancelAnimationFrame(e),r&&cancelAnimationFrame(r)}}),[]),P}export{a as useAutoAnimatedHeight};
2
2
  //# sourceMappingURL=useAutoAnimateHeight.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAutoAnimateHeight.js","sources":["../../../../src/hooks/useAnimatedHeight/useAutoAnimateHeight.ts"],"sourcesContent":["import {\n type RefObject,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport tokens from \"../../core/tokens.js\";\nimport type { Easing, Timing } from \"../../core/types.js\";\nimport { useBrowserPreferences } from \"../useBrowserPreferences/useBrowserPreferences.js\";\nimport { usePreviousValue } from \"../usePreviousValue/usePreviousValue.js\";\n\nconst defaultEasing = \"standard\";\nconst defaultTiming = \"expressive\";\n\nexport type UseAutoAnimatedHeightOptions<T extends HTMLElement> = {\n easing?: Easing;\n /**\n * Overstyr standard timing\n * @default \"expressive\"\n */\n timing?: Timing;\n onTransitionStart?: (ref: RefObject<T | null>) => void;\n onTransitionEnd?: (ref: RefObject<T | null>) => void;\n};\n\n/**\n * Gjør det enklere å animere høyden på et element når innholdet endrer seg, men kan brukes på mer generelt grunnlag.\n * Hooken tar inn en triggerverdi, og når denne endrer seg animeres høyden på elementet dersom den har endret seg.\n * @param trigger verdien som brukes til å trigge animasjonen. Dersom denne endrer seg animeres høyden på elementet.\n * @param options konfigurasjon for animasjonen, og lyttere for når animasjonen starter og slutter\n * @returns en referanse til elementet som skal animeres\n */\nexport function useAutoAnimatedHeight<T extends HTMLElement = HTMLElement>(\n trigger: any,\n options?: UseAutoAnimatedHeightOptions<T>,\n) {\n const previousTriggerValue = usePreviousValue(trigger);\n const [previousHeight, setPreviousHeight] = useState(0);\n\n const easing = options?.easing || defaultEasing;\n const timing = options?.timing || defaultTiming;\n const transition = `${tokens.motion.timing[timing]} height ${tokens.motion.easing[easing]}`;\n\n const { prefersReducedMotion } = useBrowserPreferences();\n\n const raf1 = useRef<number>();\n const raf2 = useRef<number>();\n const elementRef = useRef<T>(null);\n\n const handleTransitionEnd = useCallback(\n (event: TransitionEvent) => {\n const element = elementRef.current;\n\n // Ignore bubbling transitions from within container\n if (element && event.target === element) {\n element.removeAttribute(\"style\");\n options?.onTransitionEnd?.(elementRef);\n }\n },\n [options],\n );\n\n const animateElement = useCallback(() => {\n const element = elementRef.current;\n\n if (!element) return;\n\n element.removeAttribute(\"style\");\n const newHeight = element.scrollHeight;\n\n raf1.current = requestAnimationFrame(() => {\n // Sett høyde tilbake til forrige høyde\n element.style.removeProperty(\"transition\");\n element.style.setProperty(\"height\", `${previousHeight}px`);\n element.style.setProperty(\"overflow-y\", \"hidden\");\n\n raf2.current = requestAnimationFrame(() => {\n // Sett høyde til kollapset høyde og start transition\n element.style.setProperty(\"transition\", transition);\n element.style.setProperty(\"height\", `${newHeight}px`);\n });\n });\n\n setPreviousHeight(newHeight);\n }, [transition, previousHeight]);\n\n const runAnimation = useCallback(() => {\n const element = elementRef.current;\n\n if (!element) return;\n\n if (previousTriggerValue === undefined) {\n // Første render\n setPreviousHeight(element.scrollHeight);\n return;\n }\n\n if (trigger === previousTriggerValue) {\n // Ingen endring\n return;\n }\n\n options?.onTransitionStart?.(elementRef);\n\n if (prefersReducedMotion) {\n options?.onTransitionEnd?.(elementRef); // make sure to call callback when animation is off\n return;\n }\n\n animateElement();\n }, [\n animateElement,\n trigger,\n previousTriggerValue,\n options,\n prefersReducedMotion,\n ]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Vi vil trige med trigger\n useEffect(() => {\n runAnimation();\n }, [trigger, runAnimation]);\n\n useEffect(() => {\n const element = elementRef.current;\n if (element) {\n element.addEventListener(\"transitionend\", handleTransitionEnd);\n }\n\n return () => {\n if (element) {\n element.removeEventListener(\n \"transitionend\",\n handleTransitionEnd,\n );\n }\n };\n }, [handleTransitionEnd]);\n\n useEffect(() => {\n const r1 = raf1.current;\n const r2 = raf2.current;\n return () => {\n r1 && cancelAnimationFrame(r1);\n r2 && cancelAnimationFrame(r2);\n };\n }, []);\n\n return elementRef;\n}\n"],"names":["useAutoAnimatedHeight","trigger","options","previousTriggerValue","usePreviousValue","previousHeight","setPreviousHeight","useState","easing","timing","transition","tokens","motion","prefersReducedMotion","useBrowserPreferences","raf1","useRef","raf2","elementRef","handleTransitionEnd","useCallback","event","element","current","target","removeAttribute","_a","onTransitionEnd","call","animateElement","newHeight","scrollHeight","requestAnimationFrame","style","removeProperty","setProperty","runAnimation","onTransitionStart","_b","useEffect","addEventListener","removeEventListener","r1","r2","cancelAnimationFrame"],"mappings":"sRAiCgB,SAAAA,EACZC,EACAC,GAEMC,MAAAA,EAAuBC,EAAiBH,IACvCI,EAAgBC,GAAqBC,EAAS,GAE/CC,GAAS,MAAAN,OAAAA,EAAAA,EAASM,SA5BN,WA6BZC,GAAS,MAAAP,SAAAA,EAASO,SA5BN,aA6BZC,EAAa,GAAGC,EAAOC,OAAOH,OAAOA,aAAkBE,EAAOC,OAAOJ,OAAOA,MAE1EK,qBAAAA,GAAyBC,IAE3BC,EAAOC,IACPC,EAAOD,IACPE,EAAaF,EAAU,MAEvBG,EAAsBC,GACvBC,UACG,MAAMC,EAAUJ,EAAWK,QAGvBD,GAAWD,EAAMG,SAAWF,IAC5BA,EAAQG,gBAAgB,SACxB,OAAAC,EAAA,MAAAxB,SAAAA,EAASyB,kBAATD,EAAAE,KAAA1B,EAA2BgB,GAAAA,GAGnC,CAAChB,IAGC2B,EAAiBT,GAAY,KAC/B,MAAME,EAAUJ,EAAWK,QAE3B,IAAKD,EAAS,OAEdA,EAAQG,gBAAgB,SACxB,MAAMK,EAAYR,EAAQS,aAErBhB,EAAAQ,QAAUS,uBAAsB,KAEzBV,EAAAW,MAAMC,eAAe,cAC7BZ,EAAQW,MAAME,YAAY,SAAU,GAAG9B,OAC/BiB,EAAAW,MAAME,YAAY,aAAc,UAEnClB,EAAAM,QAAUS,uBAAsB,KAEzBV,EAAAW,MAAME,YAAY,aAAczB,GACxCY,EAAQW,MAAME,YAAY,SAAU,GAAGL,MAAa,GACvD,IAGLxB,EAAkBwB,EAAS,GAC5B,CAACpB,EAAYL,IAEV+B,EAAehB,GAAY,aAC7B,MAAME,EAAUJ,EAAWK,QAE3B,GAAKD,EAEL,CAAA,QAA6B,IAAzBnB,EAGA,YADAG,EAAkBgB,EAAQS,cAI9B,GAAI9B,IAAYE,EAOhB,CAFAuB,GAAA,OAAAA,EAAA,MAAAxB,OAAA,EAAAA,EAASmC,oBAATX,EAAAE,KAAA1B,EAA6BgB,GAEzBL,EAEA,YADA,OAAAyB,EAAA,MAAApC,OAAAA,EAAAA,EAASyB,kBAATW,EAAAV,KAAA1B,EAA2BgB,IAIhBW,GAAA,CAAA,IAChB,CACCA,EACA5B,EACAE,EACAD,EACAW,IAIJ,OAAA0B,GAAU,KACOH,GAAA,GACd,CAACnC,EAASmC,IAEbG,GAAU,KACN,MAAMjB,EAAUJ,EAAWK,QAC3B,OAAID,GACQA,EAAAkB,iBAAiB,gBAAiBrB,GAGvC,KACCG,GACQA,EAAAmB,oBACJ,gBACAtB,EACJ,CAER,GACD,CAACA,IAEJoB,GAAU,KACN,MAAMG,EAAK3B,EAAKQ,QACVoB,EAAK1B,EAAKM,QAChB,MAAO,KACHmB,GAAME,qBAAqBF,GAC3BC,GAAMC,qBAAqBD,EAAE,CACjC,GACD,IAEIzB,CACX"}
1
+ {"version":3,"file":"useAutoAnimateHeight.js","sources":["../../../../src/hooks/useAnimatedHeight/useAutoAnimateHeight.ts"],"sourcesContent":["import {\n type RefObject,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport tokens from \"../../core/tokens.js\";\nimport type { Easing, Timing } from \"../../core/types.js\";\nimport { useBrowserPreferences } from \"../useBrowserPreferences/useBrowserPreferences.js\";\nimport { usePreviousValue } from \"../usePreviousValue/usePreviousValue.js\";\n\nconst defaultEasing = \"standard\";\nconst defaultTiming = \"expressive\";\n\nexport type UseAutoAnimatedHeightOptions<T extends HTMLElement> = {\n easing?: Easing;\n /**\n * Overstyr standard timing\n * @default \"expressive\"\n */\n timing?: Timing;\n onTransitionStart?: (ref: RefObject<T | null>) => void;\n onTransitionEnd?: (ref: RefObject<T | null>) => void;\n};\n\n/**\n * Gjør det enklere å animere høyden på et element når innholdet endrer seg, men kan brukes på mer generelt grunnlag.\n * Hooken tar inn en triggerverdi, og når denne endrer seg animeres høyden på elementet dersom den har endret seg.\n * @param trigger verdien som brukes til å trigge animasjonen. Dersom denne endrer seg animeres høyden på elementet.\n * @param options konfigurasjon for animasjonen, og lyttere for når animasjonen starter og slutter\n * @returns en referanse til elementet som skal animeres\n */\nexport function useAutoAnimatedHeight<T extends HTMLElement = HTMLElement>(\n trigger: any,\n options?: UseAutoAnimatedHeightOptions<T>,\n) {\n const previousTriggerValue = usePreviousValue(trigger);\n const [previousHeight, setPreviousHeight] = useState(0);\n\n const easing = options?.easing || defaultEasing;\n const timing = options?.timing || defaultTiming;\n const transition = `${tokens.motion.timing[timing]} height ${tokens.motion.easing[easing]}`;\n\n const { prefersReducedMotion } = useBrowserPreferences();\n\n const raf1 = useRef<number>();\n const raf2 = useRef<number>();\n const elementRef = useRef<T>(null);\n\n const handleTransitionEnd = useCallback(\n (event: TransitionEvent) => {\n const element = elementRef.current;\n\n // Ignore bubbling transitions from within container\n if (element && event.target === element) {\n element.removeAttribute(\"style\");\n options?.onTransitionEnd?.(elementRef);\n }\n },\n [options],\n );\n\n const animateElement = useCallback(() => {\n const element = elementRef.current;\n\n if (!element) return;\n\n element.removeAttribute(\"style\");\n const newHeight = element.scrollHeight;\n\n raf1.current = requestAnimationFrame(() => {\n // Sett høyde tilbake til forrige høyde\n element.style.removeProperty(\"transition\");\n element.style.setProperty(\"height\", `${previousHeight}px`);\n element.style.setProperty(\"overflow-y\", \"hidden\");\n\n raf2.current = requestAnimationFrame(() => {\n // Sett høyde til kollapset høyde og start transition\n element.style.setProperty(\"transition\", transition);\n element.style.setProperty(\"height\", `${newHeight}px`);\n });\n });\n\n setPreviousHeight(newHeight);\n }, [transition, previousHeight]);\n\n const runAnimation = useCallback(() => {\n const element = elementRef.current;\n\n if (!element) return;\n\n if (previousTriggerValue === undefined) {\n // Første render\n setPreviousHeight(element.scrollHeight);\n return;\n }\n\n if (trigger === previousTriggerValue) {\n // Ingen endring\n return;\n }\n\n options?.onTransitionStart?.(elementRef);\n\n if (prefersReducedMotion) {\n options?.onTransitionEnd?.(elementRef); // make sure to call callback when animation is off\n return;\n }\n\n animateElement();\n }, [\n animateElement,\n trigger,\n previousTriggerValue,\n options,\n prefersReducedMotion,\n ]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Vi vil trige med trigger\n useEffect(() => {\n runAnimation();\n }, [trigger, runAnimation]);\n\n useEffect(() => {\n const element = elementRef.current;\n if (element) {\n element.addEventListener(\"transitionend\", handleTransitionEnd);\n }\n\n return () => {\n if (element) {\n element.removeEventListener(\n \"transitionend\",\n handleTransitionEnd,\n );\n }\n };\n }, [handleTransitionEnd]);\n\n useEffect(() => {\n const r1 = raf1.current;\n const r2 = raf2.current;\n return () => {\n r1 && cancelAnimationFrame(r1);\n r2 && cancelAnimationFrame(r2);\n };\n }, []);\n\n return elementRef;\n}\n"],"names":["useAutoAnimatedHeight","trigger","options","previousTriggerValue","usePreviousValue","previousHeight","setPreviousHeight","useState","easing","timing","transition","tokens","motion","prefersReducedMotion","useBrowserPreferences","raf1","useRef","raf2","elementRef","handleTransitionEnd","useCallback","event","element","current","target","removeAttribute","onTransitionEnd","animateElement","newHeight","scrollHeight","requestAnimationFrame","style","removeProperty","setProperty","runAnimation","onTransitionStart","useEffect","addEventListener","removeEventListener","r1","r2","cancelAnimationFrame"],"mappings":"sRAiCgB,SAAAA,EACZC,EACAC,GAEMC,MAAAA,EAAuBC,EAAiBH,IACvCI,EAAgBC,GAAqBC,EAAS,GAE/CC,EAASN,GAASM,QA5BN,WA6BZC,EAASP,GAASO,QA5BN,aA6BZC,EAAa,GAAGC,EAAOC,OAAOH,OAAOA,aAAkBE,EAAOC,OAAOJ,OAAOA,MAE1EK,qBAAAA,GAAyBC,IAE3BC,EAAOC,IACPC,EAAOD,IACPE,EAAaF,EAAU,MAEvBG,EAAsBC,GACvBC,IACG,MAAMC,EAAUJ,EAAWK,QAGvBD,GAAWD,EAAMG,SAAWF,IAC5BA,EAAQG,gBAAgB,SACxBvB,GAASwB,kBAAkBR,GAAU,GAG7C,CAAChB,IAGCyB,EAAiBP,GAAY,KAC/B,MAAME,EAAUJ,EAAWK,QAE3B,IAAKD,EAAS,OAEdA,EAAQG,gBAAgB,SACxB,MAAMG,EAAYN,EAAQO,aAErBd,EAAAQ,QAAUO,uBAAsB,KAEzBR,EAAAS,MAAMC,eAAe,cAC7BV,EAAQS,MAAME,YAAY,SAAU,GAAG5B,OAC/BiB,EAAAS,MAAME,YAAY,aAAc,UAEnChB,EAAAM,QAAUO,uBAAsB,KAEzBR,EAAAS,MAAME,YAAY,aAAcvB,GACxCY,EAAQS,MAAME,YAAY,SAAU,GAAGL,MAAa,GACvD,IAGLtB,EAAkBsB,EAAS,GAC5B,CAAClB,EAAYL,IAEV6B,EAAed,GAAY,KAC7B,MAAME,EAAUJ,EAAWK,QAE3B,GAAKD,EAEL,CAAA,QAA6B,IAAzBnB,EAGA,YADAG,EAAkBgB,EAAQO,cAI9B,GAAI5B,IAAYE,EAOhB,CAAA,GAFAD,GAASiC,oBAAoBjB,GAEzBL,EAEA,YADAX,GAASwB,kBAAkBR,GAIhBS,GAAA,CAAA,IAChB,CACCA,EACA1B,EACAE,EACAD,EACAW,IAIJ,OAAAuB,GAAU,KACOF,GAAA,GACd,CAACjC,EAASiC,IAEbE,GAAU,KACN,MAAMd,EAAUJ,EAAWK,QAC3B,OAAID,GACQA,EAAAe,iBAAiB,gBAAiBlB,GAGvC,KACCG,GACQA,EAAAgB,oBACJ,gBACAnB,EACJ,CAER,GACD,CAACA,IAEJiB,GAAU,KACN,MAAMG,EAAKxB,EAAKQ,QACViB,EAAKvB,EAAKM,QAChB,MAAO,KACHgB,GAAME,qBAAqBF,GAC3BC,GAAMC,qBAAqBD,EAAE,CACjC,GACD,IAEItB,CACX"}
@@ -11,5 +11,5 @@ export interface UseAriaLiveRegionOptions {
11
11
  * @returns
12
12
  */
13
13
  export declare function useAriaLiveRegion(watch: unknown | unknown[], options?: UseAriaLiveRegionOptions): {
14
- "aria-live": "off" | "assertive" | "polite" | undefined;
14
+ "aria-live": "polite" | "assertive" | "off" | undefined;
15
15
  };
@@ -1,2 +1,2 @@
1
- import{useState as e,useEffect as r}from"react";import{usePreviousValue as s}from"../usePreviousValue/usePreviousValue.js";function i(i,a){const o=s(i),[u,t]=e(!1);return r((()=>{if(Array.isArray(i)&&Array.isArray(o)){for(let e=0;e<i.length;e++)if(i[e]!==o[e]&&!u){t(!0);break}}else o&&i!==o&&!u&&t(!0)}),[i,o,u]),{"aria-live":u?(null==a?void 0:a.politeness)||"polite":void 0}}export{i as useAriaLiveRegion};
1
+ import{useState as e,useEffect as r}from"react";import{usePreviousValue as s}from"../usePreviousValue/usePreviousValue.js";function i(i,a){const o=s(i),[t,u]=e(!1);return r((()=>{if(Array.isArray(i)&&Array.isArray(o)){for(let e=0;e<i.length;e++)if(i[e]!==o[e]&&!t){u(!0);break}}else o&&i!==o&&!t&&u(!0)}),[i,o,t]),{"aria-live":t?a?.politeness||"polite":void 0}}export{i as useAriaLiveRegion};
2
2
  //# sourceMappingURL=useAriaLiveRegion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAriaLiveRegion.js","sources":["../../../../src/hooks/useAriaLiveRegion/useAriaLiveRegion.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { usePreviousValue } from \"../usePreviousValue/usePreviousValue.js\";\n\nexport interface UseAriaLiveRegionOptions {\n /**\n * @default \"polite\"\n */\n politeness?: \"polite\" | \"assertive\" | \"off\";\n}\n\n/**\n * Hjelper for å bare sette aria-live dersom det har skjedd en endring. Unngår at innholdet annonseres ved sidelasting.\n * @param watch Verdi som indikerer at det har skjedd en endring. For eksempel en boolean som styrer en loader, eller selve teksten som skal bli lest opp.\n * @param options Bestem om aria-live skal være polite, assertive eller off.\n * @returns\n */\nexport function useAriaLiveRegion(\n watch: unknown | unknown[],\n options?: UseAriaLiveRegionOptions,\n) {\n const previousValue = usePreviousValue(watch);\n\n const [hasChanged, setHasChanged] = useState(false);\n useEffect(() => {\n if (Array.isArray(watch) && Array.isArray(previousValue)) {\n for (let i = 0; i < watch.length; i++) {\n if (watch[i] !== previousValue[i] && !hasChanged) {\n setHasChanged(true);\n break;\n }\n }\n } else if (previousValue && watch !== previousValue && !hasChanged) {\n setHasChanged(true);\n }\n }, [watch, previousValue, hasChanged]);\n\n return {\n \"aria-live\": hasChanged ? options?.politeness || \"polite\" : undefined,\n };\n}\n"],"names":["useAriaLiveRegion","watch","options","previousValue","usePreviousValue","hasChanged","setHasChanged","useState","useEffect","Array","isArray","i","length","politeness"],"mappings":"2HAgBgB,SAAAA,EACZC,EACAC,GAEMC,MAAAA,EAAgBC,EAAiBH,IAEhCI,EAAYC,GAAiBC,GAAS,GAC7C,OAAAC,GAAU,KACN,GAAIC,MAAMC,QAAQT,IAAUQ,MAAMC,QAAQP,IACtC,IAAA,IAASQ,EAAI,EAAGA,EAAIV,EAAMW,OAAQD,IAC9B,GAAIV,EAAMU,KAAOR,EAAcQ,KAAON,EAAY,CAC9CC,GAAc,GACd,KAAA,OAGDH,GAAiBF,IAAUE,IAAkBE,GACpDC,GAAc,EAAI,GAEvB,CAACL,EAAOE,EAAeE,IAEnB,CACH,YAAaA,GAAa,MAAAH,OAAAA,EAAAA,EAASW,aAAc,cAAW,EAEpE"}
1
+ {"version":3,"file":"useAriaLiveRegion.js","sources":["../../../../src/hooks/useAriaLiveRegion/useAriaLiveRegion.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { usePreviousValue } from \"../usePreviousValue/usePreviousValue.js\";\n\nexport interface UseAriaLiveRegionOptions {\n /**\n * @default \"polite\"\n */\n politeness?: \"polite\" | \"assertive\" | \"off\";\n}\n\n/**\n * Hjelper for å bare sette aria-live dersom det har skjedd en endring. Unngår at innholdet annonseres ved sidelasting.\n * @param watch Verdi som indikerer at det har skjedd en endring. For eksempel en boolean som styrer en loader, eller selve teksten som skal bli lest opp.\n * @param options Bestem om aria-live skal være polite, assertive eller off.\n * @returns\n */\nexport function useAriaLiveRegion(\n watch: unknown | unknown[],\n options?: UseAriaLiveRegionOptions,\n) {\n const previousValue = usePreviousValue(watch);\n\n const [hasChanged, setHasChanged] = useState(false);\n useEffect(() => {\n if (Array.isArray(watch) && Array.isArray(previousValue)) {\n for (let i = 0; i < watch.length; i++) {\n if (watch[i] !== previousValue[i] && !hasChanged) {\n setHasChanged(true);\n break;\n }\n }\n } else if (previousValue && watch !== previousValue && !hasChanged) {\n setHasChanged(true);\n }\n }, [watch, previousValue, hasChanged]);\n\n return {\n \"aria-live\": hasChanged ? options?.politeness || \"polite\" : undefined,\n };\n}\n"],"names":["useAriaLiveRegion","watch","options","previousValue","usePreviousValue","hasChanged","setHasChanged","useState","useEffect","Array","isArray","i","length","politeness"],"mappings":"2HAgBgB,SAAAA,EACZC,EACAC,GAEMC,MAAAA,EAAgBC,EAAiBH,IAEhCI,EAAYC,GAAiBC,GAAS,GAC7C,OAAAC,GAAU,KACN,GAAIC,MAAMC,QAAQT,IAAUQ,MAAMC,QAAQP,IACtC,IAAA,IAASQ,EAAI,EAAGA,EAAIV,EAAMW,OAAQD,IAC9B,GAAIV,EAAMU,KAAOR,EAAcQ,KAAON,EAAY,CAC9CC,GAAc,GACd,KAAA,OAGDH,GAAiBF,IAAUE,IAAkBE,GACpDC,GAAc,EAAI,GAEvB,CAACL,EAAOE,EAAeE,IAEnB,CACH,YAAaA,EAAaH,GAASW,YAAc,cAAW,EAEpE"}
@@ -1,2 +1,2 @@
1
- import{useEffect as e}from"react";function t(t,n){function c(e){null!=t&&t.current&&!t.current.contains(e.target)&&n()}e((()=>(t&&(null==document||document.addEventListener("click",c)),()=>{null==document||document.removeEventListener("click",c)})))}export{t as useClickOutside};
1
+ import{useEffect as e}from"react";function t(t,c){function n(e){t?.current&&!t.current.contains(e.target)&&c()}e((()=>(t&&document?.addEventListener("click",n),()=>{document?.removeEventListener("click",n)})))}export{t as useClickOutside};
2
2
  //# sourceMappingURL=useClickOutside.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useClickOutside.js","sources":["../../../../src/hooks/useClickOutside/useClickOutside.ts"],"sourcesContent":["import { type RefObject, useEffect } from \"react\";\n\n/**\n * Hook for å sette opp en lytter ved klikk utenfor et element.\n * @param ref Elementet du ønsker å sjekke om en klikk er utenfor.\n * @param fn Callback-funksjon som kalles når det klikkes utenfor elementet.\n */\nexport function useClickOutside(\n ref: RefObject<HTMLElement | null> | null,\n fn: () => void,\n): void {\n function handleClickOutside(event: MouseEvent) {\n if (ref?.current && !ref.current.contains(event.target as Node)) {\n fn();\n }\n }\n\n useEffect(() => {\n if (ref) {\n document?.addEventListener(\"click\", handleClickOutside);\n }\n return () => {\n document?.removeEventListener(\"click\", handleClickOutside);\n };\n });\n}\n"],"names":["useClickOutside","ref","fn","handleClickOutside","event","current","contains","target","useEffect","document","addEventListener","removeEventListener"],"mappings":"kCAOgB,SAAAA,EACZC,EACAC,GAEA,SAASC,EAAmBC,GACpB,MAAAH,GAAAA,EAAKI,UAAYJ,EAAII,QAAQC,SAASF,EAAMG,SACzCL,GACP,CAGJM,GAAU,KACFP,UACUQ,mBAAAC,iBAAiB,QAASP,IAEjC,KACO,MAAAM,UAAAA,SAAAE,oBAAoB,QAASR,EAAAA,IAGnD"}
1
+ {"version":3,"file":"useClickOutside.js","sources":["../../../../src/hooks/useClickOutside/useClickOutside.ts"],"sourcesContent":["import { type RefObject, useEffect } from \"react\";\n\n/**\n * Hook for å sette opp en lytter ved klikk utenfor et element.\n * @param ref Elementet du ønsker å sjekke om en klikk er utenfor.\n * @param fn Callback-funksjon som kalles når det klikkes utenfor elementet.\n */\nexport function useClickOutside(\n ref: RefObject<HTMLElement | null> | null,\n fn: () => void,\n): void {\n function handleClickOutside(event: MouseEvent) {\n if (ref?.current && !ref.current.contains(event.target as Node)) {\n fn();\n }\n }\n\n useEffect(() => {\n if (ref) {\n document?.addEventListener(\"click\", handleClickOutside);\n }\n return () => {\n document?.removeEventListener(\"click\", handleClickOutside);\n };\n });\n}\n"],"names":["useClickOutside","ref","fn","handleClickOutside","event","current","contains","target","useEffect","document","addEventListener","removeEventListener"],"mappings":"kCAOgB,SAAAA,EACZC,EACAC,GAEA,SAASC,EAAmBC,GACpBH,GAAKI,UAAYJ,EAAII,QAAQC,SAASF,EAAMG,SACzCL,GACP,CAGJM,GAAU,KACFP,GACUQ,UAAAC,iBAAiB,QAASP,GAEjC,KACOM,UAAAE,oBAAoB,QAASR,EAAkB,IAGrE"}
@@ -1,2 +1,2 @@
1
- import{useRef as e,useState as t,useMemo as r,useEffect as n}from"react";function i(i=200){const o=e(null),[u,s]=t({height:0,width:0}),l=r((()=>function(e,t){let r=!1;return(...n)=>{if(r)return;const i=e(...n);return 0!==t&&(r=!0,window.setTimeout((()=>{r=!1}),t)),i}}((()=>{var e,t;return s({height:(null==(e=o.current)?void 0:e.scrollHeight)||0,width:(null==(t=o.current)?void 0:t.scrollWidth)||0})}),i)),[i]);return n((()=>{var e,t;return s({height:(null==(e=o.current)?void 0:e.scrollHeight)||0,width:(null==(t=o.current)?void 0:t.scrollWidth)||0}),typeof window<"u"&&window.addEventListener("resize",l),()=>{typeof window<"u"&&window.removeEventListener("resize",l)}}),[l]),[o,u]}export{i as useElementDimensions};
1
+ import{useRef as e,useState as t,useMemo as r,useEffect as n}from"react";function i(i=200){const s=e(null),[o,u]=t({height:0,width:0}),c=r((()=>function(e,t){let r=!1;return(...n)=>{if(r)return;const i=e(...n);return 0!==t&&(r=!0,window.setTimeout((()=>{r=!1}),t)),i}}((()=>u({height:s.current?.scrollHeight||0,width:s.current?.scrollWidth||0})),i)),[i]);return n((()=>(u({height:s.current?.scrollHeight||0,width:s.current?.scrollWidth||0}),typeof window<"u"&&window.addEventListener("resize",c),()=>{typeof window<"u"&&window.removeEventListener("resize",c)})),[c]),[s,o]}export{i as useElementDimensions};
2
2
  //# sourceMappingURL=useElementDimensions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useElementDimensions.js","sources":["../../../../src/hooks/useElementDimensions/useElementDimensions.ts"],"sourcesContent":["import { type RefObject, useEffect, useMemo, useRef, useState } from \"react\";\n\n// TODO: Denne er sikkert nyttig flere steder enn her!\n// eslint-disable-next-line\nfunction throttle<R, A extends any[]>(fn: (...args: A) => R, delay: number) {\n let wait = false;\n\n return (...args: A) => {\n if (wait) return undefined;\n\n const result = fn(...args);\n\n if (delay !== 0) {\n wait = true;\n window.setTimeout(() => {\n wait = false;\n }, delay);\n }\n\n return result;\n };\n}\n\nexport type Dimensions = {\n height: number;\n width: number;\n};\n\n/**\n * Lar deg måle størrelsen på et element, og oppdatere målene når vinduet endrer størrelse.\n * @param throttleDelay Antall milisekunder som skal gå mellom hver gang dimensjonene oppdateres.\n * @returns Ref til elementet som skal måles, og dimensjonene til elementet.\n */\nexport function useElementDimensions<T extends HTMLElement>(\n throttleDelay = 200,\n): [RefObject<T>, Dimensions] {\n const elementRef = useRef<T>(null);\n const [dimensions, setDimensions] = useState<Dimensions>({\n height: 0,\n width: 0,\n });\n\n const throttledSetDimensions = useMemo(\n () =>\n throttle(\n () =>\n setDimensions({\n height: elementRef.current?.scrollHeight || 0,\n width: elementRef.current?.scrollWidth || 0,\n }),\n throttleDelay,\n ),\n [throttleDelay],\n );\n\n useEffect(() => {\n setDimensions({\n height: elementRef.current?.scrollHeight || 0,\n width: elementRef.current?.scrollWidth || 0,\n });\n\n typeof window !== \"undefined\" &&\n window.addEventListener(\"resize\", throttledSetDimensions);\n\n return () => {\n typeof window !== \"undefined\" &&\n window.removeEventListener(\"resize\", throttledSetDimensions);\n };\n }, [throttledSetDimensions]);\n\n return [elementRef, dimensions];\n}\n"],"names":["useElementDimensions","throttleDelay","elementRef","useRef","dimensions","setDimensions","useState","height","width","throttledSetDimensions","useMemo","fn","delay","wait","args","result","window","setTimeout","throttle","_a","current","scrollHeight","_b","scrollWidth","useEffect","addEventListener","removeEventListener"],"mappings":"yEAiCgB,SAAAA,EACZC,EAAgB,KAEVC,MAAAA,EAAaC,EAAU,OACtBC,EAAYC,GAAiBC,EAAqB,CACrDC,OAAQ,EACRC,MAAO,IAGLC,EAAyBC,GAC3B,IAvCR,SAAsCC,EAAuBC,GACzD,IAAIC,GAAO,EAEX,MAAO,IAAIC,KACP,GAAID,EAAa,OAEXE,MAAAA,EAASJ,KAAMG,GAErB,OAAc,IAAVF,IACOC,GAAA,EACPG,OAAOC,YAAW,KACPJ,GAAA,CAAA,GACRD,IAGAG,CAAAA,CAEf,CAuBYG,EACI,aACI,OAAAb,EAAc,CACVE,QAAQ,OAAAY,EAAAjB,EAAWkB,cAAX,EAAAD,EAAoBE,eAAgB,EAC5Cb,OAAO,OAAAc,EAAApB,EAAWkB,cAAX,EAAAE,EAAoBC,cAAe,GAC7C,GACLtB,IAER,CAACA,IAGL,OAAAuB,GAAU,aACQ,OAAAnB,EAAA,CACVE,QAAQ,OAAAY,EAAAjB,EAAWkB,cAAX,EAAAD,EAAoBE,eAAgB,EAC5Cb,OAAO,OAAAc,EAAApB,EAAWkB,cAAX,EAAAE,EAAoBC,cAAe,WAGvCP,OAAW,KACdA,OAAOS,iBAAiB,SAAUhB,GAE/B,YACIO,OAAW,KACdA,OAAOU,oBAAoB,SAAUjB,EAAsB,CACnE,GACD,CAACA,IAEG,CAACP,EAAYE,EACxB"}
1
+ {"version":3,"file":"useElementDimensions.js","sources":["../../../../src/hooks/useElementDimensions/useElementDimensions.ts"],"sourcesContent":["import { type RefObject, useEffect, useMemo, useRef, useState } from \"react\";\n\n// TODO: Denne er sikkert nyttig flere steder enn her!\n// eslint-disable-next-line\nfunction throttle<R, A extends any[]>(fn: (...args: A) => R, delay: number) {\n let wait = false;\n\n return (...args: A) => {\n if (wait) return undefined;\n\n const result = fn(...args);\n\n if (delay !== 0) {\n wait = true;\n window.setTimeout(() => {\n wait = false;\n }, delay);\n }\n\n return result;\n };\n}\n\nexport type Dimensions = {\n height: number;\n width: number;\n};\n\n/**\n * Lar deg måle størrelsen på et element, og oppdatere målene når vinduet endrer størrelse.\n * @param throttleDelay Antall milisekunder som skal gå mellom hver gang dimensjonene oppdateres.\n * @returns Ref til elementet som skal måles, og dimensjonene til elementet.\n */\nexport function useElementDimensions<T extends HTMLElement>(\n throttleDelay = 200,\n): [RefObject<T>, Dimensions] {\n const elementRef = useRef<T>(null);\n const [dimensions, setDimensions] = useState<Dimensions>({\n height: 0,\n width: 0,\n });\n\n const throttledSetDimensions = useMemo(\n () =>\n throttle(\n () =>\n setDimensions({\n height: elementRef.current?.scrollHeight || 0,\n width: elementRef.current?.scrollWidth || 0,\n }),\n throttleDelay,\n ),\n [throttleDelay],\n );\n\n useEffect(() => {\n setDimensions({\n height: elementRef.current?.scrollHeight || 0,\n width: elementRef.current?.scrollWidth || 0,\n });\n\n typeof window !== \"undefined\" &&\n window.addEventListener(\"resize\", throttledSetDimensions);\n\n return () => {\n typeof window !== \"undefined\" &&\n window.removeEventListener(\"resize\", throttledSetDimensions);\n };\n }, [throttledSetDimensions]);\n\n return [elementRef, dimensions];\n}\n"],"names":["useElementDimensions","throttleDelay","elementRef","useRef","dimensions","setDimensions","useState","height","width","throttledSetDimensions","useMemo","fn","delay","wait","args","result","window","setTimeout","throttle","current","scrollHeight","scrollWidth","useEffect","addEventListener","removeEventListener"],"mappings":"yEAiCgB,SAAAA,EACZC,EAAgB,KAEVC,MAAAA,EAAaC,EAAU,OACtBC,EAAYC,GAAiBC,EAAqB,CACrDC,OAAQ,EACRC,MAAO,IAGLC,EAAyBC,GAC3B,IAvCR,SAAsCC,EAAuBC,GACzD,IAAIC,GAAO,EAEX,MAAO,IAAIC,KACP,GAAID,EAAa,OAEXE,MAAAA,EAASJ,KAAMG,GAErB,OAAc,IAAVF,IACOC,GAAA,EACPG,OAAOC,YAAW,KACPJ,GAAA,CAAA,GACRD,IAGAG,CAAAA,CAEf,CAuBYG,EACI,IACIb,EAAc,CACVE,OAAQL,EAAWiB,SAASC,cAAgB,EAC5CZ,MAAON,EAAWiB,SAASE,aAAe,KAElDpB,IAER,CAACA,IAGLqB,OAAAA,GAAU,KACQjB,EAAA,CACVE,OAAQL,EAAWiB,SAASC,cAAgB,EAC5CZ,MAAON,EAAWiB,SAASE,aAAe,WAGvCL,OAAW,KACdA,OAAOO,iBAAiB,SAAUd,GAE/B,YACIO,OAAW,KACdA,OAAOQ,oBAAoB,SAAUf,EAAsB,IAEpE,CAACA,IAEG,CAACP,EAAYE,EACxB"}
@@ -1,2 +1,2 @@
1
- import{useEffect as e}from"react";function n(n,t){function u(e){null!=n&&n.current&&!n.current.contains(e.target)&&t()}e((()=>(n&&(null==document||document.addEventListener("focusin",u)),()=>{null==document||document.removeEventListener("focusin",u)})))}export{n as useFocusOutside};
1
+ import{useEffect as e}from"react";function t(t,n){function c(e){t?.current&&!t.current.contains(e.target)&&n()}e((()=>(t&&document?.addEventListener("focusin",c),()=>{document?.removeEventListener("focusin",c)})))}export{t as useFocusOutside};
2
2
  //# sourceMappingURL=useFocusOutside.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFocusOutside.js","sources":["../../../../src/hooks/useFocusOutside/useFocusOutside.ts"],"sourcesContent":["import { type RefObject, useEffect } from \"react\";\n\n/**\n * Hook for å lytte etter fokus utenfor et element. Nyttig dersom flere fokuserbare elementer samspiller i en komponent.\n * @param ref Elementet som skal observeres\n * @param fn Funksjon som kalles når fokus flyttes utenfor elementet\n */\nexport function useFocusOutside(\n ref: RefObject<HTMLElement | null> | null,\n fn: () => void,\n): void {\n function handleFocusOutside(event: FocusEvent) {\n if (ref?.current && !ref.current.contains(event.target as Node)) {\n fn();\n }\n }\n\n useEffect(() => {\n if (ref) {\n document?.addEventListener(\"focusin\", handleFocusOutside);\n }\n return () => {\n document?.removeEventListener(\"focusin\", handleFocusOutside);\n };\n });\n}\n"],"names":["useFocusOutside","ref","fn","handleFocusOutside","event","current","contains","target","useEffect","document","addEventListener","removeEventListener"],"mappings":"kCAOgB,SAAAA,EACZC,EACAC,GAEA,SAASC,EAAmBC,GACpB,MAAAH,GAAAA,EAAKI,UAAYJ,EAAII,QAAQC,SAASF,EAAMG,SACzCL,GACP,CAGJM,GAAU,KACFP,UACUQ,mBAAAC,iBAAiB,UAAWP,IAEnC,KACO,MAAAM,UAAAA,SAAAE,oBAAoB,UAAWR,EAAAA,IAGrD"}
1
+ {"version":3,"file":"useFocusOutside.js","sources":["../../../../src/hooks/useFocusOutside/useFocusOutside.ts"],"sourcesContent":["import { type RefObject, useEffect } from \"react\";\n\n/**\n * Hook for å lytte etter fokus utenfor et element. Nyttig dersom flere fokuserbare elementer samspiller i en komponent.\n * @param ref Elementet som skal observeres\n * @param fn Funksjon som kalles når fokus flyttes utenfor elementet\n */\nexport function useFocusOutside(\n ref: RefObject<HTMLElement | null> | null,\n fn: () => void,\n): void {\n function handleFocusOutside(event: FocusEvent) {\n if (ref?.current && !ref.current.contains(event.target as Node)) {\n fn();\n }\n }\n\n useEffect(() => {\n if (ref) {\n document?.addEventListener(\"focusin\", handleFocusOutside);\n }\n return () => {\n document?.removeEventListener(\"focusin\", handleFocusOutside);\n };\n });\n}\n"],"names":["useFocusOutside","ref","fn","handleFocusOutside","event","current","contains","target","useEffect","document","addEventListener","removeEventListener"],"mappings":"kCAOgB,SAAAA,EACZC,EACAC,GAEA,SAASC,EAAmBC,GACpBH,GAAKI,UAAYJ,EAAII,QAAQC,SAASF,EAAMG,SACzCL,GACP,CAGJM,GAAU,KACFP,GACUQ,UAAAC,iBAAiB,UAAWP,GAEnC,KACOM,UAAAE,oBAAoB,UAAWR,EAAkB,IAGvE"}
@@ -1,2 +1,2 @@
1
- import{useRef as e,useEffect as r}from"react";function n(e){return void 0!==e.forEach}const t=()=>typeof window<"u"&&typeof IntersectionObserver<"u",o=(o,s,c,u)=>{const f=e(null);r((()=>{let e=f.current;if(t())if(e&&e.disconnect(),e=new IntersectionObserver(s,u),n(o))for(const r of o)null==e||e.observe(r);else if(o.current&&n(o.current))for(const r of o.current)null==e||e.observe(r);else o.current&&e.observe(o.current);else c&&c();return()=>{t()&&e&&e.disconnect()}}),[o,s,c,u])};export{o as useIntersectionObserver};
1
+ import{useRef as e,useEffect as r}from"react";function t(e){return void 0!==e.forEach}const n=()=>typeof window<"u"&&typeof IntersectionObserver<"u",o=(o,s,c,f)=>{const u=e(null);r((()=>{let e=u.current;if(n())if(e&&e.disconnect(),e=new IntersectionObserver(s,f),t(o))for(const r of o)e?.observe(r);else if(o.current&&t(o.current))for(const r of o.current)e?.observe(r);else o.current&&e.observe(o.current);else c&&c();return()=>{n()&&e&&e.disconnect()}}),[o,s,c,f])};export{o as useIntersectionObserver};
2
2
  //# sourceMappingURL=useIntersectionObserver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useIntersectionObserver.js","sources":["../../../../src/hooks/useIntersectionObserver/useIntersectionObserver.ts"],"sourcesContent":["import {\n type MutableRefObject,\n type RefObject,\n useEffect,\n useRef,\n} from \"react\";\n\ntype ValidElement = HTMLElement | SVGElement;\ntype Target =\n | MutableRefObject<ValidElement>\n | RefObject<ValidElement>\n | MutableRefObject<NodeListOf<ValidElement>>\n | RefObject<NodeListOf<ValidElement>>\n | NodeListOf<ValidElement>;\n\nfunction isNodeList(\n target: Target | ValidElement,\n): target is NodeListOf<ValidElement> {\n return (target as NodeListOf<ValidElement>).forEach !== undefined;\n}\n\nconst hasWindowWithIntersectionObserver = () =>\n typeof window !== \"undefined\" &&\n typeof IntersectionObserver !== \"undefined\";\n\n/**\n * Hook som gjør det enkelt å observere om et element er synlig i viewporten.\n *\n * @param target Elementet eller elementene som skal observeres. Du kan sende in en React ref til et HTMLElement eller SVG Element, eller en NodeList av samme type elementer (returneres f.eks. av document.querySelectorAll), eller en React ref med en NodeList av samme type elementer.\n * @param onIntersect Callback-funksjon som utføres når et av elementene som observeres overlapper angitt mål. Se https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver/IntersectionObserver#parameters for mer info.\n * @param fallback Funksjon som kalles dersom nettleseren ikke støtter IntersectionOpserver-APIet.\n * @param options Objekt med innstillinger for oberveren. Se https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver/IntersectionObserver#parameters for mer info.\n */\nexport const useIntersectionObserver = (\n target: Target,\n onIntersect: IntersectionObserverCallback,\n fallback?: VoidFunction | null,\n options?: Partial<IntersectionObserverInit>,\n): void => {\n const observerRef = useRef<IntersectionObserver>(null);\n\n useEffect(() => {\n let observer = observerRef.current;\n\n if (hasWindowWithIntersectionObserver()) {\n if (observer) {\n observer.disconnect();\n }\n\n observer = new IntersectionObserver(onIntersect, options);\n\n if (isNodeList(target)) {\n for (const element of target) {\n observer?.observe(element);\n }\n } else if (target.current && isNodeList(target.current)) {\n for (const element of target.current) {\n observer?.observe(element);\n }\n } else if (target.current) {\n observer.observe(target.current);\n }\n } else if (fallback) {\n fallback();\n }\n\n return () => {\n if (hasWindowWithIntersectionObserver() && observer) {\n observer.disconnect();\n }\n };\n }, [target, onIntersect, fallback, options]);\n};\n"],"names":["isNodeList","target","forEach","hasWindowWithIntersectionObserver","window","IntersectionObserver","useIntersectionObserver","onIntersect","fallback","options","observerRef","useRef","useEffect","observer","current","disconnect","element","observe"],"mappings":"8CAeA,SAASA,EACLC,GAEA,YAAwD,IAAhDA,EAAoCC,OAChD,CAEA,MAAMC,EAAoC,WAC/BC,OAAW,YACXC,qBAAyB,IAUvBC,EAA0B,CACnCL,EACAM,EACAC,EACAC,KAEMC,MAAAA,EAAcC,EAA6B,MAEjDC,GAAU,KACN,IAAIC,EAAWH,EAAYI,QAE3B,GAAIX,IACIU,GAAAA,GACAA,EAASE,aAGFF,EAAA,IAAIR,qBAAqBE,EAAaE,GAE7CT,EAAWC,GACX,IAAA,MAAWe,KAAWf,EAClB,MAAAY,GAAAA,EAAUI,QAAQD,QAAA,GAEff,EAAOa,SAAWd,EAAWC,EAAOa,SAChC,IAAA,MAAAE,KAAWf,EAAOa,QACzB,MAAAD,GAAAA,EAAUI,QAAQD,QAEff,EAAOa,SACLD,EAAAI,QAAQhB,EAAOa,cAErBN,GACEA,IAGb,MAAO,KACCL,KAAuCU,GACvCA,EAASE,YAAW,CAE5B,GACD,CAACd,EAAQM,EAAaC,EAAUC,GAAQ"}
1
+ {"version":3,"file":"useIntersectionObserver.js","sources":["../../../../src/hooks/useIntersectionObserver/useIntersectionObserver.ts"],"sourcesContent":["import {\n type MutableRefObject,\n type RefObject,\n useEffect,\n useRef,\n} from \"react\";\n\ntype ValidElement = HTMLElement | SVGElement;\ntype Target =\n | MutableRefObject<ValidElement>\n | RefObject<ValidElement>\n | MutableRefObject<NodeListOf<ValidElement>>\n | RefObject<NodeListOf<ValidElement>>\n | NodeListOf<ValidElement>;\n\nfunction isNodeList(\n target: Target | ValidElement,\n): target is NodeListOf<ValidElement> {\n return (target as NodeListOf<ValidElement>).forEach !== undefined;\n}\n\nconst hasWindowWithIntersectionObserver = () =>\n typeof window !== \"undefined\" &&\n typeof IntersectionObserver !== \"undefined\";\n\n/**\n * Hook som gjør det enkelt å observere om et element er synlig i viewporten.\n *\n * @param target Elementet eller elementene som skal observeres. Du kan sende in en React ref til et HTMLElement eller SVG Element, eller en NodeList av samme type elementer (returneres f.eks. av document.querySelectorAll), eller en React ref med en NodeList av samme type elementer.\n * @param onIntersect Callback-funksjon som utføres når et av elementene som observeres overlapper angitt mål. Se https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver/IntersectionObserver#parameters for mer info.\n * @param fallback Funksjon som kalles dersom nettleseren ikke støtter IntersectionOpserver-APIet.\n * @param options Objekt med innstillinger for oberveren. Se https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver/IntersectionObserver#parameters for mer info.\n */\nexport const useIntersectionObserver = (\n target: Target,\n onIntersect: IntersectionObserverCallback,\n fallback?: VoidFunction | null,\n options?: Partial<IntersectionObserverInit>,\n): void => {\n const observerRef = useRef<IntersectionObserver>(null);\n\n useEffect(() => {\n let observer = observerRef.current;\n\n if (hasWindowWithIntersectionObserver()) {\n if (observer) {\n observer.disconnect();\n }\n\n observer = new IntersectionObserver(onIntersect, options);\n\n if (isNodeList(target)) {\n for (const element of target) {\n observer?.observe(element);\n }\n } else if (target.current && isNodeList(target.current)) {\n for (const element of target.current) {\n observer?.observe(element);\n }\n } else if (target.current) {\n observer.observe(target.current);\n }\n } else if (fallback) {\n fallback();\n }\n\n return () => {\n if (hasWindowWithIntersectionObserver() && observer) {\n observer.disconnect();\n }\n };\n }, [target, onIntersect, fallback, options]);\n};\n"],"names":["isNodeList","target","forEach","hasWindowWithIntersectionObserver","window","IntersectionObserver","useIntersectionObserver","onIntersect","fallback","options","observerRef","useRef","useEffect","observer","current","disconnect","element","observe"],"mappings":"8CAeA,SAASA,EACLC,GAEA,YAAwD,IAAhDA,EAAoCC,OAChD,CAEA,MAAMC,EAAoC,WAC/BC,OAAW,YACXC,qBAAyB,IAUvBC,EAA0B,CACnCL,EACAM,EACAC,EACAC,KAEMC,MAAAA,EAAcC,EAA6B,MAEjDC,GAAU,KACN,IAAIC,EAAWH,EAAYI,QAE3B,GAAIX,IACIU,GAAAA,GACAA,EAASE,aAGFF,EAAA,IAAIR,qBAAqBE,EAAaE,GAE7CT,EAAWC,GACX,IAAA,MAAWe,KAAWf,EAClBY,GAAUI,QAAQD,QAAO,GAEtBf,EAAOa,SAAWd,EAAWC,EAAOa,SAChC,IAAA,MAAAE,KAAWf,EAAOa,QACzBD,GAAUI,QAAQD,QAEff,EAAOa,SACLD,EAAAI,QAAQhB,EAAOa,cAErBN,GACEA,IAGb,MAAO,KACCL,KAAuCU,GACvCA,EAASE,YAAW,CAE5B,GACD,CAACd,EAAQM,EAAaC,EAAUC,GAAQ"}
@@ -1,2 +1,2 @@
1
- import{useEffect as e}from"react";function n(n,t,r){function o(e){t&&!t.includes(e.key)||r(e)}"string"==typeof t&&(t=[t]),e((()=>{const e=null==n?void 0:n.current;return e&&e.addEventListener("keydown",o),()=>{e&&e.removeEventListener("keydown",o)}}))}export{n as useKeyListener};
1
+ import{useEffect as e}from"react";function n(n,t,r){function o(e){t&&!t.includes(e.key)||r(e)}"string"==typeof t&&(t=[t]),e((()=>{const e=n?.current;return e&&e.addEventListener("keydown",o),()=>{e&&e.removeEventListener("keydown",o)}}))}export{n as useKeyListener};
2
2
  //# sourceMappingURL=useKeyListener.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useKeyListener.js","sources":["../../../../src/hooks/useKeyListener/useKeyListener.ts"],"sourcesContent":["import { type RefObject, useEffect } from \"react\";\n\n/**\n * Lar deg sette opp en tastaturlytter på et element.\n * @param ref Element som skal observeres\n * @param keys Taster som skal lyttes på\n * @param fn Funksjon som kalles når en tastetrykk observeres\n */\nexport function useKeyListener(\n ref: RefObject<HTMLElement | null> | null,\n keys: string[] | string | null,\n fn: (event: KeyboardEvent) => void,\n): void {\n if (typeof keys === \"string\") {\n // biome-ignore lint/style/noParameterAssign: Dette er helt greit å forstå\n keys = [keys];\n }\n function handleKeyDown(event: KeyboardEvent) {\n if (keys && !keys.includes(event.key)) {\n return;\n }\n fn(event);\n }\n\n useEffect(() => {\n const element = ref?.current;\n if (element) {\n element.addEventListener(\"keydown\", handleKeyDown);\n }\n return () => {\n if (element) {\n element.removeEventListener(\"keydown\", handleKeyDown);\n }\n };\n });\n}\n"],"names":["useKeyListener","ref","keys","fn","handleKeyDown","event","includes","key","useEffect","element","current","addEventListener","removeEventListener"],"mappings":"kCAQgB,SAAAA,EACZC,EACAC,EACAC,GAMA,SAASC,EAAcC,GACfH,IAASA,EAAKI,SAASD,EAAME,MAGjCJ,EAAGE,EAAK,CARQ,iBAATH,IAEPA,EAAO,CAACA,IASZM,GAAU,KACAC,MAAAA,EAAU,MAAAR,OAAA,EAAAA,EAAKS,QACrB,OAAID,GACQA,EAAAE,iBAAiB,UAAWP,GAEjC,KACCK,GACQA,EAAAG,oBAAoB,UAAWR,EAAa,CAE5D,GAER"}
1
+ {"version":3,"file":"useKeyListener.js","sources":["../../../../src/hooks/useKeyListener/useKeyListener.ts"],"sourcesContent":["import { type RefObject, useEffect } from \"react\";\n\n/**\n * Lar deg sette opp en tastaturlytter på et element.\n * @param ref Element som skal observeres\n * @param keys Taster som skal lyttes på\n * @param fn Funksjon som kalles når en tastetrykk observeres\n */\nexport function useKeyListener(\n ref: RefObject<HTMLElement | null> | null,\n keys: string[] | string | null,\n fn: (event: KeyboardEvent) => void,\n): void {\n if (typeof keys === \"string\") {\n // biome-ignore lint/style/noParameterAssign: Dette er helt greit å forstå\n keys = [keys];\n }\n function handleKeyDown(event: KeyboardEvent) {\n if (keys && !keys.includes(event.key)) {\n return;\n }\n fn(event);\n }\n\n useEffect(() => {\n const element = ref?.current;\n if (element) {\n element.addEventListener(\"keydown\", handleKeyDown);\n }\n return () => {\n if (element) {\n element.removeEventListener(\"keydown\", handleKeyDown);\n }\n };\n });\n}\n"],"names":["useKeyListener","ref","keys","fn","handleKeyDown","event","includes","key","useEffect","element","current","addEventListener","removeEventListener"],"mappings":"kCAQgB,SAAAA,EACZC,EACAC,EACAC,GAMA,SAASC,EAAcC,GACfH,IAASA,EAAKI,SAASD,EAAME,MAGjCJ,EAAGE,EAAK,CARQ,iBAATH,IAEPA,EAAO,CAACA,IASZM,GAAU,KACN,MAAMC,EAAUR,GAAKS,QACrB,OAAID,GACQA,EAAAE,iBAAiB,UAAWP,GAEjC,KACCK,GACQA,EAAAG,oBAAoB,UAAWR,EAAa,CAE5D,GAER"}
@@ -1,2 +1,2 @@
1
- import{useEffect as t}from"react";const o=({ref:o,timeout:r=0,autoScroll:e=!0,options:n={behavior:"smooth"}})=>{const u=()=>{null!=o&&o.current&&o.current.scrollIntoView(n)};return t((()=>{if(!e)return;const t=setTimeout(u,r);return()=>clearTimeout(t)}),[o,r,e]),[u]};export{o as useScrollIntoView};
1
+ import{useEffect as t}from"react";const o=({ref:o,timeout:r=0,autoScroll:e=!0,options:c={behavior:"smooth"}})=>{const n=()=>{o?.current&&o.current.scrollIntoView(c)};return t((()=>{if(!e)return;const t=setTimeout(n,r);return()=>clearTimeout(t)}),[o,r,e]),[n]};export{o as useScrollIntoView};
2
2
  //# sourceMappingURL=useScrollIntoView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useScrollIntoView.js","sources":["../../../../src/hooks/useScrollIntoView/useScrollIntoView.tsx"],"sourcesContent":["import { type RefObject, useEffect } from \"react\";\n\ntype ValueOf<T> = T[keyof T];\n\nexport interface ScrollIntoViewProps {\n ref: RefObject<ValueOf<HTMLElementTagNameMap> | null> | null;\n timeout?: number;\n autoScroll?: boolean;\n options?: ScrollIntoViewOptions;\n}\n\ntype ScrollFunction = () => void;\n\nexport const useScrollIntoView = ({\n ref,\n timeout = 0,\n autoScroll = true,\n options = { behavior: \"smooth\" },\n}: ScrollIntoViewProps): [ScrollFunction] => {\n const scrollIntoView: ScrollFunction = () => {\n if (ref?.current) {\n ref.current.scrollIntoView(options);\n }\n };\n\n // biome-ignore lint/correctness/useExhaustiveDependencies:\n useEffect(() => {\n if (!autoScroll) {\n return;\n }\n const scrollFn = setTimeout(scrollIntoView, timeout);\n return () => clearTimeout(scrollFn);\n }, [ref, timeout, autoScroll]);\n\n return [scrollIntoView];\n};\n"],"names":["useScrollIntoView","ref","timeout","autoScroll","options","behavior","scrollIntoView","current","useEffect","scrollFn","setTimeout","clearTimeout"],"mappings":"kCAaO,MAAMA,EAAoB,EAC7BC,IAAAA,EACAC,QAAAA,EAAU,EACVC,WAAAA,GAAa,EACbC,QAAAA,EAAU,CAAEC,SAAU,cAEtB,MAAMC,EAAiC,KAC/B,MAAAL,GAAAA,EAAKM,SACDN,EAAAM,QAAQD,eAAeF,EAAO,EAK1C,OAAAI,GAAU,KACN,IAAKL,EACD,OAEEM,MAAAA,EAAWC,WAAWJ,EAAgBJ,GACrC,MAAA,IAAMS,aAAaF,EAAQ,GACnC,CAACR,EAAKC,EAASC,IAEX,CAACG,EAAc"}
1
+ {"version":3,"file":"useScrollIntoView.js","sources":["../../../../src/hooks/useScrollIntoView/useScrollIntoView.tsx"],"sourcesContent":["import { type RefObject, useEffect } from \"react\";\n\ntype ValueOf<T> = T[keyof T];\n\nexport interface ScrollIntoViewProps {\n ref: RefObject<ValueOf<HTMLElementTagNameMap> | null> | null;\n timeout?: number;\n autoScroll?: boolean;\n options?: ScrollIntoViewOptions;\n}\n\ntype ScrollFunction = () => void;\n\nexport const useScrollIntoView = ({\n ref,\n timeout = 0,\n autoScroll = true,\n options = { behavior: \"smooth\" },\n}: ScrollIntoViewProps): [ScrollFunction] => {\n const scrollIntoView: ScrollFunction = () => {\n if (ref?.current) {\n ref.current.scrollIntoView(options);\n }\n };\n\n // biome-ignore lint/correctness/useExhaustiveDependencies:\n useEffect(() => {\n if (!autoScroll) {\n return;\n }\n const scrollFn = setTimeout(scrollIntoView, timeout);\n return () => clearTimeout(scrollFn);\n }, [ref, timeout, autoScroll]);\n\n return [scrollIntoView];\n};\n"],"names":["useScrollIntoView","ref","timeout","autoScroll","options","behavior","scrollIntoView","current","useEffect","scrollFn","setTimeout","clearTimeout"],"mappings":"kCAaO,MAAMA,EAAoB,EAC7BC,IAAAA,EACAC,QAAAA,EAAU,EACVC,WAAAA,GAAa,EACbC,QAAAA,EAAU,CAAEC,SAAU,cAEtB,MAAMC,EAAiC,KAC/BL,GAAKM,SACDN,EAAAM,QAAQD,eAAeF,EAAO,EAK1C,OAAAI,GAAU,KACN,IAAKL,EACD,OAEEM,MAAAA,EAAWC,WAAWJ,EAAgBJ,GACrC,MAAA,IAAMS,aAAaF,EAAQ,GACnC,CAACR,EAAKC,EAASC,IAEX,CAACG,EAAc"}
@@ -1,2 +1,2 @@
1
- import{useRef as e,useCallback as n}from"react";function r(e){return{x:e.clientX,y:e.clientY}}function t(t){const o=e(!1),u=e(),{onClick:l,onChange:c,onPointerCancel:i,onPointerDown:a,onPointerMove:p,onPointerUp:s}=t,f=n((e=>{o.current||null==l||l(e),o.current=!1}),[l]),P=n((e=>{var n,t;e.preventDefault(),null==(t=(n=e.target).setPointerCapture)||t.call(n,e.pointerId),u.current=r(e),o.current=!1,null==a||a(e)}),[a]),v=n((e=>{if(e.preventDefault(),!u.current)return;const{x:n}=r(e),{x:t}=u.current;n-t>10&&c&&"on"!==o.current?(c(e,!0),o.current="on",u.current=r(e)):t-n>10&&c&&"off"!==o.current&&(c(e,!1),o.current="off",u.current=r(e)),null==p||p(e)}),[p,c]),C=n((e=>{var n,r;e.preventDefault(),null==(r=(n=e.target).releasePointerCapture)||r.call(n,e.pointerId),u.current=void 0,"pointerup"===e.type?null==s||s(e):null==i||i(e)}),[s,i]);return{swipeHandled:o,gestureHandlers:{onClick:f,onPointerDown:P,onPointerMove:v,onPointerUp:C,onPointerCancel:C}}}export{t as useSwipeGesture};
1
+ import{useRef as e,useCallback as n}from"react";function r(e){return{x:e.clientX,y:e.clientY}}function t(t){const o=e(!1),u=e(),{onClick:c,onChange:i,onPointerCancel:a,onPointerDown:p,onPointerMove:l,onPointerUp:s}=t,f=n((e=>{o.current||c?.(e),o.current=!1}),[c]),P=n((e=>{e.preventDefault(),e.target.setPointerCapture?.(e.pointerId),u.current=r(e),o.current=!1,p?.(e)}),[p]),C=n((e=>{if(e.preventDefault(),!u.current)return;const{x:n}=r(e),{x:t}=u.current;n-t>10&&i&&"on"!==o.current?(i(e,!0),o.current="on",u.current=r(e)):t-n>10&&i&&"off"!==o.current&&(i(e,!1),o.current="off",u.current=r(e)),l?.(e)}),[l,i]),d=n((e=>{e.preventDefault(),e.target.releasePointerCapture?.(e.pointerId),u.current=void 0,"pointerup"===e.type?s?.(e):a?.(e)}),[s,a]);return{swipeHandled:o,gestureHandlers:{onClick:f,onPointerDown:P,onPointerMove:C,onPointerUp:d,onPointerCancel:d}}}export{t as useSwipeGesture};
2
2
  //# sourceMappingURL=useSwipeGesture.js.map