react-day-picker 9.1.4 → 9.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/dist/cjs/DayPicker.js +33 -28
  2. package/dist/cjs/DayPicker.js.map +1 -1
  3. package/dist/cjs/classes/CalendarDay.d.ts +2 -4
  4. package/dist/cjs/classes/CalendarDay.js +2 -4
  5. package/dist/cjs/classes/CalendarDay.js.map +1 -1
  6. package/dist/cjs/classes/DateLib.d.ts +268 -0
  7. package/dist/cjs/classes/DateLib.js +360 -0
  8. package/dist/cjs/classes/DateLib.js.map +1 -0
  9. package/dist/cjs/classes/index.d.ts +1 -0
  10. package/dist/cjs/classes/index.js +1 -0
  11. package/dist/cjs/classes/index.js.map +1 -1
  12. package/dist/cjs/formatters/formatCaption.d.ts +2 -4
  13. package/dist/cjs/formatters/formatCaption.js +3 -5
  14. package/dist/cjs/formatters/formatCaption.js.map +1 -1
  15. package/dist/cjs/formatters/formatDay.d.ts +2 -4
  16. package/dist/cjs/formatters/formatDay.js +3 -5
  17. package/dist/cjs/formatters/formatDay.js.map +1 -1
  18. package/dist/cjs/formatters/formatMonthDropdown.d.ts +1 -1
  19. package/dist/cjs/formatters/formatMonthDropdown.js +2 -2
  20. package/dist/cjs/formatters/formatMonthDropdown.js.map +1 -1
  21. package/dist/cjs/formatters/formatWeekdayName.d.ts +2 -4
  22. package/dist/cjs/formatters/formatWeekdayName.js +3 -5
  23. package/dist/cjs/formatters/formatWeekdayName.js.map +1 -1
  24. package/dist/cjs/helpers/getDates.d.ts +3 -2
  25. package/dist/cjs/helpers/getDates.js +3 -9
  26. package/dist/cjs/helpers/getDates.js.map +1 -1
  27. package/dist/cjs/helpers/getDisplayMonths.d.ts +1 -1
  28. package/dist/cjs/helpers/getFocusableDate.d.ts +2 -2
  29. package/dist/cjs/helpers/getFocusableDate.js +3 -5
  30. package/dist/cjs/helpers/getFocusableDate.js.map +1 -1
  31. package/dist/cjs/helpers/getInitialMonth.d.ts +2 -1
  32. package/dist/cjs/helpers/getInitialMonth.js.map +1 -1
  33. package/dist/cjs/helpers/getMonthOptions.d.ts +2 -2
  34. package/dist/cjs/helpers/getMonthOptions.js +2 -2
  35. package/dist/cjs/helpers/getMonthOptions.js.map +1 -1
  36. package/dist/cjs/helpers/getMonths.d.ts +2 -2
  37. package/dist/cjs/helpers/getMonths.js +3 -15
  38. package/dist/cjs/helpers/getMonths.js.map +1 -1
  39. package/dist/cjs/helpers/getNavMonth.d.ts +2 -2
  40. package/dist/cjs/helpers/getNavMonth.js.map +1 -1
  41. package/dist/cjs/helpers/getNextFocus.d.ts +2 -2
  42. package/dist/cjs/helpers/getNextFocus.js.map +1 -1
  43. package/dist/cjs/helpers/getNextMonth.d.ts +1 -1
  44. package/dist/cjs/helpers/getPreviousMonth.d.ts +1 -1
  45. package/dist/cjs/helpers/getWeekdays.d.ts +5 -7
  46. package/dist/cjs/helpers/getWeekdays.js +5 -8
  47. package/dist/cjs/helpers/getWeekdays.js.map +1 -1
  48. package/dist/cjs/helpers/getYearOptions.d.ts +1 -1
  49. package/dist/cjs/index.d.ts +1 -2
  50. package/dist/cjs/index.js +3 -4
  51. package/dist/cjs/index.js.map +1 -1
  52. package/dist/cjs/labels/labelDayButton.d.ts +2 -4
  53. package/dist/cjs/labels/labelDayButton.js +3 -5
  54. package/dist/cjs/labels/labelDayButton.js.map +1 -1
  55. package/dist/cjs/labels/labelGrid.d.ts +2 -4
  56. package/dist/cjs/labels/labelGrid.js +3 -5
  57. package/dist/cjs/labels/labelGrid.js.map +1 -1
  58. package/dist/cjs/labels/labelGridcell.d.ts +2 -5
  59. package/dist/cjs/labels/labelGridcell.js +3 -5
  60. package/dist/cjs/labels/labelGridcell.js.map +1 -1
  61. package/dist/cjs/labels/labelMonthDropdown.d.ts +2 -2
  62. package/dist/cjs/labels/labelMonthDropdown.js.map +1 -1
  63. package/dist/cjs/labels/labelWeekNumber.d.ts +2 -2
  64. package/dist/cjs/labels/labelWeekNumber.js.map +1 -1
  65. package/dist/cjs/labels/labelWeekNumberHeader.d.ts +2 -2
  66. package/dist/cjs/labels/labelWeekNumberHeader.js.map +1 -1
  67. package/dist/cjs/labels/labelWeekday.d.ts +2 -4
  68. package/dist/cjs/labels/labelWeekday.js +3 -5
  69. package/dist/cjs/labels/labelWeekday.js.map +1 -1
  70. package/dist/cjs/labels/labelYearDropdown.d.ts +2 -2
  71. package/dist/cjs/labels/labelYearDropdown.js.map +1 -1
  72. package/dist/cjs/selection/useMulti.d.ts +1 -1
  73. package/dist/cjs/selection/useMulti.js.map +1 -1
  74. package/dist/cjs/selection/useRange.d.ts +1 -1
  75. package/dist/cjs/selection/useRange.js +2 -1
  76. package/dist/cjs/selection/useRange.js.map +1 -1
  77. package/dist/cjs/selection/useSingle.d.ts +1 -1
  78. package/dist/cjs/selection/useSingle.js.map +1 -1
  79. package/dist/cjs/types/props.d.ts +4 -4
  80. package/dist/cjs/useCalendar.d.ts +2 -3
  81. package/dist/cjs/useCalendar.js.map +1 -1
  82. package/dist/cjs/useFocus.d.ts +1 -2
  83. package/dist/cjs/useFocus.js.map +1 -1
  84. package/dist/cjs/useGetModifiers.d.ts +1 -2
  85. package/dist/cjs/useGetModifiers.js.map +1 -1
  86. package/dist/cjs/useSelection.d.ts +1 -1
  87. package/dist/cjs/utils/addToRange.d.ts +1 -1
  88. package/dist/cjs/utils/addToRange.js +2 -2
  89. package/dist/cjs/utils/addToRange.js.map +1 -1
  90. package/dist/cjs/utils/dateMatchModifiers.d.ts +1 -1
  91. package/dist/cjs/utils/dateMatchModifiers.js +2 -2
  92. package/dist/cjs/utils/dateMatchModifiers.js.map +1 -1
  93. package/dist/cjs/utils/rangeIncludesDate.d.ts +1 -4
  94. package/dist/cjs/utils/rangeIncludesDate.js +3 -5
  95. package/dist/cjs/utils/rangeIncludesDate.js.map +1 -1
  96. package/dist/cjs/utils/typeguards.d.ts +1 -1
  97. package/dist/esm/DayPicker.js +33 -28
  98. package/dist/esm/DayPicker.js.map +1 -1
  99. package/dist/esm/classes/CalendarDay.d.ts +2 -4
  100. package/dist/esm/classes/CalendarDay.js +2 -4
  101. package/dist/esm/classes/CalendarDay.js.map +1 -1
  102. package/dist/esm/classes/DateLib.d.ts +268 -0
  103. package/dist/esm/classes/DateLib.js +355 -0
  104. package/dist/esm/classes/DateLib.js.map +1 -0
  105. package/dist/esm/classes/index.d.ts +1 -0
  106. package/dist/esm/classes/index.js +1 -0
  107. package/dist/esm/classes/index.js.map +1 -1
  108. package/dist/esm/formatters/formatCaption.d.ts +2 -4
  109. package/dist/esm/formatters/formatCaption.js +3 -5
  110. package/dist/esm/formatters/formatCaption.js.map +1 -1
  111. package/dist/esm/formatters/formatDay.d.ts +2 -4
  112. package/dist/esm/formatters/formatDay.js +3 -5
  113. package/dist/esm/formatters/formatDay.js.map +1 -1
  114. package/dist/esm/formatters/formatMonthDropdown.d.ts +1 -1
  115. package/dist/esm/formatters/formatMonthDropdown.js +2 -2
  116. package/dist/esm/formatters/formatMonthDropdown.js.map +1 -1
  117. package/dist/esm/formatters/formatWeekdayName.d.ts +2 -4
  118. package/dist/esm/formatters/formatWeekdayName.js +3 -5
  119. package/dist/esm/formatters/formatWeekdayName.js.map +1 -1
  120. package/dist/esm/helpers/getDates.d.ts +3 -2
  121. package/dist/esm/helpers/getDates.js +3 -9
  122. package/dist/esm/helpers/getDates.js.map +1 -1
  123. package/dist/esm/helpers/getDisplayMonths.d.ts +1 -1
  124. package/dist/esm/helpers/getFocusableDate.d.ts +2 -2
  125. package/dist/esm/helpers/getFocusableDate.js +3 -5
  126. package/dist/esm/helpers/getFocusableDate.js.map +1 -1
  127. package/dist/esm/helpers/getInitialMonth.d.ts +2 -1
  128. package/dist/esm/helpers/getInitialMonth.js.map +1 -1
  129. package/dist/esm/helpers/getMonthOptions.d.ts +2 -2
  130. package/dist/esm/helpers/getMonthOptions.js +2 -2
  131. package/dist/esm/helpers/getMonthOptions.js.map +1 -1
  132. package/dist/esm/helpers/getMonths.d.ts +2 -2
  133. package/dist/esm/helpers/getMonths.js +3 -15
  134. package/dist/esm/helpers/getMonths.js.map +1 -1
  135. package/dist/esm/helpers/getNavMonth.d.ts +2 -2
  136. package/dist/esm/helpers/getNavMonth.js.map +1 -1
  137. package/dist/esm/helpers/getNextFocus.d.ts +2 -2
  138. package/dist/esm/helpers/getNextFocus.js.map +1 -1
  139. package/dist/esm/helpers/getNextMonth.d.ts +1 -1
  140. package/dist/esm/helpers/getPreviousMonth.d.ts +1 -1
  141. package/dist/esm/helpers/getWeekdays.d.ts +5 -7
  142. package/dist/esm/helpers/getWeekdays.js +5 -8
  143. package/dist/esm/helpers/getWeekdays.js.map +1 -1
  144. package/dist/esm/helpers/getYearOptions.d.ts +1 -1
  145. package/dist/esm/index.d.ts +1 -2
  146. package/dist/esm/index.js +1 -2
  147. package/dist/esm/index.js.map +1 -1
  148. package/dist/esm/labels/labelDayButton.d.ts +2 -4
  149. package/dist/esm/labels/labelDayButton.js +3 -5
  150. package/dist/esm/labels/labelDayButton.js.map +1 -1
  151. package/dist/esm/labels/labelGrid.d.ts +2 -4
  152. package/dist/esm/labels/labelGrid.js +3 -5
  153. package/dist/esm/labels/labelGrid.js.map +1 -1
  154. package/dist/esm/labels/labelGridcell.d.ts +2 -5
  155. package/dist/esm/labels/labelGridcell.js +3 -5
  156. package/dist/esm/labels/labelGridcell.js.map +1 -1
  157. package/dist/esm/labels/labelMonthDropdown.d.ts +2 -2
  158. package/dist/esm/labels/labelMonthDropdown.js.map +1 -1
  159. package/dist/esm/labels/labelWeekNumber.d.ts +2 -2
  160. package/dist/esm/labels/labelWeekNumber.js.map +1 -1
  161. package/dist/esm/labels/labelWeekNumberHeader.d.ts +2 -2
  162. package/dist/esm/labels/labelWeekNumberHeader.js.map +1 -1
  163. package/dist/esm/labels/labelWeekday.d.ts +2 -4
  164. package/dist/esm/labels/labelWeekday.js +3 -5
  165. package/dist/esm/labels/labelWeekday.js.map +1 -1
  166. package/dist/esm/labels/labelYearDropdown.d.ts +2 -2
  167. package/dist/esm/labels/labelYearDropdown.js.map +1 -1
  168. package/dist/esm/selection/useMulti.d.ts +1 -1
  169. package/dist/esm/selection/useMulti.js.map +1 -1
  170. package/dist/esm/selection/useRange.d.ts +1 -1
  171. package/dist/esm/selection/useRange.js +2 -1
  172. package/dist/esm/selection/useRange.js.map +1 -1
  173. package/dist/esm/selection/useSingle.d.ts +1 -1
  174. package/dist/esm/selection/useSingle.js.map +1 -1
  175. package/dist/esm/types/props.d.ts +4 -4
  176. package/dist/esm/useCalendar.d.ts +2 -3
  177. package/dist/esm/useCalendar.js.map +1 -1
  178. package/dist/esm/useFocus.d.ts +1 -2
  179. package/dist/esm/useFocus.js.map +1 -1
  180. package/dist/esm/useGetModifiers.d.ts +1 -2
  181. package/dist/esm/useGetModifiers.js.map +1 -1
  182. package/dist/esm/useSelection.d.ts +1 -1
  183. package/dist/esm/utils/addToRange.d.ts +1 -1
  184. package/dist/esm/utils/addToRange.js +1 -1
  185. package/dist/esm/utils/addToRange.js.map +1 -1
  186. package/dist/esm/utils/dateMatchModifiers.d.ts +1 -1
  187. package/dist/esm/utils/dateMatchModifiers.js +1 -1
  188. package/dist/esm/utils/dateMatchModifiers.js.map +1 -1
  189. package/dist/esm/utils/rangeIncludesDate.d.ts +1 -4
  190. package/dist/esm/utils/rangeIncludesDate.js +2 -4
  191. package/dist/esm/utils/rangeIncludesDate.js.map +1 -1
  192. package/dist/esm/utils/typeguards.d.ts +1 -1
  193. package/examples/Formatters.tsx +2 -2
  194. package/examples/NumberingSystem.tsx +5 -2
  195. package/examples/Range.test.tsx +8 -0
  196. package/examples/Range.tsx +13 -8
  197. package/examples/TestCase2511.test.tsx +14 -0
  198. package/examples/TestCase2511.tsx +19 -0
  199. package/examples/__snapshots__/Range.test.tsx.snap +1253 -1239
  200. package/examples/index.ts +1 -0
  201. package/package.json +78 -35
  202. package/src/DayPicker.tsx +44 -52
  203. package/src/classes/CalendarDay.ts +1 -3
  204. package/src/classes/DateLib.ts +478 -0
  205. package/src/classes/index.ts +1 -0
  206. package/src/formatters/formatCaption.test.ts +12 -4
  207. package/src/formatters/formatCaption.ts +4 -9
  208. package/src/formatters/formatDay.ts +4 -6
  209. package/src/formatters/formatMonthDropdown.ts +3 -3
  210. package/src/formatters/formatWeekdayName.ts +4 -6
  211. package/src/helpers/getDates.test.ts +29 -20
  212. package/src/helpers/getDates.ts +6 -14
  213. package/src/helpers/getDisplayMonths.test.ts +4 -4
  214. package/src/helpers/getDisplayMonths.ts +1 -1
  215. package/src/helpers/getFocusableDate.ts +5 -8
  216. package/src/helpers/getFormatters.test.ts +9 -5
  217. package/src/helpers/getInitialMonth.test.ts +7 -6
  218. package/src/helpers/getInitialMonth.ts +2 -1
  219. package/src/helpers/getMonthOptions.test.ts +3 -4
  220. package/src/helpers/getMonthOptions.ts +2 -3
  221. package/src/helpers/getMonths.test.ts +7 -10
  222. package/src/helpers/getMonths.ts +5 -26
  223. package/src/helpers/getNavMonth.test.ts +9 -9
  224. package/src/helpers/getNavMonth.ts +1 -2
  225. package/src/helpers/getNextFocus.test.tsx +11 -12
  226. package/src/helpers/getNextFocus.tsx +2 -8
  227. package/src/helpers/getNextMonth.test.ts +9 -8
  228. package/src/helpers/getNextMonth.ts +1 -1
  229. package/src/helpers/getPossibleFocusDate.test.ts +6 -5
  230. package/src/helpers/getPreviousMonth.test.ts +7 -7
  231. package/src/helpers/getPreviousMonth.ts +1 -1
  232. package/src/helpers/getWeekdays.test.ts +8 -4
  233. package/src/helpers/getWeekdays.ts +6 -10
  234. package/src/helpers/getYearOptions.test.ts +4 -4
  235. package/src/helpers/getYearOptions.ts +1 -1
  236. package/src/index.ts +1 -3
  237. package/src/labels/labelDayButton.ts +4 -6
  238. package/src/labels/labelGrid.ts +4 -6
  239. package/src/labels/labelGridcell.ts +4 -7
  240. package/src/labels/labelMonthDropdown.ts +2 -2
  241. package/src/labels/labelWeekNumber.ts +2 -2
  242. package/src/labels/labelWeekNumberHeader.ts +2 -2
  243. package/src/labels/labelWeekday.ts +4 -6
  244. package/src/labels/labelYearDropdown.ts +2 -2
  245. package/src/selection/useMulti.test.tsx +3 -3
  246. package/src/selection/useMulti.tsx +1 -1
  247. package/src/selection/useRange.test.tsx +8 -8
  248. package/src/selection/useRange.tsx +5 -2
  249. package/src/selection/useSingle.test.tsx +3 -3
  250. package/src/selection/useSingle.tsx +1 -1
  251. package/{style.css → src/style.css} +2 -2
  252. package/src/style.module.css.d.ts +29 -0
  253. package/src/types/props.ts +4 -4
  254. package/src/useCalendar.ts +2 -3
  255. package/src/useFocus.ts +1 -2
  256. package/src/useGetModifiers.tsx +1 -2
  257. package/src/useSelection.ts +1 -1
  258. package/src/utils/addToRange.ts +1 -1
  259. package/src/utils/dateMatchModifiers.test.ts +21 -13
  260. package/src/utils/dateMatchModifiers.ts +1 -1
  261. package/src/utils/rangeIncludesDate.ts +2 -3
  262. package/src/utils/typeguards.test.ts +5 -5
  263. package/src/utils/typeguards.ts +1 -1
  264. package/website/docs/upgrading.mdx +1 -1
  265. package/dist/cjs/helpers/getDateLib.d.ts +0 -3
  266. package/dist/cjs/helpers/getDateLib.js +0 -11
  267. package/dist/cjs/helpers/getDateLib.js.map +0 -1
  268. package/dist/cjs/lib/dateLib.d.ts +0 -138
  269. package/dist/cjs/lib/dateLib.js +0 -68
  270. package/dist/cjs/lib/dateLib.js.map +0 -1
  271. package/dist/cjs/lib/index.d.ts +0 -2
  272. package/dist/cjs/lib/index.js +0 -21
  273. package/dist/cjs/lib/index.js.map +0 -1
  274. package/dist/cjs/lib/locales.d.ts +0 -1
  275. package/dist/cjs/lib/locales.js +0 -6
  276. package/dist/cjs/lib/locales.js.map +0 -1
  277. package/dist/esm/helpers/getDateLib.d.ts +0 -3
  278. package/dist/esm/helpers/getDateLib.js +0 -8
  279. package/dist/esm/helpers/getDateLib.js.map +0 -1
  280. package/dist/esm/lib/dateLib.d.ts +0 -138
  281. package/dist/esm/lib/dateLib.js +0 -65
  282. package/dist/esm/lib/dateLib.js.map +0 -1
  283. package/dist/esm/lib/index.d.ts +0 -2
  284. package/dist/esm/lib/index.js +0 -3
  285. package/dist/esm/lib/index.js.map +0 -1
  286. package/dist/esm/lib/locales.d.ts +0 -1
  287. package/dist/esm/lib/locales.js +0 -2
  288. package/dist/esm/lib/locales.js.map +0 -1
  289. package/src/helpers/getDateLib.ts +0 -9
  290. package/src/lib/dateLib.ts +0 -175
  291. package/src/lib/index.ts +0 -2
  292. package/src/lib/locales.ts +0 -1
  293. /package/{style.module.css → src/style.module.css} +0 -0
