@stackone/malachite 2.62.1 → 2.64.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 +3 -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/Chat/ChatThread.js +1 -2
- package/dist/components/Chat/ChatThread.js.map +1 -1
- package/dist/components/CloseButton.js +76 -0
- package/dist/components/CloseButton.js.map +1 -0
- 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/SplitScreenLayout.js +21 -38
- package/dist/components/SplitScreenLayout.js.map +1 -1
- 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/focusRing.js +4 -3
- package/dist/components/focusRing.js.map +1 -1
- package/dist/components/useDatePickerDraft.js +126 -0
- package/dist/components/useDatePickerDraft.js.map +1 -0
- package/dist/index.d.ts +262 -101
- package/dist/index.js +433 -423
- package/dist/index.js.map +1 -1
- package/dist/tailwind.css.js +1 -1
- package/dist/theme.js +406 -359
- package/dist/theme.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,51 +1,34 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
"button",
|
|
8
|
-
{
|
|
9
|
-
type: "button",
|
|
10
|
-
"aria-label": "Close",
|
|
11
|
-
onClick: i,
|
|
12
|
-
className: `flex cursor-pointer items-center justify-center border-0 bg-transparent p-0 transition-colors ${s}`,
|
|
13
|
-
children: /* @__PURE__ */ e(c, { size: 12 })
|
|
14
|
-
}
|
|
15
|
-
), x = ({
|
|
16
|
-
left: i,
|
|
17
|
-
right: s,
|
|
18
|
-
logo: a,
|
|
1
|
+
import { jsxs as i, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { CloseButton as s } from "./CloseButton.js";
|
|
3
|
+
const f = ({
|
|
4
|
+
left: a,
|
|
5
|
+
right: n,
|
|
6
|
+
logo: r,
|
|
19
7
|
onClose: l,
|
|
20
|
-
footer:
|
|
21
|
-
}) => /* @__PURE__ */
|
|
22
|
-
/* @__PURE__ */
|
|
23
|
-
/* @__PURE__ */
|
|
8
|
+
footer: c
|
|
9
|
+
}) => /* @__PURE__ */ i("div", { className: "flex h-screen w-full overflow-hidden gap-3 bg-[var(--malachite-card-sunken-background)] p-3", children: [
|
|
10
|
+
/* @__PURE__ */ i("div", { className: "flex min-w-0 flex-1 flex-col items-center px-[60px] py-[40px]", children: [
|
|
11
|
+
/* @__PURE__ */ i("div", { className: "flex h-6 w-full shrink-0 items-center justify-between", children: [
|
|
24
12
|
/* @__PURE__ */ e("span", { className: "size-6 shrink-0", "aria-hidden": !0 }),
|
|
25
|
-
|
|
26
|
-
/* @__PURE__ */ e("span", { className: "flex size-6 shrink-0 items-center justify-center", children: l ? /* @__PURE__ */ e(
|
|
27
|
-
r,
|
|
28
|
-
{
|
|
29
|
-
onClose: l,
|
|
30
|
-
className: "text-[var(--malachite-text-secondary)] hover:text-[var(--malachite-text-primary)] lg:hidden"
|
|
31
|
-
}
|
|
32
|
-
) : null })
|
|
13
|
+
r ?? /* @__PURE__ */ e("span", { className: "size-6 shrink-0", "aria-hidden": !0 }),
|
|
14
|
+
/* @__PURE__ */ e("span", { className: "flex size-6 shrink-0 items-center justify-center", children: l ? /* @__PURE__ */ e(s, { onClick: l, className: "lg:hidden" }) : null })
|
|
33
15
|
] }),
|
|
34
|
-
/* @__PURE__ */ e("div", { className: "flex w-full min-h-0 flex-1 flex-col overflow-y-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden", children: /* @__PURE__ */ e("div", { className: "m-auto flex w-full max-w-[380px] flex-col items-center py-10", children:
|
|
35
|
-
/* @__PURE__ */ e("div", { className: "flex h-6 shrink-0 items-center justify-center", children:
|
|
16
|
+
/* @__PURE__ */ e("div", { className: "flex w-full min-h-0 flex-1 flex-col overflow-y-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden", children: /* @__PURE__ */ e("div", { className: "m-auto flex w-full max-w-[380px] flex-col items-center py-10", children: a }) }),
|
|
17
|
+
/* @__PURE__ */ e("div", { className: "flex h-6 shrink-0 items-center justify-center", children: c })
|
|
36
18
|
] }),
|
|
37
|
-
/* @__PURE__ */
|
|
19
|
+
/* @__PURE__ */ i("div", { className: "relative hidden min-w-0 flex-1 flex-col items-center justify-center overflow-hidden rounded-[28px] bg-[#2b2b2b] px-[60px] py-[40px] lg:flex", children: [
|
|
38
20
|
l ? /* @__PURE__ */ e(
|
|
39
|
-
|
|
21
|
+
s,
|
|
40
22
|
{
|
|
41
|
-
|
|
42
|
-
|
|
23
|
+
onClick: l,
|
|
24
|
+
surface: "inverse",
|
|
25
|
+
className: "absolute top-[34px] right-[54px] z-10"
|
|
43
26
|
}
|
|
44
27
|
) : null,
|
|
45
|
-
|
|
28
|
+
n
|
|
46
29
|
] })
|
|
47
30
|
] });
|
|
48
31
|
export {
|
|
49
|
-
|
|
32
|
+
f as default
|
|
50
33
|
};
|
|
51
34
|
//# sourceMappingURL=SplitScreenLayout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SplitScreenLayout.js","sources":["../../src/components/SplitScreenLayout.tsx"],"sourcesContent":["import React from 'react';\nimport
|
|
1
|
+
{"version":3,"file":"SplitScreenLayout.js","sources":["../../src/components/SplitScreenLayout.tsx"],"sourcesContent":["import React from 'react';\nimport CloseButton from './CloseButton';\n\ninterface SplitScreenLayoutProps {\n left: React.ReactNode;\n right: React.ReactNode;\n logo?: React.ReactNode;\n onClose?: () => void;\n footer?: React.ReactNode;\n}\n\nconst SplitScreenLayout: React.FC<SplitScreenLayoutProps> = ({\n left,\n right,\n logo,\n onClose,\n footer,\n}) => (\n <div className=\"flex h-screen w-full overflow-hidden gap-3 bg-[var(--malachite-card-sunken-background)] p-3\">\n <div className=\"flex min-w-0 flex-1 flex-col items-center px-[60px] py-[40px]\">\n <div className=\"flex h-6 w-full shrink-0 items-center justify-between\">\n <span className=\"size-6 shrink-0\" aria-hidden />\n {logo ?? <span className=\"size-6 shrink-0\" aria-hidden />}\n <span className=\"flex size-6 shrink-0 items-center justify-center\">\n {onClose ? <CloseButton onClick={onClose} className=\"lg:hidden\" /> : null}\n </span>\n </div>\n <div className=\"flex w-full min-h-0 flex-1 flex-col overflow-y-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\">\n <div className=\"m-auto flex w-full max-w-[380px] flex-col items-center py-10\">\n {left}\n </div>\n </div>\n <div className=\"flex h-6 shrink-0 items-center justify-center\">{footer}</div>\n </div>\n <div className=\"relative hidden min-w-0 flex-1 flex-col items-center justify-center overflow-hidden rounded-[28px] bg-[#2b2b2b] px-[60px] py-[40px] lg:flex\">\n {/* 6px in from 40/60: the 24px target is 12px wider than the glyph, which stays put. */}\n {onClose ? (\n <CloseButton\n onClick={onClose}\n surface=\"inverse\"\n className=\"absolute top-[34px] right-[54px] z-10\"\n />\n ) : null}\n {right}\n </div>\n </div>\n);\n\nexport default SplitScreenLayout;\n"],"names":["SplitScreenLayout","left","right","logo","onClose","footer","jsxs","jsx","CloseButton"],"mappings":";;AAWA,MAAMA,IAAsD,CAAC;AAAA,EACzD,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAAC;AACJ,MACI,gBAAAC,EAAC,OAAA,EAAI,WAAU,+FACX,UAAA;AAAA,EAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,iEACX,UAAA;AAAA,IAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,yDACX,UAAA;AAAA,MAAA,gBAAAC,EAAC,QAAA,EAAK,WAAU,mBAAkB,eAAW,IAAC;AAAA,MAC7CJ,KAAQ,gBAAAI,EAAC,QAAA,EAAK,WAAU,mBAAkB,eAAW,IAAC;AAAA,MACvD,gBAAAA,EAAC,QAAA,EAAK,WAAU,oDACX,UAAAH,IAAU,gBAAAG,EAACC,GAAA,EAAY,SAASJ,GAAS,WAAU,YAAA,CAAY,IAAK,KAAA,CACzE;AAAA,IAAA,GACJ;AAAA,IACA,gBAAAG,EAAC,SAAI,WAAU,4GACX,4BAAC,OAAA,EAAI,WAAU,gEACV,UAAAN,EAAA,CACL,EAAA,CACJ;AAAA,IACA,gBAAAM,EAAC,OAAA,EAAI,WAAU,iDAAiD,UAAAF,EAAA,CAAO;AAAA,EAAA,GAC3E;AAAA,EACA,gBAAAC,EAAC,OAAA,EAAI,WAAU,+IAEV,UAAA;AAAA,IAAAF,IACG,gBAAAG;AAAA,MAACC;AAAA,MAAA;AAAA,QACG,SAASJ;AAAA,QACT,SAAQ;AAAA,QACR,WAAU;AAAA,MAAA;AAAA,IAAA,IAEd;AAAA,IACHF;AAAA,EAAA,EAAA,CACL;AAAA,EAAA,CACJ;"}
|
|
@@ -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;"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
const o = "outline-none focus-visible:outline-offset-2 focus-visible:[outline:2px_solid_var(--malachite-text-primary)]", e = "outline-none focus-visible:[outline:2px_solid_var(--malachite-text-primary)] focus-visible:[outline-offset:-2px]", i = "pointer-events-none absolute inset-0 z-[2] hidden group-focus-visible:block [outline:2px_solid_var(--malachite-text-primary)] [outline-offset:-2px]", t = "outline-none has-[[role=radio]:focus-visible]:outline-offset-2 has-[[role=radio]:focus-visible]:[outline:2px_solid_var(--malachite-text-primary)]",
|
|
1
|
+
const o = "outline-none focus-visible:outline-offset-2 focus-visible:[outline:2px_solid_var(--malachite-text-primary)]", e = "outline-none focus-visible:[outline:2px_solid_var(--malachite-text-primary)] focus-visible:[outline-offset:-2px]", i = "pointer-events-none absolute inset-0 z-[2] hidden group-focus-visible:block [outline:2px_solid_var(--malachite-text-primary)] [outline-offset:-2px]", t = "outline-none has-[[role=radio]:focus-visible]:outline-offset-2 has-[[role=radio]:focus-visible]:[outline:2px_solid_var(--malachite-text-primary)]", s = "outline-none focus-visible:outline-offset-2 focus-visible:[outline:2px_solid_var(--malachite-selection-bar-foreground)]", l = "outline-none focus-visible:[outline:2px_solid_var(--malachite-inline-confirm-foreground)] focus-visible:[outline-offset:-2px]", n = "outline-none focus-visible:outline-offset-2 focus-visible:[outline:2px_solid_var(--malachite-close-button-inverse-hover-foreground,rgb(255,255,255))]";
|
|
2
2
|
export {
|
|
3
3
|
o as FOCUS_RING,
|
|
4
|
-
|
|
4
|
+
n as FOCUS_RING_CLOSE_BUTTON_INVERSE,
|
|
5
|
+
l as FOCUS_RING_INLINE_CONFIRM_INSET,
|
|
5
6
|
e as FOCUS_RING_INSET,
|
|
6
7
|
i as FOCUS_RING_INSET_OVERLAY,
|
|
7
|
-
|
|
8
|
+
s as FOCUS_RING_SELECTION_BAR,
|
|
8
9
|
t as FOCUS_RING_WITHIN_RADIO
|
|
9
10
|
};
|
|
10
11
|
//# sourceMappingURL=focusRing.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focusRing.js","sources":["../../src/components/focusRing.ts"],"sourcesContent":["// Shared keyboard focus indicator for interactive components.\n\n/** Standard focus ring — sits 2px outside the control. */\nexport const FOCUS_RING =\n 'outline-none focus-visible:outline-offset-2 focus-visible:[outline:2px_solid_var(--malachite-text-primary)]';\n\n/**\n * Inset focus ring — drawn 2px inside the element edge. Use for full-bleed elements\n * inside an `overflow-hidden` container (e.g. Surface.Row) where an outset outline\n * would be clipped.\n */\nexport const FOCUS_RING_INSET =\n 'outline-none focus-visible:[outline:2px_solid_var(--malachite-text-primary)] focus-visible:[outline-offset:-2px]';\n\n/** `FOCUS_RING_INSET` drawn by an overlay while its `group` ancestor has keyboard focus. */\nexport const FOCUS_RING_INSET_OVERLAY =\n 'pointer-events-none absolute inset-0 z-[2] hidden group-focus-visible:block [outline:2px_solid_var(--malachite-text-primary)] [outline-offset:-2px]';\n\n/** Ring drawn on a wrapper when a control *inside* it takes focus. */\nexport const FOCUS_RING_WITHIN =\n 'outline-none has-[:focus-visible]:outline-offset-2 has-[:focus-visible]:[outline:2px_solid_var(--malachite-text-primary)]';\n\n/**\n * As `FOCUS_RING_WITHIN`, for a card whose control is a `role=\"radio\"` beside its links:\n * `:has(:focus-visible)` would also match a focused link and draw a second ring.\n */\nexport const FOCUS_RING_WITHIN_RADIO =\n 'outline-none has-[[role=radio]:focus-visible]:outline-offset-2 has-[[role=radio]:focus-visible]:[outline:2px_solid_var(--malachite-text-primary)]';\n\n/** Ring for a control on the SelectionBar, where `FOCUS_RING` would be invisible. */\nexport const FOCUS_RING_SELECTION_BAR =\n 'outline-none focus-visible:outline-offset-2 focus-visible:[outline:2px_solid_var(--malachite-selection-bar-foreground)]';\n\n/** Inset ring for a control on the InlineConfirm chip. */\nexport const FOCUS_RING_INLINE_CONFIRM_INSET =\n 'outline-none focus-visible:[outline:2px_solid_var(--malachite-inline-confirm-foreground)] focus-visible:[outline-offset:-2px]';\n"],"names":["FOCUS_RING","FOCUS_RING_INSET","FOCUS_RING_INSET_OVERLAY","FOCUS_RING_WITHIN_RADIO","FOCUS_RING_SELECTION_BAR","FOCUS_RING_INLINE_CONFIRM_INSET"],"mappings":"AAGO,MAAMA,IACT,+GAOSC,IACT,oHAGSC,IACT,uJAUSC,IACT,qJAGSC,IACT,2HAGSC,IACT;"}
|
|
1
|
+
{"version":3,"file":"focusRing.js","sources":["../../src/components/focusRing.ts"],"sourcesContent":["// Shared keyboard focus indicator for interactive components.\n\n/** Standard focus ring — sits 2px outside the control. */\nexport const FOCUS_RING =\n 'outline-none focus-visible:outline-offset-2 focus-visible:[outline:2px_solid_var(--malachite-text-primary)]';\n\n/**\n * Inset focus ring — drawn 2px inside the element edge. Use for full-bleed elements\n * inside an `overflow-hidden` container (e.g. Surface.Row) where an outset outline\n * would be clipped.\n */\nexport const FOCUS_RING_INSET =\n 'outline-none focus-visible:[outline:2px_solid_var(--malachite-text-primary)] focus-visible:[outline-offset:-2px]';\n\n/** `FOCUS_RING_INSET` drawn by an overlay while its `group` ancestor has keyboard focus. */\nexport const FOCUS_RING_INSET_OVERLAY =\n 'pointer-events-none absolute inset-0 z-[2] hidden group-focus-visible:block [outline:2px_solid_var(--malachite-text-primary)] [outline-offset:-2px]';\n\n/** Ring drawn on a wrapper when a control *inside* it takes focus. */\nexport const FOCUS_RING_WITHIN =\n 'outline-none has-[:focus-visible]:outline-offset-2 has-[:focus-visible]:[outline:2px_solid_var(--malachite-text-primary)]';\n\n/**\n * As `FOCUS_RING_WITHIN`, for a card whose control is a `role=\"radio\"` beside its links:\n * `:has(:focus-visible)` would also match a focused link and draw a second ring.\n */\nexport const FOCUS_RING_WITHIN_RADIO =\n 'outline-none has-[[role=radio]:focus-visible]:outline-offset-2 has-[[role=radio]:focus-visible]:[outline:2px_solid_var(--malachite-text-primary)]';\n\n/** Ring for a control on the SelectionBar, where `FOCUS_RING` would be invisible. */\nexport const FOCUS_RING_SELECTION_BAR =\n 'outline-none focus-visible:outline-offset-2 focus-visible:[outline:2px_solid_var(--malachite-selection-bar-foreground)]';\n\n/** Inset ring for a control on the InlineConfirm chip. */\nexport const FOCUS_RING_INLINE_CONFIRM_INSET =\n 'outline-none focus-visible:[outline:2px_solid_var(--malachite-inline-confirm-foreground)] focus-visible:[outline-offset:-2px]';\n\n/** Ring for `CloseButton surface=\"inverse\"`, where `FOCUS_RING` would be invisible on the dark panel. */\nexport const FOCUS_RING_CLOSE_BUTTON_INVERSE =\n 'outline-none focus-visible:outline-offset-2 focus-visible:[outline:2px_solid_var(--malachite-close-button-inverse-hover-foreground,rgb(255,255,255))]';\n"],"names":["FOCUS_RING","FOCUS_RING_INSET","FOCUS_RING_INSET_OVERLAY","FOCUS_RING_WITHIN_RADIO","FOCUS_RING_SELECTION_BAR","FOCUS_RING_INLINE_CONFIRM_INSET","FOCUS_RING_CLOSE_BUTTON_INVERSE"],"mappings":"AAGO,MAAMA,IACT,+GAOSC,IACT,oHAGSC,IACT,uJAUSC,IACT,qJAGSC,IACT,2HAGSC,IACT,iIAGSC,IACT;"}
|
|
@@ -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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"}
|