@navikt/ds-react 7.13.0 → 7.14.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 (434) hide show
  1. package/cjs/date/{parts/DateWrapper.d.ts → Date.Dialog.d.ts} +3 -3
  2. package/cjs/date/{parts/DateWrapper.js → Date.Dialog.js} +13 -13
  3. package/cjs/date/Date.Dialog.js.map +1 -0
  4. package/{esm/date/parts/DateInput.d.ts → cjs/date/Date.Input.d.ts} +23 -1
  5. package/cjs/date/{parts/DateInput.js → Date.Input.js} +14 -9
  6. package/cjs/date/Date.Input.js.map +1 -0
  7. package/cjs/date/{utils/locale.d.ts → Date.locale.d.ts} +8 -0
  8. package/cjs/date/{utils/locale.js → Date.locale.js} +7 -4
  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.js.map +1 -0
  17. package/cjs/date/date-utils/clamp-dates.d.ts +19 -0
  18. package/cjs/date/date-utils/clamp-dates.js +41 -0
  19. package/cjs/date/date-utils/clamp-dates.js.map +1 -0
  20. package/cjs/date/{utils → date-utils}/dates-disabled.js +2 -3
  21. package/cjs/date/date-utils/dates-disabled.js.map +1 -0
  22. package/cjs/date/date-utils/dropdown-options.d.ts +13 -0
  23. package/cjs/date/date-utils/dropdown-options.js +45 -0
  24. package/cjs/date/date-utils/dropdown-options.js.map +1 -0
  25. package/cjs/date/date-utils/format-date.js.map +1 -0
  26. package/cjs/date/date-utils/index.d.ts +8 -0
  27. package/cjs/date/date-utils/index.js +26 -0
  28. package/cjs/date/date-utils/index.js.map +1 -0
  29. package/cjs/date/date-utils/is-match.d.ts +3 -0
  30. package/cjs/date/{utils → date-utils}/is-match.js +4 -4
  31. package/cjs/date/date-utils/is-match.js.map +1 -0
  32. package/cjs/date/date-utils/parse-date.js.map +1 -0
  33. package/cjs/date/datepicker/DatePicker.d.ts +3 -3
  34. package/cjs/date/datepicker/DatePicker.js +47 -63
  35. package/cjs/date/datepicker/DatePicker.js.map +1 -1
  36. package/cjs/date/datepicker/{types.d.ts → DatePicker.types.d.ts} +6 -3
  37. package/cjs/date/datepicker/{types.js → DatePicker.types.js} +1 -1
  38. package/cjs/date/datepicker/DatePicker.types.js.map +1 -0
  39. package/cjs/date/{hooks → datepicker/hooks}/useDatepicker.d.ts +2 -2
  40. package/cjs/date/{hooks → datepicker/hooks}/useDatepicker.js +18 -17
  41. package/cjs/date/datepicker/hooks/useDatepicker.js.map +1 -0
  42. package/cjs/date/{hooks → datepicker/hooks}/useRangeDatepicker.d.ts +3 -3
  43. package/cjs/date/{hooks → datepicker/hooks}/useRangeDatepicker.js +41 -38
  44. package/cjs/date/datepicker/hooks/useRangeDatepicker.js.map +1 -0
  45. package/cjs/date/datepicker/index.d.ts +4 -3
  46. package/cjs/date/datepicker/index.js +8 -7
  47. package/cjs/date/datepicker/index.js.map +1 -1
  48. package/cjs/date/datepicker/parts/DatePicker.DayButton.d.ts +9 -0
  49. package/cjs/date/datepicker/parts/DatePicker.DayButton.js +70 -0
  50. package/cjs/date/datepicker/parts/DatePicker.DayButton.js.map +1 -0
  51. package/cjs/date/datepicker/parts/DatePicker.Months.d.ts +11 -0
  52. package/cjs/date/datepicker/parts/DatePicker.Months.js +84 -0
  53. package/cjs/date/datepicker/parts/DatePicker.Months.js.map +1 -0
  54. package/cjs/date/datepicker/parts/DatePicker.RDP.d.ts +15 -0
  55. package/cjs/date/datepicker/parts/DatePicker.RDP.js +106 -0
  56. package/cjs/date/datepicker/parts/DatePicker.RDP.js.map +1 -0
  57. package/cjs/date/datepicker/{DatePickerStandalone.d.ts → parts/DatePicker.Standalone.d.ts} +1 -1
  58. package/cjs/date/datepicker/parts/DatePicker.Standalone.js +60 -0
  59. package/cjs/date/datepicker/parts/DatePicker.Standalone.js.map +1 -0
  60. package/cjs/date/datepicker/parts/DatePicker.WeekNumber.d.ts +9 -0
  61. package/cjs/date/datepicker/parts/DatePicker.WeekNumber.js +64 -0
  62. package/cjs/date/datepicker/parts/DatePicker.WeekNumber.js.map +1 -0
  63. package/cjs/date/datepicker/parts/DatePicker.WeekRow.d.ts +8 -0
  64. package/cjs/date/datepicker/parts/{WeekRow.js → DatePicker.WeekRow.js} +9 -17
  65. package/cjs/date/datepicker/parts/DatePicker.WeekRow.js.map +1 -0
  66. package/cjs/date/monthpicker/MonthPicker.context.d.ts +21 -0
  67. package/cjs/date/monthpicker/MonthPicker.context.js +48 -0
  68. package/cjs/date/monthpicker/MonthPicker.context.js.map +1 -0
  69. package/cjs/date/monthpicker/MonthPicker.d.ts +3 -3
  70. package/cjs/date/monthpicker/MonthPicker.js +34 -43
  71. package/cjs/date/monthpicker/MonthPicker.js.map +1 -1
  72. package/cjs/date/monthpicker/{types.d.ts → MonthPicker.types.d.ts} +1 -1
  73. package/cjs/date/monthpicker/{types.js → MonthPicker.types.js} +1 -1
  74. package/cjs/date/monthpicker/MonthPicker.types.js.map +1 -0
  75. package/cjs/date/{utils/navigation.d.ts → monthpicker/MonthPicker.util.d.ts} +1 -1
  76. package/cjs/date/{utils/navigation.js → monthpicker/MonthPicker.util.js} +7 -7
  77. package/cjs/date/monthpicker/MonthPicker.util.js.map +1 -0
  78. package/cjs/date/{hooks → monthpicker/hooks}/useMonthPicker.d.ts +2 -2
  79. package/cjs/date/{hooks → monthpicker/hooks}/useMonthPicker.js +22 -17
  80. package/cjs/date/monthpicker/hooks/useMonthPicker.js.map +1 -0
  81. package/cjs/date/monthpicker/index.d.ts +4 -4
  82. package/cjs/date/monthpicker/index.js +6 -6
  83. package/cjs/date/monthpicker/index.js.map +1 -1
  84. package/cjs/date/monthpicker/{MonthButton.js → parts/MonthPicker.Button.js} +10 -10
  85. package/cjs/date/monthpicker/parts/MonthPicker.Button.js.map +1 -0
  86. package/cjs/date/monthpicker/parts/MonthPicker.Caption.d.ts +3 -0
  87. package/cjs/date/monthpicker/{MonthCaption.js → parts/MonthPicker.Caption.js} +18 -18
  88. package/cjs/date/monthpicker/parts/MonthPicker.Caption.js.map +1 -0
  89. package/cjs/date/monthpicker/{MonthPickerStandalone.d.ts → parts/MonthPicker.Standalone.d.ts} +1 -2
  90. package/cjs/date/monthpicker/{MonthPickerStandalone.js → parts/MonthPicker.Standalone.js} +11 -25
  91. package/cjs/date/monthpicker/parts/MonthPicker.Standalone.js.map +1 -0
  92. package/cjs/date/monthpicker/parts/MonthPicker.Table.d.ts +3 -0
  93. package/cjs/date/monthpicker/{MonthSelector.js → parts/MonthPicker.Table.js} +12 -13
  94. package/cjs/date/monthpicker/parts/MonthPicker.Table.js.map +1 -0
  95. package/cjs/modal/Modal.js +2 -2
  96. package/cjs/modal/Modal.js.map +1 -1
  97. package/cjs/popover/Popover.js +3 -3
  98. package/cjs/popover/Popover.js.map +1 -1
  99. package/cjs/tooltip/Tooltip.js +2 -5
  100. package/cjs/tooltip/Tooltip.js.map +1 -1
  101. package/esm/date/{parts/DateWrapper.d.ts → Date.Dialog.d.ts} +3 -3
  102. package/esm/date/{parts/DateWrapper.js → Date.Dialog.js} +11 -10
  103. package/esm/date/Date.Dialog.js.map +1 -0
  104. package/{cjs/date/parts/DateInput.d.ts → esm/date/Date.Input.d.ts} +23 -1
  105. package/esm/date/{parts/DateInput.js → Date.Input.js} +10 -6
  106. package/esm/date/{parts/DateInput.js.map → Date.Input.js.map} +1 -1
  107. package/esm/date/{utils/locale.d.ts → Date.locale.d.ts} +8 -0
  108. package/esm/date/{utils/locale.js → Date.locale.js} +5 -3
  109. package/esm/date/Date.locale.js.map +1 -0
  110. package/esm/date/Date.typeutils.d.ts +14 -0
  111. package/esm/date/Date.typeutils.js +10 -0
  112. package/esm/date/Date.typeutils.js.map +1 -0
  113. package/esm/date/date-utils/calendar-range.d.ts +11 -0
  114. package/esm/date/date-utils/calendar-range.js +27 -0
  115. package/esm/date/date-utils/calendar-range.js.map +1 -0
  116. package/esm/date/date-utils/check-dates.js.map +1 -0
  117. package/esm/date/date-utils/clamp-dates.d.ts +19 -0
  118. package/esm/date/date-utils/clamp-dates.js +37 -0
  119. package/esm/date/date-utils/clamp-dates.js.map +1 -0
  120. package/esm/date/{utils → date-utils}/dates-disabled.js +1 -2
  121. package/esm/date/date-utils/dates-disabled.js.map +1 -0
  122. package/esm/date/date-utils/dropdown-options.d.ts +13 -0
  123. package/esm/date/date-utils/dropdown-options.js +41 -0
  124. package/esm/date/date-utils/dropdown-options.js.map +1 -0
  125. package/esm/date/date-utils/format-date.js.map +1 -0
  126. package/esm/date/date-utils/index.d.ts +8 -0
  127. package/esm/date/{utils → date-utils}/index.js +3 -4
  128. package/esm/date/date-utils/index.js.map +1 -0
  129. package/esm/date/date-utils/is-match.d.ts +3 -0
  130. package/esm/date/{utils → date-utils}/is-match.js +1 -1
  131. package/esm/date/date-utils/is-match.js.map +1 -0
  132. package/esm/date/date-utils/parse-date.js.map +1 -0
  133. package/esm/date/datepicker/DatePicker.d.ts +3 -3
  134. package/esm/date/datepicker/DatePicker.js +46 -62
  135. package/esm/date/datepicker/DatePicker.js.map +1 -1
  136. package/esm/date/datepicker/{types.d.ts → DatePicker.types.d.ts} +6 -3
  137. package/esm/date/datepicker/DatePicker.types.js +2 -0
  138. package/esm/date/datepicker/DatePicker.types.js.map +1 -0
  139. package/esm/date/{hooks → datepicker/hooks}/useDatepicker.d.ts +2 -2
  140. package/esm/date/{hooks → datepicker/hooks}/useDatepicker.js +6 -5
  141. package/esm/date/datepicker/hooks/useDatepicker.js.map +1 -0
  142. package/esm/date/{hooks → datepicker/hooks}/useRangeDatepicker.d.ts +3 -3
  143. package/esm/date/{hooks → datepicker/hooks}/useRangeDatepicker.js +16 -13
  144. package/esm/date/datepicker/hooks/useRangeDatepicker.js.map +1 -0
  145. package/esm/date/datepicker/index.d.ts +4 -3
  146. package/esm/date/datepicker/index.js +4 -3
  147. package/esm/date/datepicker/index.js.map +1 -1
  148. package/esm/date/datepicker/parts/DatePicker.DayButton.d.ts +9 -0
  149. package/esm/date/datepicker/parts/DatePicker.DayButton.js +41 -0
  150. package/esm/date/datepicker/parts/DatePicker.DayButton.js.map +1 -0
  151. package/esm/date/datepicker/parts/DatePicker.Months.d.ts +11 -0
  152. package/esm/date/datepicker/parts/DatePicker.Months.js +58 -0
  153. package/esm/date/datepicker/parts/DatePicker.Months.js.map +1 -0
  154. package/esm/date/datepicker/parts/DatePicker.RDP.d.ts +15 -0
  155. package/esm/date/datepicker/parts/DatePicker.RDP.js +77 -0
  156. package/esm/date/datepicker/parts/DatePicker.RDP.js.map +1 -0
  157. package/esm/date/datepicker/{DatePickerStandalone.d.ts → parts/DatePicker.Standalone.d.ts} +1 -1
  158. package/esm/date/datepicker/parts/DatePicker.Standalone.js +31 -0
  159. package/esm/date/datepicker/parts/DatePicker.Standalone.js.map +1 -0
  160. package/esm/date/datepicker/parts/DatePicker.WeekNumber.d.ts +9 -0
  161. package/esm/date/datepicker/parts/DatePicker.WeekNumber.js +35 -0
  162. package/esm/date/datepicker/parts/DatePicker.WeekNumber.js.map +1 -0
  163. package/esm/date/datepicker/parts/DatePicker.WeekRow.d.ts +8 -0
  164. package/esm/date/datepicker/parts/DatePicker.WeekRow.js +22 -0
  165. package/esm/date/datepicker/parts/DatePicker.WeekRow.js.map +1 -0
  166. package/esm/date/monthpicker/MonthPicker.context.d.ts +21 -0
  167. package/esm/date/monthpicker/MonthPicker.context.js +41 -0
  168. package/esm/date/monthpicker/MonthPicker.context.js.map +1 -0
  169. package/esm/date/monthpicker/MonthPicker.d.ts +3 -3
  170. package/esm/date/monthpicker/MonthPicker.js +31 -40
  171. package/esm/date/monthpicker/MonthPicker.js.map +1 -1
  172. package/esm/date/monthpicker/{types.d.ts → MonthPicker.types.d.ts} +1 -1
  173. package/esm/date/monthpicker/MonthPicker.types.js +2 -0
  174. package/esm/date/monthpicker/MonthPicker.types.js.map +1 -0
  175. package/esm/date/{utils/navigation.d.ts → monthpicker/MonthPicker.util.d.ts} +1 -1
  176. package/esm/date/{utils/navigation.js → monthpicker/MonthPicker.util.js} +2 -2
  177. package/esm/date/monthpicker/MonthPicker.util.js.map +1 -0
  178. package/esm/date/{hooks → monthpicker/hooks}/useMonthPicker.d.ts +2 -2
  179. package/esm/date/{hooks → monthpicker/hooks}/useMonthPicker.js +10 -5
  180. package/esm/date/monthpicker/hooks/useMonthPicker.js.map +1 -0
  181. package/esm/date/monthpicker/index.d.ts +4 -4
  182. package/esm/date/monthpicker/index.js +3 -3
  183. package/esm/date/monthpicker/index.js.map +1 -1
  184. package/esm/date/monthpicker/{MonthButton.js → parts/MonthPicker.Button.js} +9 -9
  185. package/esm/date/monthpicker/parts/MonthPicker.Button.js.map +1 -0
  186. package/esm/date/monthpicker/parts/MonthPicker.Caption.d.ts +3 -0
  187. package/esm/date/monthpicker/{MonthCaption.js → parts/MonthPicker.Caption.js} +17 -16
  188. package/esm/date/monthpicker/parts/MonthPicker.Caption.js.map +1 -0
  189. package/esm/date/monthpicker/{MonthPickerStandalone.d.ts → parts/MonthPicker.Standalone.d.ts} +1 -2
  190. package/esm/date/monthpicker/parts/MonthPicker.Standalone.js +22 -0
  191. package/esm/date/monthpicker/parts/MonthPicker.Standalone.js.map +1 -0
  192. package/esm/date/monthpicker/parts/MonthPicker.Table.d.ts +3 -0
  193. package/esm/date/monthpicker/{MonthSelector.js → parts/MonthPicker.Table.js} +8 -8
  194. package/esm/date/monthpicker/parts/MonthPicker.Table.js.map +1 -0
  195. package/esm/modal/Modal.js +3 -3
  196. package/esm/modal/Modal.js.map +1 -1
  197. package/esm/popover/Popover.js +4 -4
  198. package/esm/popover/Popover.js.map +1 -1
  199. package/esm/tooltip/Tooltip.js +2 -5
  200. package/esm/tooltip/Tooltip.js.map +1 -1
  201. package/package.json +5 -5
  202. package/src/date/{parts/DateWrapper.tsx → Date.Dialog.tsx} +12 -9
  203. package/src/date/{parts/DateInput.tsx → Date.Input.tsx} +30 -5
  204. package/src/date/{utils/locale.ts → Date.locale.ts} +11 -2
  205. package/src/date/Date.typeutils.ts +32 -0
  206. package/src/date/date-utils/calendar-range.test.ts +54 -0
  207. package/src/date/date-utils/calendar-range.ts +46 -0
  208. package/src/date/date-utils/check-dates.test.ts +49 -0
  209. package/src/date/date-utils/clamp-dates.test.ts +73 -0
  210. package/src/date/date-utils/clamp-dates.ts +63 -0
  211. package/src/date/{utils/__tests__ → date-utils}/dates-disabled.test.ts +1 -1
  212. package/src/date/{utils → date-utils}/dates-disabled.ts +1 -2
  213. package/src/date/date-utils/dropdown-options.test.ts +143 -0
  214. package/src/date/date-utils/dropdown-options.ts +79 -0
  215. package/src/date/{utils/__tests__ → date-utils}/format-dates.test.ts +2 -2
  216. package/src/date/date-utils/index.ts +12 -0
  217. package/src/date/{utils/__tests__ → date-utils}/is-match.test.ts +1 -1
  218. package/src/date/{utils → date-utils}/is-match.ts +2 -11
  219. package/src/date/{utils/__tests__ → date-utils}/parse-dates.test.ts +2 -1
  220. package/src/date/datepicker/DatePicker.tsx +67 -92
  221. package/src/date/datepicker/{types.ts → DatePicker.types.ts} +10 -4
  222. package/src/date/{hooks → datepicker/hooks}/useDatepicker.tsx +12 -13
  223. package/src/date/{hooks → datepicker/hooks}/useRangeDatepicker.test.tsx +1 -1
  224. package/src/date/{hooks → datepicker/hooks}/useRangeDatepicker.tsx +19 -19
  225. package/src/date/datepicker/index.ts +4 -5
  226. package/src/date/datepicker/parts/DatePicker.DayButton.tsx +56 -0
  227. package/src/date/datepicker/parts/DatePicker.Months.tsx +149 -0
  228. package/src/date/datepicker/parts/DatePicker.RDP.tsx +175 -0
  229. package/src/date/datepicker/parts/DatePicker.Standalone.tsx +93 -0
  230. package/src/date/datepicker/parts/DatePicker.WeekNumber.tsx +86 -0
  231. package/src/date/datepicker/parts/{WeekRow.tsx → DatePicker.WeekRow.tsx} +20 -21
  232. package/src/date/monthpicker/MonthPicker.context.tsx +103 -0
  233. package/src/date/monthpicker/MonthPicker.tsx +63 -68
  234. package/src/date/monthpicker/{types.ts → MonthPicker.types.ts} +1 -1
  235. package/src/date/{utils/navigation.ts → monthpicker/MonthPicker.util.ts} +2 -1
  236. package/src/date/{hooks → monthpicker/hooks}/useMonthPicker.tsx +14 -13
  237. package/src/date/monthpicker/index.ts +4 -4
  238. package/src/date/monthpicker/{MonthButton.tsx → parts/MonthPicker.Button.tsx} +21 -10
  239. package/src/date/monthpicker/{MonthCaption.tsx → parts/MonthPicker.Caption.tsx} +20 -21
  240. package/src/date/monthpicker/parts/MonthPicker.Standalone.tsx +86 -0
  241. package/src/date/monthpicker/{MonthSelector.tsx → parts/MonthPicker.Table.tsx} +7 -7
  242. package/src/modal/Modal.tsx +3 -3
  243. package/src/popover/Popover.tsx +4 -4
  244. package/src/tooltip/Tooltip.tsx +2 -6
  245. package/cjs/date/context/index.d.ts +0 -3
  246. package/cjs/date/context/index.js +0 -13
  247. package/cjs/date/context/index.js.map +0 -1
  248. package/cjs/date/context/useDateInputContext.d.ts +0 -21
  249. package/cjs/date/context/useDateInputContext.js +0 -14
  250. package/cjs/date/context/useDateInputContext.js.map +0 -1
  251. package/cjs/date/context/useDateTranslationContext.d.ts +0 -8
  252. package/cjs/date/context/useDateTranslationContext.js +0 -7
  253. package/cjs/date/context/useDateTranslationContext.js.map +0 -1
  254. package/cjs/date/context/useSharedMonthContext.d.ts +0 -21
  255. package/cjs/date/context/useSharedMonthContext.js +0 -64
  256. package/cjs/date/context/useSharedMonthContext.js.map +0 -1
  257. package/cjs/date/datepicker/DatePickerStandalone.js +0 -86
  258. package/cjs/date/datepicker/DatePickerStandalone.js.map +0 -1
  259. package/cjs/date/datepicker/parts/Caption.d.ts +0 -7
  260. package/cjs/date/datepicker/parts/Caption.js +0 -30
  261. package/cjs/date/datepicker/parts/Caption.js.map +0 -1
  262. package/cjs/date/datepicker/parts/DayButton.d.ts +0 -4
  263. package/cjs/date/datepicker/parts/DayButton.js +0 -43
  264. package/cjs/date/datepicker/parts/DayButton.js.map +0 -1
  265. package/cjs/date/datepicker/parts/DropdownCaption.d.ts +0 -7
  266. package/cjs/date/datepicker/parts/DropdownCaption.js +0 -46
  267. package/cjs/date/datepicker/parts/DropdownCaption.js.map +0 -1
  268. package/cjs/date/datepicker/parts/HeadRow.d.ts +0 -10
  269. package/cjs/date/datepicker/parts/HeadRow.js +0 -36
  270. package/cjs/date/datepicker/parts/HeadRow.js.map +0 -1
  271. package/cjs/date/datepicker/parts/Row.d.ts +0 -16
  272. package/cjs/date/datepicker/parts/Row.js +0 -25
  273. package/cjs/date/datepicker/parts/Row.js.map +0 -1
  274. package/cjs/date/datepicker/parts/TableHead.d.ts +0 -5
  275. package/cjs/date/datepicker/parts/TableHead.js +0 -19
  276. package/cjs/date/datepicker/parts/TableHead.js.map +0 -1
  277. package/cjs/date/datepicker/parts/WeekNumber.d.ts +0 -11
  278. package/cjs/date/datepicker/parts/WeekNumber.js +0 -33
  279. package/cjs/date/datepicker/parts/WeekNumber.js.map +0 -1
  280. package/cjs/date/datepicker/parts/WeekRow.d.ts +0 -5
  281. package/cjs/date/datepicker/parts/WeekRow.js.map +0 -1
  282. package/cjs/date/datepicker/types.js.map +0 -1
  283. package/cjs/date/hooks/index.d.ts +0 -6
  284. package/cjs/date/hooks/index.js +0 -10
  285. package/cjs/date/hooks/index.js.map +0 -1
  286. package/cjs/date/hooks/useDatepicker.js.map +0 -1
  287. package/cjs/date/hooks/useMonthPicker.js.map +0 -1
  288. package/cjs/date/hooks/useRangeDatepicker.js.map +0 -1
  289. package/cjs/date/monthpicker/MonthButton.js.map +0 -1
  290. package/cjs/date/monthpicker/MonthCaption.d.ts +0 -3
  291. package/cjs/date/monthpicker/MonthCaption.js.map +0 -1
  292. package/cjs/date/monthpicker/MonthPickerStandalone.js.map +0 -1
  293. package/cjs/date/monthpicker/MonthSelector.d.ts +0 -3
  294. package/cjs/date/monthpicker/MonthSelector.js.map +0 -1
  295. package/cjs/date/monthpicker/types.js.map +0 -1
  296. package/cjs/date/parts/DateInput.js.map +0 -1
  297. package/cjs/date/parts/DateWrapper.js.map +0 -1
  298. package/cjs/date/utils/check-dates.js.map +0 -1
  299. package/cjs/date/utils/dates-disabled.js.map +0 -1
  300. package/cjs/date/utils/format-date.js.map +0 -1
  301. package/cjs/date/utils/get-dates.d.ts +0 -2
  302. package/cjs/date/utils/get-dates.js +0 -52
  303. package/cjs/date/utils/get-dates.js.map +0 -1
  304. package/cjs/date/utils/get-initial-year.d.ts +0 -5
  305. package/cjs/date/utils/get-initial-year.js +0 -21
  306. package/cjs/date/utils/get-initial-year.js.map +0 -1
  307. package/cjs/date/utils/get-month-weeks.d.ts +0 -16
  308. package/cjs/date/utils/get-month-weeks.js +0 -46
  309. package/cjs/date/utils/get-month-weeks.js.map +0 -1
  310. package/cjs/date/utils/index.d.ts +0 -9
  311. package/cjs/date/utils/index.js +0 -29
  312. package/cjs/date/utils/index.js.map +0 -1
  313. package/cjs/date/utils/is-match.d.ts +0 -4
  314. package/cjs/date/utils/is-match.js.map +0 -1
  315. package/cjs/date/utils/locale.js.map +0 -1
  316. package/cjs/date/utils/navigation.js.map +0 -1
  317. package/cjs/date/utils/parse-date.js.map +0 -1
  318. package/esm/date/context/index.d.ts +0 -3
  319. package/esm/date/context/index.js +0 -4
  320. package/esm/date/context/index.js.map +0 -1
  321. package/esm/date/context/useDateInputContext.d.ts +0 -21
  322. package/esm/date/context/useDateInputContext.js +0 -10
  323. package/esm/date/context/useDateInputContext.js.map +0 -1
  324. package/esm/date/context/useDateTranslationContext.d.ts +0 -8
  325. package/esm/date/context/useDateTranslationContext.js +0 -3
  326. package/esm/date/context/useDateTranslationContext.js.map +0 -1
  327. package/esm/date/context/useSharedMonthContext.d.ts +0 -21
  328. package/esm/date/context/useSharedMonthContext.js +0 -36
  329. package/esm/date/context/useSharedMonthContext.js.map +0 -1
  330. package/esm/date/datepicker/DatePickerStandalone.js +0 -57
  331. package/esm/date/datepicker/DatePickerStandalone.js.map +0 -1
  332. package/esm/date/datepicker/parts/Caption.d.ts +0 -7
  333. package/esm/date/datepicker/parts/Caption.js +0 -23
  334. package/esm/date/datepicker/parts/Caption.js.map +0 -1
  335. package/esm/date/datepicker/parts/DayButton.d.ts +0 -4
  336. package/esm/date/datepicker/parts/DayButton.js +0 -18
  337. package/esm/date/datepicker/parts/DayButton.js.map +0 -1
  338. package/esm/date/datepicker/parts/DropdownCaption.d.ts +0 -7
  339. package/esm/date/datepicker/parts/DropdownCaption.js +0 -39
  340. package/esm/date/datepicker/parts/DropdownCaption.js.map +0 -1
  341. package/esm/date/datepicker/parts/HeadRow.d.ts +0 -10
  342. package/esm/date/datepicker/parts/HeadRow.js +0 -29
  343. package/esm/date/datepicker/parts/HeadRow.js.map +0 -1
  344. package/esm/date/datepicker/parts/Row.d.ts +0 -16
  345. package/esm/date/datepicker/parts/Row.js +0 -20
  346. package/esm/date/datepicker/parts/Row.js.map +0 -1
  347. package/esm/date/datepicker/parts/TableHead.d.ts +0 -5
  348. package/esm/date/datepicker/parts/TableHead.js +0 -14
  349. package/esm/date/datepicker/parts/TableHead.js.map +0 -1
  350. package/esm/date/datepicker/parts/WeekNumber.d.ts +0 -11
  351. package/esm/date/datepicker/parts/WeekNumber.js +0 -28
  352. package/esm/date/datepicker/parts/WeekNumber.js.map +0 -1
  353. package/esm/date/datepicker/parts/WeekRow.d.ts +0 -5
  354. package/esm/date/datepicker/parts/WeekRow.js +0 -31
  355. package/esm/date/datepicker/parts/WeekRow.js.map +0 -1
  356. package/esm/date/datepicker/types.js +0 -2
  357. package/esm/date/datepicker/types.js.map +0 -1
  358. package/esm/date/hooks/index.d.ts +0 -6
  359. package/esm/date/hooks/index.js +0 -4
  360. package/esm/date/hooks/index.js.map +0 -1
  361. package/esm/date/hooks/useDatepicker.js.map +0 -1
  362. package/esm/date/hooks/useMonthPicker.js.map +0 -1
  363. package/esm/date/hooks/useRangeDatepicker.js.map +0 -1
  364. package/esm/date/monthpicker/MonthButton.js.map +0 -1
  365. package/esm/date/monthpicker/MonthCaption.d.ts +0 -3
  366. package/esm/date/monthpicker/MonthCaption.js.map +0 -1
  367. package/esm/date/monthpicker/MonthPickerStandalone.js +0 -36
  368. package/esm/date/monthpicker/MonthPickerStandalone.js.map +0 -1
  369. package/esm/date/monthpicker/MonthSelector.d.ts +0 -3
  370. package/esm/date/monthpicker/MonthSelector.js.map +0 -1
  371. package/esm/date/monthpicker/types.js +0 -2
  372. package/esm/date/monthpicker/types.js.map +0 -1
  373. package/esm/date/parts/DateWrapper.js.map +0 -1
  374. package/esm/date/utils/check-dates.js.map +0 -1
  375. package/esm/date/utils/dates-disabled.js.map +0 -1
  376. package/esm/date/utils/format-date.js.map +0 -1
  377. package/esm/date/utils/get-dates.d.ts +0 -2
  378. package/esm/date/utils/get-dates.js +0 -47
  379. package/esm/date/utils/get-dates.js.map +0 -1
  380. package/esm/date/utils/get-initial-year.d.ts +0 -5
  381. package/esm/date/utils/get-initial-year.js +0 -18
  382. package/esm/date/utils/get-initial-year.js.map +0 -1
  383. package/esm/date/utils/get-month-weeks.d.ts +0 -16
  384. package/esm/date/utils/get-month-weeks.js +0 -42
  385. package/esm/date/utils/get-month-weeks.js.map +0 -1
  386. package/esm/date/utils/index.d.ts +0 -9
  387. package/esm/date/utils/index.js.map +0 -1
  388. package/esm/date/utils/is-match.d.ts +0 -4
  389. package/esm/date/utils/is-match.js.map +0 -1
  390. package/esm/date/utils/locale.js.map +0 -1
  391. package/esm/date/utils/navigation.js.map +0 -1
  392. package/esm/date/utils/parse-date.js.map +0 -1
  393. package/src/date/context/index.ts +0 -9
  394. package/src/date/context/useDateInputContext.tsx +0 -34
  395. package/src/date/context/useDateTranslationContext.ts +0 -9
  396. package/src/date/context/useSharedMonthContext.tsx +0 -68
  397. package/src/date/datepicker/DatePickerStandalone.tsx +0 -136
  398. package/src/date/datepicker/datepicker.test.tsx +0 -28
  399. package/src/date/datepicker/parts/Caption.tsx +0 -54
  400. package/src/date/datepicker/parts/DayButton.tsx +0 -32
  401. package/src/date/datepicker/parts/DropdownCaption.tsx +0 -110
  402. package/src/date/datepicker/parts/HeadRow.tsx +0 -56
  403. package/src/date/datepicker/parts/Row.tsx +0 -48
  404. package/src/date/datepicker/parts/TableHead.tsx +0 -17
  405. package/src/date/datepicker/parts/WeekNumber.tsx +0 -75
  406. package/src/date/hooks/index.ts +0 -6
  407. package/src/date/monthpicker/MonthPickerStandalone.tsx +0 -102
  408. package/src/date/utils/__tests__/check-dates.test.ts +0 -22
  409. package/src/date/utils/__tests__/get-dates.test.ts +0 -121
  410. package/src/date/utils/__tests__/get-initial-year.test.ts +0 -83
  411. package/src/date/utils/__tests__/get-month-weeks.test.ts +0 -116
  412. package/src/date/utils/get-dates.ts +0 -60
  413. package/src/date/utils/get-initial-year.ts +0 -25
  414. package/src/date/utils/get-month-weeks.ts +0 -93
  415. package/src/date/utils/index.ts +0 -18
  416. /package/cjs/date/{utils → date-utils}/check-dates.d.ts +0 -0
  417. /package/cjs/date/{utils → date-utils}/check-dates.js +0 -0
  418. /package/cjs/date/{utils → date-utils}/dates-disabled.d.ts +0 -0
  419. /package/cjs/date/{utils → date-utils}/format-date.d.ts +0 -0
  420. /package/cjs/date/{utils → date-utils}/format-date.js +0 -0
  421. /package/cjs/date/{utils → date-utils}/parse-date.d.ts +0 -0
  422. /package/cjs/date/{utils → date-utils}/parse-date.js +0 -0
  423. /package/cjs/date/monthpicker/{MonthButton.d.ts → parts/MonthPicker.Button.d.ts} +0 -0
  424. /package/esm/date/{utils → date-utils}/check-dates.d.ts +0 -0
  425. /package/esm/date/{utils → date-utils}/check-dates.js +0 -0
  426. /package/esm/date/{utils → date-utils}/dates-disabled.d.ts +0 -0
  427. /package/esm/date/{utils → date-utils}/format-date.d.ts +0 -0
  428. /package/esm/date/{utils → date-utils}/format-date.js +0 -0
  429. /package/esm/date/{utils → date-utils}/parse-date.d.ts +0 -0
  430. /package/esm/date/{utils → date-utils}/parse-date.js +0 -0
  431. /package/esm/date/monthpicker/{MonthButton.d.ts → parts/MonthPicker.Button.d.ts} +0 -0
  432. /package/src/date/{utils → date-utils}/check-dates.ts +0 -0
  433. /package/src/date/{utils → date-utils}/format-date.ts +0 -0
  434. /package/src/date/{utils → date-utils}/parse-date.ts +0 -0
@@ -1,7 +1,8 @@
1
1
  import { getMonth } from "date-fns";
2
2
  import { nb } from "date-fns/locale";
3
3
  import { describe, expect, test } from "vitest";
4
- import { isValidDate, parseDate } from "..";
4
+ import { isValidDate } from "./check-dates";
5
+ import { parseDate } from "./parse-date";
5
6
 
6
7
  const check = (inp: string) =>
7
8
  // eslint-disable-next-line @vitest/valid-expect
@@ -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 };