@navikt/ds-react 7.12.2 → 7.14.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/cjs/date/Date.Dialog.d.ts +18 -0
  2. package/cjs/date/Date.Dialog.js +67 -0
  3. package/cjs/date/Date.Dialog.js.map +1 -0
  4. package/cjs/date/Date.Input.d.ts +50 -0
  5. package/cjs/date/Date.Input.js +96 -0
  6. package/cjs/date/Date.Input.js.map +1 -0
  7. package/cjs/date/Date.locale.d.ts +44 -0
  8. package/cjs/date/Date.locale.js +57 -0
  9. package/cjs/date/Date.locale.js.map +1 -0
  10. package/cjs/date/Date.typeutils.d.ts +14 -0
  11. package/cjs/date/Date.typeutils.js +15 -0
  12. package/cjs/date/Date.typeutils.js.map +1 -0
  13. package/cjs/date/date-utils/calendar-range.d.ts +11 -0
  14. package/cjs/date/date-utils/calendar-range.js +30 -0
  15. package/cjs/date/date-utils/calendar-range.js.map +1 -0
  16. package/cjs/date/date-utils/check-dates.d.ts +8 -0
  17. package/cjs/date/date-utils/check-dates.js +20 -0
  18. package/cjs/date/date-utils/check-dates.js.map +1 -0
  19. package/cjs/date/date-utils/clamp-dates.d.ts +19 -0
  20. package/cjs/date/date-utils/clamp-dates.js +41 -0
  21. package/cjs/date/date-utils/clamp-dates.js.map +1 -0
  22. package/cjs/date/date-utils/dates-disabled.d.ts +1 -0
  23. package/cjs/date/date-utils/dates-disabled.js +29 -0
  24. package/cjs/date/date-utils/dates-disabled.js.map +1 -0
  25. package/cjs/date/date-utils/dropdown-options.d.ts +13 -0
  26. package/cjs/date/date-utils/dropdown-options.js +45 -0
  27. package/cjs/date/date-utils/dropdown-options.js.map +1 -0
  28. package/cjs/date/date-utils/format-date.d.ts +2 -0
  29. package/cjs/date/date-utils/format-date.js +13 -0
  30. package/cjs/date/date-utils/format-date.js.map +1 -0
  31. package/cjs/date/date-utils/index.d.ts +8 -0
  32. package/cjs/date/date-utils/index.js +27 -0
  33. package/cjs/date/date-utils/index.js.map +1 -0
  34. package/cjs/date/date-utils/is-match.d.ts +3 -0
  35. package/cjs/date/date-utils/is-match.js +61 -0
  36. package/cjs/date/date-utils/is-match.js.map +1 -0
  37. package/cjs/date/date-utils/parse-date.d.ts +4 -0
  38. package/cjs/date/date-utils/parse-date.js +87 -0
  39. package/cjs/date/date-utils/parse-date.js.map +1 -0
  40. package/cjs/date/datepicker/DatePicker.d.ts +3 -3
  41. package/cjs/date/datepicker/DatePicker.js +47 -63
  42. package/cjs/date/datepicker/DatePicker.js.map +1 -1
  43. package/cjs/date/datepicker/DatePicker.types.d.ts +108 -0
  44. package/cjs/date/datepicker/DatePicker.types.js +3 -0
  45. package/cjs/date/datepicker/DatePicker.types.js.map +1 -0
  46. package/cjs/date/datepicker/hooks/useDatepicker.d.ts +90 -0
  47. package/cjs/date/datepicker/hooks/useDatepicker.js +164 -0
  48. package/cjs/date/datepicker/hooks/useDatepicker.js.map +1 -0
  49. package/cjs/date/datepicker/hooks/useRangeDatepicker.d.ts +76 -0
  50. package/cjs/date/datepicker/hooks/useRangeDatepicker.js +322 -0
  51. package/cjs/date/datepicker/hooks/useRangeDatepicker.js.map +1 -0
  52. package/cjs/date/datepicker/index.d.ts +4 -3
  53. package/cjs/date/datepicker/index.js +8 -7
  54. package/cjs/date/datepicker/index.js.map +1 -1
  55. package/cjs/date/datepicker/parts/DatePicker.DayButton.d.ts +9 -0
  56. package/cjs/date/datepicker/parts/DatePicker.DayButton.js +70 -0
  57. package/cjs/date/datepicker/parts/DatePicker.DayButton.js.map +1 -0
  58. package/cjs/date/datepicker/parts/DatePicker.Months.d.ts +11 -0
  59. package/cjs/date/datepicker/parts/DatePicker.Months.js +84 -0
  60. package/cjs/date/datepicker/parts/DatePicker.Months.js.map +1 -0
  61. package/cjs/date/datepicker/parts/DatePicker.RDP.d.ts +15 -0
  62. package/cjs/date/datepicker/parts/DatePicker.RDP.js +103 -0
  63. package/cjs/date/datepicker/parts/DatePicker.RDP.js.map +1 -0
  64. package/cjs/date/datepicker/parts/DatePicker.Standalone.d.ts +18 -0
  65. package/cjs/date/datepicker/parts/DatePicker.Standalone.js +60 -0
  66. package/cjs/date/datepicker/parts/DatePicker.Standalone.js.map +1 -0
  67. package/cjs/date/datepicker/parts/DatePicker.WeekNumber.d.ts +9 -0
  68. package/cjs/date/datepicker/parts/DatePicker.WeekNumber.js +64 -0
  69. package/cjs/date/datepicker/parts/DatePicker.WeekNumber.js.map +1 -0
  70. package/cjs/date/datepicker/parts/DatePicker.WeekRow.d.ts +8 -0
  71. package/cjs/date/datepicker/parts/DatePicker.WeekRow.js +28 -0
  72. package/cjs/date/datepicker/parts/DatePicker.WeekRow.js.map +1 -0
  73. package/cjs/date/monthpicker/MonthPicker.context.d.ts +21 -0
  74. package/cjs/date/monthpicker/MonthPicker.context.js +48 -0
  75. package/cjs/date/monthpicker/MonthPicker.context.js.map +1 -0
  76. package/cjs/date/monthpicker/MonthPicker.d.ts +3 -3
  77. package/cjs/date/monthpicker/MonthPicker.js +34 -43
  78. package/cjs/date/monthpicker/MonthPicker.js.map +1 -1
  79. package/cjs/date/monthpicker/MonthPicker.types.d.ts +86 -0
  80. package/cjs/date/monthpicker/MonthPicker.types.js +3 -0
  81. package/cjs/date/monthpicker/MonthPicker.types.js.map +1 -0
  82. package/cjs/date/monthpicker/MonthPicker.util.d.ts +2 -0
  83. package/cjs/date/monthpicker/MonthPicker.util.js +156 -0
  84. package/cjs/date/monthpicker/MonthPicker.util.js.map +1 -0
  85. package/cjs/date/monthpicker/hooks/useMonthPicker.d.ts +85 -0
  86. package/cjs/date/monthpicker/hooks/useMonthPicker.js +179 -0
  87. package/cjs/date/monthpicker/hooks/useMonthPicker.js.map +1 -0
  88. package/cjs/date/monthpicker/index.d.ts +4 -4
  89. package/cjs/date/monthpicker/index.js +6 -6
  90. package/cjs/date/monthpicker/index.js.map +1 -1
  91. package/cjs/date/monthpicker/parts/MonthPicker.Button.d.ts +11 -0
  92. package/cjs/date/monthpicker/parts/MonthPicker.Button.js +82 -0
  93. package/cjs/date/monthpicker/parts/MonthPicker.Button.js.map +1 -0
  94. package/cjs/date/monthpicker/parts/MonthPicker.Caption.d.ts +3 -0
  95. package/cjs/date/monthpicker/parts/MonthPicker.Caption.js +52 -0
  96. package/cjs/date/monthpicker/parts/MonthPicker.Caption.js.map +1 -0
  97. package/cjs/date/monthpicker/parts/MonthPicker.Standalone.d.ts +10 -0
  98. package/cjs/date/monthpicker/parts/MonthPicker.Standalone.js +51 -0
  99. package/cjs/date/monthpicker/parts/MonthPicker.Standalone.js.map +1 -0
  100. package/cjs/date/monthpicker/parts/MonthPicker.Table.d.ts +3 -0
  101. package/cjs/date/monthpicker/parts/MonthPicker.Table.js +79 -0
  102. package/cjs/date/monthpicker/parts/MonthPicker.Table.js.map +1 -0
  103. package/cjs/form/combobox/Combobox.d.ts +1 -1
  104. package/cjs/form/combobox/Input/InputController.d.ts +1 -1
  105. package/cjs/form/confirmation-panel/ConfirmationPanel.js +6 -1
  106. package/cjs/form/confirmation-panel/ConfirmationPanel.js.map +1 -1
  107. package/cjs/modal/Modal.js +2 -2
  108. package/cjs/modal/Modal.js.map +1 -1
  109. package/cjs/popover/Popover.js +3 -3
  110. package/cjs/popover/Popover.js.map +1 -1
  111. package/cjs/theme/Theme.d.ts +7 -1
  112. package/cjs/theme/Theme.js +24 -2
  113. package/cjs/theme/Theme.js.map +1 -1
  114. package/cjs/theme/index.d.ts +1 -1
  115. package/cjs/theme/index.js.map +1 -1
  116. package/cjs/tooltip/Tooltip.js +2 -5
  117. package/cjs/tooltip/Tooltip.js.map +1 -1
  118. package/esm/date/Date.Dialog.d.ts +18 -0
  119. package/esm/date/Date.Dialog.js +38 -0
  120. package/esm/date/Date.Dialog.js.map +1 -0
  121. package/esm/date/Date.Input.d.ts +50 -0
  122. package/esm/date/Date.Input.js +66 -0
  123. package/esm/date/Date.Input.js.map +1 -0
  124. package/esm/date/Date.locale.d.ts +44 -0
  125. package/esm/date/Date.locale.js +47 -0
  126. package/esm/date/Date.locale.js.map +1 -0
  127. package/esm/date/Date.typeutils.d.ts +14 -0
  128. package/esm/date/Date.typeutils.js +10 -0
  129. package/esm/date/Date.typeutils.js.map +1 -0
  130. package/esm/date/date-utils/calendar-range.d.ts +11 -0
  131. package/esm/date/date-utils/calendar-range.js +27 -0
  132. package/esm/date/date-utils/calendar-range.js.map +1 -0
  133. package/esm/date/date-utils/check-dates.d.ts +8 -0
  134. package/esm/date/date-utils/check-dates.js +14 -0
  135. package/esm/date/date-utils/check-dates.js.map +1 -0
  136. package/esm/date/date-utils/clamp-dates.d.ts +19 -0
  137. package/esm/date/date-utils/clamp-dates.js +37 -0
  138. package/esm/date/date-utils/clamp-dates.js.map +1 -0
  139. package/esm/date/date-utils/dates-disabled.d.ts +1 -0
  140. package/esm/date/date-utils/dates-disabled.js +25 -0
  141. package/esm/date/date-utils/dates-disabled.js.map +1 -0
  142. package/esm/date/date-utils/dropdown-options.d.ts +13 -0
  143. package/esm/date/date-utils/dropdown-options.js +41 -0
  144. package/esm/date/date-utils/dropdown-options.js.map +1 -0
  145. package/esm/date/date-utils/format-date.d.ts +2 -0
  146. package/esm/date/date-utils/format-date.js +9 -0
  147. package/esm/date/date-utils/format-date.js.map +1 -0
  148. package/esm/date/date-utils/index.d.ts +8 -0
  149. package/esm/date/date-utils/index.js +9 -0
  150. package/esm/date/date-utils/index.js.map +1 -0
  151. package/esm/date/date-utils/is-match.d.ts +3 -0
  152. package/esm/date/date-utils/is-match.js +57 -0
  153. package/esm/date/date-utils/is-match.js.map +1 -0
  154. package/esm/date/date-utils/parse-date.d.ts +4 -0
  155. package/esm/date/date-utils/parse-date.js +83 -0
  156. package/esm/date/date-utils/parse-date.js.map +1 -0
  157. package/esm/date/datepicker/DatePicker.d.ts +3 -3
  158. package/esm/date/datepicker/DatePicker.js +46 -62
  159. package/esm/date/datepicker/DatePicker.js.map +1 -1
  160. package/esm/date/datepicker/DatePicker.types.d.ts +108 -0
  161. package/esm/date/datepicker/DatePicker.types.js +2 -0
  162. package/esm/date/datepicker/DatePicker.types.js.map +1 -0
  163. package/esm/date/datepicker/hooks/useDatepicker.d.ts +90 -0
  164. package/esm/date/datepicker/hooks/useDatepicker.js +160 -0
  165. package/esm/date/datepicker/hooks/useDatepicker.js.map +1 -0
  166. package/esm/date/datepicker/hooks/useRangeDatepicker.d.ts +76 -0
  167. package/esm/date/datepicker/hooks/useRangeDatepicker.js +318 -0
  168. package/esm/date/datepicker/hooks/useRangeDatepicker.js.map +1 -0
  169. package/esm/date/datepicker/index.d.ts +4 -3
  170. package/esm/date/datepicker/index.js +4 -3
  171. package/esm/date/datepicker/index.js.map +1 -1
  172. package/esm/date/datepicker/parts/DatePicker.DayButton.d.ts +9 -0
  173. package/esm/date/datepicker/parts/DatePicker.DayButton.js +41 -0
  174. package/esm/date/datepicker/parts/DatePicker.DayButton.js.map +1 -0
  175. package/esm/date/datepicker/parts/DatePicker.Months.d.ts +11 -0
  176. package/esm/date/datepicker/parts/DatePicker.Months.js +58 -0
  177. package/esm/date/datepicker/parts/DatePicker.Months.js.map +1 -0
  178. package/esm/date/datepicker/parts/DatePicker.RDP.d.ts +15 -0
  179. package/esm/date/datepicker/parts/DatePicker.RDP.js +74 -0
  180. package/esm/date/datepicker/parts/DatePicker.RDP.js.map +1 -0
  181. package/esm/date/datepicker/parts/DatePicker.Standalone.d.ts +18 -0
  182. package/esm/date/datepicker/parts/DatePicker.Standalone.js +31 -0
  183. package/esm/date/datepicker/parts/DatePicker.Standalone.js.map +1 -0
  184. package/esm/date/datepicker/parts/DatePicker.WeekNumber.d.ts +9 -0
  185. package/esm/date/datepicker/parts/DatePicker.WeekNumber.js +35 -0
  186. package/esm/date/datepicker/parts/DatePicker.WeekNumber.js.map +1 -0
  187. package/esm/date/datepicker/parts/DatePicker.WeekRow.d.ts +8 -0
  188. package/esm/date/datepicker/parts/DatePicker.WeekRow.js +22 -0
  189. package/esm/date/datepicker/parts/DatePicker.WeekRow.js.map +1 -0
  190. package/esm/date/monthpicker/MonthPicker.context.d.ts +21 -0
  191. package/esm/date/monthpicker/MonthPicker.context.js +41 -0
  192. package/esm/date/monthpicker/MonthPicker.context.js.map +1 -0
  193. package/esm/date/monthpicker/MonthPicker.d.ts +3 -3
  194. package/esm/date/monthpicker/MonthPicker.js +31 -40
  195. package/esm/date/monthpicker/MonthPicker.js.map +1 -1
  196. package/esm/date/monthpicker/MonthPicker.types.d.ts +86 -0
  197. package/esm/date/monthpicker/MonthPicker.types.js +2 -0
  198. package/esm/date/monthpicker/MonthPicker.types.js.map +1 -0
  199. package/esm/date/monthpicker/MonthPicker.util.d.ts +2 -0
  200. package/esm/date/monthpicker/MonthPicker.util.js +152 -0
  201. package/esm/date/monthpicker/MonthPicker.util.js.map +1 -0
  202. package/esm/date/monthpicker/hooks/useMonthPicker.d.ts +85 -0
  203. package/esm/date/monthpicker/hooks/useMonthPicker.js +175 -0
  204. package/esm/date/monthpicker/hooks/useMonthPicker.js.map +1 -0
  205. package/esm/date/monthpicker/index.d.ts +4 -4
  206. package/esm/date/monthpicker/index.js +3 -3
  207. package/esm/date/monthpicker/index.js.map +1 -1
  208. package/esm/date/monthpicker/parts/MonthPicker.Button.d.ts +11 -0
  209. package/esm/date/monthpicker/parts/MonthPicker.Button.js +52 -0
  210. package/esm/date/monthpicker/parts/MonthPicker.Button.js.map +1 -0
  211. package/esm/date/monthpicker/parts/MonthPicker.Caption.d.ts +3 -0
  212. package/esm/date/monthpicker/parts/MonthPicker.Caption.js +46 -0
  213. package/esm/date/monthpicker/parts/MonthPicker.Caption.js.map +1 -0
  214. package/esm/date/monthpicker/parts/MonthPicker.Standalone.d.ts +10 -0
  215. package/esm/date/monthpicker/parts/MonthPicker.Standalone.js +22 -0
  216. package/esm/date/monthpicker/parts/MonthPicker.Standalone.js.map +1 -0
  217. package/esm/date/monthpicker/parts/MonthPicker.Table.d.ts +3 -0
  218. package/esm/date/monthpicker/parts/MonthPicker.Table.js +50 -0
  219. package/esm/date/monthpicker/parts/MonthPicker.Table.js.map +1 -0
  220. package/esm/form/combobox/Combobox.d.ts +1 -1
  221. package/esm/form/combobox/Input/InputController.d.ts +1 -1
  222. package/esm/form/confirmation-panel/ConfirmationPanel.js +6 -1
  223. package/esm/form/confirmation-panel/ConfirmationPanel.js.map +1 -1
  224. package/esm/modal/Modal.js +3 -3
  225. package/esm/modal/Modal.js.map +1 -1
  226. package/esm/popover/Popover.js +4 -4
  227. package/esm/popover/Popover.js.map +1 -1
  228. package/esm/theme/Theme.d.ts +7 -1
  229. package/esm/theme/Theme.js +22 -2
  230. package/esm/theme/Theme.js.map +1 -1
  231. package/esm/theme/index.d.ts +1 -1
  232. package/esm/theme/index.js.map +1 -1
  233. package/esm/tooltip/Tooltip.js +2 -5
  234. package/esm/tooltip/Tooltip.js.map +1 -1
  235. package/package.json +7 -8
  236. package/src/date/{parts/DateWrapper.tsx → Date.Dialog.tsx} +12 -9
  237. package/src/date/{parts/DateInput.tsx → Date.Input.tsx} +30 -5
  238. package/src/date/{utils/locale.ts → Date.locale.ts} +11 -2
  239. package/src/date/Date.typeutils.ts +32 -0
  240. package/src/date/date-utils/calendar-range.test.ts +54 -0
  241. package/src/date/date-utils/calendar-range.ts +46 -0
  242. package/src/date/date-utils/check-dates.test.ts +49 -0
  243. package/src/date/date-utils/check-dates.ts +28 -0
  244. package/src/date/date-utils/clamp-dates.test.ts +156 -0
  245. package/src/date/date-utils/clamp-dates.ts +63 -0
  246. package/src/date/{utils/__tests__ → date-utils}/dates-disabled.test.ts +1 -1
  247. package/src/date/{utils → date-utils}/dates-disabled.ts +1 -2
  248. package/src/date/date-utils/dropdown-options.test.ts +143 -0
  249. package/src/date/date-utils/dropdown-options.ts +79 -0
  250. package/src/date/{utils/__tests__ → date-utils}/format-dates.test.ts +2 -2
  251. package/src/date/date-utils/index.ts +16 -0
  252. package/src/date/{utils/__tests__ → date-utils}/is-match.test.ts +1 -1
  253. package/src/date/{utils → date-utils}/is-match.ts +2 -11
  254. package/src/date/{utils/__tests__ → date-utils}/parse-dates.test.ts +2 -1
  255. package/src/date/datepicker/DatePicker.tsx +67 -92
  256. package/src/date/datepicker/{types.ts → DatePicker.types.ts} +10 -4
  257. package/src/date/{hooks → datepicker/hooks}/useDatepicker.tsx +12 -13
  258. package/src/date/{hooks → datepicker/hooks}/useRangeDatepicker.test.tsx +1 -1
  259. package/src/date/{hooks → datepicker/hooks}/useRangeDatepicker.tsx +19 -19
  260. package/src/date/datepicker/index.ts +4 -5
  261. package/src/date/datepicker/parts/DatePicker.DayButton.tsx +56 -0
  262. package/src/date/datepicker/parts/DatePicker.Months.tsx +149 -0
  263. package/src/date/datepicker/parts/DatePicker.RDP.tsx +170 -0
  264. package/src/date/datepicker/parts/DatePicker.Standalone.tsx +93 -0
  265. package/src/date/datepicker/parts/DatePicker.WeekNumber.tsx +86 -0
  266. package/src/date/datepicker/parts/{WeekRow.tsx → DatePicker.WeekRow.tsx} +20 -21
  267. package/src/date/monthpicker/MonthPicker.context.tsx +103 -0
  268. package/src/date/monthpicker/MonthPicker.tsx +63 -68
  269. package/src/date/monthpicker/{types.ts → MonthPicker.types.ts} +1 -1
  270. package/src/date/{utils/navigation.ts → monthpicker/MonthPicker.util.ts} +2 -1
  271. package/src/date/{hooks → monthpicker/hooks}/useMonthPicker.tsx +14 -13
  272. package/src/date/monthpicker/index.ts +4 -4
  273. package/src/date/monthpicker/{MonthButton.tsx → parts/MonthPicker.Button.tsx} +21 -10
  274. package/src/date/monthpicker/{MonthCaption.tsx → parts/MonthPicker.Caption.tsx} +20 -21
  275. package/src/date/monthpicker/parts/MonthPicker.Standalone.tsx +86 -0
  276. package/src/date/monthpicker/{MonthSelector.tsx → parts/MonthPicker.Table.tsx} +7 -7
  277. package/src/form/confirmation-panel/ConfirmationPanel.tsx +7 -0
  278. package/src/modal/Modal.tsx +3 -3
  279. package/src/popover/Popover.tsx +4 -4
  280. package/src/react-css.d.ts +4 -0
  281. package/src/theme/RenameCSS.test.ts +80 -0
  282. package/src/theme/Theme.tsx +45 -8
  283. package/src/theme/index.ts +1 -1
  284. package/src/tooltip/Tooltip.tsx +2 -6
  285. package/src/date/context/index.ts +0 -9
  286. package/src/date/context/useDateInputContext.tsx +0 -34
  287. package/src/date/context/useDateTranslationContext.ts +0 -9
  288. package/src/date/context/useSharedMonthContext.tsx +0 -68
  289. package/src/date/datepicker/DatePickerStandalone.tsx +0 -136
  290. package/src/date/datepicker/datepicker.test.tsx +0 -28
  291. package/src/date/datepicker/parts/Caption.tsx +0 -54
  292. package/src/date/datepicker/parts/DayButton.tsx +0 -32
  293. package/src/date/datepicker/parts/DropdownCaption.tsx +0 -110
  294. package/src/date/datepicker/parts/HeadRow.tsx +0 -56
  295. package/src/date/datepicker/parts/Row.tsx +0 -48
  296. package/src/date/datepicker/parts/TableHead.tsx +0 -17
  297. package/src/date/datepicker/parts/WeekNumber.tsx +0 -75
  298. package/src/date/hooks/index.ts +0 -6
  299. package/src/date/monthpicker/MonthPickerStandalone.tsx +0 -102
  300. package/src/date/utils/__tests__/check-dates.test.ts +0 -22
  301. package/src/date/utils/__tests__/get-dates.test.ts +0 -121
  302. package/src/date/utils/__tests__/get-initial-year.test.ts +0 -83
  303. package/src/date/utils/__tests__/get-month-weeks.test.ts +0 -116
  304. package/src/date/utils/check-dates.ts +0 -13
  305. package/src/date/utils/get-dates.ts +0 -60
  306. package/src/date/utils/get-initial-year.ts +0 -25
  307. package/src/date/utils/get-month-weeks.ts +0 -93
  308. package/src/date/utils/index.ts +0 -18
  309. /package/src/date/{utils → date-utils}/format-date.ts +0 -0
  310. /package/src/date/{utils → date-utils}/parse-date.ts +0 -0
