react-day-picker 9.6.2 → 9.6.3

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 (177) hide show
  1. package/dist/cjs/DayPicker.js +14 -2
  2. package/dist/cjs/DayPicker.js.map +1 -1
  3. package/dist/cjs/classes/DateLib.js +4 -4
  4. package/dist/cjs/classes/DateLib.js.map +1 -1
  5. package/dist/esm/DayPicker.js +14 -2
  6. package/dist/esm/DayPicker.js.map +1 -1
  7. package/dist/esm/classes/DateLib.js +1 -1
  8. package/dist/esm/classes/DateLib.js.map +1 -1
  9. package/package.json +2 -4
  10. package/src/.eslintignore +1 -0
  11. package/src/.eslintrc.cjs +27 -0
  12. package/src/DayPicker.test.tsx +199 -0
  13. package/src/DayPicker.tsx +629 -0
  14. package/src/UI.ts +365 -0
  15. package/src/classes/CalendarDay.test.ts +17 -0
  16. package/src/classes/CalendarDay.ts +61 -0
  17. package/src/classes/CalendarMonth.test.ts +28 -0
  18. package/src/classes/CalendarMonth.ts +15 -0
  19. package/src/classes/CalendarWeek.test.ts +21 -0
  20. package/src/classes/CalendarWeek.ts +13 -0
  21. package/src/classes/DateLib.ts +615 -0
  22. package/src/classes/index.ts +4 -0
  23. package/src/components/Button.tsx +13 -0
  24. package/src/components/CaptionLabel.tsx +13 -0
  25. package/src/components/Chevron.tsx +42 -0
  26. package/src/components/Day.tsx +28 -0
  27. package/src/components/DayButton.tsx +29 -0
  28. package/src/components/Dropdown.tsx +71 -0
  29. package/src/components/DropdownNav.tsx +13 -0
  30. package/src/components/Footer.tsx +13 -0
  31. package/src/components/Month.tsx +24 -0
  32. package/src/components/MonthCaption.tsx +23 -0
  33. package/src/components/MonthGrid.tsx +13 -0
  34. package/src/components/Months.tsx +13 -0
  35. package/src/components/MonthsDropdown.tsx +16 -0
  36. package/src/components/Nav.tsx +90 -0
  37. package/src/components/NextMonthButton.tsx +18 -0
  38. package/src/components/Option.tsx +13 -0
  39. package/src/components/PreviousMonthButton.tsx +20 -0
  40. package/src/components/Root.tsx +19 -0
  41. package/src/components/Select.tsx +13 -0
  42. package/src/components/Week.tsx +20 -0
  43. package/src/components/WeekNumber.tsx +21 -0
  44. package/src/components/WeekNumberHeader.tsx +15 -0
  45. package/src/components/Weekday.tsx +13 -0
  46. package/src/components/Weekdays.tsx +17 -0
  47. package/src/components/Weeks.tsx +13 -0
  48. package/src/components/YearsDropdown.tsx +16 -0
  49. package/src/components/custom-components.tsx +26 -0
  50. package/src/formatters/formatCaption.test.ts +27 -0
  51. package/src/formatters/formatCaption.ts +23 -0
  52. package/src/formatters/formatDay.test.ts +7 -0
  53. package/src/formatters/formatDay.ts +16 -0
  54. package/src/formatters/formatMonthDropdown.test.ts +19 -0
  55. package/src/formatters/formatMonthDropdown.ts +15 -0
  56. package/src/formatters/formatWeekNumber.test.ts +5 -0
  57. package/src/formatters/formatWeekNumber.ts +13 -0
  58. package/src/formatters/formatWeekNumberHeader.ts +10 -0
  59. package/src/formatters/formatWeekdayName.test.ts +15 -0
  60. package/src/formatters/formatWeekdayName.ts +16 -0
  61. package/src/formatters/formatYearDropdown.test.ts +7 -0
  62. package/src/formatters/formatYearDropdown.ts +21 -0
  63. package/src/formatters/index.ts +7 -0
  64. package/src/helpers/broadcastCalendar.test.ts +43 -0
  65. package/src/helpers/calculateFocusTarget.ts +51 -0
  66. package/src/helpers/endOfBroadcastWeek.test.ts +25 -0
  67. package/src/helpers/endOfBroadcastWeek.ts +16 -0
  68. package/src/helpers/getBroadcastWeeksInMonth.test.ts +23 -0
  69. package/src/helpers/getBroadcastWeeksInMonth.ts +31 -0
  70. package/src/helpers/getClassNamesForModifiers.ts +26 -0
  71. package/src/helpers/getComponents.ts +11 -0
  72. package/src/helpers/getDataAttributes.test.tsx +48 -0
  73. package/src/helpers/getDataAttributes.tsx +21 -0
  74. package/src/helpers/getDates.test.ts +190 -0
  75. package/src/helpers/getDates.ts +64 -0
  76. package/src/helpers/getDays.test.ts +30 -0
  77. package/src/helpers/getDays.ts +16 -0
  78. package/src/helpers/getDefaultClassNames.test.ts +47 -0
  79. package/src/helpers/getDefaultClassNames.ts +33 -0
  80. package/src/helpers/getDisplayMonths.test.ts +44 -0
  81. package/src/helpers/getDisplayMonths.ts +20 -0
  82. package/src/helpers/getFocusableDate.ts +59 -0
  83. package/src/helpers/getFormatters.test.ts +48 -0
  84. package/src/helpers/getFormatters.ts +19 -0
  85. package/src/helpers/getInitialMonth.test.ts +79 -0
  86. package/src/helpers/getInitialMonth.ts +41 -0
  87. package/src/helpers/getLabels.ts +10 -0
  88. package/src/helpers/getMonthOptions.test.ts +226 -0
  89. package/src/helpers/getMonthOptions.ts +37 -0
  90. package/src/helpers/getMonths.test.ts +88 -0
  91. package/src/helpers/getMonths.ts +90 -0
  92. package/src/helpers/getNavMonth.test.ts +253 -0
  93. package/src/helpers/getNavMonth.ts +70 -0
  94. package/src/helpers/getNextFocus.test.tsx +99 -0
  95. package/src/helpers/getNextFocus.tsx +67 -0
  96. package/src/helpers/getNextMonth.test.ts +101 -0
  97. package/src/helpers/getNextMonth.ts +45 -0
  98. package/src/helpers/getPossibleFocusDate.test.ts +144 -0
  99. package/src/helpers/getPreviousMonth.test.ts +77 -0
  100. package/src/helpers/getPreviousMonth.ts +40 -0
  101. package/src/helpers/getStyleForModifiers.test.ts +92 -0
  102. package/src/helpers/getStyleForModifiers.ts +21 -0
  103. package/src/helpers/getWeekdays.test.ts +44 -0
  104. package/src/helpers/getWeekdays.ts +29 -0
  105. package/src/helpers/getWeeks.test.ts +30 -0
  106. package/src/helpers/getWeeks.ts +9 -0
  107. package/src/helpers/getYearOptions.test.ts +46 -0
  108. package/src/helpers/getYearOptions.ts +34 -0
  109. package/src/helpers/index.ts +2 -0
  110. package/src/helpers/startOfBroadcastWeek.test.ts +24 -0
  111. package/src/helpers/startOfBroadcastWeek.ts +19 -0
  112. package/src/helpers/useControlledValue.test.ts +45 -0
  113. package/src/helpers/useControlledValue.ts +33 -0
  114. package/src/index.ts +15 -0
  115. package/src/jalali.tsx +2 -0
  116. package/src/labels/index.ts +12 -0
  117. package/src/labels/labelDayButton.test.ts +41 -0
  118. package/src/labels/labelDayButton.ts +31 -0
  119. package/src/labels/labelGrid.test.ts +7 -0
  120. package/src/labels/labelGrid.ts +23 -0
  121. package/src/labels/labelGridcell.test.ts +7 -0
  122. package/src/labels/labelGridcell.ts +22 -0
  123. package/src/labels/labelMonthDropdown.test.ts +5 -0
  124. package/src/labels/labelMonthDropdown.ts +12 -0
  125. package/src/labels/labelNav.test.ts +5 -0
  126. package/src/labels/labelNav.ts +10 -0
  127. package/src/labels/labelNext.test.ts +5 -0
  128. package/src/labels/labelNext.ts +13 -0
  129. package/src/labels/labelPrevious.test.ts +5 -0
  130. package/src/labels/labelPrevious.ts +13 -0
  131. package/src/labels/labelWeekNumber.test.ts +5 -0
  132. package/src/labels/labelWeekNumber.ts +15 -0
  133. package/src/labels/labelWeekNumberHeader.test.ts +5 -0
  134. package/src/labels/labelWeekNumberHeader.ts +12 -0
  135. package/src/labels/labelWeekday.test.ts +15 -0
  136. package/src/labels/labelWeekday.ts +16 -0
  137. package/src/labels/labelYearDropdown.test.ts +5 -0
  138. package/src/labels/labelYearDropdown.ts +12 -0
  139. package/src/locale.ts +1 -0
  140. package/src/persian.tsx +86 -0
  141. package/src/selection/useMulti.test.tsx +41 -0
  142. package/src/selection/useMulti.tsx +74 -0
  143. package/src/selection/useRange.test.tsx +154 -0
  144. package/src/selection/useRange.tsx +73 -0
  145. package/src/selection/useSingle.test.tsx +38 -0
  146. package/src/selection/useSingle.tsx +69 -0
  147. package/src/types/deprecated.ts +230 -0
  148. package/src/types/index.ts +4 -0
  149. package/src/types/props.test.tsx +71 -0
  150. package/src/types/props.ts +675 -0
  151. package/src/types/selection.ts +57 -0
  152. package/src/types/shared.ts +442 -0
  153. package/src/useAnimation.test.tsx +134 -0
  154. package/src/useAnimation.ts +203 -0
  155. package/src/useCalendar.ts +178 -0
  156. package/src/useDayPicker.test.tsx +142 -0
  157. package/src/useDayPicker.ts +93 -0
  158. package/src/useFocus.ts +87 -0
  159. package/src/useGetModifiers.test.tsx +154 -0
  160. package/src/useGetModifiers.tsx +122 -0
  161. package/src/useSelection.ts +26 -0
  162. package/src/utc.tsx +10 -0
  163. package/src/utils/addToRange.test.ts +117 -0
  164. package/src/utils/addToRange.ts +87 -0
  165. package/src/utils/dateMatchModifiers.test.ts +120 -0
  166. package/src/utils/dateMatchModifiers.ts +88 -0
  167. package/src/utils/index.ts +7 -0
  168. package/src/utils/rangeContainsDayOfWeek.test.ts +48 -0
  169. package/src/utils/rangeContainsDayOfWeek.ts +35 -0
  170. package/src/utils/rangeContainsModifiers.test.ts +230 -0
  171. package/src/utils/rangeContainsModifiers.ts +125 -0
  172. package/src/utils/rangeIncludesDate.test.ts +46 -0
  173. package/src/utils/rangeIncludesDate.ts +43 -0
  174. package/src/utils/rangeOverlaps.test.ts +60 -0
  175. package/src/utils/rangeOverlaps.ts +22 -0
  176. package/src/utils/typeguards.test.ts +83 -0
  177. package/src/utils/typeguards.ts +70 -0
