@navikt/ds-react 5.12.4 → 5.13.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 (521) hide show
  1. package/_docs.json +79 -3
  2. package/cjs/accordion/Accordion.js +2 -2
  3. package/cjs/accordion/AccordionHeader.js +1 -1
  4. package/cjs/accordion/AccordionItem.js +11 -14
  5. package/cjs/alert/Alert.js +2 -2
  6. package/cjs/chat/Bubble.js +1 -1
  7. package/cjs/chat/Chat.js +2 -2
  8. package/cjs/chips/Chips.js +1 -1
  9. package/cjs/chips/Removable.js +1 -1
  10. package/cjs/copybutton/CopyButton.js +2 -2
  11. package/cjs/date/datepicker/parts/Caption.js +2 -2
  12. package/cjs/date/datepicker/parts/DropdownCaption.js +1 -1
  13. package/cjs/date/datepicker/parts/HeadRow.js +1 -1
  14. package/cjs/date/datepicker/parts/Row.js +2 -2
  15. package/cjs/date/monthpicker/MonthCaption.js +7 -7
  16. package/cjs/date/parts/DateInput.js +1 -1
  17. package/cjs/date/utils/check-dates.js +1 -1
  18. package/cjs/date/utils/is-match.js +2 -2
  19. package/cjs/date/utils/parse-date.js +1 -1
  20. package/cjs/dropdown/Dropdown.js +10 -12
  21. package/cjs/dropdown/Menu/Divider.js +1 -1
  22. package/cjs/dropdown/Menu/GroupedList/GroupedHeading.js +1 -1
  23. package/cjs/expansion-card/ExpansionCardHeader.js +1 -1
  24. package/cjs/form/ReadOnlyIcon.js +1 -1
  25. package/cjs/form/Select.js +1 -1
  26. package/cjs/form/combobox/Combobox.js +6 -6
  27. package/cjs/form/combobox/ComboboxProvider.js +2 -2
  28. package/cjs/form/combobox/FilteredOptions/FilteredOptions.js +4 -4
  29. package/cjs/form/combobox/FilteredOptions/filteredOptionsContext.js +4 -4
  30. package/cjs/form/combobox/Input/Input.js +4 -4
  31. package/cjs/form/combobox/SelectedOptions/SelectedOptions.js +1 -1
  32. package/cjs/form/error-summary/ErrorSummary.js +2 -2
  33. package/cjs/form/error-summary/ErrorSummaryItem.js +1 -1
  34. package/cjs/form/search/Search.js +1 -1
  35. package/cjs/form/search/SearchButton.js +1 -1
  36. package/cjs/grid/Cell.js +1 -1
  37. package/cjs/grid/Grid.js +1 -1
  38. package/cjs/guide-panel/GuidePanel.js +1 -1
  39. package/cjs/internal-header/InternalHeaderButton.js +1 -1
  40. package/cjs/internal-header/InternalHeaderTitle.js +1 -1
  41. package/cjs/internal-header/InternalHeaderUser.js +1 -1
  42. package/cjs/internal-header/InternalHeaderUserButton.js +1 -1
  43. package/cjs/layout/bleed/Bleed.js +1 -1
  44. package/cjs/layout/content-container/ContentContainer.js +1 -1
  45. package/cjs/layout/grid/HGrid.js +1 -1
  46. package/cjs/layout/page/parts/PageBlock.js +1 -1
  47. package/cjs/layout/sidemal-test/AvatarPanel.js +1 -1
  48. package/cjs/layout/sidemal-test/Content.js +3 -3
  49. package/cjs/layout/sidemal-test/Filter.js +1 -1
  50. package/cjs/layout/sidemal-test/Intro.js +1 -1
  51. package/cjs/link-panel/LinkPanel.js +3 -3
  52. package/cjs/link-panel/LinkPanelDescription.js +1 -1
  53. package/cjs/link-panel/LinkPanelTitle.js +1 -1
  54. package/cjs/modal/ModalBody.js +1 -1
  55. package/cjs/modal/ModalFooter.js +1 -1
  56. package/cjs/modal/ModalHeader.js +1 -1
  57. package/cjs/pagination/PaginationItem.js +1 -1
  58. package/cjs/panel/Panel.js +1 -1
  59. package/cjs/popover/PopoverContent.js +1 -1
  60. package/cjs/read-more/ReadMore.js +12 -10
  61. package/cjs/skeleton/Skeleton.js +1 -1
  62. package/cjs/table/Body.js +1 -1
  63. package/cjs/table/ColumnHeader.js +1 -1
  64. package/cjs/table/DataCell.js +1 -1
  65. package/cjs/table/ExpandableRow.js +14 -13
  66. package/cjs/table/Header.js +1 -1
  67. package/cjs/table/Row.js +1 -1
  68. package/cjs/tabs/TabList.js +1 -1
  69. package/cjs/tabs/Tabs.js +1 -1
  70. package/cjs/tag/Tag.js +1 -1
  71. package/cjs/timeline/AxisLabels.js +1 -1
  72. package/cjs/timeline/TimelineRow.js +2 -2
  73. package/cjs/timeline/hooks/useTimelineRows.js +5 -3
  74. package/cjs/timeline/utils/timeline.js +1 -1
  75. package/cjs/timeline/zoom/ZoomButton.js +1 -1
  76. package/cjs/toggle-group/ToggleGroup.js +1 -1
  77. package/cjs/tooltip/Tooltip.js +12 -7
  78. package/cjs/typography/BodyLong.js +1 -1
  79. package/cjs/typography/ErrorMessage.js +1 -1
  80. package/cjs/typography/Ingress.js +1 -1
  81. package/cjs/util/RandomIcon.js +1 -1
  82. package/cjs/util/hooks/useCallbackRef.js +18 -0
  83. package/cjs/util/hooks/useControllableState.js +25 -0
  84. package/esm/accordion/Accordion.d.ts +1 -1
  85. package/esm/accordion/Accordion.js +2 -2
  86. package/esm/accordion/Accordion.js.map +1 -1
  87. package/esm/accordion/AccordionHeader.js +1 -1
  88. package/esm/accordion/AccordionHeader.js.map +1 -1
  89. package/esm/accordion/AccordionItem.d.ts +4 -0
  90. package/esm/accordion/AccordionItem.js +12 -15
  91. package/esm/accordion/AccordionItem.js.map +1 -1
  92. package/esm/alert/Alert.js +2 -2
  93. package/esm/alert/Alert.js.map +1 -1
  94. package/esm/chat/Bubble.js +1 -1
  95. package/esm/chat/Bubble.js.map +1 -1
  96. package/esm/chat/Chat.js +2 -2
  97. package/esm/chat/Chat.js.map +1 -1
  98. package/esm/chips/Chips.d.ts +2 -2
  99. package/esm/chips/Chips.js +1 -1
  100. package/esm/chips/Chips.js.map +1 -1
  101. package/esm/chips/Removable.js +1 -1
  102. package/esm/chips/Removable.js.map +1 -1
  103. package/esm/copybutton/CopyButton.js +2 -2
  104. package/esm/copybutton/CopyButton.js.map +1 -1
  105. package/esm/date/context/useSharedMonthContext.js.map +1 -1
  106. package/esm/date/datepicker/parts/Caption.js +2 -2
  107. package/esm/date/datepicker/parts/Caption.js.map +1 -1
  108. package/esm/date/datepicker/parts/DropdownCaption.js +1 -1
  109. package/esm/date/datepicker/parts/DropdownCaption.js.map +1 -1
  110. package/esm/date/datepicker/parts/HeadRow.js +1 -1
  111. package/esm/date/datepicker/parts/HeadRow.js.map +1 -1
  112. package/esm/date/datepicker/parts/Row.js +3 -3
  113. package/esm/date/datepicker/parts/Row.js.map +1 -1
  114. package/esm/date/monthpicker/MonthCaption.js +7 -7
  115. package/esm/date/monthpicker/MonthCaption.js.map +1 -1
  116. package/esm/date/parts/DateInput.js +1 -1
  117. package/esm/date/parts/DateInput.js.map +1 -1
  118. package/esm/date/utils/check-dates.js +1 -1
  119. package/esm/date/utils/check-dates.js.map +1 -1
  120. package/esm/date/utils/get-month-weeks.js.map +1 -1
  121. package/esm/date/utils/is-match.js +2 -2
  122. package/esm/date/utils/is-match.js.map +1 -1
  123. package/esm/date/utils/navigation.js.map +1 -1
  124. package/esm/date/utils/parse-date.js +1 -1
  125. package/esm/date/utils/parse-date.js.map +1 -1
  126. package/esm/dropdown/Dropdown.d.ts +4 -0
  127. package/esm/dropdown/Dropdown.js +10 -12
  128. package/esm/dropdown/Dropdown.js.map +1 -1
  129. package/esm/dropdown/Menu/Divider.js +1 -1
  130. package/esm/dropdown/Menu/Divider.js.map +1 -1
  131. package/esm/dropdown/Menu/GroupedList/GroupedHeading.js +1 -1
  132. package/esm/dropdown/Menu/GroupedList/GroupedHeading.js.map +1 -1
  133. package/esm/expansion-card/ExpansionCardHeader.js +1 -1
  134. package/esm/expansion-card/ExpansionCardHeader.js.map +1 -1
  135. package/esm/form/Fieldset/useFieldset.d.ts +1 -1
  136. package/esm/form/ReadOnlyIcon.js +1 -1
  137. package/esm/form/ReadOnlyIcon.js.map +1 -1
  138. package/esm/form/Select.js +1 -1
  139. package/esm/form/Select.js.map +1 -1
  140. package/esm/form/Switch.js.map +1 -1
  141. package/esm/form/TextField.js.map +1 -1
  142. package/esm/form/checkbox/useCheckbox.d.ts +1 -1
  143. package/esm/form/combobox/Combobox.d.ts +1 -1
  144. package/esm/form/combobox/Combobox.js +6 -6
  145. package/esm/form/combobox/Combobox.js.map +1 -1
  146. package/esm/form/combobox/ComboboxProvider.js +2 -2
  147. package/esm/form/combobox/ComboboxProvider.js.map +1 -1
  148. package/esm/form/combobox/FilteredOptions/FilteredOptions.js +4 -4
  149. package/esm/form/combobox/FilteredOptions/FilteredOptions.js.map +1 -1
  150. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.d.ts +1 -1
  151. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js +4 -4
  152. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js.map +1 -1
  153. package/esm/form/combobox/Input/Input.js +4 -4
  154. package/esm/form/combobox/Input/Input.js.map +1 -1
  155. package/esm/form/combobox/SelectedOptions/SelectedOptions.js +1 -1
  156. package/esm/form/combobox/SelectedOptions/SelectedOptions.js.map +1 -1
  157. package/esm/form/combobox/ToggleListButton.js +1 -1
  158. package/esm/form/combobox/ToggleListButton.js.map +1 -1
  159. package/esm/form/combobox/customOptionsContext.js +1 -1
  160. package/esm/form/combobox/customOptionsContext.js.map +1 -1
  161. package/esm/form/error-summary/ErrorSummary.js +3 -3
  162. package/esm/form/error-summary/ErrorSummary.js.map +1 -1
  163. package/esm/form/error-summary/ErrorSummaryItem.js +1 -1
  164. package/esm/form/error-summary/ErrorSummaryItem.js.map +1 -1
  165. package/esm/form/radio/useRadio.d.ts +1 -1
  166. package/esm/form/search/Search.js +1 -1
  167. package/esm/form/search/Search.js.map +1 -1
  168. package/esm/form/search/SearchButton.js +1 -1
  169. package/esm/form/search/SearchButton.js.map +1 -1
  170. package/esm/grid/Cell.js +1 -1
  171. package/esm/grid/Cell.js.map +1 -1
  172. package/esm/grid/Grid.js +1 -1
  173. package/esm/grid/Grid.js.map +1 -1
  174. package/esm/guide-panel/GuidePanel.js +1 -1
  175. package/esm/guide-panel/GuidePanel.js.map +1 -1
  176. package/esm/internal-header/InternalHeader.js.map +1 -1
  177. package/esm/internal-header/InternalHeaderButton.js +1 -1
  178. package/esm/internal-header/InternalHeaderButton.js.map +1 -1
  179. package/esm/internal-header/InternalHeaderTitle.js +1 -1
  180. package/esm/internal-header/InternalHeaderTitle.js.map +1 -1
  181. package/esm/internal-header/InternalHeaderUser.js +1 -1
  182. package/esm/internal-header/InternalHeaderUser.js.map +1 -1
  183. package/esm/internal-header/InternalHeaderUserButton.js +1 -1
  184. package/esm/internal-header/InternalHeaderUserButton.js.map +1 -1
  185. package/esm/layout/bleed/Bleed.js +1 -1
  186. package/esm/layout/bleed/Bleed.js.map +1 -1
  187. package/esm/layout/box/Box.d.ts +1 -1
  188. package/esm/layout/content-container/ContentContainer.js +1 -1
  189. package/esm/layout/content-container/ContentContainer.js.map +1 -1
  190. package/esm/layout/grid/HGrid.js +1 -1
  191. package/esm/layout/grid/HGrid.js.map +1 -1
  192. package/esm/layout/page/Page.d.ts +2 -2
  193. package/esm/layout/page/Page.js.map +1 -1
  194. package/esm/layout/page/parts/PageBlock.d.ts +6 -5
  195. package/esm/layout/page/parts/PageBlock.js +1 -1
  196. package/esm/layout/page/parts/PageBlock.js.map +1 -1
  197. package/esm/layout/responsive/Responsive.js.map +1 -1
  198. package/esm/layout/sidemal-test/AvatarPanel.js +1 -1
  199. package/esm/layout/sidemal-test/AvatarPanel.js.map +1 -1
  200. package/esm/layout/sidemal-test/Content.js +4 -4
  201. package/esm/layout/sidemal-test/Content.js.map +1 -1
  202. package/esm/layout/sidemal-test/Filter.js +1 -1
  203. package/esm/layout/sidemal-test/Filter.js.map +1 -1
  204. package/esm/layout/sidemal-test/Header.js +1 -1
  205. package/esm/layout/sidemal-test/Header.js.map +1 -1
  206. package/esm/layout/sidemal-test/Intro.js +2 -2
  207. package/esm/layout/sidemal-test/Intro.js.map +1 -1
  208. package/esm/layout/sidemal-test/content-box/ContentBox.js.map +1 -1
  209. package/esm/layout/stack/HStack.js.map +1 -1
  210. package/esm/layout/stack/Stack.js.map +1 -1
  211. package/esm/layout/stack/VStack.js.map +1 -1
  212. package/esm/layout/utilities/types.d.ts +2 -2
  213. package/esm/link-panel/LinkPanel.d.ts +2 -2
  214. package/esm/link-panel/LinkPanel.js +3 -3
  215. package/esm/link-panel/LinkPanel.js.map +1 -1
  216. package/esm/link-panel/LinkPanelDescription.js +1 -1
  217. package/esm/link-panel/LinkPanelDescription.js.map +1 -1
  218. package/esm/link-panel/LinkPanelTitle.js +1 -1
  219. package/esm/link-panel/LinkPanelTitle.js.map +1 -1
  220. package/esm/loader/Loader.js.map +1 -1
  221. package/esm/modal/ModalBody.js +1 -1
  222. package/esm/modal/ModalBody.js.map +1 -1
  223. package/esm/modal/ModalFooter.js +1 -1
  224. package/esm/modal/ModalFooter.js.map +1 -1
  225. package/esm/modal/ModalHeader.js +1 -1
  226. package/esm/modal/ModalHeader.js.map +1 -1
  227. package/esm/pagination/Pagination.js.map +1 -1
  228. package/esm/pagination/PaginationItem.js +1 -1
  229. package/esm/pagination/PaginationItem.js.map +1 -1
  230. package/esm/panel/Panel.js +1 -1
  231. package/esm/panel/Panel.js.map +1 -1
  232. package/esm/popover/Popover.js.map +1 -1
  233. package/esm/popover/PopoverContent.js +1 -1
  234. package/esm/popover/PopoverContent.js.map +1 -1
  235. package/esm/read-more/ReadMore.d.ts +4 -0
  236. package/esm/read-more/ReadMore.js +13 -11
  237. package/esm/read-more/ReadMore.js.map +1 -1
  238. package/esm/skeleton/Skeleton.js +1 -1
  239. package/esm/skeleton/Skeleton.js.map +1 -1
  240. package/esm/table/Body.js +1 -1
  241. package/esm/table/Body.js.map +1 -1
  242. package/esm/table/ColumnHeader.js +1 -1
  243. package/esm/table/ColumnHeader.js.map +1 -1
  244. package/esm/table/DataCell.js +1 -1
  245. package/esm/table/DataCell.js.map +1 -1
  246. package/esm/table/ExpandableRow.js +15 -14
  247. package/esm/table/ExpandableRow.js.map +1 -1
  248. package/esm/table/Header.js +1 -1
  249. package/esm/table/Header.js.map +1 -1
  250. package/esm/table/Row.js +1 -1
  251. package/esm/table/Row.js.map +1 -1
  252. package/esm/tabs/TabList.js +1 -1
  253. package/esm/tabs/TabList.js.map +1 -1
  254. package/esm/tabs/Tabs.js +1 -1
  255. package/esm/tabs/Tabs.js.map +1 -1
  256. package/esm/tag/Tag.js +1 -1
  257. package/esm/tag/Tag.js.map +1 -1
  258. package/esm/timeline/AxisLabels.js +1 -1
  259. package/esm/timeline/AxisLabels.js.map +1 -1
  260. package/esm/timeline/TimelineRow.js +2 -2
  261. package/esm/timeline/TimelineRow.js.map +1 -1
  262. package/esm/timeline/hooks/useTimelineRows.js +5 -3
  263. package/esm/timeline/hooks/useTimelineRows.js.map +1 -1
  264. package/esm/timeline/utils/timeline.js +1 -1
  265. package/esm/timeline/utils/timeline.js.map +1 -1
  266. package/esm/timeline/zoom/ZoomButton.js +1 -1
  267. package/esm/timeline/zoom/ZoomButton.js.map +1 -1
  268. package/esm/toggle-group/ToggleGroup.js +1 -1
  269. package/esm/toggle-group/ToggleGroup.js.map +1 -1
  270. package/esm/tooltip/Tooltip.d.ts +4 -0
  271. package/esm/tooltip/Tooltip.js +13 -8
  272. package/esm/tooltip/Tooltip.js.map +1 -1
  273. package/esm/typography/BodyLong.js +1 -1
  274. package/esm/typography/BodyLong.js.map +1 -1
  275. package/esm/typography/ErrorMessage.js +1 -1
  276. package/esm/typography/ErrorMessage.js.map +1 -1
  277. package/esm/typography/Ingress.js +1 -1
  278. package/esm/typography/Ingress.js.map +1 -1
  279. package/esm/util/RandomIcon.js +1 -1
  280. package/esm/util/RandomIcon.js.map +1 -1
  281. package/esm/util/hooks/useCallbackRef.d.ts +7 -0
  282. package/esm/util/hooks/useCallbackRef.js +15 -0
  283. package/esm/util/hooks/useCallbackRef.js.map +1 -0
  284. package/esm/util/hooks/useControllableState.d.ts +9 -0
  285. package/esm/util/hooks/useControllableState.js +22 -0
  286. package/esm/util/hooks/useControllableState.js.map +1 -0
  287. package/esm/util/mergeRefs.js.map +1 -1
  288. package/package.json +3 -3
  289. package/src/accordion/Accordion.tsx +5 -5
  290. package/src/accordion/AccordionContent.tsx +3 -3
  291. package/src/accordion/AccordionHeader.tsx +3 -3
  292. package/src/accordion/AccordionItem.tsx +21 -21
  293. package/src/accordion/accordion.stories.tsx +8 -5
  294. package/src/alert/Alert.tsx +8 -8
  295. package/src/alert/alert.stories.tsx +7 -7
  296. package/src/button/Button.tsx +4 -4
  297. package/src/button/button.stories.tsx +1 -1
  298. package/src/chat/Bubble.tsx +4 -4
  299. package/src/chat/Chat.tsx +5 -5
  300. package/src/chat/chat.stories.tsx +1 -1
  301. package/src/chips/Chips.tsx +4 -4
  302. package/src/chips/Removable.tsx +4 -4
  303. package/src/chips/Toggle.tsx +3 -3
  304. package/src/chips/chips.stories.tsx +5 -5
  305. package/src/copybutton/CopyButton.tsx +6 -6
  306. package/src/copybutton/copy-button.stories.tsx +3 -3
  307. package/src/date/context/useSharedMonthContext.tsx +1 -1
  308. package/src/date/datepicker/DatePicker.tsx +2 -2
  309. package/src/date/datepicker/DatePickerStandalone.tsx +2 -2
  310. package/src/date/datepicker/datepicker.stories.tsx +2 -2
  311. package/src/date/datepicker/parts/Caption.tsx +2 -3
  312. package/src/date/datepicker/parts/DropdownCaption.tsx +2 -2
  313. package/src/date/datepicker/parts/HeadRow.tsx +1 -1
  314. package/src/date/datepicker/parts/Row.tsx +3 -3
  315. package/src/date/hooks/useDatepicker.tsx +7 -7
  316. package/src/date/hooks/useMonthPicker.tsx +7 -7
  317. package/src/date/hooks/useRangeDatepicker.test.tsx +2 -2
  318. package/src/date/hooks/useRangeDatepicker.tsx +28 -28
  319. package/src/date/monthpicker/MonthButton.tsx +1 -1
  320. package/src/date/monthpicker/MonthCaption.tsx +7 -7
  321. package/src/date/monthpicker/MonthPicker.tsx +3 -3
  322. package/src/date/monthpicker/MonthPickerStandalone.tsx +3 -3
  323. package/src/date/monthpicker/MonthSelector.tsx +1 -1
  324. package/src/date/parts/DateInput.tsx +6 -6
  325. package/src/date/utils/__tests__/check-dates.test.ts +3 -3
  326. package/src/date/utils/__tests__/format-dates.test.ts +7 -7
  327. package/src/date/utils/__tests__/get-initial-year.test.ts +14 -14
  328. package/src/date/utils/__tests__/get-month-weeks.test.ts +0 -1
  329. package/src/date/utils/__tests__/is-match.test.ts +4 -4
  330. package/src/date/utils/__tests__/parse-dates.test.ts +2 -2
  331. package/src/date/utils/check-dates.ts +2 -2
  332. package/src/date/utils/dates-disabled.ts +1 -1
  333. package/src/date/utils/format-date.ts +1 -1
  334. package/src/date/utils/get-dates.ts +1 -1
  335. package/src/date/utils/get-month-weeks.ts +6 -6
  336. package/src/date/utils/is-match.ts +2 -3
  337. package/src/date/utils/labels.ts +1 -1
  338. package/src/date/utils/navigation.ts +18 -18
  339. package/src/date/utils/parse-date.ts +8 -8
  340. package/src/dropdown/Dropdown.tsx +14 -11
  341. package/src/dropdown/Menu/Divider.tsx +1 -1
  342. package/src/dropdown/Menu/GroupedList/GroupedHeading.tsx +2 -2
  343. package/src/dropdown/Menu/GroupedList/GroupedItem.tsx +1 -1
  344. package/src/dropdown/Menu/GroupedList/index.tsx +1 -1
  345. package/src/dropdown/Menu/List/Item.tsx +1 -1
  346. package/src/dropdown/Menu/index.tsx +1 -1
  347. package/src/dropdown/dropdown.stories.tsx +1 -1
  348. package/src/expansion-card/ExpansionCard.tsx +3 -3
  349. package/src/expansion-card/ExpansionCardContent.tsx +1 -1
  350. package/src/expansion-card/ExpansionCardDescription.tsx +1 -1
  351. package/src/expansion-card/ExpansionCardHeader.tsx +2 -2
  352. package/src/expansion-card/ExpansionCardTitle.tsx +2 -2
  353. package/src/expansion-card/expansion-card.stories.tsx +1 -1
  354. package/src/form/ConfirmationPanel.test.tsx +1 -1
  355. package/src/form/ConfirmationPanel.tsx +2 -2
  356. package/src/form/Fieldset/Fieldset.tsx +2 -2
  357. package/src/form/ReadOnlyIcon.tsx +1 -1
  358. package/src/form/Select.tsx +6 -6
  359. package/src/form/Switch.tsx +4 -4
  360. package/src/form/TextField.tsx +4 -4
  361. package/src/form/Textarea.tsx +4 -4
  362. package/src/form/checkbox/Checkbox.test.tsx +8 -8
  363. package/src/form/checkbox/Checkbox.tsx +3 -3
  364. package/src/form/checkbox/CheckboxGroup.tsx +4 -4
  365. package/src/form/checkbox/useCheckbox.ts +3 -3
  366. package/src/form/combobox/Combobox.tsx +8 -8
  367. package/src/form/combobox/ComboboxProvider.tsx +3 -3
  368. package/src/form/combobox/ComboboxWrapper.tsx +1 -1
  369. package/src/form/combobox/FilteredOptions/FilteredOptions.tsx +6 -6
  370. package/src/form/combobox/FilteredOptions/filteredOptionsContext.tsx +18 -18
  371. package/src/form/combobox/FilteredOptions/useVirtualFocus.ts +5 -5
  372. package/src/form/combobox/Input/Input.tsx +13 -13
  373. package/src/form/combobox/Input/inputContext.tsx +6 -6
  374. package/src/form/combobox/SelectedOptions/SelectedOptions.tsx +1 -1
  375. package/src/form/combobox/SelectedOptions/selectedOptionsContext.tsx +9 -9
  376. package/src/form/combobox/ToggleListButton.tsx +1 -2
  377. package/src/form/combobox/combobox.stories.tsx +8 -8
  378. package/src/form/combobox/combobox.test.tsx +14 -12
  379. package/src/form/combobox/customOptionsContext.tsx +6 -6
  380. package/src/form/combobox/types.ts +2 -2
  381. package/src/form/error-summary/ErrorSummary.tsx +6 -6
  382. package/src/form/error-summary/ErrorSummaryItem.tsx +2 -2
  383. package/src/form/error-summary/error-summary.stories.tsx +2 -1
  384. package/src/form/radio/Radio.test.tsx +1 -1
  385. package/src/form/radio/Radio.tsx +1 -1
  386. package/src/form/radio/RadioGroup.tsx +3 -3
  387. package/src/form/radio/useRadio.ts +1 -1
  388. package/src/form/search/Search.tsx +6 -6
  389. package/src/form/search/SearchButton.tsx +2 -2
  390. package/src/form/search/search.stories.tsx +1 -1
  391. package/src/form/stories/fieldset.stories.tsx +3 -2
  392. package/src/form/stories/select.stories.tsx +2 -1
  393. package/src/form/stories/text-field.stories.tsx +2 -1
  394. package/src/form/useFormField.ts +3 -3
  395. package/src/grid/Cell.tsx +3 -3
  396. package/src/grid/Grid.tsx +2 -2
  397. package/src/grid/grid.stories.tsx +1 -1
  398. package/src/guide-panel/GuidePanel.tsx +2 -2
  399. package/src/guide-panel/guidepanel.stories.tsx +1 -1
  400. package/src/help-text/HelpText.tsx +2 -2
  401. package/src/internal-header/InternalHeader.tsx +1 -1
  402. package/src/internal-header/InternalHeaderButton.tsx +1 -1
  403. package/src/internal-header/InternalHeaderTitle.tsx +1 -1
  404. package/src/internal-header/InternalHeaderUser.tsx +1 -1
  405. package/src/internal-header/InternalHeaderUserButton.tsx +1 -1
  406. package/src/internal-header/header.stories.tsx +3 -3
  407. package/src/layout/bleed/Bleed.tsx +7 -7
  408. package/src/layout/box/Box.stories.tsx +4 -4
  409. package/src/layout/box/Box.tsx +7 -7
  410. package/src/layout/content-container/ContentContainer.tsx +1 -1
  411. package/src/layout/grid/HGrid.tsx +4 -4
  412. package/src/layout/page/Page.stories.tsx +1 -1
  413. package/src/layout/page/Page.tsx +4 -4
  414. package/src/layout/page/parts/PageBlock.tsx +8 -7
  415. package/src/layout/responsive/Responsive.tsx +6 -6
  416. package/src/layout/responsive/hide.stories.tsx +1 -1
  417. package/src/layout/responsive/show.stories.tsx +1 -1
  418. package/src/layout/sidemal-test/AvatarPanel.tsx +1 -1
  419. package/src/layout/sidemal-test/Content.tsx +4 -4
  420. package/src/layout/sidemal-test/Filter.tsx +1 -1
  421. package/src/layout/sidemal-test/Header.tsx +1 -1
  422. package/src/layout/sidemal-test/Intro.tsx +2 -2
  423. package/src/layout/sidemal-test/content-box/ContentBox.tsx +6 -6
  424. package/src/layout/sidemal-test/navno-sidemal.stories.tsx +1 -1
  425. package/src/layout/stack/HStack.tsx +1 -1
  426. package/src/layout/stack/Stack.tsx +3 -3
  427. package/src/layout/stack/VStack.tsx +1 -1
  428. package/src/layout/stack/stack.stories.tsx +2 -2
  429. package/src/layout/utilities/css.ts +6 -6
  430. package/src/layout/utilities/types.ts +2 -2
  431. package/src/link/Link.tsx +2 -2
  432. package/src/link/link.stories.tsx +1 -1
  433. package/src/link-panel/LinkPanel.tsx +6 -7
  434. package/src/link-panel/LinkPanelDescription.tsx +1 -1
  435. package/src/link-panel/LinkPanelTitle.tsx +2 -2
  436. package/src/list/List.tsx +2 -2
  437. package/src/list/ListItem.tsx +2 -2
  438. package/src/list/list.stories.tsx +2 -2
  439. package/src/loader/Loader.tsx +4 -4
  440. package/src/loader/loader.stories.tsx +1 -0
  441. package/src/modal/Modal.test.tsx +4 -4
  442. package/src/modal/Modal.tsx +2 -2
  443. package/src/modal/ModalBody.tsx +2 -2
  444. package/src/modal/ModalFooter.tsx +2 -2
  445. package/src/modal/ModalHeader.tsx +2 -2
  446. package/src/modal/ModalUtils.ts +2 -2
  447. package/src/modal/dialog-polyfill.ts +16 -16
  448. package/src/pagination/Pagination.tsx +5 -6
  449. package/src/pagination/PaginationItem.tsx +3 -3
  450. package/src/pagination/steps.test.ts +8 -8
  451. package/src/panel/Panel.tsx +3 -3
  452. package/src/panel/panel.stories.tsx +2 -1
  453. package/src/popover/Popover.test.tsx +7 -7
  454. package/src/popover/Popover.tsx +8 -8
  455. package/src/popover/PopoverContent.tsx +2 -2
  456. package/src/provider/Provider.tsx +1 -1
  457. package/src/read-more/ReadMore.tsx +19 -13
  458. package/src/read-more/readmore.stories.tsx +4 -0
  459. package/src/skeleton/Skeleton.tsx +4 -4
  460. package/src/stepper/Step.tsx +2 -2
  461. package/src/stepper/Stepper.tsx +3 -3
  462. package/src/table/Body.tsx +1 -1
  463. package/src/table/ColumnHeader.tsx +2 -2
  464. package/src/table/DataCell.tsx +2 -2
  465. package/src/table/ExpandableRow.tsx +19 -17
  466. package/src/table/Header.tsx +1 -1
  467. package/src/table/HeaderCell.tsx +1 -1
  468. package/src/table/Row.tsx +2 -2
  469. package/src/table/Table.tsx +2 -2
  470. package/src/table/stories/table-async.stories.tsx +4 -4
  471. package/src/table/stories/table.stories.tsx +1 -1
  472. package/src/tabs/Tab.tsx +3 -3
  473. package/src/tabs/TabList.tsx +4 -4
  474. package/src/tabs/TabPanel.tsx +1 -1
  475. package/src/tabs/Tabs.stories.tsx +1 -1
  476. package/src/tabs/Tabs.tsx +4 -4
  477. package/src/tag/Tag.tsx +3 -3
  478. package/src/tag/tag.stories.tsx +1 -1
  479. package/src/timeline/AxisLabels.tsx +9 -9
  480. package/src/timeline/Pin.tsx +2 -2
  481. package/src/timeline/Timeline.tsx +7 -7
  482. package/src/timeline/TimelineRow.tsx +5 -5
  483. package/src/timeline/hooks/useTimelineContext.tsx +1 -1
  484. package/src/timeline/hooks/useTimelineRows.ts +18 -19
  485. package/src/timeline/period/ClickablePeriod.tsx +4 -4
  486. package/src/timeline/period/NonClickablePeriod.tsx +1 -1
  487. package/src/timeline/period/index.tsx +1 -1
  488. package/src/timeline/timeline.stories.tsx +2 -2
  489. package/src/timeline/utils/calc.ts +2 -2
  490. package/src/timeline/utils/filter.ts +2 -2
  491. package/src/timeline/utils/period.ts +2 -2
  492. package/src/timeline/utils/timeline.ts +1 -1
  493. package/src/timeline/zoom/ZoomButton.tsx +3 -3
  494. package/src/timeline/zoom/index.tsx +1 -1
  495. package/src/toggle-group/ToggleGroup.stories.tsx +2 -2
  496. package/src/toggle-group/ToggleGroup.tsx +5 -5
  497. package/src/toggle-group/ToggleItem.tsx +1 -1
  498. package/src/toggle-group/context.ts +1 -1
  499. package/src/tooltip/Tooltip.test.tsx +10 -10
  500. package/src/tooltip/Tooltip.tsx +20 -11
  501. package/src/tooltip/tooltip.stories.tsx +1 -1
  502. package/src/typography/BodyLong.tsx +4 -4
  503. package/src/typography/BodyShort.tsx +3 -3
  504. package/src/typography/Detail.tsx +3 -3
  505. package/src/typography/ErrorMessage.tsx +3 -3
  506. package/src/typography/Heading.tsx +3 -3
  507. package/src/typography/Ingress.tsx +1 -1
  508. package/src/typography/Label.tsx +3 -3
  509. package/src/typography/stories/heading.stories.tsx +1 -2
  510. package/src/util/AnimateHeight.tsx +1 -1
  511. package/src/util/OverridableComponent.ts +1 -1
  512. package/src/util/RandomIcon.tsx +1 -1
  513. package/src/util/Slot.tsx +3 -3
  514. package/src/util/TextareaAutoSize.tsx +4 -4
  515. package/src/util/__tests__/Slot.test.tsx +11 -11
  516. package/src/util/hooks/useCallbackRef.ts +20 -0
  517. package/src/util/hooks/useControllableState.ts +40 -0
  518. package/src/util/mergeRefs.tsx +2 -1
  519. package/src/util/omit.ts +1 -1
  520. package/src/util/useEventListener.ts +1 -1
  521. package/src/util/useMedia.ts +1 -1
