@navikt/ds-react 5.13.0 → 5.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (359) hide show
  1. package/_docs.json +206 -135
  2. package/cjs/accordion/AccordionHeader.js +2 -4
  3. package/cjs/button/Button.js +11 -12
  4. package/cjs/chips/Removable.js +3 -6
  5. package/cjs/copybutton/CopyButton.js +4 -5
  6. package/cjs/date/datepicker/DatePicker.js +4 -2
  7. package/cjs/date/datepicker/parts/WeekRow.js +2 -2
  8. package/cjs/date/monthpicker/MonthPicker.js +4 -3
  9. package/cjs/date/parts/DateWrapper.js +2 -2
  10. package/cjs/dropdown/Menu/GroupedList/GroupedItem.js +3 -6
  11. package/cjs/dropdown/Menu/List/Item.js +3 -6
  12. package/cjs/dropdown/Toggle.js +6 -5
  13. package/cjs/form/ConfirmationPanel.js +2 -2
  14. package/cjs/form/Textarea.js +2 -1
  15. package/cjs/form/checkbox/Checkbox.js +3 -2
  16. package/cjs/form/combobox/Combobox.js +2 -2
  17. package/cjs/form/combobox/FilteredOptions/filteredOptionsContext.js +3 -4
  18. package/cjs/form/combobox/Input/inputContext.js +2 -2
  19. package/cjs/form/combobox/SelectedOptions/selectedOptionsContext.js +2 -5
  20. package/cjs/form/error-summary/ErrorSummary.js +2 -2
  21. package/cjs/form/radio/Radio.js +3 -2
  22. package/cjs/form/radio/RadioGroup.js +2 -2
  23. package/cjs/form/search/Search.js +2 -1
  24. package/cjs/form/search/SearchButton.js +2 -4
  25. package/cjs/form/useFormField.js +2 -2
  26. package/cjs/guide-panel/Illustration.js +2 -2
  27. package/cjs/help-text/HelpText.js +5 -7
  28. package/cjs/help-text/HelpTextIcon.js +2 -2
  29. package/cjs/list/List.js +2 -2
  30. package/cjs/loader/Loader.js +2 -1
  31. package/cjs/modal/Modal.js +21 -18
  32. package/cjs/modal/dialog-polyfill.js +2 -2
  33. package/cjs/popover/Popover.js +6 -5
  34. package/cjs/read-more/ReadMore.js +2 -4
  35. package/cjs/stepper/Step.js +6 -6
  36. package/cjs/{util → table}/AnimateHeight.js +4 -5
  37. package/cjs/table/DataCell.js +2 -2
  38. package/cjs/table/ExpandableRow.js +9 -9
  39. package/cjs/table/HeaderCell.js +2 -1
  40. package/cjs/tabs/TabList.js +2 -1
  41. package/cjs/tag/Tag.js +4 -2
  42. package/cjs/timeline/Pin.js +2 -2
  43. package/cjs/timeline/period/ClickablePeriod.js +2 -2
  44. package/cjs/toggle-group/ToggleGroup.js +2 -2
  45. package/cjs/tooltip/Tooltip.js +6 -5
  46. package/cjs/util/Slot.js +2 -5
  47. package/cjs/util/TextareaAutoSize.js +7 -5
  48. package/cjs/util/composeEventHandlers.js +17 -0
  49. package/cjs/util/hooks/index.js +19 -0
  50. package/cjs/util/hooks/package.json +6 -0
  51. package/cjs/util/hooks/useClientLayoutEffect.js +7 -0
  52. package/cjs/util/hooks/useMergeRefs.js +37 -0
  53. package/cjs/util/{usePrevious.js → hooks/usePrevious.js} +2 -1
  54. package/cjs/util/index.js +7 -7
  55. package/cjs/util/types/index.js +2 -0
  56. package/cjs/util/types/package.json +6 -0
  57. package/esm/accordion/AccordionHeader.js +2 -4
  58. package/esm/accordion/AccordionHeader.js.map +1 -1
  59. package/esm/button/Button.d.ts +1 -1
  60. package/esm/button/Button.js +12 -13
  61. package/esm/button/Button.js.map +1 -1
  62. package/esm/chips/Chips.d.ts +1 -1
  63. package/esm/chips/Removable.js +3 -6
  64. package/esm/chips/Removable.js.map +1 -1
  65. package/esm/chips/Toggle.d.ts +1 -1
  66. package/esm/copybutton/CopyButton.js +4 -5
  67. package/esm/copybutton/CopyButton.js.map +1 -1
  68. package/esm/date/datepicker/DatePicker.js +5 -3
  69. package/esm/date/datepicker/DatePicker.js.map +1 -1
  70. package/esm/date/datepicker/parts/WeekRow.js +1 -1
  71. package/esm/date/datepicker/parts/WeekRow.js.map +1 -1
  72. package/esm/date/monthpicker/MonthPicker.js +4 -3
  73. package/esm/date/monthpicker/MonthPicker.js.map +1 -1
  74. package/esm/date/parts/DateWrapper.js +1 -1
  75. package/esm/date/parts/DateWrapper.js.map +1 -1
  76. package/esm/date/utils/dates-disabled.d.ts +1 -1
  77. package/esm/date/utils/dates-disabled.js.map +1 -1
  78. package/esm/dropdown/Menu/GroupedList/GroupedItem.d.ts +1 -1
  79. package/esm/dropdown/Menu/GroupedList/GroupedItem.js +3 -6
  80. package/esm/dropdown/Menu/GroupedList/GroupedItem.js.map +1 -1
  81. package/esm/dropdown/Menu/GroupedList/index.d.ts +1 -1
  82. package/esm/dropdown/Menu/List/Item.d.ts +1 -1
  83. package/esm/dropdown/Menu/List/Item.js +3 -6
  84. package/esm/dropdown/Menu/List/Item.js.map +1 -1
  85. package/esm/dropdown/Menu/List/index.d.ts +1 -1
  86. package/esm/dropdown/Toggle.js +6 -5
  87. package/esm/dropdown/Toggle.js.map +1 -1
  88. package/esm/expansion-card/ExpansionCard.d.ts +1 -1
  89. package/esm/expansion-card/ExpansionCardTitle.d.ts +1 -1
  90. package/esm/form/ConfirmationPanel.js +1 -1
  91. package/esm/form/ConfirmationPanel.js.map +1 -1
  92. package/esm/form/Textarea.js +2 -1
  93. package/esm/form/Textarea.js.map +1 -1
  94. package/esm/form/checkbox/Checkbox.js +2 -1
  95. package/esm/form/checkbox/Checkbox.js.map +1 -1
  96. package/esm/form/combobox/Combobox.js +3 -3
  97. package/esm/form/combobox/Combobox.js.map +1 -1
  98. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js +1 -2
  99. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js.map +1 -1
  100. package/esm/form/combobox/FilteredOptions/useVirtualFocus.js.map +1 -1
  101. package/esm/form/combobox/Input/inputContext.js +1 -1
  102. package/esm/form/combobox/Input/inputContext.js.map +1 -1
  103. package/esm/form/combobox/SelectedOptions/selectedOptionsContext.js +1 -1
  104. package/esm/form/combobox/SelectedOptions/selectedOptionsContext.js.map +1 -1
  105. package/esm/form/error-summary/ErrorSummary.js +1 -1
  106. package/esm/form/error-summary/ErrorSummary.js.map +1 -1
  107. package/esm/form/error-summary/ErrorSummaryItem.d.ts +1 -1
  108. package/esm/form/radio/Radio.js +2 -1
  109. package/esm/form/radio/Radio.js.map +1 -1
  110. package/esm/form/radio/RadioGroup.js +1 -1
  111. package/esm/form/radio/RadioGroup.js.map +1 -1
  112. package/esm/form/search/Search.js +4 -3
  113. package/esm/form/search/Search.js.map +1 -1
  114. package/esm/form/search/SearchButton.js +2 -4
  115. package/esm/form/search/SearchButton.js.map +1 -1
  116. package/esm/form/useFormField.js +1 -1
  117. package/esm/form/useFormField.js.map +1 -1
  118. package/esm/guide-panel/Illustration.js +1 -1
  119. package/esm/guide-panel/Illustration.js.map +1 -1
  120. package/esm/help-text/HelpText.d.ts +0 -5
  121. package/esm/help-text/HelpText.js +6 -8
  122. package/esm/help-text/HelpText.js.map +1 -1
  123. package/esm/help-text/HelpTextIcon.js +1 -1
  124. package/esm/internal-header/InternalHeader.d.ts +1 -1
  125. package/esm/internal-header/InternalHeaderButton.d.ts +1 -1
  126. package/esm/internal-header/InternalHeaderTitle.d.ts +1 -1
  127. package/esm/internal-header/InternalHeaderUserButton.d.ts +1 -1
  128. package/esm/layout/box/Box.d.ts +1 -1
  129. package/esm/layout/page/parts/PageBlock.d.ts +1 -1
  130. package/esm/layout/stack/HStack.d.ts +1 -1
  131. package/esm/layout/stack/Stack.d.ts +1 -1
  132. package/esm/layout/stack/VStack.d.ts +1 -1
  133. package/esm/link/Link.d.ts +1 -1
  134. package/esm/link-panel/LinkPanel.d.ts +1 -1
  135. package/esm/link-panel/LinkPanelTitle.d.ts +1 -1
  136. package/esm/list/List.js +1 -1
  137. package/esm/loader/Loader.js +2 -1
  138. package/esm/loader/Loader.js.map +1 -1
  139. package/esm/modal/Modal.js +21 -18
  140. package/esm/modal/Modal.js.map +1 -1
  141. package/esm/modal/dialog-polyfill.js +2 -2
  142. package/esm/modal/dialog-polyfill.js.map +1 -1
  143. package/esm/modal/types.d.ts +1 -1
  144. package/esm/pagination/PaginationItem.d.ts +1 -1
  145. package/esm/panel/Panel.d.ts +1 -1
  146. package/esm/popover/Popover.d.ts +1 -1
  147. package/esm/popover/Popover.js +4 -3
  148. package/esm/popover/Popover.js.map +1 -1
  149. package/esm/read-more/ReadMore.js +2 -4
  150. package/esm/read-more/ReadMore.js.map +1 -1
  151. package/esm/stepper/Step.d.ts +1 -1
  152. package/esm/stepper/Step.js +6 -6
  153. package/esm/stepper/Step.js.map +1 -1
  154. package/esm/{util → table}/AnimateHeight.js +4 -5
  155. package/esm/table/AnimateHeight.js.map +1 -0
  156. package/esm/table/DataCell.d.ts +4 -0
  157. package/esm/table/DataCell.js +2 -2
  158. package/esm/table/DataCell.js.map +1 -1
  159. package/esm/table/ExpandableRow.js +8 -8
  160. package/esm/table/ExpandableRow.js.map +1 -1
  161. package/esm/table/HeaderCell.d.ts +4 -0
  162. package/esm/table/HeaderCell.js +2 -1
  163. package/esm/table/HeaderCell.js.map +1 -1
  164. package/esm/tabs/Tab.d.ts +1 -1
  165. package/esm/tabs/TabList.js +3 -2
  166. package/esm/tabs/TabList.js.map +1 -1
  167. package/esm/tabs/Tabs.d.ts +1 -1
  168. package/esm/tag/Tag.d.ts +4 -0
  169. package/esm/tag/Tag.js +4 -2
  170. package/esm/tag/Tag.js.map +1 -1
  171. package/esm/timeline/Pin.js +3 -3
  172. package/esm/timeline/Pin.js.map +1 -1
  173. package/esm/timeline/period/ClickablePeriod.js +3 -3
  174. package/esm/timeline/period/ClickablePeriod.js.map +1 -1
  175. package/esm/toggle-group/ToggleGroup.js +1 -1
  176. package/esm/toggle-group/ToggleGroup.js.map +1 -1
  177. package/esm/tooltip/Tooltip.js +6 -5
  178. package/esm/tooltip/Tooltip.js.map +1 -1
  179. package/esm/typography/BodyLong.d.ts +1 -1
  180. package/esm/typography/BodyShort.d.ts +1 -1
  181. package/esm/typography/Detail.d.ts +1 -1
  182. package/esm/typography/ErrorMessage.d.ts +1 -1
  183. package/esm/typography/Heading.d.ts +1 -1
  184. package/esm/typography/Ingress.d.ts +1 -1
  185. package/esm/typography/Label.d.ts +1 -1
  186. package/esm/util/Slot.js +1 -1
  187. package/esm/util/Slot.js.map +1 -1
  188. package/esm/util/TextareaAutoSize.js +5 -3
  189. package/esm/util/TextareaAutoSize.js.map +1 -1
  190. package/esm/util/composeEventHandlers.d.ts +8 -0
  191. package/esm/util/composeEventHandlers.js +14 -0
  192. package/esm/util/composeEventHandlers.js.map +1 -0
  193. package/esm/util/hooks/index.d.ts +8 -0
  194. package/esm/util/hooks/index.js +9 -0
  195. package/esm/util/hooks/index.js.map +1 -0
  196. package/esm/util/hooks/useClientLayoutEffect.js +5 -0
  197. package/esm/util/hooks/useClientLayoutEffect.js.map +1 -0
  198. package/esm/util/{useEventListener.d.ts → hooks/useEventListener.d.ts} +1 -1
  199. package/esm/util/hooks/useEventListener.js.map +1 -0
  200. package/esm/util/hooks/useId.js.map +1 -0
  201. package/esm/util/hooks/useMedia.js.map +1 -0
  202. package/esm/util/hooks/useMergeRefs.d.ts +15 -0
  203. package/esm/util/hooks/useMergeRefs.js +30 -0
  204. package/esm/util/hooks/useMergeRefs.js.map +1 -0
  205. package/esm/util/hooks/usePrevious.d.ts +1 -0
  206. package/esm/util/{usePrevious.js → hooks/usePrevious.js} +1 -2
  207. package/esm/util/hooks/usePrevious.js.map +1 -0
  208. package/esm/util/index.d.ts +4 -5
  209. package/esm/util/index.js +3 -5
  210. package/esm/util/index.js.map +1 -1
  211. package/esm/util/types/OverridableComponent.js.map +1 -0
  212. package/esm/util/types/index.d.ts +1 -0
  213. package/esm/util/types/index.js +2 -0
  214. package/esm/util/types/index.js.map +1 -0
  215. package/package.json +3 -3
  216. package/src/accordion/AccordionHeader.tsx +2 -4
  217. package/src/accordion/AccordionItem.tsx +2 -2
  218. package/src/alert/alert.stories.tsx +1 -2
  219. package/src/button/Button.tsx +14 -19
  220. package/src/button/button.stories.tsx +2 -2
  221. package/src/chips/Chips.tsx +1 -1
  222. package/src/chips/Removable.tsx +3 -4
  223. package/src/chips/Toggle.tsx +1 -1
  224. package/src/copybutton/CopyButton.tsx +4 -5
  225. package/src/copybutton/copy-button.stories.tsx +1 -1
  226. package/src/date/datepicker/DatePicker.tsx +5 -3
  227. package/src/date/datepicker/parts/WeekRow.tsx +1 -1
  228. package/src/date/monthpicker/MonthPicker.tsx +4 -3
  229. package/src/date/parts/DateWrapper.tsx +1 -1
  230. package/src/date/utils/dates-disabled.ts +1 -1
  231. package/src/dropdown/Menu/GroupedList/GroupedItem.tsx +23 -23
  232. package/src/dropdown/Menu/GroupedList/index.tsx +1 -1
  233. package/src/dropdown/Menu/List/Item.tsx +23 -23
  234. package/src/dropdown/Menu/List/index.tsx +1 -1
  235. package/src/dropdown/Toggle.tsx +10 -6
  236. package/src/expansion-card/ExpansionCard.tsx +1 -1
  237. package/src/expansion-card/ExpansionCardTitle.tsx +1 -1
  238. package/src/form/ConfirmationPanel.tsx +1 -1
  239. package/src/form/Textarea.tsx +2 -1
  240. package/src/form/checkbox/Checkbox.tsx +2 -1
  241. package/src/form/combobox/Combobox.tsx +3 -6
  242. package/src/form/combobox/FilteredOptions/filteredOptionsContext.tsx +1 -2
  243. package/src/form/combobox/FilteredOptions/useVirtualFocus.ts +1 -1
  244. package/src/form/combobox/Input/inputContext.tsx +1 -1
  245. package/src/form/combobox/SelectedOptions/selectedOptionsContext.tsx +1 -1
  246. package/src/form/combobox/combobox.stories.tsx +10 -11
  247. package/src/form/error-summary/ErrorSummary.tsx +1 -1
  248. package/src/form/error-summary/ErrorSummaryItem.tsx +1 -1
  249. package/src/form/radio/Radio.tsx +2 -1
  250. package/src/form/radio/RadioGroup.tsx +1 -1
  251. package/src/form/search/Search.tsx +3 -3
  252. package/src/form/search/SearchButton.tsx +2 -4
  253. package/src/form/useFormField.ts +1 -1
  254. package/src/guide-panel/Illustration.tsx +1 -1
  255. package/src/help-text/HelpText.tsx +7 -25
  256. package/src/help-text/HelpTextIcon.tsx +1 -1
  257. package/src/help-text/help-text.stories.tsx +58 -68
  258. package/src/internal-header/InternalHeader.tsx +1 -1
  259. package/src/internal-header/InternalHeaderButton.tsx +1 -1
  260. package/src/internal-header/InternalHeaderTitle.tsx +1 -1
  261. package/src/internal-header/InternalHeaderUserButton.tsx +1 -1
  262. package/src/layout/box/Box.tsx +1 -1
  263. package/src/layout/page/parts/PageBlock.tsx +1 -1
  264. package/src/layout/stack/HStack.tsx +1 -1
  265. package/src/layout/stack/Stack.tsx +1 -1
  266. package/src/layout/stack/VStack.tsx +1 -1
  267. package/src/link/Link.tsx +1 -1
  268. package/src/link/{link.stories.tsx → stories/link.stories.tsx} +2 -2
  269. package/src/link-panel/LinkPanel.tsx +1 -1
  270. package/src/link-panel/LinkPanelTitle.tsx +1 -1
  271. package/src/list/List.tsx +1 -1
  272. package/src/loader/Loader.tsx +2 -1
  273. package/src/modal/Modal.tsx +30 -30
  274. package/src/modal/dialog-polyfill.ts +2 -2
  275. package/src/modal/types.ts +1 -1
  276. package/src/pagination/PaginationItem.tsx +1 -1
  277. package/src/panel/Panel.tsx +1 -1
  278. package/src/popover/Popover.tsx +4 -7
  279. package/src/read-more/ReadMore.tsx +2 -4
  280. package/src/stepper/Step.tsx +8 -5
  281. package/src/{util → table}/AnimateHeight.tsx +5 -9
  282. package/src/table/DataCell.tsx +6 -1
  283. package/src/table/ExpandableRow.tsx +11 -6
  284. package/src/table/HeaderCell.tsx +6 -1
  285. package/src/table/stories/table.stories.tsx +43 -29
  286. package/src/table/stories/tests/table.stories.tsx +2 -3
  287. package/src/tabs/Tab.tsx +1 -1
  288. package/src/tabs/TabList.tsx +4 -2
  289. package/src/tabs/Tabs.tsx +1 -1
  290. package/src/tag/Tag.tsx +9 -2
  291. package/src/tag/tag.stories.tsx +27 -1
  292. package/src/timeline/Pin.tsx +3 -6
  293. package/src/timeline/period/ClickablePeriod.tsx +3 -6
  294. package/src/toggle-group/ToggleGroup.tsx +1 -1
  295. package/src/tooltip/Tooltip.tsx +11 -22
  296. package/src/typography/BodyLong.tsx +1 -1
  297. package/src/typography/BodyShort.tsx +1 -1
  298. package/src/typography/Detail.tsx +1 -1
  299. package/src/typography/ErrorMessage.tsx +1 -1
  300. package/src/typography/Heading.tsx +1 -1
  301. package/src/typography/Ingress.tsx +1 -1
  302. package/src/typography/Label.tsx +1 -1
  303. package/src/typography/stories/bodylong.stories.tsx +1 -2
  304. package/src/typography/stories/bodyshort.stories.tsx +1 -2
  305. package/src/typography/stories/detail.stories.tsx +1 -2
  306. package/src/typography/stories/error-message.stories.tsx +1 -2
  307. package/src/typography/stories/heading.stories.tsx +1 -2
  308. package/src/typography/stories/ingress.stories.tsx +1 -2
  309. package/src/typography/stories/label.stories.tsx +1 -2
  310. package/src/util/Slot.tsx +1 -1
  311. package/src/util/TextareaAutoSize.tsx +7 -3
  312. package/src/util/__tests__/useMedia.test.tsx +1 -1
  313. package/src/util/composeEventHandlers.ts +19 -0
  314. package/src/util/hooks/index.ts +8 -0
  315. package/src/util/hooks/useCallbackRef.ts +1 -1
  316. package/src/util/hooks/useClientLayoutEffect.ts +5 -0
  317. package/src/util/hooks/useControllableState.ts +1 -1
  318. package/src/util/hooks/useMergeRefs.ts +32 -0
  319. package/src/util/{usePrevious.ts → hooks/usePrevious.ts} +1 -4
  320. package/src/util/index.ts +4 -5
  321. package/src/util/types/index.ts +1 -0
  322. package/cjs/util/RandomIcon.js +0 -38
  323. package/cjs/util/mergeRefs.js +0 -16
  324. package/cjs/util/useClientLayoutEffect.js +0 -10
  325. package/esm/util/AnimateHeight.js.map +0 -1
  326. package/esm/util/OverridableComponent.js.map +0 -1
  327. package/esm/util/RandomIcon.d.ts +0 -2
  328. package/esm/util/RandomIcon.js +0 -9
  329. package/esm/util/RandomIcon.js.map +0 -1
  330. package/esm/util/mergeRefs.d.ts +0 -2
  331. package/esm/util/mergeRefs.js +0 -14
  332. package/esm/util/mergeRefs.js.map +0 -1
  333. package/esm/util/useClientLayoutEffect.js +0 -8
  334. package/esm/util/useClientLayoutEffect.js.map +0 -1
  335. package/esm/util/useEventListener.js.map +0 -1
  336. package/esm/util/useId.js.map +0 -1
  337. package/esm/util/useMedia.js.map +0 -1
  338. package/esm/util/usePrevious.d.ts +0 -2
  339. package/esm/util/usePrevious.js.map +0 -1
  340. package/src/util/mergeRefs.tsx +0 -16
  341. package/src/util/useClientLayoutEffect.ts +0 -11
  342. /package/cjs/util/{useEventListener.js → hooks/useEventListener.js} +0 -0
  343. /package/cjs/util/{useId.js → hooks/useId.js} +0 -0
  344. /package/cjs/util/{useMedia.js → hooks/useMedia.js} +0 -0
  345. /package/cjs/util/{OverridableComponent.js → types/OverridableComponent.js} +0 -0
  346. /package/esm/{util → table}/AnimateHeight.d.ts +0 -0
  347. /package/esm/util/{useClientLayoutEffect.d.ts → hooks/useClientLayoutEffect.d.ts} +0 -0
  348. /package/esm/util/{useEventListener.js → hooks/useEventListener.js} +0 -0
  349. /package/esm/util/{useId.d.ts → hooks/useId.d.ts} +0 -0
  350. /package/esm/util/{useId.js → hooks/useId.js} +0 -0
  351. /package/esm/util/{useMedia.d.ts → hooks/useMedia.d.ts} +0 -0
  352. /package/esm/util/{useMedia.js → hooks/useMedia.js} +0 -0
  353. /package/esm/util/{OverridableComponent.d.ts → types/OverridableComponent.d.ts} +0 -0
  354. /package/esm/util/{OverridableComponent.js → types/OverridableComponent.js} +0 -0
  355. /package/src/{util → link/stories}/RandomIcon.tsx +0 -0
  356. /package/src/util/{useEventListener.ts → hooks/useEventListener.ts} +0 -0
  357. /package/src/util/{useId.ts → hooks/useId.ts} +0 -0
  358. /package/src/util/{useMedia.ts → hooks/useMedia.ts} +0 -0
  359. /package/src/util/{OverridableComponent.ts → types/OverridableComponent.ts} +0 -0