@@ -1,23 +1,23 @@
1
1
  import cl from "clsx";
2
- import { isWeekend } from "date-fns";
2
+ import { isSameDay } from "date-fns";
3
3
  import React, { forwardRef, useState } from "react";
4
- import { DateRange, DayPicker, isMatch } from "react-day-picker";
5
- import { omit } from "../../util";
6
- import { useId } from "../../util/hooks";
4
+ import { DateRange } from "react-day-picker";
5
+ import { useControllableState, useId } from "../../util/hooks";
7
6
  import { useMergeRefs } from "../../util/hooks/useMergeRefs";
8
- import { useDateLocale, useI18n } from "../../util/i18n/i18n.hooks";
9
- import { DateInputContext, DateTranslationContextProvider } from "../context";
10
- import { DatePickerInput } from "../parts/DateInput";
11
- import { DateWrapper } from "../parts/DateWrapper";
12
- import { getLocaleFromString, getTranslations } from "../utils";
13
- import DatePickerStandalone from "./DatePickerStandalone";
14
- import Caption from "./parts/Caption";
15
- import DropdownCaption from "./parts/DropdownCaption";
16
- import { HeadRow } from "./parts/HeadRow";
17
- import Row from "./parts/Row";
18
- import TableHead from "./parts/TableHead";
19
- import WeekNumber from "./parts/WeekNumber";
20
- import { ConditionalModeProps, DatePickerDefaultProps } from "./types";
7
+ import { useI18n } from "../../util/i18n/i18n.hooks";
8
+ import { DateDialog } from "../Date.Dialog";
9
+ import { DateInputContextProvider, DatePickerInput } from "../Date.Input";
10
+ import {
11
+ DateTranslationContextProvider,
12
+ getTranslations,
13
+ } from "../Date.locale";
14
+ import { isDateRange } from "../Date.typeutils";
15
+ import {
16
+ ConditionalModeProps,
17
+ DatePickerDefaultProps,
18
+ } from "./DatePicker.types";
19
+ import { ReactDayPicker } from "./parts/DatePicker.RDP";
20
+ import DatePickerStandalone from "./parts/DatePicker.Standalone";
21
21
 