@@ -21,22 +21,22 @@ describe("Returns if date is disabled", () => {
21
21
  });
22
22
  test("Date should be disabled type After (same month)(true)", () => {
23
23
  expect(
24
- isMatch(new Date("Aug 5 2018"), [{ after: new Date("Aug 2 2018") }])
24
+ isMatch(new Date("Aug 5 2018"), [{ after: new Date("Aug 2 2018") }]),
25
25
  ).toBeTruthy();
26
26
  });
27
27
  test("Date should be disabled type After (true)", () => {
28
28
  expect(
29
- isMatch(new Date("Oct 5 2018"), [{ after: new Date("Aug 2 2018") }])
29
+ isMatch(new Date("Oct 5 2018"), [{ after: new Date("Aug 2 2018") }]),
30
30
  ).toBeTruthy();
31
31
  });
32
32
  test("Date should be disabled type Before (true)", () => {
33
33
  expect(
34
- isMatch(new Date("Aug 1 2018"), [{ before: new Date("Aug 2 2018") }])
34
+ isMatch(new Date("Aug 1 2018"), [{ before: new Date("Aug 2 2018") }]),
35
35
  ).toBeTruthy();
36
36
  });
37
37
  test("Date should be disabled type Before (false)", () => {
38
38
  expect(
39
- isMatch(new Date("Jul 1 2018"), [{ before: new Date("Aug 2 2018") }])
39
+ isMatch(new Date("Jul 1 2018"), [{ before: new Date("Aug 2 2018") }]),
40
40
  ).toBeTruthy();
41
41
  });
