@skiddph/prui 0.8.0 → 0.9.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.
@@ -11,7 +11,7 @@ export { Select, SelectTrigger, SelectValue, SelectContent, SelectItem, selectPr
11
11
  export { Switch, switchPropsMeta, type SwitchProps } from './switch';
12
12
  export { Tabs, TabsList, TabsTrigger, TabsContent, tabsPropsMeta, type TabsProps, type TabsListProps, type TabsTriggerProps, type TabsContentProps, } from './tabs';
13
13
  export { Badge, badgePropsMeta, Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter, cardPropsMeta, Avatar, avatarPropsMeta, type BadgeProps, type BadgeVariant, type AvatarProps, } from './card';
14
- export { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter, dialogPropsMeta, type DialogProps, type DialogContentProps, } from './dialog';
14
+ export { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogBody, DialogFooter, dialogPropsMeta, dialogBodyPropsMeta, type DialogProps, type DialogContentProps, type DialogBodyProps, } from './dialog';
15
15
  export { Dropdown, dropdownPropsMeta, type DropdownProps, type DropdownItem, } from './dropdown';
16
16
  export { ScrollArea, scrollAreaPropsMeta, type ScrollAreaProps } from './scroll-area';
17
17
  export { Modal, confirmModal, modalPropsMeta, confirmModalPropsMeta, type ModalProps, type ModalSize, type ConfirmModalOptions, type ConfirmModalType, } from './modal';
@@ -32,5 +32,6 @@ export { Breadcrumb, BreadcrumbItem, BreadcrumbEllipsis, breadcrumbPropsMeta, ty
32
32
  export { TreeView, treeViewPropsMeta, type TreeViewProps, type TreeViewItem } from './tree-view';
33
33
  export { Timeline, timelinePropsMeta, type TimelineProps, type TimelineItemData, type TimelineVariant } from './timeline';
34
34
  export { Calendar, calendarPropsMeta, toDateKey, fromDateKey, type CalendarProps } from './calendar';
35
- export { DatePicker, DateRangePicker, datePickerPropsMeta, dateRangePickerPropsMeta, type DatePickerProps, type DateRangePickerProps, type DateRange } from './date-picker';
35
+ export { DatePicker, DateRangePicker, datePickerPropsMeta, dateRangePickerPropsMeta, type DatePickerProps, type DateRangePickerProps, type DateRange, type MaxRange } from './date-picker';
36
+ export { TimePicker, TimeRangePicker, TimePanel, timePickerPropsMeta, timeRangePickerPropsMeta, type TimePickerProps, type TimeRangePickerProps, type TimeRange } from './time-picker';
36
37
  export { FileUpload, fileUploadPropsMeta, type FileUploadProps } from './file-upload';
@@ -1,152 +1,155 @@
1
- import { jsxs as E, jsx as h, Fragment as H } from "react/jsx-runtime";
2
- import * as r from "react";
3
- import { ChevronDown as M, Check as B } from "lucide-react";
1
+ import { jsxs as D, jsx as y, Fragment as W } from "react/jsx-runtime";
2
+ import * as a from "react";
3
+ import { ChevronDown as q, Check as H } from "lucide-react";
4
4
  import { cn as A } from "./cn.js";
5
- import { useOverlayStack as G, useEscapeKey as J } from "./overlay.js";
6
- import { typeaheadIndex as Q, endIndex as W, homeIndex as X, moveIndex as L } from "./list-nav.js";
7
- const P = r.createContext(null);
8
- function D() {
9
- const n = r.useContext(P);
10
- if (!n) throw new Error("Select parts must be used inside <Select>");
11
- return n;
5
+ import { useOverlayStack as B, useEscapeKey as G, Portal as J } from "./overlay.js";
6
+ import { useAnchoredPosition as Q } from "./anchor.js";
7
+ import { typeaheadIndex as X, endIndex as Y, homeIndex as Z, moveIndex as F } from "./list-nav.js";
8
+ const L = a.createContext(null);
9
+ function E() {
10
+ const i = a.useContext(L);
11
+ if (!i) throw new Error("Select parts must be used inside <Select>");
12
+ return i;
12
13
  }
13
- const Y = ({
14
- options: n,
15
- value: s,
16
- defaultValue: p,
17
- placeholder: i = "Select...",
18
- disabled: u,
14
+ const _ = ({
15
+ options: i,
16
+ value: u,
17
+ defaultValue: b,
18
+ placeholder: d = "Select...",
19
+ disabled: f,
19
20
  name: l,
20
21
  id: v,
21
- onChange: c,
22
- onOpenChange: d,
23
- children: S,
22
+ onChange: n,
23
+ onOpenChange: p,
24
+ children: w,
24
25
  ...g
25
26
  }) => {
26
- var j;
27
- const [b, y] = r.useState(p ?? ""), [x, w] = r.useState(!1), [t, N] = r.useState(null), [k, V] = r.useState({}), e = s !== void 0 ? s : b, o = r.useCallback((a, O) => {
28
- V((R) => {
29
- if (O === null) {
30
- if (!(a in R)) return R;
31
- const F = { ...R };
32
- return delete F[a], F;
27
+ var o;
28
+ const [m, h] = a.useState(b ?? ""), [x, S] = a.useState(!1), [e, V] = a.useState(null), [O, P] = a.useState({}), T = u !== void 0 ? u : m, I = a.useCallback((r, c) => {
29
+ P((s) => {
30
+ if (c === null) {
31
+ if (!(r in s)) return s;
32
+ const R = { ...s };
33
+ return delete R[r], R;
33
34
  }
34
- return R[a] === O ? R : { ...R, [a]: O };
35
+ return s[r] === c ? s : { ...s, [r]: c };
35
36
  });
36
- }, []), I = (a) => {
37
- s === void 0 && y(a), c == null || c(a);
38
- }, m = (a) => {
39
- w(a), d == null || d(a);
40
- }, f = () => t == null ? void 0 : t.focus(), T = k[e] ?? ((j = n == null ? void 0 : n.find((a) => a.value === e)) == null ? void 0 : j.label);
41
- return /* @__PURE__ */ E(
42
- P.Provider,
37
+ }, []), N = (r) => {
38
+ u === void 0 && h(r), n == null || n(r);
39
+ }, k = (r) => {
40
+ S(r), p == null || p(r);
41
+ }, j = () => e == null ? void 0 : e.focus(), t = O[T] ?? ((o = i == null ? void 0 : i.find((r) => r.value === T)) == null ? void 0 : o.label);
42
+ return /* @__PURE__ */ D(
43
+ L.Provider,
43
44
  {
44
- value: { value: e, displayValue: T, open: x, triggerId: (t == null ? void 0 : t.id) || void 0, setValue: I, setOpen: m, registerTrigger: N, returnFocusToTrigger: f, registerLabel: o },
45
+ value: { value: T, displayValue: t, open: x, triggerEl: e, triggerId: (e == null ? void 0 : e.id) || void 0, setValue: N, setOpen: k, registerTrigger: V, returnFocusToTrigger: j, registerLabel: I },
45
46
  children: [
46
- l ? /* @__PURE__ */ h("input", { type: "hidden", name: l, value: e }) : null,
47
- S ?? /* @__PURE__ */ E(H, { children: [
48
- /* @__PURE__ */ h(U, { disabled: u, id: v, ...g, children: /* @__PURE__ */ h($, { placeholder: i }) }),
49
- /* @__PURE__ */ h(z, { children: (n ?? []).map((a) => /* @__PURE__ */ h(q, { value: a.value, disabled: a.disabled, children: a.label }, a.value)) })
47
+ l ? /* @__PURE__ */ y("input", { type: "hidden", name: l, value: T }) : null,
48
+ w ?? /* @__PURE__ */ D(W, { children: [
49
+ /* @__PURE__ */ y(U, { disabled: f, id: v, ...g, children: /* @__PURE__ */ y($, { placeholder: d }) }),
50
+ /* @__PURE__ */ y(z, { children: (i ?? []).map((r) => /* @__PURE__ */ y(M, { value: r.value, disabled: r.disabled, children: r.label }, r.value)) })
50
51
  ] })
51
52
  ]
52
53
  }
53
54
  );
54
55
  };
55
- Y.displayName = "Select";
56
- const U = r.forwardRef(
57
- ({ className: n, children: s, onClick: p, onKeyDown: i, disabled: u, id: l, ...v }, c) => {
58
- const { open: d, setOpen: S, registerTrigger: g } = D(), b = r.useRef(null), y = r.useId(), x = l ?? `prui-select-${y}`;
59
- r.useEffect(() => (g(b.current), () => g(null)), [g]);
60
- const w = `${x}-listbox`;
61
- return /* @__PURE__ */ E(
56
+ _.displayName = "Select";
57
+ const U = a.forwardRef(
58
+ ({ className: i, children: u, onClick: b, onKeyDown: d, disabled: f, id: l, ...v }, n) => {
59
+ const { open: p, setOpen: w, registerTrigger: g } = E(), m = a.useRef(null), h = a.useId(), x = l ?? `prui-select-${h}`;
60
+ a.useEffect(() => (g(m.current), () => g(null)), [g]);
61
+ const S = `${x}-listbox`;
62
+ return /* @__PURE__ */ D(
62
63
  "button",
63
64
  {
64
- ref: (t) => {
65
- b.current = t, typeof c == "function" ? c(t) : c && (c.current = t);
65
+ ref: (e) => {
66
+ m.current = e, typeof n == "function" ? n(e) : n && (n.current = e);
66
67
  },
67
68
  id: x,
68
69
  type: "button",
69
70
  role: "combobox",
70
- "aria-expanded": d,
71
+ "aria-expanded": p,
71
72
  "aria-haspopup": "listbox",
72
- "aria-controls": d ? w : void 0,
73
- disabled: u,
74
- "data-state": d ? "open" : "closed",
73
+ "aria-controls": p ? S : void 0,
74
+ disabled: f,
75
+ "data-state": p ? "open" : "closed",
75
76
  className: A(
76
77
  "prui-select-trigger flex h-9 w-full items-center justify-between gap-2 border border-[var(--prui-line)]",
77
78
  "bg-[var(--prui-background)] rounded-[var(--prui-radius)] px-3 text-sm text-[var(--prui-fg)]",
78
79
  "outline-none transition-colors focus:border-[var(--prui-brand)] focus:ring-2 focus:ring-[var(--prui-brand)]/30",
79
80
  "disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer",
80
- n
81
+ i
81
82
  ),
82
- onClick: (t) => {
83
- p == null || p(t), t.defaultPrevented || S(!d);
83
+ onClick: (e) => {
84
+ b == null || b(e), e.defaultPrevented || w(!p);
84
85
  },
85
- onKeyDown: (t) => {
86
- i == null || i(t), !t.defaultPrevented && !d && (t.key === "ArrowDown" || t.key === "ArrowUp" || t.key === "Enter" || t.key === " ") && (t.preventDefault(), S(!0));
86
+ onKeyDown: (e) => {
87
+ d == null || d(e), !e.defaultPrevented && !p && (e.key === "ArrowDown" || e.key === "ArrowUp" || e.key === "Enter" || e.key === " ") && (e.preventDefault(), w(!0));
87
88
  },
88
89
  ...v,
89
90
  children: [
90
- s,
91
- /* @__PURE__ */ h(M, { className: A("h-4 w-4 shrink-0 text-[var(--prui-dim)] transition-transform", d && "rotate-180"), "aria-hidden": !0 })
91
+ u,
92
+ /* @__PURE__ */ y(q, { className: A("h-4 w-4 shrink-0 text-[var(--prui-dim)] transition-transform", p && "rotate-180"), "aria-hidden": !0 })
92
93
  ]
93
94
  }
94
95
  );
95
96
  }
96
97
  );
97
98
  U.displayName = "SelectTrigger";
98
- const $ = r.forwardRef(
99
- ({ className: n, placeholder: s, children: p, ...i }, u) => {
100
- const { value: l, displayValue: v } = D();
101
- return /* @__PURE__ */ h("span", { ref: u, className: A("truncate", n), ...i, children: p ?? v ?? (l || /* @__PURE__ */ h("span", { className: "text-[var(--prui-dim)]", children: s })) });
99
+ const $ = a.forwardRef(
100
+ ({ className: i, placeholder: u, children: b, ...d }, f) => {
101
+ const { value: l, displayValue: v } = E();
102
+ return /* @__PURE__ */ y("span", { ref: f, className: A("truncate", i), ...d, children: b ?? v ?? (l || /* @__PURE__ */ y("span", { className: "text-[var(--prui-dim)]", children: u })) });
102
103
  }
103
104
  );
104
105
  $.displayName = "SelectValue";
105
- const z = r.forwardRef(
106
- ({ className: n, children: s, id: p, ...i }, u) => {
107
- const { open: l, setOpen: v, triggerId: c, setValue: d, returnFocusToTrigger: S } = D(), g = r.useRef(null), [b, y] = r.useState(-1), x = r.useRef({ buffer: "", at: 0 }), { setElement: w, isTop: t } = G(l);
108
- J(l, t, () => {
109
- v(!1), S();
106
+ const z = a.forwardRef(
107
+ ({ className: i, children: u, id: b, ...d }, f) => {
108
+ const { open: l, setOpen: v, triggerEl: n, setValue: p, returnFocusToTrigger: w } = E(), g = a.useRef(null), [m, h] = a.useState(-1), x = a.useRef({ buffer: "", at: 0 }), S = a.useRef(null);
109
+ S.current = n;
110
+ const [e, V] = a.useState(null), { setElement: O, isTop: P } = B(l);
111
+ G(l, P, () => {
112
+ v(!1), w();
110
113
  });
111
- const N = r.useCallback(() => {
112
- const e = g.current;
113
- return e ? Array.from(e.querySelectorAll("[role='option']")) : [];
114
- }, []), k = (e) => {
114
+ const { ref: T, position: I } = Q({ active: l, anchorRef: S, side: "bottom", align: "start" }), N = a.useCallback(() => {
115
+ const t = g.current;
116
+ return t ? Array.from(t.querySelectorAll("[role='option']")) : [];
117
+ }, []), k = (t) => {
115
118
  var o;
116
- y(e), (o = N()[e]) == null || o.focus();
119
+ h(t), (o = N()[t]) == null || o.focus();
117
120
  };
118
- if (r.useEffect(() => {
119
- var f;
120
- if (!l) return;
121
- y(-1);
122
- const e = N(), o = e.findIndex((T) => T.getAttribute("aria-selected") === "true"), I = e.findIndex((T) => T.getAttribute("aria-disabled") !== "true"), m = o >= 0 ? o : I;
123
- m >= 0 && (y(m), (f = e[m]) == null || f.focus());
124
- }, [l, N]), !l) return null;
125
- const V = (e) => {
126
- const o = N(), I = (m) => {
127
- var f;
128
- return ((f = o[m]) == null ? void 0 : f.getAttribute("aria-disabled")) !== "true";
121
+ if (a.useEffect(() => {
122
+ var s;
123
+ if (!l || !e) return;
124
+ h(-1);
125
+ const t = N(), o = t.findIndex((R) => R.getAttribute("aria-selected") === "true"), r = t.findIndex((R) => R.getAttribute("aria-disabled") !== "true"), c = o >= 0 ? o : r;
126
+ c >= 0 && (h(c), (s = t[c]) == null || s.focus());
127
+ }, [l, e, N]), !l) return null;
128
+ const j = (t) => {
129
+ const o = N(), r = (c) => {
130
+ var s;
131
+ return ((s = o[c]) == null ? void 0 : s.getAttribute("aria-disabled")) !== "true";
129
132
  };
130
- switch (e.key) {
133
+ switch (t.key) {
131
134
  case "ArrowDown":
132
- e.preventDefault(), k(L(b, 1, o.length, { enabled: I }));
135
+ t.preventDefault(), k(F(m, 1, o.length, { enabled: r }));
133
136
  break;
134
137
  case "ArrowUp":
135
- e.preventDefault(), k(L(b, -1, o.length, { enabled: I }));
138
+ t.preventDefault(), k(F(m, -1, o.length, { enabled: r }));
136
139
  break;
137
140
  case "Home":
138
- e.preventDefault(), k(X(o.length, I));
141
+ t.preventDefault(), k(Z(o.length, r));
139
142
  break;
140
143
  case "End":
141
- e.preventDefault(), k(W(o.length, I));
144
+ t.preventDefault(), k(Y(o.length, r));
142
145
  break;
143
146
  case "Enter":
144
147
  case " ": {
145
- e.preventDefault();
146
- const m = o[b];
147
- if (m && I(b)) {
148
- const f = m.dataset.value;
149
- f !== void 0 ? (d(f), v(!1), S()) : m.click();
148
+ t.preventDefault();
149
+ const c = o[m];
150
+ if (c && r(m)) {
151
+ const s = c.dataset.value;
152
+ s !== void 0 ? (p(s), v(!1), w()) : c.click();
150
153
  }
151
154
  break;
152
155
  }
@@ -154,72 +157,77 @@ const z = r.forwardRef(
154
157
  v(!1);
155
158
  break;
156
159
  default:
157
- if (e.key.length === 1) {
158
- const m = () => o.map((T) => T.textContent ?? ""), { index: f } = Q(m, x.current, e.key, b);
159
- f >= 0 && f !== b && (e.preventDefault(), k(f));
160
+ if (t.key.length === 1) {
161
+ const c = () => o.map((R) => R.textContent ?? ""), { index: s } = X(c, x.current, t.key, m);
162
+ s >= 0 && s !== m && (t.preventDefault(), k(s));
160
163
  }
161
164
  }
162
165
  };
163
- return /* @__PURE__ */ h(
166
+ return /* @__PURE__ */ y(J, { children: /* @__PURE__ */ y(
164
167
  "div",
165
168
  {
166
- ref: (e) => {
167
- g.current = e, w((e == null ? void 0 : e.parentElement) ?? null), typeof u == "function" ? u(e) : u && (u.current = e);
169
+ ref: (t) => {
170
+ g.current = t, V(t), T(t), O(t), typeof f == "function" ? f(t) : f && (f.current = t);
168
171
  },
169
- id: p ?? (c ? `${c}-listbox` : void 0),
172
+ id: b ?? (n != null && n.id ? `${n.id}-listbox` : void 0),
170
173
  role: "listbox",
171
- "aria-labelledby": c,
174
+ "aria-labelledby": (n == null ? void 0 : n.id) || void 0,
172
175
  tabIndex: -1,
173
176
  "data-state": l ? "open" : "closed",
174
- onKeyDown: V,
177
+ onKeyDown: j,
175
178
  className: A(
176
- "prui-select-content absolute z-[var(--prui-z-overlay)] mt-1 min-w-40 max-h-60 overflow-auto p-1",
179
+ "prui-select-content fixed z-[var(--prui-z-overlay)] max-h-60 overflow-auto p-1",
177
180
  "bg-[var(--prui-surface)] border border-[var(--prui-line)] rounded-[var(--prui-radius)] shadow-[var(--prui-shadow-md)] outline-none",
178
- n
181
+ i
179
182
  ),
180
- ...i,
181
- children: s
183
+ style: {
184
+ top: (I == null ? void 0 : I.top) ?? -9999,
185
+ left: (I == null ? void 0 : I.left) ?? -9999,
186
+ minWidth: n ? Math.max(n.offsetWidth, 160) : 160
187
+ },
188
+ ...d,
189
+ children: u
182
190
  }
183
- );
191
+ ) });
184
192
  }
185
193
  );
186
194
  z.displayName = "SelectContent";
187
- const q = r.forwardRef(
188
- ({ className: n, value: s, disabled: p, children: i, onClick: u, tabIndex: l = -1, ...v }, c) => {
189
- const { value: d, setValue: S, setOpen: g, returnFocusToTrigger: b, registerLabel: y } = D(), x = d === s, w = typeof i == "string" || typeof i == "number" ? String(i) : void 0;
190
- return r.useEffect(() => {
191
- w !== void 0 && y(s, w);
192
- }, [s, w, y]), /* @__PURE__ */ E(
195
+ const M = a.forwardRef(
196
+ ({ className: i, value: u, disabled: b, children: d, onClick: f, tabIndex: l = -1, ...v }, n) => {
197
+ const { value: p, setValue: w, setOpen: g, returnFocusToTrigger: m, registerLabel: h } = E(), x = p === u, S = typeof d == "string" || typeof d == "number" ? String(d) : void 0;
198
+ return a.useEffect(() => {
199
+ S !== void 0 && h(u, S);
200
+ }, [u, S, h]), /* @__PURE__ */ D(
193
201
  "div",
194
202
  {
195
- ref: c,
203
+ ref: n,
196
204
  role: "option",
197
205
  "aria-selected": x,
198
- "aria-disabled": p,
206
+ "aria-disabled": b,
199
207
  "data-selected": x || void 0,
200
- "data-value": s,
208
+ "data-value": u,
201
209
  tabIndex: l,
202
210
  className: A(
203
211
  "prui-select-item relative flex cursor-pointer items-center gap-2 rounded-[calc(var(--prui-radius)-1px)]",
204
212
  "py-1.5 pl-3 pr-8 text-sm text-[var(--prui-fg)] hover:bg-[var(--prui-raise)] focus-visible:bg-[var(--prui-raise)] outline-none",
205
213
  x && "font-medium",
206
- p && "opacity-50 pointer-events-none",
207
- n
214
+ b && "opacity-50 pointer-events-none",
215
+ i
208
216
  ),
209
- onClick: (t) => {
210
- u == null || u(t), !(t.defaultPrevented || p) && (S(s), g(!1), b());
217
+ onClick: (e) => {
218
+ f == null || f(e), !(e.defaultPrevented || b) && (w(u), g(!1), m());
211
219
  },
212
220
  ...v,
213
221
  children: [
214
- i,
215
- x ? /* @__PURE__ */ h(B, { className: "absolute right-2 h-4 w-4 text-[var(--prui-brand)]", "aria-hidden": !0 }) : null
222
+ d,
223
+ x ? /* @__PURE__ */ y(H, { className: "absolute right-2 h-4 w-4 text-[var(--prui-brand)]", "aria-hidden": !0 }) : null
216
224
  ]
217
225
  }
218
226
  );
219
227
  }
220
228
  );
221
- q.displayName = "SelectItem";
222
- const te = {
229
+ M.displayName = "SelectItem";
230
+ const ne = {
223
231
  name: "Select",
224
232
  props: [
225
233
  { name: "options", type: "SelectOption[]", default: "[]", control: "object" },
@@ -231,10 +239,10 @@ const te = {
231
239
  ]
232
240
  };
233
241
  export {
234
- Y as Select,
242
+ _ as Select,
235
243
  z as SelectContent,
236
- q as SelectItem,
244
+ M as SelectItem,
237
245
  U as SelectTrigger,
238
246
  $ as SelectValue,
239
- te as selectPropsMeta
247
+ ne as selectPropsMeta
240
248
  };
@@ -0,0 +1,68 @@
1
+ import { PropsMeta } from './props-meta';
2
+ import * as React from "react";
3
+ /**
4
+ * TimePicker / TimeRangePicker: time selection without a date library.
5
+ * Values are plain "HH:mm" strings (or "HH:mm:ss" with seconds). The
6
+ * picker is a popover with column grids (hours / minutes / seconds) using
7
+ * listbox semantics; arrows move within a column, Enter/Space pick,
8
+ * Escape (topmost) closes, and outside clicks dismiss. TimePanel is the
9
+ * inline grid pair (no popover) that DatePicker composes when
10
+ * timepicker is on.
11
+ */
12
+ export interface TimePickerProps {
13
+ /** "HH:mm" or "HH:mm:ss" when seconds is set. */
14
+ value?: string;
15
+ defaultValue?: string;
16
+ onChange?: (time: string) => void;
17
+ /** Step between minute options, in minutes. Default 1. */
18
+ minuteStep?: number;
19
+ /** Include a seconds column ("HH:mm:ss" values). */
20
+ seconds?: boolean;
21
+ /** Earliest selectable time, inclusive. */
22
+ min?: string;
23
+ /** Latest selectable time, inclusive. */
24
+ max?: string;
25
+ disabled?: boolean;
26
+ placeholder?: string;
27
+ ariaLabel?: string;
28
+ className?: string;
29
+ }
30
+ export type TimeRange = {
31
+ from?: string;
32
+ to?: string;
33
+ };
34
+ export interface TimeRangePickerProps {
35
+ value?: TimeRange;
36
+ defaultValue?: TimeRange;
37
+ onChange?: (range: TimeRange) => void;
38
+ minuteStep?: number;
39
+ seconds?: boolean;
40
+ min?: string;
41
+ max?: string;
42
+ disabled?: boolean;
43
+ placeholder?: string;
44
+ ariaLabel?: string;
45
+ className?: string;
46
+ }
47
+ interface TimePanelProps {
48
+ value?: string;
49
+ onSelect: (time: string) => void;
50
+ minuteStep?: number;
51
+ seconds?: boolean;
52
+ min?: string;
53
+ max?: string;
54
+ /** Hide the column headers (used by the range picker's side-by-side pair). */
55
+ compact?: boolean;
56
+ className?: string;
57
+ }
58
+ /**
59
+ * TimePanel: the inline hour/minute(/second) grids. TimePicker renders it
60
+ * in a popover; DatePicker composes it directly; it is exported for
61
+ * custom compositions.
62
+ */
63
+ export declare function TimePanel({ value, onSelect, minuteStep, seconds, min, max, compact, className }: TimePanelProps): React.JSX.Element;
64
+ export declare const TimePicker: React.ForwardRefExoticComponent<TimePickerProps & React.RefAttributes<HTMLInputElement>>;
65
+ export declare const TimeRangePicker: React.ForwardRefExoticComponent<TimeRangePickerProps & React.RefAttributes<HTMLInputElement>>;
66
+ export declare const timePickerPropsMeta: PropsMeta;
67
+ export declare const timeRangePickerPropsMeta: PropsMeta;
68
+ export {};