22
22
  export type DatePickerProps = DatePickerDefaultProps & ConditionalModeProps;
23
23
 
@@ -69,20 +69,15 @@ export const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(
69
69
  children,
70
70
  locale,
71
71
  translations,
72
- dropdownCaption,
73
- disabled = [],
74
- disableWeekends = false,
75
- showWeekNumber = false,
76
72
  selected,
77
73
  id,
78
74
  defaultSelected,
79
- className,
80
75
  wrapperClassName,
81
76
  open: _open,
82
77
  onClose,
83
78
  onOpenToggle,
84
79
  strategy,
85
- onWeekNumberClick,
80
+ mode,
86
81
  ...rest
87
82
  },
88
83
  ref,
@@ -92,104 +87,84 @@ export const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(
92
87
  translations,
93
88
  getTranslations(locale),
94
89
  );
95
- const langProviderLocale = useDateLocale();
96
90
  const ariaId = useId(id);
97
- const [open, setOpen] = useState(_open ?? false);
91
+
92
+ const [open, setOpen] = useControllableState({
93
+ defaultValue: false,
94
+ value: _open,
95
+ });
98
96
 
99
97
  /* We use state here to insure that anchor is defined if open is true on initial render */
100
98
  const [wrapperRef, setWrapperRef] = useState<HTMLDivElement | null>(null);