42
42
  });
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable jest/expect-expect */
2
- import { parseDate, isValidDate } from "..";
3
- import nb from "date-fns/locale/nb";
4
2
  import getMonth from "date-fns/getMonth";
3
+ import nb from "date-fns/locale/nb";
4
+ import { isValidDate, parseDate } from "..";
5
5
 
6
6
  const check = (inp: string) =>
7
7
  // eslint-disable-next-line jest/valid-expect
@@ -1,9 +1,9 @@
1
- import setYear from "date-fns/setYear";
2
1
  import isThisMonth from "date-fns/isThisMonth";
2
+ import setYear from "date-fns/setYear";
3
3
 
4
4
  export const dateIsInCurrentMonth = (
5
5
  date: Date,
6
- dateToCompare: Date
6
+ dateToCompare: Date,
7
7
  ): boolean => {
8
8
  return isThisMonth(setYear(date, Number(dateToCompare.getFullYear())));
9
9
  };
@@ -4,7 +4,7 @@ import { isDateRange } from "react-day-picker";
4
4
  // TODO: ((date: Date) => boolean)
5
5
  export const disableDate = (
6
6
  disabledSelection: Date | Array<any>,
7
- date: Date
7
+ date: Date,
8
8
  ): boolean => {
9
9
  let result: boolean = false;
10
10
  if (disabledSelection instanceof Date) {
@@ -8,7 +8,7 @@ export const formatDateForInput = (
8
8
  date: Date,
9
9
  locale: Locale,
10
10
  type: "date" | "month",
11
- inputFormat?: string
11
+ inputFormat?: string,
12
12
  ) => {
13
13
  const INPUT_DATE_STRING_FORMAT =
14
14
  inputFormat ??
@@ -40,7 +40,7 @@ export const getMonths = (start: Date, end: Date, current: Date): Date[] => {
40
40
  export const getYears = (
41
41
  start: Date,
42
42
  end: Date,
43
- currentYear: number
43
+ currentYear: number,
44
44
  ): Date[] => {
45
45
  const years: Date[] = [];
46
46
  const fromYear = start.getFullYear();
@@ -1,4 +1,5 @@
1
1
  import {
2
+ Locale,
2
3
  addDays,
3
4
  addWeeks,
4
5
  differenceInCalendarDays,
@@ -6,7 +7,6 @@ import {
6
7
  endOfWeek,
7
8
  getWeek,
8
9
  getWeeksInMonth,
9
- Locale,
10
10
  startOfMonth,
11
11
  startOfWeek,
12
12
  } from "date-fns";
@@ -23,7 +23,7 @@ export function getMonthWeeks(
23
23
  options: {
24
24
  locale: Locale;
25
25
  useFixedWeeks?: boolean;
26
- }
26
+ },
27
27
  ): MonthWeek[] {
28
28
  const _options = {
29
29
  ...options,
@@ -32,7 +32,7 @@ export function getMonthWeeks(
32
32
  const weeksInMonth: MonthWeek[] = daysToMonthWeeks(
33
33
  startOfMonth(month),
34
34
  endOfMonth(month),
35
- _options
35
+ _options,
36
36
  );
37
37
 
38
38
  if (_options?.useFixedWeeks) {
@@ -45,7 +45,7 @@ export function getMonthWeeks(
45
45
  const extraWeeks = daysToMonthWeeks(
46
46
  addWeeks(lastDate, 1),
47
47
  toDate,
48
- _options
48
+ _options,
49
49
  );
50
50
  weeksInMonth.push(...extraWeeks);
51
51
  }
@@ -60,7 +60,7 @@ export function daysToMonthWeeks(
60
60
  options?: {
61
61
  locale?: Locale;
62
62
  weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
63
- }
63
+ },
64
64
  ): MonthWeek[] {
65
65
  const toWeek = endOfWeek(toDate, options);
66
66
  const fromWeek = startOfWeek(fromDate, options);
@@ -76,7 +76,7 @@ export function daysToMonthWeeks(
76
76
  const weekNumber = getWeek(date, options);
77
77
 
78
78
  const existingWeek = result.find(
79
- (value) => value.weekNumber === weekNumber
79
+ (value) => value.weekNumber === weekNumber,
80
80
  );
81
81
  if (existingWeek) {
82
82
  existingWeek.dates.push(date);
@@ -1,8 +1,7 @@
1
- import isSameDay from "date-fns/isSameDay";
2
- import isDate from "date-fns/isDate";
3
1
  import differenceInCalendarDays from "date-fns/differenceInCalendarDays";
2
+ import isDate from "date-fns/isDate";
3
+ import isSameDay from "date-fns/isSameDay";
4
4
  import isSameMonth from "date-fns/isSameMonth";
5
-
6
5
  import {
7
6
  DateAfter,
8
7
  DateBefore,
@@ -188,7 +188,7 @@ const modalLabelMonth = (localeCode?: string): string => {
188
188
 
189
189
  export const modalLabel = (
190
190
  localeCode: string,
191
- variant: "single" | "multiple" | "range" | "month"
191
+ variant: "single" | "multiple" | "range" | "month",
192
192
  ) => {
193
193
  switch (variant) {
194
194
  case "single":
@@ -1,5 +1,5 @@
1
1
  import setYear from "date-fns/setYear";
2
- import { isMatch, Matcher } from "./is-match";
2
+ import { Matcher, isMatch } from "./is-match";
3
3
 
4
4
  export const nextEnabled = (
5
5
  months,
@@ -10,7 +10,7 @@ export const nextEnabled = (
10
10
  yearState: Date,
11
11
  dropdownCaption: boolean,
12
12
  fromDate?: Date,
13
- toDate?: Date
13
+ toDate?: Date,
14
14
  ): Date => {
15
15
  const currentIndex = currentMonth.getMonth();
16
16
 
@@ -20,7 +20,7 @@ export const nextEnabled = (
20
20
  months,
21
21
  yearState,
22
22
  disabled,
23
- "home"
23
+ "home",
24
24
  );
25
25
  if (nextDate) {
26
26
  return nextDate;
@@ -32,7 +32,7 @@ export const nextEnabled = (
32
32
  months,
33
33
  yearState,
34
34
  disabled,
35
- "end"
35
+ "end",
36
36
  );
37
37
  if (nextDate) {
38
38
  return nextDate;
@@ -64,7 +64,7 @@ export const nextEnabled = (
64
64
  false,
65
65
  dropdownCaption,
66
66
  fromDate,
67
- toDate
67
+ toDate,
68
68
  );
69
69
  if (nextMonth) {
70
70
  return setYear(months[nextMonth.index], nextMonth.year);
@@ -80,7 +80,7 @@ export const nextEnabled = (
80
80
  false,
81
81
  dropdownCaption,
82
82
  fromDate,
83
- toDate
83
+ toDate,
84
84
  );
85
85
  if (prevMonth) {
86
86
  return setYear(months[prevMonth.index], prevMonth.year);
@@ -91,7 +91,7 @@ export const nextEnabled = (
91
91
  months[currentIndex + 4] &&
92
92
  !isMatch(
93
93
  setYear(months[currentIndex + 4], yearState.getFullYear()),
94
- disabled
94
+ disabled,
95
95
  )
96
96
  ) {
97
97
  return setYear(months[currentIndex + 4], yearState.getFullYear());
@@ -106,7 +106,7 @@ export const nextEnabled = (
106
106
  true,
107
107
  dropdownCaption,
108
108
  fromDate,
109
- toDate
109
+ toDate,
110
110
  );
111
111
 
112
112
  if (
@@ -122,7 +122,7 @@ export const nextEnabled = (
122
122
  months[currentIndex - 4] &&
123
123
  !isMatch(
124
124
  setYear(months[currentIndex - 4], Number(yearState.getFullYear())),
125
- disabled
125
+ disabled,
126
126
  )
127
127
  )
128
128
  return setYear(months[currentIndex - 4], Number(yearState.getFullYear()));
@@ -135,7 +135,7 @@ export const nextEnabled = (
135
135
  true,
136
136
  dropdownCaption,
137
137
  fromDate,
138
- toDate
138
+ toDate,
139
139
  );
140
140
  if (fallbackPrev)
141
141
  return setYear(months[fallbackPrev.index], fallbackPrev.year);
@@ -152,7 +152,7 @@ const loopBack = (
152
152
  rowCheck: boolean,
153
153
  dropdownCaption: boolean,
154
154
  fromDate?: Date,
155
- toDate?: Date
155
+ toDate?: Date,
156
156
  ): { index: number; year: number } | undefined => {
157
157
  let currentYear = setYear(yearState, Number(yearState.getFullYear()));
158
158
  for (let i = currentIndex; i >= -1; i--) {
@@ -162,7 +162,7 @@ const loopBack = (
162
162
  dropdownCaption,
163
163
  setYear(currentYear, Number(currentYear.getFullYear() - 1)),
164
164
  fromDate,
165
- toDate
165
+ toDate,
166
166
  )
167
167
  )
168
168
  return;
@@ -173,7 +173,7 @@ const loopBack = (
173
173
  const month = months[i];
174
174
  const isDisabled = !isMatch(
175
175
  setYear(month, Number(currentYear.getFullYear())),
176
- disabled
176
+ disabled,
177
177
  );
178
178
  if (rowCheck) {
179
179
  if (isDisabled && getRow(i) !== getRow(currentIndex)) {
@@ -196,7 +196,7 @@ const loopForward = (
196
196
  rowCheck: boolean,
197
197
  dropdownCaption: boolean,
198
198
  fromDate?: Date,
199
- toDate?: Date
199
+ toDate?: Date,
200
200
  ): { index: number; year: number } | undefined => {
201
201
  let currentYear = setYear(yearState, Number(yearState.getFullYear()));
202
202
  for (let i = currentIndex + 1; i < months.length + 1; i++) {
@@ -206,7 +206,7 @@ const loopForward = (
206
206
  dropdownCaption,
207
207
  setYear(currentYear, Number(currentYear.getFullYear() + 1)),
208
208
  fromDate,
209
- toDate
209
+ toDate,
210
210
  )
211
211
  )
212
212
  return;
@@ -217,7 +217,7 @@ const loopForward = (
217
217
  const month = months[i];
218
218
  const isDisabled = !isMatch(
219
219
  setYear(month, Number(currentYear.getFullYear())),
220
- disabled
220
+ disabled,
221
221
  );
222
222
  if (rowCheck) {
223
223
  if (isDisabled && getRow(i) !== getRow(currentIndex)) {
@@ -241,7 +241,7 @@ const isOutOfRange = (
241
241
  dropdownCaption: boolean,
242
242
  year: Date,
243
243
  fromDate?: Date,
244
- toDate?: Date
244
+ toDate?: Date,
245
245
  ): boolean => {
246
246
  if (
247
247
  dropdownCaption &&
@@ -261,7 +261,7 @@ const nextOnRow = (
261
261
  months,
262
262
  yearState: Date,
263
263
  disabled: Matcher[],
264
- mode: "home" | "end"
264
+ mode: "home" | "end",
265
265
  ) => {
266
266
  const row = getRow(currentIndex);
267
267
  let monthsOfRow;
@@ -1,5 +1,5 @@
1
- import parse from "date-fns/parse";
2
1
  import isBefore from "date-fns/isBefore";
2
+ import parse from "date-fns/parse";
3
3
  import sub from "date-fns/sub";
4
4
  import { isValidDate } from "./check-dates";
5
5
 
@@ -29,7 +29,7 @@ export const parseDate = (
29
29
  today: Date,
30
30
  locale: Locale,
31
31
  type: "date" | "month",
32
- allowTwoDigitYear: boolean
32
+ allowTwoDigitYear: boolean,
33
33
  ): Date => {
34
34
  let parsed;
35
35
  const ALLOWED_FORMATS =
@@ -93,20 +93,20 @@ function assignCenturyToDate(
93
93
  dateStr: string,
94
94
  format: string,
95
95
  today: Date,
96
- locale: Locale
96
+ locale: Locale,
97
97
  ) {
98
98
  const date20Century = parse(
99
99
  appendCenturyToTwoYearDigitDateString(dateStr, "19"),
100
100
  format.replace("yy", "yyyy"),
101
101
  today,
102
- { locale }
102
+ { locale },
103
103
  );
104
104
 
105
105
  const date21Century = parse(
106
106
  appendCenturyToTwoYearDigitDateString(dateStr, "20"),
107
107
  format.replace("yy", "yyyy"),
108
108
  today,
109
- { locale }
109
+ { locale },
110
110
  );
111
111
 
112
112
  if (isValidDate(date20Century) && isValidDate(date21Century)) {
@@ -114,7 +114,7 @@ function assignCenturyToDate(
114
114
  date20Century,
115
115
  sub(new Date(), {
116
116
  years: 80,
117
- })
117
+ }),
118
118
  )
119
119
  ? date21Century
120
120
  : date20Century;
@@ -125,11 +125,11 @@ function assignCenturyToDate(
125
125
 
126
126
  function appendCenturyToTwoYearDigitDateString(
127
127
  dateString: string,
128
- century: "19" | "20"
128
+ century: "19" | "20",
129
129
  ) {
130
130
  const twoDigitYear = dateString.slice(-2);
131
131
  return `${dateString.slice(
132
132
  0,
133
- dateString.length - 2
133
+ dateString.length - 2,
134
134
  )}${century}${twoDigitYear}`;
135
135
  }
@@ -1,4 +1,5 @@
1
1
  import React, { useState } from "react";
2
+ import { useControllableState } from "../util/hooks/useControllableState";
2
3
  import Menu, { MenuType } from "./Menu";
3
4
  import Toggle, { ToggleProps } from "./Toggle";
4
5
  import { DropdownContext } from "./context";
@@ -22,6 +23,10 @@ export interface DropdownProps {
22
23
  * Controlled state of the dropdown. When set, you will need to handle onClose and onSelect manually.
23
24
  */
24
25
  open?: boolean;
26
+ /**
27
+ * Change handler for open
28
+ */
29
+ onOpenChange?: (open: boolean) => void;
25
30
  }
26
31
 
27
32
  export interface DropdownType extends React.FC<DropdownProps> {
@@ -74,28 +79,26 @@ export const Dropdown = (({
74
79
  closeOnSelect = true,
75
80
  defaultOpen = false,
76
81
  open,
82
+ onOpenChange,
77
83
  }) => {
78
- const [isOpen, setIsOpen] = useState<boolean>(defaultOpen);
79
84
  const [anchorEl, setAnchorEl] = useState<Element | null>(null);
80
85
 
81
- const handleToggle = (v: boolean) => {
82
- if (open === undefined) {
83
- setIsOpen(v);
84
- }
85
- };
86
+ const [_open, _setOpen] = useControllableState({
87
+ defaultValue: defaultOpen,
88
+ value: open,
89
+ onChange: onOpenChange,
90
+ });
86
91
 
87
92
  return (
88
93
  <DropdownContext.Provider
89
94
  value={{
90
- isOpen: open ?? isOpen,
91
- handleToggle,
95
+ isOpen: _open,
96
+ handleToggle: _setOpen,
92
97
  anchorEl,
93
98
  setAnchorEl,
94
99
  onSelect: (event) => {
95
100
  onSelect?.(event);
96
- if (closeOnSelect) {
97
- open === undefined && setIsOpen(false);
98
- }
101
+ closeOnSelect && _setOpen(false);
99
102
  },
100
103
  }}
101
104
  >
@@ -1,5 +1,5 @@
1
- import React, { forwardRef } from "react";
2
1
  import cl from "clsx";
2
+ import React, { forwardRef } from "react";
3
3
 
4
4
  export const Divider = forwardRef<
5
5
  HTMLHRElement,
@@ -1,5 +1,5 @@
1
- import React, { forwardRef } from "react";
2
1
  import cl from "clsx";
2
+ import React, { forwardRef } from "react";
3
3
 
4
4
  export interface GroupedHeadingProps
5
5
  extends React.HTMLAttributes<HTMLDetailsElement> {
@@ -20,7 +20,7 @@ export const GroupedHeading = forwardRef<
20
20
  "navds-dropdown__list-heading",
21
21
  "navds-heading",
22
22
  "navds-heading--xsmall",
23
- className
23
+ className,
24
24
  )}
25
25
  />
26
26
  ));
@@ -31,7 +31,7 @@ export const GroupedItem: OverridableComponent<
31
31
  "navds-dropdown__item",
32
32
  "navds-body-short",
33
33
  "navds-body-short--small",
34
- className
34
+ className,
35
35
  )}
36
36
  />
37
37
  </dd>
@@ -34,7 +34,7 @@ export const DescriptionList = forwardRef(
34
34
  <dl {...rest} ref={ref} className={cl("navds-dropdown__list", className)}>
35
35
  {children}
36
36
  </dl>
37
- )
37
+ ),
38
38
  ) as GroupedListType;
39
39
 
40
40
  DescriptionList.Heading = GroupedHeading;
@@ -28,7 +28,7 @@ export const ListItem: OverridableComponent<ListItemProps, HTMLButtonElement> =
28
28
  "navds-dropdown__item",
29
29
  "navds-body-short",
30
30
  "navds-body-short--small",
31
- className
31
+ className,
32
32
  )}
33
33
  />
34
34
  </li>
@@ -86,7 +86,7 @@ export const Menu = forwardRef<HTMLDivElement, MenuProps>(
86
86
  }}
87
87
  />
88
88
  );
89
- }
89
+ },
90
90
  ) as MenuType;
91
91
 
92
92
  Menu.List = List;
@@ -1,6 +1,6 @@
1
+ import { Meta } from "@storybook/react";
1
2
  import React, { useState } from "react";
2
3
  import { Dropdown } from "..";
3
- import { Meta } from "@storybook/react";
4
4
  import { Button } from "../button";
5
5
 
6
6
  export default {
@@ -114,7 +114,7 @@ export const ExpansionCard = forwardRef<HTMLDivElement, ExpansionCardProps>(
114
114
  size = "medium",
115
115
  ...rest
116
116
  },
117
- ref
117
+ ref,
118
118
  ) => {
119
119
  const [_open, _setOpen] = useState(defaultOpen);
120
120
 
@@ -144,13 +144,13 @@ export const ExpansionCard = forwardRef<HTMLDivElement, ExpansionCardProps>(
144
144
  {
145
145
  "navds-expansioncard--open": open ?? _open,
146
146
  "navds-expansioncard--no-animation": !shouldFade.current,
147
- }
147
+ },
148
148
  )}
149
149
  ref={ref}
150
150
  />
151
151
  </ExpansionCardContext.Provider>
152
152
  );
153
- }
153
+ },
154
154
  ) as ExpansionCardComponent;
155
155
 
156
156
  ExpansionCard.Header = ExpansionCardHeader;
@@ -16,7 +16,7 @@ const ExpansionCardContent = forwardRef<
16
16
 
17
17
  if (panelContext === null) {
18
18
  console.error(
19
- "<ExpansionCard.Content> has to be used within an <ExpansionCard>"
19
+ "<ExpansionCard.Content> has to be used within an <ExpansionCard>",
20
20
  );
21
21
  return null;
22
22
  }
@@ -16,7 +16,7 @@ export const ExpansionCardDescription = forwardRef<
16
16
 
17
17
  if (panelContext === null) {
18
18
  console.error(
19
- "<ExpansionCard.Description> has to be used within an <ExpansionCard>"
19
+ "<ExpansionCard.Description> has to be used within an <ExpansionCard>",
20
20
  );
21
21
  return null;
22
22
  }
@@ -1,6 +1,6 @@
1
- import { ChevronDownIcon } from "@navikt/aksel-icons";
2
1
  import cl from "clsx";
3
2
  import React, { forwardRef, useContext } from "react";
3
+ import { ChevronDownIcon } from "@navikt/aksel-icons";
4
4
  import { ExpansionCardContext } from "./context";
5
5
 
6
6
  export interface ExpansionCardHeaderProps
@@ -16,7 +16,7 @@ const ExpansionCardHeader = forwardRef<
16
16
 
17
17
  if (panelContext === null) {
18
18
  console.error(
19
- "<ExpansionCard.Header> has to be used within an <ExpansionCard>"
19
+ "<ExpansionCard.Header> has to be used within an <ExpansionCard>",
20
20
  );
21
21
  return null;
22
22
  }
@@ -25,8 +25,8 @@ export const ExpansionCardTitle: OverridableComponent<
25
25
  `navds-expansioncard__title--${size}`,
26
26
  "navds-heading",
27
27
  `navds-heading--${size}`,
28
- className
28
+ className,
29
29
  )}
30
30
  />
31
- )
31
+ ),
32
32
  );
@@ -1,6 +1,6 @@
1
- import { PlantIcon } from "@navikt/aksel-icons";
2
1
  import { Meta, StoryFn } from "@storybook/react";
3
2
  import React, { useState } from "react";
3
+ import { PlantIcon } from "@navikt/aksel-icons";
4
4
  import { ExpansionCard, ExpansionCardProps } from ".";
5
5
  import { BodyLong } from "../typography";
6
6
 
@@ -1,6 +1,6 @@
1
- import React from "react";
2
1
  import { render, screen } from "@testing-library/react";
3
2
  import faker from "faker";
3
+ import React from "react";
4
4
  import { ConfirmationPanel } from ".";
5
5
 
6
6
  test("omits error id from input", async () => {
@@ -52,7 +52,7 @@ export const ConfirmationPanel = forwardRef<
52
52
  >(({ className, children, label, ...props }, ref) => {
53
53
  const { errorId, showErrorMsg, hasError, size, inputProps } = useFormField(
54
54
  props,
55
- "confirmation-panel"
55
+ "confirmation-panel",
56
56
  );
57
57
 
58
58
  const id = useId();
@@ -82,7 +82,7 @@ export const ConfirmationPanel = forwardRef<
82
82
  {...inputProps}
83
83
  aria-describedby={cl(
84
84
  inputProps["aria-describedby"],
85
- children && `confirmation-panel-${id}`
85
+ children && `confirmation-panel-${id}`,
86
86
  )}
87
87
  error={hasError}
88
88
  size={size}
@@ -79,7 +79,7 @@ export const Fieldset = forwardRef<HTMLFieldSetElement, FieldsetProps>(
79
79
  {
80
80
  "navds-fieldset--error": hasError,
81
81
  "navds-fieldset--readonly": readOnly,
82
- }
82
+ },
83
83
  )}
84
84
  >
85
85
  <Label
@@ -118,7 +118,7 @@ export const Fieldset = forwardRef<HTMLFieldSetElement, FieldsetProps>(
118
118
  </fieldset>
119
119
  </FieldsetContext.Provider>
120
120
  );
121
- }
121
+ },
122
122
  );
123
123
 
124
124
  export default Fieldset;
@@ -1,5 +1,5 @@
1
- import { PadlockLockedFillIcon } from "@navikt/aksel-icons";
2
1
  import React from "react";
2
+ import { PadlockLockedFillIcon } from "@navikt/aksel-icons";
3
3
 
4
4
  export const ReadOnlyIcon = ({
5
5
  readOnly,