@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.
Files changed (42) hide show
  1. package/COMPONENTS.md +3 -0
  2. package/dist/assets/icons/caret_double_left.svg.js +6 -0
  3. package/dist/assets/icons/caret_double_left.svg.js.map +1 -0
  4. package/dist/assets/icons/caret_double_right.svg.js +6 -0
  5. package/dist/assets/icons/caret_double_right.svg.js.map +1 -0
  6. package/dist/components/Chat/ChatThread.js +1 -2
  7. package/dist/components/Chat/ChatThread.js.map +1 -1
  8. package/dist/components/CloseButton.js +76 -0
  9. package/dist/components/CloseButton.js.map +1 -0
  10. package/dist/components/CustomIcons/CaretDoubleLeftIcon.js +21 -0
  11. package/dist/components/CustomIcons/CaretDoubleLeftIcon.js.map +1 -0
  12. package/dist/components/CustomIcons/CaretDoubleRightIcon.js +21 -0
  13. package/dist/components/CustomIcons/CaretDoubleRightIcon.js.map +1 -0
  14. package/dist/components/CustomIcons/index.js +306 -300
  15. package/dist/components/CustomIcons/index.js.map +1 -1
  16. package/dist/components/DatePicker.js +36 -0
  17. package/dist/components/DatePicker.js.map +1 -0
  18. package/dist/components/DatePickerField.js +246 -0
  19. package/dist/components/DatePickerField.js.map +1 -0
  20. package/dist/components/DatePickerPanel.js +399 -0
  21. package/dist/components/DatePickerPanel.js.map +1 -0
  22. package/dist/components/DatePickerTrigger.js +68 -0
  23. package/dist/components/DatePickerTrigger.js.map +1 -0
  24. package/dist/components/DateRangePicker.js +43 -0
  25. package/dist/components/DateRangePicker.js.map +1 -0
  26. package/dist/components/SplitScreenLayout.js +21 -38
  27. package/dist/components/SplitScreenLayout.js.map +1 -1
  28. package/dist/components/dateMath.js +153 -0
  29. package/dist/components/dateMath.js.map +1 -0
  30. package/dist/components/datePickerStyles.js +46 -0
  31. package/dist/components/datePickerStyles.js.map +1 -0
  32. package/dist/components/focusRing.js +4 -3
  33. package/dist/components/focusRing.js.map +1 -1
  34. package/dist/components/useDatePickerDraft.js +126 -0
  35. package/dist/components/useDatePickerDraft.js.map +1 -0
  36. package/dist/index.d.ts +262 -101
  37. package/dist/index.js +433 -423
  38. package/dist/index.js.map +1 -1
  39. package/dist/tailwind.css.js +1 -1
  40. package/dist/theme.js +406 -359
  41. package/dist/theme.js.map +1 -1
  42. 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;"}