@stackone/malachite 2.68.0 → 2.68.1

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.
@@ -1,190 +1,205 @@
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";
1
+ import { jsxs as b, jsx as n, Fragment as H } from "react/jsx-runtime";
2
+ import { useId as J, useRef as M, useEffect as Q, useLayoutEffect as ee } from "react";
3
3
  import { Button as te } from "./Button.js";
4
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";
5
+ import ae from "./CustomIcons/CaretDoubleRightIcon.js";
6
+ import re from "./CustomIcons/CaretLeftIcon.js";
7
+ import le from "./CustomIcons/CaretRightIcon.js";
8
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";
9
+ import { monthLabel as oe, monthWeeks as ie, dayKeyOf as K, sameDay as x, dayKeyString as A, weekdayLabels as ce, spokenDay as de, partsOf as ue, formatTimeReadout as me, addMonths as fe, compareDays as _, daysInMonth as he, addMonthsToDay as U, addDays as D, startOfWeek as j } from "./dateMath.js";
10
+ import { DIVIDER_V as B, DIVIDER_H as P, LINK_BUTTON as pe, LINK_HOVER as be, PRESET_BUTTON as ye, PRESET_HOVER as Ne, NAV_BUTTON as I, HEADING_TEXT as S, RANGE_BAND as ge, RANGE_BAND_SPAN as xe, CELL_CLASS as G, dayToneClass as z } from "./datePickerStyles.js";
11
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) {
12
+ const ve = 40, we = 240, R = (e, a = 1) => Array.from({ length: Math.ceil(e / a) }, (t, r) => r * a), De = (e, a, t, r) => {
13
+ switch (e) {
14
14
  case "ArrowLeft":
15
- return $(t, -1);
15
+ return D(t, -1);
16
16
  case "ArrowRight":
17
- return $(t, 1);
17
+ return D(t, 1);
18
18
  case "ArrowUp":
19
- return $(t, -7);
19
+ return D(t, -7);
20
20
  case "ArrowDown":
21
- return $(t, 7);
21
+ return D(t, 7);
22
22
  case "Home":
23
- return j(t, s);
23
+ return j(t, r);
24
24
  case "End":
25
- return $(j(t, s), 6);
25
+ return D(j(t, r), 6);
26
26
  case "PageUp":
27
- return U(t, r ? -12 : -1);
27
+ return U(t, a ? -12 : -1);
28
28
  case "PageDown":
29
- return U(t, r ? 12 : 1);
29
+ return U(t, a ? 12 : 1);
30
30
  default:
31
31
  return null;
32
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);
33
+ }, $e = (e, a, t) => {
34
+ const r = he(e), h = Math.min(a, r);
35
+ for (let c = 0; c < r; c++)
36
+ for (const d of [h - c, h + c])
37
+ if (d >= 1 && d <= r && !t({ ...e, day: d }))
38
+ return { ...e, day: d };
39
+ return { ...e, day: h };
40
+ }, Ce = ({
41
+ view: e,
42
+ labelId: a,
43
+ onViewChange: t,
44
+ focusDay: r,
45
+ onFocusDayChange: h,
46
+ isDayDisabled: c,
47
+ isMonthReachable: d
48
+ }) => {
49
+ const f = (i) => {
50
+ const o = fe(e, i);
51
+ return { target: o, disabled: !d(o) };
52
+ }, y = f(-1), p = f(-12), N = f(1), l = f(12), u = ({ target: i, disabled: o }) => {
53
+ o || (t(i), h($e(i, r.day, c)));
39
54
  };
40
55
  return /* @__PURE__ */ b("div", { className: "flex items-center justify-between p-2", children: [
41
56
  /* @__PURE__ */ b("div", { className: "flex items-center gap-0.5", children: [
42
- /* @__PURE__ */ e(
57
+ /* @__PURE__ */ n(
43
58
  "button",
44
59
  {
45
60
  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 })
61
+ "aria-label": "Previous year",
62
+ className: `${I} ${v}`,
63
+ "aria-disabled": p.disabled || void 0,
64
+ onClick: () => u(p),
65
+ children: /* @__PURE__ */ n(ne, { size: 14 })
51
66
  }
52
67
  ),
53
- /* @__PURE__ */ e(
68
+ /* @__PURE__ */ n(
54
69
  "button",
55
70
  {
56
71
  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 })
72
+ "aria-label": "Previous month",
73
+ className: `${I} ${v}`,
74
+ "aria-disabled": y.disabled || void 0,
75
+ onClick: () => u(y),
76
+ children: /* @__PURE__ */ n(re, { size: 14 })
62
77
  }
63
78
  )
64
79
  ] }),
65
- /* @__PURE__ */ e("span", { id: r, "aria-live": "polite", className: M, children: oe(n) }),
80
+ /* @__PURE__ */ n("span", { id: a, "aria-live": "polite", className: S, children: oe(e) }),
66
81
  /* @__PURE__ */ b("div", { className: "flex items-center gap-0.5", children: [
67
- /* @__PURE__ */ e(
82
+ /* @__PURE__ */ n(
68
83
  "button",
69
84
  {
70
85
  type: "button",
71
86
  "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 })
87
+ className: `${I} ${v}`,
88
+ "aria-disabled": N.disabled || void 0,
89
+ onClick: () => u(N),
90
+ children: /* @__PURE__ */ n(le, { size: 14 })
76
91
  }
77
92
  ),
78
- /* @__PURE__ */ e(
93
+ /* @__PURE__ */ n(
79
94
  "button",
80
95
  {
81
96
  type: "button",
82
97
  "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 })
98
+ className: `${I} ${v}`,
99
+ "aria-disabled": l.disabled || void 0,
100
+ onClick: () => u(l),
101
+ children: /* @__PURE__ */ n(ae, { size: 14 })
87
102
  }
88
103
  )
89
104
  ] })
90
105
  ] });
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,
106
+ }, Ie = (e, a, t) => !a || !t || _(a, t) === 0 ? null : x(e, a) ? "start" : x(e, t) ? "end" : _(e, a) > 0 && _(e, t) < 0 ? "middle" : null, ke = ({
107
+ mode: e,
108
+ zone: a,
94
109
  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,
110
+ view: r,
111
+ onViewChange: h,
112
+ focusDay: c,
113
+ onFocusDayChange: d,
114
+ draft: f,
115
+ today: y,
116
+ isDayDisabled: p,
117
+ isMonthReachable: N,
103
118
  onPickDay: l,
104
- initialFocusRef: f,
119
+ initialFocusRef: u,
105
120
  labelId: i
106
121
  }) => {
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 };
122
+ const o = M(null), g = M(!1), L = ie(r, t), k = f.start ? K(f.start, a) : null, T = e === "range" && f.end ? K(f.end, a) : null, $ = L.some((m) => m.some((s) => x(s, c))) ? c : { ...r, day: 1 };
108
123
  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);
