react-day-picker 9.13.2 → 10.0.0-next.0
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 +85 -83
- package/dist/cjs/UI.d.ts +0 -230
- package/dist/cjs/classes/DateLib.d.ts +0 -21
- package/dist/cjs/classes/DateLib.js +3 -13
- package/dist/cjs/components/Dropdown.d.ts +0 -11
- package/dist/cjs/components/Dropdown.js +3 -1
- package/dist/cjs/components/NextMonthButton.js +1 -3
- package/dist/cjs/components/PreviousMonthButton.js +1 -3
- package/dist/cjs/components/custom-components.d.ts +0 -1
- package/dist/cjs/components/custom-components.js +0 -1
- package/dist/cjs/formatters/formatCaption.d.ts +0 -6
- package/dist/cjs/formatters/formatCaption.js +0 -7
- package/dist/cjs/formatters/formatYearDropdown.d.ts +0 -6
- package/dist/cjs/formatters/formatYearDropdown.js +0 -7
- package/dist/cjs/helpers/getFormatters.d.ts +0 -2
- package/dist/cjs/helpers/getFormatters.js +0 -7
- package/dist/cjs/helpers/getInitialMonth.d.ts +1 -1
- package/dist/cjs/helpers/getNavMonth.d.ts +1 -1
- package/dist/cjs/helpers/getNavMonth.js +1 -21
- package/dist/cjs/hijri/index.d.ts +28 -0
- package/dist/cjs/hijri/index.js +92 -0
- package/dist/cjs/hijri/lib/addMonths.d.ts +1 -0
- package/dist/cjs/hijri/lib/addMonths.js +9 -0
- package/dist/cjs/hijri/lib/addYears.d.ts +1 -0
- package/dist/cjs/hijri/lib/addYears.js +9 -0
- package/dist/cjs/hijri/lib/differenceInCalendarMonths.d.ts +1 -0
- package/dist/cjs/hijri/lib/differenceInCalendarMonths.js +10 -0
- package/dist/cjs/hijri/lib/eachMonthOfInterval.d.ts +2 -0
- package/dist/cjs/hijri/lib/eachMonthOfInterval.js +29 -0
- package/dist/cjs/hijri/lib/eachYearOfInterval.d.ts +2 -0
- package/dist/cjs/hijri/lib/eachYearOfInterval.js +19 -0
- package/dist/cjs/hijri/lib/endOfMonth.d.ts +1 -0
- package/dist/cjs/hijri/lib/endOfMonth.js +14 -0
- package/dist/cjs/hijri/lib/endOfYear.d.ts +1 -0
- package/dist/cjs/hijri/lib/endOfYear.js +14 -0
- package/dist/cjs/hijri/lib/fallbackLocaleData.d.ts +5 -0
- package/dist/cjs/hijri/lib/fallbackLocaleData.js +111 -0
- package/dist/cjs/hijri/lib/format.d.ts +3 -0
- package/dist/cjs/hijri/lib/format.js +149 -0
- package/dist/cjs/hijri/lib/getMonth.d.ts +1 -0
- package/dist/cjs/hijri/lib/getMonth.js +7 -0
- package/dist/cjs/hijri/lib/getYear.d.ts +1 -0
- package/dist/cjs/hijri/lib/getYear.js +7 -0
- package/dist/cjs/hijri/lib/index.d.ts +17 -0
- package/dist/cjs/hijri/lib/index.js +33 -0
- package/dist/cjs/hijri/lib/isSameMonth.d.ts +1 -0
- package/dist/cjs/hijri/lib/isSameMonth.js +10 -0
- package/dist/cjs/hijri/lib/isSameYear.d.ts +1 -0
- package/dist/cjs/hijri/lib/isSameYear.js +9 -0
- package/dist/cjs/hijri/lib/newDate.d.ts +1 -0
- package/dist/cjs/hijri/lib/newDate.js +7 -0
- package/dist/cjs/hijri/lib/setMonth.d.ts +1 -0
- package/dist/cjs/hijri/lib/setMonth.js +27 -0
- package/dist/cjs/hijri/lib/setYear.d.ts +1 -0
- package/dist/cjs/hijri/lib/setYear.js +15 -0
- package/dist/cjs/hijri/lib/startOfMonth.d.ts +1 -0
- package/dist/cjs/hijri/lib/startOfMonth.js +12 -0
- package/dist/cjs/hijri/lib/startOfYear.d.ts +1 -0
- package/dist/cjs/hijri/lib/startOfYear.js +12 -0
- package/dist/cjs/hijri/utils/conversion.d.ts +5 -0
- package/dist/cjs/hijri/utils/conversion.js +40 -0
- package/dist/cjs/hijri/utils/daysInMonth.d.ts +1 -0
- package/dist/cjs/hijri/utils/daysInMonth.js +24 -0
- package/dist/cjs/hijri/utils/range.d.ts +21 -0
- package/dist/cjs/hijri/utils/range.js +104 -0
- package/dist/cjs/hijri/utils/types.d.ts +5 -0
- package/dist/cjs/hijri/utils/types.js +2 -0
- package/dist/cjs/labels/labelDayButton.d.ts +0 -5
- package/dist/cjs/labels/labelDayButton.js +0 -6
- package/dist/cjs/labels/labelGrid.d.ts +0 -5
- package/dist/cjs/labels/labelGrid.js +0 -6
- package/dist/cjs/selection/useRange.js +22 -4
- package/dist/cjs/types/index.d.ts +0 -1
- package/dist/cjs/types/index.js +0 -1
- package/dist/cjs/types/props.d.ts +30 -100
- package/dist/cjs/types/shared.d.ts +1 -45
- package/dist/cjs/useCalendar.d.ts +1 -1
- package/dist/cjs/utils/dateMatchModifiers.d.ts +0 -5
- package/dist/cjs/utils/dateMatchModifiers.js +0 -6
- package/dist/cjs/utils/rangeIncludesDate.d.ts +0 -5
- package/dist/cjs/utils/rangeIncludesDate.js +0 -7
- package/dist/esm/DayPicker.js +85 -83
- package/dist/esm/UI.d.ts +0 -230
- package/dist/esm/classes/DateLib.d.ts +0 -21
- package/dist/esm/classes/DateLib.js +2 -12
- package/dist/esm/components/Dropdown.d.ts +0 -11
- package/dist/esm/components/Dropdown.js +3 -1
- package/dist/esm/components/NextMonthButton.js +1 -3
- package/dist/esm/components/PreviousMonthButton.js +1 -3
- package/dist/esm/components/custom-components.d.ts +0 -1
- package/dist/esm/components/custom-components.js +0 -1
- package/dist/esm/formatters/formatCaption.d.ts +0 -6
- package/dist/esm/formatters/formatCaption.js +0 -6
- package/dist/esm/formatters/formatYearDropdown.d.ts +0 -6
- package/dist/esm/formatters/formatYearDropdown.js +0 -6
- package/dist/esm/helpers/getFormatters.d.ts +0 -2
- package/dist/esm/helpers/getFormatters.js +0 -7
- package/dist/esm/helpers/getInitialMonth.d.ts +1 -1
- package/dist/esm/helpers/getNavMonth.d.ts +1 -1
- package/dist/esm/helpers/getNavMonth.js +1 -21
- package/dist/esm/hijri/index.d.ts +28 -0
- package/dist/esm/hijri/index.js +49 -0
- package/dist/esm/hijri/lib/addMonths.d.ts +1 -0
- package/dist/esm/hijri/lib/addMonths.js +6 -0
- package/dist/esm/hijri/lib/addYears.d.ts +1 -0
- package/dist/esm/hijri/lib/addYears.js +6 -0
- package/dist/esm/hijri/lib/differenceInCalendarMonths.d.ts +1 -0
- package/dist/esm/hijri/lib/differenceInCalendarMonths.js +7 -0
- package/dist/esm/hijri/lib/eachMonthOfInterval.d.ts +2 -0
- package/dist/esm/hijri/lib/eachMonthOfInterval.js +26 -0
- package/dist/esm/hijri/lib/eachYearOfInterval.d.ts +2 -0
- package/dist/esm/hijri/lib/eachYearOfInterval.js +16 -0
- package/dist/esm/hijri/lib/endOfMonth.d.ts +1 -0
- package/dist/esm/hijri/lib/endOfMonth.js +11 -0
- package/dist/esm/hijri/lib/endOfYear.d.ts +1 -0
- package/dist/esm/hijri/lib/endOfYear.js +11 -0
- package/dist/esm/hijri/lib/fallbackLocaleData.d.ts +5 -0
- package/dist/esm/hijri/lib/fallbackLocaleData.js +105 -0
- package/dist/esm/hijri/lib/format.d.ts +3 -0
- package/dist/esm/hijri/lib/format.js +146 -0
- package/dist/esm/hijri/lib/getMonth.d.ts +1 -0
- package/dist/esm/hijri/lib/getMonth.js +4 -0
- package/dist/esm/hijri/lib/getYear.d.ts +1 -0
- package/dist/esm/hijri/lib/getYear.js +4 -0
- package/dist/esm/hijri/lib/index.d.ts +17 -0
- package/dist/esm/hijri/lib/index.js +17 -0
- package/dist/esm/hijri/lib/isSameMonth.d.ts +1 -0
- package/dist/esm/hijri/lib/isSameMonth.js +7 -0
- package/dist/esm/hijri/lib/isSameYear.d.ts +1 -0
- package/dist/esm/hijri/lib/isSameYear.js +6 -0
- package/dist/esm/hijri/lib/newDate.d.ts +1 -0
- package/dist/esm/hijri/lib/newDate.js +4 -0
- package/dist/esm/hijri/lib/setMonth.d.ts +1 -0
- package/dist/esm/hijri/lib/setMonth.js +24 -0
- package/dist/esm/hijri/lib/setYear.d.ts +1 -0
- package/dist/esm/hijri/lib/setYear.js +12 -0
- package/dist/esm/hijri/lib/startOfMonth.d.ts +1 -0
- package/dist/esm/hijri/lib/startOfMonth.js +9 -0
- package/dist/esm/hijri/lib/startOfYear.d.ts +1 -0
- package/dist/esm/hijri/lib/startOfYear.js +9 -0
- package/dist/esm/hijri/utils/conversion.d.ts +5 -0
- package/dist/esm/hijri/utils/conversion.js +36 -0
- package/dist/esm/hijri/utils/daysInMonth.d.ts +1 -0
- package/dist/esm/hijri/utils/daysInMonth.js +21 -0
- package/dist/esm/hijri/utils/range.d.ts +21 -0
- package/dist/esm/hijri/utils/range.js +96 -0
- package/dist/esm/hijri/utils/types.d.ts +5 -0
- package/dist/esm/hijri/utils/types.js +1 -0
- package/dist/esm/labels/labelDayButton.d.ts +0 -5
- package/dist/esm/labels/labelDayButton.js +0 -5
- package/dist/esm/labels/labelGrid.d.ts +0 -5
- package/dist/esm/labels/labelGrid.js +0 -5
- package/dist/esm/selection/useRange.js +22 -4
- package/dist/esm/types/index.d.ts +0 -1
- package/dist/esm/types/index.js +0 -1
- package/dist/esm/types/props.d.ts +30 -100
- package/dist/esm/types/shared.d.ts +1 -45
- package/dist/esm/useCalendar.d.ts +1 -1
- package/dist/esm/utils/dateMatchModifiers.d.ts +0 -5
- package/dist/esm/utils/dateMatchModifiers.js +0 -5
- package/dist/esm/utils/rangeIncludesDate.d.ts +0 -5
- package/dist/esm/utils/rangeIncludesDate.js +0 -5
- package/hijri.d.ts +1 -0
- package/hijri.js +2 -0
- package/package.json +24 -23
- package/dist/cjs/components/Button.d.ts +0 -9
- package/dist/cjs/components/Button.js +0 -16
- package/dist/cjs/jalali.d.ts +0 -2
- package/dist/cjs/jalali.js +0 -18
- package/dist/cjs/types/deprecated.d.ts +0 -180
- package/dist/cjs/types/deprecated.js +0 -26
- package/dist/esm/components/Button.d.ts +0 -9
- package/dist/esm/components/Button.js +0 -10
- package/dist/esm/jalali.d.ts +0 -2
- package/dist/esm/jalali.js +0 -2
- package/dist/esm/types/deprecated.d.ts +0 -180
- package/dist/esm/types/deprecated.js +0 -23
- package/jalali.d.ts +0 -1
- package/jalali.js +0 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getMonth(date: Date): number;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getYear(date: Date): number;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export * from "./addMonths.js";
|
|
2
|
+
export * from "./addYears.js";
|
|
3
|
+
export * from "./differenceInCalendarMonths.js";
|
|
4
|
+
export * from "./eachMonthOfInterval.js";
|
|
5
|
+
export * from "./eachYearOfInterval.js";
|
|
6
|
+
export * from "./endOfMonth.js";
|
|
7
|
+
export * from "./endOfYear.js";
|
|
8
|
+
export * from "./format.js";
|
|
9
|
+
export * from "./getMonth.js";
|
|
10
|
+
export * from "./getYear.js";
|
|
11
|
+
export * from "./isSameMonth.js";
|
|
12
|
+
export * from "./isSameYear.js";
|
|
13
|
+
export * from "./newDate.js";
|
|
14
|
+
export * from "./setMonth.js";
|
|
15
|
+
export * from "./setYear.js";
|
|
16
|
+
export * from "./startOfMonth.js";
|
|
17
|
+
export * from "./startOfYear.js";
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./addMonths.js"), exports);
|
|
18
|
+
__exportStar(require("./addYears.js"), exports);
|
|
19
|
+
__exportStar(require("./differenceInCalendarMonths.js"), exports);
|
|
20
|
+
__exportStar(require("./eachMonthOfInterval.js"), exports);
|
|
21
|
+
__exportStar(require("./eachYearOfInterval.js"), exports);
|
|
22
|
+
__exportStar(require("./endOfMonth.js"), exports);
|
|
23
|
+
__exportStar(require("./endOfYear.js"), exports);
|
|
24
|
+
__exportStar(require("./format.js"), exports);
|
|
25
|
+
__exportStar(require("./getMonth.js"), exports);
|
|
26
|
+
__exportStar(require("./getYear.js"), exports);
|
|
27
|
+
__exportStar(require("./isSameMonth.js"), exports);
|
|
28
|
+
__exportStar(require("./isSameYear.js"), exports);
|
|
29
|
+
__exportStar(require("./newDate.js"), exports);
|
|
30
|
+
__exportStar(require("./setMonth.js"), exports);
|
|
31
|
+
__exportStar(require("./setYear.js"), exports);
|
|
32
|
+
__exportStar(require("./startOfMonth.js"), exports);
|
|
33
|
+
__exportStar(require("./startOfYear.js"), exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isSameMonth(dateLeft: Date, dateRight: Date): boolean;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isSameMonth = isSameMonth;
|
|
4
|
+
const conversion_js_1 = require("../utils/conversion.js");
|
|
5
|
+
function isSameMonth(dateLeft, dateRight) {
|
|
6
|
+
const hijriLeft = (0, conversion_js_1.toHijriDate)(dateLeft);
|
|
7
|
+
const hijriRight = (0, conversion_js_1.toHijriDate)(dateRight);
|
|
8
|
+
return (hijriLeft.year === hijriRight.year &&
|
|
9
|
+
hijriLeft.monthIndex === hijriRight.monthIndex);
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isSameYear(dateLeft: Date, dateRight: Date): boolean;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isSameYear = isSameYear;
|
|
4
|
+
const conversion_js_1 = require("../utils/conversion.js");
|
|
5
|
+
function isSameYear(dateLeft, dateRight) {
|
|
6
|
+
const hijriLeft = (0, conversion_js_1.toHijriDate)(dateLeft);
|
|
7
|
+
const hijriRight = (0, conversion_js_1.toHijriDate)(dateRight);
|
|
8
|
+
return hijriLeft.year === hijriRight.year;
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function newDate(year: number, monthIndex: number, day: number): Date;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.newDate = newDate;
|
|
4
|
+
const conversion_js_1 = require("../utils/conversion.js");
|
|
5
|
+
function newDate(year, monthIndex, day) {
|
|
6
|
+
return (0, conversion_js_1.toGregorianDate)({ year, monthIndex, day });
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function setMonth(date: Date, monthIndex: number): Date;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setMonth = setMonth;
|
|
4
|
+
const conversion_js_1 = require("../utils/conversion.js");
|
|
5
|
+
const daysInMonth_js_1 = require("../utils/daysInMonth.js");
|
|
6
|
+
function setMonth(date, monthIndex) {
|
|
7
|
+
const hijri = (0, conversion_js_1.toHijriDate)(date);
|
|
8
|
+
// Handle overflow/underflow of monthIndex
|
|
9
|
+
// Note: monthIndex argument is absolute month index for the year.
|
|
10
|
+
// E.g. setMonth(..., 13) sets to Safar next year.
|
|
11
|
+
let targetYear = hijri.year;
|
|
12
|
+
let targetMonth = monthIndex;
|
|
13
|
+
if (targetMonth > 11 || targetMonth < 0) {
|
|
14
|
+
targetYear += Math.floor(targetMonth / 12);
|
|
15
|
+
targetMonth = targetMonth % 12;
|
|
16
|
+
if (targetMonth < 0) {
|
|
17
|
+
targetMonth += 12;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const daysInTargetMonth = (0, daysInMonth_js_1.getDaysInMonth)(targetYear, targetMonth);
|
|
21
|
+
const day = Math.min(hijri.day, daysInTargetMonth);
|
|
22
|
+
return (0, conversion_js_1.toGregorianDate)({
|
|
23
|
+
year: targetYear,
|
|
24
|
+
monthIndex: targetMonth,
|
|
25
|
+
day,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function setYear(date: Date, year: number): Date;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setYear = setYear;
|
|
4
|
+
const conversion_js_1 = require("../utils/conversion.js");
|
|
5
|
+
const daysInMonth_js_1 = require("../utils/daysInMonth.js");
|
|
6
|
+
function setYear(date, year) {
|
|
7
|
+
const hijri = (0, conversion_js_1.toHijriDate)(date);
|
|
8
|
+
const daysInTargetMonth = (0, daysInMonth_js_1.getDaysInMonth)(year, hijri.monthIndex);
|
|
9
|
+
const day = Math.min(hijri.day, daysInTargetMonth);
|
|
10
|
+
return (0, conversion_js_1.toGregorianDate)({
|
|
11
|
+
year,
|
|
12
|
+
monthIndex: hijri.monthIndex,
|
|
13
|
+
day,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function startOfMonth(date: Date): Date;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.startOfMonth = startOfMonth;
|
|
4
|
+
const conversion_js_1 = require("../utils/conversion.js");
|
|
5
|
+
function startOfMonth(date) {
|
|
6
|
+
const hijri = (0, conversion_js_1.toHijriDate)(date);
|
|
7
|
+
return (0, conversion_js_1.toGregorianDate)({
|
|
8
|
+
year: hijri.year,
|
|
9
|
+
monthIndex: hijri.monthIndex,
|
|
10
|
+
day: 1,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function startOfYear(date: Date): Date;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.startOfYear = startOfYear;
|
|
4
|
+
const conversion_js_1 = require("../utils/conversion.js");
|
|
5
|
+
function startOfYear(date) {
|
|
6
|
+
const hijri = (0, conversion_js_1.toHijriDate)(date);
|
|
7
|
+
return (0, conversion_js_1.toGregorianDate)({
|
|
8
|
+
year: hijri.year,
|
|
9
|
+
monthIndex: 0,
|
|
10
|
+
day: 1,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { HijriDate } from "./types.js";
|
|
2
|
+
/** Convert a Gregorian date to a Hijri date. */
|
|
3
|
+
export declare function toHijriDate(date: Date): HijriDate;
|
|
4
|
+
/** Convert a Hijri date back to the Gregorian calendar. */
|
|
5
|
+
export declare function toGregorianDate(hijri: HijriDate): Date;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toHijriDate = toHijriDate;
|
|
4
|
+
exports.toGregorianDate = toGregorianDate;
|
|
5
|
+
const hijri_converter_1 = require("@tabby_ai/hijri-converter");
|
|
6
|
+
const range_js_1 = require("./range.js");
|
|
7
|
+
/** Convert a Gregorian date to a Hijri date. */
|
|
8
|
+
function toHijriDate(date) {
|
|
9
|
+
const clamped = (0, range_js_1.clampGregorianDate)(date);
|
|
10
|
+
const { year, month, day } = (0, range_js_1.getGregorianDateParts)(clamped);
|
|
11
|
+
// gregorianToHijri uses 1-indexed months
|
|
12
|
+
const hijri = (0, hijri_converter_1.gregorianToHijri)({ year, month, day });
|
|
13
|
+
return {
|
|
14
|
+
year: hijri.year,
|
|
15
|
+
monthIndex: hijri.month - 1, // Convert to 0-indexed
|
|
16
|
+
day: hijri.day,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/** Convert a Hijri date back to the Gregorian calendar. */
|
|
20
|
+
function toGregorianDate(hijri) {
|
|
21
|
+
const clamped = (0, range_js_1.clampHijriDate)(hijri);
|
|
22
|
+
// hijriToGregorian expects 1-indexed months. Probe down from the candidate
|
|
23
|
+
// day to handle invalid month/day combinations without throwing.
|
|
24
|
+
for (let day = clamped.day; day >= 1; day -= 1) {
|
|
25
|
+
try {
|
|
26
|
+
const gregorian = (0, hijri_converter_1.hijriToGregorian)({
|
|
27
|
+
year: clamped.year,
|
|
28
|
+
month: clamped.monthIndex + 1,
|
|
29
|
+
day,
|
|
30
|
+
});
|
|
31
|
+
return (0, range_js_1.clampGregorianDate)(new Date(gregorian.year, gregorian.month - 1, gregorian.day));
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Try a lower day for months that only have 29 days.
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Fallback to the minimum supported Gregorian date if conversion probing
|
|
38
|
+
// somehow fails for all days.
|
|
39
|
+
return new Date(range_js_1.GREGORIAN_MIN_DATE);
|
|
40
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getDaysInMonth(year: number, monthIndex: number): number;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDaysInMonth = getDaysInMonth;
|
|
4
|
+
const conversion_js_1 = require("./conversion.js");
|
|
5
|
+
const range_js_1 = require("./range.js");
|
|
6
|
+
const MAX_DAY_IN_HIJRI_MONTH = 30;
|
|
7
|
+
const MIN_DAY_IN_HIJRI_MONTH = 29;
|
|
8
|
+
function getDaysInMonth(year, monthIndex) {
|
|
9
|
+
const clamped = (0, range_js_1.clampHijriDate)({ year, monthIndex, day: 1 });
|
|
10
|
+
for (let day = MAX_DAY_IN_HIJRI_MONTH; day >= MIN_DAY_IN_HIJRI_MONTH; day -= 1) {
|
|
11
|
+
const candidateDate = (0, conversion_js_1.toGregorianDate)({
|
|
12
|
+
year: clamped.year,
|
|
13
|
+
monthIndex: clamped.monthIndex,
|
|
14
|
+
day,
|
|
15
|
+
});
|
|
16
|
+
const roundTrip = (0, conversion_js_1.toHijriDate)(candidateDate);
|
|
17
|
+
if (roundTrip.year === clamped.year &&
|
|
18
|
+
roundTrip.monthIndex === clamped.monthIndex &&
|
|
19
|
+
roundTrip.day === day) {
|
|
20
|
+
return day;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return MIN_DAY_IN_HIJRI_MONTH;
|
|
24
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { HijriDate } from "./types.js";
|
|
2
|
+
type GregorianDateParts = {
|
|
3
|
+
year: number;
|
|
4
|
+
month: number;
|
|
5
|
+
day: number;
|
|
6
|
+
};
|
|
7
|
+
/** Returns Gregorian date parts while preserving years < 100. */
|
|
8
|
+
export declare function getGregorianDateParts(date: Date): GregorianDateParts;
|
|
9
|
+
/** Internal Gregorian lower bound supported by the Hijri converter. */
|
|
10
|
+
export declare const GREGORIAN_MIN_DATE: Date;
|
|
11
|
+
/** Internal Gregorian upper bound supported by the Hijri converter. */
|
|
12
|
+
export declare const GREGORIAN_MAX_DATE: Date;
|
|
13
|
+
/** Clamp a Gregorian date to the supported Hijri conversion range. */
|
|
14
|
+
export declare function clampGregorianDate(date: Date): Date;
|
|
15
|
+
/** Returns whether the provided Gregorian date was clamped. */
|
|
16
|
+
export declare function wasGregorianDateClamped(date: Date): boolean;
|
|
17
|
+
/** Clamp a Hijri date to the supported range and normalize month overflow. */
|
|
18
|
+
export declare function clampHijriDate(date: HijriDate): HijriDate;
|
|
19
|
+
/** Returns whether the provided Hijri date was clamped. */
|
|
20
|
+
export declare function wasHijriDateClamped(date: HijriDate): boolean;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GREGORIAN_MAX_DATE = exports.GREGORIAN_MIN_DATE = void 0;
|
|
4
|
+
exports.getGregorianDateParts = getGregorianDateParts;
|
|
5
|
+
exports.clampGregorianDate = clampGregorianDate;
|
|
6
|
+
exports.wasGregorianDateClamped = wasGregorianDateClamped;
|
|
7
|
+
exports.clampHijriDate = clampHijriDate;
|
|
8
|
+
exports.wasHijriDateClamped = wasHijriDateClamped;
|
|
9
|
+
const MAX_HIJRI_DAY = 30;
|
|
10
|
+
const MONTHS_PER_YEAR = 12;
|
|
11
|
+
const HIJRI_MIN = { year: 1343, monthIndex: 0, day: 1 };
|
|
12
|
+
const HIJRI_MAX = { year: 1500, monthIndex: 11, day: 30 };
|
|
13
|
+
const GREGORIAN_MIN = { year: 1924, month: 8, day: 1 };
|
|
14
|
+
const GREGORIAN_MAX = { year: 2077, month: 11, day: 16 };
|
|
15
|
+
function compareGregorianDates(left, right) {
|
|
16
|
+
if (left.year !== right.year) {
|
|
17
|
+
return left.year - right.year;
|
|
18
|
+
}
|
|
19
|
+
if (left.month !== right.month) {
|
|
20
|
+
return left.month - right.month;
|
|
21
|
+
}
|
|
22
|
+
return left.day - right.day;
|
|
23
|
+
}
|
|
24
|
+
function createDate(parts) {
|
|
25
|
+
return new Date(parts.year, parts.month - 1, parts.day);
|
|
26
|
+
}
|
|
27
|
+
function normalizeHijriMonth(year, monthIndex) {
|
|
28
|
+
let normalizedYear = year + Math.trunc(monthIndex / MONTHS_PER_YEAR);
|
|
29
|
+
let normalizedMonth = monthIndex % MONTHS_PER_YEAR;
|
|
30
|
+
if (normalizedMonth < 0) {
|
|
31
|
+
normalizedMonth += MONTHS_PER_YEAR;
|
|
32
|
+
normalizedYear -= 1;
|
|
33
|
+
}
|
|
34
|
+
return { year: normalizedYear, monthIndex: normalizedMonth };
|
|
35
|
+
}
|
|
36
|
+
/** Returns Gregorian date parts while preserving years < 100. */
|
|
37
|
+
function getGregorianDateParts(date) {
|
|
38
|
+
const useUTC = date.getFullYear() < 100;
|
|
39
|
+
return {
|
|
40
|
+
year: useUTC ? date.getUTCFullYear() : date.getFullYear(),
|
|
41
|
+
month: (useUTC ? date.getUTCMonth() : date.getMonth()) + 1,
|
|
42
|
+
day: useUTC ? date.getUTCDate() : date.getDate(),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/** Internal Gregorian lower bound supported by the Hijri converter. */
|
|
46
|
+
exports.GREGORIAN_MIN_DATE = createDate(GREGORIAN_MIN);
|
|
47
|
+
/** Internal Gregorian upper bound supported by the Hijri converter. */
|
|
48
|
+
exports.GREGORIAN_MAX_DATE = createDate(GREGORIAN_MAX);
|
|
49
|
+
/** Clamp a Gregorian date to the supported Hijri conversion range. */
|
|
50
|
+
function clampGregorianDate(date) {
|
|
51
|
+
const parts = getGregorianDateParts(date);
|
|
52
|
+
if (compareGregorianDates(parts, GREGORIAN_MIN) < 0) {
|
|
53
|
+
return createDate(GREGORIAN_MIN);
|
|
54
|
+
}
|
|
55
|
+
if (compareGregorianDates(parts, GREGORIAN_MAX) > 0) {
|
|
56
|
+
return createDate(GREGORIAN_MAX);
|
|
57
|
+
}
|
|
58
|
+
return date;
|
|
59
|
+
}
|
|
60
|
+
/** Returns whether the provided Gregorian date was clamped. */
|
|
61
|
+
function wasGregorianDateClamped(date) {
|
|
62
|
+
return clampGregorianDate(date) !== date;
|
|
63
|
+
}
|
|
64
|
+
/** Clamp a Hijri date to the supported range and normalize month overflow. */
|
|
65
|
+
function clampHijriDate(date) {
|
|
66
|
+
const normalized = normalizeHijriMonth(date.year, date.monthIndex);
|
|
67
|
+
const candidate = {
|
|
68
|
+
year: normalized.year,
|
|
69
|
+
monthIndex: normalized.monthIndex,
|
|
70
|
+
day: Math.min(Math.max(date.day, 1), MAX_HIJRI_DAY),
|
|
71
|
+
};
|
|
72
|
+
if (candidate.year < HIJRI_MIN.year) {
|
|
73
|
+
return { ...HIJRI_MIN };
|
|
74
|
+
}
|
|
75
|
+
if (candidate.year > HIJRI_MAX.year) {
|
|
76
|
+
return { ...HIJRI_MAX };
|
|
77
|
+
}
|
|
78
|
+
if (candidate.year === HIJRI_MIN.year &&
|
|
79
|
+
candidate.monthIndex < HIJRI_MIN.monthIndex) {
|
|
80
|
+
return { ...HIJRI_MIN };
|
|
81
|
+
}
|
|
82
|
+
if (candidate.year === HIJRI_MAX.year &&
|
|
83
|
+
candidate.monthIndex > HIJRI_MAX.monthIndex) {
|
|
84
|
+
return { ...HIJRI_MAX };
|
|
85
|
+
}
|
|
86
|
+
if (candidate.year === HIJRI_MIN.year &&
|
|
87
|
+
candidate.monthIndex === HIJRI_MIN.monthIndex &&
|
|
88
|
+
candidate.day < HIJRI_MIN.day) {
|
|
89
|
+
return { ...HIJRI_MIN };
|
|
90
|
+
}
|
|
91
|
+
if (candidate.year === HIJRI_MAX.year &&
|
|
92
|
+
candidate.monthIndex === HIJRI_MAX.monthIndex &&
|
|
93
|
+
candidate.day > HIJRI_MAX.day) {
|
|
94
|
+
return { ...HIJRI_MAX };
|
|
95
|
+
}
|
|
96
|
+
return candidate;
|
|
97
|
+
}
|
|
98
|
+
/** Returns whether the provided Hijri date was clamped. */
|
|
99
|
+
function wasHijriDateClamped(date) {
|
|
100
|
+
const clamped = clampHijriDate(date);
|
|
101
|
+
return (clamped.year !== date.year ||
|
|
102
|
+
clamped.monthIndex !== date.monthIndex ||
|
|
103
|
+
clamped.day !== date.day);
|
|
104
|
+
}
|
|
@@ -16,8 +16,3 @@ import type { Modifiers } from "../types/index.js";
|
|
|
16
16
|
* @see https://daypicker.dev/docs/translation#aria-labels
|
|
17
17
|
*/
|
|
18
18
|
export declare function labelDayButton(date: Date, modifiers: Modifiers, options?: DateLibOptions, dateLib?: DateLib): string;
|
|
19
|
-
/**
|
|
20
|
-
* @ignore
|
|
21
|
-
* @deprecated Use `labelDayButton` instead.
|
|
22
|
-
*/
|
|
23
|
-
export declare const labelDay: typeof labelDayButton;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.labelDay = void 0;
|
|
4
3
|
exports.labelDayButton = labelDayButton;
|
|
5
4
|
const DateLib_js_1 = require("../classes/DateLib.js");
|
|
6
5
|
/**
|
|
@@ -26,8 +25,3 @@ function labelDayButton(date, modifiers, options, dateLib) {
|
|
|
26
25
|
label = `${label}, selected`;
|
|
27
26
|
return label;
|
|
28
27
|
}
|
|
29
|
-
/**
|
|
30
|
-
* @ignore
|
|
31
|
-
* @deprecated Use `labelDayButton` instead.
|
|
32
|
-
*/
|
|
33
|
-
exports.labelDay = labelDayButton;
|
|
@@ -12,8 +12,3 @@ import { DateLib, type DateLibOptions } from "../classes/DateLib.js";
|
|
|
12
12
|
* @see https://daypicker.dev/docs/translation#aria-labels
|
|
13
13
|
*/
|
|
14
14
|
export declare function labelGrid(date: Date, options?: DateLibOptions, dateLib?: DateLib): string;
|
|
15
|
-
/**
|
|
16
|
-
* @ignore
|
|
17
|
-
* @deprecated Use {@link labelGrid} instead.
|
|
18
|
-
*/
|
|
19
|
-
export declare const labelCaption: typeof labelGrid;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.labelCaption = void 0;
|
|
4
3
|
exports.labelGrid = labelGrid;
|
|
5
4
|
const DateLib_js_1 = require("../classes/DateLib.js");
|
|
6
5
|
/**
|
|
@@ -19,8 +18,3 @@ function labelGrid(date, options, dateLib) {
|
|
|
19
18
|
const lib = dateLib ?? new DateLib_js_1.DateLib(options);
|
|
20
19
|
return lib.formatMonthYear(date);
|
|
21
20
|
}
|
|
22
|
-
/**
|
|
23
|
-
* @ignore
|
|
24
|
-
* @deprecated Use {@link labelGrid} instead.
|
|
25
|
-
*/
|
|
26
|
-
exports.labelCaption = labelGrid;
|
|
@@ -14,15 +14,33 @@ const rangeIncludesDate_js_1 = require("../utils/rangeIncludesDate.js");
|
|
|
14
14
|
* range, and a function to check if a date is within the range.
|
|
15
15
|
*/
|
|
16
16
|
function useRange(props, dateLib) {
|
|
17
|
-
const { disabled, excludeDisabled, selected: initiallySelected, required, onSelect, } = props;
|
|
17
|
+
const { disabled, excludeDisabled, resetOnSelect, selected: initiallySelected, required, onSelect, } = props;
|
|
18
18
|
const [internallySelected, setSelected] = (0, useControlledValue_js_1.useControlledValue)(initiallySelected, onSelect ? initiallySelected : undefined);
|
|
19
19
|
const selected = !onSelect ? internallySelected : initiallySelected;
|
|
20
20
|
const isSelected = (date) => selected && (0, rangeIncludesDate_js_1.rangeIncludesDate)(selected, date, false, dateLib);
|
|
21
21
|
const select = (triggerDate, modifiers, e) => {
|
|
22
22
|
const { min, max } = props;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
let newRange;
|
|
24
|
+
if (triggerDate) {
|
|
25
|
+
const selectedFrom = selected?.from;
|
|
26
|
+
const selectedTo = selected?.to;
|
|
27
|
+
const hasFullRange = !!selectedFrom && !!selectedTo;
|
|
28
|
+
const isClickingSingleDayRange = !!selectedFrom &&
|
|
29
|
+
!!selectedTo &&
|
|
30
|
+
dateLib.isSameDay(selectedFrom, selectedTo) &&
|
|
31
|
+
dateLib.isSameDay(triggerDate, selectedFrom);
|
|
32
|
+
if (resetOnSelect && (hasFullRange || !selected?.from)) {
|
|
33
|
+
if (!required && isClickingSingleDayRange) {
|
|
34
|
+
newRange = undefined;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
newRange = { from: triggerDate, to: undefined };
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
newRange = (0, index_js_1.addToRange)(triggerDate, selected, min, max, required, dateLib);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
26
44
|
if (excludeDisabled && disabled && newRange?.from && newRange.to) {
|
|
27
45
|
if ((0, index_js_1.rangeContainsModifiers)({ from: newRange.from, to: newRange.to }, disabled, dateLib)) {
|
|
28
46
|
// if a disabled days is found, the range is reset
|
package/dist/cjs/types/index.js
CHANGED
|
@@ -14,7 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./deprecated.js"), exports);
|
|
18
17
|
__exportStar(require("./props.js"), exports);
|
|
19
18
|
__exportStar(require("./selection.js"), exports);
|
|
20
19
|
__exportStar(require("./shared.js"), exports);
|