react-day-picker 9.2.1 → 9.3.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 (114) hide show
  1. package/dist/cjs/DayPicker.js +1 -0
  2. package/dist/cjs/DayPicker.js.map +1 -1
  3. package/dist/cjs/formatters/formatMonthDropdown.d.ts +2 -1
  4. package/dist/cjs/formatters/formatMonthDropdown.js +1 -2
  5. package/dist/cjs/formatters/formatMonthDropdown.js.map +1 -1
  6. package/dist/cjs/helpers/getDates.d.ts +2 -0
  7. package/dist/cjs/helpers/getDates.js +5 -3
  8. package/dist/cjs/helpers/getDates.js.map +1 -1
  9. package/dist/cjs/helpers/getMonthOptions.d.ts +1 -1
  10. package/dist/cjs/helpers/getMonthOptions.js +2 -1
  11. package/dist/cjs/helpers/getMonthOptions.js.map +1 -1
  12. package/dist/cjs/helpers/getMonths.js +5 -2
  13. package/dist/cjs/helpers/getMonths.js.map +1 -1
  14. package/dist/cjs/selection/useRange.js +5 -13
  15. package/dist/cjs/selection/useRange.js.map +1 -1
  16. package/dist/cjs/types/deprecated.d.ts +7 -0
  17. package/dist/cjs/types/deprecated.js +0 -1
  18. package/dist/cjs/types/deprecated.js.map +1 -1
  19. package/dist/cjs/types/props.d.ts +12 -0
  20. package/dist/cjs/useDayPicker.d.ts +8 -1
  21. package/dist/cjs/useDayPicker.js +1 -1
  22. package/dist/cjs/useDayPicker.js.map +1 -1
  23. package/dist/cjs/useGetModifiers.d.ts +2 -0
  24. package/dist/cjs/useGetModifiers.js +2 -17
  25. package/dist/cjs/useGetModifiers.js.map +1 -1
  26. package/dist/cjs/utils/dateMatchModifiers.d.ts +7 -7
  27. package/dist/cjs/utils/dateMatchModifiers.js +7 -7
  28. package/dist/cjs/utils/index.d.ts +3 -0
  29. package/dist/cjs/utils/index.js +3 -0
  30. package/dist/cjs/utils/index.js.map +1 -1
  31. package/dist/cjs/utils/rangeContainsDayOfWeek.d.ts +19 -0
  32. package/dist/cjs/utils/rangeContainsDayOfWeek.js +33 -0
  33. package/dist/cjs/utils/rangeContainsDayOfWeek.js.map +1 -0
  34. package/dist/cjs/utils/rangeContainsModifiers.d.ts +25 -0
  35. package/dist/cjs/utils/rangeContainsModifiers.js +84 -0
  36. package/dist/cjs/utils/rangeContainsModifiers.js.map +1 -0
  37. package/dist/cjs/utils/rangeOverlaps.d.ts +13 -0
  38. package/dist/cjs/utils/rangeOverlaps.js +18 -0
  39. package/dist/cjs/utils/rangeOverlaps.js.map +1 -0
  40. package/dist/esm/DayPicker.js +1 -0
  41. package/dist/esm/DayPicker.js.map +1 -1
  42. package/dist/esm/formatters/formatMonthDropdown.d.ts +2 -1
  43. package/dist/esm/formatters/formatMonthDropdown.js +1 -2
  44. package/dist/esm/formatters/formatMonthDropdown.js.map +1 -1
  45. package/dist/esm/helpers/getDates.d.ts +2 -0
  46. package/dist/esm/helpers/getDates.js +3 -2
  47. package/dist/esm/helpers/getDates.js.map +1 -1
  48. package/dist/esm/helpers/getMonthOptions.d.ts +1 -1
  49. package/dist/esm/helpers/getMonthOptions.js +2 -1
  50. package/dist/esm/helpers/getMonthOptions.js.map +1 -1
  51. package/dist/esm/helpers/getMonths.js +5 -2
  52. package/dist/esm/helpers/getMonths.js.map +1 -1
  53. package/dist/esm/selection/useRange.js +6 -14
  54. package/dist/esm/selection/useRange.js.map +1 -1
  55. package/dist/esm/types/deprecated.d.ts +7 -0
  56. package/dist/esm/types/deprecated.js +0 -1
  57. package/dist/esm/types/deprecated.js.map +1 -1
  58. package/dist/esm/types/props.d.ts +12 -0
  59. package/dist/esm/useDayPicker.d.ts +8 -1
  60. package/dist/esm/useDayPicker.js +1 -1
  61. package/dist/esm/useDayPicker.js.map +1 -1
  62. package/dist/esm/useGetModifiers.d.ts +2 -0
  63. package/dist/esm/useGetModifiers.js +3 -18
  64. package/dist/esm/useGetModifiers.js.map +1 -1
  65. package/dist/esm/utils/dateMatchModifiers.d.ts +7 -7
  66. package/dist/esm/utils/dateMatchModifiers.js +7 -7
  67. package/dist/esm/utils/index.d.ts +3 -0
  68. package/dist/esm/utils/index.js +3 -0
  69. package/dist/esm/utils/index.js.map +1 -1
  70. package/dist/esm/utils/rangeContainsDayOfWeek.d.ts +19 -0
  71. package/dist/esm/utils/rangeContainsDayOfWeek.js +30 -0
  72. package/dist/esm/utils/rangeContainsDayOfWeek.js.map +1 -0
  73. package/dist/esm/utils/rangeContainsModifiers.d.ts +25 -0
  74. package/dist/esm/utils/rangeContainsModifiers.js +81 -0
  75. package/dist/esm/utils/rangeContainsModifiers.js.map +1 -0
  76. package/dist/esm/utils/rangeOverlaps.d.ts +13 -0
  77. package/dist/esm/utils/rangeOverlaps.js +15 -0
  78. package/dist/esm/utils/rangeOverlaps.js.map +1 -0
  79. package/examples/ItalianLabels.tsx +1 -1
  80. package/examples/RangeLong.tsx +1 -3
  81. package/examples/RangeLongExcludeDisabled.tsx +22 -0
  82. package/examples/TestCase2585.test.tsx +11 -0
  83. package/examples/TestCase2585.tsx +20 -0
  84. package/examples/__snapshots__/Range.test.tsx.snap +5 -5
  85. package/examples/index.ts +3 -0
  86. package/package.json +2 -2
  87. package/src/DayPicker.tsx +1 -0
  88. package/src/formatters/formatMonthDropdown.test.ts +5 -1
  89. package/src/formatters/formatMonthDropdown.ts +2 -3
  90. package/src/helpers/getDates.test.ts +30 -3
  91. package/src/helpers/getDates.ts +3 -2
  92. package/src/helpers/getMonthOptions.ts +5 -2
  93. package/src/helpers/getMonths.ts +6 -2
  94. package/src/selection/useRange.tsx +12 -18
  95. package/src/style.css +10 -14
  96. package/src/style.module.css +12 -16
  97. package/src/types/deprecated.ts +15 -0
  98. package/src/types/props.ts +12 -0
  99. package/src/useDayPicker.test.tsx +134 -0
  100. package/src/useDayPicker.ts +8 -1
  101. package/src/useGetModifiers.test.tsx +79 -0
  102. package/src/useGetModifiers.tsx +5 -21
  103. package/src/utils/dateMatchModifiers.ts +7 -7
  104. package/src/utils/index.ts +3 -0
  105. package/src/utils/rangeContainsDayOfWeek.test.ts +48 -0
  106. package/src/utils/rangeContainsDayOfWeek.ts +35 -0
  107. package/src/utils/rangeContainsModifiers.test.ts +230 -0
  108. package/src/utils/rangeContainsModifiers.ts +125 -0
  109. package/src/utils/rangeOverlaps.test.ts +60 -0
  110. package/src/utils/rangeOverlaps.ts +22 -0
  111. package/website/docs/docs/styling.mdx +36 -43
  112. package/website/docs/docs/translation.mdx +1 -1
  113. package/website/docs/guides/custom-components.mdx +16 -15
  114. package/website/docs/upgrading.mdx +29 -28
