@navikt/ds-react 5.5.0 → 5.6.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 (342) hide show
  1. package/_docs.json +507 -106
  2. package/cjs/accordion/Accordion.js +1 -0
  3. package/cjs/accordion/AccordionContext.js +1 -1
  4. package/cjs/accordion/AccordionHeader.js +2 -2
  5. package/cjs/accordion/AccordionItem.js +6 -2
  6. package/cjs/date/datepicker/DatePicker.js +30 -34
  7. package/cjs/date/datepicker/DatePickerStandalone.js +23 -26
  8. package/cjs/date/datepicker/parts/Caption.js +28 -0
  9. package/cjs/date/datepicker/{DayButton.js → parts/DayButton.js} +1 -2
  10. package/cjs/date/datepicker/{caption → parts}/DropdownCaption.js +13 -7
  11. package/cjs/date/datepicker/parts/HeadRow.js +36 -0
  12. package/cjs/date/datepicker/parts/Row.js +23 -0
  13. package/cjs/date/datepicker/{TableHead.js → parts/TableHead.js} +4 -3
  14. package/cjs/date/datepicker/parts/WeekNumber.js +35 -0
  15. package/cjs/date/datepicker/parts/WeekRow.js +34 -0
  16. package/cjs/date/hooks/useDatepicker.js +2 -2
  17. package/cjs/date/hooks/useMonthPicker.js +2 -2
  18. package/cjs/date/hooks/useRangeDatepicker.js +3 -3
  19. package/cjs/date/monthpicker/MonthSelector.js +1 -1
  20. package/cjs/date/utils/get-month-weeks.js +46 -0
  21. package/cjs/date/utils/labels.js +40 -1
  22. package/cjs/dropdown/Toggle.js +2 -2
  23. package/cjs/dropdown/index.js +0 -15
  24. package/cjs/form/Select.js +1 -1
  25. package/cjs/form/checkbox/useCheckbox.js +3 -4
  26. package/cjs/form/combobox/Combobox.js +1 -1
  27. package/cjs/form/combobox/Input/Input.js +1 -1
  28. package/cjs/form/search/Search.js +3 -1
  29. package/cjs/index.js +1 -0
  30. package/cjs/layout/bleed/Bleed.js +69 -0
  31. package/cjs/layout/bleed/index.js +5 -0
  32. package/cjs/layout/bleed/package.json +6 -0
  33. package/cjs/layout/box/Box.js +1 -1
  34. package/cjs/layout/responsive/Responsive.js +8 -6
  35. package/cjs/layout/sidemal-test/AvatarPanel.js +18 -0
  36. package/cjs/layout/sidemal-test/Content.js +66 -0
  37. package/cjs/layout/sidemal-test/Filter.js +48 -0
  38. package/cjs/layout/sidemal-test/Header.js +48 -0
  39. package/cjs/layout/sidemal-test/Intro.js +36 -0
  40. package/cjs/layout/sidemal-test/Sidebar.js +49 -0
  41. package/cjs/layout/sidemal-test/content-box/ContentBox.js +65 -0
  42. package/cjs/layout/sidemal-test/content-box/index.js +8 -0
  43. package/cjs/layout/sidemal-test/content-box/package.json +6 -0
  44. package/cjs/layout/stack/Stack.js +2 -2
  45. package/cjs/layout/stack/index.js +3 -1
  46. package/cjs/layout/utilities/css.js +37 -14
  47. package/cjs/loader/Loader.js +2 -2
  48. package/cjs/modal/dialog-polyfill.js +2 -0
  49. package/cjs/popover/Popover.js +3 -2
  50. package/cjs/tabs/TabList.js +6 -7
  51. package/cjs/timeline/Pin.js +20 -20
  52. package/cjs/timeline/Timeline.js +4 -4
  53. package/cjs/timeline/period/ClickablePeriod.js +19 -19
  54. package/cjs/timeline/period/index.js +1 -1
  55. package/cjs/timeline/utils/timeline.js +3 -3
  56. package/cjs/toggle-group/ToggleGroup.js +1 -1
  57. package/cjs/tooltip/Tooltip.js +1 -1
  58. package/cjs/typography/Heading.js +1 -1
  59. package/cjs/util/RandomIcon.js +1 -0
  60. package/cjs/util/Slot.js +88 -0
  61. package/cjs/util/useId.js +2 -4
  62. package/esm/accordion/Accordion.js +1 -0
  63. package/esm/accordion/Accordion.js.map +1 -1
  64. package/esm/accordion/AccordionContext.d.ts +1 -0
  65. package/esm/accordion/AccordionContext.js +1 -1
  66. package/esm/accordion/AccordionContext.js.map +1 -1
  67. package/esm/accordion/AccordionHeader.js +2 -2
  68. package/esm/accordion/AccordionHeader.js.map +1 -1
  69. package/esm/accordion/AccordionItem.js +6 -2
  70. package/esm/accordion/AccordionItem.js.map +1 -1
  71. package/esm/date/datepicker/DatePicker.d.ts +14 -5
  72. package/esm/date/datepicker/DatePicker.js +29 -33
  73. package/esm/date/datepicker/DatePicker.js.map +1 -1
  74. package/esm/date/datepicker/DatePickerStandalone.d.ts +3 -2
  75. package/esm/date/datepicker/DatePickerStandalone.js +22 -25
  76. package/esm/date/datepicker/DatePickerStandalone.js.map +1 -1
  77. package/esm/date/datepicker/{caption → parts}/Caption.d.ts +3 -0
  78. package/esm/date/datepicker/parts/Caption.js +22 -0
  79. package/esm/date/datepicker/parts/Caption.js.map +1 -0
  80. package/esm/date/datepicker/parts/DayButton.d.ts +4 -0
  81. package/esm/date/datepicker/{DayButton.js → parts/DayButton.js} +2 -1
  82. package/esm/date/datepicker/parts/DayButton.js.map +1 -0
  83. package/esm/date/datepicker/{caption → parts}/DropdownCaption.d.ts +3 -0
  84. package/esm/date/datepicker/parts/DropdownCaption.js +44 -0
  85. package/esm/date/datepicker/parts/DropdownCaption.js.map +1 -0
  86. package/esm/date/datepicker/parts/HeadRow.d.ts +11 -0
  87. package/esm/date/datepicker/parts/HeadRow.js +29 -0
  88. package/esm/date/datepicker/parts/HeadRow.js.map +1 -0
  89. package/esm/date/datepicker/parts/Row.d.ts +17 -0
  90. package/esm/date/datepicker/parts/Row.js +19 -0
  91. package/esm/date/datepicker/parts/Row.js.map +1 -0
  92. package/esm/date/datepicker/parts/TableHead.d.ts +6 -0
  93. package/esm/date/datepicker/{TableHead.js → parts/TableHead.js} +5 -2
  94. package/esm/date/datepicker/parts/TableHead.js.map +1 -0
  95. package/esm/date/datepicker/parts/WeekNumber.d.ts +13 -0
  96. package/esm/date/datepicker/parts/WeekNumber.js +31 -0
  97. package/esm/date/datepicker/parts/WeekNumber.js.map +1 -0
  98. package/esm/date/datepicker/parts/WeekRow.d.ts +5 -0
  99. package/esm/date/datepicker/parts/WeekRow.js +30 -0
  100. package/esm/date/datepicker/parts/WeekRow.js.map +1 -0
  101. package/esm/date/hooks/useDatepicker.js +2 -2
  102. package/esm/date/hooks/useDatepicker.js.map +1 -1
  103. package/esm/date/hooks/useMonthPicker.js +2 -2
  104. package/esm/date/hooks/useMonthPicker.js.map +1 -1
  105. package/esm/date/hooks/useRangeDatepicker.js +3 -3
  106. package/esm/date/hooks/useRangeDatepicker.js.map +1 -1
  107. package/esm/date/monthpicker/MonthButton.d.ts +2 -2
  108. package/esm/date/monthpicker/MonthPicker.d.ts +1 -1
  109. package/esm/date/monthpicker/MonthSelector.js +1 -1
  110. package/esm/date/monthpicker/MonthSelector.js.map +1 -1
  111. package/esm/date/utils/get-month-weeks.d.ts +16 -0
  112. package/esm/date/utils/get-month-weeks.js +42 -0
  113. package/esm/date/utils/get-month-weeks.js.map +1 -0
  114. package/esm/date/utils/labels.d.ts +9 -0
  115. package/esm/date/utils/labels.js +36 -0
  116. package/esm/date/utils/labels.js.map +1 -1
  117. package/esm/date/utils/navigation.d.ts +1 -1
  118. package/esm/date/utils/navigation.js.map +1 -1
  119. package/esm/dropdown/Toggle.js +1 -1
  120. package/esm/dropdown/Toggle.js.map +1 -1
  121. package/esm/dropdown/index.d.ts +1 -2
  122. package/esm/dropdown/index.js +0 -1
  123. package/esm/dropdown/index.js.map +1 -1
  124. package/esm/form/Select.js +1 -1
  125. package/esm/form/Select.js.map +1 -1
  126. package/esm/form/checkbox/useCheckbox.d.ts +1 -1
  127. package/esm/form/checkbox/useCheckbox.js +3 -4
  128. package/esm/form/checkbox/useCheckbox.js.map +1 -1
  129. package/esm/form/combobox/Combobox.d.ts +1 -1
  130. package/esm/form/combobox/Combobox.js +1 -1
  131. package/esm/form/combobox/Combobox.js.map +1 -1
  132. package/esm/form/combobox/Input/Input.d.ts +0 -2
  133. package/esm/form/combobox/Input/Input.js +1 -1
  134. package/esm/form/combobox/Input/Input.js.map +1 -1
  135. package/esm/form/search/Search.js +3 -1
  136. package/esm/form/search/Search.js.map +1 -1
  137. package/esm/index.d.ts +1 -0
  138. package/esm/index.js +1 -0
  139. package/esm/index.js.map +1 -1
  140. package/esm/layout/bleed/Bleed.d.ts +47 -0
  141. package/esm/layout/bleed/Bleed.js +41 -0
  142. package/esm/layout/bleed/Bleed.js.map +1 -0
  143. package/esm/layout/bleed/index.d.ts +1 -0
  144. package/esm/layout/bleed/index.js +2 -0
  145. package/esm/layout/bleed/index.js.map +1 -0
  146. package/esm/layout/box/Box.d.ts +1 -2
  147. package/esm/layout/box/Box.js +1 -1
  148. package/esm/layout/box/Box.js.map +1 -1
  149. package/esm/layout/responsive/Responsive.d.ts +8 -4
  150. package/esm/layout/responsive/Responsive.js +8 -6
  151. package/esm/layout/responsive/Responsive.js.map +1 -1
  152. package/esm/layout/sidemal-test/AvatarPanel.d.ts +4 -0
  153. package/esm/layout/sidemal-test/AvatarPanel.js +12 -0
  154. package/esm/layout/sidemal-test/AvatarPanel.js.map +1 -0
  155. package/esm/layout/sidemal-test/Content.d.ts +2 -0
  156. package/esm/layout/sidemal-test/Content.js +60 -0
  157. package/esm/layout/sidemal-test/Content.js.map +1 -0
  158. package/esm/layout/sidemal-test/Filter.d.ts +2 -0
  159. package/esm/layout/sidemal-test/Filter.js +22 -0
  160. package/esm/layout/sidemal-test/Filter.js.map +1 -0
  161. package/esm/layout/sidemal-test/Header.d.ts +2 -0
  162. package/esm/layout/sidemal-test/Header.js +42 -0
  163. package/esm/layout/sidemal-test/Header.js.map +1 -0
  164. package/esm/layout/sidemal-test/Intro.d.ts +2 -0
  165. package/esm/layout/sidemal-test/Intro.js +30 -0
  166. package/esm/layout/sidemal-test/Intro.js.map +1 -0
  167. package/esm/layout/sidemal-test/Sidebar.d.ts +4 -0
  168. package/esm/layout/sidemal-test/Sidebar.js +41 -0
  169. package/esm/layout/sidemal-test/Sidebar.js.map +1 -0
  170. package/esm/layout/sidemal-test/content-box/ContentBox.d.ts +8 -0
  171. package/esm/layout/sidemal-test/content-box/ContentBox.js +37 -0
  172. package/esm/layout/sidemal-test/content-box/ContentBox.js.map +1 -0
  173. package/esm/layout/sidemal-test/content-box/index.d.ts +1 -0
  174. package/esm/layout/sidemal-test/content-box/index.js +2 -0
  175. package/esm/layout/sidemal-test/content-box/index.js.map +1 -0
  176. package/esm/layout/stack/Stack.d.ts +7 -3
  177. package/esm/layout/stack/Stack.js +3 -3
  178. package/esm/layout/stack/Stack.js.map +1 -1
  179. package/esm/layout/stack/index.d.ts +1 -0
  180. package/esm/layout/stack/index.js +1 -0
  181. package/esm/layout/stack/index.js.map +1 -1
  182. package/esm/layout/utilities/css.d.ts +1 -1
  183. package/esm/layout/utilities/css.js +37 -14
  184. package/esm/layout/utilities/css.js.map +1 -1
  185. package/esm/loader/Loader.js +3 -3
  186. package/esm/loader/Loader.js.map +1 -1
  187. package/esm/modal/dialog-polyfill.js +2 -0
  188. package/esm/modal/dialog-polyfill.js.map +1 -1
  189. package/esm/popover/Popover.js +3 -2
  190. package/esm/popover/Popover.js.map +1 -1
  191. package/esm/tabs/TabList.js +6 -7
  192. package/esm/tabs/TabList.js.map +1 -1
  193. package/esm/timeline/Pin.js +21 -21
  194. package/esm/timeline/Pin.js.map +1 -1
  195. package/esm/timeline/Timeline.js +4 -4
  196. package/esm/timeline/Timeline.js.map +1 -1
  197. package/esm/timeline/TimelineRow.js.map +1 -1
  198. package/esm/timeline/hooks/usePeriodContext.d.ts +1 -1
  199. package/esm/timeline/period/ClickablePeriod.js +20 -20
  200. package/esm/timeline/period/ClickablePeriod.js.map +1 -1
  201. package/esm/timeline/period/index.d.ts +2 -2
  202. package/esm/timeline/period/index.js +1 -1
  203. package/esm/timeline/period/index.js.map +1 -1
  204. package/esm/timeline/utils/timeline.js +3 -3
  205. package/esm/timeline/utils/timeline.js.map +1 -1
  206. package/esm/toggle-group/ToggleGroup.js +1 -1
  207. package/esm/toggle-group/ToggleGroup.js.map +1 -1
  208. package/esm/tooltip/Tooltip.js +1 -1
  209. package/esm/tooltip/Tooltip.js.map +1 -1
  210. package/esm/typography/Heading.js +1 -1
  211. package/esm/typography/Heading.js.map +1 -1
  212. package/esm/util/RandomIcon.js +1 -0
  213. package/esm/util/RandomIcon.js.map +1 -1
  214. package/esm/util/Slot.d.ts +6 -0
  215. package/esm/util/Slot.js +60 -0
  216. package/esm/util/Slot.js.map +1 -0
  217. package/esm/util/mergeRefs.d.ts +1 -1
  218. package/esm/util/useId.js +2 -4
  219. package/esm/util/useId.js.map +1 -1
  220. package/package.json +4 -4
  221. package/src/accordion/Accordion.tsx +1 -0
  222. package/src/accordion/AccordionContext.tsx +2 -1
  223. package/src/accordion/AccordionHeader.tsx +2 -2
  224. package/src/accordion/AccordionItem.tsx +7 -5
  225. package/src/accordion/accordion.stories.tsx +21 -34
  226. package/src/alert/alert.stories.tsx +2 -2
  227. package/src/chips/chips.stories.tsx +29 -32
  228. package/src/date/datepicker/DatePicker.tsx +63 -58
  229. package/src/date/datepicker/DatePickerStandalone.tsx +36 -39
  230. package/src/date/datepicker/datepicker.stories.tsx +67 -2
  231. package/src/date/datepicker/datepicker.test.tsx +5 -4
  232. package/src/date/datepicker/{caption → parts}/Caption.tsx +19 -17
  233. package/src/date/datepicker/{DayButton.tsx → parts/DayButton.tsx} +3 -1
  234. package/src/date/datepicker/parts/DropdownCaption.tsx +113 -0
  235. package/src/date/datepicker/parts/HeadRow.tsx +56 -0
  236. package/src/date/datepicker/parts/Row.tsx +47 -0
  237. package/src/date/datepicker/{TableHead.tsx → parts/TableHead.tsx} +6 -2
  238. package/src/date/datepicker/parts/WeekNumber.tsx +79 -0
  239. package/src/date/datepicker/parts/WeekRow.tsx +60 -0
  240. package/src/date/hooks/useDatepicker.tsx +2 -2
  241. package/src/date/hooks/useMonthPicker.tsx +2 -2
  242. package/src/date/hooks/useRangeDatepicker.test.tsx +11 -11
  243. package/src/date/hooks/useRangeDatepicker.tsx +3 -3
  244. package/src/date/monthpicker/MonthButton.tsx +2 -2
  245. package/src/date/monthpicker/MonthPicker.tsx +1 -1
  246. package/src/date/monthpicker/MonthSelector.tsx +3 -3
  247. package/src/date/monthpicker/monthpicker.stories.tsx +1 -1
  248. package/src/date/utils/__tests__/get-initial-year.test.ts +0 -12
  249. package/src/date/utils/__tests__/get-month-weeks.test.ts +113 -0
  250. package/src/date/utils/__tests__/is-match.test.ts +3 -3
  251. package/src/date/utils/__tests__/parse-dates.test.ts +4 -2
  252. package/src/date/utils/get-month-weeks.ts +93 -0
  253. package/src/date/utils/labels.ts +51 -0
  254. package/src/date/utils/navigation.ts +3 -3
  255. package/src/dropdown/Toggle.tsx +1 -1
  256. package/src/dropdown/dropdown.stories.tsx +25 -28
  257. package/src/dropdown/index.ts +1 -2
  258. package/src/expansion-card/expansion-card.stories.tsx +143 -161
  259. package/src/form/ConfirmationPanel.test.tsx +5 -5
  260. package/src/form/Select.tsx +1 -1
  261. package/src/form/checkbox/Checkbox.test.tsx +14 -26
  262. package/src/form/checkbox/checkbox.stories.tsx +66 -71
  263. package/src/form/checkbox/useCheckbox.ts +3 -4
  264. package/src/form/combobox/Combobox.tsx +2 -3
  265. package/src/form/combobox/Input/Input.tsx +1 -3
  266. package/src/form/combobox/combobox.stories.tsx +20 -23
  267. package/src/form/combobox/combobox.test.tsx +22 -20
  268. package/src/form/radio/radio.stories.tsx +39 -44
  269. package/src/form/search/Search.tsx +1 -0
  270. package/src/form/search/search.stories.tsx +22 -26
  271. package/src/form/stories/fieldset.stories.tsx +1 -1
  272. package/src/index.ts +1 -0
  273. package/src/layout/bleed/Bleed.stories.tsx +381 -0
  274. package/src/layout/bleed/Bleed.tsx +130 -0
  275. package/src/layout/bleed/index.ts +1 -0
  276. package/src/layout/box/Box.stories.tsx +251 -256
  277. package/src/layout/box/Box.tsx +2 -1
  278. package/src/layout/responsive/Responsive.tsx +21 -6
  279. package/src/layout/responsive/hide.stories.tsx +35 -0
  280. package/src/layout/responsive/show.stories.tsx +35 -0
  281. package/src/layout/sidemal-test/AvatarPanel.tsx +27 -0
  282. package/src/layout/sidemal-test/Content.tsx +129 -0
  283. package/src/layout/sidemal-test/Filter.tsx +46 -0
  284. package/src/layout/sidemal-test/Header.tsx +96 -0
  285. package/src/layout/sidemal-test/Intro.tsx +91 -0
  286. package/src/layout/sidemal-test/Sidebar.tsx +77 -0
  287. package/src/layout/sidemal-test/content-box/ContentBox.tsx +46 -0
  288. package/src/layout/sidemal-test/content-box/index.ts +1 -0
  289. package/src/layout/sidemal-test/navno-sidemal.stories.mdx +29 -0
  290. package/src/layout/sidemal-test/navno-sidemal.stories.tsx +65 -0
  291. package/src/layout/sidemal-test/styling.css +43 -0
  292. package/src/layout/stack/Stack.tsx +14 -8
  293. package/src/layout/stack/index.ts +1 -0
  294. package/src/layout/stack/stack.stories.tsx +23 -1
  295. package/src/layout/utilities/css.ts +59 -20
  296. package/src/loader/Loader.tsx +2 -3
  297. package/src/modal/dialog-polyfill.ts +2 -0
  298. package/src/pagination/pagination.stories.tsx +35 -42
  299. package/src/popover/Popover.test.tsx +21 -35
  300. package/src/popover/Popover.tsx +2 -2
  301. package/src/popover/popover.stories.tsx +25 -41
  302. package/src/react-css.d.ts +0 -1
  303. package/src/read-more/readmore.stories.tsx +35 -36
  304. package/src/stepper/stepper.stories.tsx +45 -52
  305. package/src/table/stories/table-expandable.stories.tsx +59 -63
  306. package/src/tabs/TabList.tsx +4 -6
  307. package/src/tabs/Tabs.stories.tsx +3 -3
  308. package/src/tag/tag.stories.tsx +4 -4
  309. package/src/timeline/Pin.tsx +44 -39
  310. package/src/timeline/Timeline.tsx +6 -6
  311. package/src/timeline/TimelineRow.tsx +1 -0
  312. package/src/timeline/hooks/usePeriodContext.tsx +1 -1
  313. package/src/timeline/period/ClickablePeriod.tsx +42 -38
  314. package/src/timeline/period/index.tsx +5 -4
  315. package/src/timeline/timeline.stories.tsx +11 -10
  316. package/src/timeline/utils/timeline.ts +3 -3
  317. package/src/toggle-group/ToggleGroup.stories.tsx +25 -29
  318. package/src/toggle-group/ToggleGroup.tsx +0 -1
  319. package/src/tooltip/Tooltip.test.tsx +40 -54
  320. package/src/tooltip/Tooltip.tsx +1 -1
  321. package/src/typography/Heading.tsx +1 -1
  322. package/src/util/RandomIcon.tsx +1 -0
  323. package/src/util/Slot.tsx +69 -0
  324. package/src/util/__tests__/Slot.test.tsx +98 -0
  325. package/src/util/mergeRefs.tsx +1 -1
  326. package/src/util/useId.ts +1 -3
  327. package/cjs/date/datepicker/caption/Caption.js +0 -23
  328. package/cjs/date/datepicker/caption/index.js +0 -10
  329. package/cjs/date/datepicker/caption/package.json +0 -6
  330. package/esm/date/datepicker/DayButton.d.ts +0 -3
  331. package/esm/date/datepicker/DayButton.js.map +0 -1
  332. package/esm/date/datepicker/TableHead.d.ts +0 -3
  333. package/esm/date/datepicker/TableHead.js.map +0 -1
  334. package/esm/date/datepicker/caption/Caption.js +0 -17
  335. package/esm/date/datepicker/caption/Caption.js.map +0 -1
  336. package/esm/date/datepicker/caption/DropdownCaption.js +0 -38
  337. package/esm/date/datepicker/caption/DropdownCaption.js.map +0 -1
  338. package/esm/date/datepicker/caption/index.d.ts +0 -2
  339. package/esm/date/datepicker/caption/index.js +0 -3
  340. package/esm/date/datepicker/caption/index.js.map +0 -1
  341. package/src/date/datepicker/caption/DropdownCaption.tsx +0 -108
  342. package/src/date/datepicker/caption/index.ts +0 -2