101
99
  const mergedRef = useMergeRefs(setWrapperRef, ref);
102
100
 
103
- const [selectedDates, setSelectedDates] = React.useState<
101
+ const [value, setValue] = useControllableState<
104
102
  Date | Date[] | DateRange | undefined
105
- >(defaultSelected);
106
-
107
- const mode = rest.mode ?? ("single" as any);
103
+ >({
104
+ defaultValue: defaultSelected,
105
+ value: selected,
106
+ onChange: (newValue) => {
107
+ let closeDialog = false;
108
+ if (mode === "single" && newValue) {
109
+ closeDialog = true;
110
+ } else if (isDateRange(newValue) && newValue.from && newValue.to) {
111
+ closeDialog = true;
108
112
 
109
- /**
110
- * @param newSelected Date | Date[] | DateRange | undefined
111
- */
112
- const handleSelect = (newSelected) => {
113
- setSelectedDates(newSelected);
113
+ if (isSameDay(newValue.from, newValue.to)) {
114
+ closeDialog = false;
115
+ }
116
+ }
114
117
 
115
- if (rest.mode === "single") {
116
- newSelected && (onClose?.() ?? setOpen(false));
117
- } else if (rest.mode === "range") {
118
- newSelected?.from && newSelected?.to && (onClose?.() ?? setOpen(false));
119
- }
120
- rest?.onSelect?.(newSelected);
121
- };
118
+ if (closeDialog) {
119
+ onClose?.();
120
+ setOpen(false);
121
+ }
122
122
 
123
- const DatePickerComponent = (
124
- <DayPicker
125
- locale={locale ? getLocaleFromString(locale) : langProviderLocale}
126
- mode={mode}
127
- onSelect={handleSelect}
128
- selected={selected ?? selectedDates}
129
- components={{
130
- Caption: dropdownCaption ? DropdownCaption : Caption,
131
- Head: TableHead,
132
- HeadRow,
133
- WeekNumber,
134
- Row,
135
- }}
136
- className={cl("navds-date", className)}
137
- classNames={{
138
- vhidden: "navds-sr-only",
139
- }}
140
- disabled={(day) => {
141
- return (disableWeekends && isWeekend(day)) || isMatch(day, disabled);
142
- }}
143
- weekStartsOn={1}
144
- initialFocus={false}
145
- modifiers={{
146
- weekend: (day) => disableWeekends && isWeekend(day),
147
- }}
148
- modifiersClassNames={{
149
- weekend: "rdp-day__weekend",
150
- }}
151
- showWeekNumber={showWeekNumber}
152
- onWeekNumberClick={mode === "multiple" ? onWeekNumberClick : undefined}
153
- fixedWeeks
154
- showOutsideDays
155
- {...omit(rest, ["onSelect"])}
156
- />
157
- );
123
+ rest?.onSelect?.(newValue as any);
124
+ },
125
+ });
158
126
 
