@rpcbase/ui 0.264.0 → 0.265.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.
@@ -2,6 +2,7 @@ import * as React from "react";
2
2
  export type HourPickerOption = {
3
3
  value: string;
4
4
  label: string;
5
+ selectedLabel?: React.ReactNode;
5
6
  disabled?: boolean;
6
7
  description?: React.ReactNode;
7
8
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/HourPickerField/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAiB9B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC9B,CAAA;AA2QD,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IACxC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IAC9C,OAAO,EAAE,gBAAgB,EAAE,CAAA;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACtC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,wBAAgB,eAAe,CAAC,EAC9B,EAAE,EACF,KAAK,EACL,QAAQ,EACR,aAAa,EACb,OAAO,EACP,WAA2B,EAC3B,SAAS,EACT,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,IAAI,EAAE,QAAQ,EACd,YAAY,EACZ,aAAa,EACb,aAAa,EACb,UAAU,GACX,EAAE,oBAAoB,2CAwgBtB;yBAxhBe,eAAe;;;AA4hB/B,MAAM,MAAM,oBAAoB,GAAG,oBAAoB,CAAA;AA6SvD,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CAQ1D;yBARe,eAAe"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/HourPickerField/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAiB9B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC9B,CAAA;AA2QD,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IACxC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IAC9C,OAAO,EAAE,gBAAgB,EAAE,CAAA;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACtC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,wBAAgB,eAAe,CAAC,EAC9B,EAAE,EACF,KAAK,EACL,QAAQ,EACR,aAAa,EACb,OAAO,EACP,WAA2B,EAC3B,SAAS,EACT,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,IAAI,EAAE,QAAQ,EACd,YAAY,EACZ,aAAa,EACb,aAAa,EACb,UAAU,GACX,EAAE,oBAAoB,2CA2gBtB;yBA3hBe,eAAe;;;AA+hB/B,MAAM,MAAM,oBAAoB,GAAG,oBAAoB,CAAA;AA8SvD,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CAQ1D;yBARe,eAAe"}
package/dist/index302.js CHANGED
@@ -140,47 +140,47 @@ function b({ direction: e, viewportRef: n, speed: i = 400, className: s }) {
140
140
  function x({ id: e, value: n, onChange: a, onValueUpdate: o, options: d, placeholder: f = "Select time", className: p, inputClassName: m, disabled: h, readOnly: g, open: _, onOpenChange: v, triggerTestId: ee, contentTestId: te, isHydrated: x }) {
141
141
  let S = r.useId(), C = e ?? `hours-picker-${S}`, T = r.useRef(null), E = r.useRef(null), D = r.useCallback((e) => {
142
142
  E.current = e;
143
- }, []), O = r.useRef(null), k = r.useRef(!1), [A, j] = r.useState(null), M = r.useRef(null), N = r.useRef(null), P = r.useRef(null), [F, ne] = r.useState(() => ({
143
+ }, []), O = r.useRef(null), k = r.useRef(!1), [A, j] = r.useState(null), M = r.useRef(null), N = r.useRef(null), P = r.useRef(null), [F, I] = r.useState(() => ({
144
144
  left: 0,
145
145
  top: 0,
146
146
  width: 0
147
- })), [I, re] = r.useState(!1), L = _ ?? I, R = v ?? re, z = r.useRef(!1);
148
- z.current = L, r.useEffect(() => {
149
- if (!L || h || g) return;
147
+ })), [L, R] = r.useState(!1), z = _ ?? L, B = v ?? R, V = r.useRef(!1);
148
+ V.current = z, r.useEffect(() => {
149
+ if (!z || h || g) return;
150
150
  let e = T.current;
151
151
  e instanceof HTMLInputElement && (typeof document < "u" && document.activeElement === e || e.focus({ preventScroll: !0 }));
152
152
  }, [
153
153
  h,
154
- L,
154
+ z,
155
155
  g
156
156
  ]);
157
- let B = r.useCallback((e) => {
157
+ let H = r.useCallback((e) => {
158
158
  O.current = e, j(e);
159
- }, []), ie = r.useCallback(() => {
159
+ }, []), U = r.useCallback(() => {
160
160
  k.current = !0;
161
161
  }, []);
162
162
  r.useEffect(() => {
163
- if (!L) return;
163
+ if (!z) return;
164
164
  let e = d.find((e) => e.value === n);
165
165
  if (e && y(e)) {
166
- B(e.value);
166
+ H(e.value);
167
167
  return;
168
168
  }
169
169
  let t = d.find((e) => y(e));
170
- B(t?.value ?? null);
170
+ H(t?.value ?? null);
171
171
  }, [
172
- L,
172
+ z,
173
173
  d,
174
- B,
174
+ H,
175
175
  n
176
176
  ]);
177
- let ae = r.useCallback((e) => {
177
+ let ne = r.useCallback((e) => {
178
178
  if (e === null) {
179
179
  o && o(null);
180
180
  return;
181
181
  }
182
182
  y(d.find((t) => t.value === e)) && o && o(e);
183
- }, [o, d]), V = r.useCallback((e) => {
183
+ }, [o, d]), W = r.useCallback((e) => {
184
184
  if (e === null) {
185
185
  o && o(null), a(null);
186
186
  return;
@@ -192,24 +192,24 @@ function x({ id: e, value: n, onChange: a, onValueUpdate: o, options: d, placeho
192
192
  d
193
193
  ]);
194
194
  r.useEffect(() => {
195
- if (!L) return;
195
+ if (!z) return;
196
196
  let e = M.current?.ownerDocument ?? document, t = e.defaultView ?? window, n = (e) => {
197
197
  let t = e.target;
198
198
  if (!(t instanceof Node)) return;
199
199
  let n = M.current;
200
- n && (n.contains(t) || N.current?.contains(t) || R(!1));
200
+ n && (n.contains(t) || N.current?.contains(t) || B(!1));
201
201
  }, r = (e) => {
202
- if (e.key !== "Escape" || !z.current) return;
202
+ if (e.key !== "Escape" || !V.current) return;
203
203
  let t = e.target;
204
204
  if (!(t instanceof Node)) return;
205
205
  let n = M.current, r = N.current;
206
- !n?.contains(t) && !r?.contains(t) || (e.preventDefault(), e.stopPropagation(), R(!1));
206
+ !n?.contains(t) && !r?.contains(t) || (e.preventDefault(), e.stopPropagation(), B(!1));
207
207
  };
208
208
  return e.addEventListener("pointerdown", n, !0), t.addEventListener("keydown", r, !0), () => {
209
209
  e.removeEventListener("pointerdown", n, !0), t.removeEventListener("keydown", r, !0);
210
210
  };
211
- }, [L, R]), r.useEffect(() => {
212
- if (!L) return;
211
+ }, [z, B]), r.useEffect(() => {
212
+ if (!z) return;
213
213
  let e = N.current;
214
214
  if (!e) return;
215
215
  let t = (e) => {
@@ -227,50 +227,50 @@ function x({ id: e, value: n, onChange: a, onValueUpdate: o, options: d, placeho
227
227
  return e.addEventListener("wheel", t, { passive: !1 }), () => {
228
228
  e.removeEventListener("wheel", t);
229
229
  };
230
- }, [L]), r.useEffect(() => {
231
- if (!L || _ !== void 0 && !v || typeof window > "u" || !("IntersectionObserver" in window)) return;
230
+ }, [z]), r.useEffect(() => {
231
+ if (!z || _ !== void 0 && !v || typeof window > "u" || !("IntersectionObserver" in window)) return;
232
232
  let e = T.current;
233
233
  if (!(e instanceof HTMLElement)) return;
234
234
  let t = !0, n = new IntersectionObserver((e) => {
235
235
  if (!t) return;
236
236
  let n = e[0];
237
- n && !n.isIntersecting && R(!1);
237
+ n && !n.isIntersecting && B(!1);
238
238
  });
239
239
  return n.observe(e), () => {
240
240
  t = !1, n.disconnect();
241
241
  };
242
242
  }, [
243
243
  v,
244
- L,
244
+ z,
245
245
  _,
246
- R
246
+ B
247
247
  ]);
248
- let H = r.useCallback(() => {
248
+ let G = r.useCallback(() => {
249
249
  if (typeof window > "u") return;
250
250
  let e = T.current, t = N.current;
251
251
  if (!(e instanceof HTMLElement) || !t) return;
252
252
  let n = e.getBoundingClientRect(), r = t.offsetHeight, i = window.innerWidth ?? 0, a = window.innerHeight ?? 0, o = n.width, s = n.left;
253
253
  s + o > i - 8 && (s = Math.max(8, i - o - 8)), s < 8 && (s = 8);
254
254
  let c = n.bottom + 8, l = c + r > a - 8, u = n.top - r - 8;
255
- l && u >= 8 && (c = u), c < 8 && (c = 8), c + r > a - 8 && (c = Math.max(8, a - r - 8)), ne({
255
+ l && u >= 8 && (c = u), c < 8 && (c = 8), c + r > a - 8 && (c = Math.max(8, a - r - 8)), I({
256
256
  left: s,
257
257
  top: c,
258
258
  width: o
259
259
  });
260
260
  }, []);
261
- return r.useLayoutEffect(() => {
262
- if (!L || h || typeof window > "u") return;
263
- H();
264
- let e = window.requestAnimationFrame(H);
265
- return window.addEventListener("scroll", H, !0), window.addEventListener("resize", H), () => {
266
- window.cancelAnimationFrame(e), window.removeEventListener("scroll", H, !0), window.removeEventListener("resize", H);
261
+ r.useLayoutEffect(() => {
262
+ if (!z || h || typeof window > "u") return;
263
+ G();
264
+ let e = window.requestAnimationFrame(G);
265
+ return window.addEventListener("scroll", G, !0), window.addEventListener("resize", G), () => {
266
+ window.cancelAnimationFrame(e), window.removeEventListener("scroll", G, !0), window.removeEventListener("resize", G);
267
267
  };
268
268
  }, [
269
269
  h,
270
- L,
271
- H
270
+ z,
271
+ G
272
272
  ]), r.useEffect(() => {
273
- if (!L) return;
273
+ if (!z) return;
274
274
  let e = P.current;
275
275
  if (!e) return;
276
276
  let t = requestAnimationFrame(() => {
@@ -299,8 +299,8 @@ function x({ id: e, value: n, onChange: a, onValueUpdate: o, options: d, placeho
299
299
  e.scrollTop = a;
300
300
  });
301
301
  return () => cancelAnimationFrame(t);
302
- }, [L, d]), r.useEffect(() => {
303
- if (!L || !A || !k.current) return;
302
+ }, [z, d]), r.useEffect(() => {
303
+ if (!z || !A || !k.current) return;
304
304
  let e = P.current;
305
305
  if (!e) return;
306
306
  let t = e.querySelector(`[role="option"][data-value="${A}"]`);
@@ -311,7 +311,9 @@ function x({ id: e, value: n, onChange: a, onValueUpdate: o, options: d, placeho
311
311
  return;
312
312
  }
313
313
  r > e.scrollTop + e.clientHeight && (e.scrollTop = Math.max(0, r - e.clientHeight));
314
- }, [A, L]), /* @__PURE__ */ c("div", {
314
+ }, [A, z]);
315
+ let re = d.find((e) => e.value === n);
316
+ return /* @__PURE__ */ c("div", {
315
317
  "data-slot": "hours-picker-input",
316
318
  className: t("w-[150px]", p),
317
319
  ref: M,
@@ -321,24 +323,25 @@ function x({ id: e, value: n, onChange: a, onValueUpdate: o, options: d, placeho
321
323
  id: C,
322
324
  placeholder: f,
323
325
  value: n,
324
- onValueUpdate: ae,
325
- onCommit: V,
326
+ onValueUpdate: ne,
327
+ onCommit: W,
326
328
  options: d,
329
+ selectedLabel: re?.selectedLabel,
327
330
  disabled: h,
328
331
  readOnly: g,
329
- open: L,
330
- setOpen: R,
332
+ open: z,
333
+ setOpen: B,
331
334
  inputClassName: m,
332
335
  triggerTestId: ee,
333
336
  isHydrated: x,
334
337
  highlightedValueRef: O,
335
- setHighlightedValue: B,
336
- markKeyboardNavigation: ie,
338
+ setHighlightedValue: H,
339
+ markKeyboardNavigation: U,
337
340
  inputRef: (e) => {
338
341
  T.current = e;
339
342
  },
340
343
  onDraftValueHandlerChange: D
341
- }), L ? (() => {
344
+ }), z ? (() => {
342
345
  let e = /* @__PURE__ */ c(s, { children: /* @__PURE__ */ l("div", {
343
346
  ref: N,
344
347
  "data-testid": te,
@@ -371,13 +374,13 @@ function x({ id: e, value: n, onChange: a, onValueUpdate: o, options: d, placeho
371
374
  e.preventDefault();
372
375
  },
373
376
  onClick: () => {
374
- e.disabled || (E.current?.(e.value), B(e.value), T.current?.focus({ preventScroll: !0 }), V(e.value), R(!1));
377
+ e.disabled || (E.current?.(e.value), H(e.value), T.current?.focus({ preventScroll: !0 }), W(e.value), B(!1));
375
378
  },
376
379
  onPointerEnter: () => {
377
- k.current || (k.current = !1, B(e.value));
380
+ k.current || (k.current = !1, H(e.value));
378
381
  },
379
382
  onPointerMove: (t) => {
380
- k.current && t.movementX === 0 && t.movementY === 0 || (k.current = !1, B(e.value));
383
+ k.current && t.movementX === 0 && t.movementY === 0 || (k.current = !1, H(e.value));
381
384
  },
382
385
  children: [/* @__PURE__ */ c("span", {
383
386
  className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center",
@@ -415,13 +418,13 @@ function S({ id: e, value: n, onChange: o, onValueUpdate: d, options: f, placeho
415
418
  width: 0
416
419
  })), [j, M] = r.useState(!1), N = v ?? j, P = ee ?? M, F = r.useRef(!1);
417
420
  F.current = N;
418
- let ne = r.useCallback((e) => {
421
+ let I = r.useCallback((e) => {
419
422
  y(f.find((t) => t.value === e)) && (d && d(e), o(e));
420
423
  }, [
421
424
  o,
422
425
  d,
423
426
  f
424
- ]), I = r.useCallback(() => {
427
+ ]), L = r.useCallback(() => {
425
428
  if (typeof window > "u") return;
426
429
  let e = T.current, t = D.current;
427
430
  if (!(e instanceof HTMLElement) || !t) return;
@@ -436,15 +439,15 @@ function S({ id: e, value: n, onChange: o, onValueUpdate: d, options: f, placeho
436
439
  }, []);
437
440
  r.useLayoutEffect(() => {
438
441
  if (!N || g || typeof window > "u") return;
439
- I();
440
- let e = window.requestAnimationFrame(I);
441
- return window.addEventListener("scroll", I, !0), window.addEventListener("resize", I), () => {
442
- window.cancelAnimationFrame(e), window.removeEventListener("scroll", I, !0), window.removeEventListener("resize", I);
442
+ L();
443
+ let e = window.requestAnimationFrame(L);
444
+ return window.addEventListener("scroll", L, !0), window.addEventListener("resize", L), () => {
445
+ window.cancelAnimationFrame(e), window.removeEventListener("scroll", L, !0), window.removeEventListener("resize", L);
443
446
  };
444
447
  }, [
445
448
  g,
446
449
  N,
447
- I
450
+ L
448
451
  ]), r.useEffect(() => {
449
452
  if (!N) return;
450
453
  let e = E.current?.ownerDocument ?? document, t = e.defaultView ?? window, n = (e) => {
@@ -461,7 +464,7 @@ function S({ id: e, value: n, onChange: o, onValueUpdate: d, options: f, placeho
461
464
  e.removeEventListener("pointerdown", n, !0), t.removeEventListener("keydown", r, !0);
462
465
  };
463
466
  }, [N, P]);
464
- let re = f.find((e) => e.value === n);
467
+ let R = f.find((e) => e.value === n), z = R?.selectedLabel ?? R?.label;
465
468
  return /* @__PURE__ */ l("div", {
466
469
  "data-slot": "hours-picker-field",
467
470
  className: t("w-[150px]", m),
@@ -482,7 +485,7 @@ function S({ id: e, value: n, onChange: o, onValueUpdate: d, options: f, placeho
482
485
  },
483
486
  children: [/* @__PURE__ */ c("span", {
484
487
  className: "line-clamp-1 text-left",
485
- children: re ? re.label : p
488
+ children: R ? z : p
486
489
  }), /* @__PURE__ */ c(a, {
487
490
  "aria-hidden": !0,
488
491
  className: "h-4 w-4 shrink-0 opacity-50"
@@ -521,7 +524,7 @@ function S({ id: e, value: n, onChange: o, onValueUpdate: d, options: f, placeho
521
524
  e.preventDefault();
522
525
  },
523
526
  onClick: () => {
524
- e.disabled || _ || (ne(e.value), P(!1), T.current?.focus({ preventScroll: !0 }));
527
+ e.disabled || _ || (I(e.value), P(!1), T.current?.focus({ preventScroll: !0 }));
525
528
  },
526
529
  children: [/* @__PURE__ */ c("span", {
527
530
  className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center",
@@ -561,219 +564,233 @@ function C(t) {
561
564
  }
562
565
  C.displayName = "HourPickerField";
563
566
  function w(e) {
564
- let i = n(93), { id: o, placeholder: s, value: u, onValueUpdate: f, onCommit: p, options: m, disabled: g, readOnly: b, open: x, setOpen: S, inputClassName: C, triggerTestId: w, isHydrated: O, highlightedValueRef: k, setHighlightedValue: A, markKeyboardNavigation: j, inputRef: M, onDraftValueHandlerChange: N } = e, P = r.useRef(!1), F = r.useRef(!1), ne = r.useRef(!1), I = r.useRef(null), re = r.useRef(null), L = r.useRef(!1), R;
565
- i[0] === u ? R = i[1] : (R = () => u || "", i[0] = u, i[1] = R);
566
- let [z, B] = r.useState(R), ie, ae;
567
- i[2] === N ? (ie = i[3], ae = i[4]) : (ie = () => (N((e) => {
568
- B(e);
567
+ let i = n(99), { id: o, placeholder: s, value: u, onValueUpdate: f, onCommit: p, options: m, selectedLabel: g, disabled: b, readOnly: x, open: S, setOpen: C, inputClassName: w, triggerTestId: O, isHydrated: k, highlightedValueRef: A, setHighlightedValue: j, markKeyboardNavigation: M, inputRef: N, onDraftValueHandlerChange: P } = e, F = r.useRef(!1), I = r.useRef(!1), L = r.useRef(!1), R = r.useRef(null), z = r.useRef(null), B = r.useRef(!1), V;
568
+ i[0] === u ? V = i[1] : (V = () => u || "", i[0] = u, i[1] = V);
569
+ let [H, U] = r.useState(V), ne, W;
570
+ i[2] === P ? (ne = i[3], W = i[4]) : (ne = () => (P((e) => {
571
+ U(e);
569
572
  }), () => {
570
- N(null);
571
- }), ae = [N], i[2] = N, i[3] = ie, i[4] = ae), r.useEffect(ie, ae);
572
- let V;
573
- i[5] !== k || i[6] !== f || i[7] !== m || i[8] !== A || i[9] !== u ? (V = (e) => {
574
- let t = k.current ?? u ?? "", n = m.findIndex((e) => e.value === t);
573
+ P(null);
574
+ }), W = [P], i[2] = P, i[3] = ne, i[4] = W), r.useEffect(ne, W);
575
+ let G;
576
+ i[5] !== A || i[6] !== f || i[7] !== m || i[8] !== j || i[9] !== u ? (G = (e) => {
577
+ let t = A.current ?? u ?? "", n = m.findIndex((e) => e.value === t);
575
578
  n === -1 && (n = e === 1 ? -1 : m.length);
576
579
  for (let t = n + e; t >= 0 && t < m.length; t += e) {
577
580
  let e = m[t];
578
581
  if (y(e)) {
579
- A(e.value), I.current = e.value, B(e.value), f(e.value);
582
+ j(e.value), R.current = e.value, U(e.value), f(e.value);
580
583
  return;
581
584
  }
582
585
  }
583
- }, i[5] = k, i[6] = f, i[7] = m, i[8] = A, i[9] = u, i[10] = V) : V = i[10];
584
- let H = V, oe, se;
585
- i[11] === u ? (oe = i[12], se = i[13]) : (oe = () => {
586
- P.current || B(u || "");
587
- }, se = [u], i[11] = u, i[12] = oe, i[13] = se), r.useEffect(oe, se);
586
+ }, i[5] = A, i[6] = f, i[7] = m, i[8] = j, i[9] = u, i[10] = G) : G = i[10];
587
+ let re = G, ie, ae;
588
+ i[11] === u ? (ie = i[12], ae = i[13]) : (ie = () => {
589
+ F.current || U(u || "");
590
+ }, ae = [u], i[11] = u, i[12] = ie, i[13] = ae), r.useEffect(ie, ae);
591
+ let oe, se;
592
+ i[14] === H ? (oe = i[15], se = i[16]) : (oe = () => {
593
+ z.current = _(H);
594
+ }, se = [H], i[14] = H, i[15] = oe, i[16] = se), r.useEffect(oe, se);
588
595
  let ce, le;
589
- i[14] === z ? (ce = i[15], le = i[16]) : (ce = () => {
590
- re.current = _(z);
591
- }, le = [z], i[14] = z, i[15] = ce, i[16] = le), r.useEffect(ce, le);
592
- let ue, de;
593
- i[17] === u ? (ue = i[18], de = i[19]) : (de = () => {
594
- u === null && (L.current = !1);
595
- }, ue = [u], i[17] = u, i[18] = ue, i[19] = de), r.useEffect(de, ue);
596
- let fe = !z && "text-muted-foreground", pe = x && "ring-2 ring-primary ring-offset-2", me;
597
- i[20] !== C || i[21] !== fe || i[22] !== pe ? (me = t("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 pr-10 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", "transition-colors group-hover:bg-accent group-hover:text-accent-foreground", fe, pe, "[&_[data-slot='description']]:hidden", C), i[20] = C, i[21] = fe, i[22] = pe, i[23] = me) : me = i[23];
598
- let he = me, ge = O ? "true" : void 0, _e;
599
- i[24] === Symbol.for("react.memo_cache_sentinel") ? (_e = [{
596
+ i[17] === u ? (ce = i[18], le = i[19]) : (le = () => {
597
+ u === null && (B.current = !1);
598
+ }, ce = [u], i[17] = u, i[18] = ce, i[19] = le), r.useEffect(le, ce);
599
+ let ue = !H && "text-muted-foreground", de = S && "ring-2 ring-primary ring-offset-2", fe = u && g != null && "text-transparent focus:text-foreground", pe;
600
+ i[20] !== w || i[21] !== ue || i[22] !== de || i[23] !== fe ? (pe = t("peer flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 pr-10 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", "transition-colors group-hover:bg-accent group-hover:text-accent-foreground", ue, de, "[&_[data-slot='description']]:hidden", w, fe), i[20] = w, i[21] = ue, i[22] = de, i[23] = fe, i[24] = pe) : pe = i[24];
601
+ let me = pe, he = k ? "true" : void 0, ge;
602
+ i[25] === Symbol.for("react.memo_cache_sentinel") ? (ge = [{
600
603
  mask: "00:00",
601
604
  lazy: !0
602
605
  }, {
603
606
  mask: "0:00",
604
607
  lazy: !0
605
- }], i[24] = _e) : _e = i[24];
606
- let U;
607
- i[25] === m ? U = i[26] : (U = (e, t) => {
608
+ }], i[25] = ge) : ge = i[25];
609
+ let K;
610
+ i[26] === m ? K = i[27] : (K = (e, t) => {
608
611
  let n = (t.value + e).replace(/\D/g, "");
609
612
  if (n.length <= 2 || n.length >= 4) return t.compiledMasks[0];
610
613
  let r = h(Number(n.slice(0, 2)));
611
614
  return m.some((e) => e.value.startsWith(`${r}:`)) ? t.compiledMasks[0] : t.compiledMasks[1];
612
- }, i[25] = m, i[26] = U);
613
- let W;
614
- i[27] !== p || i[28] !== u ? (W = (e, t, n) => {
615
+ }, i[26] = m, i[27] = K);
616
+ let q;
617
+ i[28] !== p || i[29] !== u ? (q = (e, t, n) => {
615
618
  if (!n) return;
616
619
  let r = typeof e == "string" ? e : String(e ?? ""), i = r.replace(/\D/g, ""), a = _(r);
617
- if (re.current !== a) {
618
- if (re.current = a, B(r), i.length !== 0) {
619
- L.current = !1;
620
+ if (z.current !== a) {
621
+ if (z.current = a, U(r), i.length !== 0) {
622
+ B.current = !1;
620
623
  return;
621
624
  }
622
- u && !L.current && (L.current = !0, p(null));
625
+ u && !B.current && (B.current = !0, p(null));
623
626
  }
624
- }, i[27] = p, i[28] = u, i[29] = W) : W = i[29];
625
- let G;
626
- i[30] !== p || i[31] !== m || i[32] !== A || i[33] !== u ? (G = (e, t, n) => {
627
+ }, i[28] = p, i[29] = u, i[30] = q) : q = i[30];
628
+ let J;
629
+ i[31] !== p || i[32] !== m || i[33] !== j || i[34] !== u ? (J = (e, t, n) => {
627
630
  if (!n) return;
628
631
  let r = typeof e == "string" ? e : String(e ?? "");
629
- if (I.current === r) {
630
- I.current = null;
632
+ if (R.current === r) {
633
+ R.current = null;
631
634
  return;
632
635
  }
633
636
  let i = v(r, m);
634
637
  if (!i) return;
635
638
  if (i.selectableValue) {
636
- if (A(i.selectableValue), B(i.selectableValue), u === i.selectableValue) return;
639
+ if (j(i.selectableValue), U(i.selectableValue), u === i.selectableValue) return;
637
640
  p(i.selectableValue);
638
641
  return;
639
642
  }
640
643
  let a = ee(i.parsed);
641
644
  if (a == null) return;
642
645
  let o = te(a, m);
643
- o && A(o.value);
644
- }, i[30] = p, i[31] = m, i[32] = A, i[33] = u, i[34] = G) : G = i[34];
645
- let K, q, J;
646
- i[35] !== g || i[36] !== x || i[37] !== S ? (K = () => {
647
- F.current = !0, !g && (x || S(!0));
648
- }, q = (e) => {
649
- F.current = !0, ne.current = typeof document < "u" && document.activeElement === e.currentTarget, !g && (x || S(!0));
650
- }, J = () => {
651
- g || x || S(!0);
652
- }, i[35] = g, i[36] = x, i[37] = S, i[38] = K, i[39] = q, i[40] = J) : (K = i[38], q = i[39], J = i[40]);
653
- let Y;
654
- i[41] !== g || i[42] !== z || i[43] !== k || i[44] !== j || i[45] !== H || i[46] !== p || i[47] !== x || i[48] !== m || i[49] !== A || i[50] !== S ? (Y = (e) => {
655
- if (!g) {
656
- if (e.key === "Tab" && x && !e.defaultPrevented) {
657
- S(!1);
646
+ o && j(o.value);
647
+ }, i[31] = p, i[32] = m, i[33] = j, i[34] = u, i[35] = J) : J = i[35];
648
+ let Y, X, Z;
649
+ i[36] !== b || i[37] !== S || i[38] !== C ? (Y = () => {
650
+ I.current = !0, !b && (S || C(!0));
651
+ }, X = (e) => {
652
+ I.current = !0, L.current = typeof document < "u" && document.activeElement === e.currentTarget, !b && (S || C(!0));
653
+ }, Z = () => {
654
+ b || S || C(!0);
655
+ }, i[36] = b, i[37] = S, i[38] = C, i[39] = Y, i[40] = X, i[41] = Z) : (Y = i[39], X = i[40], Z = i[41]);
656
+ let Q;
657
+ i[42] !== b || i[43] !== H || i[44] !== A || i[45] !== M || i[46] !== re || i[47] !== p || i[48] !== S || i[49] !== m || i[50] !== j || i[51] !== C ? (Q = (e) => {
658
+ if (!b) {
659
+ if (e.key === "Tab" && S && !e.defaultPrevented) {
660
+ C(!1);
658
661
  return;
659
662
  }
660
663
  if (e.key === "Escape") {
661
- if (!x) return;
662
- e.preventDefault(), S(!1);
664
+ if (!S) return;
665
+ e.preventDefault(), C(!1);
663
666
  return;
664
667
  }
665
- if (!x && !e.defaultPrevented && (e.key.length === 1 || e.key === "Backspace" || e.key === "Delete") && !e.ctrlKey && !e.metaKey && !e.altKey && S(!0), e.key === "ArrowDown" || e.key === "ArrowUp") {
666
- if (j(), e.preventDefault(), !x) {
667
- S(!0);
668
+ if (!S && !e.defaultPrevented && (e.key.length === 1 || e.key === "Backspace" || e.key === "Delete") && !e.ctrlKey && !e.metaKey && !e.altKey && C(!0), e.key === "ArrowDown" || e.key === "ArrowUp") {
669
+ if (M(), e.preventDefault(), !S) {
670
+ C(!0);
668
671
  return;
669
672
  }
670
- H(e.key === "ArrowDown" ? 1 : -1);
673
+ re(e.key === "ArrowDown" ? 1 : -1);
671
674
  return;
672
675
  }
673
676
  if (e.key === "Enter") {
674
- j();
675
- let t = v(z, m);
677
+ M();
678
+ let t = v(H, m);
676
679
  if (!t) {
677
- if (!x || z.trim() !== "") return;
678
- let t = m.find((e) => e.value === k.current), n = (y(t) ? t?.value : void 0) ?? m.find(D)?.value;
680
+ if (!S || H.trim() !== "") return;
681
+ let t = m.find((e) => e.value === A.current), n = (y(t) ? t?.value : void 0) ?? m.find(D)?.value;
679
682
  if (!n) return;
680
- e.preventDefault(), A(n), B(n), p(n), S(!1);
683
+ e.preventDefault(), j(n), U(n), p(n), C(!1);
681
684
  return;
682
685
  }
683
686
  if (t.selectableValue) {
684
- e.preventDefault(), A(t.selectableValue), B(t.selectableValue), p(t.selectableValue), S(!1);
687
+ e.preventDefault(), j(t.selectableValue), U(t.selectableValue), p(t.selectableValue), C(!1);
685
688
  return;
686
689
  }
687
690
  let n = ee(t.parsed);
688
691
  if (n == null) return;
689
692
  let r = te(n, m);
690
693
  if (!r) return;
691
- e.preventDefault(), A(r.value), B(r.value), p(r.value), S(!1);
694
+ e.preventDefault(), j(r.value), U(r.value), p(r.value), C(!1);
692
695
  return;
693
696
  }
694
697
  }
695
- }, i[41] = g, i[42] = z, i[43] = k, i[44] = j, i[45] = H, i[46] = p, i[47] = x, i[48] = m, i[49] = A, i[50] = S, i[51] = Y) : Y = i[51];
696
- let X;
697
- i[52] !== g || i[53] !== x || i[54] !== S ? (X = (e) => {
698
- let t = !F.current || !ne.current;
699
- if (F.current = !1, ne.current = !1, P.current = !0, t) {
698
+ }, i[42] = b, i[43] = H, i[44] = A, i[45] = M, i[46] = re, i[47] = p, i[48] = S, i[49] = m, i[50] = j, i[51] = C, i[52] = Q) : Q = i[52];
699
+ let $;
700
+ i[53] !== b || i[54] !== S || i[55] !== C ? ($ = (e) => {
701
+ let t = !I.current || !L.current;
702
+ if (I.current = !1, L.current = !1, F.current = !0, t) {
700
703
  let t = e.currentTarget;
701
704
  requestAnimationFrame(() => t.select());
702
705
  }
703
- g || x || S(!0);
704
- }, i[52] = g, i[53] = x, i[54] = S, i[55] = X) : X = i[55];
705
- let Z;
706
- i[56] !== z || i[57] !== p || i[58] !== m || i[59] !== u ? (Z = () => {
707
- P.current = !1;
708
- let e = z.trim();
706
+ b || S || C(!0);
707
+ }, i[53] = b, i[54] = S, i[55] = C, i[56] = $) : $ = i[56];
708
+ let _e;
709
+ i[57] !== H || i[58] !== p || i[59] !== m || i[60] !== u ? (_e = () => {
710
+ F.current = !1;
711
+ let e = H.trim();
709
712
  if (!e) {
710
- B(u || "");
713
+ U(u || "");
711
714
  return;
712
715
  }
713
716
  let t = v(e, m);
714
717
  if (!t) {
715
- B(u || "");
718
+ U(u || "");
716
719
  return;
717
720
  }
718
721
  if (!t.selectableValue) {
719
- B(u || "");
722
+ U(u || "");
720
723
  return;
721
724
  }
722
- B(t.selectableValue), u !== t.selectableValue && p(t.selectableValue);
723
- }, i[56] = z, i[57] = p, i[58] = m, i[59] = u, i[60] = Z) : Z = i[60];
724
- let Q;
725
- i[61] !== g || i[62] !== z || i[63] !== o || i[64] !== M || i[65] !== s || i[66] !== b || i[67] !== ge || i[68] !== U || i[69] !== W || i[70] !== G || i[71] !== K || i[72] !== q || i[73] !== J || i[74] !== Y || i[75] !== X || i[76] !== Z || i[77] !== he || i[78] !== w ? (Q = /* @__PURE__ */ c(d, {
725
+ U(t.selectableValue), u !== t.selectableValue && p(t.selectableValue);
726
+ }, i[57] = H, i[58] = p, i[59] = m, i[60] = u, i[61] = _e) : _e = i[61];
727
+ let ve;
728
+ i[62] !== b || i[63] !== H || i[64] !== o || i[65] !== N || i[66] !== s || i[67] !== x || i[68] !== he || i[69] !== K || i[70] !== q || i[71] !== J || i[72] !== Y || i[73] !== X || i[74] !== Z || i[75] !== Q || i[76] !== $ || i[77] !== _e || i[78] !== me || i[79] !== O ? (ve = /* @__PURE__ */ c(d, {
726
729
  id: o,
727
- "data-testid": w,
728
- "data-hydrated": ge,
730
+ "data-testid": O,
731
+ "data-hydrated": he,
729
732
  type: "text",
730
- disabled: g,
731
- readOnly: b,
732
- inputRef: M,
733
+ disabled: b,
734
+ readOnly: x,
735
+ inputRef: N,
733
736
  autoComplete: "off",
734
- mask: _e,
735
- dispatch: U,
737
+ mask: ge,
738
+ dispatch: K,
736
739
  placeholder: s,
737
- value: z,
738
- className: he,
739
- onAccept: W,
740
- onComplete: G,
741
- onPointerDown: K,
742
- onMouseDown: q,
743
- onClick: J,
744
- onKeyDown: Y,
745
- onFocus: X,
746
- onBlur: Z
747
- }), i[61] = g, i[62] = z, i[63] = o, i[64] = M, i[65] = s, i[66] = b, i[67] = ge, i[68] = U, i[69] = W, i[70] = G, i[71] = K, i[72] = q, i[73] = J, i[74] = Y, i[75] = X, i[76] = Z, i[77] = he, i[78] = w, i[79] = Q) : Q = i[79];
748
- let ve;
749
- i[80] === Symbol.for("react.memo_cache_sentinel") ? (ve = t("absolute right-1 top-1/2 inline-flex size-8 -translate-y-1/2 items-center justify-center rounded-md text-muted-foreground transition-colors hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50"), i[80] = ve) : ve = i[80];
750
- let ye = x ? "Close time picker" : "Open time picker", $;
751
- i[81] !== g || i[82] !== x || i[83] !== S ? ($ = () => {
752
- g || S(!x);
753
- }, i[81] = g, i[82] = x, i[83] = S, i[84] = $) : $ = i[84];
740
+ value: H,
741
+ className: me,
742
+ onAccept: q,
743
+ onComplete: J,
744
+ onPointerDown: Y,
745
+ onMouseDown: X,
746
+ onClick: Z,
747
+ onKeyDown: Q,
748
+ onFocus: $,
749
+ onBlur: _e
750
+ }), i[62] = b, i[63] = H, i[64] = o, i[65] = N, i[66] = s, i[67] = x, i[68] = he, i[69] = K, i[70] = q, i[71] = J, i[72] = Y, i[73] = X, i[74] = Z, i[75] = Q, i[76] = $, i[77] = _e, i[78] = me, i[79] = O, i[80] = ve) : ve = i[80];
751
+ let ye;
752
+ i[81] !== b || i[82] !== g || i[83] !== u ? (ye = u && g != null ? /* @__PURE__ */ c("span", {
753
+ "aria-hidden": "true",
754
+ "data-slot": "hours-picker-input-selected-label",
755
+ className: t("pointer-events-none absolute inset-y-0 left-3 right-10 flex min-w-0 items-center text-base peer-focus:hidden md:text-sm", b && "opacity-50"),
756
+ children: /* @__PURE__ */ c("span", {
757
+ className: "min-w-0 truncate",
758
+ children: g
759
+ })
760
+ }) : null, i[81] = b, i[82] = g, i[83] = u, i[84] = ye) : ye = i[84];
754
761
  let be;
755
- i[85] === Symbol.for("react.memo_cache_sentinel") ? (be = /* @__PURE__ */ c(a, {
762
+ i[85] === Symbol.for("react.memo_cache_sentinel") ? (be = t("absolute right-1 top-1/2 inline-flex size-8 -translate-y-1/2 items-center justify-center rounded-md text-muted-foreground transition-colors hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50"), i[85] = be) : be = i[85];
763
+ let xe = S ? "Close time picker" : "Open time picker", Se;
764
+ i[86] !== b || i[87] !== S || i[88] !== C ? (Se = () => {
765
+ b || C(!S);
766
+ }, i[86] = b, i[87] = S, i[88] = C, i[89] = Se) : Se = i[89];
767
+ let Ce;
768
+ i[90] === Symbol.for("react.memo_cache_sentinel") ? (Ce = /* @__PURE__ */ c(a, {
756
769
  "aria-hidden": !0,
757
770
  className: "size-4"
758
- }), i[85] = be) : be = i[85];
759
- let xe;
760
- i[86] !== g || i[87] !== ye || i[88] !== $ ? (xe = /* @__PURE__ */ c("button", {
771
+ }), i[90] = Ce) : Ce = i[90];
772
+ let we;
773
+ i[91] !== b || i[92] !== xe || i[93] !== Se ? (we = /* @__PURE__ */ c("button", {
761
774
  type: "button",
762
775
  tabIndex: -1,
763
- disabled: g,
776
+ disabled: b,
764
777
  "data-slot": "hours-picker-input-toggle",
765
- className: ve,
766
- "aria-label": ye,
778
+ className: be,
779
+ "aria-label": xe,
767
780
  onPointerDown: E,
768
781
  onMouseDown: T,
769
- onClick: $,
770
- children: be
771
- }), i[86] = g, i[87] = ye, i[88] = $, i[89] = xe) : xe = i[89];
772
- let Se;
773
- return i[90] !== Q || i[91] !== xe ? (Se = /* @__PURE__ */ l("div", {
782
+ onClick: Se,
783
+ children: Ce
784
+ }), i[91] = b, i[92] = xe, i[93] = Se, i[94] = we) : we = i[94];
785
+ let Te;
786
+ return i[95] !== ve || i[96] !== ye || i[97] !== we ? (Te = /* @__PURE__ */ l("div", {
774
787
  className: "relative group",
775
- children: [Q, xe]
776
- }), i[90] = Q, i[91] = xe, i[92] = Se) : Se = i[92], Se;
788
+ children: [
789
+ ve,
790
+ ye,
791
+ we
792
+ ]
793
+ }), i[95] = ve, i[96] = ye, i[97] = we, i[98] = Te) : Te = i[98], Te;
777
794
  }
778
795
  function T(e) {
779
796
  e.preventDefault();
@@ -1 +1 @@
1
- {"version":3,"file":"index302.js","names":["Check","ChevronDown","ChevronUp","React","createPortal","IMaskInput","IMask","InputMask","useIsTouchDevice","cn","imaskAny","HourPickerOption","value","label","disabled","description","ReactNode","pad2","String","padStart","parseTimeInput","raw","trimmed","trim","match","exec","hours","Number","minutes","isFinite","getAcceptedInputSignature","parsed","digits","replace","length","minutePart","slice","hourPart","ParsedTimeInputResult","selectableValue","parseTimeInputWithSelectableOption","options","parsedOption","find","option","isOptionSelectable","timeStringToMinutes","findClosestSelectableOption","targetMinutes","bestOption","bestDiff","POSITIVE_INFINITY","bestMinutes","NEGATIVE_INFINITY","optionMinutes","diff","Math","abs","HourPickerScrollButtonDirection","HourPickerScrollButtonProps","direction","viewportRef","RefObject","HTMLElement","speed","className","HourPickerScrollButton","setDisabled","useState","animationRef","useRef","undefined","lastTimeRef","isScrollingRef","checkScrollability","useCallback","viewport","current","scrollTop","scrollHeight","clientHeight","tolerance","canScrollUp","canScrollDown","hasScrollableContent","shouldDisable","useEffect","handleScroll","handleResize","addEventListener","passive","resizeObserver","ResizeObserver","observe","mutationObserver","MutationObserver","childList","subtree","removeEventListener","disconnect","stopScrolling","cancelAnimationFrame","smoothScroll","currentTime","deltaTime","distance","requestAnimationFrame","oldScrollTop","maxScroll","newScrollTop","max","min","scrollTo","top","canContinue","setTimeout","startScrolling","HourPickerInputProps","id","onChange","onValueUpdate","placeholder","inputClassName","readOnly","open","onOpenChange","triggerTestId","contentTestId","isHydrated","HourPickerInput","openProp","reactId","useId","triggerId","triggerInputRef","HTMLInputElement","setTriggerDraftValueRef","setTriggerDraftValueHandler","handler","highlightedValueRef","keyboardNavigationActiveRef","highlightedValue","setHighlightedValue","containerRef","HTMLDivElement","desktopPopoverRef","desktopContentRef","desktopPopoverPosition","setDesktopPopoverPosition","left","width","uncontrolledOpen","setUncontrolledOpen","setOpen","openRef","input","document","activeElement","focus","preventScroll","updateHighlightedValue","next","markKeyboardNavigation","currentOption","firstEnabled","updateValue","matchingOption","commitValue","ownerDocument","ownerWindow","defaultView","window","handlePointerDown","event","PointerEvent","target","Node","container","contains","popover","handleKeyDown","KeyboardEvent","key","preventDefault","stopPropagation","handleWheel","WheelEvent","deltaY","maxScrollTop","atTop","atBottom","isWheelOverViewport","nextScrollTop","trigger","isActive","observer","IntersectionObserver","entries","entry","isIntersecting","updateDesktopPopoverPosition","rect","getBoundingClientRect","popoverHeight","offsetHeight","viewportWidth","innerWidth","viewportHeight","innerHeight","padding","bottom","overflowBottom","aboveTop","useLayoutEffect","rafId","run","selected","querySelector","targetTop","offsetTop","targetBottom","viewportBottom","all","Array","from","querySelectorAll","lastDisabledBefore","el","isDisabled","hasAttribute","offset","raf","node","map","isChecked","movementX","movementY","body","displayName","HourPickerFieldProps","HourPickerSelectField","triggerRef","HTMLButtonElement","popoverRef","popoverPosition","setPopoverPosition","resolvedOpen","updatePopoverPosition","selectedOption","HourPickerField","props","$","_c","isTouchDevice","t0","HourPickerMaskedSelectTriggerProps","onCommit","MutableRefObject","inputRef","onDraftValueHandlerChange","HourPickerMaskedSelectTrigger","isEditingRef","pointerDownOnInputRef","inputWasFocusedOnPointerDownRef","ignoreNextMaskCommitValueRef","lastAcceptedSignatureRef","clearCommitPendingRef","t1","draft","setDraft","t2","t3","nextValue","t4","base","baseIndex","findIndex","nextIndex","nextOption","moveSelection","t5","t6","t7","t8","t10","t9","t11","t12","t13","triggerClassName","t14","t15","Symbol","for","mask","lazy","t16","appended","dynamicMasked","compiledMasks","hourPrefix","hasTwoDigitHour","some","option_0","startsWith","t17","accepted","_mask","nextText","nextDigits","nextSignature","t18","completed","_mask_0","event_0","nextText_0","resolved","closestOption","t19","t20","t21","event_1","currentTarget","t22","event_2","defaultPrevented","shouldReopen","ctrlKey","metaKey","altKey","resolved_0","highlightedOption","option_1","fallbackValue","_temp","targetMinutes_0","closestOption_0","t23","event_3","shouldSelectAll","element","select","t24","resolved_1","t25","t26","t27","t28","t29","t30","_temp2","_temp3","t31","event_5","event_4","option_2"],"sources":["../src/components/HourPickerField/index.tsx"],"sourcesContent":["import { Check, ChevronDown, ChevronUp } from \"lucide-react\"\nimport * as React from \"react\"\nimport { createPortal } from \"react-dom\"\nimport { IMaskInput } from \"react-imask\"\nimport IMask, { InputMask } from \"imask\"\n\nimport { useIsTouchDevice } from \"@/helpers/useIsTouchDevice\"\nimport { cn } from \"@/lib/utils\"\n\n\n// WARNING: used to preserve input mask even with tree shaking\n// DO NOT REMOVE THIS CODE OR THIS COMMENT\nconst imaskAny = IMask as any\nif (typeof imaskAny.InputMask !== \"function\") {\n imaskAny.InputMask = InputMask\n}\n\n\nexport type HourPickerOption = {\n value: string\n label: string\n disabled?: boolean\n description?: React.ReactNode\n}\n\nfunction pad2(value: number) {\n return String(value).padStart(2, \"0\")\n}\n\nfunction parseTimeInput(raw: string) {\n const trimmed = raw.trim()\n if (!trimmed) return null\n\n const match = /^(\\d{1,2}):(\\d{2})$/.exec(trimmed)\n if (!match) {\n return null\n }\n\n const hours = Number(match[1])\n const minutes = Number(match[2])\n if (!Number.isFinite(hours) || !Number.isFinite(minutes)) {\n return null\n }\n\n if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59) {\n return null\n }\n\n return `${pad2(hours)}:${pad2(minutes)}`\n}\n\nfunction getAcceptedInputSignature(raw: string) {\n const parsed = parseTimeInput(raw)\n if (parsed) {\n return `parsed:${parsed}`\n }\n\n const digits = raw.replace(/\\D/g, \"\")\n if (!digits) {\n return \"empty\"\n }\n\n if (digits.length <= 2) {\n return `hour:${Number(digits)}`\n }\n\n const minutePart = digits.slice(-2)\n const hourPart = digits.slice(0, -2)\n return `hour-minute:${Number(hourPart)}:${minutePart}`\n}\n\ntype ParsedTimeInputResult = {\n parsed: string\n selectableValue: string | null\n}\n\nfunction parseTimeInputWithSelectableOption(raw: string, options: HourPickerOption[]): ParsedTimeInputResult | null {\n const parsed = parseTimeInput(raw)\n if (!parsed) return null\n\n const parsedOption = options.find((option) => option.value === parsed)\n if (isOptionSelectable(parsedOption)) {\n return { parsed, selectableValue: parsed }\n }\n\n return { parsed, selectableValue: null }\n}\n\nfunction timeStringToMinutes(value: string) {\n const match = /^(\\d{2}):(\\d{2})$/.exec(value)\n if (!match) {\n return null\n }\n\n const hours = Number(match[1])\n const minutes = Number(match[2])\n\n if (!Number.isFinite(hours) || !Number.isFinite(minutes)) {\n return null\n }\n\n return hours * 60 + minutes\n}\n\nfunction isOptionSelectable(option: HourPickerOption | undefined) {\n if (!option) return false\n return !option.disabled\n}\n\nfunction findClosestSelectableOption(targetMinutes: number, options: HourPickerOption[]) {\n let bestOption: HourPickerOption | null = null\n let bestDiff = Number.POSITIVE_INFINITY\n let bestMinutes = Number.NEGATIVE_INFINITY\n\n for (const option of options) {\n if (!isOptionSelectable(option)) continue\n const optionMinutes = timeStringToMinutes(option.value)\n if (optionMinutes == null) continue\n\n const diff = Math.abs(optionMinutes - targetMinutes)\n if (diff < bestDiff || (diff === bestDiff && optionMinutes > bestMinutes)) {\n bestOption = option\n bestDiff = diff\n bestMinutes = optionMinutes\n }\n }\n\n return bestOption\n}\n\ntype HourPickerScrollButtonDirection = \"up\" | \"down\"\n\ntype HourPickerScrollButtonProps = {\n direction: HourPickerScrollButtonDirection\n viewportRef: React.RefObject<HTMLElement | null>\n speed?: number\n className?: string\n}\n\nfunction HourPickerScrollButton({\n direction,\n viewportRef,\n speed = 400,\n className,\n}: HourPickerScrollButtonProps) {\n const [disabled, setDisabled] = React.useState(true)\n const animationRef = React.useRef<number | undefined>(undefined)\n const lastTimeRef = React.useRef<number | undefined>(undefined)\n const isScrollingRef = React.useRef(false)\n\n const checkScrollability = React.useCallback(() => {\n const viewport = viewportRef.current\n if (!viewport) {\n setDisabled(true)\n return\n }\n\n const { scrollTop, scrollHeight, clientHeight } = viewport\n const tolerance = 2\n\n const canScrollUp = scrollTop > tolerance\n const canScrollDown = scrollTop < (scrollHeight - clientHeight - tolerance)\n const hasScrollableContent = scrollHeight > clientHeight + tolerance\n\n if (!hasScrollableContent) {\n setDisabled(true)\n return\n }\n\n const shouldDisable = direction === \"up\" ? !canScrollUp : !canScrollDown\n setDisabled(shouldDisable)\n }, [direction, viewportRef])\n\n React.useEffect(() => {\n const viewport = viewportRef.current\n if (!viewport) return\n\n checkScrollability()\n\n const handleScroll = () => checkScrollability()\n const handleResize = () => checkScrollability()\n\n viewport.addEventListener(\"scroll\", handleScroll, { passive: true })\n\n const resizeObserver = new ResizeObserver(handleResize)\n resizeObserver.observe(viewport)\n\n const mutationObserver = new MutationObserver(handleResize)\n mutationObserver.observe(viewport, { childList: true, subtree: true })\n\n return () => {\n viewport.removeEventListener(\"scroll\", handleScroll)\n resizeObserver.disconnect()\n mutationObserver.disconnect()\n }\n }, [viewportRef, checkScrollability])\n\n const stopScrolling = React.useCallback(() => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current)\n animationRef.current = undefined\n }\n isScrollingRef.current = false\n lastTimeRef.current = undefined\n }, [])\n\n const smoothScroll = React.useCallback(\n (currentTime: number) => {\n const viewport = viewportRef.current\n if (!viewport || disabled || !isScrollingRef.current) {\n stopScrolling()\n return\n }\n\n if (!lastTimeRef.current) {\n lastTimeRef.current = currentTime\n }\n\n const deltaTime = currentTime - lastTimeRef.current\n const distance = (speed * deltaTime) / 1000\n\n if (distance < 0.1) {\n animationRef.current = requestAnimationFrame(smoothScroll)\n return\n }\n\n const oldScrollTop = viewport.scrollTop\n const maxScroll = viewport.scrollHeight - viewport.clientHeight\n\n let newScrollTop: number\n if (direction === \"up\") {\n newScrollTop = Math.max(0, oldScrollTop - distance)\n } else {\n newScrollTop = Math.min(maxScroll, oldScrollTop + distance)\n }\n\n viewport.scrollTo({ top: newScrollTop })\n\n lastTimeRef.current = currentTime\n\n const tolerance = 1\n const canContinue =\n direction === \"up\"\n ? newScrollTop > tolerance\n : newScrollTop < (maxScroll - tolerance)\n\n if (canContinue && Math.abs(newScrollTop - oldScrollTop) > 0.01) {\n animationRef.current = requestAnimationFrame(smoothScroll)\n } else {\n stopScrolling()\n setTimeout(checkScrollability, 16)\n }\n },\n [checkScrollability, direction, disabled, speed, stopScrolling, viewportRef],\n )\n\n const startScrolling = React.useCallback(() => {\n if (disabled || !viewportRef.current || isScrollingRef.current) return\n\n isScrollingRef.current = true\n lastTimeRef.current = undefined\n animationRef.current = requestAnimationFrame(smoothScroll)\n }, [disabled, smoothScroll, viewportRef])\n\n React.useEffect(() => stopScrolling, [stopScrolling])\n\n return (\n <div\n className={cn(\n \"flex items-center justify-center py-1 select-none\",\n disabled ? \"cursor-default opacity-40\" : \"cursor-pointer opacity-100 hover:bg-accent/20\",\n className\n )}\n onPointerEnter={() => {\n if (!disabled) startScrolling()\n }}\n onPointerMove={() => {\n if (!disabled && !isScrollingRef.current) startScrolling()\n }}\n onPointerLeave={() => {\n stopScrolling()\n }}\n >\n {direction === \"up\"\n ? <ChevronUp aria-hidden className=\"h-4 w-4 opacity-50\" />\n : <ChevronDown aria-hidden className=\"h-4 w-4 opacity-50\" />}\n </div>\n )\n}\n\nexport type HourPickerInputProps = {\n id?: string\n value: string | null\n onChange: (value: string | null) => void\n onValueUpdate?: (value: string | null) => void\n options: HourPickerOption[]\n placeholder?: string\n className?: string\n inputClassName?: string\n disabled?: boolean\n readOnly?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n triggerTestId?: string\n contentTestId?: string\n isHydrated?: boolean\n}\n\nexport function HourPickerInput({\n id,\n value,\n onChange,\n onValueUpdate,\n options,\n placeholder = \"Select time\",\n className,\n inputClassName,\n disabled,\n readOnly,\n open: openProp,\n onOpenChange,\n triggerTestId,\n contentTestId,\n isHydrated,\n}: HourPickerInputProps) {\n const reactId = React.useId()\n const triggerId = id ?? `hours-picker-${reactId}`\n const triggerInputRef = React.useRef<HTMLInputElement | null>(null)\n const setTriggerDraftValueRef = React.useRef<((value: string) => void) | null>(null)\n const setTriggerDraftValueHandler = React.useCallback((handler: ((value: string) => void) | null) => {\n setTriggerDraftValueRef.current = handler\n }, [])\n const highlightedValueRef = React.useRef<string | null>(null)\n const keyboardNavigationActiveRef = React.useRef(false)\n const [highlightedValue, setHighlightedValue] = React.useState<string | null>(null)\n const containerRef = React.useRef<HTMLDivElement | null>(null)\n const desktopPopoverRef = React.useRef<HTMLDivElement | null>(null)\n const desktopContentRef = React.useRef<HTMLDivElement | null>(null)\n const [desktopPopoverPosition, setDesktopPopoverPosition] = React.useState(() => ({\n left: 0,\n top: 0,\n width: 0,\n }))\n\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false)\n const open = openProp ?? uncontrolledOpen\n const setOpen = onOpenChange ?? setUncontrolledOpen\n const openRef = React.useRef(false)\n openRef.current = open\n\n React.useEffect(() => {\n if (!open) {\n return\n }\n if (disabled || readOnly) {\n return\n }\n\n const input = triggerInputRef.current\n if (!(input instanceof HTMLInputElement)) {\n return\n }\n if (typeof document !== \"undefined\" && document.activeElement === input) {\n return\n }\n\n input.focus({ preventScroll: true })\n }, [disabled, open, readOnly])\n\n const updateHighlightedValue = React.useCallback((next: string | null) => {\n highlightedValueRef.current = next\n setHighlightedValue(next)\n }, [])\n\n const markKeyboardNavigation = React.useCallback(() => {\n keyboardNavigationActiveRef.current = true\n }, [])\n\n React.useEffect(() => {\n if (!open) return\n\n const currentOption = options.find((option) => option.value === value)\n if (currentOption && isOptionSelectable(currentOption)) {\n updateHighlightedValue(currentOption.value)\n return\n }\n\n const firstEnabled = options.find((option) => isOptionSelectable(option))\n updateHighlightedValue(firstEnabled?.value ?? null)\n }, [open, options, updateHighlightedValue, value])\n\n const updateValue = React.useCallback(\n (next: string | null) => {\n if (next === null) {\n if (onValueUpdate) {\n onValueUpdate(null)\n }\n return\n }\n\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n\n if (onValueUpdate) {\n onValueUpdate(next)\n }\n },\n [onValueUpdate, options],\n )\n\n const commitValue = React.useCallback(\n (next: string | null) => {\n if (next === null) {\n if (onValueUpdate) {\n onValueUpdate(null)\n }\n onChange(null)\n return\n }\n\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n\n if (onValueUpdate) {\n onValueUpdate(next)\n }\n\n onChange(next)\n },\n [onChange, onValueUpdate, options],\n )\n\n React.useEffect(() => {\n if (!open) return\n\n const ownerDocument = containerRef.current?.ownerDocument ?? document\n const ownerWindow = ownerDocument.defaultView ?? window\n\n const handlePointerDown = (event: PointerEvent) => {\n const target = event.target\n if (!(target instanceof Node)) {\n return\n }\n\n const container = containerRef.current\n if (!container) {\n return\n }\n\n if (container.contains(target)) {\n return\n }\n\n const popover = desktopPopoverRef.current\n if (popover?.contains(target)) {\n return\n }\n\n setOpen(false)\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") {\n return\n }\n if (!openRef.current) {\n return\n }\n\n const target = event.target\n if (!(target instanceof Node)) {\n return\n }\n\n const container = containerRef.current\n const popover = desktopPopoverRef.current\n if (!container?.contains(target) && !popover?.contains(target)) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n setOpen(false)\n }\n\n ownerDocument.addEventListener(\"pointerdown\", handlePointerDown, true)\n ownerWindow.addEventListener(\"keydown\", handleKeyDown, true)\n return () => {\n ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown, true)\n ownerWindow.removeEventListener(\"keydown\", handleKeyDown, true)\n }\n }, [open, setOpen])\n\n React.useEffect(() => {\n if (!open) {\n return\n }\n\n const popover = desktopPopoverRef.current\n if (!popover) {\n return\n }\n\n const handleWheel = (event: WheelEvent) => {\n const viewport = desktopContentRef.current\n if (!viewport) {\n return\n }\n\n const deltaY = event.deltaY\n if (deltaY === 0) {\n return\n }\n\n const maxScrollTop = Math.max(0, viewport.scrollHeight - viewport.clientHeight)\n const atTop = viewport.scrollTop <= 0\n const atBottom = viewport.scrollTop >= maxScrollTop\n\n const target = event.target\n const isWheelOverViewport = target instanceof Node && viewport.contains(target)\n\n if (isWheelOverViewport) {\n if ((deltaY < 0 && atTop) || (deltaY > 0 && atBottom)) {\n event.preventDefault()\n }\n return\n }\n\n event.preventDefault()\n const nextScrollTop = Math.min(maxScrollTop, Math.max(0, viewport.scrollTop + deltaY))\n viewport.scrollTop = nextScrollTop\n }\n\n popover.addEventListener(\"wheel\", handleWheel, { passive: false })\n return () => {\n popover.removeEventListener(\"wheel\", handleWheel)\n }\n }, [open])\n\n React.useEffect(() => {\n if (!open) {\n return\n }\n if (openProp !== undefined && !onOpenChange) {\n return\n }\n if (typeof window === \"undefined\") {\n return\n }\n if (!(\"IntersectionObserver\" in window)) {\n return\n }\n\n const trigger = triggerInputRef.current\n if (!(trigger instanceof HTMLElement)) {\n return\n }\n\n let isActive = true\n const observer = new IntersectionObserver(entries => {\n if (!isActive) {\n return\n }\n const entry = entries[0]\n if (entry && !entry.isIntersecting) {\n setOpen(false)\n }\n })\n observer.observe(trigger)\n return () => {\n isActive = false\n observer.disconnect()\n }\n }, [onOpenChange, open, openProp, setOpen])\n\n const updateDesktopPopoverPosition = React.useCallback(() => {\n if (typeof window === \"undefined\") return\n\n const trigger = triggerInputRef.current\n const popover = desktopPopoverRef.current\n if (!(trigger instanceof HTMLElement) || !popover) return\n\n const rect = trigger.getBoundingClientRect()\n const popoverHeight = popover.offsetHeight\n const viewportWidth = window.innerWidth ?? 0\n const viewportHeight = window.innerHeight ?? 0\n const padding = 8\n\n const width = rect.width\n\n let left = rect.left\n if (left + width > viewportWidth - padding) {\n left = Math.max(padding, viewportWidth - width - padding)\n }\n if (left < padding) {\n left = padding\n }\n\n let top = rect.bottom + padding\n const overflowBottom = top + popoverHeight > viewportHeight - padding\n const aboveTop = rect.top - popoverHeight - padding\n if (overflowBottom && aboveTop >= padding) {\n top = aboveTop\n }\n\n if (top < padding) {\n top = padding\n }\n if (top + popoverHeight > viewportHeight - padding) {\n top = Math.max(padding, viewportHeight - popoverHeight - padding)\n }\n\n setDesktopPopoverPosition({ left, top, width })\n }, [])\n\n // React Compiler rejects hook aliasing (useIsomorphicLayoutEffect pattern), so we\n // call useLayoutEffect directly and keep the SSR guard inside the effect.\n React.useLayoutEffect(() => {\n if (!open || disabled) return\n if (typeof window === \"undefined\") return\n\n updateDesktopPopoverPosition()\n const rafId = window.requestAnimationFrame(updateDesktopPopoverPosition)\n\n window.addEventListener(\"scroll\", updateDesktopPopoverPosition, true)\n window.addEventListener(\"resize\", updateDesktopPopoverPosition)\n return () => {\n window.cancelAnimationFrame(rafId)\n window.removeEventListener(\"scroll\", updateDesktopPopoverPosition, true)\n window.removeEventListener(\"resize\", updateDesktopPopoverPosition)\n }\n }, [disabled, open, updateDesktopPopoverPosition])\n\n React.useEffect(() => {\n if (!open) return\n\n const viewport = desktopContentRef.current\n if (!viewport) return\n\n const run = () => {\n const selected = viewport.querySelector(\"[role=\\\"option\\\"][data-state=\\\"checked\\\"]\")\n if (selected instanceof HTMLElement) {\n const padding = 8\n const targetTop = selected.offsetTop - padding\n const targetBottom = selected.offsetTop + selected.offsetHeight + padding\n\n if (targetTop < viewport.scrollTop) {\n viewport.scrollTop = Math.max(0, targetTop)\n return\n }\n\n const viewportBottom = viewport.scrollTop + viewport.clientHeight\n if (targetBottom > viewportBottom) {\n viewport.scrollTop = Math.max(0, targetBottom - viewport.clientHeight)\n }\n return\n }\n\n const all = Array.from(viewport.querySelectorAll(\"[role=\\\"option\\\"]\")) as HTMLElement[]\n if (!all.length) return\n\n let firstEnabled: HTMLElement | undefined\n let lastDisabledBefore: HTMLElement | undefined\n\n for (const el of all) {\n const isDisabled = el.hasAttribute(\"data-disabled\")\n if (!isDisabled) {\n firstEnabled = el\n break\n }\n lastDisabledBefore = el\n }\n\n if (!firstEnabled) return\n\n const target = lastDisabledBefore ? lastDisabledBefore : firstEnabled\n\n const offset = Math.max(0, target.offsetTop - 8)\n viewport.scrollTop = offset\n }\n\n const raf = requestAnimationFrame(run)\n return () => cancelAnimationFrame(raf)\n }, [open, options])\n\n React.useEffect(() => {\n if (!open) return\n if (!highlightedValue) return\n if (!keyboardNavigationActiveRef.current) return\n\n const viewport = desktopContentRef.current\n if (!viewport) return\n\n const target = viewport.querySelector(`[role=\"option\"][data-value=\"${highlightedValue}\"]`)\n if (!(target instanceof HTMLElement)) return\n\n const padding = 8\n const targetTop = target.offsetTop - padding\n const targetBottom = target.offsetTop + target.offsetHeight + padding\n\n if (targetTop < viewport.scrollTop) {\n viewport.scrollTop = Math.max(0, targetTop)\n return\n }\n\n const viewportBottom = viewport.scrollTop + viewport.clientHeight\n if (targetBottom > viewportBottom) {\n viewport.scrollTop = Math.max(0, targetBottom - viewport.clientHeight)\n }\n }, [highlightedValue, open])\n\n return (\n <div\n data-slot=\"hours-picker-input\"\n className={cn(\"w-[150px]\", className)}\n ref={containerRef}\n >\n <div className=\"relative\">\n <HourPickerMaskedSelectTrigger\n id={triggerId}\n placeholder={placeholder}\n value={value}\n onValueUpdate={updateValue}\n onCommit={commitValue}\n options={options}\n disabled={disabled}\n readOnly={readOnly}\n open={open}\n setOpen={setOpen}\n inputClassName={inputClassName}\n triggerTestId={triggerTestId}\n isHydrated={isHydrated}\n highlightedValueRef={highlightedValueRef}\n setHighlightedValue={updateHighlightedValue}\n markKeyboardNavigation={markKeyboardNavigation}\n inputRef={(node) => {\n triggerInputRef.current = node\n }}\n onDraftValueHandlerChange={setTriggerDraftValueHandler}\n />\n\n {open ? (() => {\n const popover = (\n <>\n <div\n ref={desktopPopoverRef}\n data-testid={contentTestId}\n data-state=\"open\"\n className={cn(\n \"pointer-events-auto fixed z-[60] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n )}\n style={{\n left: desktopPopoverPosition.left,\n top: desktopPopoverPosition.top,\n width: desktopPopoverPosition.width,\n }}\n >\n <HourPickerScrollButton\n direction=\"up\"\n viewportRef={desktopContentRef}\n />\n\n <div\n ref={desktopContentRef}\n role=\"listbox\"\n className=\"max-h-64 overflow-y-auto p-1 [overscroll-behavior:contain] [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden\"\n >\n {options.map((option) => {\n const isChecked = option.value === value\n\n return (\n <div\n key={option.value}\n role=\"option\"\n aria-selected={isChecked}\n data-value={option.value}\n data-state={isChecked ? \"checked\" : \"unchecked\"}\n data-disabled={option.disabled ? \"\" : undefined}\n className={cn(\n \"relative flex w-full select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none cursor-pointer\",\n option.disabled && \"pointer-events-none opacity-50\",\n highlightedValue === option.value && \"bg-accent text-accent-foreground\",\n )}\n onMouseDown={(event) => {\n event.preventDefault()\n }}\n onClick={() => {\n if (option.disabled) return\n\n setTriggerDraftValueRef.current?.(option.value)\n updateHighlightedValue(option.value)\n triggerInputRef.current?.focus({ preventScroll: true })\n commitValue(option.value)\n setOpen(false)\n }}\n onPointerEnter={() => {\n if (keyboardNavigationActiveRef.current) return\n keyboardNavigationActiveRef.current = false\n updateHighlightedValue(option.value)\n }}\n onPointerMove={(event) => {\n if (keyboardNavigationActiveRef.current && event.movementX === 0 && event.movementY === 0) {\n return\n }\n keyboardNavigationActiveRef.current = false\n updateHighlightedValue(option.value)\n }}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n {isChecked ? <Check aria-hidden className=\"h-4 w-4\" /> : null}\n </span>\n\n <div className=\"flex flex-col\">\n <span>{option.label}</span>\n {option.description != null ? (\n <span data-slot=\"description\" className=\"text-xs text-muted-foreground\">\n {option.description}\n </span>\n ) : null}\n </div>\n </div>\n )\n })}\n </div>\n\n <HourPickerScrollButton\n direction=\"down\"\n viewportRef={desktopContentRef}\n />\n </div>\n </>\n )\n\n if (typeof document === \"undefined\") return popover\n return createPortal(popover, document.body)\n })() : null}\n </div>\n </div>\n )\n}\n\nHourPickerInput.displayName = \"HourPickerInput\"\n\nexport type HourPickerFieldProps = HourPickerInputProps\n\nfunction HourPickerSelectField({\n id,\n value,\n onChange,\n onValueUpdate,\n options,\n placeholder = \"Select time\",\n className,\n inputClassName,\n disabled,\n readOnly,\n open,\n onOpenChange,\n triggerTestId,\n contentTestId,\n isHydrated,\n}: HourPickerFieldProps) {\n const reactId = React.useId()\n const triggerId = id ?? `hours-picker-${reactId}`\n const triggerRef = React.useRef<HTMLButtonElement | null>(null)\n const containerRef = React.useRef<HTMLDivElement | null>(null)\n const popoverRef = React.useRef<HTMLDivElement | null>(null)\n const viewportRef = React.useRef<HTMLDivElement | null>(null)\n const [popoverPosition, setPopoverPosition] = React.useState(() => ({\n left: 0,\n top: 0,\n width: 0,\n }))\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false)\n const resolvedOpen = open ?? uncontrolledOpen\n const setOpen = onOpenChange ?? setUncontrolledOpen\n const openRef = React.useRef(false)\n openRef.current = resolvedOpen\n\n const commitValue = React.useCallback(\n (next: string) => {\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n\n if (onValueUpdate) {\n onValueUpdate(next)\n }\n onChange(next)\n },\n [onChange, onValueUpdate, options],\n )\n\n const updatePopoverPosition = React.useCallback(() => {\n if (typeof window === \"undefined\") {\n return\n }\n\n const trigger = triggerRef.current\n const popover = popoverRef.current\n if (!(trigger instanceof HTMLElement) || !popover) {\n return\n }\n\n const rect = trigger.getBoundingClientRect()\n const popoverHeight = popover.offsetHeight\n const viewportWidth = window.innerWidth ?? 0\n const viewportHeight = window.innerHeight ?? 0\n const padding = 8\n const width = rect.width\n\n let left = rect.left\n if (left + width > viewportWidth - padding) {\n left = Math.max(padding, viewportWidth - width - padding)\n }\n if (left < padding) {\n left = padding\n }\n\n let top = rect.bottom + padding\n const overflowBottom = top + popoverHeight > viewportHeight - padding\n const aboveTop = rect.top - popoverHeight - padding\n if (overflowBottom && aboveTop >= padding) {\n top = aboveTop\n }\n\n if (top < padding) {\n top = padding\n }\n if (top + popoverHeight > viewportHeight - padding) {\n top = Math.max(padding, viewportHeight - popoverHeight - padding)\n }\n\n setPopoverPosition({ left, top, width })\n }, [])\n\n React.useLayoutEffect(() => {\n if (!resolvedOpen || disabled) {\n return\n }\n if (typeof window === \"undefined\") {\n return\n }\n\n updatePopoverPosition()\n const rafId = window.requestAnimationFrame(updatePopoverPosition)\n\n window.addEventListener(\"scroll\", updatePopoverPosition, true)\n window.addEventListener(\"resize\", updatePopoverPosition)\n return () => {\n window.cancelAnimationFrame(rafId)\n window.removeEventListener(\"scroll\", updatePopoverPosition, true)\n window.removeEventListener(\"resize\", updatePopoverPosition)\n }\n }, [disabled, resolvedOpen, updatePopoverPosition])\n\n React.useEffect(() => {\n if (!resolvedOpen) {\n return\n }\n\n const ownerDocument = containerRef.current?.ownerDocument ?? document\n const ownerWindow = ownerDocument.defaultView ?? window\n\n const handlePointerDown = (event: PointerEvent) => {\n const target = event.target\n if (!(target instanceof Node)) {\n return\n }\n\n const container = containerRef.current\n if (container?.contains(target)) {\n return\n }\n\n const popover = popoverRef.current\n if (popover?.contains(target)) {\n return\n }\n\n setOpen(false)\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\" || !openRef.current) {\n return\n }\n\n const target = event.target\n if (!(target instanceof Node)) {\n return\n }\n\n const container = containerRef.current\n const popover = popoverRef.current\n if (!container?.contains(target) && !popover?.contains(target)) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n setOpen(false)\n triggerRef.current?.focus({ preventScroll: true })\n }\n\n ownerDocument.addEventListener(\"pointerdown\", handlePointerDown, true)\n ownerWindow.addEventListener(\"keydown\", handleKeyDown, true)\n return () => {\n ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown, true)\n ownerWindow.removeEventListener(\"keydown\", handleKeyDown, true)\n }\n }, [resolvedOpen, setOpen])\n\n const selectedOption = options.find((option) => option.value === value)\n\n return (\n <div\n data-slot=\"hours-picker-field\"\n className={cn(\"w-[150px]\", className)}\n ref={containerRef}\n >\n <button\n ref={triggerRef}\n id={triggerId}\n type=\"button\"\n role=\"combobox\"\n aria-expanded={resolvedOpen}\n aria-controls={`${triggerId}-content`}\n disabled={disabled}\n data-testid={triggerTestId}\n data-hydrated={isHydrated ? \"true\" : undefined}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n \"hover:bg-accent hover:text-accent-foreground\",\n !value && \"text-muted-foreground\",\n resolvedOpen && \"ring-2 ring-primary ring-offset-2\",\n inputClassName,\n )}\n onClick={() => {\n if (disabled || readOnly) {\n return\n }\n setOpen(!resolvedOpen)\n }}\n >\n <span className=\"line-clamp-1 text-left\">\n {selectedOption ? selectedOption.label : placeholder}\n </span>\n <ChevronDown aria-hidden className=\"h-4 w-4 shrink-0 opacity-50\" />\n </button>\n\n {resolvedOpen ? (() => {\n const popover = (\n <>\n <div\n ref={popoverRef}\n id={`${triggerId}-content`}\n data-testid={contentTestId}\n data-state=\"open\"\n className={cn(\n \"fixed z-[60] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n )}\n style={{\n left: popoverPosition.left,\n top: popoverPosition.top,\n width: popoverPosition.width,\n }}\n >\n <HourPickerScrollButton\n direction=\"up\"\n viewportRef={viewportRef}\n />\n\n <div\n ref={viewportRef}\n role=\"listbox\"\n className=\"max-h-64 overflow-y-auto p-1 [overscroll-behavior:contain] [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden\"\n >\n {options.map((option) => {\n const isChecked = option.value === value\n\n return (\n <div\n key={option.value}\n role=\"option\"\n aria-selected={isChecked}\n data-value={option.value}\n data-state={isChecked ? \"checked\" : \"unchecked\"}\n data-disabled={option.disabled ? \"\" : undefined}\n className={cn(\n \"relative flex w-full select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none cursor-pointer\",\n option.disabled && \"pointer-events-none opacity-50\",\n isChecked && \"bg-accent text-accent-foreground\",\n )}\n onMouseDown={(event) => {\n event.preventDefault()\n }}\n onClick={() => {\n if (option.disabled || readOnly) {\n return\n }\n\n commitValue(option.value)\n setOpen(false)\n triggerRef.current?.focus({ preventScroll: true })\n }}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n {isChecked ? <Check aria-hidden className=\"h-4 w-4\" /> : null}\n </span>\n\n <div className=\"flex flex-col\">\n <span>{option.label}</span>\n {option.description != null ? (\n <span data-slot=\"description\" className=\"text-xs text-muted-foreground\">\n {option.description}\n </span>\n ) : null}\n </div>\n </div>\n )\n })}\n </div>\n\n <HourPickerScrollButton\n direction=\"down\"\n viewportRef={viewportRef}\n />\n </div>\n </>\n )\n\n if (typeof document === \"undefined\") {\n return popover\n }\n\n return createPortal(popover, document.body)\n })() : null}\n </div>\n )\n}\n\nexport function HourPickerField(props: HourPickerFieldProps) {\n const isTouchDevice = useIsTouchDevice()\n\n if (isTouchDevice) {\n return <HourPickerSelectField {...props} />\n }\n\n return <HourPickerInput {...props} />\n}\n\nHourPickerField.displayName = \"HourPickerField\"\n\ntype HourPickerMaskedSelectTriggerProps = {\n id: string\n placeholder: string\n value: string | null\n onValueUpdate: (value: string | null) => void\n onCommit: (value: string | null) => void\n options: HourPickerOption[]\n disabled?: boolean\n readOnly?: boolean\n open: boolean\n setOpen: (open: boolean) => void\n inputClassName?: string\n triggerTestId?: string\n isHydrated?: boolean\n highlightedValueRef: React.MutableRefObject<string | null>\n setHighlightedValue: (value: string | null) => void\n markKeyboardNavigation: () => void\n inputRef: (node: HTMLInputElement | null) => void\n onDraftValueHandlerChange: (handler: ((value: string) => void) | null) => void\n}\n\nfunction HourPickerMaskedSelectTrigger({\n id,\n placeholder,\n value,\n onValueUpdate,\n onCommit,\n options,\n disabled,\n readOnly,\n open,\n setOpen,\n inputClassName,\n triggerTestId,\n isHydrated,\n highlightedValueRef,\n setHighlightedValue,\n markKeyboardNavigation,\n inputRef,\n onDraftValueHandlerChange,\n}: HourPickerMaskedSelectTriggerProps) {\n const isEditingRef = React.useRef(false)\n const pointerDownOnInputRef = React.useRef(false)\n const inputWasFocusedOnPointerDownRef = React.useRef(false)\n const ignoreNextMaskCommitValueRef = React.useRef<string | null>(null)\n const lastAcceptedSignatureRef = React.useRef<string | null>(null)\n const clearCommitPendingRef = React.useRef(false)\n\n const [draft, setDraft] = React.useState(() => (value ? value : \"\"))\n\n React.useEffect(() => {\n onDraftValueHandlerChange((nextValue) => {\n setDraft(nextValue)\n })\n return () => {\n onDraftValueHandlerChange(null)\n }\n }, [onDraftValueHandlerChange])\n\n const moveSelection = React.useCallback(\n (direction: -1 | 1) => {\n const base = highlightedValueRef.current ?? value ?? \"\"\n\n let baseIndex = options.findIndex((option) => option.value === base)\n if (baseIndex === -1) {\n baseIndex = direction === 1 ? -1 : options.length\n }\n\n for (let nextIndex = baseIndex + direction; nextIndex >= 0 && nextIndex < options.length; nextIndex += direction) {\n const nextOption = options[nextIndex]\n if (!isOptionSelectable(nextOption)) continue\n\n setHighlightedValue(nextOption.value)\n ignoreNextMaskCommitValueRef.current = nextOption.value\n setDraft(nextOption.value)\n onValueUpdate(nextOption.value)\n return\n }\n },\n [highlightedValueRef, onValueUpdate, options, setHighlightedValue, value],\n )\n\n React.useEffect(() => {\n if (isEditingRef.current) return\n setDraft(value ? value : \"\")\n }, [value])\n\n React.useEffect(() => {\n lastAcceptedSignatureRef.current = getAcceptedInputSignature(draft)\n }, [draft])\n\n React.useEffect(() => {\n if (value === null) {\n clearCommitPendingRef.current = false\n }\n }, [value])\n\n const triggerClassName = cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 pr-10 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"transition-colors group-hover:bg-accent group-hover:text-accent-foreground\",\n !draft && \"text-muted-foreground\",\n open && \"ring-2 ring-primary ring-offset-2\",\n \"[&_[data-slot='description']]:hidden\",\n inputClassName,\n )\n\n return (\n <div className=\"relative group\">\n <IMaskInput\n id={id}\n data-testid={triggerTestId}\n data-hydrated={isHydrated ? \"true\" : undefined}\n type=\"text\"\n disabled={disabled}\n readOnly={readOnly}\n inputRef={inputRef}\n autoComplete={\"off\"}\n mask={[\n { mask: \"00:00\", lazy: true },\n { mask: \"0:00\", lazy: true },\n ]}\n dispatch={(appended, dynamicMasked) => {\n const digits = (dynamicMasked.value + appended).replace(/\\D/g, \"\")\n if (digits.length <= 2) return dynamicMasked.compiledMasks[0]\n if (digits.length >= 4) return dynamicMasked.compiledMasks[0]\n\n const hourPrefix = pad2(Number(digits.slice(0, 2)))\n const hasTwoDigitHour = options.some((option) => option.value.startsWith(`${hourPrefix}:`))\n if (hasTwoDigitHour) return dynamicMasked.compiledMasks[0]\n\n return dynamicMasked.compiledMasks[1]\n }}\n placeholder={placeholder}\n value={draft}\n className={triggerClassName}\n onAccept={(accepted, _mask, event) => {\n if (!event) {\n return\n }\n const nextText = typeof accepted === \"string\" ? accepted : String(accepted ?? \"\")\n const nextDigits = nextText.replace(/\\D/g, \"\")\n const nextSignature = getAcceptedInputSignature(nextText)\n if (lastAcceptedSignatureRef.current === nextSignature) {\n return\n }\n lastAcceptedSignatureRef.current = nextSignature\n setDraft(nextText)\n\n if (nextDigits.length !== 0) {\n clearCommitPendingRef.current = false\n return\n }\n\n if (value && !clearCommitPendingRef.current) {\n clearCommitPendingRef.current = true\n onCommit(null)\n }\n }}\n onComplete={(completed, _mask, event) => {\n if (!event) {\n return\n }\n const nextText = typeof completed === \"string\" ? completed : String(completed ?? \"\")\n if (ignoreNextMaskCommitValueRef.current === nextText) {\n ignoreNextMaskCommitValueRef.current = null\n return\n }\n\n const resolved = parseTimeInputWithSelectableOption(nextText, options)\n if (!resolved) {\n return\n }\n\n if (resolved.selectableValue) {\n setHighlightedValue(resolved.selectableValue)\n setDraft(resolved.selectableValue)\n\n if (value === resolved.selectableValue) {\n return\n }\n\n onCommit(resolved.selectableValue)\n return\n }\n\n const targetMinutes = timeStringToMinutes(resolved.parsed)\n if (targetMinutes == null) {\n return\n }\n\n const closestOption = findClosestSelectableOption(targetMinutes, options)\n if (!closestOption) {\n return\n }\n\n setHighlightedValue(closestOption.value)\n }}\n onPointerDown={() => {\n pointerDownOnInputRef.current = true\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onMouseDown={(event) => {\n pointerDownOnInputRef.current = true\n inputWasFocusedOnPointerDownRef.current = typeof document !== \"undefined\" && document.activeElement === event.currentTarget\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onClick={() => {\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onKeyDown={(event) => {\n if (disabled) {\n return\n }\n\n if (event.key === \"Tab\" && open && !event.defaultPrevented) {\n setOpen(false)\n return\n }\n\n if (event.key === \"Escape\") {\n if (!open) {\n return\n }\n event.preventDefault()\n setOpen(false)\n return\n }\n\n if (!open && !event.defaultPrevented) {\n const shouldReopen =\n (event.key.length === 1 || event.key === \"Backspace\" || event.key === \"Delete\") &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey\n\n if (shouldReopen) {\n setOpen(true)\n }\n }\n\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n markKeyboardNavigation()\n event.preventDefault()\n\n if (!open) {\n setOpen(true)\n return\n }\n\n moveSelection(event.key === \"ArrowDown\" ? 1 : -1)\n return\n }\n\n if (event.key === \"Enter\") {\n markKeyboardNavigation()\n const resolved = parseTimeInputWithSelectableOption(draft, options)\n if (!resolved) {\n if (!open) {\n return\n }\n\n if (draft.trim() !== \"\") {\n return\n }\n\n const highlightedOption = options.find((option) => option.value === highlightedValueRef.current)\n const fallbackValue =\n (isOptionSelectable(highlightedOption) ? highlightedOption?.value : undefined) ??\n options.find((option) => isOptionSelectable(option))?.value\n\n if (!fallbackValue) {\n return\n }\n\n event.preventDefault()\n setHighlightedValue(fallbackValue)\n setDraft(fallbackValue)\n onCommit(fallbackValue)\n setOpen(false)\n return\n }\n\n if (resolved.selectableValue) {\n event.preventDefault()\n setHighlightedValue(resolved.selectableValue)\n setDraft(resolved.selectableValue)\n onCommit(resolved.selectableValue)\n setOpen(false)\n return\n }\n\n const targetMinutes = timeStringToMinutes(resolved.parsed)\n if (targetMinutes == null) {\n return\n }\n\n const closestOption = findClosestSelectableOption(targetMinutes, options)\n if (!closestOption) {\n return\n }\n\n event.preventDefault()\n setHighlightedValue(closestOption.value)\n setDraft(closestOption.value)\n onCommit(closestOption.value)\n setOpen(false)\n return\n }\n }}\n onFocus={(event) => {\n const shouldSelectAll = !pointerDownOnInputRef.current || !inputWasFocusedOnPointerDownRef.current\n pointerDownOnInputRef.current = false\n inputWasFocusedOnPointerDownRef.current = false\n isEditingRef.current = true\n if (shouldSelectAll) {\n const element = event.currentTarget\n requestAnimationFrame(() => element.select())\n }\n\n if (disabled) {\n return\n }\n\n if (open) {\n return\n }\n\n setOpen(true)\n }}\n onBlur={() => {\n isEditingRef.current = false\n\n const trimmed = draft.trim()\n if (!trimmed) {\n setDraft(value ? value : \"\")\n return\n }\n\n const resolved = parseTimeInputWithSelectableOption(trimmed, options)\n if (!resolved) {\n setDraft(value ? value : \"\")\n return\n }\n\n if (!resolved.selectableValue) {\n setDraft(value ? value : \"\")\n return\n }\n\n setDraft(resolved.selectableValue)\n if (value !== resolved.selectableValue) {\n onCommit(resolved.selectableValue)\n }\n }}\n />\n\n <button\n type=\"button\"\n tabIndex={-1}\n disabled={disabled}\n data-slot=\"hours-picker-input-toggle\"\n className={cn(\n \"absolute right-1 top-1/2 inline-flex size-8 -translate-y-1/2 items-center justify-center rounded-md text-muted-foreground transition-colors hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n )}\n aria-label={open ? \"Close time picker\" : \"Open time picker\"}\n onPointerDown={(event) => {\n event.preventDefault()\n }}\n onMouseDown={(event) => {\n event.preventDefault()\n }}\n onClick={() => {\n if (disabled) return\n setOpen(!open)\n }}\n >\n <ChevronDown aria-hidden className=\"size-4\" />\n </button>\n </div>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index302.js","names":["Check","ChevronDown","ChevronUp","React","createPortal","IMaskInput","IMask","InputMask","useIsTouchDevice","cn","imaskAny","HourPickerOption","value","label","selectedLabel","ReactNode","disabled","description","pad2","String","padStart","parseTimeInput","raw","trimmed","trim","match","exec","hours","Number","minutes","isFinite","getAcceptedInputSignature","parsed","digits","replace","length","minutePart","slice","hourPart","ParsedTimeInputResult","selectableValue","parseTimeInputWithSelectableOption","options","parsedOption","find","option","isOptionSelectable","timeStringToMinutes","findClosestSelectableOption","targetMinutes","bestOption","bestDiff","POSITIVE_INFINITY","bestMinutes","NEGATIVE_INFINITY","optionMinutes","diff","Math","abs","HourPickerScrollButtonDirection","HourPickerScrollButtonProps","direction","viewportRef","RefObject","HTMLElement","speed","className","HourPickerScrollButton","setDisabled","useState","animationRef","useRef","undefined","lastTimeRef","isScrollingRef","checkScrollability","useCallback","viewport","current","scrollTop","scrollHeight","clientHeight","tolerance","canScrollUp","canScrollDown","hasScrollableContent","shouldDisable","useEffect","handleScroll","handleResize","addEventListener","passive","resizeObserver","ResizeObserver","observe","mutationObserver","MutationObserver","childList","subtree","removeEventListener","disconnect","stopScrolling","cancelAnimationFrame","smoothScroll","currentTime","deltaTime","distance","requestAnimationFrame","oldScrollTop","maxScroll","newScrollTop","max","min","scrollTo","top","canContinue","setTimeout","startScrolling","HourPickerInputProps","id","onChange","onValueUpdate","placeholder","inputClassName","readOnly","open","onOpenChange","triggerTestId","contentTestId","isHydrated","HourPickerInput","openProp","reactId","useId","triggerId","triggerInputRef","HTMLInputElement","setTriggerDraftValueRef","setTriggerDraftValueHandler","handler","highlightedValueRef","keyboardNavigationActiveRef","highlightedValue","setHighlightedValue","containerRef","HTMLDivElement","desktopPopoverRef","desktopContentRef","desktopPopoverPosition","setDesktopPopoverPosition","left","width","uncontrolledOpen","setUncontrolledOpen","setOpen","openRef","input","document","activeElement","focus","preventScroll","updateHighlightedValue","next","markKeyboardNavigation","currentOption","firstEnabled","updateValue","matchingOption","commitValue","ownerDocument","ownerWindow","defaultView","window","handlePointerDown","event","PointerEvent","target","Node","container","contains","popover","handleKeyDown","KeyboardEvent","key","preventDefault","stopPropagation","handleWheel","WheelEvent","deltaY","maxScrollTop","atTop","atBottom","isWheelOverViewport","nextScrollTop","trigger","isActive","observer","IntersectionObserver","entries","entry","isIntersecting","updateDesktopPopoverPosition","rect","getBoundingClientRect","popoverHeight","offsetHeight","viewportWidth","innerWidth","viewportHeight","innerHeight","padding","bottom","overflowBottom","aboveTop","useLayoutEffect","rafId","run","selected","querySelector","targetTop","offsetTop","targetBottom","viewportBottom","all","Array","from","querySelectorAll","lastDisabledBefore","el","isDisabled","hasAttribute","offset","raf","selectedOption","node","map","isChecked","movementX","movementY","body","displayName","HourPickerFieldProps","HourPickerSelectField","triggerRef","HTMLButtonElement","popoverRef","popoverPosition","setPopoverPosition","resolvedOpen","updatePopoverPosition","HourPickerField","props","$","_c","isTouchDevice","t0","HourPickerMaskedSelectTriggerProps","onCommit","MutableRefObject","inputRef","onDraftValueHandlerChange","HourPickerMaskedSelectTrigger","isEditingRef","pointerDownOnInputRef","inputWasFocusedOnPointerDownRef","ignoreNextMaskCommitValueRef","lastAcceptedSignatureRef","clearCommitPendingRef","t1","draft","setDraft","t2","t3","nextValue","t4","base","baseIndex","findIndex","nextIndex","nextOption","moveSelection","t5","t6","t7","t8","t10","t9","t11","t12","t13","t14","triggerClassName","t15","t16","Symbol","for","mask","lazy","t17","appended","dynamicMasked","compiledMasks","hourPrefix","hasTwoDigitHour","some","option_0","startsWith","t18","accepted","_mask","nextText","nextDigits","nextSignature","t19","completed","_mask_0","event_0","nextText_0","resolved","closestOption","t20","t21","t22","event_1","currentTarget","t23","event_2","defaultPrevented","shouldReopen","ctrlKey","metaKey","altKey","resolved_0","highlightedOption","option_1","fallbackValue","_temp","targetMinutes_0","closestOption_0","t24","event_3","shouldSelectAll","element","select","t25","resolved_1","t26","t27","t28","t29","t30","t31","t32","_temp2","_temp3","t33","event_5","event_4","option_2"],"sources":["../src/components/HourPickerField/index.tsx"],"sourcesContent":["import { Check, ChevronDown, ChevronUp } from \"lucide-react\"\nimport * as React from \"react\"\nimport { createPortal } from \"react-dom\"\nimport { IMaskInput } from \"react-imask\"\nimport IMask, { InputMask } from \"imask\"\n\nimport { useIsTouchDevice } from \"@/helpers/useIsTouchDevice\"\nimport { cn } from \"@/lib/utils\"\n\n\n// WARNING: used to preserve input mask even with tree shaking\n// DO NOT REMOVE THIS CODE OR THIS COMMENT\nconst imaskAny = IMask as any\nif (typeof imaskAny.InputMask !== \"function\") {\n imaskAny.InputMask = InputMask\n}\n\n\nexport type HourPickerOption = {\n value: string\n label: string\n selectedLabel?: React.ReactNode\n disabled?: boolean\n description?: React.ReactNode\n}\n\nfunction pad2(value: number) {\n return String(value).padStart(2, \"0\")\n}\n\nfunction parseTimeInput(raw: string) {\n const trimmed = raw.trim()\n if (!trimmed) return null\n\n const match = /^(\\d{1,2}):(\\d{2})$/.exec(trimmed)\n if (!match) {\n return null\n }\n\n const hours = Number(match[1])\n const minutes = Number(match[2])\n if (!Number.isFinite(hours) || !Number.isFinite(minutes)) {\n return null\n }\n\n if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59) {\n return null\n }\n\n return `${pad2(hours)}:${pad2(minutes)}`\n}\n\nfunction getAcceptedInputSignature(raw: string) {\n const parsed = parseTimeInput(raw)\n if (parsed) {\n return `parsed:${parsed}`\n }\n\n const digits = raw.replace(/\\D/g, \"\")\n if (!digits) {\n return \"empty\"\n }\n\n if (digits.length <= 2) {\n return `hour:${Number(digits)}`\n }\n\n const minutePart = digits.slice(-2)\n const hourPart = digits.slice(0, -2)\n return `hour-minute:${Number(hourPart)}:${minutePart}`\n}\n\ntype ParsedTimeInputResult = {\n parsed: string\n selectableValue: string | null\n}\n\nfunction parseTimeInputWithSelectableOption(raw: string, options: HourPickerOption[]): ParsedTimeInputResult | null {\n const parsed = parseTimeInput(raw)\n if (!parsed) return null\n\n const parsedOption = options.find((option) => option.value === parsed)\n if (isOptionSelectable(parsedOption)) {\n return { parsed, selectableValue: parsed }\n }\n\n return { parsed, selectableValue: null }\n}\n\nfunction timeStringToMinutes(value: string) {\n const match = /^(\\d{2}):(\\d{2})$/.exec(value)\n if (!match) {\n return null\n }\n\n const hours = Number(match[1])\n const minutes = Number(match[2])\n\n if (!Number.isFinite(hours) || !Number.isFinite(minutes)) {\n return null\n }\n\n return hours * 60 + minutes\n}\n\nfunction isOptionSelectable(option: HourPickerOption | undefined) {\n if (!option) return false\n return !option.disabled\n}\n\nfunction findClosestSelectableOption(targetMinutes: number, options: HourPickerOption[]) {\n let bestOption: HourPickerOption | null = null\n let bestDiff = Number.POSITIVE_INFINITY\n let bestMinutes = Number.NEGATIVE_INFINITY\n\n for (const option of options) {\n if (!isOptionSelectable(option)) continue\n const optionMinutes = timeStringToMinutes(option.value)\n if (optionMinutes == null) continue\n\n const diff = Math.abs(optionMinutes - targetMinutes)\n if (diff < bestDiff || (diff === bestDiff && optionMinutes > bestMinutes)) {\n bestOption = option\n bestDiff = diff\n bestMinutes = optionMinutes\n }\n }\n\n return bestOption\n}\n\ntype HourPickerScrollButtonDirection = \"up\" | \"down\"\n\ntype HourPickerScrollButtonProps = {\n direction: HourPickerScrollButtonDirection\n viewportRef: React.RefObject<HTMLElement | null>\n speed?: number\n className?: string\n}\n\nfunction HourPickerScrollButton({\n direction,\n viewportRef,\n speed = 400,\n className,\n}: HourPickerScrollButtonProps) {\n const [disabled, setDisabled] = React.useState(true)\n const animationRef = React.useRef<number | undefined>(undefined)\n const lastTimeRef = React.useRef<number | undefined>(undefined)\n const isScrollingRef = React.useRef(false)\n\n const checkScrollability = React.useCallback(() => {\n const viewport = viewportRef.current\n if (!viewport) {\n setDisabled(true)\n return\n }\n\n const { scrollTop, scrollHeight, clientHeight } = viewport\n const tolerance = 2\n\n const canScrollUp = scrollTop > tolerance\n const canScrollDown = scrollTop < (scrollHeight - clientHeight - tolerance)\n const hasScrollableContent = scrollHeight > clientHeight + tolerance\n\n if (!hasScrollableContent) {\n setDisabled(true)\n return\n }\n\n const shouldDisable = direction === \"up\" ? !canScrollUp : !canScrollDown\n setDisabled(shouldDisable)\n }, [direction, viewportRef])\n\n React.useEffect(() => {\n const viewport = viewportRef.current\n if (!viewport) return\n\n checkScrollability()\n\n const handleScroll = () => checkScrollability()\n const handleResize = () => checkScrollability()\n\n viewport.addEventListener(\"scroll\", handleScroll, { passive: true })\n\n const resizeObserver = new ResizeObserver(handleResize)\n resizeObserver.observe(viewport)\n\n const mutationObserver = new MutationObserver(handleResize)\n mutationObserver.observe(viewport, { childList: true, subtree: true })\n\n return () => {\n viewport.removeEventListener(\"scroll\", handleScroll)\n resizeObserver.disconnect()\n mutationObserver.disconnect()\n }\n }, [viewportRef, checkScrollability])\n\n const stopScrolling = React.useCallback(() => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current)\n animationRef.current = undefined\n }\n isScrollingRef.current = false\n lastTimeRef.current = undefined\n }, [])\n\n const smoothScroll = React.useCallback(\n (currentTime: number) => {\n const viewport = viewportRef.current\n if (!viewport || disabled || !isScrollingRef.current) {\n stopScrolling()\n return\n }\n\n if (!lastTimeRef.current) {\n lastTimeRef.current = currentTime\n }\n\n const deltaTime = currentTime - lastTimeRef.current\n const distance = (speed * deltaTime) / 1000\n\n if (distance < 0.1) {\n animationRef.current = requestAnimationFrame(smoothScroll)\n return\n }\n\n const oldScrollTop = viewport.scrollTop\n const maxScroll = viewport.scrollHeight - viewport.clientHeight\n\n let newScrollTop: number\n if (direction === \"up\") {\n newScrollTop = Math.max(0, oldScrollTop - distance)\n } else {\n newScrollTop = Math.min(maxScroll, oldScrollTop + distance)\n }\n\n viewport.scrollTo({ top: newScrollTop })\n\n lastTimeRef.current = currentTime\n\n const tolerance = 1\n const canContinue =\n direction === \"up\"\n ? newScrollTop > tolerance\n : newScrollTop < (maxScroll - tolerance)\n\n if (canContinue && Math.abs(newScrollTop - oldScrollTop) > 0.01) {\n animationRef.current = requestAnimationFrame(smoothScroll)\n } else {\n stopScrolling()\n setTimeout(checkScrollability, 16)\n }\n },\n [checkScrollability, direction, disabled, speed, stopScrolling, viewportRef],\n )\n\n const startScrolling = React.useCallback(() => {\n if (disabled || !viewportRef.current || isScrollingRef.current) return\n\n isScrollingRef.current = true\n lastTimeRef.current = undefined\n animationRef.current = requestAnimationFrame(smoothScroll)\n }, [disabled, smoothScroll, viewportRef])\n\n React.useEffect(() => stopScrolling, [stopScrolling])\n\n return (\n <div\n className={cn(\n \"flex items-center justify-center py-1 select-none\",\n disabled ? \"cursor-default opacity-40\" : \"cursor-pointer opacity-100 hover:bg-accent/20\",\n className\n )}\n onPointerEnter={() => {\n if (!disabled) startScrolling()\n }}\n onPointerMove={() => {\n if (!disabled && !isScrollingRef.current) startScrolling()\n }}\n onPointerLeave={() => {\n stopScrolling()\n }}\n >\n {direction === \"up\"\n ? <ChevronUp aria-hidden className=\"h-4 w-4 opacity-50\" />\n : <ChevronDown aria-hidden className=\"h-4 w-4 opacity-50\" />}\n </div>\n )\n}\n\nexport type HourPickerInputProps = {\n id?: string\n value: string | null\n onChange: (value: string | null) => void\n onValueUpdate?: (value: string | null) => void\n options: HourPickerOption[]\n placeholder?: string\n className?: string\n inputClassName?: string\n disabled?: boolean\n readOnly?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n triggerTestId?: string\n contentTestId?: string\n isHydrated?: boolean\n}\n\nexport function HourPickerInput({\n id,\n value,\n onChange,\n onValueUpdate,\n options,\n placeholder = \"Select time\",\n className,\n inputClassName,\n disabled,\n readOnly,\n open: openProp,\n onOpenChange,\n triggerTestId,\n contentTestId,\n isHydrated,\n}: HourPickerInputProps) {\n const reactId = React.useId()\n const triggerId = id ?? `hours-picker-${reactId}`\n const triggerInputRef = React.useRef<HTMLInputElement | null>(null)\n const setTriggerDraftValueRef = React.useRef<((value: string) => void) | null>(null)\n const setTriggerDraftValueHandler = React.useCallback((handler: ((value: string) => void) | null) => {\n setTriggerDraftValueRef.current = handler\n }, [])\n const highlightedValueRef = React.useRef<string | null>(null)\n const keyboardNavigationActiveRef = React.useRef(false)\n const [highlightedValue, setHighlightedValue] = React.useState<string | null>(null)\n const containerRef = React.useRef<HTMLDivElement | null>(null)\n const desktopPopoverRef = React.useRef<HTMLDivElement | null>(null)\n const desktopContentRef = React.useRef<HTMLDivElement | null>(null)\n const [desktopPopoverPosition, setDesktopPopoverPosition] = React.useState(() => ({\n left: 0,\n top: 0,\n width: 0,\n }))\n\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false)\n const open = openProp ?? uncontrolledOpen\n const setOpen = onOpenChange ?? setUncontrolledOpen\n const openRef = React.useRef(false)\n openRef.current = open\n\n React.useEffect(() => {\n if (!open) {\n return\n }\n if (disabled || readOnly) {\n return\n }\n\n const input = triggerInputRef.current\n if (!(input instanceof HTMLInputElement)) {\n return\n }\n if (typeof document !== \"undefined\" && document.activeElement === input) {\n return\n }\n\n input.focus({ preventScroll: true })\n }, [disabled, open, readOnly])\n\n const updateHighlightedValue = React.useCallback((next: string | null) => {\n highlightedValueRef.current = next\n setHighlightedValue(next)\n }, [])\n\n const markKeyboardNavigation = React.useCallback(() => {\n keyboardNavigationActiveRef.current = true\n }, [])\n\n React.useEffect(() => {\n if (!open) return\n\n const currentOption = options.find((option) => option.value === value)\n if (currentOption && isOptionSelectable(currentOption)) {\n updateHighlightedValue(currentOption.value)\n return\n }\n\n const firstEnabled = options.find((option) => isOptionSelectable(option))\n updateHighlightedValue(firstEnabled?.value ?? null)\n }, [open, options, updateHighlightedValue, value])\n\n const updateValue = React.useCallback(\n (next: string | null) => {\n if (next === null) {\n if (onValueUpdate) {\n onValueUpdate(null)\n }\n return\n }\n\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n\n if (onValueUpdate) {\n onValueUpdate(next)\n }\n },\n [onValueUpdate, options],\n )\n\n const commitValue = React.useCallback(\n (next: string | null) => {\n if (next === null) {\n if (onValueUpdate) {\n onValueUpdate(null)\n }\n onChange(null)\n return\n }\n\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n\n if (onValueUpdate) {\n onValueUpdate(next)\n }\n\n onChange(next)\n },\n [onChange, onValueUpdate, options],\n )\n\n React.useEffect(() => {\n if (!open) return\n\n const ownerDocument = containerRef.current?.ownerDocument ?? document\n const ownerWindow = ownerDocument.defaultView ?? window\n\n const handlePointerDown = (event: PointerEvent) => {\n const target = event.target\n if (!(target instanceof Node)) {\n return\n }\n\n const container = containerRef.current\n if (!container) {\n return\n }\n\n if (container.contains(target)) {\n return\n }\n\n const popover = desktopPopoverRef.current\n if (popover?.contains(target)) {\n return\n }\n\n setOpen(false)\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") {\n return\n }\n if (!openRef.current) {\n return\n }\n\n const target = event.target\n if (!(target instanceof Node)) {\n return\n }\n\n const container = containerRef.current\n const popover = desktopPopoverRef.current\n if (!container?.contains(target) && !popover?.contains(target)) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n setOpen(false)\n }\n\n ownerDocument.addEventListener(\"pointerdown\", handlePointerDown, true)\n ownerWindow.addEventListener(\"keydown\", handleKeyDown, true)\n return () => {\n ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown, true)\n ownerWindow.removeEventListener(\"keydown\", handleKeyDown, true)\n }\n }, [open, setOpen])\n\n React.useEffect(() => {\n if (!open) {\n return\n }\n\n const popover = desktopPopoverRef.current\n if (!popover) {\n return\n }\n\n const handleWheel = (event: WheelEvent) => {\n const viewport = desktopContentRef.current\n if (!viewport) {\n return\n }\n\n const deltaY = event.deltaY\n if (deltaY === 0) {\n return\n }\n\n const maxScrollTop = Math.max(0, viewport.scrollHeight - viewport.clientHeight)\n const atTop = viewport.scrollTop <= 0\n const atBottom = viewport.scrollTop >= maxScrollTop\n\n const target = event.target\n const isWheelOverViewport = target instanceof Node && viewport.contains(target)\n\n if (isWheelOverViewport) {\n if ((deltaY < 0 && atTop) || (deltaY > 0 && atBottom)) {\n event.preventDefault()\n }\n return\n }\n\n event.preventDefault()\n const nextScrollTop = Math.min(maxScrollTop, Math.max(0, viewport.scrollTop + deltaY))\n viewport.scrollTop = nextScrollTop\n }\n\n popover.addEventListener(\"wheel\", handleWheel, { passive: false })\n return () => {\n popover.removeEventListener(\"wheel\", handleWheel)\n }\n }, [open])\n\n React.useEffect(() => {\n if (!open) {\n return\n }\n if (openProp !== undefined && !onOpenChange) {\n return\n }\n if (typeof window === \"undefined\") {\n return\n }\n if (!(\"IntersectionObserver\" in window)) {\n return\n }\n\n const trigger = triggerInputRef.current\n if (!(trigger instanceof HTMLElement)) {\n return\n }\n\n let isActive = true\n const observer = new IntersectionObserver(entries => {\n if (!isActive) {\n return\n }\n const entry = entries[0]\n if (entry && !entry.isIntersecting) {\n setOpen(false)\n }\n })\n observer.observe(trigger)\n return () => {\n isActive = false\n observer.disconnect()\n }\n }, [onOpenChange, open, openProp, setOpen])\n\n const updateDesktopPopoverPosition = React.useCallback(() => {\n if (typeof window === \"undefined\") return\n\n const trigger = triggerInputRef.current\n const popover = desktopPopoverRef.current\n if (!(trigger instanceof HTMLElement) || !popover) return\n\n const rect = trigger.getBoundingClientRect()\n const popoverHeight = popover.offsetHeight\n const viewportWidth = window.innerWidth ?? 0\n const viewportHeight = window.innerHeight ?? 0\n const padding = 8\n\n const width = rect.width\n\n let left = rect.left\n if (left + width > viewportWidth - padding) {\n left = Math.max(padding, viewportWidth - width - padding)\n }\n if (left < padding) {\n left = padding\n }\n\n let top = rect.bottom + padding\n const overflowBottom = top + popoverHeight > viewportHeight - padding\n const aboveTop = rect.top - popoverHeight - padding\n if (overflowBottom && aboveTop >= padding) {\n top = aboveTop\n }\n\n if (top < padding) {\n top = padding\n }\n if (top + popoverHeight > viewportHeight - padding) {\n top = Math.max(padding, viewportHeight - popoverHeight - padding)\n }\n\n setDesktopPopoverPosition({ left, top, width })\n }, [])\n\n // React Compiler rejects hook aliasing (useIsomorphicLayoutEffect pattern), so we\n // call useLayoutEffect directly and keep the SSR guard inside the effect.\n React.useLayoutEffect(() => {\n if (!open || disabled) return\n if (typeof window === \"undefined\") return\n\n updateDesktopPopoverPosition()\n const rafId = window.requestAnimationFrame(updateDesktopPopoverPosition)\n\n window.addEventListener(\"scroll\", updateDesktopPopoverPosition, true)\n window.addEventListener(\"resize\", updateDesktopPopoverPosition)\n return () => {\n window.cancelAnimationFrame(rafId)\n window.removeEventListener(\"scroll\", updateDesktopPopoverPosition, true)\n window.removeEventListener(\"resize\", updateDesktopPopoverPosition)\n }\n }, [disabled, open, updateDesktopPopoverPosition])\n\n React.useEffect(() => {\n if (!open) return\n\n const viewport = desktopContentRef.current\n if (!viewport) return\n\n const run = () => {\n const selected = viewport.querySelector(\"[role=\\\"option\\\"][data-state=\\\"checked\\\"]\")\n if (selected instanceof HTMLElement) {\n const padding = 8\n const targetTop = selected.offsetTop - padding\n const targetBottom = selected.offsetTop + selected.offsetHeight + padding\n\n if (targetTop < viewport.scrollTop) {\n viewport.scrollTop = Math.max(0, targetTop)\n return\n }\n\n const viewportBottom = viewport.scrollTop + viewport.clientHeight\n if (targetBottom > viewportBottom) {\n viewport.scrollTop = Math.max(0, targetBottom - viewport.clientHeight)\n }\n return\n }\n\n const all = Array.from(viewport.querySelectorAll(\"[role=\\\"option\\\"]\")) as HTMLElement[]\n if (!all.length) return\n\n let firstEnabled: HTMLElement | undefined\n let lastDisabledBefore: HTMLElement | undefined\n\n for (const el of all) {\n const isDisabled = el.hasAttribute(\"data-disabled\")\n if (!isDisabled) {\n firstEnabled = el\n break\n }\n lastDisabledBefore = el\n }\n\n if (!firstEnabled) return\n\n const target = lastDisabledBefore ? lastDisabledBefore : firstEnabled\n\n const offset = Math.max(0, target.offsetTop - 8)\n viewport.scrollTop = offset\n }\n\n const raf = requestAnimationFrame(run)\n return () => cancelAnimationFrame(raf)\n }, [open, options])\n\n React.useEffect(() => {\n if (!open) return\n if (!highlightedValue) return\n if (!keyboardNavigationActiveRef.current) return\n\n const viewport = desktopContentRef.current\n if (!viewport) return\n\n const target = viewport.querySelector(`[role=\"option\"][data-value=\"${highlightedValue}\"]`)\n if (!(target instanceof HTMLElement)) return\n\n const padding = 8\n const targetTop = target.offsetTop - padding\n const targetBottom = target.offsetTop + target.offsetHeight + padding\n\n if (targetTop < viewport.scrollTop) {\n viewport.scrollTop = Math.max(0, targetTop)\n return\n }\n\n const viewportBottom = viewport.scrollTop + viewport.clientHeight\n if (targetBottom > viewportBottom) {\n viewport.scrollTop = Math.max(0, targetBottom - viewport.clientHeight)\n }\n }, [highlightedValue, open])\n\n const selectedOption = options.find((option) => option.value === value)\n\n return (\n <div\n data-slot=\"hours-picker-input\"\n className={cn(\"w-[150px]\", className)}\n ref={containerRef}\n >\n <div className=\"relative\">\n <HourPickerMaskedSelectTrigger\n id={triggerId}\n placeholder={placeholder}\n value={value}\n onValueUpdate={updateValue}\n onCommit={commitValue}\n options={options}\n selectedLabel={selectedOption?.selectedLabel}\n disabled={disabled}\n readOnly={readOnly}\n open={open}\n setOpen={setOpen}\n inputClassName={inputClassName}\n triggerTestId={triggerTestId}\n isHydrated={isHydrated}\n highlightedValueRef={highlightedValueRef}\n setHighlightedValue={updateHighlightedValue}\n markKeyboardNavigation={markKeyboardNavigation}\n inputRef={(node) => {\n triggerInputRef.current = node\n }}\n onDraftValueHandlerChange={setTriggerDraftValueHandler}\n />\n\n {open ? (() => {\n const popover = (\n <>\n <div\n ref={desktopPopoverRef}\n data-testid={contentTestId}\n data-state=\"open\"\n className={cn(\n \"pointer-events-auto fixed z-[60] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n )}\n style={{\n left: desktopPopoverPosition.left,\n top: desktopPopoverPosition.top,\n width: desktopPopoverPosition.width,\n }}\n >\n <HourPickerScrollButton\n direction=\"up\"\n viewportRef={desktopContentRef}\n />\n\n <div\n ref={desktopContentRef}\n role=\"listbox\"\n className=\"max-h-64 overflow-y-auto p-1 [overscroll-behavior:contain] [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden\"\n >\n {options.map((option) => {\n const isChecked = option.value === value\n\n return (\n <div\n key={option.value}\n role=\"option\"\n aria-selected={isChecked}\n data-value={option.value}\n data-state={isChecked ? \"checked\" : \"unchecked\"}\n data-disabled={option.disabled ? \"\" : undefined}\n className={cn(\n \"relative flex w-full select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none cursor-pointer\",\n option.disabled && \"pointer-events-none opacity-50\",\n highlightedValue === option.value && \"bg-accent text-accent-foreground\",\n )}\n onMouseDown={(event) => {\n event.preventDefault()\n }}\n onClick={() => {\n if (option.disabled) return\n\n setTriggerDraftValueRef.current?.(option.value)\n updateHighlightedValue(option.value)\n triggerInputRef.current?.focus({ preventScroll: true })\n commitValue(option.value)\n setOpen(false)\n }}\n onPointerEnter={() => {\n if (keyboardNavigationActiveRef.current) return\n keyboardNavigationActiveRef.current = false\n updateHighlightedValue(option.value)\n }}\n onPointerMove={(event) => {\n if (keyboardNavigationActiveRef.current && event.movementX === 0 && event.movementY === 0) {\n return\n }\n keyboardNavigationActiveRef.current = false\n updateHighlightedValue(option.value)\n }}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n {isChecked ? <Check aria-hidden className=\"h-4 w-4\" /> : null}\n </span>\n\n <div className=\"flex flex-col\">\n <span>{option.label}</span>\n {option.description != null ? (\n <span data-slot=\"description\" className=\"text-xs text-muted-foreground\">\n {option.description}\n </span>\n ) : null}\n </div>\n </div>\n )\n })}\n </div>\n\n <HourPickerScrollButton\n direction=\"down\"\n viewportRef={desktopContentRef}\n />\n </div>\n </>\n )\n\n if (typeof document === \"undefined\") return popover\n return createPortal(popover, document.body)\n })() : null}\n </div>\n </div>\n )\n}\n\nHourPickerInput.displayName = \"HourPickerInput\"\n\nexport type HourPickerFieldProps = HourPickerInputProps\n\nfunction HourPickerSelectField({\n id,\n value,\n onChange,\n onValueUpdate,\n options,\n placeholder = \"Select time\",\n className,\n inputClassName,\n disabled,\n readOnly,\n open,\n onOpenChange,\n triggerTestId,\n contentTestId,\n isHydrated,\n}: HourPickerFieldProps) {\n const reactId = React.useId()\n const triggerId = id ?? `hours-picker-${reactId}`\n const triggerRef = React.useRef<HTMLButtonElement | null>(null)\n const containerRef = React.useRef<HTMLDivElement | null>(null)\n const popoverRef = React.useRef<HTMLDivElement | null>(null)\n const viewportRef = React.useRef<HTMLDivElement | null>(null)\n const [popoverPosition, setPopoverPosition] = React.useState(() => ({\n left: 0,\n top: 0,\n width: 0,\n }))\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false)\n const resolvedOpen = open ?? uncontrolledOpen\n const setOpen = onOpenChange ?? setUncontrolledOpen\n const openRef = React.useRef(false)\n openRef.current = resolvedOpen\n\n const commitValue = React.useCallback(\n (next: string) => {\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n\n if (onValueUpdate) {\n onValueUpdate(next)\n }\n onChange(next)\n },\n [onChange, onValueUpdate, options],\n )\n\n const updatePopoverPosition = React.useCallback(() => {\n if (typeof window === \"undefined\") {\n return\n }\n\n const trigger = triggerRef.current\n const popover = popoverRef.current\n if (!(trigger instanceof HTMLElement) || !popover) {\n return\n }\n\n const rect = trigger.getBoundingClientRect()\n const popoverHeight = popover.offsetHeight\n const viewportWidth = window.innerWidth ?? 0\n const viewportHeight = window.innerHeight ?? 0\n const padding = 8\n const width = rect.width\n\n let left = rect.left\n if (left + width > viewportWidth - padding) {\n left = Math.max(padding, viewportWidth - width - padding)\n }\n if (left < padding) {\n left = padding\n }\n\n let top = rect.bottom + padding\n const overflowBottom = top + popoverHeight > viewportHeight - padding\n const aboveTop = rect.top - popoverHeight - padding\n if (overflowBottom && aboveTop >= padding) {\n top = aboveTop\n }\n\n if (top < padding) {\n top = padding\n }\n if (top + popoverHeight > viewportHeight - padding) {\n top = Math.max(padding, viewportHeight - popoverHeight - padding)\n }\n\n setPopoverPosition({ left, top, width })\n }, [])\n\n React.useLayoutEffect(() => {\n if (!resolvedOpen || disabled) {\n return\n }\n if (typeof window === \"undefined\") {\n return\n }\n\n updatePopoverPosition()\n const rafId = window.requestAnimationFrame(updatePopoverPosition)\n\n window.addEventListener(\"scroll\", updatePopoverPosition, true)\n window.addEventListener(\"resize\", updatePopoverPosition)\n return () => {\n window.cancelAnimationFrame(rafId)\n window.removeEventListener(\"scroll\", updatePopoverPosition, true)\n window.removeEventListener(\"resize\", updatePopoverPosition)\n }\n }, [disabled, resolvedOpen, updatePopoverPosition])\n\n React.useEffect(() => {\n if (!resolvedOpen) {\n return\n }\n\n const ownerDocument = containerRef.current?.ownerDocument ?? document\n const ownerWindow = ownerDocument.defaultView ?? window\n\n const handlePointerDown = (event: PointerEvent) => {\n const target = event.target\n if (!(target instanceof Node)) {\n return\n }\n\n const container = containerRef.current\n if (container?.contains(target)) {\n return\n }\n\n const popover = popoverRef.current\n if (popover?.contains(target)) {\n return\n }\n\n setOpen(false)\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\" || !openRef.current) {\n return\n }\n\n const target = event.target\n if (!(target instanceof Node)) {\n return\n }\n\n const container = containerRef.current\n const popover = popoverRef.current\n if (!container?.contains(target) && !popover?.contains(target)) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n setOpen(false)\n triggerRef.current?.focus({ preventScroll: true })\n }\n\n ownerDocument.addEventListener(\"pointerdown\", handlePointerDown, true)\n ownerWindow.addEventListener(\"keydown\", handleKeyDown, true)\n return () => {\n ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown, true)\n ownerWindow.removeEventListener(\"keydown\", handleKeyDown, true)\n }\n }, [resolvedOpen, setOpen])\n\n const selectedOption = options.find((option) => option.value === value)\n const selectedLabel = selectedOption?.selectedLabel ?? selectedOption?.label\n\n return (\n <div\n data-slot=\"hours-picker-field\"\n className={cn(\"w-[150px]\", className)}\n ref={containerRef}\n >\n <button\n ref={triggerRef}\n id={triggerId}\n type=\"button\"\n role=\"combobox\"\n aria-expanded={resolvedOpen}\n aria-controls={`${triggerId}-content`}\n disabled={disabled}\n data-testid={triggerTestId}\n data-hydrated={isHydrated ? \"true\" : undefined}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n \"hover:bg-accent hover:text-accent-foreground\",\n !value && \"text-muted-foreground\",\n resolvedOpen && \"ring-2 ring-primary ring-offset-2\",\n inputClassName,\n )}\n onClick={() => {\n if (disabled || readOnly) {\n return\n }\n setOpen(!resolvedOpen)\n }}\n >\n <span className=\"line-clamp-1 text-left\">\n {selectedOption ? selectedLabel : placeholder}\n </span>\n <ChevronDown aria-hidden className=\"h-4 w-4 shrink-0 opacity-50\" />\n </button>\n\n {resolvedOpen ? (() => {\n const popover = (\n <>\n <div\n ref={popoverRef}\n id={`${triggerId}-content`}\n data-testid={contentTestId}\n data-state=\"open\"\n className={cn(\n \"fixed z-[60] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n )}\n style={{\n left: popoverPosition.left,\n top: popoverPosition.top,\n width: popoverPosition.width,\n }}\n >\n <HourPickerScrollButton\n direction=\"up\"\n viewportRef={viewportRef}\n />\n\n <div\n ref={viewportRef}\n role=\"listbox\"\n className=\"max-h-64 overflow-y-auto p-1 [overscroll-behavior:contain] [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden\"\n >\n {options.map((option) => {\n const isChecked = option.value === value\n\n return (\n <div\n key={option.value}\n role=\"option\"\n aria-selected={isChecked}\n data-value={option.value}\n data-state={isChecked ? \"checked\" : \"unchecked\"}\n data-disabled={option.disabled ? \"\" : undefined}\n className={cn(\n \"relative flex w-full select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none cursor-pointer\",\n option.disabled && \"pointer-events-none opacity-50\",\n isChecked && \"bg-accent text-accent-foreground\",\n )}\n onMouseDown={(event) => {\n event.preventDefault()\n }}\n onClick={() => {\n if (option.disabled || readOnly) {\n return\n }\n\n commitValue(option.value)\n setOpen(false)\n triggerRef.current?.focus({ preventScroll: true })\n }}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n {isChecked ? <Check aria-hidden className=\"h-4 w-4\" /> : null}\n </span>\n\n <div className=\"flex flex-col\">\n <span>{option.label}</span>\n {option.description != null ? (\n <span data-slot=\"description\" className=\"text-xs text-muted-foreground\">\n {option.description}\n </span>\n ) : null}\n </div>\n </div>\n )\n })}\n </div>\n\n <HourPickerScrollButton\n direction=\"down\"\n viewportRef={viewportRef}\n />\n </div>\n </>\n )\n\n if (typeof document === \"undefined\") {\n return popover\n }\n\n return createPortal(popover, document.body)\n })() : null}\n </div>\n )\n}\n\nexport function HourPickerField(props: HourPickerFieldProps) {\n const isTouchDevice = useIsTouchDevice()\n\n if (isTouchDevice) {\n return <HourPickerSelectField {...props} />\n }\n\n return <HourPickerInput {...props} />\n}\n\nHourPickerField.displayName = \"HourPickerField\"\n\ntype HourPickerMaskedSelectTriggerProps = {\n id: string\n placeholder: string\n value: string | null\n onValueUpdate: (value: string | null) => void\n onCommit: (value: string | null) => void\n options: HourPickerOption[]\n selectedLabel?: React.ReactNode\n disabled?: boolean\n readOnly?: boolean\n open: boolean\n setOpen: (open: boolean) => void\n inputClassName?: string\n triggerTestId?: string\n isHydrated?: boolean\n highlightedValueRef: React.MutableRefObject<string | null>\n setHighlightedValue: (value: string | null) => void\n markKeyboardNavigation: () => void\n inputRef: (node: HTMLInputElement | null) => void\n onDraftValueHandlerChange: (handler: ((value: string) => void) | null) => void\n}\n\nfunction HourPickerMaskedSelectTrigger({\n id,\n placeholder,\n value,\n onValueUpdate,\n onCommit,\n options,\n selectedLabel,\n disabled,\n readOnly,\n open,\n setOpen,\n inputClassName,\n triggerTestId,\n isHydrated,\n highlightedValueRef,\n setHighlightedValue,\n markKeyboardNavigation,\n inputRef,\n onDraftValueHandlerChange,\n}: HourPickerMaskedSelectTriggerProps) {\n const isEditingRef = React.useRef(false)\n const pointerDownOnInputRef = React.useRef(false)\n const inputWasFocusedOnPointerDownRef = React.useRef(false)\n const ignoreNextMaskCommitValueRef = React.useRef<string | null>(null)\n const lastAcceptedSignatureRef = React.useRef<string | null>(null)\n const clearCommitPendingRef = React.useRef(false)\n\n const [draft, setDraft] = React.useState(() => (value ? value : \"\"))\n\n React.useEffect(() => {\n onDraftValueHandlerChange((nextValue) => {\n setDraft(nextValue)\n })\n return () => {\n onDraftValueHandlerChange(null)\n }\n }, [onDraftValueHandlerChange])\n\n const moveSelection = React.useCallback(\n (direction: -1 | 1) => {\n const base = highlightedValueRef.current ?? value ?? \"\"\n\n let baseIndex = options.findIndex((option) => option.value === base)\n if (baseIndex === -1) {\n baseIndex = direction === 1 ? -1 : options.length\n }\n\n for (let nextIndex = baseIndex + direction; nextIndex >= 0 && nextIndex < options.length; nextIndex += direction) {\n const nextOption = options[nextIndex]\n if (!isOptionSelectable(nextOption)) continue\n\n setHighlightedValue(nextOption.value)\n ignoreNextMaskCommitValueRef.current = nextOption.value\n setDraft(nextOption.value)\n onValueUpdate(nextOption.value)\n return\n }\n },\n [highlightedValueRef, onValueUpdate, options, setHighlightedValue, value],\n )\n\n React.useEffect(() => {\n if (isEditingRef.current) return\n setDraft(value ? value : \"\")\n }, [value])\n\n React.useEffect(() => {\n lastAcceptedSignatureRef.current = getAcceptedInputSignature(draft)\n }, [draft])\n\n React.useEffect(() => {\n if (value === null) {\n clearCommitPendingRef.current = false\n }\n }, [value])\n\n const triggerClassName = cn(\n \"peer flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 pr-10 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"transition-colors group-hover:bg-accent group-hover:text-accent-foreground\",\n !draft && \"text-muted-foreground\",\n open && \"ring-2 ring-primary ring-offset-2\",\n \"[&_[data-slot='description']]:hidden\",\n inputClassName,\n value && selectedLabel != null && \"text-transparent focus:text-foreground\",\n )\n\n return (\n <div className=\"relative group\">\n <IMaskInput\n id={id}\n data-testid={triggerTestId}\n data-hydrated={isHydrated ? \"true\" : undefined}\n type=\"text\"\n disabled={disabled}\n readOnly={readOnly}\n inputRef={inputRef}\n autoComplete={\"off\"}\n mask={[\n { mask: \"00:00\", lazy: true },\n { mask: \"0:00\", lazy: true },\n ]}\n dispatch={(appended, dynamicMasked) => {\n const digits = (dynamicMasked.value + appended).replace(/\\D/g, \"\")\n if (digits.length <= 2) return dynamicMasked.compiledMasks[0]\n if (digits.length >= 4) return dynamicMasked.compiledMasks[0]\n\n const hourPrefix = pad2(Number(digits.slice(0, 2)))\n const hasTwoDigitHour = options.some((option) => option.value.startsWith(`${hourPrefix}:`))\n if (hasTwoDigitHour) return dynamicMasked.compiledMasks[0]\n\n return dynamicMasked.compiledMasks[1]\n }}\n placeholder={placeholder}\n value={draft}\n className={triggerClassName}\n onAccept={(accepted, _mask, event) => {\n if (!event) {\n return\n }\n const nextText = typeof accepted === \"string\" ? accepted : String(accepted ?? \"\")\n const nextDigits = nextText.replace(/\\D/g, \"\")\n const nextSignature = getAcceptedInputSignature(nextText)\n if (lastAcceptedSignatureRef.current === nextSignature) {\n return\n }\n lastAcceptedSignatureRef.current = nextSignature\n setDraft(nextText)\n\n if (nextDigits.length !== 0) {\n clearCommitPendingRef.current = false\n return\n }\n\n if (value && !clearCommitPendingRef.current) {\n clearCommitPendingRef.current = true\n onCommit(null)\n }\n }}\n onComplete={(completed, _mask, event) => {\n if (!event) {\n return\n }\n const nextText = typeof completed === \"string\" ? completed : String(completed ?? \"\")\n if (ignoreNextMaskCommitValueRef.current === nextText) {\n ignoreNextMaskCommitValueRef.current = null\n return\n }\n\n const resolved = parseTimeInputWithSelectableOption(nextText, options)\n if (!resolved) {\n return\n }\n\n if (resolved.selectableValue) {\n setHighlightedValue(resolved.selectableValue)\n setDraft(resolved.selectableValue)\n\n if (value === resolved.selectableValue) {\n return\n }\n\n onCommit(resolved.selectableValue)\n return\n }\n\n const targetMinutes = timeStringToMinutes(resolved.parsed)\n if (targetMinutes == null) {\n return\n }\n\n const closestOption = findClosestSelectableOption(targetMinutes, options)\n if (!closestOption) {\n return\n }\n\n setHighlightedValue(closestOption.value)\n }}\n onPointerDown={() => {\n pointerDownOnInputRef.current = true\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onMouseDown={(event) => {\n pointerDownOnInputRef.current = true\n inputWasFocusedOnPointerDownRef.current = typeof document !== \"undefined\" && document.activeElement === event.currentTarget\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onClick={() => {\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onKeyDown={(event) => {\n if (disabled) {\n return\n }\n\n if (event.key === \"Tab\" && open && !event.defaultPrevented) {\n setOpen(false)\n return\n }\n\n if (event.key === \"Escape\") {\n if (!open) {\n return\n }\n event.preventDefault()\n setOpen(false)\n return\n }\n\n if (!open && !event.defaultPrevented) {\n const shouldReopen =\n (event.key.length === 1 || event.key === \"Backspace\" || event.key === \"Delete\") &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey\n\n if (shouldReopen) {\n setOpen(true)\n }\n }\n\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n markKeyboardNavigation()\n event.preventDefault()\n\n if (!open) {\n setOpen(true)\n return\n }\n\n moveSelection(event.key === \"ArrowDown\" ? 1 : -1)\n return\n }\n\n if (event.key === \"Enter\") {\n markKeyboardNavigation()\n const resolved = parseTimeInputWithSelectableOption(draft, options)\n if (!resolved) {\n if (!open) {\n return\n }\n\n if (draft.trim() !== \"\") {\n return\n }\n\n const highlightedOption = options.find((option) => option.value === highlightedValueRef.current)\n const fallbackValue =\n (isOptionSelectable(highlightedOption) ? highlightedOption?.value : undefined) ??\n options.find((option) => isOptionSelectable(option))?.value\n\n if (!fallbackValue) {\n return\n }\n\n event.preventDefault()\n setHighlightedValue(fallbackValue)\n setDraft(fallbackValue)\n onCommit(fallbackValue)\n setOpen(false)\n return\n }\n\n if (resolved.selectableValue) {\n event.preventDefault()\n setHighlightedValue(resolved.selectableValue)\n setDraft(resolved.selectableValue)\n onCommit(resolved.selectableValue)\n setOpen(false)\n return\n }\n\n const targetMinutes = timeStringToMinutes(resolved.parsed)\n if (targetMinutes == null) {\n return\n }\n\n const closestOption = findClosestSelectableOption(targetMinutes, options)\n if (!closestOption) {\n return\n }\n\n event.preventDefault()\n setHighlightedValue(closestOption.value)\n setDraft(closestOption.value)\n onCommit(closestOption.value)\n setOpen(false)\n return\n }\n }}\n onFocus={(event) => {\n const shouldSelectAll = !pointerDownOnInputRef.current || !inputWasFocusedOnPointerDownRef.current\n pointerDownOnInputRef.current = false\n inputWasFocusedOnPointerDownRef.current = false\n isEditingRef.current = true\n if (shouldSelectAll) {\n const element = event.currentTarget\n requestAnimationFrame(() => element.select())\n }\n\n if (disabled) {\n return\n }\n\n if (open) {\n return\n }\n\n setOpen(true)\n }}\n onBlur={() => {\n isEditingRef.current = false\n\n const trimmed = draft.trim()\n if (!trimmed) {\n setDraft(value ? value : \"\")\n return\n }\n\n const resolved = parseTimeInputWithSelectableOption(trimmed, options)\n if (!resolved) {\n setDraft(value ? value : \"\")\n return\n }\n\n if (!resolved.selectableValue) {\n setDraft(value ? value : \"\")\n return\n }\n\n setDraft(resolved.selectableValue)\n if (value !== resolved.selectableValue) {\n onCommit(resolved.selectableValue)\n }\n }}\n />\n\n {value && selectedLabel != null ? (\n <span\n aria-hidden=\"true\"\n data-slot=\"hours-picker-input-selected-label\"\n className={cn(\n \"pointer-events-none absolute inset-y-0 left-3 right-10 flex min-w-0 items-center text-base peer-focus:hidden md:text-sm\",\n disabled && \"opacity-50\",\n )}\n >\n <span className=\"min-w-0 truncate\">{selectedLabel}</span>\n </span>\n ) : null}\n\n <button\n type=\"button\"\n tabIndex={-1}\n disabled={disabled}\n data-slot=\"hours-picker-input-toggle\"\n className={cn(\n \"absolute right-1 top-1/2 inline-flex size-8 -translate-y-1/2 items-center justify-center rounded-md text-muted-foreground transition-colors hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n )}\n aria-label={open ? \"Close time picker\" : \"Open time picker\"}\n onPointerDown={(event) => {\n event.preventDefault()\n }}\n onMouseDown={(event) => {\n event.preventDefault()\n }}\n onClick={() => {\n if (disabled) return\n setOpen(!open)\n }}\n >\n <ChevronDown aria-hidden className=\"size-4\" />\n </button>\n </div>\n )\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpcbase/ui",
3
- "version": "0.264.0",
3
+ "version": "0.265.0",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "type": "module",
6
6
  "sideEffects": [