@@ -7,6 +7,7 @@ import React, {
7
7
  useState,
8
8
  } from "react";
9
9
  import { AccordionContext } from "./AccordionContext";
10
+ import { omit } from "../util";
10
11
 
11
12
  export interface AccordionItemProps
12
13
  extends React.HTMLAttributes<HTMLDivElement> {
@@ -36,10 +37,7 @@ export const AccordionItemContext =
36
37
  createContext<AccordionItemContextProps | null>(null);
37
38
 
38
39
  const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(
39
- (
40
- { children, className, open, defaultOpen = false, onClick, id, ...rest },
41
- ref
42
- ) => {
40
+ ({ children, className, open, defaultOpen = false, ...rest }, ref) => {
43
41
  const [internalOpen, setInternalOpen] = useState<boolean>(defaultOpen);
44
42
  const context = useContext(AccordionContext);
45
43
 
@@ -56,6 +54,10 @@ const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(
56
54
  shouldAnimate.current = true;
57
55
  };
58
56
 
57
+ if (!context?.mounted) {
58
+ console.error("<Accordion.Item> has to be used within an <Accordion>");
59
+ }
60
+
59
61
  return (
60
62
  <div
61
63
  className={cl("navds-accordion__item", className, {
@@ -64,7 +66,7 @@ const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(
64
66
  "navds-accordion__item--no-animation": !shouldAnimate.current,
65
67
  })}
66
68
  ref={ref}
67
- {...rest}
69
+ {...omit(rest, ["onClick"])}
68
70
  >
69
71
  <AccordionItemContext.Provider
70
72
  value={{
@@ -274,39 +274,26 @@ const SingleHeaderAccordion = ({
274
274
  );
275
275
  };
276
276
 
277
- type sizesType = "large" | "medium" | "small";
278
- type headingSizesType = "large" | "medium" | "small" | "xsmall";
279
- const sizes: sizesType[] = ["large", "medium", "small"];
280
- const headingSizes: headingSizesType[] = ["large", "medium", "small", "xsmall"]; // enum this?!
277
+ const sizes: AccordionProps["size"][] = ["large", "medium", "small"];
278
+ const headingSizes: AccordionProps["headingSize"][] = [
279
+ "large",
280
+ "medium",
281
+ "small",
282
+ "xsmall",
283
+ ];
281
284
 
282
- export const Size = {
283
- render: ({ ...props }) => {
284
- return (
285
- <div style={{ width: 500 }} className="colgap">
286
- {sizes.map((element) => (
287
- <SingleHeaderAccordion size={element} {...props} />
288
- ))}
289
- </div>
290
- );
291
- },
292
-
293
- args: {
294
- variant: "neutral",
295
- },
296
- };
297
-
298
- export const HeadingSize = {
299
- render: ({ ...props }) => {
300
- return (
301
- <div style={{ width: 500 }} className="colgap">
302
- {headingSizes.map((element) => (
303
- <SingleHeaderAccordion headingSize={element} {...props} />
304
- ))}
305
- </div>
306
- );
307
- },
285
+ export const Size = (props) => (
286
+ <div style={{ width: 500 }} className="colgap">
287
+ {sizes.map((size) => (
288
+ <SingleHeaderAccordion key={size} size={size} {...props} />
289
+ ))}
290
+ </div>
291
+ );
308
292
 
309
- args: {
310
- variant: "neutral",
311
- },
312
- };
293
+ export const HeadingSize = (props) => (
294
+ <div style={{ width: 500 }} className="colgap">
295
+ {headingSizes.map((size) => (
296
+ <SingleHeaderAccordion key={size} headingSize={size} {...props} />
297
+ ))}
298
+ </div>
299
+ );
@@ -140,7 +140,7 @@ export const Heading = () => {
140
140
  export const Links = () => {
141
141
  return (
142
142
  <div className="colgap">
143
- {variants.map((variant, i) => (
143
+ {variants.map((variant) => (
144
144
  <Alert key={variant} variant={variant}>
145
145
  <Link href="#">Id elit esse enim reprehenderit</Link>
146
146
  </Alert>
@@ -156,7 +156,7 @@ const AlertWithCloseButton = ({
156
156
  size?: "medium" | "small";
157
157
  children?: React.ReactNode;
158
158
  }) => {
159
- let [show, setShow] = React.useState(true);
159
+ const [show, setShow] = React.useState(true);
160
160
 
161
161
  return show ? (
162
162
  <Alert
@@ -1,4 +1,3 @@
1
- /* eslint-disable react-hooks/rules-of-hooks */
2
1
  import React, { useState } from "react";
3
2
  import { Chips } from ".";
4
3
 
@@ -23,46 +22,44 @@ export default {
23
22
 
24
23
  const options = ["Norsk", "Dansk", "Svensk", "Tysk", "Spansk"];
25
24
 
26
- export const Default = {
27
- render: (props) => {
28
- const [selected, setSelected] = useState(["Dansk", "Svensk"]);
29
- const [filter, setFilter] = useState(options);
30
-
31
- if (props.type === "toggle") {
32
- return (
33
- <Chips size={props.size ?? "medium"}>
34
- {options.map((c) => (
35
- <Chips.Toggle
36
- selected={selected.includes(c)}
37
- key={c}
38
- onClick={() =>
39
- setSelected(
40
- selected.includes(c)
41
- ? selected.filter((x) => x !== c)
42
- : [...selected, c]
43
- )
44
- }
45
- >
46
- {c}
47
- </Chips.Toggle>
48
- ))}
49
- </Chips>
50
- );
51
- }
25
+ export const Default = (props) => {
26
+ const [selected, setSelected] = useState(["Dansk", "Svensk"]);
27
+ const [filter, setFilter] = useState(options);
52
28
 
29
+ if (props.type === "toggle") {
53
30
  return (
54
31
  <Chips size={props.size ?? "medium"}>
55
- {filter.map((c) => (
56
- <Chips.Removable
32
+ {options.map((c) => (
33
+ <Chips.Toggle
34
+ selected={selected.includes(c)}
57
35
  key={c}
58
- onClick={() => setFilter((x) => x.filter((y) => y !== c))}
36
+ onClick={() =>
37
+ setSelected(
38
+ selected.includes(c)
39
+ ? selected.filter((x) => x !== c)
40
+ : [...selected, c]
41
+ )
42
+ }
59
43
  >
60
44
  {c}
61
- </Chips.Removable>
45
+ </Chips.Toggle>
62
46
  ))}
63
47
  </Chips>
64
48
  );
65
- },
49
+ }
50
+
51
+ return (
52
+ <Chips size={props.size ?? "medium"}>
53
+ {filter.map((c) => (
54
+ <Chips.Removable
55
+ key={c}
56
+ onClick={() => setFilter((x) => x.filter((y) => y !== c))}
57
+ >
58
+ {c}
59
+ </Chips.Removable>
60
+ ))}
61
+ </Chips>
62
+ );
66
63
  };
67
64
 
68
65
  export const Toggle = () => {
@@ -5,46 +5,56 @@ import {
5
5
  DateRange,
6
6
  DayPicker,
7
7
  DayPickerBase,
8
- isMatch,
9
8
  Matcher,
10
- SelectMultipleEventHandler,
11
- SelectRangeEventHandler,
12
- SelectSingleEventHandler,
9
+ isMatch,
13
10
  } from "react-day-picker";
14
- import { omit, Popover, useId } from "../..";
11
+ import { Popover, omit, useId } from "../..";
15
12
  import { DateInputProps, DatePickerInput } from "../DateInput";
16
13
  import { DateContext } from "../context";
17
14
  import { getLocaleFromString, labels } from "../utils";
18
- import { Caption, DropdownCaption } from "./caption";
19
15
  import DatePickerStandalone, {
20
16
  DatePickerStandaloneType,
21
17
  } from "./DatePickerStandalone";
22
- import { DayButton } from "./DayButton";
23
- import { TableHead } from "./TableHead";
18
+ import Caption from "./parts/Caption";
19
+ import DayButton from "./parts/DayButton";
20
+ import DropdownCaption from "./parts/DropdownCaption";
21
+ import { HeadRow } from "./parts/HeadRow";
22
+ import Row from "./parts/Row";
23
+ import TableHead from "./parts/TableHead";
24
+ import WeekNumber from "./parts/WeekNumber";
24
25
 
25
- export type ConditionalModeProps =
26
- | {
27
- mode?: "single";
28
- onSelect?: (val?: Date) => void;
29
- selected?: Date;
30
- defaultSelected?: Date;
31
- }
32
- | {
33
- mode?: "multiple";
34
- onSelect?: (val?: Date[]) => void;
35
- selected?: Date[];
36
- defaultSelected?: Date[];
37
- min?: number;
38
- max?: number;
39
- }
40
- | {
41
- mode?: "range";
42
- onSelect?: (val?: DateRange) => void;
43
- selected?: DateRange;
44
- defaultSelected?: DateRange;
45
- min?: number;
46
- max?: number;
47
- };
26
+ export type SingleMode = {
27
+ mode?: "single";
28
+ onSelect?: (val?: Date) => void;
29
+ selected?: Date;
30
+ defaultSelected?: Date;
31
+ onWeekNumberClick?: never;
32
+ };
33
+
34
+ export type MultipleMode = {
35
+ mode: "multiple";
36
+ onSelect?: (val?: Date[]) => void;
37
+ selected?: Date[];
38
+ defaultSelected?: Date[];
39
+ min?: number;
40
+ max?: number;
41
+ /**
42
+ * Allows selecting a week at a time. Only used with mode="multiple".
43
+ */
44
+ onWeekNumberClick?: DayPickerBase["onWeekNumberClick"];
45
+ };
46
+
47
+ export type RangeMode = {
48
+ mode: "range";
49
+ onSelect?: (val?: DateRange) => void;
50
+ selected?: DateRange;
51
+ defaultSelected?: DateRange;
52
+ min?: number;
53
+ max?: number;
54
+ onWeekNumberClick?: never;
55
+ };
56
+
57
+ type ConditionalModeProps = SingleMode | MultipleMode | RangeMode;
48
58
 
49
59
  //github.com/gpbl/react-day-picker/blob/50b6dba/packages/react-day-picker/src/types/DayPickerBase.ts#L139
50
60
  export interface DatePickerDefaultProps
@@ -186,6 +196,7 @@ export const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(
186
196
  onOpenToggle,
187
197
  strategy,
188
198
  bubbleEscape = false,
199
+ onWeekNumberClick,
189
200
  ...rest
190
201
  },
191
202
  ref
@@ -199,33 +210,20 @@ export const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(
199
210
  Date | Date[] | DateRange | undefined
200
211
  >(defaultSelected);
201
212
 
202
- const handleSingleSelect: SelectSingleEventHandler = (selectedDay) => {
203
- setSelectedDates(selectedDay);
204
- selectedDay && (onClose?.() ?? setOpen(false));
205
- rest?.onSelect && (rest?.onSelect as (val?: Date) => void)(selectedDay);
206
- };
213
+ const mode = rest.mode ?? ("single" as any);
207
214
 
208
- const handleMultipleSelect: SelectMultipleEventHandler = (selectedDays) => {
209
- setSelectedDates(selectedDays);
210
- rest?.onSelect &&
211
- (rest?.onSelect as (val?: Date[]) => void)(selectedDays);
212
- };
215
+ /**
216
+ * @param selected Date | Date[] | DateRange | undefined
217
+ */
218
+ const handleSelect = (selected) => {
219
+ setSelectedDates(selected);
213
220
 
214
- const handleRangeSelect: SelectRangeEventHandler = (selectedDays) => {
215
- setSelectedDates(selectedDays);
216
- selectedDays?.from && selectedDays?.to && (onClose?.() ?? setOpen(false));
217
- rest?.onSelect &&
218
- (rest?.onSelect as (val?: DateRange) => void)(selectedDays);
219
- };
220
-
221
- const overrideProps = {
222
- mode: rest.mode ?? ("single" as any),
223
- onSelect:
224
- rest?.mode === "single"
225
- ? handleSingleSelect
226
- : rest?.mode === "multiple"
227
- ? handleMultipleSelect
228
- : handleRangeSelect,
221
+ if (rest.mode === "single") {
222
+ selected && (onClose?.() ?? setOpen(false));
223
+ } else if (rest.mode === "range") {
224
+ selected?.from && selected?.to && (onClose?.() ?? setOpen(false));
225
+ }
226
+ rest?.onSelect?.(selected);
229
227
  };
230
228
 
231
229
  return (
@@ -262,12 +260,16 @@ export const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(
262
260
  >
263
261
  <DayPicker
264
262
  locale={getLocaleFromString(locale)}
265
- {...overrideProps}
263
+ mode={mode}
264
+ onSelect={handleSelect}
266
265
  selected={selected ?? selectedDates}
267
266
  components={{
268
267
  Caption: dropdownCaption ? DropdownCaption : Caption,
269
- Day: DayButton,
270
268
  Head: TableHead,
269
+ HeadRow,
270
+ WeekNumber,
271
+ Row,
272
+ Day: DayButton,
271
273
  }}
272
274
  className={cl("navds-date", className)}
273
275
  classNames={{
@@ -289,6 +291,9 @@ export const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(
289
291
  weekend: "rdp-day__weekend",
290
292
  }}
291
293
  showWeekNumber={showWeekNumber}
294
+ onWeekNumberClick={
295
+ mode === "multiple" ? onWeekNumberClick : undefined
296
+ }
292
297
  fixedWeeks
293
298
  showOutsideDays
294
299
  {...omit(rest, ["onSelect"])}
@@ -1,19 +1,22 @@
1
1
  import cl from "clsx";
2
2
  import isWeekend from "date-fns/isWeekend";
3
3
  import React, { forwardRef } from "react";
4
- import {
5
- DateRange,
6
- DayPicker,
7
- isMatch,
8
- SelectMultipleEventHandler,
9
- SelectRangeEventHandler,
10
- SelectSingleEventHandler,
11
- } from "react-day-picker";
4
+ import { DateRange, DayPicker, isMatch } from "react-day-picker";
12
5
  import { omit } from "../..";
13
6
  import { getLocaleFromString, labels } from "../utils";
14
- import { Caption, DropdownCaption } from "./caption";
15
- import { ConditionalModeProps, DatePickerDefaultProps } from "./DatePicker";
16
- import { TableHead } from "./TableHead";
7
+ import {
8
+ DatePickerDefaultProps,
9
+ MultipleMode,
10
+ RangeMode,
11
+ SingleMode,
12
+ } from "./DatePicker";
13
+ import TableHead from "./parts/TableHead";
14
+ import WeekNumber from "./parts/WeekNumber";
15
+ import Caption from "./parts/Caption";
16
+ import DropdownCaption from "./parts/DropdownCaption";
17
+ import Row from "./parts/Row";
18
+ import { HeadRow } from "./parts/HeadRow";
19
+ import DayButton from "./parts/DayButton";
17
20
 
18
21
  interface DatePickerStandaloneDefaultProps
19
22
  extends Omit<
@@ -31,8 +34,10 @@ interface DatePickerStandaloneDefaultProps
31
34
  fixedWeeks?: boolean;
32
35
  }
33
36
 
37
+ type StandaloneConditionalModeProps = SingleMode | MultipleMode | RangeMode;
38
+
34
39
  export type DatePickerStandaloneProps = DatePickerStandaloneDefaultProps &
35
- ConditionalModeProps;
40
+ StandaloneConditionalModeProps;
36
41
 
37
42
  export type DatePickerStandaloneType = React.ForwardRefExoticComponent<
38
43
  DatePickerStandaloneProps & React.RefAttributes<HTMLDivElement>
@@ -44,7 +49,6 @@ export const DatePickerStandalone: DatePickerStandaloneType = forwardRef<
44
49
  >(
45
50
  (
46
51
  {
47
- children,
48
52
  className,
49
53
  locale = "nb",
50
54
  dropdownCaption,
@@ -52,10 +56,10 @@ export const DatePickerStandalone: DatePickerStandaloneType = forwardRef<
52
56
  disableWeekends = false,
53
57
  showWeekNumber = false,
54
58
  selected,
55
- id,
56
59
  defaultSelected,
57
60
  onSelect,
58
- fixedWeeks = true,
61
+ fixedWeeks = false,
62
+ onWeekNumberClick,
59
63
  ...rest
60
64
  },
61
65
  ref
@@ -64,29 +68,14 @@ export const DatePickerStandalone: DatePickerStandaloneType = forwardRef<
64
68
  Date | Date[] | DateRange | undefined
65
69
  >(defaultSelected);
66
70
 
67
- const handleSingleSelect: SelectSingleEventHandler = (selectedDay) => {
68
- setSelectedDates(selectedDay);
69
- onSelect && (onSelect as (val?: Date) => void)(selectedDay);
70
- };
71
-
72
- const handleMultipleSelect: SelectMultipleEventHandler = (selectedDays) => {
73
- setSelectedDates(selectedDays);
74
- onSelect && (onSelect as (val?: Date[]) => void)(selectedDays);
75
- };
76
-
77
- const handleRangeSelect: SelectRangeEventHandler = (selectedDays) => {
78
- setSelectedDates(selectedDays);
79
- onSelect && (onSelect as (val?: DateRange) => void)(selectedDays);
80
- };
71
+ const mode = rest.mode ?? ("single" as any);
81
72
 
82
- const overrideProps = {
83
- mode: rest.mode ?? ("single" as any),
84
- onSelect:
85
- rest?.mode === "single"
86
- ? handleSingleSelect
87
- : rest?.mode === "multiple"
88
- ? handleMultipleSelect
89
- : handleRangeSelect,
73
+ /**
74
+ * @param selected Date | Date[] | DateRange | undefined
75
+ */
76
+ const handleSelect = (selected) => {
77
+ setSelectedDates(selected);
78
+ onSelect?.(selected);
90
79
  };
91
80
 
92
81
  return (
@@ -96,11 +85,16 @@ export const DatePickerStandalone: DatePickerStandaloneType = forwardRef<
96
85
  >
97
86
  <DayPicker
98
87
  locale={getLocaleFromString(locale)}
99
- {...overrideProps}
88
+ mode={mode}
89
+ onSelect={handleSelect}
100
90
  selected={selected ?? selectedDates}
101
91
  components={{
102
92
  Caption: dropdownCaption ? DropdownCaption : Caption,
103
93
  Head: TableHead,
94
+ HeadRow,
95
+ WeekNumber,
96
+ Row,
97
+ Day: DayButton,
104
98
  }}
105
99
  className="navds-date"
106
100
  classNames={{ vhidden: "navds-sr-only" }}
@@ -119,9 +113,12 @@ export const DatePickerStandalone: DatePickerStandaloneType = forwardRef<
119
113
  weekend: "rdp-day__weekend",
120
114
  }}
121
115
  showWeekNumber={showWeekNumber}
116
+ onWeekNumberClick={
117
+ mode === "multiple" ? onWeekNumberClick : undefined
118
+ }
122
119
  fixedWeeks={fixedWeeks}
123
120
  showOutsideDays
124
- {...omit(rest, ["onSelect"])}
121
+ {...omit(rest, ["children", "id"])}
125
122
  />
126
123
  </div>
127
124
  );
@@ -2,8 +2,9 @@
2
2
  import { Meta, StoryObj } from "@storybook/react";
3
3
  import React, { useId, useState } from "react";
4
4
  import { useDatepicker, useRangeDatepicker } from "..";
5
- import { Button } from "../..";
5
+ import { Button, HGrid, VStack } from "../..";
6
6
  import DatePicker, { DatePickerProps } from "./DatePicker";
7
+ import isSameDay from "date-fns/isSameDay";
7
8
 
8
9
  const disabledDays = [
9
10
  new Date("Oct 10 2022"),
@@ -311,7 +312,7 @@ export const UseRangedDatepickerValidation = () => {
311
312
  );
312
313
  };
313
314
 
314
- export const defaultShownMonth = () => {
315
+ export const DefaultShownMonth = () => {
315
316
  const { datepickerProps, inputProps } = useDatepicker({
316
317
  fromDate: new Date("Aug 23 2019"),
317
318
  onDateChange: console.log,
@@ -367,3 +368,67 @@ export const Readonly = () => {
367
368
  </div>
368
369
  );
369
370
  };
371
+
372
+ export const StandaloneOptions = () => {
373
+ return (
374
+ <HGrid columns={{ xs: 1, md: 2 }} gap="8">
375
+ <DatePicker.Standalone today={new Date("Nov 23 2022")} />
376
+ <DatePicker.Standalone
377
+ dropdownCaption
378
+ fromDate={new Date("Aug 23 2019")}
379
+ toDate={new Date("Feb 23 2024")}
380
+ today={new Date("Nov 23 2022")}
381
+ />
382
+ <DatePicker.Standalone showWeekNumber today={new Date("Nov 23 2022")} />
383
+ <DatePicker.Standalone
384
+ showWeekNumber
385
+ mode="multiple"
386
+ onWeekNumberClick={console.log}
387
+ today={new Date("Nov 23 2022")}
388
+ disableWeekends
389
+ />
390
+ <DatePicker.Standalone
391
+ mode="range"
392
+ today={new Date("Nov 23 2022")}
393
+ disableWeekends
394
+ />
395
+ </HGrid>
396
+ );
397
+ };
398
+
399
+ export const WeekDayClick = () => {
400
+ const [days, setDays] = useState<Date[]>([]);
401
+
402
+ const handleWeekClick = (dates: Date[]) => {
403
+ const hasDayInWeek = !!days.find((x) => dates.find((y) => isSameDay(x, y)));
404
+
405
+ const cleanup = days.filter((y) => !dates.find((z) => isSameDay(y, z)));
406
+ if (hasDayInWeek) {
407
+ setDays(cleanup);
408
+ } else {
409
+ setDays([...dates, ...cleanup]);
410
+ }
411
+ };
412
+
413
+ return (
414
+ <VStack gap="8">
415
+ <DatePicker.Standalone
416
+ showWeekNumber
417
+ mode="multiple"
418
+ onWeekNumberClick={(_, dates) => handleWeekClick(dates)}
419
+ onSelect={(dates) => dates && setDays(dates)}
420
+ selected={days}
421
+ today={new Date("Nov 23 2022")}
422
+ />
423
+ <DatePicker.Standalone
424
+ showWeekNumber
425
+ mode="multiple"
426
+ onWeekNumberClick={(_, dates) => handleWeekClick(dates)}
427
+ onSelect={(dates) => dates && setDays(dates)}
428
+ selected={days}
429
+ today={new Date("Nov 23 2022")}
430
+ disableWeekends
431
+ />
432
+ </VStack>
433
+ );
434
+ };
@@ -1,5 +1,4 @@
1
- /* eslint-disable react/jsx-pascal-case */
2
- import { act, render } from "@testing-library/react";
1
+ import { act, render, screen } from "@testing-library/react";
3
2
  import userEvent from "@testing-library/user-event";
4
3
  import React from "react";
5
4
  import { DatePicker, useDatepicker } from "..";
@@ -18,11 +17,13 @@ const App = () => {
18
17
  };
19
18
 
20
19
  describe("Render datepicker", () => {
20
+ // eslint-disable-next-line jest/expect-expect
21
21
  it("Should not crash when e.target is window", async () => {
22
- const utils = render(<App />);
22
+ render(<App />);
23
23
 
24
+ // eslint-disable-next-line testing-library/no-unnecessary-act -- https://kentcdodds.com/blog/fix-the-not-wrapped-in-act-warning
24
25
  await act(async () => {
25
- await userEvent.click(utils.getByText("Velg dato"));
26
+ await userEvent.click(screen.getByText("Velg dato"));
26
27
  });
27
28
  });
28
29
  });
@@ -2,7 +2,11 @@ import { ArrowLeftIcon, ArrowRightIcon } from "@navikt/aksel-icons";
2
2
  import React from "react";
3
3
  import { CaptionProps, useDayPicker, useNavigation } from "react-day-picker";
4
4
  import { Button, Label } from "../../..";
5
+ import WeekRow from "./WeekRow";
5
6
 
7
+ /**
8
+ * https://github.com/gpbl/react-day-picker/tree/main/src/components/Caption
9
+ */
6
10
  export const DatePickerCaption = ({ displayMonth, id }: CaptionProps) => {
7
11
  const { goToMonth, nextMonth, previousMonth } = useNavigation();
8
12
  const {
@@ -15,30 +19,27 @@ export const DatePickerCaption = ({ displayMonth, id }: CaptionProps) => {
15
19
  const nextLabel = labelNext(nextMonth, { locale });
16
20
 
17
21
  return (
18
- <div className="navds-date__caption">
19
- <Label
20
- as="span"
21
- aria-live="polite"
22
- aria-atomic="true"
23
- id={id}
24
- className="navds-date__caption-label"
25
- >
26
- {formatCaption(displayMonth, { locale })}
27
- </Label>
28
-
29
- <div className="navds-date__caption__month-wrapper">
22
+ <>
23
+ <div className="navds-date__caption">
30
24
  <Button
31
- aria-label={previousLabel}
32
25
  variant="tertiary"
33
26
  disabled={!previousMonth}
34
27
  onClick={() => previousMonth && goToMonth(previousMonth)}
35
- icon={<ArrowLeftIcon title="velg forrige måned" />}
28
+ icon={<ArrowLeftIcon title={previousLabel} />}
36
29
  className="navds-date__caption-button"
37
30
  type="button"
38
31
  />
32
+ <Label
33
+ as="span"
34
+ aria-live="polite"
35
+ aria-atomic="true"
36
+ id={id}
37
+ className="navds-date__caption-label"
38
+ >
39
+ {formatCaption(displayMonth, { locale })}
40
+ </Label>
39
41
  <Button
40
- aria-label={nextLabel}
41
- icon={<ArrowRightIcon title="velg neste måned" />}
42
+ icon={<ArrowRightIcon title={nextLabel} />}
42
43
  onClick={() => nextMonth && goToMonth(nextMonth)}
43
44
  disabled={!nextMonth}
44
45
  variant="tertiary"
@@ -46,7 +47,8 @@ export const DatePickerCaption = ({ displayMonth, id }: CaptionProps) => {
46
47
  type="button"
47
48
  />
48
49
  </div>
49
- </div>
50
+ <WeekRow displayMonth={displayMonth} />
51
+ </>
50
52
  );
51
53
  };
52
54