@@ -0,0 +1,22 @@
1
+ import { defaultDateLib } from "../classes/index.js";
2
+
3
+ import { rangeIncludesDate } from "./rangeIncludesDate.js";
4
+
5
+ /**
6
+ * Determines whether a given range overlaps with another range.
7
+ *
8
+ * @since 9.2.2
9
+ * @group Utilities
10
+ */
11
+ export function rangeOverlaps(
12
+ rangeLeft: { from: Date; to: Date },
13
+ rangeRight: { from: Date; to: Date },
14
+ dateLib = defaultDateLib
15
+ ): boolean {
16
+ return (
17
+ rangeIncludesDate(rangeLeft, rangeRight.from, false, dateLib) ||
18
+ rangeIncludesDate(rangeLeft, rangeRight.to, false, dateLib) ||
19
+ rangeIncludesDate(rangeRight, rangeLeft.from, false, dateLib) ||
20
+ rangeIncludesDate(rangeRight, rangeLeft.to, false, dateLib)
21
+ );
22
+ }
@@ -0,0 +1,83 @@
1
+ import { defaultDateLib } from "../classes/DateLib.js";
2
+ import type {
3
+ DateInterval,
4
+ DateRange,
5
+ DateAfter,
6
+ DateBefore,
7
+ DayOfWeek
8
+ } from "../types/index.js";
9
+
10
+ import {
11
+ isDateInterval,
12
+ isDateRange,
13
+ isDateAfterType,
14
+ isDateBeforeType,
15
+ isDayOfWeekType,
16
+ isDatesArray
17
+ } from "./typeguards.js";
18
+
19
+ test("isDateInterval return true for valid DateInterval", () => {
20
+ const validInterval: DateInterval = { before: new Date(), after: new Date() };
21
+ expect(isDateInterval(validInterval)).toBe(true);
22
+ });
23
+
24
+ test("isDateInterval return false for invalid DateInterval", () => {
25
+ expect(isDateInterval({})).toBe(false);
26
+ expect(isDateInterval(null)).toBe(false);
27
+ expect(isDateInterval(undefined)).toBe(false);
28
+ });
29
+
30
+ test("isDateRange return true for valid DateRange", () => {
31
+ const validRange: DateRange = { from: new Date() };
32
+ expect(isDateRange(validRange)).toBe(true);
33
+ });
34
+
35
+ test("isDateRange return false for invalid DateRange", () => {
36
+ expect(isDateRange({})).toBe(false);
37
+ expect(isDateRange(null)).toBe(false);
38
+ expect(isDateRange(undefined)).toBe(false);
39
+ });
40
+
41
+ test("isDateAfterType return true for valid DateAfter", () => {
42
+ const validAfter: DateAfter = { after: new Date() };
43
+ expect(isDateAfterType(validAfter)).toBe(true);
44
+ });
45
+
46
+ test("isDateAfterType return false for invalid DateAfter", () => {
47
+ expect(isDateAfterType({})).toBe(false);
48
+ expect(isDateAfterType(null)).toBe(false);
49
+ expect(isDateAfterType(undefined)).toBe(false);
50
+ });
51
+
52
+ test("isDateBeforeType return true for valid DateBefore", () => {
53
+ const validBefore: DateBefore = { before: new Date() };
54
+ expect(isDateBeforeType(validBefore)).toBe(true);
55
+ });
56
+
57
+ test("isDateBeforeType return false for invalid DateBefore", () => {
58
+ expect(isDateBeforeType({})).toBe(false);
59
+ expect(isDateBeforeType(null)).toBe(false);
60
+ expect(isDateBeforeType(undefined)).toBe(false);
61
+ });
62
+
63
+ test("isDayOfWeekType return true for valid DayOfWeek", () => {
64
+ const validDayOfWeek: DayOfWeek = { dayOfWeek: [1] };
65
+ expect(isDayOfWeekType(validDayOfWeek)).toBe(true);
66
+ });
67
+
68
+ test("isDayOfWeekType return false for invalid DayOfWeek", () => {
69
+ expect(isDayOfWeekType({})).toBe(false);
70
+ expect(isDayOfWeekType(null)).toBe(false);
71
+ expect(isDayOfWeekType(undefined)).toBe(false);
72
+ });
73
+
74
+ test("isDatesArray return true for valid array of dates", () => {
75
+ const validDatesArray: Date[] = [new Date(), new Date()];
76
+ expect(isDatesArray(validDatesArray, defaultDateLib)).toBe(true);
77
+ });
78
+
79
+ test("isDatesArray return false for invalid array of dates", () => {
80
+ expect(isDatesArray([{}, {}], defaultDateLib)).toBe(false);
81
+ expect(isDatesArray(null, defaultDateLib)).toBe(false);
82
+ expect(isDatesArray(undefined, defaultDateLib)).toBe(false);
83
+ });
@@ -0,0 +1,70 @@
1
+ import type { DateLib } from "../classes/DateLib.js";
2
+ import type {
3
+ DateAfter,
4
+ DateBefore,
5
+ DateInterval,
6
+ DateRange,
7
+ DayOfWeek
8
+ } from "../types/index.js";
9
+
10
+ /**
11
+ * Returns true if `matcher` is of type {@link DateInterval}.
12
+ *
13
+ * @group Utilities
14
+ */
15
+ export function isDateInterval(matcher: unknown): matcher is DateInterval {
16
+ return Boolean(
17
+ matcher &&
18
+ typeof matcher === "object" &&
19
+ "before" in matcher &&
20
+ "after" in matcher
21
+ );
22
+ }
23
+
24
+ /**
25
+ * Returns true if `value` is a {@link DateRange} type.
26
+ *
27
+ * @group Utilities
28
+ */
29
+ export function isDateRange(value: unknown): value is DateRange {
30
+ return Boolean(value && typeof value === "object" && "from" in value);
31
+ }
32
+
33
+ /**
34
+ * Returns true if `value` is of type {@link DateAfter}.
35
+ *
36
+ * @group Utilities
37
+ */
38
+ export function isDateAfterType(value: unknown): value is DateAfter {
39
+ return Boolean(value && typeof value === "object" && "after" in value);
40
+ }
41
+
42
+ /**
43
+ * Returns true if `value` is of type {@link DateBefore}.
44
+ *
45
+ * @group Utilities
46
+ */
47
+ export function isDateBeforeType(value: unknown): value is DateBefore {
48
+ return Boolean(value && typeof value === "object" && "before" in value);
49
+ }
50
+
51
+ /**
52
+ * Returns true if `value` is a {@link DayOfWeek} type.
53
+ *
54
+ * @group Utilities
55
+ */
56
+ export function isDayOfWeekType(value: unknown): value is DayOfWeek {
57
+ return Boolean(value && typeof value === "object" && "dayOfWeek" in value);
58
+ }
59
+
60
+ /**
61
+ * Returns true if `value` is an array of valid dates.
62
+ *
63
+ * @private
64
+ */
65
+ export function isDatesArray(
66
+ value: unknown,
67
+ dateLib: DateLib
68
+ ): value is Date[] {
69
+ return Array.isArray(value) && value.every(dateLib.isDate);
70
+ }