react-day-picker 9.0.7 → 9.0.9
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 +8 -3
- package/dist/cjs/DayPicker.js.map +1 -1
- package/dist/cjs/components/Chevron.d.ts +1 -0
- package/dist/cjs/helpers/getFormatters.d.ts +5 -5
- package/dist/cjs/types/shared.d.ts +11 -9
- package/dist/cjs/useCalendar.js +3 -28
- package/dist/cjs/useCalendar.js.map +1 -1
- package/dist/cjs/useDayPicker.d.ts +11 -1
- package/dist/cjs/useDayPicker.js.map +1 -1
- package/dist/cjs/useGetModifiers.js +16 -16
- package/dist/cjs/useGetModifiers.js.map +1 -1
- package/dist/cjs/utils/dateMatchModifiers.d.ts +8 -3
- package/dist/cjs/utils/dateMatchModifiers.js +10 -3
- package/dist/cjs/utils/dateMatchModifiers.js.map +1 -1
- package/dist/cjs/utils/typeguards.d.ts +5 -1
- package/dist/cjs/utils/typeguards.js +5 -1
- package/dist/cjs/utils/typeguards.js.map +1 -1
- package/dist/esm/DayPicker.js +8 -3
- package/dist/esm/DayPicker.js.map +1 -1
- package/dist/esm/components/Chevron.d.ts +1 -0
- package/dist/esm/helpers/getFormatters.d.ts +5 -5
- package/dist/esm/types/shared.d.ts +11 -9
- package/dist/esm/useCalendar.js +3 -28
- package/dist/esm/useCalendar.js.map +1 -1
- package/dist/esm/useDayPicker.d.ts +11 -1
- package/dist/esm/useDayPicker.js.map +1 -1
- package/dist/esm/useGetModifiers.js +16 -16
- package/dist/esm/useGetModifiers.js.map +1 -1
- package/dist/esm/utils/dateMatchModifiers.d.ts +8 -3
- package/dist/esm/utils/dateMatchModifiers.js +9 -3
- package/dist/esm/utils/dateMatchModifiers.js.map +1 -1
- package/dist/esm/utils/typeguards.d.ts +5 -1
- package/dist/esm/utils/typeguards.js +5 -1
- package/dist/esm/utils/typeguards.js.map +1 -1
- package/examples/TestCase2389.test.tsx +41 -0
- package/examples/TestCase2389.tsx +18 -0
- package/examples/index.ts +1 -0
- package/package.json +9 -9
- package/src/DayPicker.test.tsx +1 -15
- package/src/DayPicker.tsx +8 -1
- package/src/components/Chevron.tsx +2 -0
- package/src/style.css +13 -18
- package/src/style.module.css +13 -18
- package/src/types/shared.ts +11 -8
- package/src/useCalendar.ts +7 -43
- package/src/useDayPicker.ts +18 -1
- package/src/useGetModifiers.tsx +16 -16
- package/src/utils/dateMatchModifiers.ts +10 -3
- package/src/utils/typeguards.ts +5 -1
- package/website/docs/docs/styling.mdx +1 -1
- package/website/docs/guides/input-fields.mdx +1 -1
- package/website/docs/upgrading.mdx +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { CSSProperties } from "react";
|
|
2
2
|
import { UI, DayFlag, SelectionState } from "../UI.js";
|
|
3
3
|
import * as components from "../components/custom-components.js";
|
|
4
|
-
import { formatCaption, formatDay, formatMonthCaption, formatMonthDropdown, formatWeekdayName, formatWeekNumber, formatYearCaption, formatYearDropdown } from "../formatters/index.js";
|
|
4
|
+
import { formatCaption, formatDay, formatMonthCaption, formatMonthDropdown, formatWeekdayName, formatWeekNumber, formatWeekNumberHeader, formatYearCaption, formatYearDropdown } from "../formatters/index.js";
|
|
5
5
|
import { labelDayButton, labelNav, labelGrid, labelGridcell, labelMonthDropdown, labelNext, labelPrevious, labelWeekday, labelWeekNumber, labelWeekNumberHeader, labelYearDropdown } from "../labels/index.js";
|
|
6
6
|
import { dateLib } from "../lib/index.js";
|
|
7
7
|
/**
|
|
@@ -71,20 +71,22 @@ export type DateLib = typeof dateLib;
|
|
|
71
71
|
export type Formatters = {
|
|
72
72
|
/** Format the caption of a month grid. */
|
|
73
73
|
formatCaption: typeof formatCaption;
|
|
74
|
-
/** @deprecated Use {@link Formatters.formatCaption} instead. */
|
|
75
|
-
formatMonthCaption: typeof formatMonthCaption;
|
|
76
|
-
/** Format the label in the month dropdown. */
|
|
77
|
-
formatMonthDropdown: typeof formatMonthDropdown;
|
|
78
|
-
/** @deprecated Use {@link Formatters.formatYearDropdown} instead. */
|
|
79
|
-
formatYearCaption: typeof formatYearCaption;
|
|
80
|
-
/** Format the label in the year dropdown. */
|
|
81
|
-
formatYearDropdown: typeof formatYearDropdown;
|
|
82
74
|
/** Format the day in the day cell. */
|
|
83
75
|
formatDay: typeof formatDay;
|
|
76
|
+
/** Format the label in the month dropdown. */
|
|
77
|
+
formatMonthDropdown: typeof formatMonthDropdown;
|
|
78
|
+
/** @deprecated Use {@link Formatters.formatCaption} instead. */
|
|
79
|
+
formatMonthCaption: typeof formatMonthCaption;
|
|
84
80
|
/** Format the week number. */
|
|
85
81
|
formatWeekNumber: typeof formatWeekNumber;
|
|
82
|
+
/** Format the header of the week number column. */
|
|
83
|
+
formatWeekNumberHeader: typeof formatWeekNumberHeader;
|
|
86
84
|
/** Format the week day name in the header. */
|
|
87
85
|
formatWeekdayName: typeof formatWeekdayName;
|
|
86
|
+
/** Format the label in the year dropdown. */
|
|
87
|
+
formatYearDropdown: typeof formatYearDropdown;
|
|
88
|
+
/** @deprecated Use {@link Formatters.formatYearDropdown} instead. */
|
|
89
|
+
formatYearCaption: typeof formatYearCaption;
|
|
88
90
|
};
|
|
89
91
|
/** Map of functions to translate ARIA labels for the relative elements. */
|
|
90
92
|
export type Labels = {
|
package/dist/esm/useCalendar.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { useEffect, useState } from "react";
|
|
2
1
|
import { getDates } from "./helpers/getDates.js";
|
|
3
2
|
import { getDays } from "./helpers/getDays.js";
|
|
4
3
|
import { getDisplayMonths } from "./helpers/getDisplayMonths.js";
|
|
@@ -8,37 +7,13 @@ import { getNavMonths } from "./helpers/getNavMonth.js";
|
|
|
8
7
|
import { getNextMonth } from "./helpers/getNextMonth.js";
|
|
9
8
|
import { getPreviousMonth } from "./helpers/getPreviousMonth.js";
|
|
10
9
|
import { getWeeks } from "./helpers/getWeeks.js";
|
|
10
|
+
import { useControlledValue } from "./helpers/useControlledValue.js";
|
|
11
11
|
/** @private */
|
|
12
12
|
export function useCalendar(props, dateLib) {
|
|
13
|
-
const { fromYear, toYear, startMonth, endMonth, today, numberOfMonths, month, defaultMonth } = props;
|
|
14
13
|
const [navStart, navEnd] = getNavMonths(props, dateLib);
|
|
15
14
|
const { startOfMonth, endOfMonth } = dateLib;
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
const [firstMonth, setFirstMonth] = useState(initialDisplayMonth);
|
|
19
|
-
useEffect(() => {
|
|
20
|
-
const initialDisplayMonth = getInitialMonth({
|
|
21
|
-
fromYear,
|
|
22
|
-
toYear,
|
|
23
|
-
startMonth,
|
|
24
|
-
endMonth,
|
|
25
|
-
month,
|
|
26
|
-
defaultMonth,
|
|
27
|
-
today,
|
|
28
|
-
numberOfMonths
|
|
29
|
-
}, dateLib);
|
|
30
|
-
setFirstMonth(initialDisplayMonth);
|
|
31
|
-
}, [
|
|
32
|
-
dateLib,
|
|
33
|
-
defaultMonth,
|
|
34
|
-
endMonth,
|
|
35
|
-
fromYear,
|
|
36
|
-
month,
|
|
37
|
-
numberOfMonths,
|
|
38
|
-
startMonth,
|
|
39
|
-
toYear,
|
|
40
|
-
today
|
|
41
|
-
]);
|
|
15
|
+
const initialMonth = getInitialMonth(props, dateLib);
|
|
16
|
+
const [firstMonth, setFirstMonth] = useControlledValue(initialMonth, props.month ? startOfMonth(props.month) : undefined);
|
|
42
17
|
/** The months displayed in the calendar. */
|
|
43
18
|
const displayMonths = getDisplayMonths(firstMonth, navEnd, props, dateLib);
|
|
44
19
|
/** The dates displayed in the calendar. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCalendar.js","sourceRoot":"","sources":["../../src/useCalendar.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useCalendar.js","sourceRoot":"","sources":["../../src/useCalendar.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { CalendarDay } from "./classes/CalendarDay.js";
|
|
|
2
2
|
import { CalendarMonth } from "./classes/CalendarMonth.js";
|
|
3
3
|
import type { DayPickerProps } from "./types/props.js";
|
|
4
4
|
import type { SelectedValue, SelectHandler } from "./types/selection.js";
|
|
5
|
-
import { Modifiers } from "./types/shared.js";
|
|
5
|
+
import { ClassNames, CustomComponents, Formatters, Labels, Modifiers, Styles } from "./types/shared.js";
|
|
6
6
|
/** @private */
|
|
7
7
|
export declare const dayPickerContext: import("react").Context<DayPickerContext<DayPickerProps> | undefined>;
|
|
8
8
|
export type DayPickerContext<T extends DayPickerProps> = {
|
|
@@ -22,6 +22,16 @@ export type DayPickerContext<T extends DayPickerProps> = {
|
|
|
22
22
|
select: SelectHandler<T> | undefined;
|
|
23
23
|
/** Whether the given date is selected. */
|
|
24
24
|
isSelected: ((date: Date) => boolean) | undefined;
|
|
25
|
+
/** The components used internally by DayP. */
|
|
26
|
+
components: CustomComponents;
|
|
27
|
+
/** The class names for the UI elements. */
|
|
28
|
+
classNames: ClassNames;
|
|
29
|
+
/** The styles for the UI elements. */
|
|
30
|
+
styles: Partial<Styles> | undefined;
|
|
31
|
+
/** The labels used in the UI. */
|
|
32
|
+
labels: Labels;
|
|
33
|
+
/** The formatters used to format the UI elements. */
|
|
34
|
+
formatters: Formatters;
|
|
25
35
|
};
|
|
26
36
|
/**
|
|
27
37
|
* Return the context to work with `<DayPicker />` inside custom components.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDayPicker.js","sourceRoot":"","sources":["../../src/useDayPicker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useDayPicker.js","sourceRoot":"","sources":["../../src/useDayPicker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAelD,eAAe;AACf,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAE3C,SAAS,CAAC,CAAC;AA+Bb;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAA2B,KAAS;IAC9D,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC7C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,OAA8B,CAAC;AACxC,CAAC"}
|
|
@@ -8,15 +8,15 @@ import { dateMatchModifiers } from "./utils/dateMatchModifiers.js";
|
|
|
8
8
|
export function useGetModifiers(days, props, dateLib) {
|
|
9
9
|
const { disabled, hidden, modifiers, showOutsideDays, today } = props;
|
|
10
10
|
const { isSameDay, isSameMonth, Date } = dateLib;
|
|
11
|
-
const
|
|
11
|
+
const internalModifiersMap = {
|
|
12
12
|
[DayFlag.focused]: [],
|
|
13
13
|
[DayFlag.outside]: [],
|
|
14
14
|
[DayFlag.disabled]: [],
|
|
15
15
|
[DayFlag.hidden]: [],
|
|
16
16
|
[DayFlag.today]: []
|
|
17
17
|
};
|
|
18
|
-
const
|
|
19
|
-
const
|
|
18
|
+
const customModifiersMap = {};
|
|
19
|
+
const selectionModifiersMap = {
|
|
20
20
|
[SelectionState.range_end]: [],
|
|
21
21
|
[SelectionState.range_middle]: [],
|
|
22
22
|
[SelectionState.range_start]: [],
|
|
@@ -30,13 +30,13 @@ export function useGetModifiers(days, props, dateLib) {
|
|
|
30
30
|
(!showOutsideDays && isOutside);
|
|
31
31
|
const isToday = isSameDay(date, today ?? new Date());
|
|
32
32
|
if (isOutside)
|
|
33
|
-
|
|
33
|
+
internalModifiersMap.outside.push(day);
|
|
34
34
|
if (isDisabled)
|
|
35
|
-
|
|
35
|
+
internalModifiersMap.disabled.push(day);
|
|
36
36
|
if (isHidden)
|
|
37
|
-
|
|
37
|
+
internalModifiersMap.hidden.push(day);
|
|
38
38
|
if (isToday)
|
|
39
|
-
|
|
39
|
+
internalModifiersMap.today.push(day);
|
|
40
40
|
// Add custom modifiers
|
|
41
41
|
if (modifiers) {
|
|
42
42
|
Object.keys(modifiers).forEach((name) => {
|
|
@@ -46,11 +46,11 @@ export function useGetModifiers(days, props, dateLib) {
|
|
|
46
46
|
: false;
|
|
47
47
|
if (!isMatch)
|
|
48
48
|
return;
|
|
49
|
-
if (
|
|
50
|
-
|
|
49
|
+
if (customModifiersMap[name]) {
|
|
50
|
+
customModifiersMap[name].push(day);
|
|
51
51
|
}
|
|
52
52
|
else {
|
|
53
|
-
|
|
53
|
+
customModifiersMap[name] = [day];
|
|
54
54
|
}
|
|
55
55
|
});
|
|
56
56
|
}
|
|
@@ -72,16 +72,16 @@ export function useGetModifiers(days, props, dateLib) {
|
|
|
72
72
|
};
|
|
73
73
|
const customModifiers = {};
|
|
74
74
|
// Find the modifiers for the given day
|
|
75
|
-
for (const name in
|
|
76
|
-
const days =
|
|
75
|
+
for (const name in internalModifiersMap) {
|
|
76
|
+
const days = internalModifiersMap[name];
|
|
77
77
|
dayFlags[name] = days.some((d) => d === day);
|
|
78
78
|
}
|
|
79
|
-
for (const name in
|
|
80
|
-
const days =
|
|
79
|
+
for (const name in selectionModifiersMap) {
|
|
80
|
+
const days = selectionModifiersMap[name];
|
|
81
81
|
selectionStates[name] = days.some((d) => d === day);
|
|
82
82
|
}
|
|
83
|
-
for (const name in
|
|
84
|
-
customModifiers[name] =
|
|
83
|
+
for (const name in customModifiersMap) {
|
|
84
|
+
customModifiers[name] = customModifiersMap[name].some((d) => d === day);
|
|
85
85
|
}
|
|
86
86
|
return {
|
|
87
87
|
...selectionStates,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGetModifiers.js","sourceRoot":"","sources":["../../src/useGetModifiers.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGlD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAmB,EACnB,KAAqB,EACrB,OAAgB;IAEhB,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAEtE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAEjD,MAAM,
|
|
1
|
+
{"version":3,"file":"useGetModifiers.js","sourceRoot":"","sources":["../../src/useGetModifiers.tsx"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import type { DateLib, Matcher } from "../types/index.js";
|
|
|
4
4
|
* {@link Matcher}.
|
|
5
5
|
*
|
|
6
6
|
* ```tsx
|
|
7
|
-
* const
|
|
7
|
+
* const date = new Date(2022, 5, 19);
|
|
8
8
|
* const matcher1: DateRange = {
|
|
9
9
|
* from: new Date(2021, 12, 21),
|
|
10
10
|
* to: new Date(2021, 12, 30)
|
|
@@ -13,9 +13,14 @@ import type { DateLib, Matcher } from "../types/index.js";
|
|
|
13
13
|
* from: new Date(2022, 5, 1),
|
|
14
14
|
* to: new Date(2022, 5, 23)
|
|
15
15
|
* }
|
|
16
|
-
* const
|
|
16
|
+
* const dateMatchModifiers(date, [matcher1, matcher2]); // true, since day is in the matcher1 range.
|
|
17
17
|
* ```
|
|
18
18
|
*
|
|
19
19
|
* @group Utilities
|
|
20
20
|
*/
|
|
21
|
-
export declare function dateMatchModifiers(date: Date, matchers: Matcher | Matcher[], dateLib
|
|
21
|
+
export declare function dateMatchModifiers(date: Date, matchers: Matcher | Matcher[], dateLib?: DateLib): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* @private
|
|
24
|
+
* @deprecated Use {@link dateMatchModifiers} instead.
|
|
25
|
+
*/
|
|
26
|
+
export declare const isMatch: typeof dateMatchModifiers;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { dateLib as defaultDateLib } from "../lib/dateLib.js";
|
|
1
2
|
import { rangeIncludesDate } from "./rangeIncludesDate.js";
|
|
2
3
|
import { isDateAfterType, isDateBeforeType, isDateInterval, isDateRange, isDatesArray, isDayOfWeekType } from "./typeguards.js";
|
|
3
4
|
/**
|
|
@@ -5,7 +6,7 @@ import { isDateAfterType, isDateBeforeType, isDateInterval, isDateRange, isDates
|
|
|
5
6
|
* {@link Matcher}.
|
|
6
7
|
*
|
|
7
8
|
* ```tsx
|
|
8
|
-
* const
|
|
9
|
+
* const date = new Date(2022, 5, 19);
|
|
9
10
|
* const matcher1: DateRange = {
|
|
10
11
|
* from: new Date(2021, 12, 21),
|
|
11
12
|
* to: new Date(2021, 12, 30)
|
|
@@ -14,12 +15,12 @@ import { isDateAfterType, isDateBeforeType, isDateInterval, isDateRange, isDates
|
|
|
14
15
|
* from: new Date(2022, 5, 1),
|
|
15
16
|
* to: new Date(2022, 5, 23)
|
|
16
17
|
* }
|
|
17
|
-
* const
|
|
18
|
+
* const dateMatchModifiers(date, [matcher1, matcher2]); // true, since day is in the matcher1 range.
|
|
18
19
|
* ```
|
|
19
20
|
*
|
|
20
21
|
* @group Utilities
|
|
21
22
|
*/
|
|
22
|
-
export function dateMatchModifiers(date, matchers, dateLib) {
|
|
23
|
+
export function dateMatchModifiers(date, matchers, dateLib = defaultDateLib) {
|
|
23
24
|
const matchersArr = !Array.isArray(matchers) ? [matchers] : matchers;
|
|
24
25
|
const { isSameDay, differenceInCalendarDays, isAfter } = dateLib;
|
|
25
26
|
return matchersArr.some((matcher) => {
|
|
@@ -66,4 +67,9 @@ export function dateMatchModifiers(date, matchers, dateLib) {
|
|
|
66
67
|
return false;
|
|
67
68
|
});
|
|
68
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* @private
|
|
72
|
+
* @deprecated Use {@link dateMatchModifiers} instead.
|
|
73
|
+
*/
|
|
74
|
+
export const isMatch = dateMatchModifiers;
|
|
69
75
|
//# sourceMappingURL=dateMatchModifiers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dateMatchModifiers.js","sourceRoot":"","sources":["../../../src/utils/dateMatchModifiers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dateMatchModifiers.js","sourceRoot":"","sources":["../../../src/utils/dateMatchModifiers.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,5 +29,9 @@ export declare function isDateBeforeType(value: unknown): value is DateBefore;
|
|
|
29
29
|
* @group Utilities
|
|
30
30
|
*/
|
|
31
31
|
export declare function isDayOfWeekType(value: unknown): value is DayOfWeek;
|
|
32
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* Returns true if `value` is an array of valid dates.
|
|
34
|
+
*
|
|
35
|
+
* @private
|
|
36
|
+
*/
|
|
33
37
|
export declare function isDatesArray(value: unknown, dateLib: DateLib): value is Date[];
|
|
@@ -41,7 +41,11 @@ export function isDateBeforeType(value) {
|
|
|
41
41
|
export function isDayOfWeekType(value) {
|
|
42
42
|
return Boolean(value && typeof value === "object" && "dayOfWeek" in value);
|
|
43
43
|
}
|
|
44
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* Returns true if `value` is an array of valid dates.
|
|
46
|
+
*
|
|
47
|
+
* @private
|
|
48
|
+
*/
|
|
45
49
|
export function isDatesArray(value, dateLib) {
|
|
46
50
|
return Array.isArray(value) && value.every(dateLib.isDate);
|
|
47
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typeguards.js","sourceRoot":"","sources":["../../../src/utils/typeguards.ts"],"names":[],"mappings":"AASA;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO,OAAO,CACZ,OAAO;QACL,OAAO,OAAO,KAAK,QAAQ;QAC3B,QAAQ,IAAI,OAAO;QACnB,OAAO,IAAI,OAAO,CACrB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC;AACxE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,CAAC,CAAC;AACzE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAI,KAAK,CAAC,CAAC;AAC1E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,WAAW,IAAI,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"typeguards.js","sourceRoot":"","sources":["../../../src/utils/typeguards.ts"],"names":[],"mappings":"AASA;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO,OAAO,CACZ,OAAO;QACL,OAAO,OAAO,KAAK,QAAQ;QAC3B,QAAQ,IAAI,OAAO;QACnB,OAAO,IAAI,OAAO,CACrB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC;AACxE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,CAAC,CAAC;AACzE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAI,KAAK,CAAC,CAAC;AAC1E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,WAAW,IAAI,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAc,EACd,OAAgB;IAEhB,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
import { labelGrid } from "react-day-picker";
|
|
4
|
+
|
|
5
|
+
import { dateButton, grid, gridcell, nextButton } from "@/test/elements";
|
|
6
|
+
import { render } from "@/test/render";
|
|
7
|
+
import { user } from "@/test/user";
|
|
8
|
+
|
|
9
|
+
import { TestCase2389 } from "./TestCase2389";
|
|
10
|
+
|
|
11
|
+
const today = new Date(2024, 8, 6);
|
|
12
|
+
|
|
13
|
+
beforeAll(() => jest.setSystemTime(today));
|
|
14
|
+
afterAll(() => jest.useRealTimers());
|
|
15
|
+
|
|
16
|
+
beforeEach(async () => {
|
|
17
|
+
render(<TestCase2389 />);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
describe("when moving to the next month", () => {
|
|
21
|
+
beforeEach(async () => {
|
|
22
|
+
await user.click(nextButton());
|
|
23
|
+
});
|
|
24
|
+
test("should display the next month", () => {
|
|
25
|
+
const nextMonth = new Date(2024, 9, 1);
|
|
26
|
+
expect(grid(labelGrid(nextMonth))).toBeVisible();
|
|
27
|
+
});
|
|
28
|
+
describe("when clicking a day button", () => {
|
|
29
|
+
const day = new Date(2024, 9, 10);
|
|
30
|
+
beforeEach(async () => {
|
|
31
|
+
await user.click(dateButton(day));
|
|
32
|
+
});
|
|
33
|
+
test("should select the day", async () => {
|
|
34
|
+
expect(gridcell(day, true)).toHaveAttribute("aria-selected", "true");
|
|
35
|
+
});
|
|
36
|
+
test("should still display the next month", () => {
|
|
37
|
+
const nextMonth = new Date(2024, 9, 1);
|
|
38
|
+
expect(grid(labelGrid(nextMonth))).toBeVisible();
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
});
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
|
|
3
|
+
import { DayPicker, DateRange } from "react-day-picker";
|
|
4
|
+
import "react-day-picker/style.css";
|
|
5
|
+
|
|
6
|
+
export function TestCase2389() {
|
|
7
|
+
const [selectedPeriod, setSelectedPeriod] = useState<DateRange | undefined>();
|
|
8
|
+
|
|
9
|
+
return (
|
|
10
|
+
<DayPicker
|
|
11
|
+
mode="range"
|
|
12
|
+
startMonth={new Date("2024-07-01")}
|
|
13
|
+
endMonth={new Date("2025-07-31")}
|
|
14
|
+
onSelect={setSelectedPeriod}
|
|
15
|
+
selected={selectedPeriod}
|
|
16
|
+
/>
|
|
17
|
+
);
|
|
18
|
+
}
|
package/examples/index.ts
CHANGED
|
@@ -61,6 +61,7 @@ export * from "./StylingModifiers";
|
|
|
61
61
|
export * from "./TailwindCSS";
|
|
62
62
|
export * from "./Testcase1567";
|
|
63
63
|
export * from "./TestCase2047";
|
|
64
|
+
export * from "./TestCase2389";
|
|
64
65
|
export * from "./Utc";
|
|
65
66
|
export * from "./WeekIso";
|
|
66
67
|
export * from "./Weeknumber";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-day-picker",
|
|
3
|
-
"version": "9.0.
|
|
3
|
+
"version": "9.0.9",
|
|
4
4
|
"description": "Customizable Date Picker for React",
|
|
5
5
|
"author": "Giampaolo Bellavite <io@gpbl.dev>",
|
|
6
6
|
"homepage": "https://daypicker.dev",
|
|
@@ -136,13 +136,13 @@
|
|
|
136
136
|
"@date-fns/utc": "^1.2.0",
|
|
137
137
|
"@jest/types": "^29.6.3",
|
|
138
138
|
"@testing-library/dom": "^10.4.0",
|
|
139
|
-
"@testing-library/jest-dom": "^6.
|
|
140
|
-
"@testing-library/react": "^16.0.
|
|
139
|
+
"@testing-library/jest-dom": "^6.5.0",
|
|
140
|
+
"@testing-library/react": "^16.0.1",
|
|
141
141
|
"@testing-library/user-event": "^14.5.2",
|
|
142
142
|
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
|
|
143
143
|
"@types/jest": "^29.5.12",
|
|
144
|
-
"@types/node": "^22.1
|
|
145
|
-
"@types/react": "^18.3.
|
|
144
|
+
"@types/node": "^22.5.1",
|
|
145
|
+
"@types/react": "^18.3.5",
|
|
146
146
|
"@types/react-dom": "^18.3.0",
|
|
147
147
|
"@typescript-eslint/eslint-plugin": "^7.18.0",
|
|
148
148
|
"@typescript-eslint/parser": "^7.18.0",
|
|
@@ -150,14 +150,14 @@
|
|
|
150
150
|
"date-fns-jalali": "3.6.0-1",
|
|
151
151
|
"eslint": "^8.57.0",
|
|
152
152
|
"eslint-config-prettier": "^9.1.0",
|
|
153
|
-
"eslint-import-resolver-typescript": "^3.6.
|
|
153
|
+
"eslint-import-resolver-typescript": "^3.6.3",
|
|
154
154
|
"eslint-plugin-import": "^2.29.1",
|
|
155
|
-
"eslint-plugin-jest": "^28.
|
|
155
|
+
"eslint-plugin-jest": "^28.8.2",
|
|
156
156
|
"eslint-plugin-prettier": "^5.2.1",
|
|
157
157
|
"eslint-plugin-react": "^7.35.0",
|
|
158
158
|
"eslint-plugin-react-hooks": "^4.6.2",
|
|
159
159
|
"eslint-plugin-require-extensions": "^0.1.3",
|
|
160
|
-
"eslint-plugin-testing-library": "^6.
|
|
160
|
+
"eslint-plugin-testing-library": "^6.3.0",
|
|
161
161
|
"jest": "^29.7.0",
|
|
162
162
|
"jest-environment-jsdom": "^29.7.0",
|
|
163
163
|
"mockdate": "^3.0.5",
|
|
@@ -168,7 +168,7 @@
|
|
|
168
168
|
"react-dom": "^18.3.1",
|
|
169
169
|
"ts-jest": "^29.2.4",
|
|
170
170
|
"ts-node": "^10.9.2",
|
|
171
|
-
"tslib": "^2.
|
|
171
|
+
"tslib": "^2.7.0",
|
|
172
172
|
"typescript": "~5.5.4",
|
|
173
173
|
"typescript-css-modules": "^1.0.4"
|
|
174
174
|
},
|
package/src/DayPicker.test.tsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { startOfDay, startOfMonth } from "date-fns";
|
|
4
4
|
import { defaultLocale } from "react-day-picker";
|
|
5
5
|
|
|
6
6
|
import {
|
|
@@ -16,7 +16,6 @@ import { user } from "@/test/user";
|
|
|
16
16
|
import { DayPicker } from "./DayPicker";
|
|
17
17
|
import { MonthProps } from "./components/Month";
|
|
18
18
|
import { MonthsProps } from "./components/Months";
|
|
19
|
-
import { labelGrid } from "./labels";
|
|
20
19
|
|
|
21
20
|
const testId = "test";
|
|
22
21
|
const dayPicker = () => screen.getByTestId(testId);
|
|
@@ -147,19 +146,6 @@ describe("when the `month` is changed programmatically", () => {
|
|
|
147
146
|
});
|
|
148
147
|
});
|
|
149
148
|
|
|
150
|
-
describe("when the `startMonth` is changed programmatically", () => {
|
|
151
|
-
test("should update the calendar to reflect the new month", async () => {
|
|
152
|
-
const initialStartMonth = new Date();
|
|
153
|
-
const newStartMonth = addMonths(new Date(), 2);
|
|
154
|
-
const { rerender } = render(
|
|
155
|
-
<DayPicker startMonth={initialStartMonth} mode="single" />
|
|
156
|
-
);
|
|
157
|
-
expect(grid(labelGrid(initialStartMonth))).toBeInTheDocument();
|
|
158
|
-
rerender(<DayPicker startMonth={newStartMonth} mode="single" />);
|
|
159
|
-
expect(grid(labelGrid(newStartMonth))).toBeInTheDocument();
|
|
160
|
-
});
|
|
161
|
-
});
|
|
162
|
-
|
|
163
149
|
test("extends the default locale", () => {
|
|
164
150
|
render(
|
|
165
151
|
<DayPicker
|
package/src/DayPicker.tsx
CHANGED
|
@@ -248,7 +248,12 @@ export function DayPicker(props: DayPickerProps) {
|
|
|
248
248
|
nextMonth,
|
|
249
249
|
previousMonth,
|
|
250
250
|
goToMonth,
|
|
251
|
-
getModifiers
|
|
251
|
+
getModifiers,
|
|
252
|
+
components,
|
|
253
|
+
classNames,
|
|
254
|
+
styles,
|
|
255
|
+
labels,
|
|
256
|
+
formatters
|
|
252
257
|
};
|
|
253
258
|
|
|
254
259
|
return (
|
|
@@ -367,6 +372,7 @@ export function DayPicker(props: DayPickerProps) {
|
|
|
367
372
|
{captionLayout === "dropdown" ||
|
|
368
373
|
captionLayout === "dropdown-months" ? (
|
|
369
374
|
<components.Dropdown
|
|
375
|
+
className={classNames[UI.MonthsDropdown]}
|
|
370
376
|
aria-label={labelMonthDropdown()}
|
|
371
377
|
classNames={classNames}
|
|
372
378
|
components={components}
|
|
@@ -384,6 +390,7 @@ export function DayPicker(props: DayPickerProps) {
|
|
|
384
390
|
{captionLayout === "dropdown" ||
|
|
385
391
|
captionLayout === "dropdown-years" ? (
|
|
386
392
|
<components.Dropdown
|
|
393
|
+
className={classNames[UI.YearsDropdown]}
|
|
387
394
|
aria-label={labelYearDropdown(labelOptions)}
|
|
388
395
|
classNames={classNames}
|
|
389
396
|
components={components}
|
package/src/style.css
CHANGED
|
@@ -73,17 +73,6 @@
|
|
|
73
73
|
box-sizing: border-box;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
/* Reset buttons */
|
|
77
|
-
.rdp-root button {
|
|
78
|
-
border: none;
|
|
79
|
-
background: none;
|
|
80
|
-
padding: 0;
|
|
81
|
-
margin: 0;
|
|
82
|
-
cursor: pointer;
|
|
83
|
-
font: inherit;
|
|
84
|
-
color: inherit;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
76
|
.rdp-day {
|
|
88
77
|
width: var(--rdp-day-width);
|
|
89
78
|
height: var(--rdp-day-height);
|
|
@@ -92,6 +81,12 @@
|
|
|
92
81
|
}
|
|
93
82
|
|
|
94
83
|
.rdp-day_button {
|
|
84
|
+
background: none;
|
|
85
|
+
padding: 0;
|
|
86
|
+
margin: 0;
|
|
87
|
+
cursor: pointer;
|
|
88
|
+
font: inherit;
|
|
89
|
+
color: inherit;
|
|
95
90
|
justify-content: center;
|
|
96
91
|
align-items: center;
|
|
97
92
|
display: flex;
|
|
@@ -119,20 +114,20 @@
|
|
|
119
114
|
|
|
120
115
|
.rdp-button_next,
|
|
121
116
|
.rdp-button_previous {
|
|
117
|
+
border: none;
|
|
118
|
+
background: none;
|
|
119
|
+
padding: 0;
|
|
120
|
+
margin: 0;
|
|
121
|
+
cursor: pointer;
|
|
122
|
+
font: inherit;
|
|
123
|
+
color: inherit;
|
|
122
124
|
-moz-appearance: none;
|
|
123
125
|
-webkit-appearance: none;
|
|
124
126
|
display: inline-flex;
|
|
125
127
|
align-items: center;
|
|
126
128
|
justify-content: center;
|
|
127
|
-
margin: 0;
|
|
128
|
-
padding: 0;
|
|
129
129
|
position: relative;
|
|
130
|
-
font: inherit;
|
|
131
130
|
appearance: none;
|
|
132
|
-
background: none;
|
|
133
|
-
border: 0;
|
|
134
|
-
color: inherit;
|
|
135
|
-
cursor: pointer;
|
|
136
131
|
|
|
137
132
|
width: var(--rdp-nav_button-width);
|
|
138
133
|
height: var(--rdp-nav_button-height);
|
package/src/style.module.css
CHANGED
|
@@ -73,17 +73,6 @@
|
|
|
73
73
|
box-sizing: border-box;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
/* Reset buttons */
|
|
77
|
-
.root button {
|
|
78
|
-
border: none;
|
|
79
|
-
background: none;
|
|
80
|
-
padding: 0;
|
|
81
|
-
margin: 0;
|
|
82
|
-
cursor: pointer;
|
|
83
|
-
font: inherit;
|
|
84
|
-
color: inherit;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
76
|
.day {
|
|
88
77
|
width: var(--rdp-day-width);
|
|
89
78
|
height: var(--rdp-day-height);
|
|
@@ -92,6 +81,12 @@
|
|
|
92
81
|
}
|
|
93
82
|
|
|
94
83
|
.day_button {
|
|
84
|
+
background: none;
|
|
85
|
+
padding: 0;
|
|
86
|
+
margin: 0;
|
|
87
|
+
cursor: pointer;
|
|
88
|
+
font: inherit;
|
|
89
|
+
color: inherit;
|
|
95
90
|
justify-content: center;
|
|
96
91
|
align-items: center;
|
|
97
92
|
display: flex;
|
|
@@ -119,20 +114,20 @@
|
|
|
119
114
|
|
|
120
115
|
.button_next,
|
|
121
116
|
.button_previous {
|
|
117
|
+
border: none;
|
|
118
|
+
background: none;
|
|
119
|
+
padding: 0;
|
|
120
|
+
margin: 0;
|
|
121
|
+
cursor: pointer;
|
|
122
|
+
font: inherit;
|
|
123
|
+
color: inherit;
|
|
122
124
|
-moz-appearance: none;
|
|
123
125
|
-webkit-appearance: none;
|
|
124
126
|
display: inline-flex;
|
|
125
127
|
align-items: center;
|
|
126
128
|
justify-content: center;
|
|
127
|
-
margin: 0;
|
|
128
|
-
padding: 0;
|
|
129
129
|
position: relative;
|
|
130
|
-
font: inherit;
|
|
131
130
|
appearance: none;
|
|
132
|
-
background: none;
|
|
133
|
-
border: 0;
|
|
134
|
-
color: inherit;
|
|
135
|
-
cursor: pointer;
|
|
136
131
|
|
|
137
132
|
width: var(--rdp-nav_button-width);
|
|
138
133
|
height: var(--rdp-nav_button-height);
|