124
+ var m, s;
125
+ g.current && (g.current = !1, (s = (m = o.current) == null ? void 0 : m.querySelector(`[data-day="${A(c)}"]`)) == null || s.focus({ preventScroll: !0 }));
126
+ }, [c]);
127
+ const F = (m) => {
128
+ if (m.key === "Enter" || m.key === " ") {
129
+ m.preventDefault(), p($) || l($);
115
130
  return;
116
131
  }
117
- const a = we(c.key, c.shiftKey, I, t);
118
- if (!a)
132
+ const s = De(m.key, m.shiftKey, $, t);
133
+ if (!s)
119
134
  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);
135
+ m.preventDefault();
136
+ const w = s.month !== r.month || s.year !== r.year;
137
+ w && !N(s) || (w && h({ year: s.year, month: s.month }), g.current = !0, d(s));
138
+ }, W = ce(t);
124
139
  return /* @__PURE__ */ b(
125
140
  "div",
126
141
  {
127
142
  ref: o,
128
143
  role: "grid",
129
144
  "aria-labelledby": i,
130
- "aria-multiselectable": n === "range" || void 0,
145
+ "aria-multiselectable": e === "range" || void 0,
131
146
  className: "flex w-[276px] flex-col",
132
- onKeyDown: W,
147
+ onKeyDown: F,
133
148
  children: [
134
- /* @__PURE__ */ e("div", { role: "row", className: "grid grid-cols-7 px-[14px] py-2", children: X.map((c) => /* @__PURE__ */ e(
149
+ /* @__PURE__ */ n("div", { role: "row", className: "grid grid-cols-7 px-[14px] py-2", children: W.map((m) => /* @__PURE__ */ n(
135
150
  "span",
136
151
  {
137
152
  role: "columnheader",
138
- "aria-label": c.long,
139
- className: `flex h-6 items-center justify-center ${M}`,
140
- children: c.short
153
+ "aria-label": m.long,
154
+ className: `flex h-6 items-center justify-center ${S}`,
155
+ children: m.short
141
156
  },
142
- c.short
157
+ m.short
143
158
  )) }),
144
- L.map((c) => /* @__PURE__ */ e(
159
+ L.map((m) => /* @__PURE__ */ n(
145
160
  "div",
146
161
  {
147
162
  role: "row",
148
163
  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);
164
+ children: m.map((s) => {
165
+ const w = A(s), C = p(s), E = e === "range" ? Ie(s, k, T) : null, X = x(s, k) || x(s, T) || E === "middle", q = x(s, k) || x(s, T), O = x(s, y), Y = s.month !== r.month, V = x(s, $);
151
166
  return /* @__PURE__ */ b(
152
167
  "div",
153
168
  {
154
169
  role: "presentation",
155
170
  className: "relative flex h-6 items-center justify-center",
156
171
  children: [
157
- A && /* @__PURE__ */ e(
172
+ E && /* @__PURE__ */ n(
158
173
  "span",
159
174
  {
160
175
  "aria-hidden": "true",
161
- className: `${ge} ${xe[A]}`
176
+ className: `${ge} ${xe[E]}`
162
177
  }
163
178
  ),
164
- /* @__PURE__ */ e(
179
+ /* @__PURE__ */ n(
165
180
  "button",
166
181
  {
167
182
  ref: V ? (Z) => {
168
- f.current = Z;
183
+ u.current = Z;
169
184
  } : void 0,
170
185
  type: "button",
171
186
  role: "gridcell",
172
- "aria-selected": q,
187
+ "aria-selected": X,
173
188
  "data-day": w,
174
189
  tabIndex: V ? 0 : -1,
175
- "aria-label": de(a),
190
+ "aria-label": de(s),
176
191
  "aria-current": O ? "date" : void 0,
177
- "aria-disabled": k || void 0,
178
- className: `${G(k)} ${z({
179
- selected: F,
192
+ "aria-disabled": C || void 0,
193
+ className: `${G(C)} ${z({
194
+ selected: q,
180
195
  today: O,
181
196
  outside: Y,
182
- disabled: k
197
+ disabled: C
183
198
  })}`,
184
199
  onClick: () => {
185
- u(a), k || l(a);
200
+ d(s), C || l(s);
186
201
  },
187
- children: a.day
202
+ children: s.day
188
203
  }
189
204
  )
190
205
  ]
@@ -193,34 +208,34 @@ const ye = 40, ve = 240, R = (n, r = 1) => Array.from({ length: Math.ceil(n / r)
193
208
  );
194
209
  })
195
210
  },
196
- _(c[0])
211
+ A(m[0])
197
212
  ))
198
213
  ]
199
214
  }
200
215
  );
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;
216
+ }, Te = ({ label: e, values: a, selected: t, isDisabled: r, onPick: h }) => {
217
+ const c = M(null), d = t === null ? -1 : a.filter((l) => l <= t).length - 1;
203
218
  ee(() => {
204
- d.current && u >= 0 && (d.current.scrollTop = u * ye);
205
- }, [u]);
206
- const h = Math.max(
219
+ c.current && d >= 0 && (c.current.scrollTop = d * ve);
220
+ }, [d]);
221
+ const f = Math.max(
207
222
  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 })));
223
+ a.findIndex((l) => !r(l))
224
+ ), y = (l) => l === (d >= 0 ? d : f) ? 0 : -1, p = (l, u) => {
225
+ var o, g;
226
+ const i = a[l];
227
+ i === void 0 || r(i) || (h(i), u && ((g = (o = c.current) == null ? void 0 : o.querySelector(`[data-value="${i}"]`)) == null || g.focus({ preventScroll: !0 })));
213
228
  };
214
- return /* @__PURE__ */ e(
229
+ return /* @__PURE__ */ n(
215
230
  "div",
216
231
  {
217
- ref: d,
232
+ ref: c,
218
233
  role: "listbox",
219
- "aria-label": n,
234
+ "aria-label": e,
220
235
  className: "flex flex-col items-center overflow-y-auto overscroll-contain [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
221
- style: { height: ve },
236
+ style: { height: we },
222
237
  onKeyDown: (l) => {
223
- const f = u >= 0 ? u : -1, i = {
238
+ const u = d >= 0 ? d : -1, i = {
224
239
  ArrowDown: 1,
225
240
  ArrowUp: -1,
226
241
  PageDown: 5,
@@ -228,20 +243,20 @@ const ye = 40, ve = 240, R = (n, r = 1) => Array.from({ length: Math.ceil(n / r)
228
243
  };
229
244
  let o = null;
230
245
  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;
246
+ o = u < 0 ? f : u + i[l.key];
247
+ const g = Math.sign(i[l.key]);
248
+ for (; o >= 0 && o < a.length && r(a[o]); )
249
+ o += g;
235
250
  } else if (l.key === "Home")
236
- o = r.findIndex((x) => !s(x));
251
+ o = a.findIndex((g) => !r(g));
237
252
  else if (l.key === "End")
238
- for (o = r.length - 1; o >= 0 && s(r[o]); )
253
+ for (o = a.length - 1; o >= 0 && r(a[o]); )
239
254
  o -= 1;
240
- o !== null && (l.preventDefault(), m(o, !0));
255
+ o !== null && (l.preventDefault(), p(o, !0));
241
256
  },
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(
257
+ children: a.map((l, u) => {
258
+ const i = r(l), o = l === t;
259
+ return /* @__PURE__ */ n("div", { className: "flex shrink-0 items-center py-2", children: /* @__PURE__ */ n(
245
260
  "button",
246
261
  {
247
262
  type: "button",
@@ -249,142 +264,145 @@ const ye = 40, ve = 240, R = (n, r = 1) => Array.from({ length: Math.ceil(n / r)
249
264
  "data-value": l,
250
265
  "aria-selected": o,
251
266
  "aria-disabled": i || void 0,
252
- tabIndex: N(f),
267
+ tabIndex: y(u),
253
268
  className: `${G(i)} ${z({
254
269
  selected: o,
255
270
  today: !1,
256
271
  outside: !1,
257
272
  disabled: i
258
273
  })}`,
259
- onClick: () => m(f, !1),
274
+ onClick: () => p(u, !1),
260
275
  children: String(l).padStart(2, "0")
261
276
  }
262
277
  ) }, l);
263
278
  })
264
279
  }
265
280
  );
266
- }, Te = ({
267
- mode: n,
268
- zone: r,
281
+ }, Ee = ({
282
+ mode: e,
283
+ zone: a,
269
284
  precision: t,
270
- minuteStep: s,
271
- draft: p,
272
- active: d,
273
- onActiveChange: u,
274
- isTimeDisabled: h,
275
- onPickTime: N
285
+ minuteStep: r,
286
+ draft: h,
287
+ active: c,
288
+ onActiveChange: d,
289
+ isTimeDisabled: f,
290
+ onPickTime: y
276
291
  }) => {
277
- const m = n === "range" ? p[d] : p.start, g = m ? ue(m, r) : null, l = [
292
+ const p = e === "range" ? h[c] : h.start, N = p ? ue(p, a) : null, l = [
278
293
  { unit: "hours", label: "Hours", values: R(24) },
279
- { unit: "minutes", label: "Minutes", values: R(60, s) },
294
+ { unit: "minutes", label: "Minutes", values: R(60, r) },
280
295
  ...t === "second" ? [{ unit: "seconds", label: "Seconds", values: R(60) }] : []
281
296
  ];
282
297
  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(
298
+ /* @__PURE__ */ n("div", { className: "flex min-h-8 items-center justify-center p-2", children: e === "range" ? /* @__PURE__ */ n(
284
299
  se,
285
300
  {
286
301
  size: "small",
287
302
  "aria-label": "Time for",
288
- value: d,
289
- onChange: u,
303
+ value: c,
304
+ onChange: d,
290
305
  options: [
291
306
  { value: "start", label: "Start" },
292
307
  { value: "end", label: "End" }
293
308
  ]
294
309
  }
295
- ) : /* @__PURE__ */ e("span", { className: `${M} whitespace-nowrap`, children: me(m, r, t) }) }),
296
- /* @__PURE__ */ e("div", { className: S }),
297
- /* @__PURE__ */ e(
310
+ ) : /* @__PURE__ */ n("span", { className: `${S} whitespace-nowrap`, children: me(p, a, t) }) }),
311
+ /* @__PURE__ */ n("div", { className: P }),
312
+ /* @__PURE__ */ n(
298
313
  "div",
299
314
  {
300
315
  className: "grid px-[14px]",
301
316
  style: { gridTemplateColumns: `repeat(${l.length}, 35.67px)` },
302
- children: l.map((f) => /* @__PURE__ */ e(
303
- Ce,
317
+ children: l.map((u) => /* @__PURE__ */ n(
318
+ Te,
304
319
  {
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)
320
+ label: u.label,
321
+ values: u.values,
322
+ selected: N ? N[u.unit] : null,
323
+ isDisabled: (i) => f(u.unit, i),
324
+ onPick: (i) => y(u.unit, i)
310
325
  },
311
- f.unit
326
+ u.unit
312
327
  ))
313
328
  }
314
329
  )
315
330
  ] });
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(
331
+ }, Ae = ({
332
+ presets: e,
333
+ onPreset: a
334
+ }) => /* @__PURE__ */ n("div", { className: "flex w-36 flex-col gap-0.5 p-1", role: "group", "aria-label": "Presets", children: e.map((t, r) => /* @__PURE__ */ n(
320
335
  "button",
321
336
  {
322
337
  type: "button",
323
- className: `${be} ${Ne} ${v}`,
324
- onClick: () => r(s),
338
+ className: `${ye} ${Ne} ${v}`,
339
+ onClick: () => a(r),
325
340
  children: t
326
341
  },
327
342
  t
328
- )) }), Ue = (n) => {
329
- const r = `${J().replace(/[^a-zA-Z0-9_-]/g, "")}-month`, {
343
+ )) }), Be = (e) => {
344
+ const a = `${J().replace(/[^a-zA-Z0-9_-]/g, "")}-month`, {
330
345
  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;
346
+ onPreset: r,
347
+ precision: h,
348
+ todayLabel: c,
349
+ todayDisabled: d,
350
+ onToday: f,
351
+ showApply: y,
352
+ applyDisabled: p,
353
+ onApply: N
354
+ } = e;
340
355
  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" : "" }),
356
+ e.mode === "range" && /* @__PURE__ */ n("span", { className: "sr-only", "aria-live": "polite", children: e.active === "end" && e.draft.start && !e.draft.end ? "Choose the end date" : "" }),
342
357
  /* @__PURE__ */ b("div", { className: "flex", children: [
343
358
  t && t.length > 0 && /* @__PURE__ */ b(H, { children: [
344
- /* @__PURE__ */ e(Ee, { presets: t, onPreset: s }),
345
- /* @__PURE__ */ e("div", { className: `${B} mx-1` })
359
+ /* @__PURE__ */ n(Ae, { presets: t, onPreset: r }),
360
+ /* @__PURE__ */ n("div", { className: `${B} mx-1` })
346
361
  ] }),
347
362
  /* @__PURE__ */ b("div", { className: "flex flex-col gap-1", children: [
348
- /* @__PURE__ */ e(
349
- $e,
363
+ /* @__PURE__ */ n(
364
+ Ce,
350
365
  {
351
- view: n.view,
352
- labelId: r,
353
- onViewChange: n.onViewChange,
354
- isMonthReachable: n.isMonthReachable
366
+ view: e.view,
367
+ labelId: a,
368
+ onViewChange: e.onViewChange,
369
+ focusDay: e.focusDay,
370
+ onFocusDayChange: e.onFocusDayChange,
371
+ isDayDisabled: e.isDayDisabled,
372
+ isMonthReachable: e.isMonthReachable
355
373
  }
356
374
  ),
357
- /* @__PURE__ */ e("div", { className: S }),
358
- /* @__PURE__ */ e(ke, { ...n, labelId: r })
375
+ /* @__PURE__ */ n("div", { className: P }),
376
+ /* @__PURE__ */ n(ke, { ...e, labelId: a })
359
377
  ] }),
360
- p !== "day" && /* @__PURE__ */ b(H, { children: [
361
- /* @__PURE__ */ e("div", { className: B }),
362
- /* @__PURE__ */ e(Te, { ...n })
378
+ h !== "day" && /* @__PURE__ */ b(H, { children: [
379
+ /* @__PURE__ */ n("div", { className: B }),
380
+ /* @__PURE__ */ n(Ee, { ...e })
363
381
  ] })
364
382
  ] }),
365
- /* @__PURE__ */ e("div", { className: S }),
383
+ /* @__PURE__ */ n("div", { className: P }),
366
384
  /* @__PURE__ */ b(
367
385
  "div",
368
386
  {
369
- className: `flex items-center p-2 ${N ? "justify-between" : "justify-center"}`,
387
+ className: `flex items-center p-2 ${y ? "justify-between" : "justify-center"}`,
370
388
  children: [
371
- /* @__PURE__ */ e(
389
+ /* @__PURE__ */ n(
372
390
  "button",
373
391
  {
374
392
  type: "button",
375
- className: `${he} ${pe} ${v}`,
376
- disabled: u,
377
- onClick: h,
378
- children: d
393
+ className: `${pe} ${be} ${v}`,
394
+ disabled: d,
395
+ onClick: f,
396
+ children: c
379
397
  }
380
398
  ),
381
- N && /* @__PURE__ */ e(
399
+ y && /* @__PURE__ */ n(
382
400
  te,
383
401
  {
384
402
  size: "small",
385
403
  variant: "filled",
386
- disabled: m,
387
- onClick: g,
404
+ disabled: p,
405
+ onClick: N,
388
406
  children: "Apply"
389
407
  }
390
408
  )
@@ -394,6 +412,6 @@ const ye = 40, ve = 240, R = (n, r = 1) => Array.from({ length: Math.ceil(n / r)
394
412
  ] });
395
413
  };
396
414
  export {
397
- Ue as default
415
+ Be as default
398
416
  };
399
417
  //# sourceMappingURL=DatePickerPanel.js.map
@@ -1 +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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"}
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 daysInMonth,\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 carriedDay = (\n target: MonthKey,\n dayOfMonth: number,\n isDayDisabled: (day: DayKey) => boolean,\n): DayKey => {\n const last = daysInMonth(target);\n const wanted = Math.min(dayOfMonth, last);\n for (let offset = 0; offset < last; offset++) {\n for (const day of [wanted - offset, wanted + offset]) {\n if (day >= 1 && day <= last && !isDayDisabled({ ...target, day })) {\n return { ...target, day };\n }\n }\n }\n return { ...target, day: wanted };\n};\n\nconst MonthHeader: React.FC<{\n view: MonthKey;\n labelId: string;\n onViewChange: (view: MonthKey) => void;\n focusDay: DayKey;\n onFocusDayChange: (day: DayKey) => void;\n isDayDisabled: (day: DayKey) => boolean;\n isMonthReachable: (month: MonthKey) => boolean;\n}> = ({\n view,\n labelId,\n onViewChange,\n focusDay,\n onFocusDayChange,\n isDayDisabled,\n isMonthReachable,\n}) => {\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 onFocusDayChange(carriedDay(target, focusDay.day, isDayDisabled));\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 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 <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 </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 focusDay={props.focusDay}\n onFocusDayChange={props.onFocusDayChange}\n isDayDisabled={props.isDayDisabled}\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","carriedDay","target","dayOfMonth","isDayDisabled","last","daysInMonth","wanted","offset","MonthHeader","view","labelId","onViewChange","focusDay","onFocusDayChange","isMonthReachable","amount","addMonths","prevMonth","prevYear","nextMonth","nextYear","go","disabled","jsxs","jsx","NAV_BUTTON","FOCUS_RING","CaretDoubleLeftIcon","CaretLeftIcon","HEADING_TEXT","monthLabel","CaretRightIcon","CaretDoubleRightIcon","bandSpan","start","end","compareDays","sameDay","DayGrid","mode","zone","draft","today","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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"}
@@ -1,4 +1,4 @@
1
- const M = [
1
+ const N = [
2
2
  "Jan",
3
3
  "Feb",
4
4
  "Mar",
@@ -11,7 +11,7 @@ const M = [
11
11
  "Oct",
12
12
  "Nov",
13
13
  "Dec"
14
- ], F = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], E = [
14
+ ], F = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], C = [
15
15
  "Sunday",
16
16
  "Monday",
17
17
  "Tuesday",
@@ -19,7 +19,7 @@ const M = [
19
19
  "Thursday",
20
20
  "Friday",
21
21
  "Saturday"
22
- ], g = (t, e) => e === "utc" ? {
22
+ ], i = (t, e) => e === "utc" ? {
23
23
  year: t.getUTCFullYear(),
24
24
  month: t.getUTCMonth(),
25
25
  day: t.getUTCDate(),
@@ -34,37 +34,37 @@ const M = [
34
34
  minutes: t.getMinutes(),
35
35
  seconds: t.getSeconds()
36
36
  };
37
- const a = ({ year: t, month: e, day: n, hours: s = 0, minutes: o = 0, seconds: m = 0 }, c, r = 0) => {
37
+ const a = ({ year: t, month: e, day: n, hours: s = 0, minutes: o = 0, seconds: r = 0 }, c, g = 0) => {
38
38
  const u = t >= 0 && t < 100 ? 400 : 0;
39
39
  if (c === "utc") {
40
- const y = new Date(
41
- Date.UTC(t + u, e, n, s, o, m, r)
40
+ const d = new Date(
41
+ Date.UTC(t + u, e, n, s, o, r, g)
42
42
  );
43
- return u && y.setUTCFullYear(y.getUTCFullYear() - u), y;
43
+ return u && d.setUTCFullYear(d.getUTCFullYear() - u), d;
44
44
  }
45
- const d = new Date(t + u, e, n, s, o, m, r);
46
- return u && d.setFullYear(d.getFullYear() - u), d;
45
+ const m = new Date(t + u, e, n, s, o, r, g);
46
+ return u && m.setFullYear(m.getFullYear() - u), m;
47
47
  }, h = (t, e) => {
48
- const { year: n, month: s, day: o } = g(t, e);
48
+ const { year: n, month: s, day: o } = i(t, e);
49
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) => {
50
+ }, E = (t, e) => t.year - e.year || t.month - e.month || t.day - e.day, Y = (t, e) => !!t && !!e && E(t, e) === 0, I = ({ year: t, month: e, day: n }) => `${t}-${String(e + 1).padStart(2, "0")}-${String(n).padStart(2, "0")}`, b = ({ year: t, month: e, day: n }, s) => a({ year: t, month: e, day: n }, s), k = ({ year: t, month: e, day: n }, s) => a({ year: t, month: e, day: n, hours: 23, minutes: 59, seconds: 59 }, s, 999), f = (t, e) => h(a({ year: t.year, month: t.month, day: t.day + e }, "utc"), "utc"), _ = ({ year: t, month: e }) => h(a({ year: t, month: e + 1, day: 0 }, "utc"), "utc").day, p = ({ year: t, month: e }, n) => {
51
51
  const s = t * 12 + e + n;
52
52
  return { year: Math.floor(s / 12), month: (s % 12 + 12) % 12 };
53
53
  }, W = (t, e) => {
54
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] };
55
+ return { ...n, day: Math.min(t.day, _(n)) };
56
+ }, M = (t) => a(t, "utc").getUTCDay(), l = { sunday: 0, monday: 1 }, R = (t) => Array.from({ length: 7 }, (e, n) => {
57
+ const s = (n + l[t]) % 7;
58
+ return { short: F[s], long: C[s] };
59
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)}`;
60
+ const n = { ...t, day: 1 }, s = (M(n) - l[e] + 7) % 7, o = f(n, -s), r = [];
61
+ for (let c = 0; c < 42; c++)
62
+ c % 7 === 0 && r.push([]), r[r.length - 1].push(f(o, c));
63
+ return r;
64
+ }, L = (t, e) => f(t, -((M(t) - l[e] + 7) % 7)), J = ({ year: t, month: e }) => `${N[e]} ${t}`, T = (t) => String(t).padStart(2, "0"), w = (t, e) => e === "second" ? `${T(t.hours)}:${T(t.minutes)}:${T(t.seconds)}` : `${T(t.hours)}:${T(t.minutes)}`, U = (t) => t === "utc" ? " UTC" : "", Z = (t, e, n) => {
65
+ const s = i(t, e), o = `${N[s.month]} ${s.day} ${s.year}`;
66
+ return n === "day" ? o : `${o}, ${w(s, n)}${U(e)}`;
67
+ }, x = (t, e, n) => `${t ? w(i(t, e), n) : n === "second" ? "--:--:--" : "--:--"}${U(e)}`;
68
68
  let $;
69
69
  const B = (t) => ($ ?? ($ = new Intl.DateTimeFormat("en-US", {
70
70
  weekday: "long",
@@ -77,18 +77,18 @@ const B = (t) => ($ ?? ($ = new Intl.DateTimeFormat("en-US", {
77
77
  return null;
78
78
  const n = typeof t == "string" ? H.exec(t) : null;
79
79
  if (n) {
80
- const [, o, m, c, r = "0", u = "0", d = "0", y = ""] = n, T = {
80
+ const [, o, r, c, g = "0", u = "0", m = "0", d = ""] = n, y = {
81
81
  year: Number(o),
82
- month: Number(m) - 1,
82
+ month: Number(r) - 1,
83
83
  day: Number(c),
84
- hours: Number(r),
84
+ hours: Number(g),
85
85
  minutes: Number(u),
86
- seconds: Number(d)
86
+ seconds: Number(m)
87
87
  };
88
- if (T.hours > 23 || T.minutes > 59 || T.seconds > 59)
88
+ if (y.hours > 23 || y.minutes > 59 || y.seconds > 59)
89
89
  return null;
90
- const S = a(T, e, Number(y.padEnd(3, "0")));
91
- return b(h(S, e), T) ? S : null;
90
+ const S = a(y, e, Number(d.padEnd(3, "0")));
91
+ return Y(h(S, e), y) ? S : null;
92
92
  }
93
93
  const s = t instanceof Date ? t : new Date(t);
94
94
  return A(s) ? s : null;
@@ -105,32 +105,32 @@ const B = (t) => ($ ?? ($ = new Intl.DateTimeFormat("en-US", {
105
105
  ), D = {
106
106
  minute: 6e4,
107
107
  second: 1e3
108
- }, C = (t, e, n) => {
108
+ }, O = (t, e, n) => {
109
109
  if (n === "day")
110
- return k(g(t, e), e);
110
+ return b(i(t, e), e);
111
111
  if (e === "local" && !Number.isInteger(t.getTimezoneOffset())) {
112
- const o = g(t, e);
112
+ const o = i(t, e);
113
113
  return a({ ...o, seconds: n === "second" ? o.seconds : 0 }, e);
114
114
  }
115
115
  const s = D[n];
116
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) => {
117
+ }, j = (t, e, n) => n === "day" ? k(h(t, e), e) : new Date(O(t, e, n).getTime() + D[n] - 1), q = (t, e, n) => {
118
118
  if (n === "day")
119
119
  return t;
120
- const s = C(t, e, n);
120
+ const s = O(t, e, n);
121
121
  return s.getTime() < t.getTime() ? new Date(s.getTime() + D[n]) : s;
122
122
  };
123
123
  export {
124
- l as addDays,
124
+ f as addDays,
125
125
  p as addMonths,
126
126
  W as addMonthsToDay,
127
127
  q as ceilTo,
128
128
  G as clampDate,
129
- Y as compareDays,
129
+ E as compareDays,
130
130
  h as dayKeyOf,
131
131
  I as dayKeyString,
132
- N as daysInMonth,
133
- _ as endOfDay,
132
+ _ as daysInMonth,
133
+ k as endOfDay,
134
134
  j as endOfUnit,
135
135
  Z as formatDate,
136
136
  w as formatTime,
@@ -139,15 +139,15 @@ export {
139
139
  J as monthLabel,
140
140
  K as monthWeeks,
141
141
  P as overlapsBounds,
142
- g as partsOf,
143
- b as sameDay,
142
+ i as partsOf,
143
+ Y as sameDay,
144
144
  B as spokenDay,
145
- k as startOfDay,
145
+ b as startOfDay,
146
146
  L as startOfWeek,
147
147
  V as toDate,
148
- C as truncateTo,
148
+ O as truncateTo,
149
149
  R as weekdayLabels,
150
- U as weekdayOf,
150
+ M as weekdayOf,
151
151
  X as withTime
152
152
  };
153
153
  //# sourceMappingURL=dateMath.js.map
@@ -1 +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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"}
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 start = addDays(first, -lead);\n const weeks: DayKey[][] = [];\n for (let index = 0; index < 42; 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","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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stackone/malachite",
3
- "version": "2.68.0",
3
+ "version": "2.68.1",
4
4
  "description": "StackOne's themeable React component library — Shadow DOM isolated, scoped Tailwind, theme-token driven.",
5
5
  "license": "MIT",
6
6
  "author": "StackOne",