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.
- package/dist/cjs/DayPicker.js +14 -2
- package/dist/cjs/DayPicker.js.map +1 -1
- package/dist/cjs/classes/DateLib.js +4 -4
- package/dist/cjs/classes/DateLib.js.map +1 -1
- package/dist/esm/DayPicker.js +14 -2
- package/dist/esm/DayPicker.js.map +1 -1
- package/dist/esm/classes/DateLib.js +1 -1
- package/dist/esm/classes/DateLib.js.map +1 -1
- package/package.json +2 -4
- package/src/.eslintignore +1 -0
- package/src/.eslintrc.cjs +27 -0
- package/src/DayPicker.test.tsx +199 -0
- package/src/DayPicker.tsx +629 -0
- package/src/UI.ts +365 -0
- package/src/classes/CalendarDay.test.ts +17 -0
- package/src/classes/CalendarDay.ts +61 -0
- package/src/classes/CalendarMonth.test.ts +28 -0
- package/src/classes/CalendarMonth.ts +15 -0
- package/src/classes/CalendarWeek.test.ts +21 -0
- package/src/classes/CalendarWeek.ts +13 -0
- package/src/classes/DateLib.ts +615 -0
- package/src/classes/index.ts +4 -0
- package/src/components/Button.tsx +13 -0
- package/src/components/CaptionLabel.tsx +13 -0
- package/src/components/Chevron.tsx +42 -0
- package/src/components/Day.tsx +28 -0
- package/src/components/DayButton.tsx +29 -0
- package/src/components/Dropdown.tsx +71 -0
- package/src/components/DropdownNav.tsx +13 -0
- package/src/components/Footer.tsx +13 -0
- package/src/components/Month.tsx +24 -0
- package/src/components/MonthCaption.tsx +23 -0
- package/src/components/MonthGrid.tsx +13 -0
- package/src/components/Months.tsx +13 -0
- package/src/components/MonthsDropdown.tsx +16 -0
- package/src/components/Nav.tsx +90 -0
- package/src/components/NextMonthButton.tsx +18 -0
- package/src/components/Option.tsx +13 -0
- package/src/components/PreviousMonthButton.tsx +20 -0
- package/src/components/Root.tsx +19 -0
- package/src/components/Select.tsx +13 -0
- package/src/components/Week.tsx +20 -0
- package/src/components/WeekNumber.tsx +21 -0
- package/src/components/WeekNumberHeader.tsx +15 -0
- package/src/components/Weekday.tsx +13 -0
- package/src/components/Weekdays.tsx +17 -0
- package/src/components/Weeks.tsx +13 -0
- package/src/components/YearsDropdown.tsx +16 -0
- package/src/components/custom-components.tsx +26 -0
- package/src/formatters/formatCaption.test.ts +27 -0
- package/src/formatters/formatCaption.ts +23 -0
- package/src/formatters/formatDay.test.ts +7 -0
- package/src/formatters/formatDay.ts +16 -0
- package/src/formatters/formatMonthDropdown.test.ts +19 -0
- package/src/formatters/formatMonthDropdown.ts +15 -0
- package/src/formatters/formatWeekNumber.test.ts +5 -0
- package/src/formatters/formatWeekNumber.ts +13 -0
- package/src/formatters/formatWeekNumberHeader.ts +10 -0
- package/src/formatters/formatWeekdayName.test.ts +15 -0
- package/src/formatters/formatWeekdayName.ts +16 -0
- package/src/formatters/formatYearDropdown.test.ts +7 -0
- package/src/formatters/formatYearDropdown.ts +21 -0
- package/src/formatters/index.ts +7 -0
- package/src/helpers/broadcastCalendar.test.ts +43 -0
- package/src/helpers/calculateFocusTarget.ts +51 -0
- package/src/helpers/endOfBroadcastWeek.test.ts +25 -0
- package/src/helpers/endOfBroadcastWeek.ts +16 -0
- package/src/helpers/getBroadcastWeeksInMonth.test.ts +23 -0
- package/src/helpers/getBroadcastWeeksInMonth.ts +31 -0
- package/src/helpers/getClassNamesForModifiers.ts +26 -0
- package/src/helpers/getComponents.ts +11 -0
- package/src/helpers/getDataAttributes.test.tsx +48 -0
- package/src/helpers/getDataAttributes.tsx +21 -0
- package/src/helpers/getDates.test.ts +190 -0
- package/src/helpers/getDates.ts +64 -0
- package/src/helpers/getDays.test.ts +30 -0
- package/src/helpers/getDays.ts +16 -0
- package/src/helpers/getDefaultClassNames.test.ts +47 -0
- package/src/helpers/getDefaultClassNames.ts +33 -0
- package/src/helpers/getDisplayMonths.test.ts +44 -0
- package/src/helpers/getDisplayMonths.ts +20 -0
- package/src/helpers/getFocusableDate.ts +59 -0
- package/src/helpers/getFormatters.test.ts +48 -0
- package/src/helpers/getFormatters.ts +19 -0
- package/src/helpers/getInitialMonth.test.ts +79 -0
- package/src/helpers/getInitialMonth.ts +41 -0
- package/src/helpers/getLabels.ts +10 -0
- package/src/helpers/getMonthOptions.test.ts +226 -0
- package/src/helpers/getMonthOptions.ts +37 -0
- package/src/helpers/getMonths.test.ts +88 -0
- package/src/helpers/getMonths.ts +90 -0
- package/src/helpers/getNavMonth.test.ts +253 -0
- package/src/helpers/getNavMonth.ts +70 -0
- package/src/helpers/getNextFocus.test.tsx +99 -0
- package/src/helpers/getNextFocus.tsx +67 -0
- package/src/helpers/getNextMonth.test.ts +101 -0
- package/src/helpers/getNextMonth.ts +45 -0
- package/src/helpers/getPossibleFocusDate.test.ts +144 -0
- package/src/helpers/getPreviousMonth.test.ts +77 -0
- package/src/helpers/getPreviousMonth.ts +40 -0
- package/src/helpers/getStyleForModifiers.test.ts +92 -0
- package/src/helpers/getStyleForModifiers.ts +21 -0
- package/src/helpers/getWeekdays.test.ts +44 -0
- package/src/helpers/getWeekdays.ts +29 -0
- package/src/helpers/getWeeks.test.ts +30 -0
- package/src/helpers/getWeeks.ts +9 -0
- package/src/helpers/getYearOptions.test.ts +46 -0
- package/src/helpers/getYearOptions.ts +34 -0
- package/src/helpers/index.ts +2 -0
- package/src/helpers/startOfBroadcastWeek.test.ts +24 -0
- package/src/helpers/startOfBroadcastWeek.ts +19 -0
- package/src/helpers/useControlledValue.test.ts +45 -0
- package/src/helpers/useControlledValue.ts +33 -0
- package/src/index.ts +15 -0
- package/src/jalali.tsx +2 -0
- package/src/labels/index.ts +12 -0
- package/src/labels/labelDayButton.test.ts +41 -0
- package/src/labels/labelDayButton.ts +31 -0
- package/src/labels/labelGrid.test.ts +7 -0
- package/src/labels/labelGrid.ts +23 -0
- package/src/labels/labelGridcell.test.ts +7 -0
- package/src/labels/labelGridcell.ts +22 -0
- package/src/labels/labelMonthDropdown.test.ts +5 -0
- package/src/labels/labelMonthDropdown.ts +12 -0
- package/src/labels/labelNav.test.ts +5 -0
- package/src/labels/labelNav.ts +10 -0
- package/src/labels/labelNext.test.ts +5 -0
- package/src/labels/labelNext.ts +13 -0
- package/src/labels/labelPrevious.test.ts +5 -0
- package/src/labels/labelPrevious.ts +13 -0
- package/src/labels/labelWeekNumber.test.ts +5 -0
- package/src/labels/labelWeekNumber.ts +15 -0
- package/src/labels/labelWeekNumberHeader.test.ts +5 -0
- package/src/labels/labelWeekNumberHeader.ts +12 -0
- package/src/labels/labelWeekday.test.ts +15 -0
- package/src/labels/labelWeekday.ts +16 -0
- package/src/labels/labelYearDropdown.test.ts +5 -0
- package/src/labels/labelYearDropdown.ts +12 -0
- package/src/locale.ts +1 -0
- package/src/persian.tsx +86 -0
- package/src/selection/useMulti.test.tsx +41 -0
- package/src/selection/useMulti.tsx +74 -0
- package/src/selection/useRange.test.tsx +154 -0
- package/src/selection/useRange.tsx +73 -0
- package/src/selection/useSingle.test.tsx +38 -0
- package/src/selection/useSingle.tsx +69 -0
- package/src/types/deprecated.ts +230 -0
- package/src/types/index.ts +4 -0
- package/src/types/props.test.tsx +71 -0
- package/src/types/props.ts +675 -0
- package/src/types/selection.ts +57 -0
- package/src/types/shared.ts +442 -0
- package/src/useAnimation.test.tsx +134 -0
- package/src/useAnimation.ts +203 -0
- package/src/useCalendar.ts +178 -0
- package/src/useDayPicker.test.tsx +142 -0
- package/src/useDayPicker.ts +93 -0
- package/src/useFocus.ts +87 -0
- package/src/useGetModifiers.test.tsx +154 -0
- package/src/useGetModifiers.tsx +122 -0
- package/src/useSelection.ts +26 -0
- package/src/utc.tsx +10 -0
- package/src/utils/addToRange.test.ts +117 -0
- package/src/utils/addToRange.ts +87 -0
- package/src/utils/dateMatchModifiers.test.ts +120 -0
- package/src/utils/dateMatchModifiers.ts +88 -0
- package/src/utils/index.ts +7 -0
- package/src/utils/rangeContainsDayOfWeek.test.ts +48 -0
- package/src/utils/rangeContainsDayOfWeek.ts +35 -0
- package/src/utils/rangeContainsModifiers.test.ts +230 -0
- package/src/utils/rangeContainsModifiers.ts +125 -0
- package/src/utils/rangeIncludesDate.test.ts +46 -0
- package/src/utils/rangeIncludesDate.ts +43 -0
- package/src/utils/rangeOverlaps.test.ts +60 -0
- package/src/utils/rangeOverlaps.ts +22 -0
- package/src/utils/typeguards.test.ts +83 -0
- 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
|
+
}
|