@@ -4,7 +4,7 @@ import { Button } from "../../button";
4
4
  import { Modal } from "../../modal";
5
5
  import { ModalContext } from "../../modal/ModalContext";
6
6
  import { Popover } from "../../popover";
7
- import { useMedia } from "../../util/useMedia";
7
+ import { useMedia } from "../../util/hooks";
8
8
  import { modalCloseButtonLabel, modalLabel } from "../utils/labels";
9
9
 
10
10
  type DateWrapperProps = {
@@ -3,7 +3,7 @@ import { isDateRange } from "react-day-picker";
3
3
 
4
4
  // TODO: ((date: Date) => boolean)
5
5
  export const disableDate = (
6
- disabledSelection: Date | Array<any>,
6
+ disabledSelection: Date | any[],
7
7
  date: Date,
8
8
  ): boolean => {
9
9
  let result: boolean = false;
@@ -1,6 +1,7 @@
1
1
  import cl from "clsx";
2
2
  import React, { forwardRef, useContext } from "react";
3
- import { OverridableComponent } from "../../../util";
3
+ import { composeEventHandlers } from "../../../util/composeEventHandlers";
4
+ import { OverridableComponent } from "../../../util/types";
4
5
  import { DropdownContext } from "../../context";
5
6
 
6
7
  export interface GroupedItemProps
@@ -14,28 +15,27 @@ export interface GroupedItemProps
14
15
  export const GroupedItem: OverridableComponent<
15
16
  GroupedItemProps,
16
17
  HTMLButtonElement
17
- > = forwardRef(({ as: Component = "button", className, ...rest }, ref) => {
18
- const context = useContext(DropdownContext);
18
+ > = forwardRef(
19
+ ({ as: Component = "button", className, onClick, ...rest }, ref) => {
20
+ const context = useContext(DropdownContext);
19
21
 
20
- return (
21
- <dd className="navds-dropdown__list-item">
22
- <Component
23
- {...rest}
24
- value={rest.children}
25
- onClick={(event: React.MouseEvent<HTMLElement, MouseEvent>) => {
26
- context?.onSelect?.(event);
27
- rest?.onClick?.(event);
28
- }}
29
- ref={ref}
30
- className={cl(
31
- "navds-dropdown__item",
32
- "navds-body-short",
33
- "navds-body-short--small",
34
- className,
35
- )}
36
- />
37
- </dd>
38
- );
39
- });
22
+ return (
23
+ <dd className="navds-dropdown__list-item">
24
+ <Component
25
+ {...rest}
26
+ value={rest.children}
27
+ onClick={composeEventHandlers(onClick, context?.onSelect)}
28
+ ref={ref}
29
+ className={cl(
30
+ "navds-dropdown__item",
31
+ "navds-body-short",
32
+ "navds-body-short--small",
33
+ className,
34
+ )}
35
+ />
36
+ </dd>
37
+ );
38
+ },
39
+ );
40
40
 
41
41
  export default GroupedItem;
@@ -1,6 +1,6 @@
1
1
  import cl from "clsx";
2
2
  import React, { forwardRef } from "react";
3
- import { OverridableComponent } from "../../../util";
3
+ import { OverridableComponent } from "../../../util/types";
4
4
  import GroupedHeading, { GroupedHeadingProps } from "./GroupedHeading";
5
5
  import GroupedItem, { GroupedItemProps } from "./GroupedItem";
6
6
 
@@ -1,6 +1,7 @@
1
1
  import cl from "clsx";
2
2
  import React, { forwardRef, useContext } from "react";
3
- import { OverridableComponent } from "../../../util";
3
+ import { composeEventHandlers } from "../../../util/composeEventHandlers";
4
+ import { OverridableComponent } from "../../../util/types";
4
5
  import { DropdownContext } from "../../context";
5
6
 
6
7
  export interface ListItemProps extends React.ButtonHTMLAttributes<HTMLElement> {
@@ -11,28 +12,27 @@ export interface ListItemProps extends React.ButtonHTMLAttributes<HTMLElement> {
11
12
  }
12
13
 
13
14
  export const ListItem: OverridableComponent<ListItemProps, HTMLButtonElement> =
14
- forwardRef(({ as: Component = "button", className, ...rest }, ref) => {
15
- const context = useContext(DropdownContext);
15
+ forwardRef(
16
+ ({ as: Component = "button", className, onClick, ...rest }, ref) => {
17
+ const context = useContext(DropdownContext);
16
18
 
17
- return (
18
- <li className="navds-dropdown__list-item">
19
- <Component
20
- {...rest}
21
- value={rest.children}
22
- onClick={(event: React.MouseEvent<HTMLElement, MouseEvent>) => {
23
- context?.onSelect?.(event);
24
- rest?.onClick?.(event);
25
- }}
26
- ref={ref}
27
- className={cl(
28
- "navds-dropdown__item",
29
- "navds-body-short",
30
- "navds-body-short--small",
31
- className,
32
- )}
33
- />
34
- </li>
35
- );
36
- });
19
+ return (
20
+ <li className="navds-dropdown__list-item">
21
+ <Component
22
+ {...rest}
23
+ value={rest.children}
24
+ onClick={composeEventHandlers(onClick, context?.onSelect)}
25
+ ref={ref}
26
+ className={cl(
27
+ "navds-dropdown__item",
28
+ "navds-body-short",
29
+ "navds-body-short--small",
30
+ className,
31
+ )}
32
+ />
33
+ </li>
34
+ );
35
+ },
36
+ );
37
37
 
38
38
  export default ListItem;
@@ -1,6 +1,6 @@
1
1
  import cl from "clsx";
2
2
  import React, { forwardRef } from "react";
3
- import { OverridableComponent } from "../../../util";
3
+ import { OverridableComponent } from "../../../util/types";
4
4
  import ListItem, { ListItemProps } from "./Item";
5
5
 
6
6
  export interface ListProps extends React.HTMLAttributes<HTMLUListElement> {
@@ -1,5 +1,6 @@
1
1
  import cl from "clsx";
2
2
  import React, { forwardRef, useContext } from "react";
3
+ import { composeEventHandlers } from "../util/composeEventHandlers";
3
4
  import { DropdownContext } from "./context";
4
5
 
5
6
  export interface ToggleProps
@@ -21,6 +22,13 @@ export const Toggle = forwardRef<HTMLButtonElement, ToggleProps>(
21
22
 
22
23
  const { setAnchorEl, handleToggle, isOpen } = context;
23
24
 
25
+ const handleClick = (
26
+ e: React.MouseEvent<HTMLButtonElement, MouseEvent>,
27
+ ) => {
28
+ setAnchorEl(e.currentTarget);
29
+ handleToggle(!isOpen);
30
+ };
31
+
24
32
  return (
25
33
  <button
26
34
  {...rest}
@@ -33,16 +41,12 @@ export const Toggle = forwardRef<HTMLButtonElement, ToggleProps>(
33
41
  ref.current = el;
34
42
  }
35
43
  }}
36
- onClick={(e) => {
37
- setAnchorEl(e.currentTarget);
38
- handleToggle(!isOpen);
39
- onClick && onClick(e);
40
- }}
44
+ onClick={composeEventHandlers(onClick, handleClick)}
41
45
  aria-expanded={isOpen}
42
46
  className={cl("navds-dropdown__toggle", className)}
43
47
  />
44
48
  );
45
- }
49
+ },
46
50
  );
