@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
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
import { jsxs as b, jsx as e, Fragment as H } from "react/jsx-runtime";
|
|
2
|
+
import { useId as J, useRef as P, useEffect as Q, useLayoutEffect as ee } from "react";
|
|
3
|
+
import { Button as te } from "./Button.js";
|
|
4
|
+
import ne from "./CustomIcons/CaretDoubleLeftIcon.js";
|
|
5
|
+
import re from "./CustomIcons/CaretDoubleRightIcon.js";
|
|
6
|
+
import le from "./CustomIcons/CaretLeftIcon.js";
|
|
7
|
+
import ae from "./CustomIcons/CaretRightIcon.js";
|
|
8
|
+
import { SegmentedControl as se } from "./SegmentedControl.js";
|
|
9
|
+
import { monthLabel as oe, monthWeeks as ie, dayKeyOf as K, sameDay as y, dayKeyString as _, weekdayLabels as ce, spokenDay as de, partsOf as ue, formatTimeReadout as me, addMonths as fe, compareDays as D, addMonthsToDay as U, addDays as $, startOfWeek as j } from "./dateMath.js";
|
|
10
|
+
import { DIVIDER_V as B, DIVIDER_H as S, LINK_BUTTON as he, LINK_HOVER as pe, PRESET_BUTTON as be, PRESET_HOVER as Ne, NAV_BUTTON as C, HEADING_TEXT as M, RANGE_BAND as ge, RANGE_BAND_SPAN as xe, CELL_CLASS as G, dayToneClass as z } from "./datePickerStyles.js";
|
|
11
|
+
import { FOCUS_RING as v } from "./focusRing.js";
|
|
12
|
+
const ye = 40, ve = 240, R = (n, r = 1) => Array.from({ length: Math.ceil(n / r) }, (t, s) => s * r), we = (n, r, t, s) => {
|
|
13
|
+
switch (n) {
|
|
14
|
+
case "ArrowLeft":
|
|
15
|
+
return $(t, -1);
|
|
16
|
+
case "ArrowRight":
|
|
17
|
+
return $(t, 1);
|
|
18
|
+
case "ArrowUp":
|
|
19
|
+
return $(t, -7);
|
|
20
|
+
case "ArrowDown":
|
|
21
|
+
return $(t, 7);
|
|
22
|
+
case "Home":
|
|
23
|
+
return j(t, s);
|
|
24
|
+
case "End":
|
|
25
|
+
return $(j(t, s), 6);
|
|
26
|
+
case "PageUp":
|
|
27
|
+
return U(t, r ? -12 : -1);
|
|
28
|
+
case "PageDown":
|
|
29
|
+
return U(t, r ? 12 : 1);
|
|
30
|
+
default:
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
}, $e = ({ view: n, labelId: r, onViewChange: t, isMonthReachable: s }) => {
|
|
34
|
+
const p = (g) => {
|
|
35
|
+
const l = fe(n, g);
|
|
36
|
+
return { target: l, disabled: !s(l) };
|
|
37
|
+
}, d = p(-1), u = p(-12), h = p(1), N = p(12), m = ({ target: g, disabled: l }) => {
|
|
38
|
+
l || t(g);
|
|
39
|
+
};
|
|
40
|
+
return /* @__PURE__ */ b("div", { className: "flex items-center justify-between p-2", children: [
|
|
41
|
+
/* @__PURE__ */ b("div", { className: "flex items-center gap-0.5", children: [
|
|
42
|
+
/* @__PURE__ */ e(
|
|
43
|
+
"button",
|
|
44
|
+
{
|
|
45
|
+
type: "button",
|
|
46
|
+
"aria-label": "Previous month",
|
|
47
|
+
className: `${C} ${v}`,
|
|
48
|
+
"aria-disabled": d.disabled || void 0,
|
|
49
|
+
onClick: () => m(d),
|
|
50
|
+
children: /* @__PURE__ */ e(le, { size: 14 })
|
|
51
|
+
}
|
|
52
|
+
),
|
|
53
|
+
/* @__PURE__ */ e(
|
|
54
|
+
"button",
|
|
55
|
+
{
|
|
56
|
+
type: "button",
|
|
57
|
+
"aria-label": "Previous year",
|
|
58
|
+
className: `${C} ${v}`,
|
|
59
|
+
"aria-disabled": u.disabled || void 0,
|
|
60
|
+
onClick: () => m(u),
|
|
61
|
+
children: /* @__PURE__ */ e(ne, { size: 14 })
|
|
62
|
+
}
|
|
63
|
+
)
|
|
64
|
+
] }),
|
|
65
|
+
/* @__PURE__ */ e("span", { id: r, "aria-live": "polite", className: M, children: oe(n) }),
|
|
66
|
+
/* @__PURE__ */ b("div", { className: "flex items-center gap-0.5", children: [
|
|
67
|
+
/* @__PURE__ */ e(
|
|
68
|
+
"button",
|
|
69
|
+
{
|
|
70
|
+
type: "button",
|
|
71
|
+
"aria-label": "Next month",
|
|
72
|
+
className: `${C} ${v}`,
|
|
73
|
+
"aria-disabled": h.disabled || void 0,
|
|
74
|
+
onClick: () => m(h),
|
|
75
|
+
children: /* @__PURE__ */ e(ae, { size: 14 })
|
|
76
|
+
}
|
|
77
|
+
),
|
|
78
|
+
/* @__PURE__ */ e(
|
|
79
|
+
"button",
|
|
80
|
+
{
|
|
81
|
+
type: "button",
|
|
82
|
+
"aria-label": "Next year",
|
|
83
|
+
className: `${C} ${v}`,
|
|
84
|
+
"aria-disabled": N.disabled || void 0,
|
|
85
|
+
onClick: () => m(N),
|
|
86
|
+
children: /* @__PURE__ */ e(re, { size: 14 })
|
|
87
|
+
}
|
|
88
|
+
)
|
|
89
|
+
] })
|
|
90
|
+
] });
|
|
91
|
+
}, Ie = (n, r, t) => !r || !t || D(r, t) === 0 ? null : y(n, r) ? "start" : y(n, t) ? "end" : D(n, r) > 0 && D(n, t) < 0 ? "middle" : null, ke = ({
|
|
92
|
+
mode: n,
|
|
93
|
+
zone: r,
|
|
94
|
+
weekStart: t,
|
|
95
|
+
view: s,
|
|
96
|
+
onViewChange: p,
|
|
97
|
+
focusDay: d,
|
|
98
|
+
onFocusDayChange: u,
|
|
99
|
+
draft: h,
|
|
100
|
+
today: N,
|
|
101
|
+
isDayDisabled: m,
|
|
102
|
+
isMonthReachable: g,
|
|
103
|
+
onPickDay: l,
|
|
104
|
+
initialFocusRef: f,
|
|
105
|
+
labelId: i
|
|
106
|
+
}) => {
|
|
107
|
+
const o = P(null), x = P(!1), L = ie(s, t), T = h.start ? K(h.start, r) : null, E = n === "range" && h.end ? K(h.end, r) : null, I = L.some((c) => c.some((a) => y(a, d))) ? d : { ...s, day: 1 };
|
|
108
|
+
Q(() => {
|
|
109
|
+
var c, a;
|
|
110
|
+
x.current && (x.current = !1, (a = (c = o.current) == null ? void 0 : c.querySelector(`[data-day="${_(d)}"]`)) == null || a.focus({ preventScroll: !0 }));
|
|
111
|
+
}, [d]);
|
|
112
|
+
const W = (c) => {
|
|
113
|
+
if (c.key === "Enter" || c.key === " ") {
|
|
114
|
+
c.preventDefault(), m(I) || l(I);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const a = we(c.key, c.shiftKey, I, t);
|
|
118
|
+
if (!a)
|
|
119
|
+
return;
|
|
120
|
+
c.preventDefault();
|
|
121
|
+
const w = a.month !== s.month || a.year !== s.year;
|
|
122
|
+
w && !g(a) || (w && p({ year: a.year, month: a.month }), x.current = !0, u(a));
|
|
123
|
+
}, X = ce(t);
|
|
124
|
+
return /* @__PURE__ */ b(
|
|
125
|
+
"div",
|
|
126
|
+
{
|
|
127
|
+
ref: o,
|
|
128
|
+
role: "grid",
|
|
129
|
+
"aria-labelledby": i,
|
|
130
|
+
"aria-multiselectable": n === "range" || void 0,
|
|
131
|
+
className: "flex w-[276px] flex-col",
|
|
132
|
+
onKeyDown: W,
|
|
133
|
+
children: [
|
|
134
|
+
/* @__PURE__ */ e("div", { role: "row", className: "grid grid-cols-7 px-[14px] py-2", children: X.map((c) => /* @__PURE__ */ e(
|
|
135
|
+
"span",
|
|
136
|
+
{
|
|
137
|
+
role: "columnheader",
|
|
138
|
+
"aria-label": c.long,
|
|
139
|
+
className: `flex h-6 items-center justify-center ${M}`,
|
|
140
|
+
children: c.short
|
|
141
|
+
},
|
|
142
|
+
c.short
|
|
143
|
+
)) }),
|
|
144
|
+
L.map((c) => /* @__PURE__ */ e(
|
|
145
|
+
"div",
|
|
146
|
+
{
|
|
147
|
+
role: "row",
|
|
148
|
+
className: "grid grid-cols-7 px-[14px] py-2",
|
|
149
|
+
children: c.map((a) => {
|
|
150
|
+
const w = _(a), k = m(a), A = n === "range" ? Ie(a, T, E) : null, q = y(a, T) || y(a, E) || A === "middle", F = y(a, T) || y(a, E), O = y(a, N), Y = a.month !== s.month, V = y(a, I);
|
|
151
|
+
return /* @__PURE__ */ b(
|
|
152
|
+
"div",
|
|
153
|
+
{
|
|
154
|
+
role: "presentation",
|
|
155
|
+
className: "relative flex h-6 items-center justify-center",
|
|
156
|
+
children: [
|
|
157
|
+
A && /* @__PURE__ */ e(
|
|
158
|
+
"span",
|
|
159
|
+
{
|
|
160
|
+
"aria-hidden": "true",
|
|
161
|
+
className: `${ge} ${xe[A]}`
|
|
162
|
+
}
|
|
163
|
+
),
|
|
164
|
+
/* @__PURE__ */ e(
|
|
165
|
+
"button",
|
|
166
|
+
{
|
|
167
|
+
ref: V ? (Z) => {
|
|
168
|
+
f.current = Z;
|
|
169
|
+
} : void 0,
|
|
170
|
+
type: "button",
|
|
171
|
+
role: "gridcell",
|
|
172
|
+
"aria-selected": q,
|
|
173
|
+
"data-day": w,
|
|
174
|
+
tabIndex: V ? 0 : -1,
|
|
175
|
+
"aria-label": de(a),
|
|
176
|
+
"aria-current": O ? "date" : void 0,
|
|
177
|
+
"aria-disabled": k || void 0,
|
|
178
|
+
className: `${G(k)} ${z({
|
|
179
|
+
selected: F,
|
|
180
|
+
today: O,
|
|
181
|
+
outside: Y,
|
|
182
|
+
disabled: k
|
|
183
|
+
})}`,
|
|
184
|
+
onClick: () => {
|
|
185
|
+
u(a), k || l(a);
|
|
186
|
+
},
|
|
187
|
+
children: a.day
|
|
188
|
+
}
|
|
189
|
+
)
|
|
190
|
+
]
|
|
191
|
+
},
|
|
192
|
+
w
|
|
193
|
+
);
|
|
194
|
+
})
|
|
195
|
+
},
|
|
196
|
+
_(c[0])
|
|
197
|
+
))
|
|
198
|
+
]
|
|
199
|
+
}
|
|
200
|
+
);
|
|
201
|
+
}, Ce = ({ label: n, values: r, selected: t, isDisabled: s, onPick: p }) => {
|
|
202
|
+
const d = P(null), u = t === null ? -1 : r.filter((l) => l <= t).length - 1;
|
|
203
|
+
ee(() => {
|
|
204
|
+
d.current && u >= 0 && (d.current.scrollTop = u * ye);
|
|
205
|
+
}, [u]);
|
|
206
|
+
const h = Math.max(
|
|
207
|
+
0,
|
|
208
|
+
r.findIndex((l) => !s(l))
|
|
209
|
+
), N = (l) => l === (u >= 0 ? u : h) ? 0 : -1, m = (l, f) => {
|
|
210
|
+
var o, x;
|
|
211
|
+
const i = r[l];
|
|
212
|
+
i === void 0 || s(i) || (p(i), f && ((x = (o = d.current) == null ? void 0 : o.querySelector(`[data-value="${i}"]`)) == null || x.focus({ preventScroll: !0 })));
|
|
213
|
+
};
|
|
214
|
+
return /* @__PURE__ */ e(
|
|
215
|
+
"div",
|
|
216
|
+
{
|
|
217
|
+
ref: d,
|
|
218
|
+
role: "listbox",
|
|
219
|
+
"aria-label": n,
|
|
220
|
+
className: "flex flex-col items-center overflow-y-auto overscroll-contain [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
|
|
221
|
+
style: { height: ve },
|
|
222
|
+
onKeyDown: (l) => {
|
|
223
|
+
const f = u >= 0 ? u : -1, i = {
|
|
224
|
+
ArrowDown: 1,
|
|
225
|
+
ArrowUp: -1,
|
|
226
|
+
PageDown: 5,
|
|
227
|
+
PageUp: -5
|
|
228
|
+
};
|
|
229
|
+
let o = null;
|
|
230
|
+
if (l.key in i) {
|
|
231
|
+
o = f < 0 ? h : f + i[l.key];
|
|
232
|
+
const x = Math.sign(i[l.key]);
|
|
233
|
+
for (; o >= 0 && o < r.length && s(r[o]); )
|
|
234
|
+
o += x;
|
|
235
|
+
} else if (l.key === "Home")
|
|
236
|
+
o = r.findIndex((x) => !s(x));
|
|
237
|
+
else if (l.key === "End")
|
|
238
|
+
for (o = r.length - 1; o >= 0 && s(r[o]); )
|
|
239
|
+
o -= 1;
|
|
240
|
+
o !== null && (l.preventDefault(), m(o, !0));
|
|
241
|
+
},
|
|
242
|
+
children: r.map((l, f) => {
|
|
243
|
+
const i = s(l), o = l === t;
|
|
244
|
+
return /* @__PURE__ */ e("div", { className: "flex shrink-0 items-center py-2", children: /* @__PURE__ */ e(
|
|
245
|
+
"button",
|
|
246
|
+
{
|
|
247
|
+
type: "button",
|
|
248
|
+
role: "option",
|
|
249
|
+
"data-value": l,
|
|
250
|
+
"aria-selected": o,
|
|
251
|
+
"aria-disabled": i || void 0,
|
|
252
|
+
tabIndex: N(f),
|
|
253
|
+
className: `${G(i)} ${z({
|
|
254
|
+
selected: o,
|
|
255
|
+
today: !1,
|
|
256
|
+
outside: !1,
|
|
257
|
+
disabled: i
|
|
258
|
+
})}`,
|
|
259
|
+
onClick: () => m(f, !1),
|
|
260
|
+
children: String(l).padStart(2, "0")
|
|
261
|
+
}
|
|
262
|
+
) }, l);
|
|
263
|
+
})
|
|
264
|
+
}
|
|
265
|
+
);
|
|
266
|
+
}, Te = ({
|
|
267
|
+
mode: n,
|
|
268
|
+
zone: r,
|
|
269
|
+
precision: t,
|
|
270
|
+
minuteStep: s,
|
|
271
|
+
draft: p,
|
|
272
|
+
active: d,
|
|
273
|
+
onActiveChange: u,
|
|
274
|
+
isTimeDisabled: h,
|
|
275
|
+
onPickTime: N
|
|
276
|
+
}) => {
|
|
277
|
+
const m = n === "range" ? p[d] : p.start, g = m ? ue(m, r) : null, l = [
|
|
278
|
+
{ unit: "hours", label: "Hours", values: R(24) },
|
|
279
|
+
{ unit: "minutes", label: "Minutes", values: R(60, s) },
|
|
280
|
+
...t === "second" ? [{ unit: "seconds", label: "Seconds", values: R(60) }] : []
|
|
281
|
+
];
|
|
282
|
+
return /* @__PURE__ */ b("div", { className: "flex flex-col gap-1", children: [
|
|
283
|
+
/* @__PURE__ */ e("div", { className: "flex min-h-8 items-center justify-center p-2", children: n === "range" ? /* @__PURE__ */ e(
|
|
284
|
+
se,
|
|
285
|
+
{
|
|
286
|
+
size: "small",
|
|
287
|
+
"aria-label": "Time for",
|
|
288
|
+
value: d,
|
|
289
|
+
onChange: u,
|
|
290
|
+
options: [
|
|
291
|
+
{ value: "start", label: "Start" },
|
|
292
|
+
{ value: "end", label: "End" }
|
|
293
|
+
]
|
|
294
|
+
}
|
|
295
|
+
) : /* @__PURE__ */ e("span", { className: `${M} whitespace-nowrap`, children: me(m, r, t) }) }),
|
|
296
|
+
/* @__PURE__ */ e("div", { className: S }),
|
|
297
|
+
/* @__PURE__ */ e(
|
|
298
|
+
"div",
|
|
299
|
+
{
|
|
300
|
+
className: "grid px-[14px]",
|
|
301
|
+
style: { gridTemplateColumns: `repeat(${l.length}, 35.67px)` },
|
|
302
|
+
children: l.map((f) => /* @__PURE__ */ e(
|
|
303
|
+
Ce,
|
|
304
|
+
{
|
|
305
|
+
label: f.label,
|
|
306
|
+
values: f.values,
|
|
307
|
+
selected: g ? g[f.unit] : null,
|
|
308
|
+
isDisabled: (i) => h(f.unit, i),
|
|
309
|
+
onPick: (i) => N(f.unit, i)
|
|
310
|
+
},
|
|
311
|
+
f.unit
|
|
312
|
+
))
|
|
313
|
+
}
|
|
314
|
+
)
|
|
315
|
+
] });
|
|
316
|
+
}, Ee = ({
|
|
317
|
+
presets: n,
|
|
318
|
+
onPreset: r
|
|
319
|
+
}) => /* @__PURE__ */ e("div", { className: "flex w-36 flex-col gap-0.5 p-1", role: "group", "aria-label": "Presets", children: n.map((t, s) => /* @__PURE__ */ e(
|
|
320
|
+
"button",
|
|
321
|
+
{
|
|
322
|
+
type: "button",
|
|
323
|
+
className: `${be} ${Ne} ${v}`,
|
|
324
|
+
onClick: () => r(s),
|
|
325
|
+
children: t
|
|
326
|
+
},
|
|
327
|
+
t
|
|
328
|
+
)) }), Ue = (n) => {
|
|
329
|
+
const r = `${J().replace(/[^a-zA-Z0-9_-]/g, "")}-month`, {
|
|
330
|
+
presets: t,
|
|
331
|
+
onPreset: s,
|
|
332
|
+
precision: p,
|
|
333
|
+
todayLabel: d,
|
|
334
|
+
todayDisabled: u,
|
|
335
|
+
onToday: h,
|
|
336
|
+
showApply: N,
|
|
337
|
+
applyDisabled: m,
|
|
338
|
+
onApply: g
|
|
339
|
+
} = n;
|
|
340
|
+
return /* @__PURE__ */ b("div", { className: "flex flex-col gap-1 p-1.5", children: [
|
|
341
|
+
n.mode === "range" && /* @__PURE__ */ e("span", { className: "sr-only", "aria-live": "polite", children: n.active === "end" && n.draft.start && !n.draft.end ? "Choose the end date" : "" }),
|
|
342
|
+
/* @__PURE__ */ b("div", { className: "flex", children: [
|
|
343
|
+
t && t.length > 0 && /* @__PURE__ */ b(H, { children: [
|
|
344
|
+
/* @__PURE__ */ e(Ee, { presets: t, onPreset: s }),
|
|
345
|
+
/* @__PURE__ */ e("div", { className: `${B} mx-1` })
|
|
346
|
+
] }),
|
|
347
|
+
/* @__PURE__ */ b("div", { className: "flex flex-col gap-1", children: [
|
|
348
|
+
/* @__PURE__ */ e(
|
|
349
|
+
$e,
|
|
350
|
+
{
|
|
351
|
+
view: n.view,
|
|
352
|
+
labelId: r,
|
|
353
|
+
onViewChange: n.onViewChange,
|
|
354
|
+
isMonthReachable: n.isMonthReachable
|
|
355
|
+
}
|
|
356
|
+
),
|
|
357
|
+
/* @__PURE__ */ e("div", { className: S }),
|
|
358
|
+
/* @__PURE__ */ e(ke, { ...n, labelId: r })
|
|
359
|
+
] }),
|
|
360
|
+
p !== "day" && /* @__PURE__ */ b(H, { children: [
|
|
361
|
+
/* @__PURE__ */ e("div", { className: B }),
|
|
362
|
+
/* @__PURE__ */ e(Te, { ...n })
|
|
363
|
+
] })
|
|
364
|
+
] }),
|
|
365
|
+
/* @__PURE__ */ e("div", { className: S }),
|
|
366
|
+
/* @__PURE__ */ b(
|
|
367
|
+
"div",
|
|
368
|
+
{
|
|
369
|
+
className: `flex items-center p-2 ${N ? "justify-between" : "justify-center"}`,
|
|
370
|
+
children: [
|
|
371
|
+
/* @__PURE__ */ e(
|
|
372
|
+
"button",
|
|
373
|
+
{
|
|
374
|
+
type: "button",
|
|
375
|
+
className: `${he} ${pe} ${v}`,
|
|
376
|
+
disabled: u,
|
|
377
|
+
onClick: h,
|
|
378
|
+
children: d
|
|
379
|
+
}
|
|
380
|
+
),
|
|
381
|
+
N && /* @__PURE__ */ e(
|
|
382
|
+
te,
|
|
383
|
+
{
|
|
384
|
+
size: "small",
|
|
385
|
+
variant: "filled",
|
|
386
|
+
disabled: m,
|
|
387
|
+
onClick: g,
|
|
388
|
+
children: "Apply"
|
|
389
|
+
}
|
|
390
|
+
)
|
|
391
|
+
]
|
|
392
|
+
}
|
|
393
|
+
)
|
|
394
|
+
] });
|
|
395
|
+
};
|
|
396
|
+
export {
|
|
397
|
+
Ue as default
|
|
398
|
+
};
|
|
399
|
+
//# sourceMappingURL=DatePickerPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePickerPanel.js","sources":["../../src/components/DatePickerPanel.tsx"],"sourcesContent":["import React, { useEffect, useId, useLayoutEffect, useRef } from 'react';\nimport { Button } from './Button';\nimport CaretDoubleLeftIcon from './CustomIcons/CaretDoubleLeftIcon';\nimport CaretDoubleRightIcon from './CustomIcons/CaretDoubleRightIcon';\nimport CaretLeftIcon from './CustomIcons/CaretLeftIcon';\nimport CaretRightIcon from './CustomIcons/CaretRightIcon';\nimport SegmentedControl from './SegmentedControl';\nimport {\n type DatePickerPrecision,\n type DatePickerTimeZone,\n type DayKey,\n type MonthKey,\n type WeekStart,\n addDays,\n addMonths,\n addMonthsToDay,\n compareDays,\n dayKeyOf,\n dayKeyString,\n formatTimeReadout,\n monthLabel,\n monthWeeks,\n partsOf,\n sameDay,\n spokenDay,\n startOfWeek,\n weekdayLabels,\n} from './dateMath';\nimport {\n CELL_CLASS,\n DIVIDER_H,\n DIVIDER_V,\n HEADING_TEXT,\n LINK_BUTTON,\n LINK_HOVER,\n NAV_BUTTON,\n PRESET_BUTTON,\n PRESET_HOVER,\n RANGE_BAND,\n RANGE_BAND_SPAN,\n dayToneClass,\n} from './datePickerStyles';\nimport type { DateMinuteStep } from './datePickerTypes';\nimport { FOCUS_RING } from './focusRing';\n\nexport type Endpoint = 'start' | 'end';\nexport type TimeUnit = 'hours' | 'minutes' | 'seconds';\n\nexport interface Selection {\n start: Date | null;\n end: Date | null;\n}\n\ninterface DatePickerPanelProps {\n mode: 'single' | 'range';\n zone: DatePickerTimeZone;\n precision: DatePickerPrecision;\n minuteStep: DateMinuteStep;\n weekStart: WeekStart;\n view: MonthKey;\n onViewChange: (view: MonthKey) => void;\n focusDay: DayKey;\n onFocusDayChange: (day: DayKey) => void;\n draft: Selection;\n active: Endpoint;\n onActiveChange: (endpoint: Endpoint) => void;\n today: DayKey;\n isDayDisabled: (day: DayKey) => boolean;\n isMonthReachable: (month: MonthKey) => boolean;\n isTimeDisabled: (unit: TimeUnit, value: number) => boolean;\n onPickDay: (day: DayKey) => void;\n onPickTime: (unit: TimeUnit, value: number) => void;\n presets?: string[];\n onPreset: (index: number) => void;\n todayLabel: string;\n todayDisabled: boolean;\n onToday: () => void;\n showApply: boolean;\n applyDisabled: boolean;\n onApply: () => void;\n initialFocusRef: React.MutableRefObject<HTMLElement | null>;\n}\n\nconst TIME_ROW_PX = 40;\nconst TIME_COLUMN_HEIGHT_PX = 240;\n\nconst range = (count: number, step = 1): number[] =>\n Array.from({ length: Math.ceil(count / step) }, (_, index) => index * step);\n\nconst keyMove = (key: string, shift: boolean, day: DayKey, weekStart: WeekStart): DayKey | null => {\n switch (key) {\n case 'ArrowLeft':\n return addDays(day, -1);\n case 'ArrowRight':\n return addDays(day, 1);\n case 'ArrowUp':\n return addDays(day, -7);\n case 'ArrowDown':\n return addDays(day, 7);\n case 'Home':\n return startOfWeek(day, weekStart);\n case 'End':\n return addDays(startOfWeek(day, weekStart), 6);\n case 'PageUp':\n return addMonthsToDay(day, shift ? -12 : -1);\n case 'PageDown':\n return addMonthsToDay(day, shift ? 12 : 1);\n default:\n return null;\n }\n};\n\nconst MonthHeader: React.FC<{\n view: MonthKey;\n labelId: string;\n onViewChange: (view: MonthKey) => void;\n isMonthReachable: (month: MonthKey) => boolean;\n}> = ({ view, labelId, onViewChange, isMonthReachable }) => {\n const step = (amount: number) => {\n const target = addMonths(view, amount);\n return { target, disabled: !isMonthReachable(target) };\n };\n const prevMonth = step(-1);\n const prevYear = step(-12);\n const nextMonth = step(1);\n const nextYear = step(12);\n // aria-disabled: a natively disabled button drops focus to <body>.\n const go = ({ target, disabled }: { target: MonthKey; disabled: boolean }) => {\n if (!disabled) {\n onViewChange(target);\n }\n };\n return (\n <div className=\"flex items-center justify-between p-2\">\n <div className=\"flex items-center gap-0.5\">\n <button\n type=\"button\"\n aria-label=\"Previous month\"\n className={`${NAV_BUTTON} ${FOCUS_RING}`}\n aria-disabled={prevMonth.disabled || undefined}\n onClick={() => go(prevMonth)}\n >\n <CaretLeftIcon size={14} />\n </button>\n <button\n type=\"button\"\n aria-label=\"Previous year\"\n className={`${NAV_BUTTON} ${FOCUS_RING}`}\n aria-disabled={prevYear.disabled || undefined}\n onClick={() => go(prevYear)}\n >\n <CaretDoubleLeftIcon size={14} />\n </button>\n </div>\n <span id={labelId} aria-live=\"polite\" className={HEADING_TEXT}>\n {monthLabel(view)}\n </span>\n <div className=\"flex items-center gap-0.5\">\n <button\n type=\"button\"\n aria-label=\"Next month\"\n className={`${NAV_BUTTON} ${FOCUS_RING}`}\n aria-disabled={nextMonth.disabled || undefined}\n onClick={() => go(nextMonth)}\n >\n <CaretRightIcon size={14} />\n </button>\n <button\n type=\"button\"\n aria-label=\"Next year\"\n className={`${NAV_BUTTON} ${FOCUS_RING}`}\n aria-disabled={nextYear.disabled || undefined}\n onClick={() => go(nextYear)}\n >\n <CaretDoubleRightIcon size={14} />\n </button>\n </div>\n </div>\n );\n};\n\nconst bandSpan = (\n day: DayKey,\n start: DayKey | null,\n end: DayKey | null,\n): keyof typeof RANGE_BAND_SPAN | null => {\n if (!start || !end || compareDays(start, end) === 0) {\n return null;\n }\n if (sameDay(day, start)) {\n return 'start';\n }\n if (sameDay(day, end)) {\n return 'end';\n }\n return compareDays(day, start) > 0 && compareDays(day, end) < 0 ? 'middle' : null;\n};\n\nconst DayGrid: React.FC<\n Pick<\n DatePickerPanelProps,\n | 'mode'\n | 'zone'\n | 'weekStart'\n | 'view'\n | 'onViewChange'\n | 'focusDay'\n | 'onFocusDayChange'\n | 'draft'\n | 'today'\n | 'isDayDisabled'\n | 'isMonthReachable'\n | 'onPickDay'\n | 'initialFocusRef'\n > & { labelId: string }\n> = ({\n mode,\n zone,\n weekStart,\n view,\n onViewChange,\n focusDay,\n onFocusDayChange,\n draft,\n today,\n isDayDisabled,\n isMonthReachable,\n onPickDay,\n initialFocusRef,\n labelId,\n}) => {\n const gridRef = useRef<HTMLDivElement>(null);\n const moveFocus = useRef(false);\n const weeks = monthWeeks(view, weekStart);\n const start = draft.start ? dayKeyOf(draft.start, zone) : null;\n const end = mode === 'range' && draft.end ? dayKeyOf(draft.end, zone) : null;\n const focusInView = weeks.some((week) => week.some((day) => sameDay(day, focusDay)));\n const tabStop = focusInView ? focusDay : { ...view, day: 1 };\n\n useEffect(() => {\n if (!moveFocus.current) {\n return;\n }\n moveFocus.current = false;\n gridRef.current\n ?.querySelector<HTMLElement>(`[data-day=\"${dayKeyString(focusDay)}\"]`)\n ?.focus({ preventScroll: true });\n }, [focusDay]);\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n if (!isDayDisabled(tabStop)) {\n onPickDay(tabStop);\n }\n return;\n }\n const next = keyMove(event.key, event.shiftKey, tabStop, weekStart);\n if (!next) {\n return;\n }\n event.preventDefault();\n const leavesView = next.month !== view.month || next.year !== view.year;\n if (leavesView && !isMonthReachable(next)) {\n return;\n }\n if (leavesView) {\n onViewChange({ year: next.year, month: next.month });\n }\n moveFocus.current = true;\n onFocusDayChange(next);\n };\n\n const weekdays = weekdayLabels(weekStart);\n\n return (\n <div\n ref={gridRef}\n role=\"grid\"\n aria-labelledby={labelId}\n aria-multiselectable={mode === 'range' || undefined}\n className=\"flex w-[276px] flex-col\"\n onKeyDown={handleKeyDown}\n >\n <div role=\"row\" className=\"grid grid-cols-7 px-[14px] py-2\">\n {weekdays.map((weekday) => (\n <span\n key={weekday.short}\n role=\"columnheader\"\n aria-label={weekday.long}\n className={`flex h-6 items-center justify-center ${HEADING_TEXT}`}\n >\n {weekday.short}\n </span>\n ))}\n </div>\n {weeks.map((week) => (\n <div\n key={dayKeyString(week[0])}\n role=\"row\"\n className=\"grid grid-cols-7 px-[14px] py-2\"\n >\n {week.map((day) => {\n const key = dayKeyString(day);\n const disabled = isDayDisabled(day);\n const band = mode === 'range' ? bandSpan(day, start, end) : null;\n const selected =\n sameDay(day, start) || sameDay(day, end) || band === 'middle';\n const endpoint = sameDay(day, start) || sameDay(day, end);\n const isToday = sameDay(day, today);\n const outside = day.month !== view.month;\n const isTabStop = sameDay(day, tabStop);\n return (\n <div\n key={key}\n role=\"presentation\"\n className=\"relative flex h-6 items-center justify-center\"\n >\n {band && (\n <span\n aria-hidden=\"true\"\n className={`${RANGE_BAND} ${RANGE_BAND_SPAN[band]}`}\n />\n )}\n <button\n ref={\n isTabStop\n ? (node) => {\n initialFocusRef.current = node;\n }\n : undefined\n }\n type=\"button\"\n role=\"gridcell\"\n aria-selected={selected}\n data-day={key}\n tabIndex={isTabStop ? 0 : -1}\n aria-label={spokenDay(day)}\n aria-current={isToday ? 'date' : undefined}\n aria-disabled={disabled || undefined}\n className={`${CELL_CLASS(disabled)} ${dayToneClass({\n selected: endpoint,\n today: isToday,\n outside,\n disabled,\n })}`}\n onClick={() => {\n onFocusDayChange(day);\n if (!disabled) {\n onPickDay(day);\n }\n }}\n >\n {day.day}\n </button>\n </div>\n );\n })}\n </div>\n ))}\n </div>\n );\n};\n\nconst TimeColumn: React.FC<{\n label: string;\n values: number[];\n selected: number | null;\n isDisabled: (value: number) => boolean;\n onPick: (value: number) => void;\n}> = ({ label, values, selected, isDisabled, onPick }) => {\n const listRef = useRef<HTMLDivElement>(null);\n const parkedIndex =\n selected === null ? -1 : values.filter((value) => value <= selected).length - 1;\n\n // A write, never a layout read.\n useLayoutEffect(() => {\n if (listRef.current && parkedIndex >= 0) {\n listRef.current.scrollTop = parkedIndex * TIME_ROW_PX;\n }\n }, [parkedIndex]);\n\n const firstEnabled = Math.max(\n 0,\n values.findIndex((value) => !isDisabled(value)),\n );\n const tabIndexOf = (index: number) =>\n index === (parkedIndex >= 0 ? parkedIndex : firstEnabled) ? 0 : -1;\n\n const pickAt = (index: number, focus: boolean) => {\n const value = values[index];\n if (value === undefined || isDisabled(value)) {\n return;\n }\n onPick(value);\n if (focus) {\n listRef.current\n ?.querySelector<HTMLElement>(`[data-value=\"${value}\"]`)\n ?.focus({ preventScroll: true });\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n const from = parkedIndex >= 0 ? parkedIndex : -1;\n const delta: Record<string, number> = {\n ArrowDown: 1,\n ArrowUp: -1,\n PageDown: 5,\n PageUp: -5,\n };\n let target: number | null = null;\n if (event.key in delta) {\n target = from < 0 ? firstEnabled : from + delta[event.key];\n const step = Math.sign(delta[event.key]);\n while (target >= 0 && target < values.length && isDisabled(values[target])) {\n target += step;\n }\n } else if (event.key === 'Home') {\n target = values.findIndex((value) => !isDisabled(value));\n } else if (event.key === 'End') {\n target = values.length - 1;\n while (target >= 0 && isDisabled(values[target])) {\n target -= 1;\n }\n }\n if (target === null) {\n return;\n }\n event.preventDefault();\n pickAt(target, true);\n };\n\n return (\n <div\n ref={listRef}\n role=\"listbox\"\n aria-label={label}\n className=\"flex flex-col items-center overflow-y-auto overscroll-contain [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\"\n style={{ height: TIME_COLUMN_HEIGHT_PX }}\n onKeyDown={handleKeyDown}\n >\n {values.map((value, index) => {\n const disabled = isDisabled(value);\n const isSelected = value === selected;\n return (\n <div key={value} className=\"flex shrink-0 items-center py-2\">\n <button\n type=\"button\"\n role=\"option\"\n data-value={value}\n aria-selected={isSelected}\n aria-disabled={disabled || undefined}\n tabIndex={tabIndexOf(index)}\n className={`${CELL_CLASS(disabled)} ${dayToneClass({\n selected: isSelected,\n today: false,\n outside: false,\n disabled,\n })}`}\n onClick={() => pickAt(index, false)}\n >\n {String(value).padStart(2, '0')}\n </button>\n </div>\n );\n })}\n </div>\n );\n};\n\nconst TimePanel: React.FC<\n Pick<\n DatePickerPanelProps,\n | 'mode'\n | 'zone'\n | 'precision'\n | 'minuteStep'\n | 'draft'\n | 'active'\n | 'onActiveChange'\n | 'isTimeDisabled'\n | 'onPickTime'\n >\n> = ({\n mode,\n zone,\n precision,\n minuteStep,\n draft,\n active,\n onActiveChange,\n isTimeDisabled,\n onPickTime,\n}) => {\n const target = mode === 'range' ? draft[active] : draft.start;\n const parts = target ? partsOf(target, zone) : null;\n const columns: { unit: TimeUnit; label: string; values: number[] }[] = [\n { unit: 'hours', label: 'Hours', values: range(24) },\n { unit: 'minutes', label: 'Minutes', values: range(60, minuteStep) },\n ...(precision === 'second'\n ? [{ unit: 'seconds' as const, label: 'Seconds', values: range(60) }]\n : []),\n ];\n return (\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex min-h-8 items-center justify-center p-2\">\n {mode === 'range' ? (\n <SegmentedControl<Endpoint>\n size=\"small\"\n aria-label=\"Time for\"\n value={active}\n onChange={onActiveChange}\n options={[\n { value: 'start', label: 'Start' },\n { value: 'end', label: 'End' },\n ]}\n />\n ) : (\n <span className={`${HEADING_TEXT} whitespace-nowrap`}>\n {formatTimeReadout(target, zone, precision)}\n </span>\n )}\n </div>\n <div className={DIVIDER_H} />\n <div\n className=\"grid px-[14px]\"\n style={{ gridTemplateColumns: `repeat(${columns.length}, 35.67px)` }}\n >\n {columns.map((column) => (\n <TimeColumn\n key={column.unit}\n label={column.label}\n values={column.values}\n selected={parts ? parts[column.unit] : null}\n isDisabled={(value) => isTimeDisabled(column.unit, value)}\n onPick={(value) => onPickTime(column.unit, value)}\n />\n ))}\n </div>\n </div>\n );\n};\n\nconst PresetList: React.FC<{ presets: string[]; onPreset: (index: number) => void }> = ({\n presets,\n onPreset,\n}) => (\n <div className=\"flex w-36 flex-col gap-0.5 p-1\" role=\"group\" aria-label=\"Presets\">\n {presets.map((label, index) => (\n <button\n key={label}\n type=\"button\"\n className={`${PRESET_BUTTON} ${PRESET_HOVER} ${FOCUS_RING}`}\n onClick={() => onPreset(index)}\n >\n {label}\n </button>\n ))}\n </div>\n);\n\nconst DatePickerPanel: React.FC<DatePickerPanelProps> = (props) => {\n const labelId = `${useId().replace(/[^a-zA-Z0-9_-]/g, '')}-month`;\n const {\n presets,\n onPreset,\n precision,\n todayLabel,\n todayDisabled,\n onToday,\n showApply,\n applyDisabled,\n onApply,\n } = props;\n return (\n <div className=\"flex flex-col gap-1 p-1.5\">\n {props.mode === 'range' && (\n <span className=\"sr-only\" aria-live=\"polite\">\n {props.active === 'end' && props.draft.start && !props.draft.end\n ? 'Choose the end date'\n : ''}\n </span>\n )}\n <div className=\"flex\">\n {presets && presets.length > 0 && (\n <>\n <PresetList presets={presets} onPreset={onPreset} />\n <div className={`${DIVIDER_V} mx-1`} />\n </>\n )}\n <div className=\"flex flex-col gap-1\">\n <MonthHeader\n view={props.view}\n labelId={labelId}\n onViewChange={props.onViewChange}\n isMonthReachable={props.isMonthReachable}\n />\n <div className={DIVIDER_H} />\n <DayGrid {...props} labelId={labelId} />\n </div>\n {precision !== 'day' && (\n <>\n <div className={DIVIDER_V} />\n <TimePanel {...props} />\n </>\n )}\n </div>\n <div className={DIVIDER_H} />\n <div\n className={`flex items-center p-2 ${showApply ? 'justify-between' : 'justify-center'}`}\n >\n <button\n type=\"button\"\n className={`${LINK_BUTTON} ${LINK_HOVER} ${FOCUS_RING}`}\n disabled={todayDisabled}\n onClick={onToday}\n >\n {todayLabel}\n </button>\n {showApply && (\n <Button\n size=\"small\"\n variant=\"filled\"\n disabled={applyDisabled}\n onClick={onApply}\n >\n Apply\n </Button>\n )}\n </div>\n </div>\n );\n};\n\nexport default DatePickerPanel;\n"],"names":["TIME_ROW_PX","TIME_COLUMN_HEIGHT_PX","range","count","step","_","index","keyMove","key","shift","day","weekStart","addDays","startOfWeek","addMonthsToDay","MonthHeader","view","labelId","onViewChange","isMonthReachable","amount","target","addMonths","prevMonth","prevYear","nextMonth","nextYear","go","disabled","jsxs","jsx","NAV_BUTTON","FOCUS_RING","CaretLeftIcon","CaretDoubleLeftIcon","HEADING_TEXT","monthLabel","CaretRightIcon","CaretDoubleRightIcon","bandSpan","start","end","compareDays","sameDay","DayGrid","mode","zone","focusDay","onFocusDayChange","draft","today","isDayDisabled","onPickDay","initialFocusRef","gridRef","useRef","moveFocus","weeks","monthWeeks","dayKeyOf","tabStop","week","useEffect","_b","_a","dayKeyString","handleKeyDown","event","next","leavesView","weekdays","weekdayLabels","weekday","band","selected","endpoint","isToday","outside","isTabStop","RANGE_BAND","RANGE_BAND_SPAN","node","spokenDay","CELL_CLASS","dayToneClass","TimeColumn","label","values","isDisabled","onPick","listRef","parkedIndex","value","useLayoutEffect","firstEnabled","tabIndexOf","pickAt","focus","from","delta","isSelected","TimePanel","precision","minuteStep","active","onActiveChange","isTimeDisabled","onPickTime","parts","partsOf","columns","SegmentedControl","formatTimeReadout","DIVIDER_H","column","PresetList","presets","onPreset","PRESET_BUTTON","PRESET_HOVER","DatePickerPanel","props","useId","todayLabel","todayDisabled","onToday","showApply","applyDisabled","onApply","Fragment","DIVIDER_V","LINK_BUTTON","LINK_HOVER","Button"],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { jsxs as R, jsx as r } from "react/jsx-runtime";
|
|
2
|
+
import u from "react";
|
|
3
|
+
import g from "./CustomIcons/DateIcon.js";
|
|
4
|
+
import { Tag as x } from "./Tag.js";
|
|
5
|
+
import { TRIGGER_HEIGHT as T, TRIGGER_SIZE as h, TRIGGER_CLEAR_ROOM as G, ICON_CLASS as _ } from "./datePickerStyles.js";
|
|
6
|
+
import { getTriggerVisual as I, DROPDOWN_TRIGGER_ATTR as N } from "./dropdownTriggerStyle.js";
|
|
7
|
+
import { FOCUS_RING as w } from "./focusRing.js";
|
|
8
|
+
const y = u.forwardRef(
|
|
9
|
+
({
|
|
10
|
+
size: e,
|
|
11
|
+
text: i,
|
|
12
|
+
placeholder: s,
|
|
13
|
+
valueId: m,
|
|
14
|
+
tagId: c,
|
|
15
|
+
tag: a,
|
|
16
|
+
open: o,
|
|
17
|
+
error: l,
|
|
18
|
+
tone: n,
|
|
19
|
+
clearRoom: p,
|
|
20
|
+
disabled: t = !1,
|
|
21
|
+
...f
|
|
22
|
+
}, d) => /* @__PURE__ */ R(
|
|
23
|
+
"button",
|
|
24
|
+
{
|
|
25
|
+
...f,
|
|
26
|
+
ref: d,
|
|
27
|
+
type: "button",
|
|
28
|
+
disabled: t,
|
|
29
|
+
"aria-invalid": l || void 0,
|
|
30
|
+
"data-open": o || void 0,
|
|
31
|
+
[N]: "",
|
|
32
|
+
style: I({
|
|
33
|
+
disabled: t,
|
|
34
|
+
error: l,
|
|
35
|
+
open: o,
|
|
36
|
+
tone: n === "pending" ? "pending" : "default",
|
|
37
|
+
hasSelection: n === "chosen"
|
|
38
|
+
}),
|
|
39
|
+
className: `flex w-full min-w-0 items-center border border-solid font-sans whitespace-nowrap transition-all duration-200 cursor-pointer disabled:cursor-not-allowed ${T[e]} ${h[e]} ${p ? G[e] : ""} ${w}`,
|
|
40
|
+
children: [
|
|
41
|
+
/* @__PURE__ */ r(g, { size: e === "large" ? 16 : 14, className: `shrink-0 ${_}` }),
|
|
42
|
+
/* @__PURE__ */ r(
|
|
43
|
+
"span",
|
|
44
|
+
{
|
|
45
|
+
id: m,
|
|
46
|
+
className: `min-w-0 flex-1 truncate text-left ${i && !t ? "text-[var(--malachite-text-primary,rgb(10,10,10))]" : "text-[var(--malachite-text-placeholder,rgb(187,187,187))]"}`,
|
|
47
|
+
children: i ?? s
|
|
48
|
+
}
|
|
49
|
+
),
|
|
50
|
+
a && /* @__PURE__ */ r("span", { id: c, className: `flex shrink-0 ${t ? "opacity-60" : ""}`, children: /* @__PURE__ */ r(
|
|
51
|
+
x,
|
|
52
|
+
{
|
|
53
|
+
value: a.label,
|
|
54
|
+
type: a.type ?? "default",
|
|
55
|
+
paddingSize: "compact",
|
|
56
|
+
fontSize: "xsmall",
|
|
57
|
+
textTransform: "none"
|
|
58
|
+
}
|
|
59
|
+
) })
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
)
|
|
63
|
+
);
|
|
64
|
+
y.displayName = "DatePickerTrigger";
|
|
65
|
+
export {
|
|
66
|
+
y as default
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=DatePickerTrigger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePickerTrigger.js","sources":["../../src/components/DatePickerTrigger.tsx"],"sourcesContent":["import React from 'react';\nimport DateIcon from './CustomIcons/DateIcon';\nimport Tag from './Tag';\nimport { ICON_CLASS, TRIGGER_CLEAR_ROOM, TRIGGER_HEIGHT, TRIGGER_SIZE } from './datePickerStyles';\nimport type { DatePickerSize, DatePickerTag, DatePickerTone } from './datePickerTypes';\nimport { DROPDOWN_TRIGGER_ATTR, getTriggerVisual } from './dropdownTriggerStyle';\nimport { FOCUS_RING } from './focusRing';\n\ninterface DatePickerTriggerProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children' | 'type'> {\n size: DatePickerSize;\n text: string | null;\n placeholder: string;\n valueId: string;\n tagId: string;\n tag?: DatePickerTag;\n open: boolean;\n error: boolean;\n tone: DatePickerTone;\n clearRoom: boolean;\n}\n\nconst DatePickerTrigger = React.forwardRef<HTMLButtonElement, DatePickerTriggerProps>(\n (\n {\n size,\n text,\n placeholder,\n valueId,\n tagId,\n tag,\n open,\n error,\n tone,\n clearRoom,\n disabled = false,\n ...buttonProps\n },\n ref,\n ) => (\n <button\n {...buttonProps}\n ref={ref}\n type=\"button\"\n disabled={disabled}\n aria-invalid={error || undefined}\n data-open={open || undefined}\n {...{ [DROPDOWN_TRIGGER_ATTR]: '' }}\n style={getTriggerVisual({\n disabled,\n error,\n open,\n tone: tone === 'pending' ? 'pending' : 'default',\n hasSelection: tone === 'chosen',\n })}\n className={`flex w-full min-w-0 items-center border border-solid font-sans whitespace-nowrap transition-all duration-200 cursor-pointer disabled:cursor-not-allowed ${TRIGGER_HEIGHT[size]} ${TRIGGER_SIZE[size]} ${clearRoom ? TRIGGER_CLEAR_ROOM[size] : ''} ${FOCUS_RING}`}\n >\n <DateIcon size={size === 'large' ? 16 : 14} className={`shrink-0 ${ICON_CLASS}`} />\n <span\n id={valueId}\n className={`min-w-0 flex-1 truncate text-left ${\n text && !disabled\n ? 'text-[var(--malachite-text-primary,rgb(10,10,10))]'\n : 'text-[var(--malachite-text-placeholder,rgb(187,187,187))]'\n }`}\n >\n {text ?? placeholder}\n </span>\n {tag && (\n <span id={tagId} className={`flex shrink-0 ${disabled ? 'opacity-60' : ''}`}>\n <Tag\n value={tag.label}\n type={tag.type ?? 'default'}\n paddingSize=\"compact\"\n fontSize=\"xsmall\"\n textTransform=\"none\"\n />\n </span>\n )}\n </button>\n ),\n);\n\nDatePickerTrigger.displayName = 'DatePickerTrigger';\n\nexport default DatePickerTrigger;\n"],"names":["DatePickerTrigger","React","size","text","placeholder","valueId","tagId","tag","open","error","tone","clearRoom","disabled","buttonProps","ref","jsxs","DROPDOWN_TRIGGER_ATTR","getTriggerVisual","TRIGGER_HEIGHT","TRIGGER_SIZE","TRIGGER_CLEAR_ROOM","FOCUS_RING","jsx","DateIcon","ICON_CLASS","Tag"],"mappings":";;;;;;;AAsBA,MAAMA,IAAoBC,EAAM;AAAA,EAC5B,CACI;AAAA,IACI,MAAAC;AAAA,IACA,MAAAC;AAAA,IACA,aAAAC;AAAA,IACA,SAAAC;AAAA,IACA,OAAAC;AAAA,IACA,KAAAC;AAAA,IACA,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,MAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,GAAGC;AAAA,EAAA,GAEPC,MAEA,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACI,GAAGF;AAAA,MACJ,KAAAC;AAAA,MACA,MAAK;AAAA,MACL,UAAAF;AAAA,MACA,gBAAcH,KAAS;AAAA,MACvB,aAAWD,KAAQ;AAAA,MACb,CAACQ,CAAqB,GAAG;AAAA,MAC/B,OAAOC,EAAiB;AAAA,QACpB,UAAAL;AAAA,QACA,OAAAH;AAAA,QACA,MAAAD;AAAA,QACA,MAAME,MAAS,YAAY,YAAY;AAAA,QACvC,cAAcA,MAAS;AAAA,MAAA,CAC1B;AAAA,MACD,WAAW,2JAA2JQ,EAAehB,CAAI,CAAC,IAAIiB,EAAajB,CAAI,CAAC,IAAIS,IAAYS,EAAmBlB,CAAI,IAAI,EAAE,IAAImB,CAAU;AAAA,MAE3Q,UAAA;AAAA,QAAA,gBAAAC,EAACC,GAAA,EAAS,MAAMrB,MAAS,UAAU,KAAK,IAAI,WAAW,YAAYsB,CAAU,GAAA,CAAI;AAAA,QACjF,gBAAAF;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,IAAIjB;AAAA,YACJ,WAAW,qCACPF,KAAQ,CAACS,IACH,uDACA,2DACV;AAAA,YAEC,UAAAT,KAAQC;AAAA,UAAA;AAAA,QAAA;AAAA,QAEZG,KACG,gBAAAe,EAAC,QAAA,EAAK,IAAIhB,GAAO,WAAW,iBAAiBM,IAAW,eAAe,EAAE,IACrE,UAAA,gBAAAU;AAAA,UAACG;AAAA,UAAA;AAAA,YACG,OAAOlB,EAAI;AAAA,YACX,MAAMA,EAAI,QAAQ;AAAA,YAClB,aAAY;AAAA,YACZ,UAAS;AAAA,YACT,eAAc;AAAA,UAAA;AAAA,QAAA,EAClB,CACJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIhB;AAEAP,EAAkB,cAAc;"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import v from "./DatePickerField.js";
|
|
3
|
+
import { toDate as c } from "./dateMath.js";
|
|
4
|
+
const b = (o, u) => {
|
|
5
|
+
if (!o || typeof o != "object")
|
|
6
|
+
return null;
|
|
7
|
+
const { start: l, end: a } = o, r = c(l, u), m = c(a, u);
|
|
8
|
+
return r && m ? { start: r, end: m } : null;
|
|
9
|
+
}, i = ({
|
|
10
|
+
value: o,
|
|
11
|
+
defaultValue: u = null,
|
|
12
|
+
onChange: l,
|
|
13
|
+
presets: a,
|
|
14
|
+
...r
|
|
15
|
+
}) => {
|
|
16
|
+
const m = r.timeZone ?? "local", d = (t) => b(t, m);
|
|
17
|
+
return /* @__PURE__ */ e(
|
|
18
|
+
v,
|
|
19
|
+
{
|
|
20
|
+
...r,
|
|
21
|
+
mode: "range",
|
|
22
|
+
value: o === void 0 ? void 0 : d(o),
|
|
23
|
+
defaultValue: d(u),
|
|
24
|
+
readFormValue: d,
|
|
25
|
+
toFormValue: ({ start: t, end: n }, f) => ({
|
|
26
|
+
start: t ? f(t) : null,
|
|
27
|
+
end: n ? f(n) : null
|
|
28
|
+
}),
|
|
29
|
+
onCommit: (t) => l == null ? void 0 : l(
|
|
30
|
+
t != null && t.start && t.end ? { start: t.start, end: t.end } : null
|
|
31
|
+
),
|
|
32
|
+
presets: a == null ? void 0 : a.map((t) => ({
|
|
33
|
+
label: t.label,
|
|
34
|
+
resolve: () => d(typeof t.value == "function" ? t.value() : t.value)
|
|
35
|
+
}))
|
|
36
|
+
}
|
|
37
|
+
);
|
|
38
|
+
};
|
|
39
|
+
export {
|
|
40
|
+
i as DateRangePicker,
|
|
41
|
+
i as default
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=DateRangePicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DateRangePicker.js","sources":["../../src/components/DateRangePicker.tsx"],"sourcesContent":["import type React from 'react';\nimport DatePickerField from './DatePickerField';\nimport type { Selection } from './DatePickerPanel';\nimport { type DatePickerTimeZone, toDate } from './dateMath';\nimport type {\n DatePickerBaseProps,\n DateRange,\n DateRangeInput,\n DateRangePreset,\n} from './datePickerTypes';\n\nexport interface DateRangePickerProps extends DatePickerBaseProps {\n /** Controlled value. `null` is a controlled empty field; leave it out to stay uncontrolled. */\n value?: DateRangeInput | null;\n defaultValue?: DateRangeInput | null;\n onChange?: (value: DateRange | null) => void;\n /** Applies at once and closes the picker, with no Apply step. */\n presets?: DateRangePreset[];\n}\n\nconst toSelection = (input: unknown, zone: DatePickerTimeZone): Selection | null => {\n if (!input || typeof input !== 'object') {\n return null;\n }\n const { start, end } = input as Partial<DateRangeInput>;\n const from = toDate(start, zone);\n const to = toDate(end, zone);\n return from && to ? { start: from, end: to } : null;\n};\n\nconst DateRangePicker: React.FC<DateRangePickerProps> = ({\n value,\n defaultValue = null,\n onChange,\n presets,\n ...rest\n}) => {\n const zone = rest.timeZone ?? 'local';\n const read = (input: unknown) => toSelection(input, zone);\n return (\n <DatePickerField\n {...rest}\n mode=\"range\"\n value={value === undefined ? undefined : read(value)}\n defaultValue={read(defaultValue)}\n readFormValue={read}\n toFormValue={({ start, end }, serialize) => ({\n start: start ? serialize(start) : null,\n end: end ? serialize(end) : null,\n })}\n onCommit={(selection) =>\n onChange?.(\n selection?.start && selection.end\n ? { start: selection.start, end: selection.end }\n : null,\n )\n }\n presets={presets?.map((preset) => ({\n label: preset.label,\n resolve: () =>\n read(typeof preset.value === 'function' ? preset.value() : preset.value),\n }))}\n />\n );\n};\n\nexport { DateRangePicker };\nexport default DateRangePicker;\n"],"names":["toSelection","input","zone","start","end","from","toDate","to","DateRangePicker","value","defaultValue","onChange","presets","rest","read","jsx","DatePickerField","serialize","selection","preset"],"mappings":";;;AAoBA,MAAMA,IAAc,CAACC,GAAgBC,MAA+C;AAChF,MAAI,CAACD,KAAS,OAAOA,KAAU;AAC3B,WAAO;AAEX,QAAM,EAAE,OAAAE,GAAO,KAAAC,EAAA,IAAQH,GACjBI,IAAOC,EAAOH,GAAOD,CAAI,GACzBK,IAAKD,EAAOF,GAAKF,CAAI;AAC3B,SAAOG,KAAQE,IAAK,EAAE,OAAOF,GAAM,KAAKE,MAAO;AACnD,GAEMC,IAAkD,CAAC;AAAA,EACrD,OAAAC;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA,GAAGC;AACP,MAAM;AACF,QAAMX,IAAOW,EAAK,YAAY,SACxBC,IAAO,CAACb,MAAmBD,EAAYC,GAAOC,CAAI;AACxD,SACI,gBAAAa;AAAA,IAACC;AAAA,IAAA;AAAA,MACI,GAAGH;AAAA,MACJ,MAAK;AAAA,MACL,OAAOJ,MAAU,SAAY,SAAYK,EAAKL,CAAK;AAAA,MACnD,cAAcK,EAAKJ,CAAY;AAAA,MAC/B,eAAeI;AAAA,MACf,aAAa,CAAC,EAAE,OAAAX,GAAO,KAAAC,EAAA,GAAOa,OAAe;AAAA,QACzC,OAAOd,IAAQc,EAAUd,CAAK,IAAI;AAAA,QAClC,KAAKC,IAAMa,EAAUb,CAAG,IAAI;AAAA,MAAA;AAAA,MAEhC,UAAU,CAACc,MACPP,KAAA,gBAAAA;AAAA,QACIO,KAAA,QAAAA,EAAW,SAASA,EAAU,MACxB,EAAE,OAAOA,EAAU,OAAO,KAAKA,EAAU,IAAA,IACzC;AAAA;AAAA,MAGd,SAASN,KAAA,gBAAAA,EAAS,IAAI,CAACO,OAAY;AAAA,QAC/B,OAAOA,EAAO;AAAA,QACd,SAAS,MACLL,EAAK,OAAOK,EAAO,SAAU,aAAaA,EAAO,UAAUA,EAAO,KAAK;AAAA,MAAA;AAAA,IAC7E;AAAA,EAAA;AAGd;"}
|