@@ -1,5 +1,6 @@
1
1
  import { addMonths, isSameMonth } from "date-fns";
2
- import { dateLib } from "react-day-picker";
2
+
3
+ import { defaultDateLib } from "../classes/DateLib";
3
4
 
4
5
  import { getNextMonth } from "./getNextMonth";
5
6
 
@@ -14,7 +15,7 @@ describe("when number of months is 1", () => {
14
15
  {
15
16
  disableNavigation: true
16
17
  },
17
- dateLib
18
+ defaultDateLib
18
19
  );
19
20
  expect(result).toBe(undefined);
20
21
  });
@@ -22,7 +23,7 @@ describe("when number of months is 1", () => {
22
23
  describe("when in the navigable range", () => {
23
24
  const endMonth = addMonths(startingMonth, 3);
24
25
  it("the next month is not undefined", () => {
25
- const result = getNextMonth(startingMonth, endMonth, {}, dateLib);
26
+ const result = getNextMonth(startingMonth, endMonth, {}, defaultDateLib);
26
27
  const expectedNextMonth = addMonths(startingMonth, 1);
27
28
  expect(result && isSameMonth(result, expectedNextMonth)).toBeTruthy();
28
29
  });
@@ -30,7 +31,7 @@ describe("when number of months is 1", () => {
30
31
  describe("when not in the navigable range", () => {
31
32
  const endMonth = startingMonth;
32
33
  it("the next month is undefined", () => {
33
- const result = getNextMonth(startingMonth, endMonth, {}, dateLib);
34
+ const result = getNextMonth(startingMonth, endMonth, {}, defaultDateLib);
34
35
  expect(result).toBe(undefined);
35
36
  });
36
37
  });
@@ -47,7 +48,7 @@ describe("when displaying 3 months", () => {
47
48
  numberOfMonths,
48
49
  pagedNavigation
49
50
  },
50
- dateLib
51
+ defaultDateLib
51
52
  );
52
53
  const expectedNextMonth = addMonths(startingMonth, 3);
53
54
  expect(result && isSameMonth(result, expectedNextMonth)).toBeTruthy();
@@ -61,7 +62,7 @@ describe("when displaying 3 months", () => {
61
62
  numberOfMonths,
62
63
  pagedNavigation
63
64
  },
64
- dateLib
65
+ defaultDateLib
65
66
  );
66
67
  expect(result).toBe(undefined);
67
68
  });
@@ -77,7 +78,7 @@ describe("when displaying 3 months", () => {
77
78
  numberOfMonths,
78
79
  pagedNavigation
79
80
  },
80
- dateLib
81
+ defaultDateLib
81
82
  );
82
83
  const expectedNextMonth = addMonths(startingMonth, 1);
83
84
  expect(result && isSameMonth(result, expectedNextMonth)).toBeTruthy();
@@ -91,7 +92,7 @@ describe("when displaying 3 months", () => {
91
92
  numberOfMonths,
92
93
  pagedNavigation
93
94
  },
94
- dateLib
95
+ defaultDateLib
95
96
  );
96
97
  expect(result).toBe(undefined);
97
98
  });
@@ -1,4 +1,4 @@
1
- import type { DateLib } from "../lib/index.js";
1
+ import type { DateLib } from "../classes/DateLib.js";
2
2
  import type { DayPickerProps } from "../types/index.js";
3
3
 
4
4
  /**
@@ -11,17 +11,18 @@ import {
11
11
  endOfWeek
12
12
  } from "date-fns";
13
13
 
14
+ import { DateLib } from "../classes/DateLib";
14
15
  import type { DayPickerProps, MoveFocusBy, MoveFocusDir } from "../types";
15
16
 
16
- import { dateLib } from "..";
17
17
  import { getFocusableDate } from "./getFocusableDate";
18
18
 
19
19
  const focusedDate = new Date(2023, 0, 1); // Jan 1, 2023
20
- const options: Pick<DayPickerProps, "locale" | "ISOWeek" | "weekStartsOn"> = {
21
- locale: undefined,
22
- ISOWeek: false,
23
- weekStartsOn: 0 // Sunday
20
+ const options: Pick<DayPickerProps, "ISOWeek"> = {
21
+ ISOWeek: false
24
22
  };
23
+ const dateLib = new DateLib({
24
+ weekStartsOn: 0 // Sunday
25
+ });
25
26
 
26
27
  const calendarStartMonth = new Date(2022, 0, 1); // Jan 1, 2022
27
28
  const calendarEndMonth = new Date(2024, 0, 1); // Jan 1, 2024
@@ -1,4 +1,5 @@
1
- import { dateLib } from "..";
1
+ import { defaultDateLib } from "../classes/DateLib";
2
+
2
3
  import { getPreviousMonth } from "./getPreviousMonth";
3
4
 
4
5
  it("should return undefined if navigation is disabled", () => {
@@ -14,7 +15,7 @@ it("should return undefined if navigation is disabled", () => {
14
15
  firstDisplayedMonth,
15
16
  calendarStartMonth,
16
17
  props,
17
- dateLib
18
+ defaultDateLib
18
19
  );
19
20
 
20
21
  expect(result).toBeUndefined();
@@ -32,7 +33,7 @@ it("should return the previous month if startMonth is not provided", () => {
32
33
  firstDisplayedMonth,
33
34
  undefined,
34
35
  props,
35
- dateLib
36
+ defaultDateLib
36
37
  );
37
38
 
38
39
  expect(result).toEqual(new Date(2022, 0, 1)); // January 2022
@@ -50,7 +51,7 @@ it("should return undefined if the previous month is before the startMonth", ()
50
51
  firstDisplayedMonth,
51
52
  calendarStartMonth,
52
53
  props,
53
- dateLib
54
+ defaultDateLib
54
55
  );
55
56
  expect(result).toBeUndefined();
56
57
  });
@@ -62,15 +63,14 @@ it("should return the correct previous month when pagedNavigation is true", () =
62
63
  disableNavigation: false,
63
64
  pagedNavigation: true,
64
65
  numberOfMonths: 2,
65
- startMonth: new Date(2022, 0, 1),
66
- dateLib
66
+ startMonth: new Date(2022, 0, 1)
67
67
  };
68
68
 
69
69
  const result = getPreviousMonth(
70
70
  firstDisplayedMonth,
71
71
  calendarStartMonth,
72
72
  props,
73
- dateLib
73
+ defaultDateLib
74
74
  );
75
75
 
76
76
  expect(result).toEqual(new Date(2022, 0, 1)); // January 2022
@@ -1,4 +1,4 @@
1
- import type { DateLib } from "../lib/index.js";
1
+ import type { DateLib } from "../classes/DateLib.js";
2
2
  import type { DayPickerProps } from "../types/index.js";
3
3
 
4
4
  /**
@@ -1,6 +1,6 @@
1
1
  import { es } from "date-fns/locale/es";
2
2
 
3
- import { dateLib } from "../lib";
3
+ import { DateLib, defaultDateLib } from "../classes/DateLib";
4
4
 
5
5
  import { getWeekdays } from "./getWeekdays";
6
6
 
@@ -8,7 +8,7 @@ let result: Date[];
8
8
 
9
9
  describe("when rendered without a locale", () => {
10
10
  beforeEach(() => {
11
- result = getWeekdays();
11
+ result = getWeekdays(defaultDateLib);
12
12
  });
13
13
  test("should return 7 days", () => {
14
14
  expect(result).toHaveLength(7);
@@ -22,7 +22,7 @@ describe.each<0 | 1 | 2 | 3 | 4 | 5 | 6>([0, 1, 2, 3, 4, 5, 6])(
22
22
  "when week start on %s",
23
23
  (weekStartsOn) => {
24
24
  beforeEach(() => {
25
- result = getWeekdays(es, weekStartsOn);
25
+ result = getWeekdays(new DateLib({ locale: es, weekStartsOn }));
26
26
  });
27
27
  test("the first date should be weekStartsOn", () => {
28
28
  expect(result[0].getDay()).toBe(weekStartsOn);
@@ -32,7 +32,11 @@ describe.each<0 | 1 | 2 | 3 | 4 | 5 | 6>([0, 1, 2, 3, 4, 5, 6])(
32
32
 
33
33
  describe("when using ISO week", () => {
34
34
  beforeEach(() => {
35
- result = getWeekdays(es, 3, true, undefined, dateLib);
35
+ result = getWeekdays(
36
+ new DateLib({ locale: es, weekStartsOn: 3 }),
37
+ true,
38
+ undefined
39
+ );
36
40
  });
37
41
  test("should return Monday as first day", () => {
38
42
  expect(result[0]).toBeMonday();
@@ -1,21 +1,17 @@
1
1
  import { TZDate } from "@date-fns/tz";
2
2
 
3
- import type { Locale, DateLib } from "../lib/dateLib.js";
4
- import { dateLib as defaultDateLib } from "../lib/index.js";
3
+ import { DateLib } from "../classes/DateLib.js";
5
4
 
6
5
  /**
7
6
  * Generate a series of 7 days, starting from the week, to use for formatting
8
7
  * the weekday names (Monday, Tuesday, etc.).
9
8
  */
10
9
  export function getWeekdays(
11
- locale?: Locale | undefined,
12
- /** The index of the first day of the week (0 - Sunday). */
13
- weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined,
10
+ /** The date library. */
11
+ dateLib: DateLib,
14
12
  /** Use ISOWeek instead of locale/ */
15
13
  ISOWeek?: boolean | undefined,
16
- timeZone?: string | undefined,
17
- /** @ignore */
18
- dateLib: DateLib = defaultDateLib
14
+ timeZone?: string | undefined
19
15
  ): Date[] {
20
16
  const date = timeZone
21
17
  ? TZDate.tz(timeZone)
@@ -24,9 +20,9 @@ export function getWeekdays(
24
20
  : new Date();
25
21
  const start = ISOWeek
26
22
  ? dateLib.startOfISOWeek(date)
27
- : dateLib.startOfWeek(date, { locale, weekStartsOn });
23
+ : dateLib.startOfWeek(date);
28
24
 
29
- const days = [];
25
+ const days: Date[] = [];
30
26
  for (let i = 0; i < 7; i++) {
31
27
  const day = dateLib.addDays(start, i);
32
28
  days.push(day);
@@ -1,4 +1,4 @@
1
- import { dateLib } from "react-day-picker";
1
+ import { defaultDateLib } from "../classes/DateLib";
2
2
 
3
3
  import { getFormatters } from "./getFormatters";
4
4
  import { getYearOptions } from "./getYearOptions";
@@ -13,14 +13,14 @@ test("return undefined if startMonth or endMonth is not provided", () => {
13
13
  undefined,
14
14
  new Date(2022, 11, 31),
15
15
  formatters,
16
- dateLib
16
+ defaultDateLib
17
17
  );
18
18
  const result2 = getYearOptions(
19
19
  displayMonth,
20
20
  new Date(2022, 0, 1),
21
21
  undefined,
22
22
  formatters,
23
- dateLib
23
+ defaultDateLib
24
24
  );
25
25
 
26
26
  expect(result1).toBeUndefined();
@@ -40,7 +40,7 @@ test("return correct dropdown options", () => {
40
40
  startMonth,
41
41
  endMonth,
42
42
  formatters,
43
- dateLib
43
+ defaultDateLib
44
44
  );
45
45
 
46
46
  expect(result).toEqual([
@@ -1,5 +1,5 @@
1
+ import type { DateLib } from "../classes/DateLib.js";
1
2
  import { DropdownOption } from "../components/Dropdown.js";
2
- import type { DateLib } from "../lib/dateLib.js";
3
3
  import type { Formatters } from "../types/index.js";
4
4
 
5
5
  /** Return the years to show in the dropdown. */
package/src/index.ts CHANGED
@@ -4,8 +4,6 @@ export * from "./types/index.js";
4
4
  export * from "./classes/index.js";
5
5
  export * from "./components/custom-components.js";
6
6
 
7
- export * from "./lib/index.js";
8
-
9
7
  export * from "./formatters/index.js";
10
8
  export * from "./helpers/index.js";
11
9
  export * from "./labels/index.js";
@@ -14,4 +12,4 @@ export * from "./UI.js";
14
12
 
15
13
  export * from "./useDayPicker.js";
16
14
 
17
- export { enUS as defaultLocale } from "./lib/locales.js";
15
+ export { TZDate } from "@date-fns/tz";
@@ -1,5 +1,4 @@
1
- import type { DateLib, LabelOptions } from "../index.js";
2
- import { dateLib as defaultDateLib } from "../lib/index.js";
1
+ import { DateLib, type DateLibOptions } from "../classes/DateLib.js";
3
2
  import type { Modifiers } from "../types/index.js";
4
3
 
5
4
  /**
@@ -16,11 +15,10 @@ export function labelDayButton(
16
15
  date: Date,
17
16
  /** The modifiers for the day. */
18
17
  modifiers: Modifiers,
19
- options?: LabelOptions,
20
- /** @ignore */
21
- dateLib: DateLib = defaultDateLib
18
+ options?: DateLibOptions,
19
+ dateLib?: DateLib
22
20
  ) {
23
- let label = dateLib.format(date, "PPPP", options);
21
+ let label = (dateLib ?? new DateLib(options)).format(date, "PPPP");
24
22
  if (modifiers.today) label = `Today, ${label}`;
25
23
  if (modifiers.selected) label = `${label}, selected`;
26
24
  return label;
@@ -1,5 +1,4 @@
1
- import type { LabelOptions, DateLib } from "../lib/dateLib.js";
2
- import { dateLib as defaultDateLib } from "../lib/index.js";
1
+ import { DateLib, type DateLibOptions } from "../classes/DateLib.js";
3
2
 
4
3
  /**
5
4
  * Return an ARIA label for the month grid, that will be announced when entering
@@ -11,11 +10,10 @@ import { dateLib as defaultDateLib } from "../lib/index.js";
11
10
  */
12
11
  export function labelGrid(
13
12
  date: Date,
14
- options?: LabelOptions,
15
- /** @ignore */
16
- dateLib: DateLib = defaultDateLib
13
+ options?: DateLibOptions,
14
+ dateLib?: DateLib
17
15
  ) {
18
- return dateLib.format(date, "LLLL y", options);
16
+ return (dateLib ?? new DateLib(options)).format(date, "LLLL y");
19
17
  }
20
18
 
21
19
  /**
@@ -1,6 +1,4 @@
1
- import type { DateLib } from "../index.js";
2
- import type { LabelOptions } from "../lib/dateLib.js";
3
- import { dateLib as defaultDateLib } from "../lib/index.js";
1
+ import { DateLib, type DateLibOptions } from "../classes/DateLib.js";
4
2
  import type { Modifiers } from "../types/index.js";
5
3
 
6
4
  /**
@@ -13,11 +11,10 @@ export function labelGridcell(
13
11
  date: Date,
14
12
  /** The modifiers for the day. */
15
13
  modifiers?: Modifiers,
16
- options?: LabelOptions,
17
- /** @ignore */
18
- dateLib: DateLib = defaultDateLib
14
+ options?: DateLibOptions,
15
+ dateLib?: DateLib
19
16
  ) {
20
- let label = dateLib.format(date, "PPPP", options);
17
+ let label = (dateLib ?? new DateLib(options)).format(date, "PPPP");
21
18
  if (modifiers?.today) {
22
19
  label = `Today, ${label}`;
23
20
  }
@@ -1,4 +1,4 @@
1
- import type { LabelOptions } from "../lib/dateLib.js";
1
+ import type { DateLibOptions } from "../classes/DateLib.js";
2
2
 
3
3
  /**
4
4
  * The ARIA label for the months dropdown.
@@ -7,6 +7,6 @@ import type { LabelOptions } from "../lib/dateLib.js";
7
7
  * @group Labels
8
8
  * @see https://daypicker.dev/docs/translation#aria-labels
9
9
  */
10
- export function labelMonthDropdown(options?: LabelOptions) {
10
+ export function labelMonthDropdown(options?: DateLibOptions) {
11
11
  return "Choose the Month";
12
12
  }
@@ -1,4 +1,4 @@
1
- import type { LabelOptions } from "../lib/dateLib.js";
1
+ import type { DateLibOptions } from "../classes/DateLib.js";
2
2
 
3
3
  /**
4
4
  * The ARIA label for the week number cell (the first cell in the row).
@@ -9,7 +9,7 @@ import type { LabelOptions } from "../lib/dateLib.js";
9
9
  */
10
10
  export function labelWeekNumber(
11
11
  weekNumber: number,
12
- options?: LabelOptions
12
+ options?: DateLibOptions
13
13
  ): string {
14
14
  return `Week ${weekNumber}`;
15
15
  }
@@ -1,4 +1,4 @@
1
- import type { LabelOptions } from "../lib/dateLib.js";
1
+ import type { DateLibOptions } from "../classes/DateLib.js";
2
2
 
3
3
  /**
4
4
  * The ARIA label for the week number header element.
@@ -7,6 +7,6 @@ import type { LabelOptions } from "../lib/dateLib.js";
7
7
  * @group Labels
8
8
  * @see https://daypicker.dev/docs/translation#aria-labels
9
9
  */
10
- export function labelWeekNumberHeader(options?: LabelOptions): string {
10
+ export function labelWeekNumberHeader(options?: DateLibOptions): string {
11
11
  return "Week Number";
12
12
  }
@@ -1,5 +1,4 @@
1
- import type { LabelOptions, DateLib } from "../lib/dateLib.js";
2
- import { dateLib as defaultDateLib } from "../lib/index.js";
1
+ import { DateLib, type DateLibOptions } from "../classes/DateLib.js";
3
2
 
4
3
  /**
5
4
  * The ARIA label for the Weekday column header.
@@ -10,9 +9,8 @@ import { dateLib as defaultDateLib } from "../lib/index.js";
10
9
  */
11
10
  export function labelWeekday(
12
11
  date: Date,
13
- options?: LabelOptions,
14
- /** @ignore */
15
- dateLib: DateLib = defaultDateLib
12
+ options?: DateLibOptions,
13
+ dateLib?: DateLib
16
14
  ): string {
17
- return dateLib.format(date, "cccc", options);
15
+ return (dateLib ?? new DateLib(options)).format(date, "cccc");
18
16
  }
@@ -1,4 +1,4 @@
1
- import type { LabelOptions } from "../lib/dateLib.js";
1
+ import type { DateLibOptions } from "../classes/DateLib.js";
2
2
 
3
3
  /**
4
4
  * The ARIA label for the years dropdown.
@@ -7,6 +7,6 @@ import type { LabelOptions } from "../lib/dateLib.js";
7
7
  * @group Labels
8
8
  * @see https://daypicker.dev/docs/translation#aria-labels
9
9
  */
10
- export function labelYearDropdown(options?: LabelOptions) {
10
+ export function labelYearDropdown(options?: DateLibOptions) {
11
11
  return "Choose the Year";
12
12
  }
@@ -1,6 +1,6 @@
1
1
  import { act, renderHook } from "@/test/render";
2
2
 
3
- import { dateLib } from "../lib";
3
+ import { defaultDateLib } from "../classes/DateLib";
4
4
  import { DayPickerProps } from "../types";
5
5
 
6
6
  import { useMulti } from "./useMulti";
@@ -15,7 +15,7 @@ describe("useMulti", () => {
15
15
  onSelect: mockOnSelect
16
16
  };
17
17
 
18
- const { result } = renderHook(() => useMulti(props, dateLib));
18
+ const { result } = renderHook(() => useMulti(props, defaultDateLib));
19
19
 
20
20
  expect(result.current.selected).toBe(selectedDates);
21
21
  });
@@ -27,7 +27,7 @@ describe("useMulti", () => {
27
27
  selected: initialSelectedDates
28
28
  };
29
29
 
30
- const { result } = renderHook(() => useMulti(props, dateLib));
30
+ const { result } = renderHook(() => useMulti(props, defaultDateLib));
31
31
 
32
32
  act(() => {
33
33
  result.current.select?.(new Date(2023, 9, 3), {}, {} as React.MouseEvent);
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
 
3
+ import type { DateLib } from "../classes/DateLib.js";
3
4
  import { useControlledValue } from "../helpers/useControlledValue.js";
4
- import type { DateLib } from "../lib/dateLib.js";
5
5
  import type {
6
6
  DayPickerProps,
7
7
  Modifiers,
@@ -3,7 +3,7 @@ import { DayPickerProps } from "react-day-picker/types";
3
3
 
4
4
  import { act, renderHook } from "@/test/render";
5
5
 
6
- import { dateLib } from "../lib";
6
+ import { defaultDateLib } from "../classes/DateLib";
7
7
 
8
8
  import { useRange } from "./useRange";
9
9
 
@@ -16,7 +16,7 @@ describe("useRange", () => {
16
16
  const { result } = renderHook(() =>
17
17
  useRange(
18
18
  { mode: "range", selected: initiallySelected, required: false },
19
- dateLib
19
+ defaultDateLib
20
20
  )
21
21
  );
22
22
 
@@ -31,7 +31,7 @@ describe("useRange", () => {
31
31
  const { result } = renderHook(() =>
32
32
  useRange(
33
33
  { mode: "range", selected: initiallySelected, required: false },
34
- dateLib
34
+ defaultDateLib
35
35
  )
36
36
  );
37
37
 
@@ -54,7 +54,7 @@ describe("useRange", () => {
54
54
  required: false,
55
55
  max: 5
56
56
  },
57
- dateLib
57
+ defaultDateLib
58
58
  )
59
59
  );
60
60
 
@@ -73,7 +73,7 @@ describe("useRange", () => {
73
73
  const { result } = renderHook(() =>
74
74
  useRange(
75
75
  { mode: "range", selected: undefined, required: false, min: 5 },
76
- dateLib
76
+ defaultDateLib
77
77
  )
78
78
  );
79
79
 
@@ -99,7 +99,7 @@ describe("useRange", () => {
99
99
  excludeDisabled: true,
100
100
  disabled
101
101
  },
102
- dateLib
102
+ defaultDateLib
103
103
  )
104
104
  );
105
105
 
@@ -126,7 +126,7 @@ describe("useRange", () => {
126
126
  onSelect: mockOnSelect
127
127
  };
128
128
 
129
- const { result } = renderHook(() => useRange(props, dateLib));
129
+ const { result } = renderHook(() => useRange(props, defaultDateLib));
130
130
 
131
131
  expect(result.current.selected).toBe(selectedRange);
132
132
  });
@@ -141,7 +141,7 @@ describe("useRange", () => {
141
141
  selected: initialSelectedRange
142
142
  };
143
143
 
144
- const { result } = renderHook(() => useRange(props, dateLib));
144
+ const { result } = renderHook(() => useRange(props, defaultDateLib));
145
145
 
146
146
  act(() => {
147
147
  result.current.select?.(new Date(2023, 9, 6), {}, {} as React.MouseEvent);
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
 
3
+ import type { DateLib } from "../classes/DateLib.js";
3
4
  import { useControlledValue } from "../helpers/useControlledValue.js";
4
- import type { DateLib } from "../lib/index.js";
5
5
  import type {
6
6
  DayPickerProps,
7
7
  Modifiers,
@@ -45,8 +45,11 @@ export function useRange<T extends DayPickerProps>(
45
45
 
46
46
  if (newRange?.from && newRange.to) {
47
47
  let newDate = newRange.from;
48
- while (dateLib.differenceInCalendarDays(newRange.to, newDate) > 0) {
48
+ const totalDays = dateLib.differenceInCalendarDays(newRange.to, newDate);
49
+
50
+ for (let i = 0; i < totalDays; i++) {
49
51
  newDate = dateLib.addDays(newDate, 1);
52
+
50
53
  if (
51
54
  excludeDisabled &&
52
55
  disabled &&
@@ -1,6 +1,6 @@
1
1
  import { act, renderHook } from "@/test/render";
2
2
 
3
- import { dateLib } from "../lib";
3
+ import { defaultDateLib } from "../classes/DateLib";
4
4
  import { DayPickerProps } from "../types";
5
5
 
6
6
  import { useSingle } from "./useSingle";
@@ -15,7 +15,7 @@ describe("useSingle", () => {
15
15
  onSelect: mockOnSelect
16
16
  };
17
17
 
18
- const { result } = renderHook(() => useSingle(props, dateLib));
18
+ const { result } = renderHook(() => useSingle(props, defaultDateLib));
19
19
 
20
20
  expect(result.current.selected).toBe(selectedDate);
21
21
  });
@@ -27,7 +27,7 @@ describe("useSingle", () => {
27
27
  selected: initialSelectedDate
28
28
  };
29
29
 
30
- const { result } = renderHook(() => useSingle(props, dateLib));
30
+ const { result } = renderHook(() => useSingle(props, defaultDateLib));
31
31
 
32
32
  act(() => {
33
33
  result.current.select?.(new Date(2023, 9, 2), {}, {} as React.MouseEvent);
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
 
3
+ import type { DateLib } from "../classes/DateLib.js";
3
4
  import { useControlledValue } from "../helpers/useControlledValue.js";
4
- import type { DateLib } from "../lib/index.js";
5
5
  import type {
6
6
  DayPickerProps,
7
7
  Modifiers,
@@ -11,8 +11,8 @@
11
11
 
12
12
  --rdp-day_button-border-radius: 100%; /* The border radius of the day cells. */
13
13
  --rdp-day_button-border: 2px solid transparent; /* The border of the day cells. */
14
- --rdp-day_button-height: var(--rdp-day-width); /* The height of the day cells. */
15
- --rdp-day_button-width: var(--rdp-day-height); /* The width of the day cells. */
14
+ --rdp-day_button-height: var(--rdp-day-height); /* The height of the day cells. */
15
+ --rdp-day_button-width: var(--rdp-day-width); /* The width of the day cells. */
16
16
 
17
17
  --rdp-selected-border: 2px solid var(--rdp-accent-color); /* The border of the selected days. */
18
18
  --rdp-selected-font: bold large var(--rdp-font-family); /* The font of the selected days. */
@@ -0,0 +1,29 @@
1
+ declare const styles: {
2
+ root: string;
3
+ day: string;
4
+ day_button: string;
5
+ caption_label: string;
6
+ button_next: string;
7
+ button_previous: string;
8
+ chevron: string;
9
+ dropdowns: string;
10
+ dropdown: string;
11
+ dropdown_root: string;
12
+ month_caption: string;
13
+ months: string;
14
+ month_grid: string;
15
+ nav: string;
16
+ weekday: string;
17
+ week_number: string;
18
+ today: string;
19
+ selected: string;
20
+ outside: string;
21
+ disabled: string;
22
+ hidden: string;
23
+ range_start: string;
24
+ range_middle: string;
25
+ range_end: string;
26
+ focusable: string;
27
+ };
28
+
29
+ export default styles;