@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,11 +1,36 @@
1
1
  import cl from "clsx";
2
2
  import React, { InputHTMLAttributes, forwardRef, useRef } from "react";
3
3
  import { CalendarIcon } from "@navikt/aksel-icons";
4
- import { ReadOnlyIcon } from "../../form/ReadOnlyIcon";
5
- import { FormFieldProps, useFormField } from "../../form/useFormField";
6
- import { BodyShort, ErrorMessage, Label } from "../../typography";
7
- import { omit } from "../../util";
8
- import { useDateInputContext, useDateTranslationContext } from "../context";
4
+ import { ReadOnlyIcon } from "../form/ReadOnlyIcon";
5
+ import { FormFieldProps, useFormField } from "../form/useFormField";
6
+ import { BodyShort, ErrorMessage, Label } from "../typography";
7
+ import { omit } from "../util";
8
+ import { createContext } from "../util/create-context";
9
+ import { useDateTranslationContext } from "./Date.locale";
10
+
11
+ interface DateInputContextProps {
12
+ /**
13
+ * Open state for popover
14
+ */
15
+ open: boolean;
16
+ /**
17
+ * Callback for onOpen toggle
18
+ */
19
+ onOpen: () => void;
20
+ /**
21
+ * Aria-connected ID
22
+ */
23
+ ariaId?: string;
24
+ /**
25
+ * Flag for enabled-check
26
+ */
27
+ defined: boolean;
28
+ }
29
+
30
+ export const [DateInputContextProvider, useDateInputContext] =
31
+ createContext<DateInputContextProps>({
32
+ errorMessage: "useDateInputContext must be used with DateInputContext",
33
+ });
9
34
 
10
35
  export interface DateInputProps
11
36
  extends FormFieldProps,
@@ -1,6 +1,8 @@
1
1
  import { enGB, nb, nn } from "date-fns/locale";
2
- import en_translations from "../../util/i18n/locales/en";
3
- import nn_translations from "../../util/i18n/locales/nn";
2
+ import { createContext } from "../util/create-context";
3
+ import { TFunction } from "../util/i18n/i18n.types";
4
+ import en_translations from "../util/i18n/locales/en";
5
+ import nn_translations from "../util/i18n/locales/nn";
4
6
 
5
7
  /** @private */
6
8
  export const getLocaleFromString = (locale: "nb" | "nn" | "en" = "nb") => {
@@ -45,3 +47,10 @@ export const getGlobalTranslations = (locale: string | undefined) => {
45
47
  return undefined;
46
48
  }
47
49
  };