@@ -1 +1 @@
1
- {"version":3,"file":"useGetModifiers.js","sourceRoot":"","sources":["../../src/useGetModifiers.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useGetModifiers.js","sourceRoot":"","sources":["../../src/useGetModifiers.tsx"],"names":[],"mappings":"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"}
@@ -7,14 +7,14 @@ import type { Matcher } from "../types/index.js";
7
7
  * ```tsx
8
8
  * const date = new Date(2022, 5, 19);
9
9
  * const matcher1: DateRange = {
10
- * from: new Date(2021, 12, 21),
11
- * to: new Date(2021, 12, 30)
12
- * }
10
+ * from: new Date(2021, 12, 21),
11
+ * to: new Date(2021, 12, 30)
12
+ * };
13
13
  * const matcher2: DateRange = {
14
- * from: new Date(2022, 5, 1),
15
- * to: new Date(2022, 5, 23)
16
- * }
17
- * const dateMatchModifiers(date, [matcher1, matcher2]); // true, since day is in the matcher1 range.
14
+ * from: new Date(2022, 5, 1),
15
+ * to: new Date(2022, 5, 23)
16
+ * };
17
+ * dateMatchModifiers(date, [matcher1, matcher2]); // true, since day is in the matcher1 range.
18
18
  * ```
19
19
  *
20
20
  * @group Utilities
@@ -8,14 +8,14 @@ import { isDateAfterType, isDateBeforeType, isDateInterval, isDateRange, isDates
8
8
  * ```tsx
9
9
  * const date = new Date(2022, 5, 19);
10
10
  * const matcher1: DateRange = {
11
- * from: new Date(2021, 12, 21),
12
- * to: new Date(2021, 12, 30)
13
- * }
11
+ * from: new Date(2021, 12, 21),
12
+ * to: new Date(2021, 12, 30)
13
+ * };
14
14
  * const matcher2: DateRange = {
15
- * from: new Date(2022, 5, 1),
16
- * to: new Date(2022, 5, 23)
17
- * }
18
- * const dateMatchModifiers(date, [matcher1, matcher2]); // true, since day is in the matcher1 range.
15
+ * from: new Date(2022, 5, 1),
16
+ * to: new Date(2022, 5, 23)
17
+ * };
18
+ * dateMatchModifiers(date, [matcher1, matcher2]); // true, since day is in the matcher1 range.
19
19
  * ```
20
20
  *
21
21
  * @group Utilities
@@ -1,4 +1,7 @@
1
1
  export * from "./addToRange.js";
2
2
  export * from "./dateMatchModifiers.js";
3
+ export * from "./rangeContainsDayOfWeek.js";
4
+ export * from "./rangeContainsModifiers.js";
3
5
  export * from "./rangeIncludesDate.js";
6
+ export * from "./rangeOverlaps.js";
4
7
  export * from "./typeguards.js";
@@ -1,5 +1,8 @@
1
1
  export * from "./addToRange.js";
2
2
  export * from "./dateMatchModifiers.js";
3
+ export * from "./rangeContainsDayOfWeek.js";
4
+ export * from "./rangeContainsModifiers.js";
3
5
  export * from "./rangeIncludesDate.js";
6
+ export * from "./rangeOverlaps.js";
4
7
  export * from "./typeguards.js";
5
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { type DateLib } from "../classes/DateLib.js";
2
+ /**
3
+ * Returns whether a date range contains one or more days of the week.
4
+ *
5
+ * ```tsx
6
+ * const range: DateRange = {
7
+ * from: new Date(2024, 8, 1), // Sunday
8
+ * to: new Date(2024, 8, 6) // Thursday
9
+ * };
10
+ * rangeContainsDayOfWeek(date, 1); // true: contains range contains Monday
11
+ * ```
12
+ *
13
+ * @since 9.2.2
14
+ * @group Utilities
15
+ */
16
+ export declare function rangeContainsDayOfWeek(range: {
17
+ from: Date;
18
+ to: Date;
19
+ }, dayOfWeek: number | number[], dateLib?: DateLib): boolean;
@@ -0,0 +1,30 @@
1
+ import { defaultDateLib } from "../classes/DateLib.js";
2
+ /**
3
+ * Returns whether a date range contains one or more days of the week.
4
+ *
5
+ * ```tsx
6
+ * const range: DateRange = {
7
+ * from: new Date(2024, 8, 1), // Sunday
8
+ * to: new Date(2024, 8, 6) // Thursday
9
+ * };
10
+ * rangeContainsDayOfWeek(date, 1); // true: contains range contains Monday
11
+ * ```
12
+ *
13
+ * @since 9.2.2
14
+ * @group Utilities
15
+ */
16
+ export function rangeContainsDayOfWeek(range, dayOfWeek, dateLib = defaultDateLib) {
17
+ const dayOfWeekArr = !Array.isArray(dayOfWeek) ? [dayOfWeek] : dayOfWeek;
18
+ let date = range.from;
19
+ const totalDays = dateLib.differenceInCalendarDays(range.to, range.from);
20
+ // iterate at maximum one week or the total days if the range is shorter than one week
21
+ const totalDaysLimit = Math.min(totalDays, 6);
22
+ for (let i = 0; i <= totalDaysLimit; i++) {
23
+ if (dayOfWeekArr.includes(date.getDay())) {
24
+ return true;
25
+ }
26
+ date = dateLib.addDays(date, 1);
27
+ }
28
+ return false;
29
+ }
30
+ //# sourceMappingURL=rangeContainsDayOfWeek.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rangeContainsDayOfWeek.js","sourceRoot":"","sources":["../../../src/utils/rangeContainsDayOfWeek.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAErE;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAA+B,EAC/B,SAA4B,EAC5B,UAAmB,cAAc;IAEjC,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACtB,MAAM,SAAS,GAAG,OAAO,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAEzE,sFAAsF;IACtF,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { type DateLib } from "../classes/DateLib.js";
2
+ import type { Matcher } from "../types/index.js";
3
+ /**
4
+ * Returns whether a range contains dates that match the given modifiers.
5
+ *
6
+ * ```tsx
7
+ * const range: DateRange = {
8
+ * from: new Date(2021, 12, 21),
9
+ * to: new Date(2021, 12, 30)
10
+ * };
11
+ * const matcher1: Date = new Date(2021, 12, 21);
12
+ * const matcher2: DateRange = {
13
+ * from: new Date(2022, 5, 1),
14
+ * to: new Date(2022, 5, 23)
15
+ * };
16
+ * rangeContainsModifiers(range, [matcher1, matcher2]); // true, since matcher1 is in the date.
17
+ * ```
18
+ *
19
+ * @since 9.2.2
20
+ * @group Utilities
21
+ */
22
+ export declare function rangeContainsModifiers(range: {
23
+ from: Date;
24
+ to: Date;
25
+ }, modifiers: Matcher | Matcher[], dateLib?: DateLib): boolean;
@@ -0,0 +1,81 @@
1
+ import { defaultDateLib } from "../classes/DateLib.js";
2
+ import { dateMatchModifiers } from "./dateMatchModifiers.js";
3
+ import { rangeContainsDayOfWeek } from "./rangeContainsDayOfWeek.js";
4
+ import { rangeIncludesDate } from "./rangeIncludesDate.js";
5
+ import { rangeOverlaps } from "./rangeOverlaps.js";
6
+ import { isDateAfterType, isDateBeforeType, isDateInterval, isDateRange, isDatesArray, isDayOfWeekType } from "./typeguards.js";
7
+ /**
8
+ * Returns whether a range contains dates that match the given modifiers.
9
+ *
10
+ * ```tsx
11
+ * const range: DateRange = {
12
+ * from: new Date(2021, 12, 21),
13
+ * to: new Date(2021, 12, 30)
14
+ * };
15
+ * const matcher1: Date = new Date(2021, 12, 21);
16
+ * const matcher2: DateRange = {
17
+ * from: new Date(2022, 5, 1),
18
+ * to: new Date(2022, 5, 23)
19
+ * };
20
+ * rangeContainsModifiers(range, [matcher1, matcher2]); // true, since matcher1 is in the date.
21
+ * ```
22
+ *
23
+ * @since 9.2.2
24
+ * @group Utilities
25
+ */
26
+ export function rangeContainsModifiers(range, modifiers, dateLib = defaultDateLib) {
27
+ const matchers = Array.isArray(modifiers) ? modifiers : [modifiers];
28
+ // Defer function matchers evaluation as they are the least performant.
29
+ const nonFunctionMatchers = matchers.filter((matcher) => typeof matcher !== "function");
30
+ const nonFunctionMatchersResult = nonFunctionMatchers.some((matcher) => {
31
+ if (typeof matcher === "boolean")
32
+ return matcher;
33
+ if (dateLib.isDate(matcher)) {
34
+ return rangeIncludesDate(range, matcher, false, dateLib);
35
+ }
36
+ if (isDatesArray(matcher, dateLib)) {
37
+ return matcher.some((date) => rangeIncludesDate(range, date, false, dateLib));
38
+ }
39
+ if (isDateRange(matcher)) {
40
+ if (matcher.from && matcher.to) {
41
+ return rangeOverlaps(range, { from: matcher.from, to: matcher.to }, dateLib);
42
+ }
43
+ return false;
44
+ }
45
+ if (isDayOfWeekType(matcher)) {
46
+ return rangeContainsDayOfWeek(range, matcher.dayOfWeek, dateLib);
47
+ }
48
+ if (isDateInterval(matcher)) {
49
+ const isClosedInterval = dateLib.isAfter(matcher.before, matcher.after);
50
+ if (isClosedInterval) {
51
+ return rangeOverlaps(range, {
52
+ from: dateLib.addDays(matcher.after, 1),
53
+ to: dateLib.addDays(matcher.before, -1)
54
+ }, dateLib);
55
+ }
56
+ return (dateMatchModifiers(range.from, matcher, dateLib) ||
57
+ dateMatchModifiers(range.to, matcher, dateLib));
58
+ }
59
+ if (isDateAfterType(matcher) || isDateBeforeType(matcher)) {
60
+ return (dateMatchModifiers(range.from, matcher, dateLib) ||
61
+ dateMatchModifiers(range.to, matcher, dateLib));
62
+ }
63
+ return false;
64
+ });
65
+ if (nonFunctionMatchersResult) {
66
+ return true;
67
+ }
68
+ const functionMatchers = matchers.filter((matcher) => typeof matcher === "function");
69
+ if (functionMatchers.length) {
70
+ let date = range.from;
71
+ const totalDays = dateLib.differenceInCalendarDays(range.to, range.from);
72
+ for (let i = 0; i <= totalDays; i++) {
73
+ if (functionMatchers.some((matcher) => matcher(date))) {
74
+ return true;
75
+ }
76
+ date = dateLib.addDays(date, 1);
77
+ }
78
+ }
79
+ return false;
80
+ }
81
+ //# sourceMappingURL=rangeContainsModifiers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rangeContainsModifiers.js","sourceRoot":"","sources":["../../../src/utils/rangeContainsModifiers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Determines whether a given range overlaps with another range.
3
+ *
4
+ * @since 9.2.2
5
+ * @group Utilities
6
+ */
7
+ export declare function rangeOverlaps(rangeLeft: {
8
+ from: Date;
9
+ to: Date;
10
+ }, rangeRight: {
11
+ from: Date;
12
+ to: Date;
13
+ }, dateLib?: import("../classes/DateLib.js").DateLib): boolean;
@@ -0,0 +1,15 @@
1
+ import { defaultDateLib } from "../classes/index.js";
2
+ import { rangeIncludesDate } from "./rangeIncludesDate.js";
3
+ /**
4
+ * Determines whether a given range overlaps with another range.
5
+ *
6
+ * @since 9.2.2
7
+ * @group Utilities
8
+ */
9
+ export function rangeOverlaps(rangeLeft, rangeRight, dateLib = defaultDateLib) {
10
+ return (rangeIncludesDate(rangeLeft, rangeRight.from, false, dateLib) ||
11
+ rangeIncludesDate(rangeLeft, rangeRight.to, false, dateLib) ||
12
+ rangeIncludesDate(rangeRight, rangeLeft.from, false, dateLib) ||
13
+ rangeIncludesDate(rangeRight, rangeLeft.to, false, dateLib));
14
+ }
15
+ //# sourceMappingURL=rangeOverlaps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rangeOverlaps.js","sourceRoot":"","sources":["../../../src/utils/rangeOverlaps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,SAAmC,EACnC,UAAoC,EACpC,OAAO,GAAG,cAAc;IAExB,OAAO,CACL,iBAAiB,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC;QAC7D,iBAAiB,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC;QAC3D,iBAAiB,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC;QAC7D,iBAAiB,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAC5D,CAAC;AACJ,CAAC"}
@@ -10,7 +10,7 @@ export function ItalianLabels() {
10
10
  locale={it}
11
11
  labels={{
12
12
  labelDayButton: (date, { today, selected }) => {
13
- let label = format(date, "PPPP");
13
+ let label = format(date, "PPPP", { locale: it });
14
14
  if (today) label = `Oggi, ${label}`;
15
15
  if (selected) label = `${label}, selezionato`;
16
16
  return label;
@@ -4,7 +4,7 @@ import { type DateRange, DayPicker } from "react-day-picker";
4
4
 
5
5
  export function RangeLong() {
6
6
  const [range, setRange] = useState<DateRange | undefined>({
7
- from: new Date("0001-01-01"),
7
+ from: new Date(100, 0, 1),
8
8
  to: new Date(2024, 9, 10)
9
9
  });
10
10
 
@@ -15,8 +15,6 @@ export function RangeLong() {
15
15
  defaultMonth={new Date(2024, 9)}
16
16
  selected={range}
17
17
  onSelect={setRange}
18
- excludeDisabled
19
- disabled={new Date("2000-01-01")}
20
18
  />
21
19
  );
22
20
  }
@@ -0,0 +1,22 @@
1
+ import React, { useState } from "react";
2
+
3
+ import { type DateRange, DayPicker } from "react-day-picker";
4
+
5
+ export function RangeLongExcludeDisabled() {
6
+ const [range, setRange] = useState<DateRange | undefined>({
7
+ from: new Date(100, 0, 1),
8
+ to: new Date(2024, 9, 10)
9
+ });
10
+
11
+ return (
12
+ <DayPicker
13
+ id="test"
14
+ mode="range"
15
+ defaultMonth={new Date(2024, 9)}
16
+ selected={range}
17
+ onSelect={setRange}
18
+ excludeDisabled
19
+ disabled={new Date(2000, 0, 1)}
20
+ />
21
+ );
22
+ }
@@ -0,0 +1,11 @@
1
+ import React from "react";
2
+
3
+ import { render, screen } from "@/test/render";
4
+
5
+ import { TestCase2585 } from "./TestCase2585";
6
+
7
+ render(<TestCase2585 />);
8
+
9
+ test("should render 42*12 days", () => {
10
+ expect(screen.getAllByRole("cell")).toHaveLength(42 * 12);
11
+ });
@@ -0,0 +1,20 @@
1
+ import React from "react";
2
+
3
+ import { DayPicker } from "react-day-picker";
4
+
5
+ /**
6
+ * Test case for issue #2585
7
+ *
8
+ * @see https://github.com/gpbl/react-day-picker/issues/2585
9
+ */
10
+ export function TestCase2585() {
11
+ return (
12
+ <DayPicker
13
+ defaultMonth={new Date(2026, 1)}
14
+ showOutsideDays
15
+ showWeekNumber
16
+ fixedWeeks
17
+ numberOfMonths={12}
18
+ />
19
+ );
20
+ }
@@ -338,7 +338,7 @@ exports[`should match the snapshot 1`] = `
338
338
  </td>
339
339
  <td
340
340
  aria-selected="true"
341
- class="rdp-day rdp-range_start rdp-selected"
341
+ class="rdp-day rdp-selected rdp-range_start"
342
342
  data-day="2020-06-15"
343
343
  data-selected="true"
344
344
  >
@@ -353,7 +353,7 @@ exports[`should match the snapshot 1`] = `
353
353
  </td>
354
354
  <td
355
355
  aria-selected="true"
356
- class="rdp-day rdp-range_middle rdp-selected"
356
+ class="rdp-day rdp-selected rdp-range_middle"
357
357
  data-day="2020-06-16"
358
358
  data-selected="true"
359
359
  >
@@ -368,7 +368,7 @@ exports[`should match the snapshot 1`] = `
368
368
  </td>
369
369
  <td
370
370
  aria-selected="true"
371
- class="rdp-day rdp-range_middle rdp-selected"
371
+ class="rdp-day rdp-selected rdp-range_middle"
372
372
  data-day="2020-06-17"
373
373
  data-selected="true"
374
374
  >
@@ -383,7 +383,7 @@ exports[`should match the snapshot 1`] = `
383
383
  </td>
384
384
  <td
385
385
  aria-selected="true"
386
- class="rdp-day rdp-range_middle rdp-selected"
386
+ class="rdp-day rdp-selected rdp-range_middle"
387
387
  data-day="2020-06-18"
388
388
  data-selected="true"
389
389
  >
@@ -398,7 +398,7 @@ exports[`should match the snapshot 1`] = `
398
398
  </td>
399
399
  <td
400
400
  aria-selected="true"
401
- class="rdp-day rdp-range_end rdp-selected"
401
+ class="rdp-day rdp-selected rdp-range_end"
402
402
  data-day="2020-06-19"
403
403
  data-selected="true"
404
404
  >
package/examples/index.ts CHANGED
@@ -47,10 +47,12 @@ export * from "./OutsideDays";
47
47
  export * from "./PastDatesDisabled";
48
48
  export * from "./Range";
49
49
  export * from "./RangeExcludeDisabled";
50
+ export * from "./RangeLong";
50
51
  export * from "./RangeMinMax";
51
52
  export * from "./RangeRequired";
52
53
  export * from "./RangeShiftKey";
53
54
  export * from "./RangeLong";
55
+ export * from "./RangeLongExcludeDisabled";
54
56
  export * from "./Rtl";
55
57
  export * from "./Single";
56
58
  export * from "./SingleControlled";
@@ -67,6 +69,7 @@ export * from "./Testcase1567";
67
69
  export * from "./TestCase2047";
68
70
  export * from "./TestCase2389";
69
71
  export * from "./TestCase2511";
72
+ export * from "./TestCase2585";
70
73
  export * from "./TimeZone";
71
74
  export * from "./Utc";
72
75
  export * from "./WeekIso";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-day-picker",
3
- "version": "9.2.1",
3
+ "version": "9.3.1",
4
4
  "description": "Customizable Date Picker for React",
5
5
  "author": "Giampaolo Bellavite <io@gpbl.dev>",
6
6
  "homepage": "https://daypicker.dev",
@@ -173,7 +173,7 @@
173
173
  "locale.d.ts"
174
174
  ],
175
175
  "dependencies": {
176
- "@date-fns/tz": "^1.1.2",
176
+ "@date-fns/tz": "^1.2.0",
177
177
  "date-fns": "^4.1.0"
178
178
  },
179
179
  "devDependencies": {
package/src/DayPicker.tsx CHANGED
@@ -239,6 +239,7 @@ export function DayPicker(props: DayPickerProps) {
239
239
  const dataAttributes = getDataAttributes(props);
240
240
 
241
241
  const contextValue: DayPickerContext<DayPickerProps> = {
242
+ dayPickerProps: props,
242
243
  selected: selectedValue as SelectedValue<DayPickerProps>,
243
244
  select: select as SelectHandler<DayPickerProps>,
244
245
  isSelected,
@@ -1,11 +1,15 @@
1
1
  import { es } from "date-fns/locale/es";
2
2
 
3
+ import { defaultLocale } from "../classes/DateLib";
4
+
3
5
  import { formatMonthDropdown } from "./formatMonthDropdown";
4
6
 
5
7
  const date = new Date(2022, 10, 21);
6
8
 
7
9
  test("should return the formatted month dropdown label", () => {
8
- expect(formatMonthDropdown(date.getMonth())).toEqual("November");
10
+ expect(formatMonthDropdown(date.getMonth(), defaultLocale)).toEqual(
11
+ "November"
12
+ );
9
13
  });
10
14
 
11
15
  describe("when a locale is passed in", () => {
@@ -1,5 +1,4 @@
1
- import type { DateFnsMonth } from "../classes/DateLib.js";
2
- import { defaultLocale } from "../classes/DateLib.js";
1
+ import type { DateFnsMonth, Locale } from "../classes/DateLib.js";
3
2
 
4
3
  /**
5
4
  * Format the month number for the dropdown option label.
@@ -12,7 +11,7 @@ export function formatMonthDropdown(
12
11
  /** The month number to format. */
13
12
  monthNumber: number,
14
13
  /** The locale to use for formatting. */
15
- locale = defaultLocale
14
+ locale: Locale
16
15
  ): string {
17
16
  return locale.localize?.month(monthNumber as DateFnsMonth);
18
17
  }
@@ -58,9 +58,7 @@ describe("when the first month and the last month are the same", () => {
58
58
  const dates = getDates(
59
59
  [month],
60
60
  undefined,
61
- {
62
- fixedWeeks: true
63
- },
61
+ { fixedWeeks: true },
64
62
  defaultDateLib
65
63
  );
66
64
  expect(dates).toHaveLength(42);
@@ -69,6 +67,35 @@ describe("when the first month and the last month are the same", () => {
69
67
  });
70
68
  });
71
69
  });
70
+
71
+ describe("when the month has 4 weeks", () => {
72
+ const month = new Date(2026, 1); // February 2026
73
+ describe("when not using fixed weeks", () => {
74
+ it("should return 28 dates", () => {
75
+ const dates = getDates(
76
+ [month],
77
+ undefined,
78
+ {
79
+ fixedWeeks: false
80
+ },
81
+ defaultDateLib
82
+ );
83
+ expect(dates).toHaveLength(28);
84
+ });
85
+ });
86
+ describe("when using fixed weeks", () => {
87
+ it("should return 42 dates", () => {
88
+ const dates = getDates(
89
+ [month],
90
+ undefined,
91
+ { fixedWeeks: true },
92
+ defaultDateLib
93
+ );
94
+ expect(dates).toHaveLength(42);
95
+ });
96
+ });
97
+ });
98
+
72
99
  describe("when using Monday as first day of the week", () => {
73
100
  const month = new Date(2023, 4, 1);
74
101
  it("the first day should be Monday", () => {
@@ -2,7 +2,7 @@ import { type DateLib } from "../classes/DateLib.js";
2
2
  import { type DayPickerProps } from "../types/props.js";
3
3
 
4
4
  /** The number of days in a month when having 6 weeks. */
5
- const NrOfDaysWithFixedWeeks = 42;
5
+ export const NrOfDaysWithFixedWeeks = 42;
6
6
 
7
7
  /** Return all the dates to display in the calendar. */
8
8
  export function getDates(
@@ -50,7 +50,8 @@ export function getDates(
50
50
  // If fixed weeks is enabled, add the extra dates to the array
51
51
  const extraDates = NrOfDaysWithFixedWeeks * nOfMonths;
52
52
  if (fixedWeeks && dates.length < extraDates) {
53
- for (let i = 0; i < 7; i++) {
53
+ const daysToAdd = extraDates - dates.length;
54
+ for (let i = 0; i < daysToAdd; i++) {
54
55
  const date = addDays(dates[dates.length - 1], 1);
55
56
  dates.push(date);
56
57
  }
@@ -1,4 +1,4 @@
1
- import type { DateLib } from "../classes/DateLib.js";
1
+ import { defaultLocale, type DateLib } from "../classes/DateLib.js";
2
2
  import { DropdownOption } from "../components/Dropdown.js";
3
3
  import type { Formatters } from "../types/index.js";
4
4
 
@@ -26,7 +26,10 @@ export function getMonthOptions(
26
26
  return a - b;
27
27
  });
28
28
  const options = sortedMonths.map((value) => {
29
- const label = formatters.formatMonthDropdown(value, dateLib.options.locale);
29
+ const label = formatters.formatMonthDropdown(
30
+ value,
31
+ dateLib.options.locale ?? defaultLocale
32
+ );
30
33
  const month = dateLib.Date
31
34
  ? new dateLib.Date(year, value)
32
35
  : new Date(year, value);
@@ -2,6 +2,8 @@ import type { DateLib } from "../classes/DateLib.js";
2
2
  import { CalendarWeek, CalendarDay, CalendarMonth } from "../classes/index.js";
3
3
  import type { DayPickerProps } from "../types/index.js";
4
4
 
5
+ import { NrOfDaysWithFixedWeeks } from "./getDates.js";
6
+
5
7
  /** Return the months to display in the calendar. */
6
8
  export function getMonths(
7
9
  /** The months (as dates) to display in the calendar. */
@@ -37,10 +39,12 @@ export function getMonths(
37
39
  return date >= firstDateOfFirstWeek && date <= lastDateOfLastWeek;
38
40
  });
39
41
 
40
- if (props.fixedWeeks && monthDates.length < 42) {
42
+ if (props.fixedWeeks && monthDates.length < NrOfDaysWithFixedWeeks) {
41
43
  const extraDates = dates.filter((date) => {
44
+ const daysToAdd = NrOfDaysWithFixedWeeks - monthDates.length;
42
45
  return (
43
- date > lastDateOfLastWeek && date <= addDays(lastDateOfLastWeek, 7)
46
+ date > lastDateOfLastWeek &&
47
+ date <= addDays(lastDateOfLastWeek, daysToAdd)
44
48
  );
45
49
  });
46
50
  monthDates.push(...extraDates);