47
51
 
48
52
  export default Toggle;
@@ -1,6 +1,6 @@
1
1
  import cl from "clsx";
2
2
  import React, { forwardRef, useRef, useState } from "react";
3
- import { OverridableComponent } from "../util";
3
+ import { OverridableComponent } from "../util/types";
4
4
  import ExpansionCardContent, {
5
5
  ExpansionCardContentProps,
6
6
  } from "./ExpansionCardContent";
@@ -1,6 +1,6 @@
1
1
  import cl from "clsx";
2
2
  import React, { forwardRef } from "react";
3
- import { OverridableComponent } from "../util";
3
+ import { OverridableComponent } from "../util/types";
4
4
 
5
5
  export interface ExpansionCardTitleProps
6
6
  extends React.HTMLAttributes<HTMLHeadingElement> {
@@ -1,7 +1,7 @@
1
1
  import cl from "clsx";
2
2
  import React, { forwardRef } from "react";
3
3
  import { BodyLong, ErrorMessage } from "../typography";
4
- import { useId } from "../util";
4
+ import { useId } from "../util/hooks";
5
5
  import { Checkbox, CheckboxProps } from "./checkbox";
6
6
  import { useFormField } from "./useFormField";
7
7
 
@@ -1,8 +1,9 @@
1
1
  import cl from "clsx";
2
2
  import React, { forwardRef, useState } from "react";
3
3
  import { BodyShort, ErrorMessage, Label } from "../typography";
4
- import { omit, useId } from "../util";
4
+ import { omit } from "../util";
5
5
  import TextareaAutosize from "../util/TextareaAutoSize";
6
+ import { useId } from "../util/hooks";
6
7
  import { ReadOnlyIcon } from "./ReadOnlyIcon";
7
8
  import Counter from "./TextareaCounter";
8
9
  import { FormFieldProps, useFormField } from "./useFormField";
@@ -1,7 +1,8 @@
1
1
  import cl from "clsx";
2
2
  import React, { forwardRef } from "react";
3
3
  import { BodyShort } from "../../typography";
4
- import { omit, useId } from "../../util";
4
+ import { omit } from "../../util";
5
+ import { useId } from "../../util/hooks";
5
6
  import { ReadOnlyIcon } from "../ReadOnlyIcon";
6
7
  import { CheckboxProps } from "./types";
7
8
  import useCheckbox from "./useCheckbox";
@@ -1,7 +1,7 @@
1
1
  import cl from "clsx";
2
- import React, { forwardRef, useMemo, useRef } from "react";
2
+ import React, { forwardRef, useRef } from "react";
3
3
  import { BodyShort, ErrorMessage, Label } from "../../typography";
4
- import { mergeRefs } from "../../util";
4
+ import { useMergeRefs } from "../../util/hooks/useMergeRefs";
5
5
  import ClearButton from "./ClearButton";
6
6
  import ComboboxWrapper from "./ComboboxWrapper";
7
7
  import FilteredOptions from "./FilteredOptions/FilteredOptions";
@@ -50,10 +50,7 @@ export const Combobox = forwardRef<
50
50
  size = "medium",
51
51
  } = useInputContext();