50
+
51
+ interface DateTranslationContextProps {
52
+ translate: TFunction<"DatePicker">;
53
+ }
54
+
55
+ export const [DateTranslationContextProvider, useDateTranslationContext] =
56
+ createContext<DateTranslationContextProps>();
@@ -0,0 +1,32 @@
1
+ export type DateRange = {
2
+ from: Date | undefined;
3
+ to?: Date | undefined;
4
+ };
5
+
6
+ export type DateBefore = {
7
+ before: Date;
8
+ };
9
+
10
+ export type DateAfter = {
11
+ after: Date;
12
+ };
13
+
14
+ export function isDateAfterType(value: unknown): value is DateAfter {
15
+ return Boolean(value && typeof value === "object" && "after" in value);
16
+ }
17
+
18
+ export function isDateBeforeType(value: unknown): value is DateBefore {
19
+ return Boolean(value && typeof value === "object" && "before" in value);
20
+ }
21
+
22
+ export function isDateRange(value: unknown): value is DateRange {
23
+ return Boolean(value && typeof value === "object" && "from" in value);
24
+ }
25
+
26
+ export type Matcher =
27
+ | ((date: Date) => boolean)
28
+ | Date
29
+ | Date[]
30
+ | DateRange
31
+ | DateBefore
32
+ | DateAfter;
@@ -0,0 +1,54 @@
1
+ import {
2
+ addYears,
3
+ endOfMonth,
4
+ endOfYear,
5
+ startOfDay,
6
+ startOfMonth,
7
+ startOfYear,
8
+ } from "date-fns";
9
+ import { describe, expect, test } from "vitest";
10
+ import { calendarRange } from "./calendar-range";
11
+
12
+ describe("calendarRange", () => {
13
+ test("should return start and end of the given months", () => {
14
+ const startMonth = new Date(2023, 0, 15);
15
+ const endMonth = new Date(2023, 11, 15);
16
+ const result = calendarRange({ startMonth, endMonth });
17
+
18
+ expect(result[0]).toEqual(startOfDay(startOfMonth(startMonth)));
19
+ expect(result[1]).toEqual(startOfDay(endOfMonth(endMonth)));
20
+ });
21
+
22
+ test("should return start of the year 100 years ago and end of the current year if captionLayout is dropdown", () => {
23
+ const today = new Date(2023, 6, 15);
24
+ const result = calendarRange({ captionLayout: "dropdown", today });
25
+
26
+ expect(result[0]).toEqual(startOfDay(startOfYear(addYears(today, -100))));
27
+ expect(result[1]).toEqual(startOfDay(endOfYear(today)));
28
+ });
29
+
30
+ test("should return undefined if no startMonth and endMonth are provided", () => {
31
+ const today = new Date(2023, 6, 15);
32
+ const result = calendarRange({ today });
33
+
34
+ expect(result[0]).toBeUndefined();
35
+ expect(result[1]).toBeUndefined();
36
+ });
37
+
38
+ test("should handle undefined today date", () => {
39
+ const result = calendarRange({ captionLayout: "dropdown" });
40
+
41
+ const today = new Date();
42
+ expect(result[0]).toEqual(startOfDay(startOfYear(addYears(today, -100))));
43
+ expect(result[1]).toEqual(startOfDay(endOfYear(today)));
44
+ });
45
+
46
+ test("should handle undefined captionLayout", () => {
47
+ const startMonth = new Date(2023, 0, 15);
48
+ const endMonth = new Date(2023, 11, 15);
49
+ const result = calendarRange({ startMonth, endMonth });
50
+
51
+ expect(result[0]).toEqual(startOfDay(startOfMonth(startMonth)));
52
+ expect(result[1]).toEqual(startOfDay(endOfMonth(endMonth)));
53
+ });
54
+ });
@@ -0,0 +1,46 @@
1
+ import {
2
+ addYears,
3
+ endOfMonth,
4
+ endOfYear,
5
+ startOfDay,
6
+ startOfMonth,
7
+ startOfYear,
8
+ } from "date-fns";
9
+
10
+ /**
11
+ * Generates the min and max-dates possible to show and navigate to in the calendar.
12
+ * In the cases there is not a startMonth or endMonth, and layout is "label" no min or max dates are set.
13
+ * @returns Return the start and end months for the calendar navigation.
14
+ */
15
+ export function calendarRange({
16
+ captionLayout,
17
+ startMonth,
18
+ endMonth,
19
+ today,
20
+ }: {
21
+ captionLayout?: "label" | "dropdown";
22
+ startMonth?: Date;
23
+ endMonth?: Date;
24
+ today?: Date;
25
+ }) {
26
+ const hasYearDropdown = captionLayout === "dropdown";
27
+
28
+ const todayDate = today ?? new Date();
29
+
30
+ if (startMonth) {
31
+ startMonth = startOfMonth(startMonth);
32
+ } else if (!startMonth && hasYearDropdown) {
33
+ startMonth = startOfYear(addYears(todayDate, -100));
34
+ }
35
+
36
+ if (endMonth) {
37
+ endMonth = endOfMonth(endMonth);
38
+ } else if (!endMonth && hasYearDropdown) {
39
+ endMonth = endOfYear(todayDate);
40
+ }
41
+
42
+ return [
43
+ startMonth ? startOfDay(startMonth) : startMonth,
44
+ endMonth ? startOfDay(endMonth) : endMonth,
45
+ ];
46
+ }
@@ -0,0 +1,49 @@
1
+ import { setYear } from "date-fns";
2
+ import { describe, expect, test } from "vitest";
3
+ import { dateIsInCurrentMonth, isValidDate } from "./check-dates";
4
+
5
+ describe("dateIsInCurrentMonth", () => {
6
+ test("should return true if the date is in the same month and year as the date to compare", () => {
7
+ const date = new Date();
8
+ const dateToCompare = new Date();
9
+ expect(dateIsInCurrentMonth(date, dateToCompare)).toBe(true);
10
+ });
11
+
12
+ test("should return false if the date is not in the same month as the date to compare", () => {
13
+ const date = new Date();
14
+ const dateToCompare = new Date(2023, 9, 1); // October 1, 2023
15
+ expect(dateIsInCurrentMonth(date, dateToCompare)).toBe(false);
16
+ });
17
+
18
+ test("should return false if the date is in the same month but different year as the date to compare", () => {
19
+ const date = new Date();
20
+ const dateToCompare = new Date();
21
+ expect(
22
+ dateIsInCurrentMonth(
23
+ date,
24
+ setYear(dateToCompare, dateToCompare.getFullYear() + 1),
25
+ ),
26
+ ).toBe(false);
27
+ });
28
+ });
29
+
30
+ describe("isValidDate", () => {
31
+ test("should return true for a valid date", () => {
32
+ const date = new Date(2023, 9, 15); // October 15, 2023
33
+ expect(isValidDate(date)).toBe(true);
34
+ });
35
+
36
+ test("should return false for an invalid date", () => {
37
+ const date = new Date("invalid date");
38
+ expect(isValidDate(date)).toBe(false);
39
+ });
40
+
41
+ test("should return false for a date with year less than 1000", () => {
42
+ const date = new Date(999, 9, 15); // October 15, 999
43
+ expect(isValidDate(date)).toBe(false);
44
+ });
45
+
46
+ test("should return false for undefined", () => {
47
+ expect(isValidDate(undefined)).toBe(false);
48
+ });
49
+ });
@@ -0,0 +1,73 @@
1
+ import { startOfMonth, startOfYear } from "date-fns";
2
+ import { describe, expect, test } from "vitest";
3
+ import { clampDisplayMonth, clampDisplayYear } from "./clamp-dates";
4
+
5
+ describe("clampDisplayMonth", () => {
6
+ test("should return undefined if month is not provided", () => {
7
+ expect(
8
+ clampDisplayMonth({ start: new Date(), end: new Date() }),
9
+ ).toBeUndefined();
10
+ });
11
+
12
+ test("should return the start of the month if month is before start", () => {
13
+ const start = new Date(2023, 5, 1);
14
+ const month = new Date(2023, 4, 1);
15
+ expect(clampDisplayMonth({ month, start, end: new Date() })).toEqual(
16
+ startOfMonth(start),
17
+ );
18
+ });
19
+
20
+ test("should return the start of end month if month is after end", () => {
21
+ const end = new Date(2023, 5, 1);
22
+ const month = new Date(2023, 6, 1);
23
+ expect(clampDisplayMonth({ month, start: new Date(), end })).toEqual(
24
+ startOfMonth(end),
25
+ );
26
+ });
27
+
28
+ test("should return the start of the month if month is within range", () => {
29
+ const month = new Date(2023, 5, 1);
30
+ expect(
31
+ clampDisplayMonth({
32
+ month,
33
+ start: new Date(2023, 4, 1),
34
+ end: new Date(2023, 6, 1),
35
+ }),
36
+ ).toEqual(startOfMonth(month));
37
+ });
38
+ });
39
+
40
+ describe("clampDisplayYear", () => {
41
+ test("should return undefined if month is not provided", () => {
42
+ expect(
43
+ clampDisplayYear({ start: new Date(), end: new Date() }),
44
+ ).toBeUndefined();
45
+ });
46
+
47
+ test("should return the start of the year if month is before start year", () => {
48
+ const start = new Date(2023, 0, 1);
49
+ const month = new Date(2022, 11, 1);
50
+ expect(clampDisplayYear({ month, start, end: new Date() })).toEqual(
51
+ startOfYear(start),
52
+ );
53
+ });
54
+
55
+ test("should return the start of the year if month is after end year", () => {
56
+ const end = new Date(2023, 0, 1);
57
+ const month = new Date(2024, 0, 1);
58
+ expect(clampDisplayYear({ month, start: new Date(), end })).toEqual(
59
+ startOfYear(end),
60
+ );
61
+ });
62
+
63
+ test("should return the start of the year if month is within range", () => {
64
+ const month = new Date(2023, 5, 1);
65
+ expect(
66
+ clampDisplayYear({
67
+ month,
68
+ start: new Date(2022, 0, 1),
69
+ end: new Date(2024, 0, 1),
70
+ }),
71
+ ).toEqual(startOfYear(month));
72
+ });
73
+ });
@@ -0,0 +1,63 @@
1
+ import { isAfter, isBefore, startOfMonth, startOfYear } from "date-fns";
2
+
3
+ /**
4
+ * Makes sure the month is within the min and max daterange to avoid showing disabled months
5
+ * @note We do not warn the user if start > end now
6
+ */
7
+ const clampDisplayMonth = ({
8
+ month,
9
+ start,
10
+ end,
11
+ }: {
12
+ month?: Date;
13
+ start?: Date;
14
+ end?: Date;
15
+ }): Date | undefined => {
16
+ if (!month) {
17
+ return undefined;
18
+ }
19
+
20
+ let monthToShow = month;
21
+
22
+ if (start && isBefore(monthToShow, start)) {
23
+ monthToShow = start;
24
+ }
25
+
26
+ if (end && isAfter(monthToShow, end)) {
27
+ monthToShow = end;
28
+ }
29
+
30
+ return startOfMonth(monthToShow);
31
+ };
32
+
33
+ /**
34
+ * Makes sure the month is within the min and max daterange to avoid showing disabled months
35
+ * @note We do not warn the user if start > end now
36
+ */
37
+ const clampDisplayYear = ({
38
+ month,
39
+ start,
40
+ end,
41
+ }: {
42
+ month?: Date;
43
+ start?: Date;
44
+ end?: Date;
45
+ }): Date | undefined => {
46
+ if (!month) {
47
+ return undefined;
48
+ }
49
+
50
+ let monthToShow = month;
51
+
52
+ if (start && monthToShow.getFullYear() < start.getFullYear()) {
53
+ monthToShow = start;
54
+ }
55
+
56
+ if (end && monthToShow.getFullYear() > end.getFullYear()) {
57
+ monthToShow = end;
58
+ }
59
+
60
+ return startOfYear(monthToShow);
61
+ };
62
+
63
+ export { clampDisplayYear, clampDisplayMonth };
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, test } from "vitest";
2
- import { disableDate } from "..";
2
+ import { disableDate } from "./dates-disabled";
3
3
 
