@fremtind/jokul 4.3.0 → 5.0.0-next.1

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 (609) hide show
  1. package/README.md +1 -1
  2. package/build/build-stats.html +1 -1
  3. package/build/cjs/components/beta/description-list/DescriptionList.cjs +2 -0
  4. package/build/cjs/components/beta/description-list/DescriptionList.cjs.map +1 -0
  5. package/build/cjs/components/beta/description-list/DescriptionListItem.cjs +2 -0
  6. package/build/cjs/components/beta/description-list/DescriptionListItem.cjs.map +1 -0
  7. package/build/cjs/{components-beta → components/beta}/description-list/index.d.cts +2 -2
  8. package/build/cjs/components/beta/nav-link/NavLink.cjs +2 -0
  9. package/build/cjs/components/beta/nav-link/NavLink.cjs.map +1 -0
  10. package/build/cjs/components/beta/nav-link/index.d.cts +1 -0
  11. package/build/cjs/{components-beta → components/beta}/nav-link/types.d.cts +1 -1
  12. package/build/cjs/components/beta/select/Select.cjs +2 -0
  13. package/build/cjs/components/beta/select/Select.cjs.map +1 -0
  14. package/build/cjs/components/beta/select/index.d.cts +2 -0
  15. package/build/cjs/{components-beta → components/beta}/select/types.d.cts +1 -1
  16. package/build/cjs/components/breadcrumb/types.d.cts +1 -1
  17. package/build/cjs/components/checkbox/types.d.cts +1 -1
  18. package/build/cjs/components/cookie-consent/types.d.cts +1 -1
  19. package/build/cjs/components/datepicker/types.d.cts +1 -1
  20. package/build/cjs/components/description-list/index.cjs +1 -1
  21. package/build/cjs/components/description-list/index.d.cts +3 -3
  22. package/build/cjs/components/description-list/types.d.cts +1 -1
  23. package/build/cjs/components/feedback/feedbackContext.cjs.map +1 -1
  24. package/build/cjs/components/feedback/feedbackContext.d.cts +1 -1
  25. package/build/cjs/components/feedback/followup/followupContext.cjs.map +1 -1
  26. package/build/cjs/components/feedback/followup/followupContext.d.cts +1 -1
  27. package/build/cjs/components/feedback/main-question/mainQuestionContext.cjs.map +1 -1
  28. package/build/cjs/components/feedback/main-question/mainQuestionContext.d.cts +1 -1
  29. package/build/cjs/components/feedback/questions/smileyUtils.cjs.map +1 -1
  30. package/build/cjs/components/file-input/internal/Dropzone.cjs.map +1 -1
  31. package/build/cjs/components/file-input/internal/Dropzone.d.cts +1 -1
  32. package/build/cjs/components/file-input/internal/fileInputContext.cjs.map +1 -1
  33. package/build/cjs/components/file-input/internal/fileInputContext.d.cts +1 -1
  34. package/build/cjs/components/icon/development/internal/IconsExampleGrid.d.cts +1 -1
  35. package/build/cjs/components/input-group/InputGroup.d.cts +2 -2
  36. package/build/cjs/components/input-group/types.d.cts +1 -1
  37. package/build/cjs/components/link/Link.cjs +1 -1
  38. package/build/cjs/components/link/Link.cjs.map +1 -1
  39. package/build/cjs/components/link/Link.d.cts +2 -2
  40. package/build/cjs/components/link/types.d.cts +4 -1
  41. package/build/cjs/components/link-list/LinkList.d.cts +1 -1
  42. package/build/cjs/components/list/ListItem.cjs.map +1 -1
  43. package/build/cjs/components/list/ListItem.d.cts +1 -1
  44. package/build/cjs/components/logo/types.d.cts +1 -1
  45. package/build/cjs/components/menu/types.d.cts +1 -1
  46. package/build/cjs/components/modal/Modal.cjs +1 -1
  47. package/build/cjs/components/modal/Modal.cjs.map +1 -1
  48. package/build/cjs/components/modal/Modal.d.cts +9 -2
  49. package/build/cjs/components/modal/index.d.cts +1 -1
  50. package/build/cjs/components/modal/types.d.cts +1 -19
  51. package/build/cjs/components/nav-link/index.cjs +1 -1
  52. package/build/cjs/components/nav-link/index.d.cts +2 -2
  53. package/build/cjs/components/radio-button/radioGroupContext.cjs.map +1 -1
  54. package/build/cjs/components/radio-button/radioGroupContext.d.cts +1 -1
  55. package/build/cjs/components/screen-reader-only/types.d.cts +1 -1
  56. package/build/cjs/components/select/index.cjs +1 -1
  57. package/build/cjs/components/select/index.d.cts +2 -2
  58. package/build/cjs/components/select/types.d.cts +1 -1
  59. package/build/cjs/components/system-message/types.d.cts +1 -1
  60. package/build/cjs/components/table/types.d.cts +1 -1
  61. package/build/cjs/components/table-of-contents/TableOfContents.d.cts +1 -1
  62. package/build/cjs/components/tabs/types.d.cts +1 -1
  63. package/build/cjs/components/toast/types.d.cts +1 -1
  64. package/build/cjs/components/toggle-switch/types.d.cts +1 -1
  65. package/build/cjs/components/tooltip/Tooltip.cjs.map +1 -1
  66. package/build/cjs/components/tooltip/Tooltip.d.cts +1 -1
  67. package/build/cjs/hooks/useAnimatedHeight/types.d.cts +1 -1
  68. package/build/cjs/hooks/useAnimatedHeight/useAnimatedHeight.cjs +1 -1
  69. package/build/cjs/hooks/useAnimatedHeight/useAnimatedHeight.cjs.map +1 -1
  70. package/build/cjs/hooks/useAnimatedHeight/useAnimatedHeightBetween.cjs +1 -1
  71. package/build/cjs/hooks/useAnimatedHeight/useAnimatedHeightBetween.cjs.map +1 -1
  72. package/build/cjs/hooks/useAnimatedHeight/useAutoAnimateHeight.cjs +1 -1
  73. package/build/cjs/hooks/useAnimatedHeight/useAutoAnimateHeight.cjs.map +1 -1
  74. package/build/cjs/hooks/useAnimatedHeight/useAutoAnimateHeight.d.cts +1 -1
  75. package/build/cjs/hooks/useAriaLiveRegion/useAriaLiveRegion.d.cts +1 -1
  76. package/build/cjs/hooks/useBrowserPreferences/useBrowserPreferences.cjs.map +1 -1
  77. package/build/cjs/hooks/useBrowserPreferences/useBrowserPreferences.d.cts +1 -1
  78. package/build/cjs/hooks/useScreen/useScreen.cjs +1 -1
  79. package/build/cjs/hooks/useScreen/useScreen.cjs.map +1 -1
  80. package/build/cjs/tailwind/plugins/jokulTypographyPlugin.cjs +1 -1
  81. package/build/cjs/tailwind/plugins/jokulTypographyPlugin.cjs.map +1 -1
  82. package/build/cjs/tailwind/tailwindPreset.cjs +1 -1
  83. package/build/cjs/tailwind/tailwindPreset.cjs.map +1 -1
  84. package/build/cjs/tokens.cjs +2 -0
  85. package/build/cjs/tokens.cjs.map +1 -0
  86. package/build/cjs/tokens.d.cts +176 -0
  87. package/build/cjs/utilities/getThemeAndSize.cjs +1 -1
  88. package/build/cjs/utilities/getThemeAndSize.cjs.map +1 -1
  89. package/build/cjs/utilities/getThemeAndSize.d.cts +1 -1
  90. package/build/cjs/utilities/index.d.cts +1 -0
  91. package/build/cjs/{core → utilities}/types.d.cts +1 -1
  92. package/build/es/components/beta/description-list/DescriptionList.js +2 -0
  93. package/build/es/components/beta/description-list/DescriptionList.js.map +1 -0
  94. package/build/es/components/beta/description-list/DescriptionListItem.js +2 -0
  95. package/build/es/components/beta/description-list/DescriptionListItem.js.map +1 -0
  96. package/build/es/{components-beta → components/beta}/description-list/index.d.ts +2 -2
  97. package/build/es/components/beta/nav-link/NavLink.js +2 -0
  98. package/build/es/components/beta/nav-link/NavLink.js.map +1 -0
  99. package/build/es/components/beta/nav-link/index.d.ts +1 -0
  100. package/build/es/{components-beta → components/beta}/nav-link/types.d.ts +1 -1
  101. package/build/es/components/beta/select/Select.js +2 -0
  102. package/build/es/components/beta/select/Select.js.map +1 -0
  103. package/build/es/components/beta/select/index.d.ts +2 -0
  104. package/build/es/{components-beta → components/beta}/select/types.d.ts +1 -1
  105. package/build/es/components/breadcrumb/types.d.ts +1 -1
  106. package/build/es/components/checkbox/types.d.ts +1 -1
  107. package/build/es/components/cookie-consent/types.d.ts +1 -1
  108. package/build/es/components/datepicker/types.d.ts +1 -1
  109. package/build/es/components/description-list/index.d.ts +3 -3
  110. package/build/es/components/description-list/index.js +1 -1
  111. package/build/es/components/description-list/types.d.ts +1 -1
  112. package/build/es/components/feedback/feedbackContext.d.ts +1 -1
  113. package/build/es/components/feedback/feedbackContext.js.map +1 -1
  114. package/build/es/components/feedback/followup/followupContext.d.ts +1 -1
  115. package/build/es/components/feedback/followup/followupContext.js.map +1 -1
  116. package/build/es/components/feedback/main-question/mainQuestionContext.d.ts +1 -1
  117. package/build/es/components/feedback/main-question/mainQuestionContext.js.map +1 -1
  118. package/build/es/components/feedback/questions/smileyUtils.js.map +1 -1
  119. package/build/es/components/file-input/internal/Dropzone.d.ts +1 -1
  120. package/build/es/components/file-input/internal/Dropzone.js.map +1 -1
  121. package/build/es/components/file-input/internal/fileInputContext.d.ts +1 -1
  122. package/build/es/components/file-input/internal/fileInputContext.js.map +1 -1
  123. package/build/es/components/icon/development/internal/IconsExampleGrid.d.ts +1 -1
  124. package/build/es/components/input-group/InputGroup.d.ts +2 -2
  125. package/build/es/components/input-group/types.d.ts +1 -1
  126. package/build/es/components/link/Link.d.ts +2 -2
  127. package/build/es/components/link/Link.js +1 -1
  128. package/build/es/components/link/Link.js.map +1 -1
  129. package/build/es/components/link/types.d.ts +4 -1
  130. package/build/es/components/link-list/LinkList.d.ts +1 -1
  131. package/build/es/components/list/ListItem.d.ts +1 -1
  132. package/build/es/components/list/ListItem.js.map +1 -1
  133. package/build/es/components/logo/types.d.ts +1 -1
  134. package/build/es/components/menu/types.d.ts +1 -1
  135. package/build/es/components/modal/Modal.d.ts +9 -2
  136. package/build/es/components/modal/Modal.js +1 -1
  137. package/build/es/components/modal/Modal.js.map +1 -1
  138. package/build/es/components/modal/index.d.ts +1 -1
  139. package/build/es/components/modal/types.d.ts +1 -19
  140. package/build/es/components/nav-link/index.d.ts +2 -2
  141. package/build/es/components/nav-link/index.js +1 -1
  142. package/build/es/components/radio-button/radioGroupContext.d.ts +1 -1
  143. package/build/es/components/radio-button/radioGroupContext.js.map +1 -1
  144. package/build/es/components/screen-reader-only/types.d.ts +1 -1
  145. package/build/es/components/select/index.d.ts +2 -2
  146. package/build/es/components/select/index.js +1 -1
  147. package/build/es/components/select/types.d.ts +1 -1
  148. package/build/es/components/system-message/types.d.ts +1 -1
  149. package/build/es/components/table/types.d.ts +1 -1
  150. package/build/es/components/table-of-contents/TableOfContents.d.ts +1 -1
  151. package/build/es/components/tabs/types.d.ts +1 -1
  152. package/build/es/components/toast/types.d.ts +1 -1
  153. package/build/es/components/toggle-switch/types.d.ts +1 -1
  154. package/build/es/components/tooltip/Tooltip.d.ts +1 -1
  155. package/build/es/components/tooltip/Tooltip.js.map +1 -1
  156. package/build/es/hooks/useAnimatedHeight/types.d.ts +1 -1
  157. package/build/es/hooks/useAnimatedHeight/useAnimatedHeight.js +1 -1
  158. package/build/es/hooks/useAnimatedHeight/useAnimatedHeight.js.map +1 -1
  159. package/build/es/hooks/useAnimatedHeight/useAnimatedHeightBetween.js +1 -1
  160. package/build/es/hooks/useAnimatedHeight/useAnimatedHeightBetween.js.map +1 -1
  161. package/build/es/hooks/useAnimatedHeight/useAutoAnimateHeight.d.ts +1 -1
  162. package/build/es/hooks/useAnimatedHeight/useAutoAnimateHeight.js +1 -1
  163. package/build/es/hooks/useAnimatedHeight/useAutoAnimateHeight.js.map +1 -1
  164. package/build/es/hooks/useAriaLiveRegion/useAriaLiveRegion.d.ts +1 -1
  165. package/build/es/hooks/useBrowserPreferences/useBrowserPreferences.d.ts +1 -1
  166. package/build/es/hooks/useBrowserPreferences/useBrowserPreferences.js.map +1 -1
  167. package/build/es/hooks/useScreen/useScreen.js +1 -1
  168. package/build/es/hooks/useScreen/useScreen.js.map +1 -1
  169. package/build/es/tailwind/plugins/jokulTypographyPlugin.js +1 -1
  170. package/build/es/tailwind/plugins/jokulTypographyPlugin.js.map +1 -1
  171. package/build/es/tailwind/tailwindPreset.js +1 -1
  172. package/build/es/tailwind/tailwindPreset.js.map +1 -1
  173. package/build/es/tokens.d.ts +176 -0
  174. package/build/es/tokens.js +2 -0
  175. package/build/es/tokens.js.map +1 -0
  176. package/build/es/utilities/getThemeAndSize.d.ts +1 -1
  177. package/build/es/utilities/getThemeAndSize.js +1 -1
  178. package/build/es/utilities/getThemeAndSize.js.map +1 -1
  179. package/build/es/utilities/index.d.ts +1 -0
  180. package/build/es/{core → utilities}/types.d.ts +1 -1
  181. package/package.json +7 -585
  182. package/styles/base.css +1405 -0
  183. package/styles/base.min.css +2 -0
  184. package/styles/components/autosuggest/autosuggest.css +4 -10
  185. package/styles/components/autosuggest/autosuggest.min.css +1 -1
  186. package/styles/components/autosuggest/autosuggest.scss +1 -1
  187. package/styles/{components-beta → components/beta}/description-list/description-list.scss +1 -1
  188. package/styles/{components-beta → components/beta}/nav-link/navlink.css +9 -12
  189. package/styles/components/beta/nav-link/navlink.min.css +1 -0
  190. package/styles/{components-beta → components/beta}/nav-link/navlink.scss +2 -2
  191. package/styles/components/beta/select/_index.scss +3 -0
  192. package/styles/{components-beta → components/beta}/select/select.css +5 -8
  193. package/styles/components/beta/select/select.min.css +1 -0
  194. package/styles/{components-beta → components/beta}/select/select.scss +2 -3
  195. package/styles/components/breadcrumb/breadcrumb.scss +1 -1
  196. package/styles/components/button/button.css +9 -12
  197. package/styles/components/button/button.min.css +1 -1
  198. package/styles/components/button/button.scss +2 -2
  199. package/styles/components/card/card.css +2 -2
  200. package/styles/components/card/card.min.css +1 -1
  201. package/styles/components/card/card.scss +1 -1
  202. package/styles/components/checkbox/checkbox.css +12 -33
  203. package/styles/components/checkbox/checkbox.min.css +1 -1
  204. package/styles/components/checkbox/checkbox.scss +5 -15
  205. package/styles/components/checkbox-panel/checkbox-panel.css +19 -46
  206. package/styles/components/checkbox-panel/checkbox-panel.min.css +1 -1
  207. package/styles/components/checkbox-panel/checkbox-panel.scss +1 -1
  208. package/styles/components/checkbox-panel/development/styles.scss +1 -1
  209. package/styles/components/chip/chip.css +4 -7
  210. package/styles/components/chip/chip.min.css +1 -1
  211. package/styles/components/chip/chip.scss +2 -2
  212. package/styles/components/combobox/combobox.css +12 -24
  213. package/styles/components/combobox/combobox.min.css +1 -1
  214. package/styles/components/combobox/combobox.scss +1 -2
  215. package/styles/components/cookie-consent/cookie-consent.css +1 -5
  216. package/styles/components/cookie-consent/cookie-consent.min.css +1 -1
  217. package/styles/components/cookie-consent/cookie-consent.scss +1 -1
  218. package/styles/components/countdown/countdown.css +2 -2
  219. package/styles/components/countdown/countdown.min.css +1 -1
  220. package/styles/components/datepicker/_calendar-date-button.scss +7 -7
  221. package/styles/components/datepicker/_calendar-navigation-dropdown.scss +2 -2
  222. package/styles/components/datepicker/_calendar-navigation.scss +1 -1
  223. package/styles/components/datepicker/_calendar-table.scss +1 -1
  224. package/styles/components/datepicker/_calendar.scss +7 -6
  225. package/styles/components/datepicker/datepicker.css +13 -33
  226. package/styles/components/datepicker/datepicker.min.css +1 -1
  227. package/styles/components/datepicker/datepicker.scss +1 -1
  228. package/styles/components/description-list/description-list.css +1 -1
  229. package/styles/components/description-list/description-list.min.css +1 -1
  230. package/styles/components/description-list/description-list.scss +2 -2
  231. package/styles/components/expander/expandable.css +3 -3
  232. package/styles/components/expander/expandable.min.css +1 -1
  233. package/styles/components/expander/expandable.scss +1 -1
  234. package/styles/components/feedback/feedback.css +10 -14
  235. package/styles/components/feedback/feedback.min.css +1 -1
  236. package/styles/components/feedback/feedback.scss +1 -1
  237. package/styles/components/file/file.css +5 -13
  238. package/styles/components/file/file.min.css +1 -1
  239. package/styles/components/file/file.scss +2 -2
  240. package/styles/components/file-input/file-input.css +35 -57
  241. package/styles/components/file-input/file-input.min.css +1 -1
  242. package/styles/components/file-input/file-input.scss +1 -1
  243. package/styles/components/help/help.scss +1 -1
  244. package/styles/components/icon/_base-styles.scss +3 -5
  245. package/styles/components/icon/icon.css +9 -30
  246. package/styles/components/icon/icon.min.css +1 -1
  247. package/styles/components/icon/icon.scss +1 -15
  248. package/styles/components/icon-button/icon-button.css +2 -2
  249. package/styles/components/icon-button/icon-button.min.css +1 -1
  250. package/styles/components/icon-button/icon-button.scss +1 -1
  251. package/styles/components/image/image.css +2 -2
  252. package/styles/components/image/image.min.css +1 -1
  253. package/styles/components/image/image.scss +1 -1
  254. package/styles/components/input-group/_field-group.scss +1 -1
  255. package/styles/components/input-group/_labels.scss +1 -1
  256. package/styles/components/input-group/input-group.css +12 -27
  257. package/styles/components/input-group/input-group.min.css +1 -1
  258. package/styles/components/input-group/input-group.scss +1 -1
  259. package/styles/components/input-panel/input-panel.css +7 -13
  260. package/styles/components/input-panel/input-panel.min.css +1 -1
  261. package/styles/components/input-panel/input-panel.scss +2 -2
  262. package/styles/components/link/link.css +6 -7
  263. package/styles/components/link/link.min.css +1 -1
  264. package/styles/components/link/link.scss +1 -2
  265. package/styles/components/link-list/link-list.css +11 -21
  266. package/styles/components/link-list/link-list.min.css +1 -1
  267. package/styles/components/link-list/link-list.scss +1 -1
  268. package/styles/components/list/list.css +6 -27
  269. package/styles/components/list/list.min.css +1 -1
  270. package/styles/components/list/list.scss +11 -15
  271. package/styles/components/loader/loader.css +6 -6
  272. package/styles/components/loader/loader.min.css +1 -1
  273. package/styles/components/loader/loader.scss +1 -1
  274. package/styles/components/loader/skeleton-loader.css +3 -3
  275. package/styles/components/loader/skeleton-loader.min.css +1 -1
  276. package/styles/components/loader/skeleton-loader.scss +1 -1
  277. package/styles/components/logo/logo.css +4 -4
  278. package/styles/components/logo/logo.min.css +1 -1
  279. package/styles/components/logo/logo.scss +1 -1
  280. package/styles/components/menu/_menu-divider.scss +1 -1
  281. package/styles/components/menu/_menu-item.scss +1 -1
  282. package/styles/components/menu/menu.css +6 -21
  283. package/styles/components/menu/menu.min.css +1 -1
  284. package/styles/components/menu/menu.scss +7 -11
  285. package/styles/components/message/message.css +8 -20
  286. package/styles/components/message/message.min.css +1 -1
  287. package/styles/components/message/message.scss +1 -1
  288. package/styles/components/modal/modal.css +35 -125
  289. package/styles/components/modal/modal.min.css +1 -1
  290. package/styles/components/modal/modal.scss +95 -6
  291. package/styles/components/nav-link/nav-link.css +4 -4
  292. package/styles/components/nav-link/nav-link.min.css +1 -1
  293. package/styles/components/nav-link/nav-link.scss +2 -2
  294. package/styles/components/pagination/development/styles.scss +1 -1
  295. package/styles/components/pagination/pagination.css +1 -1
  296. package/styles/components/pagination/pagination.min.css +1 -1
  297. package/styles/components/pagination/pagination.scss +1 -1
  298. package/styles/components/popover/popover.css +5 -17
  299. package/styles/components/popover/popover.min.css +1 -1
  300. package/styles/components/popover/popover.scss +6 -10
  301. package/styles/components/progress-bar/progress-bar.css +3 -3
  302. package/styles/components/progress-bar/progress-bar.min.css +1 -1
  303. package/styles/components/progress-bar/progress-bar.scss +1 -1
  304. package/styles/components/radio-button/radio-button.css +12 -30
  305. package/styles/components/radio-button/radio-button.min.css +1 -1
  306. package/styles/components/radio-button/radio-button.scss +5 -15
  307. package/styles/components/radio-panel/development/styles.scss +1 -1
  308. package/styles/components/radio-panel/radio-panel.css +7 -13
  309. package/styles/components/radio-panel/radio-panel.min.css +1 -1
  310. package/styles/components/radio-panel/radio-panel.scss +1 -1
  311. package/styles/components/search/search-with-submit-button.css +2 -2
  312. package/styles/components/search/search-with-submit-button.min.css +1 -1
  313. package/styles/components/search/search-with-submit-button.scss +1 -1
  314. package/styles/components/search/search.css +8 -14
  315. package/styles/components/search/search.min.css +1 -1
  316. package/styles/components/search/search.scss +1 -1
  317. package/styles/components/segmented-control/segmented-control.css +39 -97
  318. package/styles/components/segmented-control/segmented-control.min.css +1 -1
  319. package/styles/components/segmented-control/segmented-control.scss +1 -1
  320. package/styles/components/select/select.css +12 -21
  321. package/styles/components/select/select.min.css +1 -1
  322. package/styles/components/select/select.scss +1 -2
  323. package/styles/components/summary-table/development/summary-table-example.scss +1 -1
  324. package/styles/components/summary-table/summary-table.css +3 -6
  325. package/styles/components/summary-table/summary-table.min.css +1 -1
  326. package/styles/components/summary-table/summary-table.scss +3 -3
  327. package/styles/components/system-message/system-message.css +4 -7
  328. package/styles/components/system-message/system-message.min.css +1 -1
  329. package/styles/components/system-message/system-message.scss +1 -2
  330. package/styles/components/table/_table-caption.scss +1 -1
  331. package/styles/components/table/_table-cell.scss +1 -1
  332. package/styles/components/table/_table-head.scss +3 -13
  333. package/styles/components/table/_table-header.scss +4 -4
  334. package/styles/components/table/_table-pagination.scss +1 -1
  335. package/styles/components/table/_table-row.scss +1 -1
  336. package/styles/components/table/table.css +18 -46
  337. package/styles/components/table/table.min.css +1 -1
  338. package/styles/components/table/table.scss +1 -1
  339. package/styles/components/table-of-contents/table-of-contents.css +3 -7
  340. package/styles/components/table-of-contents/table-of-contents.min.css +1 -1
  341. package/styles/components/table-of-contents/table-of-contents.scss +1 -1
  342. package/styles/components/tabs/tabs.css +6 -9
  343. package/styles/components/tabs/tabs.min.css +1 -1
  344. package/styles/components/tabs/tabs.scss +1 -1
  345. package/styles/components/tag/tag.css +2 -5
  346. package/styles/components/tag/tag.min.css +1 -1
  347. package/styles/components/tag/tag.scss +2 -2
  348. package/styles/components/text-area/text-area.css +9 -18
  349. package/styles/components/text-area/text-area.min.css +1 -1
  350. package/styles/components/text-area/text-area.scss +1 -1
  351. package/styles/components/text-input/text-input.css +4 -10
  352. package/styles/components/text-input/text-input.min.css +1 -1
  353. package/styles/components/text-input/text-input.scss +2 -3
  354. package/styles/components/toast/toast.css +6 -12
  355. package/styles/components/toast/toast.min.css +1 -1
  356. package/styles/components/toast/toast.scss +1 -2
  357. package/styles/components/toggle-switch/_toggle-slider.scss +1 -1
  358. package/styles/components/toggle-switch/toggle-switch.css +7 -10
  359. package/styles/components/toggle-switch/toggle-switch.min.css +2 -2
  360. package/styles/components/toggle-switch/toggle-switch.scss +1 -1
  361. package/styles/components/tooltip/tooltip.css +4 -8
  362. package/styles/components/tooltip/tooltip.min.css +1 -1
  363. package/styles/components/tooltip/tooltip.scss +1 -1
  364. package/styles/{styles.css → components.css} +329 -734
  365. package/styles/components.min.css +3 -0
  366. package/styles/{styles.scss → components.scss} +2 -2
  367. package/styles/{core/global → global}/_base-class.scss +6 -4
  368. package/styles/{core/global → global}/_top-layer.scss +1 -1
  369. package/styles/hooks/stories/styles.scss +5 -7
  370. package/styles/{core/jkl/_theme.scss → jkl/_forced-colors.scss} +0 -49
  371. package/styles/{core/jkl → jkl}/_index.scss +3 -6
  372. package/styles/{core/jkl → jkl}/_motion.scss +8 -26
  373. package/styles/{core/jkl → jkl}/_reset.scss +2 -2
  374. package/styles/{core/jkl → jkl}/_spacing.scss +1 -6
  375. package/styles/jkl/_tokens.scss +306 -0
  376. package/styles/{core/jkl → jkl}/_typography.scss +5 -98
  377. package/styles/shared/input/shared-input-styles.scss +1 -1
  378. package/styles/shared/track/track.scss +1 -1
  379. package/styles/tailwind.css +171 -0
  380. package/styles/theme/_color-scheme.scss +84 -0
  381. package/styles/{core/theme → theme}/_dynamic-spacing.scss +9 -5
  382. package/styles/theme/_fonts.scss +147 -0
  383. package/styles/theme/_index.scss +5 -0
  384. package/styles/theme/_size.scss +53 -0
  385. package/styles/theme/_tokens.scss +94 -0
  386. package/styles/{core/utility → utility}/_headings.scss +1 -1
  387. package/styles/utility/_paragraphs.scss +24 -0
  388. package/styles/{core/utility → utility}/_screen-reader.scss +1 -1
  389. package/styles/{core/utility → utility}/_spacing.scss +4 -3
  390. package/build/cjs/components-beta/description-list/DescriptionList.cjs +0 -2
  391. package/build/cjs/components-beta/description-list/DescriptionList.cjs.map +0 -1
  392. package/build/cjs/components-beta/description-list/DescriptionListItem.cjs +0 -2
  393. package/build/cjs/components-beta/description-list/DescriptionListItem.cjs.map +0 -1
  394. package/build/cjs/components-beta/nav-link/NavLink.cjs +0 -2
  395. package/build/cjs/components-beta/nav-link/NavLink.cjs.map +0 -1
  396. package/build/cjs/components-beta/nav-link/index.d.cts +0 -1
  397. package/build/cjs/components-beta/select/Select.cjs +0 -2
  398. package/build/cjs/components-beta/select/Select.cjs.map +0 -1
  399. package/build/cjs/components-beta/select/index.d.cts +0 -2
  400. package/build/cjs/core/index.cjs +0 -2
  401. package/build/cjs/core/index.cjs.map +0 -1
  402. package/build/cjs/core/index.d.cts +0 -2
  403. package/build/cjs/core/tokens/build-tailwind-4.cjs +0 -2
  404. package/build/cjs/core/tokens/build-tailwind-4.cjs.map +0 -1
  405. package/build/cjs/core/tokens/build-tailwind-4.d.cts +0 -1
  406. package/build/cjs/core/tokens/style-dictionary/build.cjs +0 -2
  407. package/build/cjs/core/tokens/style-dictionary/build.cjs.map +0 -1
  408. package/build/cjs/core/tokens/style-dictionary/build.d.cts +0 -0
  409. package/build/cjs/core/tokens/style-dictionary/config.cjs +0 -2
  410. package/build/cjs/core/tokens/style-dictionary/config.cjs.map +0 -1
  411. package/build/cjs/core/tokens/style-dictionary/config.d.cts +0 -4
  412. package/build/cjs/core/tokens/style-dictionary/filters/index.cjs +0 -2
  413. package/build/cjs/core/tokens/style-dictionary/filters/index.cjs.map +0 -1
  414. package/build/cjs/core/tokens/style-dictionary/filters/index.d.cts +0 -3
  415. package/build/cjs/core/tokens/style-dictionary/formats/css-dynamic-color-variables.cjs +0 -2
  416. package/build/cjs/core/tokens/style-dictionary/formats/css-dynamic-color-variables.cjs.map +0 -1
  417. package/build/cjs/core/tokens/style-dictionary/formats/css-dynamic-color-variables.d.cts +0 -3
  418. package/build/cjs/core/tokens/style-dictionary/formats/css-theme-variables.cjs +0 -2
  419. package/build/cjs/core/tokens/style-dictionary/formats/css-theme-variables.cjs.map +0 -1
  420. package/build/cjs/core/tokens/style-dictionary/formats/css-theme-variables.d.cts +0 -3
  421. package/build/cjs/core/tokens/style-dictionary/formats/index.cjs +0 -2
  422. package/build/cjs/core/tokens/style-dictionary/formats/index.cjs.map +0 -1
  423. package/build/cjs/core/tokens/style-dictionary/formats/index.d.cts +0 -6
  424. package/build/cjs/core/tokens/style-dictionary/formats/javascript-esm.cjs +0 -2
  425. package/build/cjs/core/tokens/style-dictionary/formats/javascript-esm.cjs.map +0 -1
  426. package/build/cjs/core/tokens/style-dictionary/formats/javascript-esm.d.cts +0 -3
  427. package/build/cjs/core/tokens/style-dictionary/formats/scss-theme-variables.cjs +0 -2
  428. package/build/cjs/core/tokens/style-dictionary/formats/scss-theme-variables.cjs.map +0 -1
  429. package/build/cjs/core/tokens/style-dictionary/formats/scss-theme-variables.d.cts +0 -3
  430. package/build/cjs/core/tokens/style-dictionary/formats/tailwindcss-colors.cjs +0 -2
  431. package/build/cjs/core/tokens/style-dictionary/formats/tailwindcss-colors.cjs.map +0 -1
  432. package/build/cjs/core/tokens/style-dictionary/formats/tailwindcss-colors.d.cts +0 -3
  433. package/build/cjs/core/tokens/style-dictionary/register.cjs +0 -2
  434. package/build/cjs/core/tokens/style-dictionary/register.cjs.map +0 -1
  435. package/build/cjs/core/tokens/style-dictionary/register.d.cts +0 -1
  436. package/build/cjs/core/tokens/style-dictionary/transforms/index.cjs +0 -2
  437. package/build/cjs/core/tokens/style-dictionary/transforms/index.cjs.map +0 -1
  438. package/build/cjs/core/tokens/style-dictionary/transforms/index.d.cts +0 -2
  439. package/build/cjs/core/tokens/style-dictionary/transforms/strip-light-dark.cjs +0 -2
  440. package/build/cjs/core/tokens/style-dictionary/transforms/strip-light-dark.cjs.map +0 -1
  441. package/build/cjs/core/tokens/style-dictionary/transforms/strip-light-dark.d.cts +0 -3
  442. package/build/cjs/core/tokens.cjs +0 -2
  443. package/build/cjs/core/tokens.cjs.map +0 -1
  444. package/build/cjs/core/tokens.d.cts +0 -593
  445. package/build/cjs/index.cjs +0 -2
  446. package/build/cjs/index.cjs.map +0 -1
  447. package/build/cjs/index.d.cts +0 -3
  448. package/build/cjs/tailwind/colors.cjs +0 -2
  449. package/build/cjs/tailwind/colors.cjs.map +0 -1
  450. package/build/cjs/tailwind/colors.d.cts +0 -39
  451. package/build/es/components-beta/description-list/DescriptionList.js +0 -2
  452. package/build/es/components-beta/description-list/DescriptionList.js.map +0 -1
  453. package/build/es/components-beta/description-list/DescriptionListItem.js +0 -2
  454. package/build/es/components-beta/description-list/DescriptionListItem.js.map +0 -1
  455. package/build/es/components-beta/nav-link/NavLink.js +0 -2
  456. package/build/es/components-beta/nav-link/NavLink.js.map +0 -1
  457. package/build/es/components-beta/nav-link/index.d.ts +0 -1
  458. package/build/es/components-beta/select/Select.js +0 -2
  459. package/build/es/components-beta/select/Select.js.map +0 -1
  460. package/build/es/components-beta/select/index.d.ts +0 -2
  461. package/build/es/core/index.d.ts +0 -2
  462. package/build/es/core/index.js +0 -2
  463. package/build/es/core/index.js.map +0 -1
  464. package/build/es/core/tokens/build-tailwind-4.d.ts +0 -1
  465. package/build/es/core/tokens/build-tailwind-4.js +0 -2
  466. package/build/es/core/tokens/build-tailwind-4.js.map +0 -1
  467. package/build/es/core/tokens/style-dictionary/build.d.ts +0 -0
  468. package/build/es/core/tokens/style-dictionary/build.js +0 -2
  469. package/build/es/core/tokens/style-dictionary/build.js.map +0 -1
  470. package/build/es/core/tokens/style-dictionary/config.d.ts +0 -4
  471. package/build/es/core/tokens/style-dictionary/config.js +0 -2
  472. package/build/es/core/tokens/style-dictionary/config.js.map +0 -1
  473. package/build/es/core/tokens/style-dictionary/filters/index.d.ts +0 -3
  474. package/build/es/core/tokens/style-dictionary/filters/index.js +0 -2
  475. package/build/es/core/tokens/style-dictionary/filters/index.js.map +0 -1
  476. package/build/es/core/tokens/style-dictionary/formats/css-dynamic-color-variables.d.ts +0 -3
  477. package/build/es/core/tokens/style-dictionary/formats/css-dynamic-color-variables.js +0 -2
  478. package/build/es/core/tokens/style-dictionary/formats/css-dynamic-color-variables.js.map +0 -1
  479. package/build/es/core/tokens/style-dictionary/formats/css-theme-variables.d.ts +0 -3
  480. package/build/es/core/tokens/style-dictionary/formats/css-theme-variables.js +0 -2
  481. package/build/es/core/tokens/style-dictionary/formats/css-theme-variables.js.map +0 -1
  482. package/build/es/core/tokens/style-dictionary/formats/index.d.ts +0 -6
  483. package/build/es/core/tokens/style-dictionary/formats/index.js +0 -2
  484. package/build/es/core/tokens/style-dictionary/formats/index.js.map +0 -1
  485. package/build/es/core/tokens/style-dictionary/formats/javascript-esm.d.ts +0 -3
  486. package/build/es/core/tokens/style-dictionary/formats/javascript-esm.js +0 -2
  487. package/build/es/core/tokens/style-dictionary/formats/javascript-esm.js.map +0 -1
  488. package/build/es/core/tokens/style-dictionary/formats/scss-theme-variables.d.ts +0 -3
  489. package/build/es/core/tokens/style-dictionary/formats/scss-theme-variables.js +0 -2
  490. package/build/es/core/tokens/style-dictionary/formats/scss-theme-variables.js.map +0 -1
  491. package/build/es/core/tokens/style-dictionary/formats/tailwindcss-colors.d.ts +0 -3
  492. package/build/es/core/tokens/style-dictionary/formats/tailwindcss-colors.js +0 -2
  493. package/build/es/core/tokens/style-dictionary/formats/tailwindcss-colors.js.map +0 -1
  494. package/build/es/core/tokens/style-dictionary/register.d.ts +0 -1
  495. package/build/es/core/tokens/style-dictionary/register.js +0 -2
  496. package/build/es/core/tokens/style-dictionary/register.js.map +0 -1
  497. package/build/es/core/tokens/style-dictionary/transforms/index.d.ts +0 -2
  498. package/build/es/core/tokens/style-dictionary/transforms/index.js +0 -2
  499. package/build/es/core/tokens/style-dictionary/transforms/index.js.map +0 -1
  500. package/build/es/core/tokens/style-dictionary/transforms/strip-light-dark.d.ts +0 -3
  501. package/build/es/core/tokens/style-dictionary/transforms/strip-light-dark.js +0 -2
  502. package/build/es/core/tokens/style-dictionary/transforms/strip-light-dark.js.map +0 -1
  503. package/build/es/core/tokens.d.ts +0 -593
  504. package/build/es/core/tokens.js +0 -2
  505. package/build/es/core/tokens.js.map +0 -1
  506. package/build/es/index.d.ts +0 -3
  507. package/build/es/index.js +0 -2
  508. package/build/es/index.js.map +0 -1
  509. package/build/es/tailwind/colors.d.ts +0 -39
  510. package/build/es/tailwind/colors.js +0 -2
  511. package/build/es/tailwind/colors.js.map +0 -1
  512. package/build/index-Ck94bTpt.cjs +0 -2
  513. package/build/index-Ck94bTpt.cjs.map +0 -1
  514. package/build/index-DOHQmuhD.js +0 -2
  515. package/build/index-DOHQmuhD.js.map +0 -1
  516. package/src/fonts/styles/_index.scss +0 -1
  517. package/src/fonts/styles/webfonts.scss +0 -145
  518. package/src/tailwind/v4/jokul-tailwind.css +0 -266
  519. package/styles/components/modal/_layout.scss +0 -22
  520. package/styles/components/modal/_modal-base.scss +0 -32
  521. package/styles/components/modal/_motion.scss +0 -45
  522. package/styles/components/modal/_overlay.scss +0 -20
  523. package/styles/components/modal/_parts.scss +0 -33
  524. package/styles/components/modal/_placement.scss +0 -59
  525. package/styles/components-beta/nav-link/navlink.min.css +0 -1
  526. package/styles/components-beta/select/_index.scss +0 -3
  527. package/styles/components-beta/select/select.min.css +0 -1
  528. package/styles/core/core.css +0 -1731
  529. package/styles/core/core.min.css +0 -2
  530. package/styles/core/jkl/_colors.scss +0 -26
  531. package/styles/core/jkl/_helpers.scss +0 -26
  532. package/styles/core/jkl/_tokens.scss +0 -59
  533. package/styles/core/jkl/legacy/_dynamic-colors.scss +0 -40
  534. package/styles/core/jkl/legacy/_index.scss +0 -2
  535. package/styles/core/jkl/legacy/_tokens.scss +0 -742
  536. package/styles/core/theme/_color-tokens.scss +0 -73
  537. package/styles/core/theme/_index.scss +0 -10
  538. package/styles/core/theme/_legacy-color-tokens.scss +0 -81
  539. package/styles/core/theme/_legacy-tokens.scss +0 -279
  540. package/styles/core/theme/_old-vars.scss +0 -21
  541. package/styles/core/theme/_shape.scss +0 -12
  542. package/styles/core/theme/_spacing-tokens.scss +0 -33
  543. package/styles/core/theme/_spacing.scss +0 -64
  544. package/styles/core/theme/_tokens.scss +0 -33
  545. package/styles/core/theme/_typography.scss +0 -38
  546. package/styles/core/utility/_paragraphs.scss +0 -29
  547. package/styles/fonts/_index.scss +0 -1
  548. package/styles/fonts/webfonts.css +0 -115
  549. package/styles/fonts/webfonts.min.css +0 -1
  550. package/styles/fonts/webfonts.scss +0 -145
  551. package/styles/styles.min.css +0 -3
  552. /package/build/cjs/{components-beta → components/beta}/description-list/DescriptionList.d.cts +0 -0
  553. /package/build/cjs/{components-beta → components/beta}/description-list/DescriptionListItem.d.cts +0 -0
  554. /package/build/cjs/{components-beta → components/beta}/description-list/index.cjs +0 -0
  555. /package/build/cjs/{components-beta → components/beta}/description-list/index.cjs.map +0 -0
  556. /package/build/cjs/{components-beta → components/beta}/description-list/types.cjs +0 -0
  557. /package/build/cjs/{components-beta → components/beta}/description-list/types.cjs.map +0 -0
  558. /package/build/cjs/{components-beta → components/beta}/description-list/types.d.cts +0 -0
  559. /package/build/cjs/{components-beta → components/beta}/nav-link/NavLink.d.cts +0 -0
  560. /package/build/cjs/{components-beta → components/beta}/nav-link/index.cjs +0 -0
  561. /package/build/cjs/{components-beta → components/beta}/nav-link/index.cjs.map +0 -0
  562. /package/build/cjs/{components-beta → components/beta}/nav-link/types.cjs +0 -0
  563. /package/build/cjs/{components-beta → components/beta}/nav-link/types.cjs.map +0 -0
  564. /package/build/cjs/{components-beta → components/beta}/select/Select.d.cts +0 -0
  565. /package/build/cjs/{components-beta → components/beta}/select/index.cjs +0 -0
  566. /package/build/cjs/{components-beta → components/beta}/select/index.cjs.map +0 -0
  567. /package/build/cjs/{components-beta → components/beta}/select/types.cjs +0 -0
  568. /package/build/cjs/{components-beta → components/beta}/select/types.cjs.map +0 -0
  569. /package/build/cjs/{core → utilities}/types.cjs +0 -0
  570. /package/build/cjs/{core → utilities}/types.cjs.map +0 -0
  571. /package/build/es/{components-beta → components/beta}/description-list/DescriptionList.d.ts +0 -0
  572. /package/build/es/{components-beta → components/beta}/description-list/DescriptionListItem.d.ts +0 -0
  573. /package/build/es/{components-beta → components/beta}/description-list/index.js +0 -0
  574. /package/build/es/{components-beta → components/beta}/description-list/index.js.map +0 -0
  575. /package/build/es/{components-beta → components/beta}/description-list/types.d.ts +0 -0
  576. /package/build/es/{components-beta → components/beta}/description-list/types.js +0 -0
  577. /package/build/es/{components-beta → components/beta}/description-list/types.js.map +0 -0
  578. /package/build/es/{components-beta → components/beta}/nav-link/NavLink.d.ts +0 -0
  579. /package/build/es/{components-beta → components/beta}/nav-link/index.js +0 -0
  580. /package/build/es/{components-beta → components/beta}/nav-link/index.js.map +0 -0
  581. /package/build/es/{components-beta → components/beta}/nav-link/types.js +0 -0
  582. /package/build/es/{components-beta → components/beta}/nav-link/types.js.map +0 -0
  583. /package/build/es/{components-beta → components/beta}/select/Select.d.ts +0 -0
  584. /package/build/es/{components-beta → components/beta}/select/index.js +0 -0
  585. /package/build/es/{components-beta → components/beta}/select/index.js.map +0 -0
  586. /package/build/es/{components-beta → components/beta}/select/types.js +0 -0
  587. /package/build/es/{components-beta → components/beta}/select/types.js.map +0 -0
  588. /package/build/es/{core → utilities}/types.js +0 -0
  589. /package/build/es/{core → utilities}/types.js.map +0 -0
  590. /package/styles/{core/_layers.scss → _layers.scss} +0 -0
  591. /package/styles/{core/core.scss → base.scss} +0 -0
  592. /package/styles/{components-beta → components/beta}/description-list/_index.scss +0 -0
  593. /package/styles/{components-beta → components/beta}/description-list/description-list.css +0 -0
  594. /package/styles/{components-beta → components/beta}/description-list/description-list.min.css +0 -0
  595. /package/styles/{components-beta → components/beta}/nav-link/_index.scss +0 -0
  596. /package/styles/{core/global → global}/_index.scss +0 -0
  597. /package/styles/{core/jkl → jkl}/_convert.scss +0 -0
  598. /package/styles/{core/jkl → jkl}/_navigation.scss +0 -0
  599. /package/styles/{core/jkl → jkl}/_ornaments.scss +0 -0
  600. /package/styles/{core/jkl → jkl}/_responsive-units.scss +0 -0
  601. /package/styles/{core/jkl → jkl}/_screenreader.scss +0 -0
  602. /package/styles/{core/jkl → jkl}/_screens.scss +0 -0
  603. /package/styles/{core/jkl → jkl}/_shadows.scss +0 -0
  604. /package/styles/{core/jkl → jkl}/_underline.scss +0 -0
  605. /package/styles/{core/jkl → jkl}/_z-index.scss +0 -0
  606. /package/styles/{core/resets → resets}/_index.scss +0 -0
  607. /package/styles/{core/resets → resets}/_normalize.scss +0 -0
  608. /package/styles/{core/resets → resets}/_reset.scss +0 -0
  609. /package/styles/{core/utility → utility}/_index.scss +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ListItem.js","sources":["../../../../src/components/list/ListItem.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { type FC } from \"react\";\nimport type { WithChildren } from \"../../core/types.js\";\n\nexport interface ListItemProps extends WithChildren {\n className?: string;\n}\n\ntype ValidListItems = \"normal\" | \"check\" | \"cross\";\n\nfunction makeListItem(listItemType: ValidListItems): FC<ListItemProps> {\n const ListItem: FC<ListItemProps> = ({ className, children, ...rest }) => {\n return (\n <li\n className={clsx(\"jkl-list__item\", className, {\n \"jkl-list__item--iconed\": listItemType !== \"normal\",\n \"jkl-list__item--check\": listItemType === \"check\",\n \"jkl-list__item--cross\": listItemType === \"cross\",\n })}\n data-testid=\"jkl-list-item\"\n {...rest}\n >\n {children}\n </li>\n );\n };\n return ListItem;\n}\n\nexport const ListItem = makeListItem(\"normal\");\nListItem.displayName = \"ListItem\";\nexport const CrossListItem = makeListItem(\"cross\");\nCrossListItem.displayName = \"CrossListItem\";\nexport const CheckListItem = makeListItem(\"check\");\nCheckListItem.displayName = \"CheckListItem\";\n"],"names":["makeListItem","listItemType","className","children","rest","jsx","clsx","ListItem","displayName","CrossListItem","CheckListItem"],"mappings":"oGAUA,SAASA,EAAaC,GAgBlB,MAfoC,EAAGC,UAAAA,EAAWC,SAAAA,KAAaC,KAEvDC,EAAC,KAAA,CACGH,UAAWI,EAAK,iBAAkBJ,EAAW,CACzC,yBAA2C,WAAjBD,EAC1B,wBAA0C,UAAjBA,EACzB,wBAA0C,UAAjBA,IAE7B,cAAY,mBACRG,EAEHD,SAAAA,GAKjB,CAEO,MAAMI,EAAWP,EAAa,UACrCO,EAASC,YAAc,WAChB,MAAMC,EAAgBT,EAAa,SAC1CS,EAAcD,YAAc,gBACrB,MAAME,EAAgBV,EAAa,SAC1CU,EAAcF,YAAc"}
