react-day-picker 9.3.1 → 9.3.2
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/useGetModifiers.js +7 -1
- package/dist/cjs/useGetModifiers.js.map +1 -1
- package/dist/esm/useGetModifiers.js +7 -1
- package/dist/esm/useGetModifiers.js.map +1 -1
- package/examples/StartEndMonthsShowOutsideDays.tsx +20 -0
- package/examples/index.ts +1 -0
- package/package.json +12 -12
- package/src/useGetModifiers.test.tsx +127 -52
- package/src/useGetModifiers.tsx +19 -1
|
@@ -13,7 +13,9 @@ const dateMatchModifiers_js_1 = require("./utils/dateMatchModifiers.js");
|
|
|
13
13
|
*/
|
|
14
14
|
function useGetModifiers(days, props, dateLib) {
|
|
15
15
|
const { disabled, hidden, modifiers, showOutsideDays, today } = props;
|
|
16
|
-
const { isSameDay, isSameMonth } = dateLib;
|
|
16
|
+
const { isSameDay, isSameMonth, startOfMonth, isBefore, endOfMonth, isAfter } = dateLib;
|
|
17
|
+
const startMonth = props.startMonth && startOfMonth(props.startMonth);
|
|
18
|
+
const endMonth = props.endMonth && endOfMonth(props.endMonth);
|
|
17
19
|
const internalModifiersMap = {
|
|
18
20
|
[UI_js_1.DayFlag.focused]: [],
|
|
19
21
|
[UI_js_1.DayFlag.outside]: [],
|
|
@@ -25,8 +27,12 @@ function useGetModifiers(days, props, dateLib) {
|
|
|
25
27
|
for (const day of days) {
|
|
26
28
|
const { date, displayMonth } = day;
|
|
27
29
|
const isOutside = Boolean(displayMonth && !isSameMonth(date, displayMonth));
|
|
30
|
+
const isBeforeStartMonth = Boolean(startMonth && isBefore(date, startMonth));
|
|
31
|
+
const isAfterEndMonth = Boolean(endMonth && isAfter(date, endMonth));
|
|
28
32
|
const isDisabled = Boolean(disabled && (0, dateMatchModifiers_js_1.dateMatchModifiers)(date, disabled, dateLib));
|
|
29
33
|
const isHidden = Boolean(hidden && (0, dateMatchModifiers_js_1.dateMatchModifiers)(date, hidden, dateLib)) ||
|
|
34
|
+
isBeforeStartMonth ||
|
|
35
|
+
isAfterEndMonth ||
|
|
30
36
|
(!showOutsideDays && isOutside);
|
|
31
37
|
const isToday = isSameDay(date, today ??
|
|
32
38
|
(props.timeZone
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGetModifiers.js","sourceRoot":"","sources":["../../src/useGetModifiers.tsx"],"names":[],"mappings":";;AAcA,
|
|
1
|
+
{"version":3,"file":"useGetModifiers.js","sourceRoot":"","sources":["../../src/useGetModifiers.tsx"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,9 @@ import { dateMatchModifiers } from "./utils/dateMatchModifiers.js";
|
|
|
10
10
|
*/
|
|
11
11
|
export function useGetModifiers(days, props, dateLib) {
|
|
12
12
|
const { disabled, hidden, modifiers, showOutsideDays, today } = props;
|
|
13
|
-
const { isSameDay, isSameMonth } = dateLib;
|
|
13
|
+
const { isSameDay, isSameMonth, startOfMonth, isBefore, endOfMonth, isAfter } = dateLib;
|
|
14
|
+
const startMonth = props.startMonth && startOfMonth(props.startMonth);
|
|
15
|
+
const endMonth = props.endMonth && endOfMonth(props.endMonth);
|
|
14
16
|
const internalModifiersMap = {
|
|
15
17
|
[DayFlag.focused]: [],
|
|
16
18
|
[DayFlag.outside]: [],
|
|
@@ -22,8 +24,12 @@ export function useGetModifiers(days, props, dateLib) {
|
|
|
22
24
|
for (const day of days) {
|
|
23
25
|
const { date, displayMonth } = day;
|
|
24
26
|
const isOutside = Boolean(displayMonth && !isSameMonth(date, displayMonth));
|
|
27
|
+
const isBeforeStartMonth = Boolean(startMonth && isBefore(date, startMonth));
|
|
28
|
+
const isAfterEndMonth = Boolean(endMonth && isAfter(date, endMonth));
|
|
25
29
|
const isDisabled = Boolean(disabled && dateMatchModifiers(date, disabled, dateLib));
|
|
26
30
|
const isHidden = Boolean(hidden && dateMatchModifiers(date, hidden, dateLib)) ||
|
|
31
|
+
isBeforeStartMonth ||
|
|
32
|
+
isAfterEndMonth ||
|
|
27
33
|
(!showOutsideDays && isOutside);
|
|
28
34
|
const isToday = isSameDay(date, today ??
|
|
29
35
|
(props.timeZone
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGetModifiers.js","sourceRoot":"","sources":["../../src/useGetModifiers.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE;;;;;;GAMG;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,
|
|
1
|
+
{"version":3,"file":"useGetModifiers.js","sourceRoot":"","sources":["../../src/useGetModifiers.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
|
|
3
|
+
import { DayPicker } from "react-day-picker";
|
|
4
|
+
|
|
5
|
+
export function StartEndMonthsShowOutsideDays() {
|
|
6
|
+
const [selected, setSelected] = useState<Date>();
|
|
7
|
+
|
|
8
|
+
return (
|
|
9
|
+
<DayPicker
|
|
10
|
+
mode="single"
|
|
11
|
+
selected={selected}
|
|
12
|
+
onSelect={setSelected}
|
|
13
|
+
showOutsideDays={true}
|
|
14
|
+
defaultMonth={new Date(2024, 2)}
|
|
15
|
+
startMonth={new Date(2024, 2, 30)}
|
|
16
|
+
endMonth={new Date(2024, 2, 1)}
|
|
17
|
+
disabled={new Date(2024, 2, 10)}
|
|
18
|
+
/>
|
|
19
|
+
);
|
|
20
|
+
}
|
package/examples/index.ts
CHANGED
|
@@ -61,6 +61,7 @@ export * from "./Spanish";
|
|
|
61
61
|
export * from "./SpanishWeekStartsOn";
|
|
62
62
|
export * from "./Start";
|
|
63
63
|
export * from "./StartEndMonths";
|
|
64
|
+
export * from "./StartEndMonthsShowOutsideDays";
|
|
64
65
|
export * from "./StylingCss";
|
|
65
66
|
export * from "./StylingInline";
|
|
66
67
|
export * from "./StylingModifiers";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-day-picker",
|
|
3
|
-
"version": "9.3.
|
|
3
|
+
"version": "9.3.2",
|
|
4
4
|
"description": "Customizable Date Picker for React",
|
|
5
5
|
"author": "Giampaolo Bellavite <io@gpbl.dev>",
|
|
6
6
|
"homepage": "https://daypicker.dev",
|
|
@@ -179,28 +179,28 @@
|
|
|
179
179
|
"devDependencies": {
|
|
180
180
|
"@jest/types": "^29.6.3",
|
|
181
181
|
"@testing-library/dom": "^10.4.0",
|
|
182
|
-
"@testing-library/jest-dom": "^6.6.
|
|
182
|
+
"@testing-library/jest-dom": "^6.6.3",
|
|
183
183
|
"@testing-library/react": "^16.0.1",
|
|
184
184
|
"@testing-library/user-event": "^14.5.2",
|
|
185
185
|
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
|
|
186
|
-
"@types/jest": "^29.5.
|
|
187
|
-
"@types/node": "^22.
|
|
188
|
-
"@types/react": "^18.3.
|
|
186
|
+
"@types/jest": "^29.5.14",
|
|
187
|
+
"@types/node": "^22.9.0",
|
|
188
|
+
"@types/react": "^18.3.12",
|
|
189
189
|
"@types/react-dom": "^18.3.1",
|
|
190
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
191
|
-
"@typescript-eslint/parser": "^8.
|
|
190
|
+
"@typescript-eslint/eslint-plugin": "^8.14.0",
|
|
191
|
+
"@typescript-eslint/parser": "^8.14.0",
|
|
192
192
|
"date-fns-jalali": "^3.6.0-1",
|
|
193
193
|
"eslint": "^8.57.1",
|
|
194
194
|
"eslint-config-prettier": "^9.1.0",
|
|
195
195
|
"eslint-import-resolver-typescript": "^3.6.3",
|
|
196
196
|
"eslint-plugin-import": "^2.31.0",
|
|
197
|
-
"eslint-plugin-jest": "^28.
|
|
197
|
+
"eslint-plugin-jest": "^28.9.0",
|
|
198
198
|
"eslint-plugin-prettier": "^5.2.1",
|
|
199
|
-
"eslint-plugin-react": "^7.37.
|
|
199
|
+
"eslint-plugin-react": "^7.37.2",
|
|
200
200
|
"eslint-plugin-react-hooks": "^5.0.0",
|
|
201
201
|
"eslint-plugin-require-extensions": "^0.1.3",
|
|
202
202
|
"eslint-plugin-testing-library": "^6.4.0",
|
|
203
|
-
"html-validate": "^8.
|
|
203
|
+
"html-validate": "^8.25.0",
|
|
204
204
|
"jest": "^29.7.0",
|
|
205
205
|
"jest-environment-jsdom": "^29.7.0",
|
|
206
206
|
"mockdate": "^3.0.5",
|
|
@@ -210,8 +210,8 @@
|
|
|
210
210
|
"react-dom": "^18.3.1",
|
|
211
211
|
"ts-jest": "^29.2.5",
|
|
212
212
|
"ts-node": "^10.9.2",
|
|
213
|
-
"tslib": "^2.8.
|
|
214
|
-
"typescript": "~5.
|
|
213
|
+
"tslib": "^2.8.1",
|
|
214
|
+
"typescript": "~5.6.3",
|
|
215
215
|
"typescript-css-modules": "^1.0.4"
|
|
216
216
|
},
|
|
217
217
|
"peerDependencies": {
|
|
@@ -4,76 +4,151 @@ import { useGetModifiers } from "./useGetModifiers";
|
|
|
4
4
|
|
|
5
5
|
const dateLib = defaultDateLib;
|
|
6
6
|
|
|
7
|
-
const
|
|
8
|
-
const month2 = new Date(2022, 11, 1);
|
|
7
|
+
const displayedMonth = new Date(2022, 10, 1);
|
|
9
8
|
|
|
10
|
-
const date1 = new Date(2022,
|
|
11
|
-
const date2 = new Date(2022, 10,
|
|
12
|
-
const date3 = new Date(2022, 10,
|
|
13
|
-
const date4 = new Date(2022, 10,
|
|
14
|
-
const date5 = new Date(2022, 10,
|
|
15
|
-
const date6 = new Date(2022, 10,
|
|
9
|
+
const date1 = new Date(2022, 9, 30);
|
|
10
|
+
const date2 = new Date(2022, 10, 10);
|
|
11
|
+
const date3 = new Date(2022, 10, 11);
|
|
12
|
+
const date4 = new Date(2022, 10, 12);
|
|
13
|
+
const date5 = new Date(2022, 10, 13);
|
|
14
|
+
const date6 = new Date(2022, 10, 14);
|
|
15
|
+
const date7 = new Date(2022, 11, 1);
|
|
16
16
|
|
|
17
|
-
const day1 = new CalendarDay(date1,
|
|
18
|
-
const day2 = new CalendarDay(date2,
|
|
19
|
-
const day3 = new CalendarDay(date3,
|
|
20
|
-
const day4 = new CalendarDay(date4,
|
|
21
|
-
const day5 = new CalendarDay(date5,
|
|
22
|
-
const day6 = new CalendarDay(date6,
|
|
17
|
+
const day1 = new CalendarDay(date1, displayedMonth);
|
|
18
|
+
const day2 = new CalendarDay(date2, displayedMonth);
|
|
19
|
+
const day3 = new CalendarDay(date3, displayedMonth);
|
|
20
|
+
const day4 = new CalendarDay(date4, displayedMonth);
|
|
21
|
+
const day5 = new CalendarDay(date5, displayedMonth);
|
|
22
|
+
const day6 = new CalendarDay(date6, displayedMonth);
|
|
23
|
+
const day7 = new CalendarDay(date7, displayedMonth);
|
|
23
24
|
|
|
24
|
-
const days: CalendarDay[] = [day1, day2, day3, day4, day5, day6];
|
|
25
|
+
const days: CalendarDay[] = [day1, day2, day3, day4, day5, day6, day7];
|
|
25
26
|
|
|
26
27
|
const props = {
|
|
27
|
-
disabled: [
|
|
28
|
-
hidden: [
|
|
28
|
+
disabled: [date2],
|
|
29
|
+
hidden: [date3],
|
|
29
30
|
modifiers: {
|
|
30
|
-
custom: [
|
|
31
|
-
selected: [
|
|
31
|
+
custom: [date4],
|
|
32
|
+
selected: [date6]
|
|
32
33
|
},
|
|
33
|
-
selected:
|
|
34
|
+
selected: date7,
|
|
34
35
|
showOutsideDays: true,
|
|
35
|
-
today:
|
|
36
|
+
today: date5,
|
|
36
37
|
timeZone: "UTC"
|
|
37
38
|
};
|
|
38
39
|
|
|
39
40
|
describe("useGetModifiers", () => {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
test("return the modifiers for a given day", () => {
|
|
44
|
-
const modifiers = getModifiers(day1);
|
|
45
|
-
|
|
46
|
-
expect(modifiers[DayFlag.focused]).toBe(false);
|
|
47
|
-
expect(modifiers[DayFlag.disabled]).toBe(true);
|
|
48
|
-
expect(modifiers[DayFlag.hidden]).toBe(false);
|
|
49
|
-
expect(modifiers[DayFlag.outside]).toBe(false);
|
|
50
|
-
expect(modifiers[DayFlag.today]).toBe(false);
|
|
51
|
-
expect(modifiers.custom).toBe(false);
|
|
52
|
-
});
|
|
41
|
+
describe("default props", () => {
|
|
42
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
43
|
+
const getModifiers = useGetModifiers(days, props, dateLib);
|
|
53
44
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
expect(modifiers.custom).toBe(true);
|
|
57
|
-
});
|
|
45
|
+
test("return the modifiers for a given day", () => {
|
|
46
|
+
const modifiers = getModifiers(day2);
|
|
58
47
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
48
|
+
expect(modifiers[DayFlag.focused]).toBe(false);
|
|
49
|
+
expect(modifiers[DayFlag.disabled]).toBe(true);
|
|
50
|
+
expect(modifiers[DayFlag.hidden]).toBe(false);
|
|
51
|
+
expect(modifiers[DayFlag.outside]).toBe(false);
|
|
52
|
+
expect(modifiers[DayFlag.today]).toBe(false);
|
|
53
|
+
expect(modifiers.custom).toBe(false);
|
|
54
|
+
});
|
|
63
55
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
56
|
+
test("return the custom modifiers for a given day", () => {
|
|
57
|
+
const modifiers = getModifiers(day4);
|
|
58
|
+
expect(modifiers.custom).toBe(true);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
test("return the custom `selected` modifier for a given day", () => {
|
|
62
|
+
const modifiers = getModifiers(day6);
|
|
63
|
+
expect(modifiers.selected).toBe(true);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
test("return the today modifier for a given day", () => {
|
|
67
|
+
const modifiers = getModifiers(day5);
|
|
68
|
+
|
|
69
|
+
expect(modifiers[DayFlag.today]).toBe(true);
|
|
70
|
+
expect(modifiers[DayFlag.focused]).toBe(false);
|
|
71
|
+
expect(modifiers[DayFlag.disabled]).toBe(false);
|
|
72
|
+
expect(modifiers[DayFlag.outside]).toBe(false);
|
|
73
|
+
expect(modifiers[DayFlag.hidden]).toBe(false);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
test("return the hidden modifier for a given day", () => {
|
|
77
|
+
const modifiers = getModifiers(day3);
|
|
78
|
+
|
|
79
|
+
expect(modifiers[DayFlag.hidden]).toBe(true);
|
|
80
|
+
expect(modifiers[DayFlag.focused]).toBe(false);
|
|
81
|
+
expect(modifiers[DayFlag.disabled]).toBe(false);
|
|
82
|
+
expect(modifiers[DayFlag.outside]).toBe(false);
|
|
83
|
+
expect(modifiers[DayFlag.today]).toBe(false);
|
|
84
|
+
});
|
|
68
85
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
86
|
+
test("return the modifiers for a given day before the displayed month", () => {
|
|
87
|
+
const modifiers = getModifiers(day1);
|
|
88
|
+
|
|
89
|
+
expect(modifiers[DayFlag.focused]).toBe(false);
|
|
90
|
+
expect(modifiers[DayFlag.disabled]).toBe(false);
|
|
91
|
+
expect(modifiers[DayFlag.hidden]).toBe(false);
|
|
92
|
+
expect(modifiers[DayFlag.outside]).toBe(true);
|
|
93
|
+
expect(modifiers[DayFlag.today]).toBe(false);
|
|
94
|
+
expect(modifiers.selected).toBe(false);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
test("return the modifiers for a given day after the displayed month", () => {
|
|
98
|
+
const modifiers = getModifiers(day7);
|
|
99
|
+
|
|
100
|
+
expect(modifiers[DayFlag.focused]).toBe(false);
|
|
101
|
+
expect(modifiers[DayFlag.disabled]).toBe(false);
|
|
102
|
+
expect(modifiers[DayFlag.hidden]).toBe(false);
|
|
103
|
+
expect(modifiers[DayFlag.outside]).toBe(true);
|
|
104
|
+
expect(modifiers[DayFlag.today]).toBe(false);
|
|
105
|
+
expect(modifiers.selected).toBe(false);
|
|
106
|
+
});
|
|
72
107
|
});
|
|
73
108
|
|
|
74
|
-
|
|
75
|
-
const
|
|
109
|
+
describe("with startMonth and endMonth props", () => {
|
|
110
|
+
const startMonth = new Date(displayedMonth);
|
|
111
|
+
startMonth.setDate(30);
|
|
112
|
+
const endMonth = new Date(displayedMonth);
|
|
113
|
+
endMonth.setDate(1);
|
|
114
|
+
|
|
115
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
116
|
+
const getModifiers = useGetModifiers(
|
|
117
|
+
days,
|
|
118
|
+
{ ...props, startMonth, endMonth },
|
|
119
|
+
dateLib
|
|
120
|
+
);
|
|
121
|
+
test("return the modifiers for a given day", () => {
|
|
122
|
+
const modifiers = getModifiers(day2);
|
|
123
|
+
|
|
124
|
+
expect(modifiers[DayFlag.focused]).toBe(false);
|
|
125
|
+
expect(modifiers[DayFlag.disabled]).toBe(true);
|
|
126
|
+
expect(modifiers[DayFlag.hidden]).toBe(false);
|
|
127
|
+
expect(modifiers[DayFlag.outside]).toBe(false);
|
|
128
|
+
expect(modifiers[DayFlag.today]).toBe(false);
|
|
129
|
+
expect(modifiers.custom).toBe(false);
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
test("return the modifiers for a given day before the displayed month", () => {
|
|
133
|
+
const modifiers = getModifiers(day1);
|
|
134
|
+
|
|
135
|
+
expect(modifiers[DayFlag.focused]).toBe(false);
|
|
136
|
+
expect(modifiers[DayFlag.disabled]).toBe(false);
|
|
137
|
+
expect(modifiers[DayFlag.hidden]).toBe(true);
|
|
138
|
+
expect(modifiers[DayFlag.outside]).toBe(true);
|
|
139
|
+
expect(modifiers[DayFlag.today]).toBe(false);
|
|
140
|
+
expect(modifiers.selected).toBe(false);
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
test("return the modifiers for a given day after the displayed month", () => {
|
|
144
|
+
const modifiers = getModifiers(day7);
|
|
76
145
|
|
|
77
|
-
|
|
146
|
+
expect(modifiers[DayFlag.focused]).toBe(false);
|
|
147
|
+
expect(modifiers[DayFlag.disabled]).toBe(false);
|
|
148
|
+
expect(modifiers[DayFlag.hidden]).toBe(true);
|
|
149
|
+
expect(modifiers[DayFlag.outside]).toBe(true);
|
|
150
|
+
expect(modifiers[DayFlag.today]).toBe(false);
|
|
151
|
+
expect(modifiers.selected).toBe(false);
|
|
152
|
+
});
|
|
78
153
|
});
|
|
79
154
|
});
|
package/src/useGetModifiers.tsx
CHANGED
|
@@ -19,7 +19,17 @@ export function useGetModifiers(
|
|
|
19
19
|
) {
|
|
20
20
|
const { disabled, hidden, modifiers, showOutsideDays, today } = props;
|
|
21
21
|
|
|
22
|
-
const {
|
|
22
|
+
const {
|
|
23
|
+
isSameDay,
|
|
24
|
+
isSameMonth,
|
|
25
|
+
startOfMonth,
|
|
26
|
+
isBefore,
|
|
27
|
+
endOfMonth,
|
|
28
|
+
isAfter
|
|
29
|
+
} = dateLib;
|
|
30
|
+
|
|
31
|
+
const startMonth = props.startMonth && startOfMonth(props.startMonth);
|
|
32
|
+
const endMonth = props.endMonth && endOfMonth(props.endMonth);
|
|
23
33
|
|
|
24
34
|
const internalModifiersMap: Record<DayFlag, CalendarDay[]> = {
|
|
25
35
|
[DayFlag.focused]: [],
|
|
@@ -36,12 +46,20 @@ export function useGetModifiers(
|
|
|
36
46
|
|
|
37
47
|
const isOutside = Boolean(displayMonth && !isSameMonth(date, displayMonth));
|
|
38
48
|
|
|
49
|
+
const isBeforeStartMonth = Boolean(
|
|
50
|
+
startMonth && isBefore(date, startMonth)
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
const isAfterEndMonth = Boolean(endMonth && isAfter(date, endMonth));
|
|
54
|
+
|
|
39
55
|
const isDisabled = Boolean(
|
|
40
56
|
disabled && dateMatchModifiers(date, disabled, dateLib)
|
|
41
57
|
);
|
|
42
58
|
|
|
43
59
|
const isHidden =
|
|
44
60
|
Boolean(hidden && dateMatchModifiers(date, hidden, dateLib)) ||
|
|
61
|
+
isBeforeStartMonth ||
|
|
62
|
+
isAfterEndMonth ||
|
|
45
63
|
(!showOutsideDays && isOutside);
|
|
46
64
|
|
|
47
65
|
const isToday = isSameDay(
|