4
4
  describe("Returns if date should be disabled", () => {
5
5
  test("Should be disabled using Date (true)", () => {
@@ -1,7 +1,6 @@
1
1
  import { isSameDay } from "date-fns";
2
- import { isDateRange } from "react-day-picker";
2
+ import { isDateRange } from "../Date.typeutils";
3
3
 
4
- // TODO: ((date: Date) => boolean)
5
4
  export const disableDate = (
6
5
  disabledSelection: Date | any[],
7
6
  date: Date,
@@ -0,0 +1,143 @@
1
+ import { nb } from "date-fns/locale";
2
+ import { describe, expect, test } from "vitest";
3
+ import { getMonthOptions, getYearOptions } from "./dropdown-options";
4
+
5
+ describe("getYearOptions", () => {
6
+ test("should return undefined if navStart is undefined", () => {
7
+ const result = getYearOptions(undefined, new Date(), nb);
8
+ expect(result).toBeUndefined();
9
+ });
10
+
11
+ test("should return undefined if navEnd is undefined", () => {
12
+ const result = getYearOptions(new Date(), undefined, nb);
13
+ expect(result).toBeUndefined();
14
+ });
15
+
16
+ test("should return the correct year options within the interval", () => {
17
+ const navStart = new Date(2020, 0, 1); // Januar 1, 2020
18
+ const navEnd = new Date(2022, 11, 31); // Desember 31, 2022
19
+ const result = getYearOptions(navStart, navEnd, nb);
20
+
21
+ const expected = [
22
+ { value: 2020, label: "2020", disabled: false },
23
+ { value: 2021, label: "2021", disabled: false },
24
+ { value: 2022, label: "2022", disabled: false },
25
+ ];
26
+
27
+ expect(result).toEqual(expected);
28
+ });
29
+
30
+ test("should return the correct year options for a single year", () => {
31
+ const navStart = new Date(2021, 0, 1); // Januar 1, 2021
32
+ const navEnd = new Date(2021, 11, 31); // Desember 31, 2021
33
+ const result = getYearOptions(navStart, navEnd, nb);
34
+
35
+ const expected = [{ value: 2021, label: "2021", disabled: false }];
36
+
37
+ expect(result).toEqual(expected);
38
+ });
39
+
40
+ test("should return the correct year options when navStart and navEnd are the same date", () => {
41
+ const navStart = new Date(2021, 0, 1); // Januar 1, 2021
42
+ const navEnd = new Date(2021, 0, 1); // Januar 1, 2021
43
+ const result = getYearOptions(navStart, navEnd, nb);
44
+
45
+ const expected = [{ value: 2021, label: "2021", disabled: false }];
46
+
47
+ expect(result).toEqual(expected);
48
+ });
49
+ });
50
+
51
+ describe("getMonthOptions", () => {
52
+ test("should return the correct month options for the given year", () => {
53
+ const displayMonth = new Date(2021, 0, 1); // Januar 1, 2021
54
+ const result = getMonthOptions(displayMonth, undefined, undefined, nb);
55
+
56
+ const expected = [
57
+ { value: 0, label: "januar", disabled: false },
58
+ { value: 1, label: "februar", disabled: false },
59
+ { value: 2, label: "mars", disabled: false },
60
+ { value: 3, label: "april", disabled: false },
61
+ { value: 4, label: "mai", disabled: false },
62
+ { value: 5, label: "juni", disabled: false },
63
+ { value: 6, label: "juli", disabled: false },
64
+ { value: 7, label: "august", disabled: false },
65
+ { value: 8, label: "september", disabled: false },
66
+ { value: 9, label: "oktober", disabled: false },
67
+ { value: 10, label: "november", disabled: false },
68
+ { value: 11, label: "desember", disabled: false },
69
+ ];
70
+
71
+ expect(result).toEqual(expected);
72
+ });
73
+
74
+ test("should disable months before navStart", () => {
75
+ const displayMonth = new Date(2021, 0, 1); // Januar 1, 2021
76
+ const navStart = new Date(2021, 5, 1); // Juni 1, 2021
77
+ const result = getMonthOptions(displayMonth, navStart, undefined, nb);
78
+
79
+ const expected = [
80
+ { value: 0, label: "januar", disabled: true },
81
+ { value: 1, label: "februar", disabled: true },
82
+ { value: 2, label: "mars", disabled: true },
83
+ { value: 3, label: "april", disabled: true },
84
+ { value: 4, label: "mai", disabled: true },
85
+ { value: 5, label: "juni", disabled: false },
86
+ { value: 6, label: "juli", disabled: false },
87
+ { value: 7, label: "august", disabled: false },
88
+ { value: 8, label: "september", disabled: false },
89
+ { value: 9, label: "oktober", disabled: false },
90
+ { value: 10, label: "november", disabled: false },
91
+ { value: 11, label: "desember", disabled: false },
92
+ ];
93
+
94
+ expect(result).toEqual(expected);
95
+ });
96
+
97
+ test("should disable months after navEnd", () => {
98
+ const displayMonth = new Date(2021, 0, 1); // Januar 1, 2021
99
+ const navEnd = new Date(2021, 5, 1); // Juni 1, 2021
100
+ const result = getMonthOptions(displayMonth, undefined, navEnd, nb);
101
+
102
+ const expected = [
103
+ { value: 0, label: "januar", disabled: false },
104
+ { value: 1, label: "februar", disabled: false },
105
+ { value: 2, label: "mars", disabled: false },
106
+ { value: 3, label: "april", disabled: false },
107
+ { value: 4, label: "mai", disabled: false },
108
+ { value: 5, label: "juni", disabled: false },
109
+ { value: 6, label: "juli", disabled: true },
110
+ { value: 7, label: "august", disabled: true },
111
+ { value: 8, label: "september", disabled: true },
112
+ { value: 9, label: "oktober", disabled: true },
113
+ { value: 10, label: "november", disabled: true },
114
+ { value: 11, label: "desember", disabled: true },
115
+ ];
116
+
117
+ expect(result).toEqual(expected);
118
+ });
119
+
120
+ test("should disable months before navStart and after navEnd", () => {
121
+ const displayMonth = new Date(2021, 0, 1); // Januar 1, 2021
122
+ const navStart = new Date(2021, 3, 1); // April 1, 2021
123
+ const navEnd = new Date(2021, 8, 1); // September 1, 2021
124
+ const result = getMonthOptions(displayMonth, navStart, navEnd, nb);
125
+
126
+ const expected = [
127
+ { value: 0, label: "januar", disabled: true },
128
+ { value: 1, label: "februar", disabled: true },
129
+ { value: 2, label: "mars", disabled: true },
130
+ { value: 3, label: "april", disabled: false },
131
+ { value: 4, label: "mai", disabled: false },
132
+ { value: 5, label: "juni", disabled: false },
133
+ { value: 6, label: "juli", disabled: false },
134
+ { value: 7, label: "august", disabled: false },
135
+ { value: 8, label: "september", disabled: false },
136
+ { value: 9, label: "oktober", disabled: true },
137
+ { value: 10, label: "november", disabled: true },
138
+ { value: 11, label: "desember", disabled: true },
139
+ ];
140
+
141
+ expect(result).toEqual(expected);
142
+ });
143
+ });
@@ -0,0 +1,79 @@
1
+ import {
2
+ Locale,
3
+ addYears,
4
+ eachMonthOfInterval,
5
+ endOfYear,
6
+ format,
7
+ getMonth,
8
+ getYear,
9
+ isBefore,
10
+ isSameYear,
11
+ startOfMonth,
12
+ startOfYear,
13
+ } from "date-fns";
14
+
15
+ /** Return the months to show in the dropdown. */
16
+ export function getMonthOptions(
17
+ displayMonth: Date,
18
+ navStart: Date | undefined,
19
+ navEnd: Date | undefined,
20
+ locale: Locale,
21
+ ):
22
+ | {
23
+ value: number;
24
+ label: string;
25
+ disabled: boolean;
26
+ }[]
27
+ | undefined {
28
+ const months = eachMonthOfInterval({
29
+ start: startOfYear(displayMonth),
30
+ end: endOfYear(displayMonth),
31
+ });
32
+
33
+ const options = months.map((month) => {
34
+ const label = format(month, "LLLL", { locale });
35
+ const value = getMonth(month);
36
+ const disabled =
37
+ (navStart && month < startOfMonth(navStart)) ||
38
+ (navEnd && month > startOfMonth(navEnd)) ||
39
+ false;
40
+ return { value, label, disabled };
41
+ });
42
+
43
+ return options;
44
+ }
45
+
46
+ /** Return the years to show in the dropdown. */
47
+ export function getYearOptions(
48
+ navStart: Date | undefined,
49
+ navEnd: Date | undefined,
50
+ locale: Locale,
51
+ ):
52
+ | {
53
+ value: number;
54
+ label: string;
55
+ disabled: boolean;
56
+ }[]
57
+ | undefined {
58
+ if (!navStart) return undefined;
59
+ if (!navEnd) return undefined;
60
+
61
+ const firstNavYear = startOfYear(navStart);
62
+ const lastNavYear = endOfYear(navEnd);
63
+ const years: Date[] = [];
64
+
65
+ let year = firstNavYear;
66
+ while (isBefore(year, lastNavYear) || isSameYear(year, lastNavYear)) {
67
+ years.push(year);
68
+ year = addYears(year, 1);
69
+ }
70
+
71
+ return years.map((_year) => {
72
+ const label = format(_year, "yyyy", { locale });
73
+ return {
74
+ value: getYear(_year),
75
+ label,
76
+ disabled: false,
77
+ };
78
+ });
79
+ }
@@ -1,7 +1,7 @@
1
1
  import { nb } from "date-fns/locale";
2
2
  import { describe, expect, test } from "vitest";
3
- import { formatDateForInput } from "../format-date";
4
- import { parseDate } from "../parse-date";
3
+ import { formatDateForInput } from "./format-date";
4
+ import { parseDate } from "./parse-date";
5
5
 
6
6
  const parse = (inp: string) => parseDate(inp, new Date(), nb, "date", false);
7
7
  const parseTwoDigit = (inp: string) =>
@@ -0,0 +1,12 @@
1
+ export { formatDateForInput } from "./format-date";
2
+ export {
3
+ INPUT_DATE_STRING_FORMAT_DATE,
4
+ INPUT_DATE_STRING_FORMAT_MONTH,
5
+ parseDate,
6
+ } from "./parse-date";
7
+ export { disableDate } from "./dates-disabled";
8
+ export { dateIsInCurrentMonth, isValidDate } from "./check-dates";
9
+ export { isMatch, isDateInRange } from "./is-match";
10
+ export { clampDisplayMonth, clampDisplayYear } from "./clamp-dates";
11
+ export { getMonthOptions, getYearOptions } from "./dropdown-options";
12
+ export { calendarRange } from "./calendar-range";
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, test } from "vitest";
2
- import { isMatch } from "..";
2
+ import { isMatch } from "./is-match";
3
3
 
4
4
  const disabled = [
5
5
  new Date("Sep 8 2022"),
@@ -5,21 +5,12 @@ import {
5
5
  isSameMonth,
6
6
  } from "date-fns";
7
7
  import {
8
- DateAfter,
9
- DateBefore,
10
8
  DateRange,
9
+ Matcher,
11
10
  isDateAfterType,
12
11
  isDateBeforeType,
13
12
  isDateRange,
14
- } from "react-day-picker";
15
-
16
- export type Matcher =
17
- | ((date: Date) => boolean)
18
- | Date
19
- | Date[]
20
- | DateRange
21
- | DateBefore
22
- | DateAfter;
13
+ } from "../Date.typeutils";
23
14
 
24
15
  function isDateType(value: unknown): value is Date {
25
16
  return isDate(value);