1
+ {"version":3,"file":"ListItem.js","sources":["../../../../src/components/list/ListItem.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { type FC } from \"react\";\nimport type { WithChildren } from \"../../utilities/types.js\";\n\nexport interface ListItemProps extends WithChildren {\n className?: string;\n}\n\ntype ValidListItems = \"normal\" | \"check\" | \"cross\";\n\nfunction makeListItem(listItemType: ValidListItems): FC<ListItemProps> {\n const ListItem: FC<ListItemProps> = ({ className, children, ...rest }) => {\n return (\n <li\n className={clsx(\"jkl-list__item\", className, {\n \"jkl-list__item--iconed\": listItemType !== \"normal\",\n \"jkl-list__item--check\": listItemType === \"check\",\n \"jkl-list__item--cross\": listItemType === \"cross\",\n })}\n data-testid=\"jkl-list-item\"\n {...rest}\n >\n {children}\n </li>\n );\n };\n return ListItem;\n}\n\nexport const ListItem = makeListItem(\"normal\");\nListItem.displayName = \"ListItem\";\nexport const CrossListItem = makeListItem(\"cross\");\nCrossListItem.displayName = \"CrossListItem\";\nexport const CheckListItem = makeListItem(\"check\");\nCheckListItem.displayName = \"CheckListItem\";\n"],"names":["makeListItem","listItemType","className","children","rest","jsx","clsx","ListItem","displayName","CrossListItem","CheckListItem"],"mappings":"oGAUA,SAASA,EAAaC,GAgBlB,MAfoC,EAAGC,UAAAA,EAAWC,SAAAA,KAAaC,KAEvDC,EAAC,KAAA,CACGH,UAAWI,EAAK,iBAAkBJ,EAAW,CACzC,yBAA2C,WAAjBD,EAC1B,wBAA0C,UAAjBA,EACzB,wBAA0C,UAAjBA,IAE7B,cAAY,mBACRG,EAEHD,SAAAA,GAKjB,CAEO,MAAMI,EAAWP,EAAa,UACrCO,EAASC,YAAc,WAChB,MAAMC,EAAgBT,EAAa,SAC1CS,EAAcD,YAAc,gBACrB,MAAME,EAAgBV,EAAa,SAC1CU,EAAcF,YAAc"}
@@ -1,5 +1,5 @@
1
1
  import { CSSProperties } from 'react';
