react-day-picker 9.0.4 → 9.0.6
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/README.md +1 -1
- package/dist/cjs/DayPicker.js +2 -6
- package/dist/cjs/DayPicker.js.map +1 -1
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/selection/useRange.js +3 -19
- package/dist/cjs/selection/useRange.js.map +1 -1
- package/dist/cjs/utils/addToRange.d.ts +6 -2
- package/dist/cjs/utils/addToRange.js +68 -24
- package/dist/cjs/utils/addToRange.js.map +1 -1
- package/dist/esm/DayPicker.js +2 -6
- package/dist/esm/DayPicker.js.map +1 -1
- package/dist/esm/selection/useRange.js +3 -19
- package/dist/esm/selection/useRange.js.map +1 -1
- package/dist/esm/utils/addToRange.d.ts +6 -2
- package/dist/esm/utils/addToRange.js +68 -24
- package/dist/esm/utils/addToRange.js.map +1 -1
- package/examples/MultipleRequired.tsx +7 -0
- package/examples/RangeMinMax.test.tsx +5 -16
- package/examples/RangeMinMax.tsx +5 -6
- package/examples/RangeRequired.tsx +30 -0
- package/examples/RangeShiftKey.tsx +1 -3
- package/examples/__snapshots__/Range.test.tsx.snap +26 -0
- package/examples/__snapshots__/StylingCssModules.test.tsx.snap +11 -0
- package/examples/index.ts +2 -0
- package/package.json +7 -7
- package/src/DayPicker.tsx +12 -7
- package/src/selection/useRange.test.tsx +2 -2
- package/src/selection/useRange.tsx +3 -25
- package/src/style.css +11 -5
- package/src/style.module.css +12 -6
- package/src/utils/addToRange.test.ts +95 -97
- package/src/utils/addToRange.ts +64 -28
- package/website/docs/docs/accessibility.mdx +1 -1
- package/website/docs/docs/selection-modes.mdx +51 -75
- package/website/docs/guides/custom-components.mdx +16 -88
- package/website/docs/intro.mdx +1 -1
- package/website/docs/upgrading.mdx +4 -9
- package/website/README.md +0 -25
|
@@ -8,6 +8,11 @@ import { user } from "@/test/user";
|
|
|
8
8
|
|
|
9
9
|
import { RangeMinMax } from "./RangeMinMax";
|
|
10
10
|
|
|
11
|
+
const today = new Date(2022, 8, 12);
|
|
12
|
+
|
|
13
|
+
beforeAll(() => jest.setSystemTime(today));
|
|
14
|
+
afterAll(() => jest.useRealTimers());
|
|
15
|
+
|
|
11
16
|
beforeEach(() => render(<RangeMinMax />));
|
|
12
17
|
|
|
13
18
|
describe("when a day is clicked", () => {
|
|
@@ -18,22 +23,6 @@ describe("when a day is clicked", () => {
|
|
|
18
23
|
test("should be selected", () => {
|
|
19
24
|
expect(gridcell(firstDay, true)).toHaveAttribute("aria-selected", "true");
|
|
20
25
|
});
|
|
21
|
-
describe("when the day before min is clicked", () => {
|
|
22
|
-
const dayAfter = addDays(firstDay, 1);
|
|
23
|
-
beforeEach(async () => {
|
|
24
|
-
await user.click(dateButton(dayAfter));
|
|
25
|
-
});
|
|
26
|
-
test("the first day should not be selected", () => {
|
|
27
|
-
expect(gridcell(firstDay, true)).not.toHaveAttribute(
|
|
28
|
-
"aria-selected",
|
|
29
|
-
"true"
|
|
30
|
-
);
|
|
31
|
-
});
|
|
32
|
-
test("the day after should be selected", () => {
|
|
33
|
-
expect(gridcell(dayAfter, true)).toHaveAttribute("aria-selected", "true");
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
|
|
37
26
|
describe("when the day after min is clicked", () => {
|
|
38
27
|
const dayAfter = addDays(firstDay, 4);
|
|
39
28
|
beforeEach(async () => {
|
package/examples/RangeMinMax.tsx
CHANGED
|
@@ -9,20 +9,19 @@ export function RangeMinMax() {
|
|
|
9
9
|
let footer = `Please pick the first day.`;
|
|
10
10
|
if (range?.from) {
|
|
11
11
|
if (!range.to) {
|
|
12
|
-
footer = format(range.from, "PPP")
|
|
12
|
+
footer = `${format(range.from, "PPP")}—`;
|
|
13
13
|
} else if (range.to) {
|
|
14
|
-
footer = `${format(range.from, "PPP")}
|
|
14
|
+
footer = `${format(range.from, "PPP")}—${format(range.to, "PPP")}`;
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
return (
|
|
19
19
|
<div>
|
|
20
|
-
<p>Select
|
|
20
|
+
<p>Select up to 6 nights.</p>
|
|
21
21
|
<DayPicker
|
|
22
|
-
defaultMonth={new Date(2022, 8)}
|
|
23
22
|
mode="range"
|
|
24
|
-
min={
|
|
25
|
-
max={
|
|
23
|
+
min={1}
|
|
24
|
+
max={6}
|
|
26
25
|
selected={range}
|
|
27
26
|
onSelect={setRange}
|
|
28
27
|
footer={footer}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
|
|
3
|
+
import { addDays, format, startOfMonth } from "date-fns";
|
|
4
|
+
import { DateRange, DayPicker } from "react-day-picker";
|
|
5
|
+
|
|
6
|
+
export function RangeRequired() {
|
|
7
|
+
const [range, setRange] = useState<DateRange>({
|
|
8
|
+
from: startOfMonth(new Date()),
|
|
9
|
+
to: addDays(startOfMonth(new Date()), 4)
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
let footer = `Please pick the first day.`;
|
|
13
|
+
if (range?.from) {
|
|
14
|
+
if (!range.to) {
|
|
15
|
+
footer = `${format(range.from, "PPP")}—`;
|
|
16
|
+
} else if (range.to) {
|
|
17
|
+
footer = `${format(range.from, "PPP")}—${format(range.to, "PPP")}`;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return (
|
|
22
|
+
<DayPicker
|
|
23
|
+
mode="range"
|
|
24
|
+
required
|
|
25
|
+
selected={range}
|
|
26
|
+
onSelect={setRange}
|
|
27
|
+
footer={footer}
|
|
28
|
+
/>
|
|
29
|
+
);
|
|
30
|
+
}
|
|
@@ -13,9 +13,7 @@ function DayWithShiftKey(props: DayButtonProps) {
|
|
|
13
13
|
|
|
14
14
|
const handleClick: MouseEventHandler<HTMLButtonElement> = (e) => {
|
|
15
15
|
const requireShiftKey =
|
|
16
|
-
selected?.from &&
|
|
17
|
-
!selected.to &&
|
|
18
|
-
!isSameDay(props.day.date, selected.from);
|
|
16
|
+
selected?.from && !isSameDay(props.day.date, selected.from);
|
|
19
17
|
|
|
20
18
|
if (!e.shiftKey && requireShiftKey) {
|
|
21
19
|
return;
|
|
@@ -136,7 +136,9 @@ exports[`should match the snapshot 1`] = `
|
|
|
136
136
|
aria-hidden="true"
|
|
137
137
|
class="rdp-day rdp-hidden rdp-outside"
|
|
138
138
|
data-day="2020-05-31"
|
|
139
|
+
data-hidden="true"
|
|
139
140
|
data-month="2020-05"
|
|
141
|
+
data-outside="true"
|
|
140
142
|
role="gridcell"
|
|
141
143
|
>
|
|
142
144
|
<button
|
|
@@ -343,6 +345,7 @@ exports[`should match the snapshot 1`] = `
|
|
|
343
345
|
aria-selected="true"
|
|
344
346
|
class="rdp-day rdp-range_start rdp-selected"
|
|
345
347
|
data-day="2020-06-15"
|
|
348
|
+
data-selected="true"
|
|
346
349
|
role="gridcell"
|
|
347
350
|
>
|
|
348
351
|
<button
|
|
@@ -357,6 +360,7 @@ exports[`should match the snapshot 1`] = `
|
|
|
357
360
|
aria-selected="true"
|
|
358
361
|
class="rdp-day rdp-range_middle rdp-selected"
|
|
359
362
|
data-day="2020-06-16"
|
|
363
|
+
data-selected="true"
|
|
360
364
|
role="gridcell"
|
|
361
365
|
>
|
|
362
366
|
<button
|
|
@@ -371,6 +375,7 @@ exports[`should match the snapshot 1`] = `
|
|
|
371
375
|
aria-selected="true"
|
|
372
376
|
class="rdp-day rdp-range_middle rdp-selected"
|
|
373
377
|
data-day="2020-06-17"
|
|
378
|
+
data-selected="true"
|
|
374
379
|
role="gridcell"
|
|
375
380
|
>
|
|
376
381
|
<button
|
|
@@ -385,6 +390,7 @@ exports[`should match the snapshot 1`] = `
|
|
|
385
390
|
aria-selected="true"
|
|
386
391
|
class="rdp-day rdp-range_middle rdp-selected"
|
|
387
392
|
data-day="2020-06-18"
|
|
393
|
+
data-selected="true"
|
|
388
394
|
role="gridcell"
|
|
389
395
|
>
|
|
390
396
|
<button
|
|
@@ -399,6 +405,7 @@ exports[`should match the snapshot 1`] = `
|
|
|
399
405
|
aria-selected="true"
|
|
400
406
|
class="rdp-day rdp-range_end rdp-selected"
|
|
401
407
|
data-day="2020-06-19"
|
|
408
|
+
data-selected="true"
|
|
402
409
|
role="gridcell"
|
|
403
410
|
>
|
|
404
411
|
<button
|
|
@@ -566,7 +573,9 @@ exports[`should match the snapshot 1`] = `
|
|
|
566
573
|
aria-hidden="true"
|
|
567
574
|
class="rdp-day rdp-hidden rdp-outside"
|
|
568
575
|
data-day="2020-07-01"
|
|
576
|
+
data-hidden="true"
|
|
569
577
|
data-month="2020-07"
|
|
578
|
+
data-outside="true"
|
|
570
579
|
role="gridcell"
|
|
571
580
|
>
|
|
572
581
|
<button
|
|
@@ -581,7 +590,9 @@ exports[`should match the snapshot 1`] = `
|
|
|
581
590
|
aria-hidden="true"
|
|
582
591
|
class="rdp-day rdp-hidden rdp-outside"
|
|
583
592
|
data-day="2020-07-02"
|
|
593
|
+
data-hidden="true"
|
|
584
594
|
data-month="2020-07"
|
|
595
|
+
data-outside="true"
|
|
585
596
|
role="gridcell"
|
|
586
597
|
>
|
|
587
598
|
<button
|
|
@@ -596,7 +607,9 @@ exports[`should match the snapshot 1`] = `
|
|
|
596
607
|
aria-hidden="true"
|
|
597
608
|
class="rdp-day rdp-hidden rdp-outside"
|
|
598
609
|
data-day="2020-07-03"
|
|
610
|
+
data-hidden="true"
|
|
599
611
|
data-month="2020-07"
|
|
612
|
+
data-outside="true"
|
|
600
613
|
role="gridcell"
|
|
601
614
|
>
|
|
602
615
|
<button
|
|
@@ -611,7 +624,9 @@ exports[`should match the snapshot 1`] = `
|
|
|
611
624
|
aria-hidden="true"
|
|
612
625
|
class="rdp-day rdp-hidden rdp-outside"
|
|
613
626
|
data-day="2020-07-04"
|
|
627
|
+
data-hidden="true"
|
|
614
628
|
data-month="2020-07"
|
|
629
|
+
data-outside="true"
|
|
615
630
|
role="gridcell"
|
|
616
631
|
>
|
|
617
632
|
<button
|
|
@@ -774,7 +789,9 @@ exports[`when a day in the range is clicked when the day is clicked again when a
|
|
|
774
789
|
aria-hidden="true"
|
|
775
790
|
class="rdp-day rdp-hidden rdp-outside"
|
|
776
791
|
data-day="2020-05-31"
|
|
792
|
+
data-hidden="true"
|
|
777
793
|
data-month="2020-05"
|
|
794
|
+
data-outside="true"
|
|
778
795
|
role="gridcell"
|
|
779
796
|
>
|
|
780
797
|
<button
|
|
@@ -1006,6 +1023,7 @@ exports[`when a day in the range is clicked when the day is clicked again when a
|
|
|
1006
1023
|
<td
|
|
1007
1024
|
class="rdp-day rdp-focused"
|
|
1008
1025
|
data-day="2020-06-17"
|
|
1026
|
+
data-focused="true"
|
|
1009
1027
|
role="gridcell"
|
|
1010
1028
|
>
|
|
1011
1029
|
<button
|
|
@@ -1199,7 +1217,9 @@ exports[`when a day in the range is clicked when the day is clicked again when a
|
|
|
1199
1217
|
aria-hidden="true"
|
|
1200
1218
|
class="rdp-day rdp-hidden rdp-outside"
|
|
1201
1219
|
data-day="2020-07-01"
|
|
1220
|
+
data-hidden="true"
|
|
1202
1221
|
data-month="2020-07"
|
|
1222
|
+
data-outside="true"
|
|
1203
1223
|
role="gridcell"
|
|
1204
1224
|
>
|
|
1205
1225
|
<button
|
|
@@ -1214,7 +1234,9 @@ exports[`when a day in the range is clicked when the day is clicked again when a
|
|
|
1214
1234
|
aria-hidden="true"
|
|
1215
1235
|
class="rdp-day rdp-hidden rdp-outside"
|
|
1216
1236
|
data-day="2020-07-02"
|
|
1237
|
+
data-hidden="true"
|
|
1217
1238
|
data-month="2020-07"
|
|
1239
|
+
data-outside="true"
|
|
1218
1240
|
role="gridcell"
|
|
1219
1241
|
>
|
|
1220
1242
|
<button
|
|
@@ -1229,7 +1251,9 @@ exports[`when a day in the range is clicked when the day is clicked again when a
|
|
|
1229
1251
|
aria-hidden="true"
|
|
1230
1252
|
class="rdp-day rdp-hidden rdp-outside"
|
|
1231
1253
|
data-day="2020-07-03"
|
|
1254
|
+
data-hidden="true"
|
|
1232
1255
|
data-month="2020-07"
|
|
1256
|
+
data-outside="true"
|
|
1233
1257
|
role="gridcell"
|
|
1234
1258
|
>
|
|
1235
1259
|
<button
|
|
@@ -1244,7 +1268,9 @@ exports[`when a day in the range is clicked when the day is clicked again when a
|
|
|
1244
1268
|
aria-hidden="true"
|
|
1245
1269
|
class="rdp-day rdp-hidden rdp-outside"
|
|
1246
1270
|
data-day="2020-07-04"
|
|
1271
|
+
data-hidden="true"
|
|
1247
1272
|
data-month="2020-07"
|
|
1273
|
+
data-outside="true"
|
|
1248
1274
|
role="gridcell"
|
|
1249
1275
|
>
|
|
1250
1276
|
<button
|
|
@@ -137,7 +137,9 @@ exports[`should match the snapshot 1`] = `
|
|
|
137
137
|
aria-hidden="true"
|
|
138
138
|
class="rdp-day rdp-hidden rdp-outside"
|
|
139
139
|
data-day="2021-10-31"
|
|
140
|
+
data-hidden="true"
|
|
140
141
|
data-month="2021-10"
|
|
142
|
+
data-outside="true"
|
|
141
143
|
role="gridcell"
|
|
142
144
|
>
|
|
143
145
|
<button
|
|
@@ -478,6 +480,7 @@ exports[`should match the snapshot 1`] = `
|
|
|
478
480
|
<td
|
|
479
481
|
class="rdp-day rdp-today"
|
|
480
482
|
data-day="2021-11-25"
|
|
483
|
+
data-today="true"
|
|
481
484
|
role="gridcell"
|
|
482
485
|
>
|
|
483
486
|
<button
|
|
@@ -562,7 +565,9 @@ exports[`should match the snapshot 1`] = `
|
|
|
562
565
|
aria-hidden="true"
|
|
563
566
|
class="rdp-day rdp-hidden rdp-outside"
|
|
564
567
|
data-day="2021-12-01"
|
|
568
|
+
data-hidden="true"
|
|
565
569
|
data-month="2021-12"
|
|
570
|
+
data-outside="true"
|
|
566
571
|
role="gridcell"
|
|
567
572
|
>
|
|
568
573
|
<button
|
|
@@ -577,7 +582,9 @@ exports[`should match the snapshot 1`] = `
|
|
|
577
582
|
aria-hidden="true"
|
|
578
583
|
class="rdp-day rdp-hidden rdp-outside"
|
|
579
584
|
data-day="2021-12-02"
|
|
585
|
+
data-hidden="true"
|
|
580
586
|
data-month="2021-12"
|
|
587
|
+
data-outside="true"
|
|
581
588
|
role="gridcell"
|
|
582
589
|
>
|
|
583
590
|
<button
|
|
@@ -592,7 +599,9 @@ exports[`should match the snapshot 1`] = `
|
|
|
592
599
|
aria-hidden="true"
|
|
593
600
|
class="rdp-day rdp-hidden rdp-outside"
|
|
594
601
|
data-day="2021-12-03"
|
|
602
|
+
data-hidden="true"
|
|
595
603
|
data-month="2021-12"
|
|
604
|
+
data-outside="true"
|
|
596
605
|
role="gridcell"
|
|
597
606
|
>
|
|
598
607
|
<button
|
|
@@ -607,7 +616,9 @@ exports[`should match the snapshot 1`] = `
|
|
|
607
616
|
aria-hidden="true"
|
|
608
617
|
class="rdp-day rdp-hidden rdp-outside"
|
|
609
618
|
data-day="2021-12-04"
|
|
619
|
+
data-hidden="true"
|
|
610
620
|
data-month="2021-12"
|
|
621
|
+
data-outside="true"
|
|
611
622
|
role="gridcell"
|
|
612
623
|
>
|
|
613
624
|
<button
|
package/examples/index.ts
CHANGED
|
@@ -38,6 +38,7 @@ export * from "./ModifiersStyle";
|
|
|
38
38
|
export * from "./ModifiersToday";
|
|
39
39
|
export * from "./Multiple";
|
|
40
40
|
export * from "./MultipleMinMax";
|
|
41
|
+
export * from "./MultipleRequired";
|
|
41
42
|
export * from "./MultipleMonths";
|
|
42
43
|
export * from "./MultipleMonthsPaged";
|
|
43
44
|
export * from "./NumberingSystem";
|
|
@@ -45,6 +46,7 @@ export * from "./OutsideDays";
|
|
|
45
46
|
export * from "./Range";
|
|
46
47
|
export * from "./RangeExcludeDisabled";
|
|
47
48
|
export * from "./RangeMinMax";
|
|
49
|
+
export * from "./RangeRequired";
|
|
48
50
|
export * from "./RangeShiftKey";
|
|
49
51
|
export * from "./Rtl";
|
|
50
52
|
export * from "./Single";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-day-picker",
|
|
3
|
-
"version": "9.0.
|
|
3
|
+
"version": "9.0.6",
|
|
4
4
|
"description": "Customizable Date Picker for React",
|
|
5
5
|
"author": "Giampaolo Bellavite <io@gpbl.dev>",
|
|
6
6
|
"homepage": "https://daypicker.dev",
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
"scripts": {
|
|
114
114
|
"prepublish": "pnpm build",
|
|
115
115
|
"build": "pnpm build:cjs && pnpm build:esm && pnpm build:css",
|
|
116
|
-
"build:cjs": "tsc --project tsconfig-cjs.json",
|
|
116
|
+
"build:cjs": "tsc --project tsconfig-cjs.json && echo '{ \"type\": \"commonjs\" }' > dist/cjs/package.json",
|
|
117
117
|
"build:esm": "tsc --project tsconfig-esm.json",
|
|
118
118
|
"build:css": "./scripts/build-css.sh ./src/style.css ./src/style.module.css",
|
|
119
119
|
"lint": "eslint .",
|
|
@@ -136,16 +136,16 @@
|
|
|
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.4.
|
|
139
|
+
"@testing-library/jest-dom": "^6.4.8",
|
|
140
140
|
"@testing-library/react": "^16.0.0",
|
|
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": "^
|
|
144
|
+
"@types/node": "^22.0.0",
|
|
145
145
|
"@types/react": "^18.3.3",
|
|
146
146
|
"@types/react-dom": "^18.3.0",
|
|
147
|
-
"@typescript-eslint/eslint-plugin": "^7.
|
|
148
|
-
"@typescript-eslint/parser": "^7.
|
|
147
|
+
"@typescript-eslint/eslint-plugin": "^7.18.0",
|
|
148
|
+
"@typescript-eslint/parser": "^7.18.0",
|
|
149
149
|
"date-fns": "^3.6.0",
|
|
150
150
|
"date-fns-jalali": "3.6.0-1",
|
|
151
151
|
"eslint": "^8.57.0",
|
|
@@ -169,7 +169,7 @@
|
|
|
169
169
|
"ts-jest": "^29.2.3",
|
|
170
170
|
"ts-node": "^10.9.2",
|
|
171
171
|
"tslib": "^2.6.3",
|
|
172
|
-
"typescript": "~5.5.
|
|
172
|
+
"typescript": "~5.5.4",
|
|
173
173
|
"typescript-css-modules": "^1.0.4"
|
|
174
174
|
},
|
|
175
175
|
"peerDependencies": {
|
package/src/DayPicker.tsx
CHANGED
|
@@ -531,12 +531,6 @@ export function DayPicker(props: DayPickerProps) {
|
|
|
531
531
|
)
|
|
532
532
|
: undefined;
|
|
533
533
|
|
|
534
|
-
const dataAttributes = {
|
|
535
|
-
"data-day": dateLib.format(date, "yyyy-MM-dd"),
|
|
536
|
-
"data-month": day.outside
|
|
537
|
-
? dateLib.format(date, "yyyy-MM")
|
|
538
|
-
: undefined
|
|
539
|
-
};
|
|
540
534
|
return (
|
|
541
535
|
<components.Day
|
|
542
536
|
key={`${dateLib.format(date, "yyyy-MM-dd")}_${dateLib.format(day.displayMonth, "yyyy-MM")}`}
|
|
@@ -548,7 +542,18 @@ export function DayPicker(props: DayPickerProps) {
|
|
|
548
542
|
aria-hidden={modifiers.hidden || undefined}
|
|
549
543
|
aria-selected={modifiers.selected || undefined}
|
|
550
544
|
aria-label={ariaLabel}
|
|
551
|
-
{
|
|
545
|
+
data-day={dateLib.format(date, "yyyy-MM-dd")}
|
|
546
|
+
data-month={
|
|
547
|
+
day.outside
|
|
548
|
+
? dateLib.format(date, "yyyy-MM")
|
|
549
|
+
: undefined
|
|
550
|
+
}
|
|
551
|
+
data-selected={modifiers.selected || undefined}
|
|
552
|
+
data-disabled={modifiers.disabled || undefined}
|
|
553
|
+
data-hidden={modifiers.hidden || undefined}
|
|
554
|
+
data-outside={day.outside || undefined}
|
|
555
|
+
data-focused={modifiers.focused || undefined}
|
|
556
|
+
data-today={modifiers.today || undefined}
|
|
552
557
|
>
|
|
553
558
|
{isInteractive ? (
|
|
554
559
|
<components.DayButton
|
|
@@ -90,7 +90,7 @@ describe("useRange", () => {
|
|
|
90
90
|
|
|
91
91
|
expect(result.current.selected).toEqual({
|
|
92
92
|
from: new Date(2023, 6, 10),
|
|
93
|
-
to:
|
|
93
|
+
to: new Date(2023, 6, 10)
|
|
94
94
|
});
|
|
95
95
|
});
|
|
96
96
|
|
|
@@ -135,7 +135,7 @@ describe("useRange", () => {
|
|
|
135
135
|
|
|
136
136
|
expect(result.current.selected).toEqual({
|
|
137
137
|
from: new Date(2023, 6, 10),
|
|
138
|
-
to:
|
|
138
|
+
to: new Date(2023, 6, 10)
|
|
139
139
|
});
|
|
140
140
|
});
|
|
141
141
|
});
|
|
@@ -24,7 +24,6 @@ export function useRange<T extends DayPickerProps>(
|
|
|
24
24
|
onSelect
|
|
25
25
|
} = props as PropsRange;
|
|
26
26
|
|
|
27
|
-
const { differenceInCalendarDays } = dateLib;
|
|
28
27
|
const [selected, setSelected] = React.useState<DateRange | undefined>(
|
|
29
28
|
initiallySelected
|
|
30
29
|
);
|
|
@@ -49,32 +48,10 @@ export function useRange<T extends DayPickerProps>(
|
|
|
49
48
|
modifiers: Modifiers,
|
|
50
49
|
e: React.MouseEvent | React.KeyboardEvent
|
|
51
50
|
) => {
|
|
51
|
+
const { min, max } = props as PropsRange;
|
|
52
52
|
const newRange = triggerDate
|
|
53
|
-
? addToRange(triggerDate, selected, dateLib)
|
|
53
|
+
? addToRange(triggerDate, selected, min, max, required, dateLib)
|
|
54
54
|
: undefined;
|
|
55
|
-
const { min, max } = props as PropsRange;
|
|
56
|
-
|
|
57
|
-
if (min) {
|
|
58
|
-
if (
|
|
59
|
-
newRange?.from &&
|
|
60
|
-
newRange.to &&
|
|
61
|
-
differenceInCalendarDays(newRange.to, newRange.from) < min - 1
|
|
62
|
-
) {
|
|
63
|
-
newRange.from = triggerDate;
|
|
64
|
-
newRange.to = undefined;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
if (max) {
|
|
69
|
-
if (
|
|
70
|
-
newRange?.from &&
|
|
71
|
-
newRange.to &&
|
|
72
|
-
differenceInCalendarDays(newRange.to, newRange.from) >= max
|
|
73
|
-
) {
|
|
74
|
-
newRange.from = triggerDate;
|
|
75
|
-
newRange.to = undefined;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
55
|
|
|
79
56
|
if (newRange?.from && newRange.to) {
|
|
80
57
|
let newDate = newRange.from;
|
|
@@ -85,6 +62,7 @@ export function useRange<T extends DayPickerProps>(
|
|
|
85
62
|
disabled &&
|
|
86
63
|
dateMatchModifiers(newDate, disabled, dateLib)
|
|
87
64
|
) {
|
|
65
|
+
// if a disabled days is found, the range is reset
|
|
88
66
|
newRange.from = triggerDate;
|
|
89
67
|
newRange.to = undefined;
|
|
90
68
|
break;
|
package/src/style.css
CHANGED
|
@@ -49,7 +49,8 @@
|
|
|
49
49
|
--rdp-week_number-height: var(--rdp-day-height); /* The height of the week number cells. */
|
|
50
50
|
--rdp-week_number-opacity: 0.75; /* The opacity of the week number. */
|
|
51
51
|
--rdp-week_number-width: var(--rdp-day-width); /* The width of the week number cells. */
|
|
52
|
-
|
|
52
|
+
--rdp-weeknumber-text-align: center; /* The text alignment of the weekday cells. */
|
|
53
|
+
|
|
53
54
|
--rdp-weekday-font: 500 smaller var(--rdp-font-family); /* The font of the weekday. */
|
|
54
55
|
--rdp-weekday-opacity: 0.75; /* The opacity of the weekday. */
|
|
55
56
|
--rdp-weekday-padding: 0.5rem 0rem; /* The padding of the weekday. */
|
|
@@ -207,6 +208,10 @@
|
|
|
207
208
|
max-width: fit-content;
|
|
208
209
|
}
|
|
209
210
|
|
|
211
|
+
.rdp-month_grid {
|
|
212
|
+
border-collapse: collapse;
|
|
213
|
+
}
|
|
214
|
+
|
|
210
215
|
.rdp-nav {
|
|
211
216
|
position: absolute;
|
|
212
217
|
inset-block-start: 0;
|
|
@@ -233,10 +238,7 @@
|
|
|
233
238
|
width: var(--rdp-week_number-width);
|
|
234
239
|
border: var(--rdp-week_number-border);
|
|
235
240
|
border-radius: var(--rdp-week_number-border-radius);
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
.rdp-week_number_interactive {
|
|
239
|
-
cursor: pointer;
|
|
241
|
+
text-align: var(--rdp-weeknumber-text-align);
|
|
240
242
|
}
|
|
241
243
|
|
|
242
244
|
/* DAY MODIFIERS */
|
|
@@ -296,6 +298,10 @@
|
|
|
296
298
|
background-color: var(--rdp-range_end-date-background-color);
|
|
297
299
|
}
|
|
298
300
|
|
|
301
|
+
.rdp-range_start.rdp-range_end {
|
|
302
|
+
background: revert;
|
|
303
|
+
}
|
|
304
|
+
|
|
299
305
|
.rdp-focusable {
|
|
300
306
|
cursor: pointer;
|
|
301
307
|
}
|
package/src/style.module.css
CHANGED
|
@@ -49,7 +49,8 @@
|
|
|
49
49
|
--rdp-week_number-height: var(--rdp-day-height); /* The height of the week number cells. */
|
|
50
50
|
--rdp-week_number-opacity: 0.75; /* The opacity of the week number. */
|
|
51
51
|
--rdp-week_number-width: var(--rdp-day-width); /* The width of the week number cells. */
|
|
52
|
-
|
|
52
|
+
--rdp-weeknumber-text-align: center; /* The text alignment of the weekday cells. */
|
|
53
|
+
|
|
53
54
|
--rdp-weekday-font: 500 smaller var(--rdp-font-family); /* The font of the weekday. */
|
|
54
55
|
--rdp-weekday-opacity: 0.75; /* The opacity of the weekday. */
|
|
55
56
|
--rdp-weekday-padding: 0.5rem 0rem; /* The padding of the weekday. */
|
|
@@ -207,6 +208,10 @@
|
|
|
207
208
|
max-width: fit-content;
|
|
208
209
|
}
|
|
209
210
|
|
|
211
|
+
.month_grid {
|
|
212
|
+
border-collapse: collapse;
|
|
213
|
+
}
|
|
214
|
+
|
|
210
215
|
.nav {
|
|
211
216
|
position: absolute;
|
|
212
217
|
inset-block-start: 0;
|
|
@@ -233,10 +238,7 @@
|
|
|
233
238
|
width: var(--rdp-week_number-width);
|
|
234
239
|
border: var(--rdp-week_number-border);
|
|
235
240
|
border-radius: var(--rdp-week_number-border-radius);
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
.week_number_interactive {
|
|
239
|
-
cursor: pointer;
|
|
241
|
+
text-align: var(--rdp-weeknumber-text-align);
|
|
240
242
|
}
|
|
241
243
|
|
|
242
244
|
/* DAY MODIFIERS */
|
|
@@ -262,7 +264,7 @@
|
|
|
262
264
|
|
|
263
265
|
.hidden {
|
|
264
266
|
visibility: hidden;
|
|
265
|
-
color: var(
|
|
267
|
+
color: var(--rdp-range_start-color);
|
|
266
268
|
}
|
|
267
269
|
|
|
268
270
|
.range_start {
|
|
@@ -296,6 +298,10 @@
|
|
|
296
298
|
background-color: var(--rdp-range_end-date-background-color);
|
|
297
299
|
}
|
|
298
300
|
|
|
301
|
+
.range_start.range_end {
|
|
302
|
+
background: revert;
|
|
303
|
+
}
|
|
304
|
+
|
|
299
305
|
.focusable {
|
|
300
306
|
cursor: pointer;
|
|
301
307
|
}
|