159
127
  return (
160
128
  <DateTranslationContextProvider translate={translate}>
161
- <DateInputContext.Provider
162
- value={{
163
- open: _open ?? open,
164
- onOpen: () => {
165
- setOpen((x) => !x);
166
- onOpenToggle?.();
167
- },
168
- ariaId,
169
- defined: true,
129
+ <DateInputContextProvider
130
+ open={open}
131
+ onOpen={() => {
132
+ setOpen((x) => !x);
133
+ onOpenToggle?.();
170
134
  }}
135
+ ariaId={ariaId}
136
+ defined={true}
171
137
  >
172
138
  <div
173
139
  ref={mergedRef}
174
140
  className={cl("navds-date__wrapper", wrapperClassName)}
175
141
  >
176
142
  {children}
177
- <DateWrapper
178
- open={_open ?? open}
143
+ <DateDialog
144
+ open={open}
179
145
  anchor={wrapperRef}
180
- onClose={() => onClose?.() ?? setOpen(false)}
146
+ onClose={() => {
147
+ onClose?.();
148
+ open && setOpen(false);
149
+ }}
181
150
  locale={locale}
182
151
  translate={translate}
183
- variant={mode}
152
+ variant={mode ?? "single"}
184
153
  popoverProps={{
185
154
  id: ariaId,
186
155
  strategy,
187
156
  }}
188
157
  >
189
- {DatePickerComponent}
190
- </DateWrapper>
158
+ <ReactDayPicker
159
+ {...rest}
160
+ locale={locale}
161
+ handleSelect={setValue}
162
+ selected={value as any}
163
+ mode={mode as any}
164
+ />
165
+ </DateDialog>
191
166
  </div>
192
- </DateInputContext.Provider>
167
+ </DateInputContextProvider>
193
168
  </DateTranslationContextProvider>
194
169
  );
195
170
  },
@@ -1,5 +1,6 @@
1
- import { DateRange, DayPickerBase, Matcher } from "react-day-picker";
1
+ import { CalendarWeek, Matcher, PropsBase } from "react-day-picker";
2
2
  import { ComponentTranslation } from "../../util/i18n/i18n.types";
3
+ import { DateRange } from "../Date.typeutils";
3
4
 
4
5
  export type SingleMode = {
5
6
  mode?: "single";
@@ -18,8 +19,10 @@ export type MultipleMode = {
18
19
  max?: number;
19
20
  /**
20
21
  * Allows selecting a week at a time. Only used with `mode` is set to "multiple".
22
+ * @param week Current week number
23
+ * @param days Dates in the week
21
24
  */
22
- onWeekNumberClick?: DayPickerBase["onWeekNumberClick"];
25
+ onWeekNumberClick?: (week: CalendarWeek["weekNumber"], days: Date[]) => void;
23
26
  };
24
27
 
25
28
  export type RangeMode = {
@@ -34,10 +37,13 @@ export type RangeMode = {
34
37
 
35
38
  export type ConditionalModeProps = SingleMode | MultipleMode | RangeMode;
36
39
 
37
- //github.com/gpbl/react-day-picker/blob/50b6dba/packages/react-day-picker/src/types/DayPickerBase.ts#L139
40
+ // https://daypicker.dev/api/interfaces/PropsBase
38
41
  export interface DatePickerDefaultProps
39
42
  extends Omit<React.HTMLAttributes<HTMLDivElement>, "onSelect">,
40
- Pick<DayPickerBase, "month" | "onMonthChange" | "today" | "onDayClick"> {
43
+ Pick<
44
+ PropsBase,
45
+ "month" | "onMonthChange" | "today" | "onDayClick" | "defaultMonth"
46
+ > {
41
47
  /**
42
48
  * Element datepicker anchors to. Use <DatePicker.Input /> for built-in toggle, or make your own with the open/onClose props
43
49
  */
@@ -1,15 +1,11 @@
1
1
  import { differenceInCalendarDays, isWeekend } from "date-fns";
2
2
  import React, { useCallback, useState } from "react";
3
- import { DayClickEventHandler, isMatch } from "react-day-picker";
4
- import { useDateLocale } from "../../util/i18n/i18n.hooks";
5
- import { DatePickerProps } from "../datepicker/DatePicker";
6
- import { DateInputProps } from "../parts/DateInput";
7
- import {
8
- formatDateForInput,
9
- getLocaleFromString,
10
- isValidDate,
11
- parseDate,
12
- } from "../utils";
3
+ import { DayEventHandler, dateMatchModifiers } from "react-day-picker";
4
+ import { useDateLocale } from "../../../util/i18n/i18n.hooks";
5
+ import { DateInputProps } from "../../Date.Input";
6
+ import { getLocaleFromString } from "../../Date.locale";
7
+ import { formatDateForInput, isValidDate, parseDate } from "../../date-utils";
8
+ import { DatePickerProps } from "../DatePicker";
13
9
 
14
10
  export interface UseDatepickerOptions
15
11
  extends Pick<
@@ -230,7 +226,10 @@ export const useDatepicker = (
230
226
  };
231
227
 
232
228
  /* Only allow de-selecting if not required */
233
- const handleDayClick: DayClickEventHandler = (day, { selected }) => {
229
+ const handleDayClick: DayEventHandler<React.MouseEvent> = (
230
+ day,
231
+ { selected },
232
+ ) => {
234
233
  if (selected && required) {
235
234
  return;
236
235
  }
@@ -274,13 +273,13 @@ export const useDatepicker = (
274
273
  if (
275
274
  !isValidDate(day) ||
276
275
  (disableWeekends && isWeekend(day)) ||
277
- (disabled && isMatch(day, disabled))
276
+ (disabled && dateMatchModifiers(day, disabled))
278
277
  ) {
279
278
  updateDate(undefined);
280
279
  updateValidation({
281
280
  isInvalid: !isValidDate(day),
282
281
  isWeekend: disableWeekends && isWeekend(day),
283
- isDisabled: disabled && isMatch(day, disabled),
282
+ isDisabled: disabled && dateMatchModifiers(day, disabled),
284
283
  isValidDate: false,
285
284
  isEmpty: !e.target.value,
286
285
  isBefore: isBefore ?? false,
@@ -2,7 +2,7 @@ import { render, screen } from "@testing-library/react";
2
2
  import userEvent from "@testing-library/user-event";
3
3
  import React from "react";
4
4
  import { describe, expect, test } from "vitest";
5
- import { DatePicker } from "../datepicker";
5
+ import { DatePicker } from "../DatePicker";
6
6
  import { useRangeDatepicker } from "./useRangeDatepicker";
7
7
 
8
8
  const RangeDemo = () => {
@@ -1,19 +1,17 @@
1
1
  import {
2
2
  isBefore as checkIsBefore,
3
3
  differenceInCalendarDays,
4
+ isSameDay,
4
5
  isWeekend,
5
6
  } from "date-fns";
6
7
  import React, { useState } from "react";
7
- import { DateRange, isMatch } from "react-day-picker";
8
- import { useDateLocale } from "../../util/i18n/i18n.hooks";
9
- import { DatePickerProps } from "../datepicker/DatePicker";
10
- import { DateInputProps } from "../parts/DateInput";
11
- import {
12
- formatDateForInput,
13
- getLocaleFromString,
14
- isValidDate,
15
- parseDate,
16
- } from "../utils";
8
+ import { dateMatchModifiers } from "react-day-picker";
9
+ import { useDateLocale } from "../../../util/i18n/i18n.hooks";
10
+ import { DateInputProps } from "../../Date.Input";
11
+ import { getLocaleFromString } from "../../Date.locale";
12
+ import { DateRange } from "../../Date.typeutils";
13
+ import { formatDateForInput, isValidDate, parseDate } from "../../date-utils";
14
+ import { DatePickerProps } from "../DatePicker";
17
15
  import { DateValidationT, UseDatepickerOptions } from "./useDatepicker";
18
16
 
19
17
  export type RangeValidationT = {
@@ -128,13 +126,13 @@ const fromValidation = (day: Date, opt?: UseRangeDatepickerOptions) => {
128
126
  if (
129
127
  isValidDate(day) &&
130
128
  !(opt?.disableWeekends && isWeekend(day)) &&
131
- !(opt?.disabled && isMatch(day, opt.disabled))
129
+ !(opt?.disabled && dateMatchModifiers(day, opt.disabled))
132
130
  ) {
133
131
  return {
134
132
  isValidDate: false,
135
133
  isInvalid: !isValidDate(day),
136
134
  isWeekend: opt?.disableWeekends && isWeekend(day),
137
- isDisabled: opt?.disabled && isMatch(day, opt.disabled),
135
+ isDisabled: opt?.disabled && dateMatchModifiers(day, opt.disabled),
138
136
  isBefore,
139
137
  isAfter,
140
138
  };
@@ -164,13 +162,13 @@ const toValidation = (
164
162
  if (
165
163
  isValidDate(day) &&
166
164
  !(opt?.disableWeekends && isWeekend(day)) &&
167
- !(opt?.disabled && isMatch(day, opt.disabled))
165
+ !(opt?.disabled && dateMatchModifiers(day, opt.disabled))
168
166
  ) {
169
167
  return {
170
168
  isValidDate: false,
171
169
  isInvalid: !isValidDate(day),
172
170
  isWeekend: opt?.disableWeekends && isWeekend(day),
173
- isDisabled: opt?.disabled && isMatch(day, opt.disabled),
171
+ isDisabled: opt?.disabled && dateMatchModifiers(day, opt.disabled),
174
172
  isBefore,
175
173
  isAfter,
176
174
  isBeforeFrom,
@@ -369,14 +367,16 @@ export const useRangeDatepicker = (
369
367
  return (
370
368
  isValidDate(day) &&
371
369
  !(disableWeekends && isWeekend(day)) &&
372
- !(disabled && isMatch(day, disabled))
370
+ !(disabled && dateMatchModifiers(day, disabled))
373
371
  );
374
372
  };
375
373
 
376
374
  const handleSelect = (range) => {
377
375
  if (range?.from && range?.to) {
378
- setOpen(false);
379
- anchorRef?.focus();
376
+ if (!isSameDay(range.from, range.to)) {
377
+ setOpen(false);
378
+ anchorRef?.focus();
379
+ }
380
380
  }
381
381
  const prevToRange =
382
382
  !selectedRange?.from && selectedRange?.to ? selectedRange?.to : range?.to;
@@ -415,7 +415,7 @@ export const useRangeDatepicker = (
415
415
  isValidDate: false,
416
416
  isInvalid: !isValidDate(day),
417
417
  isWeekend: disableWeekends && isWeekend(day),
418
- isDisabled: disabled && isMatch(day, disabled),
418
+ isDisabled: disabled && dateMatchModifiers(day, disabled),
419
419
  isBefore,
420
420
  isAfter,
421
421
  },
@@ -481,7 +481,7 @@ export const useRangeDatepicker = (
481
481
  isValidDate: false,
482
482
  isInvalid: !isValidDate(day),
483
483
  isWeekend: disableWeekends && isWeekend(day),
484
- isDisabled: disabled && isMatch(day, disabled),
484
+ isDisabled: disabled && dateMatchModifiers(day, disabled),
485
485
  isBefore,
486
486
  isAfter,
487
487
  });
@@ -1,13 +1,12 @@
1
1
  "use client";
2
2
  export { default as DatePicker, type DatePickerProps } from "./DatePicker";
3
+ export { useDatepicker, type DateValidationT } from "./hooks/useDatepicker";
3
4
  export {
4
- useDatepicker,
5
5
  useRangeDatepicker,
6
- type DateValidationT,
7
6
  type RangeValidationT,
8
- } from "../hooks";
7
+ } from "./hooks/useRangeDatepicker";
9
8
  export {
10
9
  DatePickerStandalone,
11
10
  type DatePickerStandaloneProps,
12
- } from "./DatePickerStandalone";
13
- export { DatePickerInput, type DateInputProps } from "../parts/DateInput";
11
+ } from "./parts/DatePicker.Standalone";
12
+ export { DatePickerInput, type DateInputProps } from "../Date.Input";
@@ -0,0 +1,56 @@
1
+ import cl from "clsx";
2
+ import { Locale, format } from "date-fns";
3
+ import React, { useEffect, useRef } from "react";
4
+ import { CalendarDay, Modifiers } from "react-day-picker";
5
+
6
+ const DatePickerDayButton = ({
7
+ day,
8
+ modifiers,
9
+ locale,
10
+ children,
11
+ ...rest
12
+ }: {
13
+ day: CalendarDay;
14
+ modifiers: Modifiers;
15
+ locale: Locale;
16
+ } & React.ButtonHTMLAttributes<HTMLButtonElement>) => {
17
+ const ref = useRef<HTMLButtonElement>(null);
18
+
19
+ useEffect(() => {
20
+ if (modifiers.focused) {
21
+ ref.current?.focus();
22
+ }
23
+ }, [modifiers.focused]);
24
+
25
+ if (modifiers.hidden) {
26
+ return <></>;
27
+ }
28
+
29
+ return (
30
+ <button
31
+ {...rest}
32
+ ref={ref}
33
+ aria-hidden={day.outside}
34
+ aria-pressed={!!modifiers.selected}
35
+ aria-label={format(day.date, "cccc d", {
36
+ locale,
37
+ })}
38
+ data-pressed={modifiers.selected}
39
+ data-today={modifiers.today || undefined}
40
+ className={cl(rest.className, {
41
+ "rdp-day_disabled": modifiers.disabled,
42
+ "rdp-day_selected": modifiers.selected,
43
+ "rdp-day_range_start": modifiers.range_start,
44
+ "rdp-day_range_middle": modifiers.range_middle,
45
+ "rdp-day_range_end": modifiers.range_end,
46
+ "rdp-day_today": modifiers.today,
47
+ "rdp-day_outside": modifiers.outside,
48
+ "rdp-day__weekend": modifiers.weekend,
49
+ })}
50
+ >
51
+ {children}
52
+ </button>
53
+ );
54
+ };
55
+
56
+ export { DatePickerDayButton };
@@ -0,0 +1,149 @@
1
+ import {
2
+ Locale,
3
+ format,
4
+ getMonth,
5
+ getYear,
6
+ setMonth,
7
+ setYear,
8
+ startOfMonth,
9
+ } from "date-fns";
10
+ import React, { ChangeEvent, useCallback } from "react";
11
+ import { CalendarMonth, useDayPicker } from "react-day-picker";
12
+ import { ArrowLeftIcon, ArrowRightIcon } from "@navikt/aksel-icons";
13
+ import { Button } from "../../../button";
14
+ import { Select } from "../../../form/select";
15
+ import { BodyShort } from "../../../typography";
16
+ import { omit } from "../../../util";
17
+ import { useDateTranslationContext } from "../../Date.locale";
18
+ import {
19
+ calendarRange,
20
+ getMonthOptions,
21
+ getYearOptions,
22
+ } from "../../date-utils";
23
+ import { MultipleMode } from "../DatePicker.types";
24
+ import { DatePickerWeekRow } from "./DatePicker.WeekRow";
25
+
26
+ const DatePickerMonths = ({
27
+ children,
28
+ calendarMonth,
29
+ locale,
30
+ onWeekNumberClick,
31
+ ...rest
32
+ }: {
33
+ calendarMonth: CalendarMonth;
34
+ displayIndex: number;
35
+ locale: Locale;
36
+ onWeekNumberClick: MultipleMode["onWeekNumberClick"];
37
+ } & React.HTMLAttributes<HTMLDivElement>) => {
38
+ const { dayPickerProps, goToMonth, previousMonth, nextMonth } =
39
+ useDayPicker();
40
+
41
+ const { captionLayout } = dayPickerProps;
42
+
43
+ const translate = useDateTranslationContext().translate;
44
+
45
+ const handleMonthChange = useCallback(
46
+ (date: Date, e: ChangeEvent<HTMLSelectElement>) => {
47
+ const selectedMonth = Number(e.target.value);
48
+ const newMonth = setMonth(startOfMonth(date), selectedMonth);
49
+ goToMonth(newMonth);
50
+ },
51
+ [goToMonth],
52
+ );
53
+
54
+ const handleYearChange = useCallback(
55
+ (date: Date, e: ChangeEvent<HTMLSelectElement>) => {
56
+ const selectedYear = Number(e.target.value);
57
+ const newMonth = setYear(startOfMonth(date), selectedYear);
58
+ goToMonth(newMonth);
59
+ },
60
+ [goToMonth],
61
+ );
62
+
63
+ const [navStart, navEnd] = calendarRange({
64
+ captionLayout: captionLayout === "dropdown" ? "dropdown" : "label",
65
+ startMonth: dayPickerProps.startMonth,
66
+ endMonth: dayPickerProps.endMonth,
67
+ today: dayPickerProps.today,
68
+ });
69
+
70
+ const months = getMonthOptions(calendarMonth.date, navStart, navEnd, locale);
71
+ const dropdownYears = getYearOptions(navStart, navEnd, locale);
72
+
73
+ return (
74
+ <div {...omit(rest, ["displayIndex"])}>
75
+ <div className="navds-date__caption">
76
+ {captionLayout?.startsWith("dropdown") && (
77
+ <span aria-live="polite" aria-atomic="true" className="navds-sr-only">
78
+ {format(calendarMonth.date, "LLLL y", { locale })}
79
+ </span>
80
+ )}
81
+ <Button
82
+ variant="tertiary-neutral"
83
+ disabled={!previousMonth}
84
+ onClick={() => previousMonth && goToMonth(previousMonth)}
85
+ icon={<ArrowLeftIcon title={translate("goToPreviousMonth")} />}
86
+ className="navds-date__caption-button"
87
+ type="button"
88
+ />
89
+ {captionLayout?.startsWith("dropdown") ? (
90
+ <div className="navds-date__caption">
91
+ <Select
92
+ label={translate("month")}
93
+ hideLabel
94
+ className="navds-date__caption__month"
95
+ onChange={(event) => handleMonthChange(calendarMonth.date, event)}
96
+ value={getMonth(calendarMonth.date)}
97
+ >
98
+ {months?.map(({ value, label, disabled }) => (
99
+ <option key={value} value={value} disabled={disabled}>
100
+ {label}
101
+ </option>
102
+ ))}
103
+ </Select>
104
+
105
+ <Select
106
+ label={translate("year")}
107
+ hideLabel
108
+ className="navds-date__caption__year"
109
+ onChange={(event) => handleYearChange(calendarMonth.date, event)}
110
+ value={getYear(calendarMonth.date)}
111
+ >
112
+ {dropdownYears?.map(({ value, label, disabled }) => (
113
+ <option key={value} value={value} disabled={disabled}>
114
+ {label}
115
+ </option>
116
+ ))}
117
+ </Select>
118
+ </div>
119
+ ) : (
120
+ <BodyShort
121
+ weight="semibold"
122
+ as="span"
123
+ aria-live="polite"
124
+ role="status"
125
+ className="navds-date__caption-label"
126
+ >
127
+ {format(calendarMonth.date, "LLLL y", { locale })}
128
+ </BodyShort>
129
+ )}
130
+
131
+ <Button
132
+ variant="tertiary-neutral"
133
+ icon={<ArrowRightIcon title={translate("goToNextMonth")} />}
134
+ onClick={() => nextMonth && goToMonth(nextMonth)}
135
+ disabled={!nextMonth}
136
+ className="navds-date__caption-button"
137
+ type="button"
138
+ />
139
+ </div>
140
+ <DatePickerWeekRow
141
+ weeks={calendarMonth.weeks}
142
+ onWeekNumberClick={onWeekNumberClick}
143
+ />
144
+ {children}
145
+ </div>
146
+ );
147
+ };
148
+
149
+ export { DatePickerMonths };