@stackone/malachite 2.62.0 → 2.63.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/COMPONENTS.md +2 -0
- package/dist/assets/icons/caret_double_left.svg.js +6 -0
- package/dist/assets/icons/caret_double_left.svg.js.map +1 -0
- package/dist/assets/icons/caret_double_right.svg.js +6 -0
- package/dist/assets/icons/caret_double_right.svg.js.map +1 -0
- package/dist/components/Card.js +77 -68
- package/dist/components/Card.js.map +1 -1
- package/dist/components/Chat/ChatThread.js +1 -2
- package/dist/components/Chat/ChatThread.js.map +1 -1
- package/dist/components/CustomIcons/CaretDoubleLeftIcon.js +21 -0
- package/dist/components/CustomIcons/CaretDoubleLeftIcon.js.map +1 -0
- package/dist/components/CustomIcons/CaretDoubleRightIcon.js +21 -0
- package/dist/components/CustomIcons/CaretDoubleRightIcon.js.map +1 -0
- package/dist/components/CustomIcons/index.js +306 -300
- package/dist/components/CustomIcons/index.js.map +1 -1
- package/dist/components/DatePicker.js +36 -0
- package/dist/components/DatePicker.js.map +1 -0
- package/dist/components/DatePickerField.js +246 -0
- package/dist/components/DatePickerField.js.map +1 -0
- package/dist/components/DatePickerPanel.js +399 -0
- package/dist/components/DatePickerPanel.js.map +1 -0
- package/dist/components/DatePickerTrigger.js +68 -0
- package/dist/components/DatePickerTrigger.js.map +1 -0
- package/dist/components/DateRangePicker.js +43 -0
- package/dist/components/DateRangePicker.js.map +1 -0
- package/dist/components/dateMath.js +153 -0
- package/dist/components/dateMath.js.map +1 -0
- package/dist/components/datePickerStyles.js +46 -0
- package/dist/components/datePickerStyles.js.map +1 -0
- package/dist/components/useDatePickerDraft.js +126 -0
- package/dist/components/useDatePickerDraft.js.map +1 -0
- package/dist/index.d.ts +233 -101
- package/dist/index.js +431 -423
- package/dist/index.js.map +1 -1
- package/dist/tailwind.css.js +1 -1
- package/dist/theme.js +372 -349
- package/dist/theme.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
const M = [
|
|
2
|
+
"Jan",
|
|
3
|
+
"Feb",
|
|
4
|
+
"Mar",
|
|
5
|
+
"Apr",
|
|
6
|
+
"May",
|
|
7
|
+
"Jun",
|
|
8
|
+
"Jul",
|
|
9
|
+
"Aug",
|
|
10
|
+
"Sep",
|
|
11
|
+
"Oct",
|
|
12
|
+
"Nov",
|
|
13
|
+
"Dec"
|
|
14
|
+
], F = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], E = [
|
|
15
|
+
"Sunday",
|
|
16
|
+
"Monday",
|
|
17
|
+
"Tuesday",
|
|
18
|
+
"Wednesday",
|
|
19
|
+
"Thursday",
|
|
20
|
+
"Friday",
|
|
21
|
+
"Saturday"
|
|
22
|
+
], g = (t, e) => e === "utc" ? {
|
|
23
|
+
year: t.getUTCFullYear(),
|
|
24
|
+
month: t.getUTCMonth(),
|
|
25
|
+
day: t.getUTCDate(),
|
|
26
|
+
hours: t.getUTCHours(),
|
|
27
|
+
minutes: t.getUTCMinutes(),
|
|
28
|
+
seconds: t.getUTCSeconds()
|
|
29
|
+
} : {
|
|
30
|
+
year: t.getFullYear(),
|
|
31
|
+
month: t.getMonth(),
|
|
32
|
+
day: t.getDate(),
|
|
33
|
+
hours: t.getHours(),
|
|
34
|
+
minutes: t.getMinutes(),
|
|
35
|
+
seconds: t.getSeconds()
|
|
36
|
+
};
|
|
37
|
+
const a = ({ year: t, month: e, day: n, hours: s = 0, minutes: o = 0, seconds: m = 0 }, c, r = 0) => {
|
|
38
|
+
const u = t >= 0 && t < 100 ? 400 : 0;
|
|
39
|
+
if (c === "utc") {
|
|
40
|
+
const y = new Date(
|
|
41
|
+
Date.UTC(t + u, e, n, s, o, m, r)
|
|
42
|
+
);
|
|
43
|
+
return u && y.setUTCFullYear(y.getUTCFullYear() - u), y;
|
|
44
|
+
}
|
|
45
|
+
const d = new Date(t + u, e, n, s, o, m, r);
|
|
46
|
+
return u && d.setFullYear(d.getFullYear() - u), d;
|
|
47
|
+
}, h = (t, e) => {
|
|
48
|
+
const { year: n, month: s, day: o } = g(t, e);
|
|
49
|
+
return { year: n, month: s, day: o };
|
|
50
|
+
}, Y = (t, e) => t.year - e.year || t.month - e.month || t.day - e.day, b = (t, e) => !!t && !!e && Y(t, e) === 0, I = ({ year: t, month: e, day: n }) => `${t}-${String(e + 1).padStart(2, "0")}-${String(n).padStart(2, "0")}`, k = ({ year: t, month: e, day: n }, s) => a({ year: t, month: e, day: n }, s), _ = ({ year: t, month: e, day: n }, s) => a({ year: t, month: e, day: n, hours: 23, minutes: 59, seconds: 59 }, s, 999), l = (t, e) => h(a({ year: t.year, month: t.month, day: t.day + e }, "utc"), "utc"), N = ({ year: t, month: e }) => h(a({ year: t, month: e + 1, day: 0 }, "utc"), "utc").day, p = ({ year: t, month: e }, n) => {
|
|
51
|
+
const s = t * 12 + e + n;
|
|
52
|
+
return { year: Math.floor(s / 12), month: (s % 12 + 12) % 12 };
|
|
53
|
+
}, W = (t, e) => {
|
|
54
|
+
const n = p(t, e);
|
|
55
|
+
return { ...n, day: Math.min(t.day, N(n)) };
|
|
56
|
+
}, U = (t) => a(t, "utc").getUTCDay(), f = { sunday: 0, monday: 1 }, R = (t) => Array.from({ length: 7 }, (e, n) => {
|
|
57
|
+
const s = (n + f[t]) % 7;
|
|
58
|
+
return { short: F[s], long: E[s] };
|
|
59
|
+
}), K = (t, e) => {
|
|
60
|
+
const n = { ...t, day: 1 }, s = (U(n) - f[e] + 7) % 7, o = Math.ceil((s + N(t)) / 7) * 7, m = l(n, -s), c = [];
|
|
61
|
+
for (let r = 0; r < o; r++)
|
|
62
|
+
r % 7 === 0 && c.push([]), c[c.length - 1].push(l(m, r));
|
|
63
|
+
return c;
|
|
64
|
+
}, L = (t, e) => l(t, -((U(t) - f[e] + 7) % 7)), J = ({ year: t, month: e }) => `${M[e]} ${t}`, i = (t) => String(t).padStart(2, "0"), w = (t, e) => e === "second" ? `${i(t.hours)}:${i(t.minutes)}:${i(t.seconds)}` : `${i(t.hours)}:${i(t.minutes)}`, O = (t) => t === "utc" ? " UTC" : "", Z = (t, e, n) => {
|
|
65
|
+
const s = g(t, e), o = `${M[s.month]} ${s.day} ${s.year}`;
|
|
66
|
+
return n === "day" ? o : `${o}, ${w(s, n)}${O(e)}`;
|
|
67
|
+
}, x = (t, e, n) => `${t ? w(g(t, e), n) : n === "second" ? "--:--:--" : "--:--"}${O(e)}`;
|
|
68
|
+
let $;
|
|
69
|
+
const B = (t) => ($ ?? ($ = new Intl.DateTimeFormat("en-US", {
|
|
70
|
+
weekday: "long",
|
|
71
|
+
year: "numeric",
|
|
72
|
+
month: "long",
|
|
73
|
+
day: "numeric",
|
|
74
|
+
timeZone: "UTC"
|
|
75
|
+
})), $.format(a(t, "utc"))), G = (t, e, n) => e && t.getTime() < e.getTime() ? new Date(e.getTime()) : n && t.getTime() > n.getTime() ? new Date(n.getTime()) : t, P = (t, e, n, s) => (!n || e.getTime() >= n.getTime()) && (!s || t.getTime() <= s.getTime()), A = (t) => t instanceof Date && !Number.isNaN(t.getTime()), H = /^(\d{4})-(\d{2})-(\d{2})(?:[T ](\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{1,3}))?)?)?$/, V = (t, e) => {
|
|
76
|
+
if (t == null || t === "")
|
|
77
|
+
return null;
|
|
78
|
+
const n = typeof t == "string" ? H.exec(t) : null;
|
|
79
|
+
if (n) {
|
|
80
|
+
const [, o, m, c, r = "0", u = "0", d = "0", y = ""] = n, T = {
|
|
81
|
+
year: Number(o),
|
|
82
|
+
month: Number(m) - 1,
|
|
83
|
+
day: Number(c),
|
|
84
|
+
hours: Number(r),
|
|
85
|
+
minutes: Number(u),
|
|
86
|
+
seconds: Number(d)
|
|
87
|
+
};
|
|
88
|
+
if (T.hours > 23 || T.minutes > 59 || T.seconds > 59)
|
|
89
|
+
return null;
|
|
90
|
+
const S = a(T, e, Number(y.padEnd(3, "0")));
|
|
91
|
+
return b(h(S, e), T) ? S : null;
|
|
92
|
+
}
|
|
93
|
+
const s = t instanceof Date ? t : new Date(t);
|
|
94
|
+
return A(s) ? s : null;
|
|
95
|
+
}, X = (t, e, n) => a(
|
|
96
|
+
{
|
|
97
|
+
year: t.year,
|
|
98
|
+
month: t.month,
|
|
99
|
+
day: t.day,
|
|
100
|
+
hours: e.hours,
|
|
101
|
+
minutes: e.minutes,
|
|
102
|
+
seconds: e.seconds
|
|
103
|
+
},
|
|
104
|
+
n
|
|
105
|
+
), D = {
|
|
106
|
+
minute: 6e4,
|
|
107
|
+
second: 1e3
|
|
108
|
+
}, C = (t, e, n) => {
|
|
109
|
+
if (n === "day")
|
|
110
|
+
return k(g(t, e), e);
|
|
111
|
+
if (e === "local" && !Number.isInteger(t.getTimezoneOffset())) {
|
|
112
|
+
const o = g(t, e);
|
|
113
|
+
return a({ ...o, seconds: n === "second" ? o.seconds : 0 }, e);
|
|
114
|
+
}
|
|
115
|
+
const s = D[n];
|
|
116
|
+
return new Date(Math.floor(t.getTime() / s) * s);
|
|
117
|
+
}, j = (t, e, n) => n === "day" ? _(h(t, e), e) : new Date(C(t, e, n).getTime() + D[n] - 1), q = (t, e, n) => {
|
|
118
|
+
if (n === "day")
|
|
119
|
+
return t;
|
|
120
|
+
const s = C(t, e, n);
|
|
121
|
+
return s.getTime() < t.getTime() ? new Date(s.getTime() + D[n]) : s;
|
|
122
|
+
};
|
|
123
|
+
export {
|
|
124
|
+
l as addDays,
|
|
125
|
+
p as addMonths,
|
|
126
|
+
W as addMonthsToDay,
|
|
127
|
+
q as ceilTo,
|
|
128
|
+
G as clampDate,
|
|
129
|
+
Y as compareDays,
|
|
130
|
+
h as dayKeyOf,
|
|
131
|
+
I as dayKeyString,
|
|
132
|
+
N as daysInMonth,
|
|
133
|
+
_ as endOfDay,
|
|
134
|
+
j as endOfUnit,
|
|
135
|
+
Z as formatDate,
|
|
136
|
+
w as formatTime,
|
|
137
|
+
x as formatTimeReadout,
|
|
138
|
+
a as fromParts,
|
|
139
|
+
J as monthLabel,
|
|
140
|
+
K as monthWeeks,
|
|
141
|
+
P as overlapsBounds,
|
|
142
|
+
g as partsOf,
|
|
143
|
+
b as sameDay,
|
|
144
|
+
B as spokenDay,
|
|
145
|
+
k as startOfDay,
|
|
146
|
+
L as startOfWeek,
|
|
147
|
+
V as toDate,
|
|
148
|
+
C as truncateTo,
|
|
149
|
+
R as weekdayLabels,
|
|
150
|
+
U as weekdayOf,
|
|
151
|
+
X as withTime
|
|
152
|
+
};
|
|
153
|
+
//# sourceMappingURL=dateMath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dateMath.js","sources":["../../src/components/dateMath.ts"],"sourcesContent":["export type DatePickerTimeZone = 'local' | 'utc';\n\nexport type DatePickerPrecision = 'day' | 'minute' | 'second';\n\nexport type WeekStart = 'monday' | 'sunday';\n\nexport interface DayKey {\n year: number;\n month: number;\n day: number;\n}\n\nexport interface MonthKey {\n year: number;\n month: number;\n}\n\nexport interface DateTimeParts extends DayKey {\n hours: number;\n minutes: number;\n seconds: number;\n}\n\nexport interface DateRange {\n start: Date;\n end: Date;\n}\n\nconst MONTHS_SHORT = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n] as const;\n\nconst WEEKDAYS_SHORT = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'] as const;\nconst WEEKDAYS_LONG = [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n] as const;\n\nexport const partsOf = (date: Date, zone: DatePickerTimeZone): DateTimeParts =>\n zone === 'utc'\n ? {\n year: date.getUTCFullYear(),\n month: date.getUTCMonth(),\n day: date.getUTCDate(),\n hours: date.getUTCHours(),\n minutes: date.getUTCMinutes(),\n seconds: date.getUTCSeconds(),\n }\n : {\n year: date.getFullYear(),\n month: date.getMonth(),\n day: date.getDate(),\n hours: date.getHours(),\n minutes: date.getMinutes(),\n seconds: date.getSeconds(),\n };\n\n// `Date` reads years 0-99 as 19xx; build 400 years on (same calendar) and move back.\nconst YEAR_SHIFT = 400;\n\nexport const fromParts = (\n { year, month, day, hours = 0, minutes = 0, seconds = 0 }: DayKey & Partial<DateTimeParts>,\n zone: DatePickerTimeZone,\n milliseconds = 0,\n): Date => {\n const shift = year >= 0 && year < 100 ? YEAR_SHIFT : 0;\n if (zone === 'utc') {\n const date = new Date(\n Date.UTC(year + shift, month, day, hours, minutes, seconds, milliseconds),\n );\n if (shift) {\n date.setUTCFullYear(date.getUTCFullYear() - shift);\n }\n return date;\n }\n const date = new Date(year + shift, month, day, hours, minutes, seconds, milliseconds);\n if (shift) {\n date.setFullYear(date.getFullYear() - shift);\n }\n return date;\n};\n\nexport const dayKeyOf = (date: Date, zone: DatePickerTimeZone): DayKey => {\n const { year, month, day } = partsOf(date, zone);\n return { year, month, day };\n};\n\nexport const compareDays = (a: DayKey, b: DayKey): number =>\n a.year - b.year || a.month - b.month || a.day - b.day;\n\nexport const sameDay = (a: DayKey | null | undefined, b: DayKey | null | undefined): boolean =>\n !!a && !!b && compareDays(a, b) === 0;\n\nexport const dayKeyString = ({ year, month, day }: DayKey): string =>\n `${year}-${String(month + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\n\nexport const startOfDay = ({ year, month, day }: DayKey, zone: DatePickerTimeZone): Date =>\n fromParts({ year, month, day }, zone);\n\nexport const endOfDay = ({ year, month, day }: DayKey, zone: DatePickerTimeZone): Date =>\n fromParts({ year, month, day, hours: 23, minutes: 59, seconds: 59 }, zone, 999);\n\nexport const addDays = (day: DayKey, amount: number): DayKey =>\n dayKeyOf(fromParts({ year: day.year, month: day.month, day: day.day + amount }, 'utc'), 'utc');\n\nexport const daysInMonth = ({ year, month }: MonthKey): number =>\n dayKeyOf(fromParts({ year, month: month + 1, day: 0 }, 'utc'), 'utc').day;\n\nexport const addMonths = ({ year, month }: MonthKey, amount: number): MonthKey => {\n const total = year * 12 + month + amount;\n return { year: Math.floor(total / 12), month: ((total % 12) + 12) % 12 };\n};\n\nexport const addMonthsToDay = (day: DayKey, amount: number): DayKey => {\n const target = addMonths(day, amount);\n return { ...target, day: Math.min(day.day, daysInMonth(target)) };\n};\n\nexport const weekdayOf = (day: DayKey): number => fromParts(day, 'utc').getUTCDay();\n\nconst WEEK_START_INDEX: Record<WeekStart, number> = { sunday: 0, monday: 1 };\n\nexport const weekdayLabels = (weekStart: WeekStart): { short: string; long: string }[] =>\n Array.from({ length: 7 }, (_, index) => {\n const weekday = (index + WEEK_START_INDEX[weekStart]) % 7;\n return { short: WEEKDAYS_SHORT[weekday], long: WEEKDAYS_LONG[weekday] };\n });\n\nexport const monthWeeks = (view: MonthKey, weekStart: WeekStart): DayKey[][] => {\n const first: DayKey = { ...view, day: 1 };\n const lead = (weekdayOf(first) - WEEK_START_INDEX[weekStart] + 7) % 7;\n const cellCount = Math.ceil((lead + daysInMonth(view)) / 7) * 7;\n const start = addDays(first, -lead);\n const weeks: DayKey[][] = [];\n for (let index = 0; index < cellCount; index++) {\n if (index % 7 === 0) {\n weeks.push([]);\n }\n weeks[weeks.length - 1].push(addDays(start, index));\n }\n return weeks;\n};\n\nexport const startOfWeek = (day: DayKey, weekStart: WeekStart): DayKey =>\n addDays(day, -((weekdayOf(day) - WEEK_START_INDEX[weekStart] + 7) % 7));\n\nexport const monthLabel = ({ year, month }: MonthKey): string => `${MONTHS_SHORT[month]} ${year}`;\n\nconst pad = (value: number): string => String(value).padStart(2, '0');\n\nexport const formatTime = (\n parts: Pick<DateTimeParts, 'hours' | 'minutes' | 'seconds'>,\n precision: DatePickerPrecision,\n): string =>\n precision === 'second'\n ? `${pad(parts.hours)}:${pad(parts.minutes)}:${pad(parts.seconds)}`\n : `${pad(parts.hours)}:${pad(parts.minutes)}`;\n\nconst zoneSuffix = (zone: DatePickerTimeZone): string => (zone === 'utc' ? ' UTC' : '');\n\nexport const formatDate = (\n date: Date,\n zone: DatePickerTimeZone,\n precision: DatePickerPrecision,\n): string => {\n const parts = partsOf(date, zone);\n const day = `${MONTHS_SHORT[parts.month]} ${parts.day} ${parts.year}`;\n return precision === 'day' ? day : `${day}, ${formatTime(parts, precision)}${zoneSuffix(zone)}`;\n};\n\nexport const formatTimeReadout = (\n date: Date | null,\n zone: DatePickerTimeZone,\n precision: DatePickerPrecision,\n): string =>\n `${date ? formatTime(partsOf(date, zone), precision) : precision === 'second' ? '--:--:--' : '--:--'}${zoneSuffix(zone)}`;\n\n// Lazy, so importing the module has no side effects.\nlet spokenDayFormat: Intl.DateTimeFormat | undefined;\n\nexport const spokenDay = (day: DayKey): string => {\n spokenDayFormat ??= new Intl.DateTimeFormat('en-US', {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n timeZone: 'UTC',\n });\n return spokenDayFormat.format(fromParts(day, 'utc'));\n};\n\nexport const clampDate = (date: Date, min?: Date, max?: Date): Date => {\n if (min && date.getTime() < min.getTime()) {\n return new Date(min.getTime());\n }\n if (max && date.getTime() > max.getTime()) {\n return new Date(max.getTime());\n }\n return date;\n};\n\nexport const overlapsBounds = (from: Date, to: Date, min?: Date, max?: Date): boolean =>\n (!min || to.getTime() >= min.getTime()) && (!max || from.getTime() <= max.getTime());\n\nconst isValidDate = (value: unknown): value is Date =>\n value instanceof Date && !Number.isNaN(value.getTime());\n\nconst ZONELESS = /^(\\d{4})-(\\d{2})-(\\d{2})(?:[T ](\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{1,3}))?)?)?$/;\n\nexport const toDate = (\n value: Date | string | number | null | undefined,\n zone: DatePickerTimeZone,\n): Date | null => {\n if (value === null || value === undefined || value === '') {\n return null;\n }\n // Without an offset, a string names a wall-clock time in `zone`, not in the browser's.\n const zoneless = typeof value === 'string' ? ZONELESS.exec(value) : null;\n if (zoneless) {\n const [, year, month, day, hours = '0', minutes = '0', seconds = '0', ms = ''] = zoneless;\n const parts = {\n year: Number(year),\n month: Number(month) - 1,\n day: Number(day),\n hours: Number(hours),\n minutes: Number(minutes),\n seconds: Number(seconds),\n };\n if (parts.hours > 23 || parts.minutes > 59 || parts.seconds > 59) {\n return null;\n }\n const date = fromParts(parts, zone, Number(ms.padEnd(3, '0')));\n return sameDay(dayKeyOf(date, zone), parts) ? date : null;\n }\n const date = value instanceof Date ? value : new Date(value);\n return isValidDate(date) ? date : null;\n};\n\nexport const withTime = (\n day: DayKey,\n time: Pick<DateTimeParts, 'hours' | 'minutes' | 'seconds'>,\n zone: DatePickerTimeZone,\n): Date =>\n fromParts(\n {\n year: day.year,\n month: day.month,\n day: day.day,\n hours: time.hours,\n minutes: time.minutes,\n seconds: time.seconds,\n },\n zone,\n );\n\nconst UNIT_MS: Record<Exclude<DatePickerPrecision, 'day'>, number> = {\n minute: 60_000,\n second: 1_000,\n};\n\n// Arithmetic, not a rebuild from local fields, which moves the repeated hour when clocks go back.\nexport const truncateTo = (\n date: Date,\n zone: DatePickerTimeZone,\n precision: DatePickerPrecision,\n): Date => {\n if (precision === 'day') {\n return startOfDay(partsOf(date, zone), zone);\n }\n if (zone === 'local' && !Number.isInteger(date.getTimezoneOffset())) {\n const parts = partsOf(date, zone);\n return fromParts({ ...parts, seconds: precision === 'second' ? parts.seconds : 0 }, zone);\n }\n const unit = UNIT_MS[precision];\n return new Date(Math.floor(date.getTime() / unit) * unit);\n};\n\n/** The last millisecond of the unit `date` falls in, so a range end covers the whole of it. */\nexport const endOfUnit = (\n date: Date,\n zone: DatePickerTimeZone,\n precision: DatePickerPrecision,\n): Date =>\n precision === 'day'\n ? endOfDay(dayKeyOf(date, zone), zone)\n : new Date(truncateTo(date, zone, precision).getTime() + UNIT_MS[precision] - 1);\n\nexport const ceilTo = (\n date: Date,\n zone: DatePickerTimeZone,\n precision: DatePickerPrecision,\n): Date => {\n if (precision === 'day') {\n return date;\n }\n const floor = truncateTo(date, zone, precision);\n return floor.getTime() < date.getTime()\n ? new Date(floor.getTime() + UNIT_MS[precision])\n : floor;\n};\n"],"names":["MONTHS_SHORT","WEEKDAYS_SHORT","WEEKDAYS_LONG","partsOf","date","zone","fromParts","year","month","day","hours","minutes","seconds","milliseconds","shift","dayKeyOf","compareDays","a","b","sameDay","dayKeyString","startOfDay","endOfDay","addDays","amount","daysInMonth","addMonths","total","addMonthsToDay","target","weekdayOf","WEEK_START_INDEX","weekdayLabels","weekStart","_","index","weekday","monthWeeks","view","first","lead","cellCount","start","weeks","startOfWeek","monthLabel","pad","value","formatTime","parts","precision","zoneSuffix","formatDate","formatTimeReadout","spokenDayFormat","spokenDay","clampDate","min","max","overlapsBounds","from","to","isValidDate","ZONELESS","toDate","zoneless","ms","withTime","time","UNIT_MS","truncateTo","unit","endOfUnit","ceilTo","floor"],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { FOCUS_RING as s } from "./focusRing.js";
|
|
2
|
+
const d = "relative z-[1] flex items-center justify-center size-6 shrink-0 rounded-lg border border-solid border-transparent bg-transparent p-0 font-sans text-[length:var(--malachite-font-size-small,13px)] leading-none select-none transition-colors duration-150", g = "cursor-pointer active:opacity-[var(--malachite-date-picker-pressed-opacity,0.6)]", m = "cursor-not-allowed", f = (r) => [d, s, r ? m : g].join(" "), h = "text-[var(--malachite-text-primary,rgb(10,10,10))]", b = "text-[var(--malachite-date-picker-outside-foreground,var(--malachite-text-secondary,rgb(123,123,123)))] supports-[color:color-mix(in_srgb,red,red)]:text-[var(--malachite-date-picker-outside-foreground,color-mix(in_srgb,var(--malachite-text-primary,rgb(10,10,10))_60%,transparent))]", p = "text-[var(--malachite-text-placeholder,rgb(187,187,187))]", v = "text-[var(--malachite-accent-foreground,rgb(2,122,66))]", c = "hover:bg-[var(--malachite-date-picker-hover-background,var(--malachite-pillbutton-hover-background,rgb(232,232,232)))] supports-[color:color-mix(in_srgb,red,red)]:hover:bg-[var(--malachite-date-picker-hover-background,color-mix(in_srgb,var(--malachite-text-primary,rgb(10,10,10))_9%,transparent))]", e = "hover:bg-[var(--malachite-date-picker-subtle-hover-background,var(--malachite-pillbutton-background,rgb(241,241,241)))] supports-[color:color-mix(in_srgb,red,red)]:hover:bg-[var(--malachite-date-picker-subtle-hover-background,color-mix(in_srgb,var(--malachite-text-primary,rgb(10,10,10))_6%,transparent))]", x = "bg-[var(--malachite-date-picker-selected-background,var(--malachite-accent-background-glass,rgba(0,175,102,0.08)))] supports-[color:color-mix(in_srgb,red,red)]:bg-[var(--malachite-date-picker-selected-background,color-mix(in_srgb,var(--malachite-accent-background,rgb(0,175,102))_10%,var(--malachite-card-background,rgb(255,255,255))))]", u = "hover:border-[var(--malachite-date-picker-selected-hover-border,var(--malachite-control-border-hover,rgba(0,175,102,0.4)))] supports-[color:color-mix(in_srgb,red,red)]:hover:border-[var(--malachite-date-picker-selected-hover-border,color-mix(in_srgb,var(--malachite-accent-background,rgb(0,175,102))_40%,transparent))]", _ = "border-[var(--malachite-date-picker-today-border,var(--malachite-accent-border,rgba(0,175,102,0.2)))] supports-[color:color-mix(in_srgb,red,red)]:border-[var(--malachite-date-picker-today-border,color-mix(in_srgb,var(--malachite-accent-background,rgb(0,175,102))_40%,transparent))]", E = "hover:border-[var(--malachite-date-picker-today-hover-border,var(--malachite-control-border-hover,rgba(0,175,102,0.4)))] supports-[color:color-mix(in_srgb,red,red)]:hover:border-[var(--malachite-date-picker-today-hover-border,color-mix(in_srgb,var(--malachite-accent-background,rgb(0,175,102))_60%,transparent))]", I = ({ selected: r, today: a, outside: t, disabled: o }) => {
|
|
3
|
+
const i = o ? p : r || a ? v : t ? b : h, l = o ? "" : r ? u : a ? `${e} ${E}` : t ? e : c;
|
|
4
|
+
return [i, r ? x : "", a ? _ : "", l].filter(Boolean).join(" ");
|
|
5
|
+
}, R = "pointer-events-none absolute inset-y-0 bg-[var(--malachite-date-picker-range-background,var(--malachite-accent-background-glass,rgba(0,175,102,0.08)))] supports-[color:color-mix(in_srgb,red,red)]:bg-[var(--malachite-date-picker-range-background,color-mix(in_srgb,var(--malachite-accent-background,rgb(0,175,102))_6%,transparent))]", L = {
|
|
6
|
+
start: "left-1/2 right-0",
|
|
7
|
+
middle: "inset-x-0",
|
|
8
|
+
end: "left-0 right-1/2"
|
|
9
|
+
}, n = "text-[var(--malachite-text-secondary,rgb(123,123,123))]", k = "hover:text-[var(--malachite-text-primary,rgb(10,10,10))]", O = n, y = `${n} ${k}`, N = "flex items-center justify-center size-6 rounded-lg border-none bg-transparent p-0 cursor-pointer text-[var(--malachite-text-secondary,rgb(123,123,123))] hover:text-[var(--malachite-text-primary,rgb(10,10,10))] transition-colors aria-disabled:cursor-not-allowed aria-disabled:text-[var(--malachite-text-placeholder,rgb(187,187,187))] aria-disabled:hover:text-[var(--malachite-text-placeholder,rgb(187,187,187))]", A = "rounded-lg border-none bg-transparent px-2 py-1 font-sans text-[length:var(--malachite-font-size-small,13px)] font-medium leading-normal cursor-pointer text-[var(--malachite-accent-foreground,rgb(2,122,66))] transition-colors disabled:cursor-not-allowed disabled:opacity-40", C = "w-full rounded-lg border-none bg-transparent px-2 py-1.5 text-left font-sans text-[length:var(--malachite-font-size-small,13px)] leading-normal whitespace-nowrap cursor-pointer text-[var(--malachite-text-primary,rgb(10,10,10))] transition-colors", S = c, D = e, B = "h-px w-full shrink-0 bg-[var(--malachite-card-border,rgb(232,232,232))]", G = "w-px self-stretch shrink-0 bg-[var(--malachite-card-border,rgb(232,232,232))]", H = "font-sans text-[length:var(--malachite-font-size-small,13px)] font-medium leading-normal text-[var(--malachite-text-primary,rgb(10,10,10))]", V = {
|
|
10
|
+
small: "h-[var(--malachite-control-height-small,28px)]",
|
|
11
|
+
medium: "h-[var(--malachite-control-height-medium,32px)]",
|
|
12
|
+
large: "h-[var(--malachite-control-height-large,42px)]"
|
|
13
|
+
}, z = {
|
|
14
|
+
small: "px-2.5 gap-1.5 rounded-[var(--malachite-radius-10,10px)] text-[length:var(--malachite-font-size-small,13px)]",
|
|
15
|
+
medium: "px-2.5 gap-1.5 rounded-xl text-[length:var(--malachite-font-size-small,13px)]",
|
|
16
|
+
large: "px-4 gap-2 rounded-[var(--malachite-radius-xxl,14px)] text-[length:var(--malachite-font-size-15,15px)]"
|
|
17
|
+
}, w = {
|
|
18
|
+
small: "pr-8",
|
|
19
|
+
medium: "pr-8",
|
|
20
|
+
large: "pr-11"
|
|
21
|
+
}, U = {
|
|
22
|
+
small: "right-2",
|
|
23
|
+
medium: "right-2",
|
|
24
|
+
large: "right-3.5"
|
|
25
|
+
};
|
|
26
|
+
export {
|
|
27
|
+
f as CELL_CLASS,
|
|
28
|
+
U as CLEAR_POSITION,
|
|
29
|
+
B as DIVIDER_H,
|
|
30
|
+
G as DIVIDER_V,
|
|
31
|
+
H as HEADING_TEXT,
|
|
32
|
+
y as ICON_BUTTON_CLASS,
|
|
33
|
+
O as ICON_CLASS,
|
|
34
|
+
A as LINK_BUTTON,
|
|
35
|
+
D as LINK_HOVER,
|
|
36
|
+
N as NAV_BUTTON,
|
|
37
|
+
C as PRESET_BUTTON,
|
|
38
|
+
S as PRESET_HOVER,
|
|
39
|
+
R as RANGE_BAND,
|
|
40
|
+
L as RANGE_BAND_SPAN,
|
|
41
|
+
w as TRIGGER_CLEAR_ROOM,
|
|
42
|
+
V as TRIGGER_HEIGHT,
|
|
43
|
+
z as TRIGGER_SIZE,
|
|
44
|
+
I as dayToneClass
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=datePickerStyles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datePickerStyles.js","sources":["../../src/components/datePickerStyles.ts"],"sourcesContent":["import type { DatePickerSize } from './datePickerTypes';\nimport { FOCUS_RING } from './focusRing';\n\nconst CELL_BASE =\n 'relative z-[1] flex items-center justify-center size-6 shrink-0 rounded-lg border border-solid border-transparent bg-transparent p-0 font-sans text-[length:var(--malachite-font-size-small,13px)] leading-none select-none transition-colors duration-150';\n\nconst CELL_ENABLED =\n 'cursor-pointer active:opacity-[var(--malachite-date-picker-pressed-opacity,0.6)]';\n\nconst CELL_DISABLED = 'cursor-not-allowed';\n\nexport const CELL_CLASS = (disabled: boolean): string =>\n [CELL_BASE, FOCUS_RING, disabled ? CELL_DISABLED : CELL_ENABLED].join(' ');\n\n// A tinted state reads its `datePicker` override in both layers: the solid utility for a\n// browser without color-mix, then the color-mix derivation.\nconst TEXT_DAY = 'text-[var(--malachite-text-primary,rgb(10,10,10))]';\nconst TEXT_OUTSIDE =\n 'text-[var(--malachite-date-picker-outside-foreground,var(--malachite-text-secondary,rgb(123,123,123)))] supports-[color:color-mix(in_srgb,red,red)]:text-[var(--malachite-date-picker-outside-foreground,color-mix(in_srgb,var(--malachite-text-primary,rgb(10,10,10))_60%,transparent))]';\nconst TEXT_DISABLED = 'text-[var(--malachite-text-placeholder,rgb(187,187,187))]';\nconst TEXT_ACCENT = 'text-[var(--malachite-accent-foreground,rgb(2,122,66))]';\n\nconst HOVER =\n 'hover:bg-[var(--malachite-date-picker-hover-background,var(--malachite-pillbutton-hover-background,rgb(232,232,232)))] supports-[color:color-mix(in_srgb,red,red)]:hover:bg-[var(--malachite-date-picker-hover-background,color-mix(in_srgb,var(--malachite-text-primary,rgb(10,10,10))_9%,transparent))]';\n\nconst SUBTLE_HOVER =\n 'hover:bg-[var(--malachite-date-picker-subtle-hover-background,var(--malachite-pillbutton-background,rgb(241,241,241)))] supports-[color:color-mix(in_srgb,red,red)]:hover:bg-[var(--malachite-date-picker-subtle-hover-background,color-mix(in_srgb,var(--malachite-text-primary,rgb(10,10,10))_6%,transparent))]';\n\nconst SELECTED_FILL =\n 'bg-[var(--malachite-date-picker-selected-background,var(--malachite-accent-background-glass,rgba(0,175,102,0.08)))] supports-[color:color-mix(in_srgb,red,red)]:bg-[var(--malachite-date-picker-selected-background,color-mix(in_srgb,var(--malachite-accent-background,rgb(0,175,102))_10%,var(--malachite-card-background,rgb(255,255,255))))]';\n\nconst SELECTED_HOVER =\n 'hover:border-[var(--malachite-date-picker-selected-hover-border,var(--malachite-control-border-hover,rgba(0,175,102,0.4)))] supports-[color:color-mix(in_srgb,red,red)]:hover:border-[var(--malachite-date-picker-selected-hover-border,color-mix(in_srgb,var(--malachite-accent-background,rgb(0,175,102))_40%,transparent))]';\n\nconst TODAY_RING =\n 'border-[var(--malachite-date-picker-today-border,var(--malachite-accent-border,rgba(0,175,102,0.2)))] supports-[color:color-mix(in_srgb,red,red)]:border-[var(--malachite-date-picker-today-border,color-mix(in_srgb,var(--malachite-accent-background,rgb(0,175,102))_40%,transparent))]';\n\nconst TODAY_HOVER =\n 'hover:border-[var(--malachite-date-picker-today-hover-border,var(--malachite-control-border-hover,rgba(0,175,102,0.4)))] supports-[color:color-mix(in_srgb,red,red)]:hover:border-[var(--malachite-date-picker-today-hover-border,color-mix(in_srgb,var(--malachite-accent-background,rgb(0,175,102))_60%,transparent))]';\n\ninterface DayTone {\n selected: boolean;\n today: boolean;\n outside: boolean;\n disabled: boolean;\n}\n\nexport const dayToneClass = ({ selected, today, outside, disabled }: DayTone): string => {\n const text = disabled\n ? TEXT_DISABLED\n : selected || today\n ? TEXT_ACCENT\n : outside\n ? TEXT_OUTSIDE\n : TEXT_DAY;\n const hover = disabled\n ? ''\n : selected\n ? SELECTED_HOVER\n : today\n ? `${SUBTLE_HOVER} ${TODAY_HOVER}`\n : outside\n ? SUBTLE_HOVER\n : HOVER;\n return [text, selected ? SELECTED_FILL : '', today ? TODAY_RING : '', hover]\n .filter(Boolean)\n .join(' ');\n};\n\nexport const RANGE_BAND =\n 'pointer-events-none absolute inset-y-0 bg-[var(--malachite-date-picker-range-background,var(--malachite-accent-background-glass,rgba(0,175,102,0.08)))] supports-[color:color-mix(in_srgb,red,red)]:bg-[var(--malachite-date-picker-range-background,color-mix(in_srgb,var(--malachite-accent-background,rgb(0,175,102))_6%,transparent))]';\n\nexport const RANGE_BAND_SPAN = {\n start: 'left-1/2 right-0',\n middle: 'inset-x-0',\n end: 'left-0 right-1/2',\n} as const;\n\nconst ICON = 'text-[var(--malachite-text-secondary,rgb(123,123,123))]';\nconst ICON_HOVER = 'hover:text-[var(--malachite-text-primary,rgb(10,10,10))]';\n\n/** The trigger's calendar glyph and clear control share the header arrows' colours. */\nexport const ICON_CLASS = ICON;\nexport const ICON_BUTTON_CLASS = `${ICON} ${ICON_HOVER}`;\n\nexport const NAV_BUTTON =\n 'flex items-center justify-center size-6 rounded-lg border-none bg-transparent p-0 cursor-pointer text-[var(--malachite-text-secondary,rgb(123,123,123))] hover:text-[var(--malachite-text-primary,rgb(10,10,10))] transition-colors aria-disabled:cursor-not-allowed aria-disabled:text-[var(--malachite-text-placeholder,rgb(187,187,187))] aria-disabled:hover:text-[var(--malachite-text-placeholder,rgb(187,187,187))]';\n\nexport const LINK_BUTTON =\n 'rounded-lg border-none bg-transparent px-2 py-1 font-sans text-[length:var(--malachite-font-size-small,13px)] font-medium leading-normal cursor-pointer text-[var(--malachite-accent-foreground,rgb(2,122,66))] transition-colors disabled:cursor-not-allowed disabled:opacity-40';\n\nexport const PRESET_BUTTON =\n 'w-full rounded-lg border-none bg-transparent px-2 py-1.5 text-left font-sans text-[length:var(--malachite-font-size-small,13px)] leading-normal whitespace-nowrap cursor-pointer text-[var(--malachite-text-primary,rgb(10,10,10))] transition-colors';\n\nexport const PRESET_HOVER = HOVER;\nexport const LINK_HOVER = SUBTLE_HOVER;\n\nexport const DIVIDER_H = 'h-px w-full shrink-0 bg-[var(--malachite-card-border,rgb(232,232,232))]';\nexport const DIVIDER_V =\n 'w-px self-stretch shrink-0 bg-[var(--malachite-card-border,rgb(232,232,232))]';\n\nexport const HEADING_TEXT =\n 'font-sans text-[length:var(--malachite-font-size-small,13px)] font-medium leading-normal text-[var(--malachite-text-primary,rgb(10,10,10))]';\n\nexport const TRIGGER_HEIGHT: Record<DatePickerSize, string> = {\n small: 'h-[var(--malachite-control-height-small,28px)]',\n medium: 'h-[var(--malachite-control-height-medium,32px)]',\n large: 'h-[var(--malachite-control-height-large,42px)]',\n};\n\nexport const TRIGGER_SIZE: Record<DatePickerSize, string> = {\n small: 'px-2.5 gap-1.5 rounded-[var(--malachite-radius-10,10px)] text-[length:var(--malachite-font-size-small,13px)]',\n medium: 'px-2.5 gap-1.5 rounded-xl text-[length:var(--malachite-font-size-small,13px)]',\n large: 'px-4 gap-2 rounded-[var(--malachite-radius-xxl,14px)] text-[length:var(--malachite-font-size-15,15px)]',\n};\n\nexport const TRIGGER_CLEAR_ROOM: Record<DatePickerSize, string> = {\n small: 'pr-8',\n medium: 'pr-8',\n large: 'pr-11',\n};\n\nexport const CLEAR_POSITION: Record<DatePickerSize, string> = {\n small: 'right-2',\n medium: 'right-2',\n large: 'right-3.5',\n};\n"],"names":["CELL_BASE","CELL_ENABLED","CELL_DISABLED","CELL_CLASS","disabled","FOCUS_RING","TEXT_DAY","TEXT_OUTSIDE","TEXT_DISABLED","TEXT_ACCENT","HOVER","SUBTLE_HOVER","SELECTED_FILL","SELECTED_HOVER","TODAY_RING","TODAY_HOVER","dayToneClass","selected","today","outside","text","hover","RANGE_BAND","RANGE_BAND_SPAN","ICON","ICON_HOVER","ICON_CLASS","ICON_BUTTON_CLASS","NAV_BUTTON","LINK_BUTTON","PRESET_BUTTON","PRESET_HOVER","LINK_HOVER","DIVIDER_H","DIVIDER_V","HEADING_TEXT","TRIGGER_HEIGHT","TRIGGER_SIZE","TRIGGER_CLEAR_ROOM","CLEAR_POSITION"],"mappings":";AAGA,MAAMA,IACF,8PAEEC,IACF,oFAEEC,IAAgB,sBAETC,IAAa,CAACC,MACvB,CAACJ,GAAWK,GAAYD,IAAWF,IAAgBD,CAAY,EAAE,KAAK,GAAG,GAIvEK,IAAW,sDACXC,IACF,6RACEC,IAAgB,6DAChBC,IAAc,2DAEdC,IACF,6SAEEC,IACF,qTAEEC,IACF,oVAEEC,IACF,kUAEEC,IACF,6RAEEC,IACF,4TASSC,IAAe,CAAC,EAAE,UAAAC,GAAU,OAAAC,GAAO,SAAAC,GAAS,UAAAf,QAAgC;AACrF,QAAMgB,IAAOhB,IACPI,IACAS,KAAYC,IACVT,IACAU,IACEZ,IACAD,GACJe,IAAQjB,IACR,KACAa,IACEJ,IACAK,IACE,GAAGP,CAAY,IAAII,CAAW,KAC9BI,IACER,IACAD;AACZ,SAAO,CAACU,GAAMH,IAAWL,IAAgB,IAAIM,IAAQJ,IAAa,IAAIO,CAAK,EACtE,OAAO,OAAO,EACd,KAAK,GAAG;AACjB,GAEaC,IACT,8UAESC,IAAkB;AAAA,EAC3B,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AACT,GAEMC,IAAO,2DACPC,IAAa,4DAGNC,IAAaF,GACbG,IAAoB,GAAGH,CAAI,IAAIC,CAAU,IAEzCG,IACT,8ZAESC,IACT,qRAESC,IACT,yPAESC,IAAerB,GACfsB,IAAarB,GAEbsB,IAAY,2EACZC,IACT,iFAESC,IACT,+IAESC,IAAiD;AAAA,EAC1D,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACX,GAEaC,IAA+C;AAAA,EACxD,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACX,GAEaC,IAAqD;AAAA,EAC9D,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACX,GAEaC,IAAiD;AAAA,EAC1D,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACX;"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { useState as E } from "react";
|
|
2
|
+
import { dayKeyOf as l, clampDate as y, startOfDay as I, endOfDay as k, partsOf as v, withTime as A, compareDays as z, overlapsBounds as S, daysInMonth as tt, truncateTo as G, ceilTo as st, endOfUnit as nt, fromParts as rt } from "./dateMath.js";
|
|
3
|
+
const H = { start: null, end: null }, V = ({ year: T, month: n }) => ({ year: T, month: n }), B = (T) => T === "start" ? { hours: 0, minutes: 0, seconds: 0 } : { hours: 23, minutes: 59, seconds: 59 }, ut = ({
|
|
4
|
+
mode: T,
|
|
5
|
+
zone: n,
|
|
6
|
+
precision: g,
|
|
7
|
+
minDate: o,
|
|
8
|
+
maxDate: d,
|
|
9
|
+
isDateDisabled: h,
|
|
10
|
+
commit: P
|
|
11
|
+
}) => {
|
|
12
|
+
const [r, M] = E(H), [F, U] = E("start"), [J, C] = E(() => V(l(/* @__PURE__ */ new Date(), n))), [W, K] = E(() => l(/* @__PURE__ */ new Date(), n)), p = l(/* @__PURE__ */ new Date(), n), L = (t) => {
|
|
13
|
+
const s = l(
|
|
14
|
+
y((t == null ? void 0 : t.start) ?? /* @__PURE__ */ new Date(), o, d),
|
|
15
|
+
n
|
|
16
|
+
);
|
|
17
|
+
M(t ?? H), U("start"), C(V(s)), K(s);
|
|
18
|
+
}, Y = (t) => {
|
|
19
|
+
const s = I(t, n);
|
|
20
|
+
return !S(s, k(t, n), o, d) || !!(h != null && h(s));
|
|
21
|
+
}, N = (t) => S(
|
|
22
|
+
I({ ...t, day: 1 }, n),
|
|
23
|
+
k({ ...t, day: tt(t) }, n),
|
|
24
|
+
o,
|
|
25
|
+
d
|
|
26
|
+
), O = (t, s = o, e = d) => {
|
|
27
|
+
const u = G(y(t, void 0, e), n, g);
|
|
28
|
+
if (!s || u.getTime() >= s.getTime())
|
|
29
|
+
return u;
|
|
30
|
+
const c = st(s, n, g);
|
|
31
|
+
return e && c.getTime() > e.getTime() ? s : c;
|
|
32
|
+
}, R = (t, s, e = d) => y(nt(O(t, s, e), n, g), void 0, e), Q = ({ start: t, end: s }) => {
|
|
33
|
+
const e = s ?? t;
|
|
34
|
+
if (!t || !e || o && e.getTime() < o.getTime() || d && t.getTime() > d.getTime())
|
|
35
|
+
return;
|
|
36
|
+
const u = y(t, o, d), c = s ? y(s, o, d) : null, a = (m) => !!(h != null && h(I(l(m, n), n)));
|
|
37
|
+
a(u) || c && a(c) || T === "range" && (!c || c.getTime() < u.getTime()) || P({ start: u, end: c });
|
|
38
|
+
}, X = (t) => {
|
|
39
|
+
if (T === "single") {
|
|
40
|
+
const c = r.start ? v(r.start, n) : B("start"), a = O(A(t, c, n));
|
|
41
|
+
if (g === "day") {
|
|
42
|
+
P({ start: a, end: null });
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
M({ start: a, end: null });
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (F === "end" && r.start !== null && z(t, l(r.start, n)) >= 0) {
|
|
49
|
+
const c = r.end ? v(r.end, n) : B("end"), a = g === "day" ? y(k(t, n), o, d) : R(A(t, c, n), o), m = a.getTime() < r.start.getTime() ? r.start : a;
|
|
50
|
+
if (g === "day") {
|
|
51
|
+
P({ start: r.start, end: m });
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
M({ start: r.start, end: m });
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const s = r.start ? v(r.start, n) : B("start"), e = O(A(t, s, n)), u = g !== "day" && r.end !== null && r.end.getTime() >= e.getTime();
|
|
58
|
+
M({ start: e, end: u ? r.end : null }), U("end");
|
|
59
|
+
}, f = T === "range" ? F : "start", j = () => {
|
|
60
|
+
const t = r[f];
|
|
61
|
+
if (t)
|
|
62
|
+
return t;
|
|
63
|
+
const s = f === "end" && r.start ? l(r.start, n) : W;
|
|
64
|
+
return A(s, B(f), n);
|
|
65
|
+
}, q = (t, s, e) => {
|
|
66
|
+
const u = v(t, n);
|
|
67
|
+
if (s === "hours")
|
|
68
|
+
return rt({ ...u, hours: e }, n, t.getMilliseconds());
|
|
69
|
+
const c = s === "minutes" ? 6e4 : 1e3;
|
|
70
|
+
return new Date(t.getTime() + (e - u[s]) * c);
|
|
71
|
+
}, Z = (t, s) => {
|
|
72
|
+
const e = j(), u = v(e, n), c = q(e, t, s).getTime() - e.getMilliseconds();
|
|
73
|
+
if (t === "hours") {
|
|
74
|
+
const a = c - (u.minutes * 60 + u.seconds) * 1e3;
|
|
75
|
+
return [new Date(a), new Date(a + 36e5 - 1)];
|
|
76
|
+
}
|
|
77
|
+
if (t === "minutes") {
|
|
78
|
+
const a = c - u.seconds * 1e3;
|
|
79
|
+
return [new Date(a), new Date(a + 6e4 - 1)];
|
|
80
|
+
}
|
|
81
|
+
return [new Date(c), new Date(c + 999)];
|
|
82
|
+
}, i = T === "range" && f === "end" && r.start ? new Date(Math.max(r.start.getTime(), (o == null ? void 0 : o.getTime()) ?? -1 / 0)) : o, w = T === "range" && f === "start" && r.end ? new Date(Math.min(r.end.getTime(), (d == null ? void 0 : d.getTime()) ?? 1 / 0)) : d, _ = (t, s) => {
|
|
83
|
+
const [e, u] = Z(t, s);
|
|
84
|
+
return !S(e, u, i, w);
|
|
85
|
+
}, $ = (t, s) => {
|
|
86
|
+
const e = q(j(), t, s), u = f === "end" ? R(e, i, w) : O(e, i, w);
|
|
87
|
+
M((c) => ({ ...c, [f]: u }));
|
|
88
|
+
}, b = () => {
|
|
89
|
+
const t = Date.now();
|
|
90
|
+
return (!i || t >= G(i, n, "day").getTime()) && (!w || t <= k(l(w, n), n).getTime());
|
|
91
|
+
}, x = () => {
|
|
92
|
+
if (g === "day") {
|
|
93
|
+
const s = O(I(p, n));
|
|
94
|
+
P(
|
|
95
|
+
T === "single" ? { start: s, end: null } : { start: s, end: y(k(p, n), o, d) }
|
|
96
|
+
);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const t = f === "end" ? R(/* @__PURE__ */ new Date(), i, w) : O(/* @__PURE__ */ new Date(), i, w);
|
|
100
|
+
M((s) => ({ ...s, [f]: t })), C(V(p)), K(p);
|
|
101
|
+
}, D = T === "single" ? r.start !== null : r.start !== null && r.end !== null && r.start.getTime() <= r.end.getTime();
|
|
102
|
+
return {
|
|
103
|
+
draft: r,
|
|
104
|
+
active: F,
|
|
105
|
+
setActive: U,
|
|
106
|
+
view: J,
|
|
107
|
+
setView: C,
|
|
108
|
+
focusDay: W,
|
|
109
|
+
setFocusDay: K,
|
|
110
|
+
today: p,
|
|
111
|
+
reset: L,
|
|
112
|
+
complete: D,
|
|
113
|
+
isDayDisabled: Y,
|
|
114
|
+
isMonthReachable: N,
|
|
115
|
+
isTimeDisabled: _,
|
|
116
|
+
pickDay: X,
|
|
117
|
+
pickTime: $,
|
|
118
|
+
pickToday: x,
|
|
119
|
+
commitPreset: Q,
|
|
120
|
+
todayDisabled: Y(p) || g !== "day" && !b()
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
export {
|
|
124
|
+
ut as useDatePickerDraft
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=useDatePickerDraft.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDatePickerDraft.js","sources":["../../src/components/useDatePickerDraft.ts"],"sourcesContent":["import { useState } from 'react';\nimport type { Endpoint, Selection, TimeUnit } from './DatePickerPanel';\nimport {\n type DatePickerPrecision,\n type DatePickerTimeZone,\n type DayKey,\n type MonthKey,\n ceilTo,\n clampDate,\n compareDays,\n dayKeyOf,\n daysInMonth,\n endOfDay,\n endOfUnit,\n fromParts,\n overlapsBounds,\n partsOf,\n startOfDay,\n truncateTo,\n withTime,\n} from './dateMath';\n\ninterface DraftOptions {\n mode: 'single' | 'range';\n zone: DatePickerTimeZone;\n precision: DatePickerPrecision;\n minDate?: Date;\n maxDate?: Date;\n isDateDisabled?: (day: Date) => boolean;\n commit: (selection: Selection) => void;\n}\n\nconst EMPTY: Selection = { start: null, end: null };\n\nconst monthOf = ({ year, month }: DayKey): MonthKey => ({ year, month });\n\nconst defaultTime = (endpoint: Endpoint) =>\n endpoint === 'start'\n ? { hours: 0, minutes: 0, seconds: 0 }\n : { hours: 23, minutes: 59, seconds: 59 };\n\nexport const useDatePickerDraft = ({\n mode,\n zone,\n precision,\n minDate,\n maxDate,\n isDateDisabled,\n commit,\n}: DraftOptions) => {\n const [draft, setDraft] = useState<Selection>(EMPTY);\n const [active, setActive] = useState<Endpoint>('start');\n const [view, setView] = useState<MonthKey>(() => monthOf(dayKeyOf(new Date(), zone)));\n const [focusDay, setFocusDay] = useState<DayKey>(() => dayKeyOf(new Date(), zone));\n const today = dayKeyOf(new Date(), zone);\n\n const reset = (committed: Selection | null) => {\n const anchorDay = dayKeyOf(\n clampDate(committed?.start ?? new Date(), minDate, maxDate),\n zone,\n );\n setDraft(committed ?? EMPTY);\n setActive('start');\n setView(monthOf(anchorDay));\n setFocusDay(anchorDay);\n };\n\n const isDayDisabled = (day: DayKey): boolean => {\n const from = startOfDay(day, zone);\n return (\n !overlapsBounds(from, endOfDay(day, zone), minDate, maxDate) || !!isDateDisabled?.(from)\n );\n };\n\n const isMonthReachable = (month: MonthKey): boolean =>\n overlapsBounds(\n startOfDay({ ...month, day: 1 }, zone),\n endOfDay({ ...month, day: daysInMonth(month) }, zone),\n minDate,\n maxDate,\n );\n\n const bound = (\n date: Date,\n floor: Date | undefined = minDate,\n ceiling: Date | undefined = maxDate,\n ): Date => {\n const truncated = truncateTo(clampDate(date, undefined, ceiling), zone, precision);\n if (!floor || truncated.getTime() >= floor.getTime()) {\n return truncated;\n }\n const raised = ceilTo(floor, zone, precision);\n return ceiling && raised.getTime() > ceiling.getTime() ? floor : raised;\n };\n\n const boundEnd = (date: Date, floor?: Date, ceiling: Date | undefined = maxDate): Date =>\n clampDate(endOfUnit(bound(date, floor, ceiling), zone, precision), undefined, ceiling);\n\n const commitPreset = ({ start, end }: Selection) => {\n const last = end ?? start;\n if (\n !start ||\n !last ||\n (minDate && last.getTime() < minDate.getTime()) ||\n (maxDate && start.getTime() > maxDate.getTime())\n ) {\n return;\n }\n const from = clampDate(start, minDate, maxDate);\n const to = end ? clampDate(end, minDate, maxDate) : null;\n const ruledOut = (date: Date) => !!isDateDisabled?.(startOfDay(dayKeyOf(date, zone), zone));\n if (ruledOut(from) || (to && ruledOut(to))) {\n return;\n }\n if (mode === 'range' && (!to || to.getTime() < from.getTime())) {\n return;\n }\n commit({ start: from, end: to });\n };\n\n const pickDay = (day: DayKey) => {\n if (mode === 'single') {\n const time = draft.start ? partsOf(draft.start, zone) : defaultTime('start');\n const start = bound(withTime(day, time, zone));\n if (precision === 'day') {\n commit({ start, end: null });\n return;\n }\n setDraft({ start, end: null });\n return;\n }\n if (\n active === 'end' &&\n draft.start !== null &&\n compareDays(day, dayKeyOf(draft.start, zone)) >= 0\n ) {\n const time = draft.end ? partsOf(draft.end, zone) : defaultTime('end');\n const picked =\n precision === 'day'\n ? clampDate(endOfDay(day, zone), minDate, maxDate)\n : boundEnd(withTime(day, time, zone), minDate);\n const end = picked.getTime() < draft.start.getTime() ? draft.start : picked;\n if (precision === 'day') {\n commit({ start: draft.start, end });\n return;\n }\n setDraft({ start: draft.start, end });\n return;\n }\n const time = draft.start ? partsOf(draft.start, zone) : defaultTime('start');\n const start = bound(withTime(day, time, zone));\n const keepEnd =\n precision !== 'day' && draft.end !== null && draft.end.getTime() >= start.getTime();\n setDraft({ start, end: keepEnd ? draft.end : null });\n setActive('end');\n };\n\n const timeTarget: Endpoint = mode === 'range' ? active : 'start';\n\n const timeBase = (): Date => {\n const current = draft[timeTarget];\n if (current) {\n return current;\n }\n const day = timeTarget === 'end' && draft.start ? dayKeyOf(draft.start, zone) : focusDay;\n return withTime(day, defaultTime(timeTarget), zone);\n };\n\n // Arithmetic, so the repeated hour when clocks go back keeps its hour.\n const withUnit = (base: Date, unit: TimeUnit, value: number): Date => {\n const parts = partsOf(base, zone);\n if (unit === 'hours') {\n return fromParts({ ...parts, hours: value }, zone, base.getMilliseconds());\n }\n const unitMs = unit === 'minutes' ? 60_000 : 1_000;\n return new Date(base.getTime() + (value - parts[unit]) * unitMs);\n };\n\n const timeWindow = (unit: TimeUnit, value: number): [Date, Date] => {\n const base = timeBase();\n const parts = partsOf(base, zone);\n const at = withUnit(base, unit, value).getTime() - base.getMilliseconds();\n if (unit === 'hours') {\n const from = at - (parts.minutes * 60 + parts.seconds) * 1000;\n return [new Date(from), new Date(from + 3_600_000 - 1)];\n }\n if (unit === 'minutes') {\n const from = at - parts.seconds * 1000;\n return [new Date(from), new Date(from + 60_000 - 1)];\n }\n return [new Date(at), new Date(at + 999)];\n };\n\n const timeFloor =\n mode === 'range' && timeTarget === 'end' && draft.start\n ? new Date(Math.max(draft.start.getTime(), minDate?.getTime() ?? -Infinity))\n : minDate;\n const timeCeiling =\n mode === 'range' && timeTarget === 'start' && draft.end\n ? new Date(Math.min(draft.end.getTime(), maxDate?.getTime() ?? Infinity))\n : maxDate;\n\n const isTimeDisabled = (unit: TimeUnit, value: number): boolean => {\n const [from, to] = timeWindow(unit, value);\n return !overlapsBounds(from, to, timeFloor, timeCeiling);\n };\n\n const pickTime = (unit: TimeUnit, value: number) => {\n const base = withUnit(timeBase(), unit, value);\n const next =\n timeTarget === 'end'\n ? boundEnd(base, timeFloor, timeCeiling)\n : bound(base, timeFloor, timeCeiling);\n setDraft((current) => ({ ...current, [timeTarget]: next }));\n };\n\n const nowAllowed = (): boolean => {\n const now = Date.now();\n return (\n (!timeFloor || now >= truncateTo(timeFloor, zone, 'day').getTime()) &&\n (!timeCeiling || now <= endOfDay(dayKeyOf(timeCeiling, zone), zone).getTime())\n );\n };\n\n const pickToday = () => {\n if (precision === 'day') {\n const start = bound(startOfDay(today, zone));\n commit(\n mode === 'single'\n ? { start, end: null }\n : { start, end: clampDate(endOfDay(today, zone), minDate, maxDate) },\n );\n return;\n }\n const now =\n timeTarget === 'end'\n ? boundEnd(new Date(), timeFloor, timeCeiling)\n : bound(new Date(), timeFloor, timeCeiling);\n setDraft((current) => ({ ...current, [timeTarget]: now }));\n setView(monthOf(today));\n setFocusDay(today);\n };\n\n const complete =\n mode === 'single'\n ? draft.start !== null\n : draft.start !== null &&\n draft.end !== null &&\n draft.start.getTime() <= draft.end.getTime();\n\n return {\n draft,\n active,\n setActive,\n view,\n setView,\n focusDay,\n setFocusDay,\n today,\n reset,\n complete,\n isDayDisabled,\n isMonthReachable,\n isTimeDisabled,\n pickDay,\n pickTime,\n pickToday,\n commitPreset,\n todayDisabled: isDayDisabled(today) || (precision !== 'day' && !nowAllowed()),\n };\n};\n"],"names":["EMPTY","monthOf","year","month","defaultTime","endpoint","useDatePickerDraft","mode","zone","precision","minDate","maxDate","isDateDisabled","commit","draft","setDraft","useState","active","setActive","view","setView","dayKeyOf","focusDay","setFocusDay","today","reset","committed","anchorDay","clampDate","isDayDisabled","day","from","startOfDay","overlapsBounds","endOfDay","isMonthReachable","daysInMonth","bound","date","floor","ceiling","truncated","truncateTo","raised","ceilTo","boundEnd","endOfUnit","commitPreset","start","end","last","to","ruledOut","pickDay","time","partsOf","withTime","compareDays","picked","keepEnd","timeTarget","timeBase","current","withUnit","base","unit","value","parts","fromParts","unitMs","timeWindow","at","timeFloor","timeCeiling","isTimeDisabled","pickTime","next","nowAllowed","now","pickToday","complete"],"mappings":"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"}
|