2
- import { WithChildren } from '../../core/types.js';
2
+ import { WithChildren } from '../../utilities/types.js';
3
3
  export interface LogoProps {
4
4
  className?: string;
5
5
  id?: string;
@@ -1,8 +1,8 @@
1
1
  import { Placement } from '@floating-ui/react';
2
2
  import { ButtonHTMLAttributes, HTMLAttributes, ReactNode } from 'react';
3
- import { DataTestAutoId, WithChildren } from '../../core/types.js';
4
3
  import { SwipeChangeHandler } from '../../hooks/useSwipeGesture/useSwipeGesture.js';
5
4
  import { PolymorphicPropsWithRef } from '../../utilities/polymorphism/polymorphism.js';
5
+ import { DataTestAutoId, WithChildren } from '../../utilities/types.js';
6
6
  export interface MenuProps extends DataTestAutoId, WithChildren, Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children"> {
7
7
  className?: string;
8
8
  /**
@@ -1,10 +1,17 @@
1
1
  import { default as React } from 'react';
2
2
  import { IconButtonProps } from '../icon-button/types.js';
3
- import { BaseModalProps, ModalContainerProps, ModalProps } from './types.js';
3
+ import { BaseModalProps, ModalProps } from './types.js';
4
4
  /**
5
5
  * Ment å brukes med `useModal`.
6
6
  */
7
- export declare const ModalContainer: React.ForwardRefExoticComponent<Omit<ModalContainerProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
7
+ export declare const ModalContainer: React.ForwardRefExoticComponent<Omit<{
8
+ id: string;
9
+ ref: (node: React.ReactNode | HTMLElement) => void;
10
+ role: string;
11
+ 'aria-modal': boolean;
12
+ 'aria-hidden': boolean;
13
+ 'aria-labelledby': string;
14
+ } & BaseModalProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
8
15
  /**
9
16
  * Ment å brukes med `useModal`.
10
17
  */
@@ -1,2 +1,2 @@
1
- import{jsx as a}from"react/jsx-runtime";import{c as l}from"../../../clsx-BeLtu-UY.js";import{forwardRef as o}from"react";import{IconButton as s}from"../icon-button/IconButton.js";import{CloseIcon as e}from"../icon/icons/CloseIcon.js";const d=o(({className:o,placement:s="center",slideIn:e,...d},t)=>a("div",{className:l("jkl-modal-container",`jkl-modal-container--placement-${s}`,{"jkl-modal-container--slide-in":e},o),...d,ref:t,"data-portal":!0}));d.displayName="ModalContainer";const t=o(({className:o,transparent:s,...e},d)=>a("div",{className:l("jkl-modal-overlay",o,{"jkl-modal-overlay--transparent":s}),...e,ref:d}));t.displayName="ModalOverlay";const m=o(({className:o,component:s,padding:e,style:d,...t},m)=>a(s||"div",{className:l("jkl jkl-modal",o),style:{"--modal-padding":e?`var(--jkl-spacing-${e})`:void 0,...d},...t,ref:m}));m.displayName="Modal";const n=o(({className:o,...s},e)=>a("div",{className:l("jkl-modal-header",o),...s,ref:e}));n.displayName="ModalHeader";const c=o(({className:o,...s},e)=>a("p",{className:l("jkl-modal-title",o),...s,ref:e}));c.displayName="ModalTitle";const i=o(({className:o,...d},t)=>a(s,{className:l("jkl-modal-close",o),"data-testautoid":"jkl-modal-close",...d,ref:t,children:a(e,{variant:"medium"})}));i.displayName="ModalCloseButton";const r=o(({className:o,...s},e)=>a("div",{className:l("jkl-modal-body",o),...s,ref:e}));r.displayName="ModalBody";const p=o(({className:o,...s},e)=>a("div",{className:l("jkl-modal-actions",o),...s,ref:e}));p.displayName="ModalActions";export{m as Modal,p as ModalActions,r as ModalBody,i as ModalCloseButton,d as ModalContainer,n as ModalHeader,t as ModalOverlay,c as ModalTitle};
1
+ import{jsx as a}from"react/jsx-runtime";import{c as s}from"../../../clsx-BeLtu-UY.js";import{forwardRef as l}from"react";import{IconButton as o}from"../icon-button/IconButton.js";import{CloseIcon as e}from"../icon/icons/CloseIcon.js";const d=l(({className:l,...o},e)=>a("div",{className:s("jkl-modal-container",l),...o,ref:e,"data-portal":!0}));d.displayName="ModalContainer";const t=l(({className:l,transparent:o,...e},d)=>a("div",{className:s("jkl-modal-overlay",l,{"jkl-modal-overlay--transparent":o}),...e,ref:d}));t.displayName="ModalOverlay";const m=l(({className:l,component:o,padding:e,style:d,...t},m)=>a(o||"div",{className:s("jkl jkl-modal",l),style:{"--jkl-modal-padding":e?`var(--jkl-spacing-${e})`:void 0,...d},...t,ref:m}));m.displayName="Modal";const c=l(({className:l,...o},e)=>a("div",{className:s("jkl-modal-header",l),...o,ref:e}));c.displayName="ModalHeader";const r=l(({className:l,...o},e)=>a("p",{className:s("jkl-modal-title",l),...o,ref:e}));r.displayName="ModalTitle";const n=l(({className:l,...d},t)=>a(o,{className:s("jkl-modal-close",l),"data-testautoid":"jkl-modal-close",...d,ref:t,children:a(e,{variant:"medium"})}));n.displayName="ModalCloseButton";const i=l(({className:l,...o},e)=>a("div",{className:s("jkl-modal-body",l),...o,ref:e}));i.displayName="ModalBody";const N=l(({className:l,...o},e)=>a("div",{className:s("jkl-modal-actions",l),...o,ref:e}));N.displayName="ModalActions";export{m as Modal,N as ModalActions,i as ModalBody,n as ModalCloseButton,d as ModalContainer,c as ModalHeader,t as ModalOverlay,r as ModalTitle};
2
2
  //# sourceMappingURL=Modal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.js","sources":["../../../../src/components/modal/Modal.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { forwardRef } from \"react\";\nimport { IconButton } from \"../icon-button/IconButton.js\";\nimport type { IconButtonProps } from \"../icon-button/types.js\";\nimport { CloseIcon } from \"../icon/icons/CloseIcon.js\";\nimport type {\n BaseModalProps,\n ModalConfig,\n ModalContainerProps,\n ModalOverlayProps,\n ModalProps,\n} from \"./types.js\";\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const ModalContainer = forwardRef<HTMLDivElement, ModalContainerProps>(\n ({ className, placement = \"center\", slideIn, ...rest }, ref) => {\n // TODO: 'data-portal' fjernes når modalen tar i bruk Popover komponenten. Issue: https://github.com/fremtind/jokul/issues/4356\n return (\n <div\n className={clsx(\n \"jkl-modal-container\",\n `jkl-modal-container--placement-${placement}`,\n { \"jkl-modal-container--slide-in\": slideIn },\n className,\n )}\n {...rest}\n ref={ref}\n data-portal\n />\n );\n },\n);\nModalContainer.displayName = \"ModalContainer\";\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const ModalOverlay = forwardRef<HTMLDivElement, ModalOverlayProps>(\n ({ className, transparent, ...rest }, ref) => (\n <div\n className={clsx(\"jkl-modal-overlay\", className, {\n \"jkl-modal-overlay--transparent\": transparent,\n })}\n {...rest}\n ref={ref}\n />\n ),\n);\nModalOverlay.displayName = \"ModalOverlay\";\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const Modal = forwardRef<HTMLElement, ModalConfig[\"modal\"] & ModalProps>(\n ({ className, component, padding, style, ...rest }, ref) => {\n const C = component || \"div\";\n return (\n <C\n className={clsx(\"jkl jkl-modal\", className)}\n style={\n {\n \"--modal-padding\": padding\n ? `var(--jkl-spacing-${padding})`\n : undefined,\n ...style,\n } as React.CSSProperties\n }\n {...rest}\n ref={ref}\n />\n );\n },\n);\nModal.displayName = \"Modal\";\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const ModalHeader = forwardRef<HTMLDivElement, BaseModalProps>(\n ({ className, ...rest }, ref) => (\n <div\n className={clsx(\"jkl-modal-header\", className)}\n {...rest}\n ref={ref}\n />\n ),\n);\nModalHeader.displayName = \"ModalHeader\";\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const ModalTitle = forwardRef<\n HTMLParagraphElement,\n ModalConfig[\"title\"] & BaseModalProps\n>(({ className, ...rest }, ref) => (\n <p className={clsx(\"jkl-modal-title\", className)} {...rest} ref={ref} />\n));\nModalTitle.displayName = \"ModalTitle\";\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const ModalCloseButton = forwardRef<\n HTMLButtonElement,\n Omit<ModalConfig[\"closeButton\"], \"onClick\"> &\n BaseModalProps &\n IconButtonProps\n>(({ className, ...rest }, ref) => (\n <IconButton\n className={clsx(\"jkl-modal-close\", className)}\n data-testautoid=\"jkl-modal-close\"\n {...rest}\n ref={ref}\n >\n <CloseIcon variant=\"medium\" />\n </IconButton>\n));\nModalCloseButton.displayName = \"ModalCloseButton\";\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const ModalBody = forwardRef<HTMLDivElement, BaseModalProps>(\n ({ className, ...rest }, ref) => (\n <div\n className={clsx(\"jkl-modal-body\", className)}\n {...rest}\n ref={ref}\n />\n ),\n);\nModalBody.displayName = \"ModalBody\";\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const ModalActions = forwardRef<HTMLDivElement, BaseModalProps>(\n ({ className, ...rest }, ref) => (\n <div\n className={clsx(\"jkl-modal-actions\", className)}\n {...rest}\n ref={ref}\n />\n ),\n);\nModalActions.displayName = \"ModalActions\";\n"],"names":["ModalContainer","forwardRef","className","placement","slideIn","rest","ref","jsx","clsx","displayName","ModalOverlay","transparent","Modal","component","padding","style","ModalHeader","ModalTitle","ModalCloseButton","IconButton","children","CloseIcon","variant","ModalBody","ModalActions"],"mappings":"0OAgBO,MAAMA,EAAiBC,EAC1B,EAAGC,UAAAA,EAAWC,UAAAA,EAAY,SAAUC,QAAAA,KAAYC,GAAQC,IAGhDC,EAAC,MAAA,CACGL,UAAWM,EACP,sBACA,kCAAkCL,IAClC,CAAE,gCAAiCC,GACnCF,MAEAG,EACJC,IAAAA,EACA,eAAW,KAK3BN,EAAeS,YAAc,iBAKtB,MAAMC,EAAeT,EACxB,EAAGC,UAAAA,EAAWS,YAAAA,KAAgBN,GAAQC,IAClCC,EAAC,MAAA,CACGL,UAAWM,EAAK,oBAAqBN,EAAW,CAC5C,iCAAkCS,OAElCN,EACJC,IAAAA,KAIZI,EAAaD,YAAc,eAKpB,MAAMG,EAAQX,EACjB,EAAGC,UAAAA,EAAWW,UAAAA,EAAWC,QAAAA,EAASC,MAAAA,KAAUV,GAAQC,IAG5CC,EAFMM,GAAa,MAElB,CACGX,UAAWM,EAAK,gBAAiBN,GACjCa,MACI,CACI,kBAAmBD,EACb,qBAAqBA,UACrB,KACHC,MAGPV,EACJC,IAAAA,KAKhBM,EAAMH,YAAc,QAKb,MAAMO,EAAcf,EACvB,EAAGC,UAAAA,KAAcG,GAAQC,IACrBC,EAAC,MAAA,CACGL,UAAWM,EAAK,mBAAoBN,MAChCG,EACJC,IAAAA,KAIZU,EAAYP,YAAc,cAKnB,MAAMQ,EAAahB,EAGxB,EAAGC,UAAAA,KAAcG,GAAQC,MACtB,IAAA,CAAEJ,UAAWM,EAAK,kBAAmBN,MAAgBG,EAAMC,IAAAA,KAEhEW,EAAWR,YAAc,aAKlB,MAAMS,EAAmBjB,EAK9B,EAAGC,UAAAA,KAAcG,GAAQC,IACvBC,EAACY,EAAA,CACGjB,UAAWM,EAAK,kBAAmBN,GACnC,kBAAgB,qBACZG,EACJC,IAAAA,EAEAc,SAAAb,EAACc,EAAA,CAAUC,QAAQ,cAG3BJ,EAAiBT,YAAc,mBAKxB,MAAMc,EAAYtB,EACrB,EAAGC,UAAAA,KAAcG,GAAQC,IACrBC,EAAC,MAAA,CACGL,UAAWM,EAAK,iBAAkBN,MAC9BG,EACJC,IAAAA,KAIZiB,EAAUd,YAAc,YAKjB,MAAMe,EAAevB,EACxB,EAAGC,UAAAA,KAAcG,GAAQC,IACrBC,EAAC,MAAA,CACGL,UAAWM,EAAK,oBAAqBN,MACjCG,EACJC,IAAAA,KAIZkB,EAAaf,YAAc"}
1
+ {"version":3,"file":"Modal.js","sources":["../../../../src/components/modal/Modal.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { forwardRef } from \"react\";\nimport { IconButton } from \"../icon-button/IconButton.js\";\nimport type { IconButtonProps } from \"../icon-button/types.js\";\nimport { CloseIcon } from \"../icon/icons/CloseIcon.js\";\nimport type {\n BaseModalProps,\n ModalConfig,\n ModalOverlayProps,\n ModalProps,\n} from \"./types.js\";\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const ModalContainer = forwardRef<\n HTMLDivElement,\n ModalConfig[\"container\"] & BaseModalProps\n>(({ className, ...rest }, ref) => {\n // TODO: 'data-portal' fjernes når modalen tar i bruk Popover komponenten. Issue: https://github.com/fremtind/jokul/issues/4356\n return (\n <div\n className={clsx(\"jkl-modal-container\", className)}\n {...rest}\n ref={ref}\n data-portal\n />\n );\n});\nModalContainer.displayName = \"ModalContainer\";\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const ModalOverlay = forwardRef<HTMLDivElement, ModalOverlayProps>(\n ({ className, transparent, ...rest }, ref) => (\n <div\n className={clsx(\"jkl-modal-overlay\", className, {\n \"jkl-modal-overlay--transparent\": transparent,\n })}\n {...rest}\n ref={ref}\n />\n ),\n);\nModalOverlay.displayName = \"ModalOverlay\";\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const Modal = forwardRef<HTMLElement, ModalConfig[\"modal\"] & ModalProps>(\n ({ className, component, padding, style, ...rest }, ref) => {\n const C = component || \"div\";\n return (\n <C\n className={clsx(\"jkl jkl-modal\", className)}\n style={\n {\n \"--jkl-modal-padding\": padding\n ? `var(--jkl-spacing-${padding})`\n : undefined,\n ...style,\n } as React.CSSProperties\n }\n {...rest}\n ref={ref}\n />\n );\n },\n);\nModal.displayName = \"Modal\";\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const ModalHeader = forwardRef<HTMLDivElement, BaseModalProps>(\n ({ className, ...rest }, ref) => (\n <div\n className={clsx(\"jkl-modal-header\", className)}\n {...rest}\n ref={ref}\n />\n ),\n);\nModalHeader.displayName = \"ModalHeader\";\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const ModalTitle = forwardRef<\n HTMLParagraphElement,\n ModalConfig[\"title\"] & BaseModalProps\n>(({ className, ...rest }, ref) => (\n <p className={clsx(\"jkl-modal-title\", className)} {...rest} ref={ref} />\n));\nModalTitle.displayName = \"ModalTitle\";\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const ModalCloseButton = forwardRef<\n HTMLButtonElement,\n Omit<ModalConfig[\"closeButton\"], \"onClick\"> &\n BaseModalProps &\n IconButtonProps\n>(({ className, ...rest }, ref) => (\n <IconButton\n className={clsx(\"jkl-modal-close\", className)}\n data-testautoid=\"jkl-modal-close\"\n {...rest}\n ref={ref}\n >\n <CloseIcon variant=\"medium\" />\n </IconButton>\n));\nModalCloseButton.displayName = \"ModalCloseButton\";\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const ModalBody = forwardRef<HTMLDivElement, BaseModalProps>(\n ({ className, ...rest }, ref) => (\n <div\n className={clsx(\"jkl-modal-body\", className)}\n {...rest}\n ref={ref}\n />\n ),\n);\nModalBody.displayName = \"ModalBody\";\n\n/**\n * Ment å brukes med `useModal`.\n */\nexport const ModalActions = forwardRef<HTMLDivElement, BaseModalProps>(\n ({ className, ...rest }, ref) => (\n <div\n className={clsx(\"jkl-modal-actions\", className)}\n {...rest}\n ref={ref}\n />\n ),\n);\nModalActions.displayName = \"ModalActions\";\n"],"names":["ModalContainer","forwardRef","className","rest","ref","jsx","clsx","displayName","ModalOverlay","transparent","Modal","component","padding","style","ModalHeader","ModalTitle","ModalCloseButton","IconButton","children","CloseIcon","variant","ModalBody","ModalActions"],"mappings":"0OAeO,MAAMA,EAAiBC,EAG5B,EAAGC,UAAAA,KAAcC,GAAQC,IAGnBC,EAAC,MAAA,CACGH,UAAWI,EAAK,sBAAuBJ,MACnCC,EACJC,IAAAA,EACA,eAAW,KAIvBJ,EAAeO,YAAc,iBAKtB,MAAMC,EAAeP,EACxB,EAAGC,UAAAA,EAAWO,YAAAA,KAAgBN,GAAQC,IAClCC,EAAC,MAAA,CACGH,UAAWI,EAAK,oBAAqBJ,EAAW,CAC5C,iCAAkCO,OAElCN,EACJC,IAAAA,KAIZI,EAAaD,YAAc,eAKpB,MAAMG,EAAQT,EACjB,EAAGC,UAAAA,EAAWS,UAAAA,EAAWC,QAAAA,EAASC,MAAAA,KAAUV,GAAQC,IAG5CC,EAFMM,GAAa,MAElB,CACGT,UAAWI,EAAK,gBAAiBJ,GACjCW,MACI,CACI,sBAAuBD,EACjB,qBAAqBA,UACrB,KACHC,MAGPV,EACJC,IAAAA,KAKhBM,EAAMH,YAAc,QAKb,MAAMO,EAAcb,EACvB,EAAGC,UAAAA,KAAcC,GAAQC,IACrBC,EAAC,MAAA,CACGH,UAAWI,EAAK,mBAAoBJ,MAChCC,EACJC,IAAAA,KAIZU,EAAYP,YAAc,cAKnB,MAAMQ,EAAad,EAGxB,EAAGC,UAAAA,KAAcC,GAAQC,MACtB,IAAA,CAAEF,UAAWI,EAAK,kBAAmBJ,MAAgBC,EAAMC,IAAAA,KAEhEW,EAAWR,YAAc,aAKlB,MAAMS,EAAmBf,EAK9B,EAAGC,UAAAA,KAAcC,GAAQC,IACvBC,EAACY,EAAA,CACGf,UAAWI,EAAK,kBAAmBJ,GACnC,kBAAgB,qBACZC,EACJC,IAAAA,EAEAc,SAAAb,EAACc,EAAA,CAAUC,QAAQ,cAG3BJ,EAAiBT,YAAc,mBAKxB,MAAMc,EAAYpB,EACrB,EAAGC,UAAAA,KAAcC,GAAQC,IACrBC,EAAC,MAAA,CACGH,UAAWI,EAAK,iBAAkBJ,MAC9BC,EACJC,IAAAA,KAIZiB,EAAUd,YAAc,YAKjB,MAAMe,EAAerB,EACxB,EAAGC,UAAAA,KAAcC,GAAQC,IACrBC,EAAC,MAAA,CACGH,UAAWI,EAAK,oBAAqBJ,MACjCC,EACJC,IAAAA,KAIZkB,EAAaf,YAAc"}
@@ -1,3 +1,3 @@
1
1
  export { ModalContainer, ModalOverlay, Modal, ModalHeader, ModalTitle, ModalCloseButton, ModalBody, ModalActions, } from './Modal.js';
2
2
  export { useModal, type ModalInstance } from './useModal.js';
3
- export type { ModalProps, BaseModalProps, ModalContainerProps, ModalOverlayProps, UseModalOptions, ModalConfig, ModalPlacement, } from './types.js';
3
+ export type { ModalProps, BaseModalProps, ModalOverlayProps, UseModalOptions, ModalConfig, } from './types.js';
@@ -1,6 +1,5 @@
1
1
  import { A11yDialogConfig, A11yDialogProps } from 'react-a11y-dialog';
2
- import { WithOptionalChildren } from '../../core/types.js';
3
- export type ModalPlacement = "center" | "left" | "bottom" | "right";
2
+ import { WithOptionalChildren } from '../../utilities/types.js';
4
3
  export interface UseModalOptions extends Omit<A11yDialogProps, "id" | "closeButtonPosition"> {
5
4
  id?: string;
6
5
  /**
@@ -35,26 +34,9 @@ export interface ModalProps extends WithOptionalChildren {
35
34
  padding?: 16 | 24 | 40;
36
35
  }
37
36
  export type BaseModalProps = Omit<ModalProps, "padding" | "component">;
38
- export type ModalContainerProps = ModalConfig["container"] & BaseModalProps & {
39
- /**
40
- * Plassering og animasjon styres av containeren, siden det er den som
41
- * håndterer viewport-layout og `aria-hidden`-tilstand.
42
- *
43
- * @default "center"
44
- */
45
- placement?: ModalPlacement;
46
- /**
47
- * Slå på enkel slide-in-animasjon når modalen vises.
48
- *
49
- * @default false
50
- */
51
- slideIn?: boolean;
52
- };
53
37
  export type ModalOverlayProps = ModalConfig["overlay"] & BaseModalProps & {
54
38
  /**
55
39
  * Rendre uten bakgrunnsfarge, men med click target for å lukke modalen ved klikk utenfor.
56
- *
57
- * @default false
58
40
  */
59
41
  transparent?: boolean;
60
42
  };
@@ -1,4 +1,4 @@
1
1
  export { NavLink } from './NavLink.js';
2
2
  export type { NavLinkProps } from './types.js';
3
- export { NavLink as BETA_NavLink } from '../../components-beta/nav-link/NavLink.js';
4
- export type { NavLinkProps as BETA_NavLinkProps } from '../../components-beta/nav-link/types.js';
3
+ export { NavLink as BETA_NavLink } from '../beta/nav-link/NavLink.jsx';
4
+ export type { NavLinkProps as BETA_NavLinkProps } from '../beta/nav-link/types.js';
@@ -1,2 +1,2 @@
1
- import{NavLink as a}from"./NavLink.js";import{NavLink as n}from"../../components-beta/nav-link/NavLink.js";export{n as BETA_NavLink,a as NavLink};
1
+ import{NavLink as a}from"./NavLink.js";import{NavLink as i}from"../beta/nav-link/NavLink.js";export{i as BETA_NavLink,a as NavLink};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,5 +1,5 @@
1
1
  import { default as React, ChangeEventHandler } from 'react';
2
- import { WithChildren } from '../../core/types.js';
2
+ import { WithChildren } from '../../utilities/types.js';
3
3
  type RadioGroupContext = {
4
4
  name: string | undefined;
5
5
  value: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"radioGroupContext.js","sources":["../../../../src/components/radio-button/radioGroupContext.tsx"],"sourcesContent":["import React, {\n createContext,\n useContext,\n type ChangeEventHandler,\n} from \"react\";\nimport type { WithChildren } from \"../../core/types.js\";\n\ntype RadioGroupContext = {\n name: string | undefined;\n value: string | undefined;\n inline: boolean;\n invalid: boolean;\n onChange: ChangeEventHandler<HTMLInputElement> | undefined;\n};\n\nconst radioGroupContext = createContext<RadioGroupContext>({\n name: undefined,\n value: undefined,\n onChange: () => {\n return;\n },\n inline: false,\n invalid: false,\n});\n\nexport const useRadioGroupContext = (): RadioGroupContext =>\n useContext(radioGroupContext);\n\ninterface Props extends WithChildren {\n state: RadioGroupContext;\n}\n\nexport const RadioGroupContextProvider: React.FC<Props> = ({\n state,\n children,\n}) => (\n <radioGroupContext.Provider value={state}>\n {children}\n </radioGroupContext.Provider>\n);\n"],"names":["radioGroupContext","createContext","name","value","onChange","inline","invalid","useRadioGroupContext","useContext","RadioGroupContextProvider","state","children","Provider"],"mappings":"8FAeA,MAAMA,EAAoBC,EAAiC,CACvDC,UAAM,EACNC,WAAO,EACPC,SAAU,OAGVC,QAAQ,EACRC,SAAS,IAGAC,EAAuB,IAChCC,EAAWR,GAMFS,EAA6C,EACtDC,MAAAA,EACAC,SAAAA,OAECX,EAAkBY,SAAlB,CAA2BT,MAAOO,EAC9BC,SAAAA"}
1
+ {"version":3,"file":"radioGroupContext.js","sources":["../../../../src/components/radio-button/radioGroupContext.tsx"],"sourcesContent":["import React, {\n createContext,\n useContext,\n type ChangeEventHandler,\n} from \"react\";\nimport type { WithChildren } from \"../../utilities/types.js\";\n\ntype RadioGroupContext = {\n name: string | undefined;\n value: string | undefined;\n inline: boolean;\n invalid: boolean;\n onChange: ChangeEventHandler<HTMLInputElement> | undefined;\n};\n\nconst radioGroupContext = createContext<RadioGroupContext>({\n name: undefined,\n value: undefined,\n onChange: () => {\n return;\n },\n inline: false,\n invalid: false,\n});\n\nexport const useRadioGroupContext = (): RadioGroupContext =>\n useContext(radioGroupContext);\n\ninterface Props extends WithChildren {\n state: RadioGroupContext;\n}\n\nexport const RadioGroupContextProvider: React.FC<Props> = ({\n state,\n children,\n}) => (\n <radioGroupContext.Provider value={state}>\n {children}\n </radioGroupContext.Provider>\n);\n"],"names":["radioGroupContext","createContext","name","value","onChange","inline","invalid","useRadioGroupContext","useContext","RadioGroupContextProvider","state","children","Provider"],"mappings":"8FAeA,MAAMA,EAAoBC,EAAiC,CACvDC,UAAM,EACNC,WAAO,EACPC,SAAU,OAGVC,QAAQ,EACRC,SAAS,IAGAC,EAAuB,IAChCC,EAAWR,GAMFS,EAA6C,EACtDC,MAAAA,EACAC,SAAAA,OAECX,EAAkBY,SAAlB,CAA2BT,MAAOO,EAC9BC,SAAAA"}
@@ -1,4 +1,4 @@
1
- import { WithChildren } from '../../core/types.js';
1
+ import { WithChildren } from '../../utilities/types.js';
2
2
  export interface ScreenReaderOnlyProps extends WithChildren {
3
3
  showOnFocus?: boolean;
4
4
  }
@@ -1,5 +1,5 @@
1
1
  export { Select } from './Select.js';
2
2
  export { NativeSelect } from './NativeSelect.js';
3
3
  export type { SelectProps, SelectChangeEventHandler, SelectPartialChangeEvent, NativeSelectProps, } from './types.js';
4
- export { Select as BETA_Select } from '../../components-beta/select/Select.js';
5
- export type { SelectProps as BETA_SelectProps } from '../../components-beta/select/types.js';
4
+ export { Select as BETA_Select } from '../beta/select/Select.jsx';
5
+ export type { SelectProps as BETA_SelectProps } from '../beta/select/types.js';
@@ -1,2 +1,2 @@
1
- import{Select as e}from"./Select.js";import{NativeSelect as t}from"./NativeSelect.js";import{Select as c}from"../../components-beta/select/Select.js";export{c as BETA_Select,t as NativeSelect,e as Select};
1
+ import{Select as e}from"./Select.js";import{NativeSelect as t}from"./NativeSelect.js";import{Select as a}from"../beta/select/Select.js";export{a as BETA_Select,t as NativeSelect,e as Select};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,5 +1,5 @@
1
1
  import { ChangeEvent, SelectHTMLAttributes } from 'react';
2
- import { DataTestAutoId } from '../../core/types.js';
2
+ import { DataTestAutoId } from '../../utilities/types.js';
3
3
  import { ValuePair } from '../../utilities/valuePair.js';
4
4
  import { LabelProps, InputGroupProps } from '../input-group/types.js';
5
5
  export interface NativeSelectProps extends Omit<InputGroupProps, "children">, SelectHTMLAttributes<HTMLSelectElement> {
@@ -1,4 +1,4 @@
1
- import { WithChildren } from '../../core/types.js';
1
+ import { WithChildren } from '../../utilities/types.js';
2
2
  export interface SystemMessageProps extends WithChildren {
3
3
  id?: string;
4
4
  className?: string;
@@ -1,5 +1,5 @@
1
1
  import { default as React, ChangeEventHandler, ColgroupHTMLAttributes, ColHTMLAttributes, HTMLAttributes, ReactNode, TableHTMLAttributes, TdHTMLAttributes, ThHTMLAttributes } from 'react';
2
- import { WithChildren } from '../../core/types.js';
2
+ import { WithChildren } from '../../utilities/types.js';
3
3
  import { TableSortProps } from './utils.js';
4
4
  export interface DataTableProps extends TableHTMLAttributes<HTMLTableElement> {
5
5
  /** Beskrivelse av tabellen for skjermlesere */
@@ -2,5 +2,5 @@ import { default as React } from 'react';
2
2
  import { TableOfContentsProps } from './types.js';
3
3
  export declare const TableOfContents: {
4
4
  ({ label, className, ...rest }: TableOfContentsProps): React.JSX.Element;
5
- Link: React.ForwardRefExoticComponent<Omit<import('../../index.js').PolymorphicPropsWithRef<React.ElementType<any, keyof React.JSX.IntrinsicElements>>, "ref"> & React.RefAttributes<unknown>>;
5
+ Link: React.ForwardRefExoticComponent<Omit<import('../../utilities/index.js').PolymorphicPropsWithRef<React.ElementType<any, keyof React.JSX.IntrinsicElements>>, "ref"> & React.RefAttributes<unknown>>;
6
6
  };
@@ -1,5 +1,5 @@
1
- import { WithChildren } from '../../core/types.js';
2
1
  import { PolymorphicPropsWithRef } from '../../utilities/index.js';
2
+ import { WithChildren } from '../../utilities/types.js';
3
3
  export type NavTabProps<ElementType extends React.ElementType> = PolymorphicPropsWithRef<ElementType, {
4
4
  /**
5
5
  * Hook for å kunne stoppe default oppførsel ved tastaturnavigasjon.
@@ -1,6 +1,6 @@
1
1
  import { ToastOptions as StatelyToastOptions } from '@react-stately/toast';
2
2
  import { ReactNode } from 'react';
3
- import { WithChildren } from '../../core/types.js';
3
+ import { WithChildren } from '../../utilities/types.js';
4
4
  export type ToastContent = {
5
5
  content: ReactNode;
6
6
  title?: string;
@@ -1,6 +1,6 @@
1
1
  import { ButtonHTMLAttributes } from 'react';
2
- import { WithChildren } from '../../core/types.js';
3
2
  import { SwipeChangeHandler } from '../../hooks/useSwipeGesture/useSwipeGesture.js';
3
+ import { WithChildren } from '../../utilities/types.js';
4
4
  export interface ToggleSliderProps extends WithChildren {
5
5
  labels: [string, string];
6
6
  onToggle: (value: string) => void;
@@ -1,6 +1,6 @@
1
1
  import { UseFloatingReturn, useInteractions } from '@floating-ui/react';
2
2
  import { default as React, FC } from 'react';
3
- import { WithChildren } from '../../core/types.js';
3
+ import { WithChildren } from '../../utilities/types.js';
4
4
  import { TooltipProps } from './types.js';
5
5
  type UseTooltipReturn = {
6
6
  triggerOn: NonNullable<TooltipProps["triggerOn"]>;
@@ -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,KAC7B,MAAMC,EAAUC,EAAWN,GAE3B,GAAgB,OAAZK,EACA,MAAM,IAAIE,MACN,0DAIR,OAAOF,GAGEG,EAA2C,EACpDC,SAAAA,KACGC,MAEH,MAAMC,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,IAEZZ,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,IAEnE,MAAO,CACH3B,UAAAA,EACAE,OAAAA,EACAC,QAAAA,EACAE,aAAAA,KACGG,EACHyB,KAAM,IACCzB,EAAKyB,KACR1B,YAAAA,EACA2B,eA5CgBf,IACpBZ,EAAY4B,QAAUhB,OA6CnBY,IA0BSK,CAAWzC,GAE3B,OAAO0C,EAAClD,EAAA,CAAgBmD,MAAO1C,EAAUF,SAAAA"}
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 \"../../utilities/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,KAC7B,MAAMC,EAAUC,EAAWN,GAE3B,GAAgB,OAAZK,EACA,MAAM,IAAIE,MACN,0DAIR,OAAOF,GAGEG,EAA2C,EACpDC,SAAAA,KACGC,MAEH,MAAMC,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,IAEZZ,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,IAEnE,MAAO,CACH3B,UAAAA,EACAE,OAAAA,EACAC,QAAAA,EACAE,aAAAA,KACGG,EACHyB,KAAM,IACCzB,EAAKyB,KACR1B,YAAAA,EACA2B,eA5CgBf,IACpBZ,EAAY4B,QAAUhB,OA6CnBY,IA0BSK,CAAWzC,GAE3B,OAAO0C,EAAClD,EAAA,CAAgBmD,MAAO1C,EAAUF,SAAAA"}
@@ -1,5 +1,5 @@
1
1
  import { RefObject } from 'react';
2
- import { Easing, Timing } from '../../core/types.js';
2
+ import { Easing, Timing } from '../../utilities/types.js';
3
3
  export interface UseAnimatedHeightOptions<T extends HTMLElement = HTMLElement> {
4
4
  display?: "block" | "grid" | "flex";
5
5
  /**
@@ -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 i}from"../useBrowserPreferences/useBrowserPreferences.js";import{usePreviousValue as s}from"../usePreviousValue/usePreviousValue.js";function o(o,a){const u=s(o),l=a?.easing||"standard",c=a?.timing||"productive",m=a?.display||"block",d=`${n.motion.timing[c]} height ${n.motion.easing[l]}`,{prefersReducedMotion:f}=i(),y=e(),h=e(),p=e(null);function v(e){const t=p.current;t&&e.target===t&&(o?t.removeAttribute("style"):(t.removeAttribute("style"),t.style.display="none"),a?.onTransitionEnd?.(o,p))}const g=t(()=>{const e=p.current;if(e&&void 0!==u){if(o){if(o&&u)return}else if(e.style.display="none",!u)return;if(a?.onTransitionStart?.(o,p),f)return e.removeAttribute("style"),o?a?.onFirstVisible?.(o,p):e.style.display="none",void a?.onTransitionEnd?.(o,p);if(e.style.transition=d,e.style.display=m,e.style.overflow="hidden",o)a?.onFirstVisible?.(o,p),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,a,u,d,f,m]);return r(()=>{g()},[o,g]),r(()=>{const e=p.current;return e&&e.addEventListener("transitionend",v),()=>{e&&e.removeEventListener("transitionend",v)}},[o]),r(()=>{const e=y.current,t=h.current;return()=>{e&&cancelAnimationFrame(e),t&&cancelAnimationFrame(t)}},[]),[p,g]}export{o as useAnimatedHeight};
1
+ import{useRef as e,useCallback as t,useEffect as r}from"react";import n from"../../tokens.js";import{useBrowserPreferences as i}from"../useBrowserPreferences/useBrowserPreferences.js";import{usePreviousValue as s}from"../usePreviousValue/usePreviousValue.js";function o(o,a){const u=s(o),l=a?.easing||"standard",c=a?.timing||"productive",m=a?.display||"block",d=`${n.motion.timing[c]} height ${n.motion.easing[l]}`,{prefersReducedMotion:f}=i(),y=e(),h=e(),p=e(null);function v(e){const t=p.current;t&&e.target===t&&(o?t.removeAttribute("style"):(t.removeAttribute("style"),t.style.display="none"),a?.onTransitionEnd?.(o,p))}const g=t(()=>{const e=p.current;if(e&&void 0!==u){if(o){if(o&&u)return}else if(e.style.display="none",!u)return;if(a?.onTransitionStart?.(o,p),f)return e.removeAttribute("style"),o?a?.onFirstVisible?.(o,p):e.style.display="none",void a?.onTransitionEnd?.(o,p);if(e.style.transition=d,e.style.display=m,e.style.overflow="hidden",o)a?.onFirstVisible?.(o,p),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,a,u,d,f,m]);return r(()=>{g()},[o,g]),r(()=>{const e=p.current;return e&&e.addEventListener("transitionend",v),()=>{e&&e.removeEventListener("transitionend",v)}},[o]),r(()=>{const e=y.current,t=h.current;return()=>{e&&cancelAnimationFrame(e),t&&cancelAnimationFrame(t)}},[]),[p,g]}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 } else {\n element.style.display = \"none\";\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":"wQAiBO,SAASA,EACZC,EACAC,GAEA,MAAMC,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,QAE5BL,GAASsB,kBAAkBvB,EAAQe,GAE3C,CAEA,MAAMS,EAAeC,EAAY,KAC7B,MAAMP,EAAUH,EAAWI,QAI3B,GAAKD,QAAuB,IAAZhB,EAIhB,CAAA,GAAKF,GAML,GAAWA,GAAUE,EAEjB,YAAA,GAPAgB,EAAQI,MAAMhB,QAAU,QACnBJ,EAED,OASR,GAFAD,GAASyB,oBAAoB1B,EAAQe,GAEjCL,EAQA,OAPAQ,EAAQG,gBAAgB,SACpBrB,EACAC,GAAS0B,iBAAiB3B,EAAQe,GAElCG,EAAQI,MAAMhB,QAAU,YAE5BL,GAASsB,kBAAkBvB,EAAQe,GAQvC,GAJAG,EAAQI,MAAMf,WAAaA,EAC3BW,EAAQI,MAAMhB,QAAUA,EACxBY,EAAQI,MAAMM,SAAW,SAErB5B,EACAC,GAAS0B,iBAAiB3B,EAAQe,GAClCG,EAAQI,MAAMO,OAAS,IACvBX,EAAQI,MAAMO,OAAS,GAAGX,EAAQY,qBAC/B,CAIH,GAA6B,IAAzBZ,EAAQY,aAER,YADAZ,EAAQG,gBAAgB,SAI5BH,EAAQI,MAAMO,OAAS,GAAGX,EAAQY,iBAElClB,EAAKO,QAAUY,sBAAsB,KACjCjB,EAAKK,QAAUY,sBAAsB,KACjCb,EAAQI,MAAMO,OAAS,SAGnC,CAAA,GACD,CAAC7B,EAAQC,EAASC,EAASK,EAAYG,EAAsBJ,IAGhE,OAAA0B,EAAU,KACNR,KACD,CAACxB,EAAQwB,IAGZQ,EAAU,KACN,MAAMd,EAAUH,EAAWI,QAC3B,OAAID,GACAA,EAAQe,iBAAiB,gBAAiBjB,GAGvC,KACCE,GACAA,EAAQgB,oBACJ,gBACAlB,KAIb,CAAChB,IAEJgC,EAAU,KACN,MAAMG,EAAKvB,EAAKO,QACViB,EAAKtB,EAAKK,QAChB,MAAO,KACHgB,GAAME,qBAAqBF,GAC3BC,GAAMC,qBAAqBD,KAEhC,IAEI,CAACrB,EAAYS,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 \"../../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 } else {\n element.style.display = \"none\";\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":"mQAiBO,SAASA,EACZC,EACAC,GAEA,MAAMC,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,QAE5BL,GAASsB,kBAAkBvB,EAAQe,GAE3C,CAEA,MAAMS,EAAeC,EAAY,KAC7B,MAAMP,EAAUH,EAAWI,QAI3B,GAAKD,QAAuB,IAAZhB,EAIhB,CAAA,GAAKF,GAML,GAAWA,GAAUE,EAEjB,YAAA,GAPAgB,EAAQI,MAAMhB,QAAU,QACnBJ,EAED,OASR,GAFAD,GAASyB,oBAAoB1B,EAAQe,GAEjCL,EAQA,OAPAQ,EAAQG,gBAAgB,SACpBrB,EACAC,GAAS0B,iBAAiB3B,EAAQe,GAElCG,EAAQI,MAAMhB,QAAU,YAE5BL,GAASsB,kBAAkBvB,EAAQe,GAQvC,GAJAG,EAAQI,MAAMf,WAAaA,EAC3BW,EAAQI,MAAMhB,QAAUA,EACxBY,EAAQI,MAAMM,SAAW,SAErB5B,EACAC,GAAS0B,iBAAiB3B,EAAQe,GAClCG,EAAQI,MAAMO,OAAS,IACvBX,EAAQI,MAAMO,OAAS,GAAGX,EAAQY,qBAC/B,CAIH,GAA6B,IAAzBZ,EAAQY,aAER,YADAZ,EAAQG,gBAAgB,SAI5BH,EAAQI,MAAMO,OAAS,GAAGX,EAAQY,iBAElClB,EAAKO,QAAUY,sBAAsB,KACjCjB,EAAKK,QAAUY,sBAAsB,KACjCb,EAAQI,MAAMO,OAAS,SAGnC,CAAA,GACD,CAAC7B,EAAQC,EAASC,EAASK,EAAYG,EAAsBJ,IAGhE,OAAA0B,EAAU,KACNR,KACD,CAACxB,EAAQwB,IAGZQ,EAAU,KACN,MAAMd,EAAUH,EAAWI,QAC3B,OAAID,GACAA,EAAQe,iBAAiB,gBAAiBjB,GAGvC,KACCE,GACAA,EAAQgB,oBACJ,gBACAlB,KAIb,CAAChB,IAEJgC,EAAU,KACN,MAAMG,EAAKvB,EAAKO,QACViB,EAAKtB,EAAKK,QAChB,MAAO,KACHgB,GAAME,qBAAqBF,GAC3BC,GAAMC,qBAAqBD,KAEhC,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),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};
1
+ import{useRef as e,useCallback as t,useEffect as r}from"react";import n from"../../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","onTransitionEnd","runAnimation","dataset","expanded","onTransitionStart","expandedHeight","scrollHeight","requestAnimationFrame","style","removeProperty","collapsedHeight","getBoundingClientRect","height","setProperty","expandElement","collapseElement","useEffect","addEventListener","removeEventListener","r1","r2","cancelAnimationFrame"],"mappings":"wQAiFO,SAASA,EACZC,EACAC,GAEA,MAAMC,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,EACvBC,IACG,MAAMC,EAAUJ,EAAWK,QAGvBD,GAAWD,EAAMG,SAAWF,IAC5BA,EAAQG,gBAAgB,SACxBpB,GAASqB,kBAAkBtB,EAAYc,KAG/C,CAACb,EAASD,IAGRuB,EAAeP,EAAY,KAC7B,MAAME,EAAUJ,EAAWK,QAE3B,GAAKD,SAEe,IAAhBhB,IAEAgB,EAAQM,QAAQC,SAAWzB,EAAa,OAAS,YAG/CA,IAAeE,GAAiBF,GAAcE,IAOpD,CAAA,GAFAD,GAASyB,oBAAoB1B,EAAYc,GAErCL,EAIA,OAHAS,EAAQG,gBAAgB,SACxBH,EAAQM,QAAQC,SAAWzB,EAAa,OAAS,aACjDC,GAASqB,kBAAkBtB,EAAYc,GAIvCd,EA3FZ,SACIc,EACAR,EACAK,EACAE,GAEA,MAAMK,EAAUJ,EAAWK,QAE3B,IAAKD,EAAS,OAEdA,EAAQG,gBAAgB,SACxB,MAAMM,EAAiBT,EAAQU,aAE/BjB,EAAKQ,QAAUU,sBAAsB,KAEjCX,EAAQY,MAAMC,eAAe,cAC7Bb,EAAQM,QAAQC,SAAW,QAC3B,MAAMO,EAAkBd,EAAQe,wBAAwBC,OAGxDhB,EAAQY,MAAMK,YAAY,SAAU,GAAGH,OACvCd,EAAQY,MAAMK,YAAY,aAAc,UAExCtB,EAAKM,QAAUU,sBAAsB,KAEjCX,EAAQY,MAAMK,YAAY,aAAc7B,GACxCY,EAAQY,MAAMK,YAAY,SAAU,GAAGR,OACvCT,EAAQM,QAAQC,SAAW,UAGvC,CA8DYW,CAActB,EAAYR,EAAYK,EAAME,GA7HxD,SACIC,EACAR,EACAK,EACAE,GAEA,MAAMK,EAAUJ,EAAWK,QAE3B,IAAKD,EAAS,OAEdA,EAAQG,gBAAgB,SACxB,MAAMM,EAAiBT,EAAQU,aAE/BjB,EAAKQ,QAAUU,sBAAsB,KAEjCX,EAAQY,MAAMC,eAAe,cAC7Bb,EAAQM,QAAQC,SAAW,QAC3B,MAAMO,EAAkBd,EAAQe,wBAAwBC,OACxDhB,EAAQM,QAAQC,SAAW,OAG3BP,EAAQY,MAAMK,YAAY,SAAU,GAAGR,OACvCT,EAAQY,MAAMK,YAAY,aAAc,UAExCtB,EAAKM,QAAUU,sBAAsB,KAEjCX,EAAQY,MAAMK,YAAY,aAAc7B,GACxCY,EAAQY,MAAMK,YAAY,SAAU,GAAGH,OACvCd,EAAQM,QAAQC,SAAW,WAGvC,CAgGYY,CAAgBvB,EAAYR,EAAYK,EAAME,EAAI,GAEvD,CAACX,EAAaF,EAAYC,EAASQ,EAAsBH,IAG5D,OAAAgC,EAAU,KACNf,KACD,CAACvB,EAAYuB,IAGhBe,EAAU,KACN,MAAMpB,EAAUJ,EAAWK,QAC3B,OAAID,GACAA,EAAQqB,iBAAiB,gBAAiBxB,GAGvC,KACCG,GACAA,EAAQsB,oBACJ,gBACAzB,KAIb,CAACf,IAEJsC,EAAU,KACN,MAAMG,EAAK9B,EAAKQ,QACVuB,EAAK7B,EAAKM,QAChB,MAAO,KACHsB,GAAME,qBAAqBF,GAC3BC,GAAMC,qBAAqBD,KAEhC,IAEI,CAAC5B,EAAYS,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 \"../../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":"mQAiFO,SAASA,EACZC,EACAC,GAEA,MAAMC,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,EACvBC,IACG,MAAMC,EAAUJ,EAAWK,QAGvBD,GAAWD,EAAMG,SAAWF,IAC5BA,EAAQG,gBAAgB,SACxBpB,GAASqB,kBAAkBtB,EAAYc,KAG/C,CAACb,EAASD,IAGRuB,EAAeP,EAAY,KAC7B,MAAME,EAAUJ,EAAWK,QAE3B,GAAKD,SAEe,IAAhBhB,IAEAgB,EAAQM,QAAQC,SAAWzB,EAAa,OAAS,YAG/CA,IAAeE,GAAiBF,GAAcE,IAOpD,CAAA,GAFAD,GAASyB,oBAAoB1B,EAAYc,GAErCL,EAIA,OAHAS,EAAQG,gBAAgB,SACxBH,EAAQM,QAAQC,SAAWzB,EAAa,OAAS,aACjDC,GAASqB,kBAAkBtB,EAAYc,GAIvCd,EA3FZ,SACIc,EACAR,EACAK,EACAE,GAEA,MAAMK,EAAUJ,EAAWK,QAE3B,IAAKD,EAAS,OAEdA,EAAQG,gBAAgB,SACxB,MAAMM,EAAiBT,EAAQU,aAE/BjB,EAAKQ,QAAUU,sBAAsB,KAEjCX,EAAQY,MAAMC,eAAe,cAC7Bb,EAAQM,QAAQC,SAAW,QAC3B,MAAMO,EAAkBd,EAAQe,wBAAwBC,OAGxDhB,EAAQY,MAAMK,YAAY,SAAU,GAAGH,OACvCd,EAAQY,MAAMK,YAAY,aAAc,UAExCtB,EAAKM,QAAUU,sBAAsB,KAEjCX,EAAQY,MAAMK,YAAY,aAAc7B,GACxCY,EAAQY,MAAMK,YAAY,SAAU,GAAGR,OACvCT,EAAQM,QAAQC,SAAW,UAGvC,CA8DYW,CAActB,EAAYR,EAAYK,EAAME,GA7HxD,SACIC,EACAR,EACAK,EACAE,GAEA,MAAMK,EAAUJ,EAAWK,QAE3B,IAAKD,EAAS,OAEdA,EAAQG,gBAAgB,SACxB,MAAMM,EAAiBT,EAAQU,aAE/BjB,EAAKQ,QAAUU,sBAAsB,KAEjCX,EAAQY,MAAMC,eAAe,cAC7Bb,EAAQM,QAAQC,SAAW,QAC3B,MAAMO,EAAkBd,EAAQe,wBAAwBC,OACxDhB,EAAQM,QAAQC,SAAW,OAG3BP,EAAQY,MAAMK,YAAY,SAAU,GAAGR,OACvCT,EAAQY,MAAMK,YAAY,aAAc,UAExCtB,EAAKM,QAAUU,sBAAsB,KAEjCX,EAAQY,MAAMK,YAAY,aAAc7B,GACxCY,EAAQY,MAAMK,YAAY,SAAU,GAAGH,OACvCd,EAAQM,QAAQC,SAAW,WAGvC,CAgGYY,CAAgBvB,EAAYR,EAAYK,EAAME,EAAI,GAEvD,CAACX,EAAaF,EAAYC,EAASQ,EAAsBH,IAG5D,OAAAgC,EAAU,KACNf,KACD,CAACvB,EAAYuB,IAGhBe,EAAU,KACN,MAAMpB,EAAUJ,EAAWK,QAC3B,OAAID,GACAA,EAAQqB,iBAAiB,gBAAiBxB,GAGvC,KACCG,GACAA,EAAQsB,oBACJ,gBACAzB,KAIb,CAACf,IAEJsC,EAAU,KACN,MAAMG,EAAK9B,EAAKQ,QACVuB,EAAK7B,EAAKM,QAChB,MAAO,KACHsB,GAAME,qBAAqBF,GAC3BC,GAAMC,qBAAqBD,KAEhC,IAEI,CAAC5B,EAAYS,EACxB"}
@@ -1,5 +1,5 @@
1
1
  import { RefObject } from 'react';
2
- import { Easing, Timing } from '../../core/types.js';
2
+ import { Easing, Timing } from '../../utilities/types.js';
3
3
  export type UseAutoAnimatedHeightOptions<T extends HTMLElement> = {
4
4
  easing?: Easing;
5
5
  /**
@@ -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 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};
1
+ import{useState as e,useRef as r,useCallback as t,useEffect as n}from"react";import s from"../../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","onTransitionEnd","animateElement","newHeight","scrollHeight","requestAnimationFrame","style","removeProperty","setProperty","runAnimation","onTransitionStart","useEffect","addEventListener","removeEventListener","r1","r2","cancelAnimationFrame"],"mappings":"sRAiCO,SAASA,EACZC,EACAC,GAEA,MAAMC,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,EACvBC,IACG,MAAMC,EAAUJ,EAAWK,QAGvBD,GAAWD,EAAMG,SAAWF,IAC5BA,EAAQG,gBAAgB,SACxBvB,GAASwB,kBAAkBR,KAGnC,CAAChB,IAGCyB,EAAiBP,EAAY,KAC/B,MAAME,EAAUJ,EAAWK,QAE3B,IAAKD,EAAS,OAEdA,EAAQG,gBAAgB,SACxB,MAAMG,EAAYN,EAAQO,aAE1Bd,EAAKQ,QAAUO,sBAAsB,KAEjCR,EAAQS,MAAMC,eAAe,cAC7BV,EAAQS,MAAME,YAAY,SAAU,GAAG5B,OACvCiB,EAAQS,MAAME,YAAY,aAAc,UAExChB,EAAKM,QAAUO,sBAAsB,KAEjCR,EAAQS,MAAME,YAAY,aAAcvB,GACxCY,EAAQS,MAAME,YAAY,SAAU,GAAGL,WAI/CtB,EAAkBsB,IACnB,CAAClB,EAAYL,IAEV6B,EAAed,EAAY,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,GAI/BS,GAAA,CAAA,GACD,CACCA,EACA1B,EACAE,EACAD,EACAW,IAIJ,OAAAuB,EAAU,KACNF,KACD,CAACjC,EAASiC,IAEbE,EAAU,KACN,MAAMd,EAAUJ,EAAWK,QAC3B,OAAID,GACAA,EAAQe,iBAAiB,gBAAiBlB,GAGvC,KACCG,GACAA,EAAQgB,oBACJ,gBACAnB,KAIb,CAACA,IAEJiB,EAAU,KACN,MAAMG,EAAKxB,EAAKQ,QACViB,EAAKvB,EAAKM,QAChB,MAAO,KACHgB,GAAME,qBAAqBF,GAC3BC,GAAMC,qBAAqBD,KAEhC,IAEItB,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 \"../../tokens.js\";\nimport type { Easing, Timing } from \"../../utilities/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":"iRAiCO,SAASA,EACZC,EACAC,GAEA,MAAMC,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,EACvBC,IACG,MAAMC,EAAUJ,EAAWK,QAGvBD,GAAWD,EAAMG,SAAWF,IAC5BA,EAAQG,gBAAgB,SACxBvB,GAASwB,kBAAkBR,KAGnC,CAAChB,IAGCyB,EAAiBP,EAAY,KAC/B,MAAME,EAAUJ,EAAWK,QAE3B,IAAKD,EAAS,OAEdA,EAAQG,gBAAgB,SACxB,MAAMG,EAAYN,EAAQO,aAE1Bd,EAAKQ,QAAUO,sBAAsB,KAEjCR,EAAQS,MAAMC,eAAe,cAC7BV,EAAQS,MAAME,YAAY,SAAU,GAAG5B,OACvCiB,EAAQS,MAAME,YAAY,aAAc,UAExChB,EAAKM,QAAUO,sBAAsB,KAEjCR,EAAQS,MAAME,YAAY,aAAcvB,GACxCY,EAAQS,MAAME,YAAY,SAAU,GAAGL,WAI/CtB,EAAkBsB,IACnB,CAAClB,EAAYL,IAEV6B,EAAed,EAAY,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,GAI/BS,GAAA,CAAA,GACD,CACCA,EACA1B,EACAE,EACAD,EACAW,IAIJ,OAAAuB,EAAU,KACNF,KACD,CAACjC,EAASiC,IAEbE,EAAU,KACN,MAAMd,EAAUJ,EAAWK,QAC3B,OAAID,GACAA,EAAQe,iBAAiB,gBAAiBlB,GAGvC,KACCG,GACAA,EAAQgB,oBACJ,gBACAnB,KAIb,CAACA,IAEJiB,EAAU,KACN,MAAMG,EAAKxB,EAAKQ,QACViB,EAAKvB,EAAKM,QAChB,MAAO,KACHgB,GAAME,qBAAqBF,GAC3BC,GAAMC,qBAAqBD,KAEhC,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": "polite" | "assertive" | "off" | undefined;
14
+ "aria-live": "off" | "assertive" | "polite" | undefined;
15
15
  };
@@ -1,4 +1,4 @@
1
- import { ColorScheme } from '../../core/types.js';
1
+ import { ColorScheme } from '../../utilities/types.js';
2
2
  type BrowserPreferences = {
3
3
  prefersReducedMotion: boolean;
4
4
  prefersColorScheme: ColorScheme;
@@ -1 +1 @@
1
- {"version":3,"file":"useBrowserPreferences.js","sources":["../../../../src/hooks/useBrowserPreferences/useBrowserPreferences.tsx"],"sourcesContent":["import { type Reducer, useEffect, useReducer, useState } from \"react\";\nimport type { ColorScheme } from \"../../core/types.js\";\nimport {\n addMediaQueryListener,\n getInitialMediaQueryMatch,\n removeMediaQueryListener,\n} from \"../mediaQueryUtils.js\";\n\ntype BrowserPreferences = {\n prefersReducedMotion: boolean;\n prefersColorScheme: ColorScheme;\n forcedColors: boolean;\n};\n\nconst ActionType = {\n PrefersColorScheme: \"COLOR_SCHEME_CHANGED\",\n PrefersReducedMotion: \"REDUCED_MOTION_CHANGED\",\n ForcedColors: \"FORCED_COLORS_CHANGED\",\n} as const;\n\ntype Action =\n | {\n type: typeof ActionType.PrefersColorScheme;\n value: ColorScheme;\n }\n | {\n type: typeof ActionType.PrefersReducedMotion;\n value: boolean;\n }\n | {\n type: typeof ActionType.ForcedColors;\n value: boolean;\n };\n\nconst PREFERS_REDUCED_MOTION = \"(prefers-reduced-motion: reduce)\";\nconst PREFERS_LIGHT_COLOR_SCHEME = \"(prefers-color-scheme: light)\";\nconst FORCED_COLORS = \"(forced-colors: active)\";\n\nconst initialState: BrowserPreferences = {\n prefersReducedMotion: false,\n prefersColorScheme: \"light\",\n forcedColors: false,\n};\n\nconst reducer: Reducer<BrowserPreferences, Action> = (state, action) => {\n switch (action.type) {\n case ActionType.PrefersColorScheme:\n return {\n ...state,\n prefersColorScheme: action.value,\n };\n case ActionType.PrefersReducedMotion:\n return {\n ...state,\n prefersReducedMotion: action.value,\n };\n case ActionType.ForcedColors:\n return {\n ...state,\n forcedColors: action.value,\n };\n default:\n return state;\n }\n};\n\n/**\n * Hook som gir informasjon om brukerens foretrukne konfigurasjon.\n * @returns Objekt med informasjon om brukerens foretrukne tema (lyst vs mørkt), redusert bevegelse, og høykontrast (forced colors).\n */\nexport const useBrowserPreferences = (): BrowserPreferences => {\n const [hasMounted, setHasMounted] = useState(false);\n\n const [state, dispatch] = useReducer(reducer, initialState);\n\n useEffect(() => {\n setHasMounted(true);\n const prefersReducedMotion = getInitialMediaQueryMatch(\n PREFERS_REDUCED_MOTION,\n );\n const prefersColorScheme = getInitialMediaQueryMatch(\n PREFERS_LIGHT_COLOR_SCHEME,\n )\n ? \"light\"\n : \"dark\";\n const forcedColors = getInitialMediaQueryMatch(FORCED_COLORS);\n dispatch({\n type: ActionType.PrefersReducedMotion,\n value: prefersReducedMotion,\n });\n dispatch({\n type: ActionType.PrefersColorScheme,\n value: prefersColorScheme,\n });\n dispatch({ type: ActionType.ForcedColors, value: forcedColors });\n }, []);\n\n useEffect(() => {\n if (!hasMounted || !window.matchMedia) {\n return;\n }\n const onPrefersReducedMotionChange = (e: MediaQueryListEvent) => {\n dispatch({\n type: ActionType.PrefersReducedMotion,\n value: e.matches,\n });\n };\n const onPrefersColorSchemeChange = (e: MediaQueryListEvent) => {\n dispatch({\n type: ActionType.PrefersColorScheme,\n value: e.matches ? \"light\" : \"dark\",\n });\n };\n const onForcedColorsChange = (e: MediaQueryListEvent) => {\n dispatch({ type: ActionType.ForcedColors, value: e.matches });\n };\n\n addMediaQueryListener(\n window.matchMedia(PREFERS_REDUCED_MOTION),\n onPrefersReducedMotionChange,\n );\n addMediaQueryListener(\n window.matchMedia(PREFERS_LIGHT_COLOR_SCHEME),\n onPrefersColorSchemeChange,\n );\n addMediaQueryListener(\n window.matchMedia(FORCED_COLORS),\n onForcedColorsChange,\n );\n\n return () => {\n removeMediaQueryListener(\n window.matchMedia(PREFERS_REDUCED_MOTION),\n onPrefersReducedMotionChange,\n );\n removeMediaQueryListener(\n window.matchMedia(PREFERS_LIGHT_COLOR_SCHEME),\n onPrefersColorSchemeChange,\n );\n removeMediaQueryListener(\n window.matchMedia(FORCED_COLORS),\n onForcedColorsChange,\n );\n };\n }, [hasMounted]);\n\n return { ...state };\n};\n"],"names":["ActionType","PREFERS_REDUCED_MOTION","PREFERS_LIGHT_COLOR_SCHEME","FORCED_COLORS","initialState","prefersReducedMotion","prefersColorScheme","forcedColors","reducer","state","action","type","value","useBrowserPreferences","hasMounted","setHasMounted","useState","dispatch","useReducer","useEffect","getInitialMediaQueryMatch","window","matchMedia","onPrefersReducedMotionChange","e","matches","onPrefersColorSchemeChange","onForcedColorsChange","addMediaQueryListener","removeMediaQueryListener"],"mappings":"2LAcA,MAAMA,EACkB,uBADlBA,EAEoB,yBAFpBA,EAGY,wBAiBZC,EAAyB,mCACzBC,EAA6B,gCAC7BC,EAAgB,0BAEhBC,EAAmC,CACrCC,sBAAsB,EACtBC,mBAAoB,QACpBC,cAAc,GAGZC,EAA+C,CAACC,EAAOC,KACzD,OAAQA,EAAOC,MACX,KAAKX,EACD,MAAO,IACAS,EACHH,mBAAoBI,EAAOE,OAEnC,KAAKZ,EACD,MAAO,IACAS,EACHJ,qBAAsBK,EAAOE,OAErC,KAAKZ,EACD,MAAO,IACAS,EACHF,aAAcG,EAAOE,OAE7B,QACI,OAAOH,IAQNI,EAAwB,KACjC,MAAOC,EAAYC,GAAiBC,GAAS,IAEtCP,EAAOQ,GAAYC,EAAWV,EAASJ,GAE9C,OAAAe,EAAU,KACNJ,GAAc,GACd,MAAMV,EAAuBe,EACzBnB,GAEEK,EAAqBc,EACvBlB,GAEE,QACA,OACAK,EAAea,EAA0BjB,GAC/Cc,EAAS,CACLN,KAAMX,EACNY,MAAOP,IAEXY,EAAS,CACLN,KAAMX,EACNY,MAAON,IAEXW,EAAS,CAAEN,KAAMX,EAAyBY,MAAOL,KAClD,IAEHY,EAAU,KACN,IAAKL,IAAeO,OAAOC,WACvB,OAEJ,MAAMC,EAAgCC,IAClCP,EAAS,CACLN,KAAMX,EACNY,MAAOY,EAAEC,WAGXC,EAA8BF,IAChCP,EAAS,CACLN,KAAMX,EACNY,MAAOY,EAAEC,QAAU,QAAU,UAG/BE,EAAwBH,IAC1BP,EAAS,CAAEN,KAAMX,EAAyBY,MAAOY,EAAEC,WAGvD,OAAAG,EACIP,OAAOC,WAAWrB,GAClBsB,GAEJK,EACIP,OAAOC,WAAWpB,GAClBwB,GAEJE,EACIP,OAAOC,WAAWnB,GAClBwB,GAGG,KACHE,EACIR,OAAOC,WAAWrB,GAClBsB,GAEJM,EACIR,OAAOC,WAAWpB,GAClBwB,GAEJG,EACIR,OAAOC,WAAWnB,GAClBwB,KAGT,CAACb,IAEG,IAAKL"}
1
+ {"version":3,"file":"useBrowserPreferences.js","sources":["../../../../src/hooks/useBrowserPreferences/useBrowserPreferences.tsx"],"sourcesContent":["import { type Reducer, useEffect, useReducer, useState } from \"react\";\nimport type { ColorScheme } from \"../../utilities/types.js\";\nimport {\n addMediaQueryListener,\n getInitialMediaQueryMatch,\n removeMediaQueryListener,\n} from \"../mediaQueryUtils.js\";\n\ntype BrowserPreferences = {\n prefersReducedMotion: boolean;\n prefersColorScheme: ColorScheme;\n forcedColors: boolean;\n};\n\nconst ActionType = {\n PrefersColorScheme: \"COLOR_SCHEME_CHANGED\",\n PrefersReducedMotion: \"REDUCED_MOTION_CHANGED\",\n ForcedColors: \"FORCED_COLORS_CHANGED\",\n} as const;\n\ntype Action =\n | {\n type: typeof ActionType.PrefersColorScheme;\n value: ColorScheme;\n }\n | {\n type: typeof ActionType.PrefersReducedMotion;\n value: boolean;\n }\n | {\n type: typeof ActionType.ForcedColors;\n value: boolean;\n };\n\nconst PREFERS_REDUCED_MOTION = \"(prefers-reduced-motion: reduce)\";\nconst PREFERS_LIGHT_COLOR_SCHEME = \"(prefers-color-scheme: light)\";\nconst FORCED_COLORS = \"(forced-colors: active)\";\n\nconst initialState: BrowserPreferences = {\n prefersReducedMotion: false,\n prefersColorScheme: \"light\",\n forcedColors: false,\n};\n\nconst reducer: Reducer<BrowserPreferences, Action> = (state, action) => {\n switch (action.type) {\n case ActionType.PrefersColorScheme:\n return {\n ...state,\n prefersColorScheme: action.value,\n };\n case ActionType.PrefersReducedMotion:\n return {\n ...state,\n prefersReducedMotion: action.value,\n };\n case ActionType.ForcedColors:\n return {\n ...state,\n forcedColors: action.value,\n };\n default:\n return state;\n }\n};\n\n/**\n * Hook som gir informasjon om brukerens foretrukne konfigurasjon.\n * @returns Objekt med informasjon om brukerens foretrukne tema (lyst vs mørkt), redusert bevegelse, og høykontrast (forced colors).\n */\nexport const useBrowserPreferences = (): BrowserPreferences => {\n const [hasMounted, setHasMounted] = useState(false);\n\n const [state, dispatch] = useReducer(reducer, initialState);\n\n useEffect(() => {\n setHasMounted(true);\n const prefersReducedMotion = getInitialMediaQueryMatch(\n PREFERS_REDUCED_MOTION,\n );\n const prefersColorScheme = getInitialMediaQueryMatch(\n PREFERS_LIGHT_COLOR_SCHEME,\n )\n ? \"light\"\n : \"dark\";\n const forcedColors = getInitialMediaQueryMatch(FORCED_COLORS);\n dispatch({\n type: ActionType.PrefersReducedMotion,\n value: prefersReducedMotion,\n });\n dispatch({\n type: ActionType.PrefersColorScheme,\n value: prefersColorScheme,\n });\n dispatch({ type: ActionType.ForcedColors, value: forcedColors });\n }, []);\n\n useEffect(() => {\n if (!hasMounted || !window.matchMedia) {\n return;\n }\n const onPrefersReducedMotionChange = (e: MediaQueryListEvent) => {\n dispatch({\n type: ActionType.PrefersReducedMotion,\n value: e.matches,\n });\n };\n const onPrefersColorSchemeChange = (e: MediaQueryListEvent) => {\n dispatch({\n type: ActionType.PrefersColorScheme,\n value: e.matches ? \"light\" : \"dark\",\n });\n };\n const onForcedColorsChange = (e: MediaQueryListEvent) => {\n dispatch({ type: ActionType.ForcedColors, value: e.matches });\n };\n\n addMediaQueryListener(\n window.matchMedia(PREFERS_REDUCED_MOTION),\n onPrefersReducedMotionChange,\n );\n addMediaQueryListener(\n window.matchMedia(PREFERS_LIGHT_COLOR_SCHEME),\n onPrefersColorSchemeChange,\n );\n addMediaQueryListener(\n window.matchMedia(FORCED_COLORS),\n onForcedColorsChange,\n );\n\n return () => {\n removeMediaQueryListener(\n window.matchMedia(PREFERS_REDUCED_MOTION),\n onPrefersReducedMotionChange,\n );\n removeMediaQueryListener(\n window.matchMedia(PREFERS_LIGHT_COLOR_SCHEME),\n onPrefersColorSchemeChange,\n );\n removeMediaQueryListener(\n window.matchMedia(FORCED_COLORS),\n onForcedColorsChange,\n );\n };\n }, [hasMounted]);\n\n return { ...state };\n};\n"],"names":["ActionType","PREFERS_REDUCED_MOTION","PREFERS_LIGHT_COLOR_SCHEME","FORCED_COLORS","initialState","prefersReducedMotion","prefersColorScheme","forcedColors","reducer","state","action","type","value","useBrowserPreferences","hasMounted","setHasMounted","useState","dispatch","useReducer","useEffect","getInitialMediaQueryMatch","window","matchMedia","onPrefersReducedMotionChange","e","matches","onPrefersColorSchemeChange","onForcedColorsChange","addMediaQueryListener","removeMediaQueryListener"],"mappings":"2LAcA,MAAMA,EACkB,uBADlBA,EAEoB,yBAFpBA,EAGY,wBAiBZC,EAAyB,mCACzBC,EAA6B,gCAC7BC,EAAgB,0BAEhBC,EAAmC,CACrCC,sBAAsB,EACtBC,mBAAoB,QACpBC,cAAc,GAGZC,EAA+C,CAACC,EAAOC,KACzD,OAAQA,EAAOC,MACX,KAAKX,EACD,MAAO,IACAS,EACHH,mBAAoBI,EAAOE,OAEnC,KAAKZ,EACD,MAAO,IACAS,EACHJ,qBAAsBK,EAAOE,OAErC,KAAKZ,EACD,MAAO,IACAS,EACHF,aAAcG,EAAOE,OAE7B,QACI,OAAOH,IAQNI,EAAwB,KACjC,MAAOC,EAAYC,GAAiBC,GAAS,IAEtCP,EAAOQ,GAAYC,EAAWV,EAASJ,GAE9C,OAAAe,EAAU,KACNJ,GAAc,GACd,MAAMV,EAAuBe,EACzBnB,GAEEK,EAAqBc,EACvBlB,GAEE,QACA,OACAK,EAAea,EAA0BjB,GAC/Cc,EAAS,CACLN,KAAMX,EACNY,MAAOP,IAEXY,EAAS,CACLN,KAAMX,EACNY,MAAON,IAEXW,EAAS,CAAEN,KAAMX,EAAyBY,MAAOL,KAClD,IAEHY,EAAU,KACN,IAAKL,IAAeO,OAAOC,WACvB,OAEJ,MAAMC,EAAgCC,IAClCP,EAAS,CACLN,KAAMX,EACNY,MAAOY,EAAEC,WAGXC,EAA8BF,IAChCP,EAAS,CACLN,KAAMX,EACNY,MAAOY,EAAEC,QAAU,QAAU,UAG/BE,EAAwBH,IAC1BP,EAAS,CAAEN,KAAMX,EAAyBY,MAAOY,EAAEC,WAGvD,OAAAG,EACIP,OAAOC,WAAWrB,GAClBsB,GAEJK,EACIP,OAAOC,WAAWpB,GAClBwB,GAEJE,EACIP,OAAOC,WAAWnB,GAClBwB,GAGG,KACHE,EACIR,OAAOC,WAAWrB,GAClBsB,GAEJM,EACIR,OAAOC,WAAWpB,GAClBwB,GAEJG,EACIR,OAAOC,WAAWnB,GAClBwB,KAGT,CAACb,IAEG,IAAKL"}
@@ -1,2 +1,2 @@
1
- import{useState as e,useReducer as i,useEffect as t,useCallback as a}from"react";import r from"../../core/tokens.js";import{getInitialMediaQueryMatch as s,addMediaQueryListener as o,removeMediaQueryListener as n}from"../mediaQueryUtils.js";import{reducer as c,ActionType as m}from"./state.js";const{breakpoint:d}=r,p=e=>Number.parseInt(e.replace("px","")),u={isSmallDevice:`(max-width: ${p(d.medium)-1}px)`,isMediumDevice:`(min-width: ${d.medium}) and (max-width: ${p(d.large)-1}px)`,isLargeDevice:`(min-width: ${d.large}) and (max-width: ${p(d.xl)-1}px)`,isXlDevice:`(min-width: ${d.xl})`,isPortrait:"(orientation: portrait)",isLandscape:"(orientation: landscape)"},l=e=>({type:"isLandscape"===e||"isPortrait"===e?m.orientation:m.deviceSize,property:e}),f=()=>{const[r,m]=e(!1),[d,p]=i(c,{isSmallDevice:!1,isMediumDevice:!1,isLargeDevice:!1,isXlDevice:!1,isLandscape:!1,isPortrait:!1});t(()=>{m(!0);const e=Object.entries(u).map(([e,i])=>[e,s(i)]);for(const[i,t]of e)t&&p(l(i))},[]);const f=a(e=>i=>{requestAnimationFrame(()=>{i.matches&&p(l(e))})},[]);return t(()=>{if(!r||!window.matchMedia)return;const e=[];for(const[i,t]of Object.entries(u)){const a=window.matchMedia(t),r=f(i);e.push([a,r]),o(a,r)}return()=>{for(const[i,t]of e)n(i,t)}},[f,r]),{...d}};export{f as useScreen};
1
+ import{useState as e,useReducer as i,useEffect as t,useCallback as a}from"react";import s from"../../tokens.js";import{getInitialMediaQueryMatch as r,addMediaQueryListener as o,removeMediaQueryListener as n}from"../mediaQueryUtils.js";import{reducer as c,ActionType as m}from"./state.js";const{breakpoint:d}=s,p=e=>Number.parseInt(e.replace("px","")),u={isSmallDevice:`(max-width: ${p(d.medium)-1}px)`,isMediumDevice:`(min-width: ${d.medium}) and (max-width: ${p(d.large)-1}px)`,isLargeDevice:`(min-width: ${d.large}) and (max-width: ${p(d.xl)-1}px)`,isXlDevice:`(min-width: ${d.xl})`,isPortrait:"(orientation: portrait)",isLandscape:"(orientation: landscape)"},l=e=>({type:"isLandscape"===e||"isPortrait"===e?m.orientation:m.deviceSize,property:e}),f=()=>{const[s,m]=e(!1),[d,p]=i(c,{isSmallDevice:!1,isMediumDevice:!1,isLargeDevice:!1,isXlDevice:!1,isLandscape:!1,isPortrait:!1});t(()=>{m(!0);const e=Object.entries(u).map(([e,i])=>[e,r(i)]);for(const[i,t]of e)t&&p(l(i))},[]);const f=a(e=>i=>{requestAnimationFrame(()=>{i.matches&&p(l(e))})},[]);return t(()=>{if(!s||!window.matchMedia)return;const e=[];for(const[i,t]of Object.entries(u)){const a=window.matchMedia(t),s=f(i);e.push([a,s]),o(a,s)}return()=>{for(const[i,t]of e)n(i,t)}},[f,s]),{...d}};export{f as useScreen};
2
2
  //# sourceMappingURL=useScreen.js.map