52
52
 
53
- const mergedInputRef = useMemo(
54
- () => mergeRefs([inputRef, ref]),
55
- [inputRef, ref],
56
- );
53
+ const mergedInputRef = useMergeRefs(inputRef, ref);
57
54
 
58
55
  return (
59
56
  <ComboboxWrapper
@@ -7,8 +7,7 @@ import React, {
7
7
  useMemo,
8
8
  useState,
9
9
  } from "react";
10
- import { useClientLayoutEffect } from "../../../util";
11
- import usePrevious from "../../../util/usePrevious";
10
+ import { useClientLayoutEffect, usePrevious } from "../../../util/hooks";
12
11
  import { useInputContext } from "../Input/inputContext";
13
12
  import { useCustomOptionsContext } from "../customOptionsContext";
14
13
  import { ComboboxProps } from "../types";
@@ -18,7 +18,7 @@ const useVirtualFocus = (
18
18
  ): VirtualFocusType => {
19
19
  const [index, setIndex] = useState(-1);
20
20
 
21
- const listOfAllChildren: Array<HTMLElement> = containerRef?.children
21
+ const listOfAllChildren: HTMLElement[] = containerRef?.children
22
22
  ? Array.prototype.slice.call(containerRef?.children)
23
23
  : [];
24
24
  const elementsAbleToReceiveFocus = listOfAllChildren.filter(
@@ -8,7 +8,7 @@ import React, {
8
8
  useRef,
9
9
  useState,
10
10
  } from "react";
11
- import { useClientLayoutEffect } from "../../../util";
11
+ import { useClientLayoutEffect } from "../../../util/hooks";
12
12
  import { FormFieldType, useFormField } from "../../useFormField";
13
13
 
14
14
  interface InputContextType extends FormFieldType {
@@ -5,7 +5,7 @@ import React, {
5
5
  useMemo,
6
6
  useState,
7
7
  } from "react";
8
- import usePrevious from "../../../util/usePrevious";
8
+ import { usePrevious } from "../../../util/hooks";
9
9
  import { useInputContext } from "../Input/inputContext";
10
10
  import { useCustomOptionsContext } from "../customOptionsContext";
11
11
  import { ComboboxProps } from "../types";
@@ -1,6 +1,5 @@
1
- import { expect, jest } from "@storybook/jest";
2
1
  import { Meta, StoryFn, StoryObj } from "@storybook/react";
3
- import { userEvent, within } from "@storybook/testing-library";
2
+ import { expect, fn, userEvent, within } from "@storybook/test";
4
3
  import React, { useId, useMemo, useState } from "react";
5
4
  import { Chips, ComboboxProps, TextField, UNSAFE_Combobox } from "../../index";
6
5
 
@@ -427,14 +426,14 @@ export const AddWhenAddNewDisabledTest: StoryObject = {
427
426
  };
428
427
 
429
428
  export const TestThatCallbacksOnlyFireWhenExpected: StoryObj<{
430
- onChange: ReturnType<typeof jest.fn>;
431
- onClear: ReturnType<typeof jest.fn>;
432
- onToggleSelected: ReturnType<typeof jest.fn>;
429
+ onChange: ReturnType<typeof fn>;
430
+ onClear: ReturnType<typeof fn>;
431
+ onToggleSelected: ReturnType<typeof fn>;
433
432
  }> = {
434
433
  args: {
435
- onChange: jest.fn(),
436
- onClear: jest.fn(),
437
- onToggleSelected: jest.fn(),
434
+ onChange: fn(),
435
+ onClear: fn(),
436
+ onToggleSelected: fn(),
438
437
  },
439
438
  render: (props) => {
440
439
  return (
@@ -469,9 +468,9 @@ export const TestThatCallbacksOnlyFireWhenExpected: StoryObj<{
469
468
 
470
469
  export const TestCasingWhenAutoCompleting = {
471
470
  args: {
472
- onChange: jest.fn(),
473
- onClear: jest.fn(),
474
- onToggleSelected: jest.fn(),
471
+ onChange: fn(),
472
+ onClear: fn(),
473
+ onToggleSelected: fn(),
475
474
  },
476
475
  render: (props) => {
477
476
  return (
@@ -1,7 +1,7 @@
1
1
  import cl from "clsx";
2
2
  import React, { HTMLAttributes, forwardRef, isValidElement } from "react";
3
3
  import { BodyShort, Heading } from "../../typography";
4
- import { useId } from "../../util";
4
+ import { useId } from "../../util/hooks";
5
5
  import ErrorSummaryItem, { ErrorSummaryItemType } from "./ErrorSummaryItem";
6
6
 
7
7
  export interface ErrorSummaryProps extends HTMLAttributes<HTMLDivElement> {
@@ -1,6 +1,6 @@
1
1
  import cl from "clsx";
2
2
  import React, { forwardRef } from "react";
3
- import { OverridableComponent } from "../../util";
3
+ import { OverridableComponent } from "../../util/types";
4
4
 
5
5
  export interface ErrorSummaryItemProps
6
6
  extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
@@ -1,7 +1,8 @@
1
1
  import cl from "clsx";
2
2
  import React, { forwardRef } from "react";
3
3
  import { BodyShort } from "../../typography";
4
- import { omit, useId } from "../../util";
4
+ import { omit } from "../../util";
5
+ import { useId } from "../../util/hooks";
5
6
  import { RadioProps } from "./types";
6
7
  import { useRadio } from "./useRadio";
7
8
 
@@ -1,6 +1,6 @@
1
1
  import cl from "clsx";
2
2
  import React, { forwardRef, useContext } from "react";
3
- import { useId } from "../../util";
3
+ import { useId } from "../../util/hooks";
4
4
  import { Fieldset, FieldsetContext, FieldsetProps } from "../Fieldset";
5
5
 
6
6
  export interface RadioGroupContextProps {
@@ -3,13 +3,13 @@ import React, {
3
3
  InputHTMLAttributes,
4
4
  forwardRef,
5
5
  useCallback,
6
- useMemo,
7
6
  useRef,
8
7
  useState,
9
8
  } from "react";
10
9
  import { MagnifyingGlassIcon, XMarkIcon } from "@navikt/aksel-icons";
11
10
  import { BodyShort, ErrorMessage, Label } from "../../typography";
12
- import { mergeRefs, omit } from "../../util";
11
+ import { omit } from "../../util";
12
+ import { useMergeRefs } from "../../util/hooks/useMergeRefs";
13
13
  import { FormFieldProps, useFormField } from "../useFormField";
14
14
  import SearchButton, { SearchButtonType } from "./SearchButton";
15
15
  import { SearchContext } from "./context";
@@ -118,7 +118,7 @@ export const Search = forwardRef<HTMLInputElement, SearchProps>(
118
118
  } = props;
119
119
 
120
120
  const searchRef = useRef<HTMLInputElement | null>(null);
121
- const mergedRef = useMemo(() => mergeRefs([searchRef, ref]), [ref]);
121
+ const mergedRef = useMergeRefs(searchRef, ref);
122
122
 
123
123
  const [internalValue, setInternalValue] = useState(defaultValue ?? "");
124
124
 
@@ -2,6 +2,7 @@ import cl from "clsx";
2
2
  import React, { forwardRef, useContext } from "react";
3
3
  import { MagnifyingGlassIcon } from "@navikt/aksel-icons";
4
4
  import { Button, ButtonProps } from "../../button";
5
+ import { composeEventHandlers } from "../../util/composeEventHandlers";
5
6
  import { SearchContext } from "./context";
6
7
 
7
8
  export interface SearchButtonProps
@@ -36,10 +37,7 @@ const SearchButton: SearchButtonType = forwardRef(
36
37
  variant={variant === "secondary" ? "secondary" : "primary"}
37
38
  className={cl("navds-search__button-search", className)}
38
39
  disabled={context?.disabled ?? disabled}
39
- onClick={(e) => {
40
- handleClick();
41
- onClick?.(e);
42
- }}
40
+ onClick={composeEventHandlers(onClick, handleClick)}
43
41
  icon={
44
42
  <MagnifyingGlassIcon
45
43
  {...(children ? { "aria-hidden": true } : { title: "Søk" })}
@@ -1,6 +1,6 @@
1
1
  import cl from "clsx";
2
2
  import React, { useContext } from "react";
3
- import { useId } from "../util";
3
+ import { useId } from "../util/hooks";
4
4
  import { FieldsetContext } from "./Fieldset/context";
5
5
 
6
6
  export interface FormFieldProps {
@@ -1,5 +1,5 @@
1
1
  import React, { SVGProps } from "react";
2
- import { useId } from "../util";
2
+ import { useId } from "../util/hooks";
3
3
 
4
4
  interface SVGRProps {
5
5
  title?: string;
@@ -1,7 +1,8 @@
1
1
  import cl from "clsx";
2
- import React, { forwardRef, useMemo, useRef, useState } from "react";
2
+ import React, { forwardRef, useRef, useState } from "react";
3
3
  import { Popover, PopoverProps } from "../popover";
4
- import { mergeRefs } from "../util";
4
+ import { composeEventHandlers } from "../util/composeEventHandlers";
5
+ import { useMergeRefs } from "../util/hooks/useMergeRefs";
5
6
  import { HelpTextIcon } from "./HelpTextIcon";
6
7
 
7
8
  export interface HelpTextProps
@@ -13,23 +14,6 @@ export interface HelpTextProps
13
14
  * @default "hjelp"
14
15
  */
15
16
  title?: string;
16
- /**
17
- * Default dialog-placement on open
18
- * @default "top"
19
- */
20
- placement?:
21
- | "top"
22
- | "bottom"
23
- | "right"
24
- | "left"
25
- | "top-start"
26
- | "top-end"
27
- | "bottom-start"
28
- | "bottom-end"
29
- | "right-start"
30
- | "right-end"
31
- | "left-start"
32
- | "left-end";
33
17
  /**
34
18
  * Classname for wrapper
35
19
  */
@@ -54,7 +38,7 @@ export const HelpText = forwardRef<HTMLButtonElement, HelpTextProps>(
54
38
  {
55
39
  className,
56
40
  children,
57
- placement = "top",
41
+ placement,
58
42
  strategy = "absolute",
59
43
  title = "hjelp",
60
44
  onClick,
@@ -64,7 +48,8 @@ export const HelpText = forwardRef<HTMLButtonElement, HelpTextProps>(
64
48
  ref,
65
49
  ) => {
66
50
  const buttonRef = useRef<HTMLButtonElement | null>(null);
67
- const mergedRef = useMemo(() => mergeRefs([buttonRef, ref]), [ref]);
51
+ const mergedRef = useMergeRefs(buttonRef, ref);
52
+
68
53
  const [open, setOpen] = useState(false);
69
54
 
70
55
  return (
@@ -72,10 +57,7 @@ export const HelpText = forwardRef<HTMLButtonElement, HelpTextProps>(
72
57
  <button
73
58
  {...rest}
74
59
  ref={mergedRef}
75
- onClick={(e) => {
76
- setOpen((x) => !x);
77
- onClick?.(e);
78
- }}
60
+ onClick={composeEventHandlers(onClick, () => setOpen((x) => x))}
79
61
  className={cl(className, "navds-help-text__button")}
80
62
  type="button"
81
63
  aria-expanded={open}
@@ -1,6 +1,6 @@
1
1
  import cl from "clsx";
2
2
  import React from "react";
3
- import { useId } from "../util/useId";
3
+ import { useId } from "../util/hooks";
4
4
 
5
5
  export const HelpTextIcon = ({
6
6
  title,