@kalyx/react 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +67 -58
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +160 -162
  5. package/dist/index.d.ts +742 -17
  6. package/dist/index.js +2137 -11
  7. package/dist/index.js.map +1 -1
  8. package/package.json +2 -2
  9. package/dist/components/DatePicker/Calendar.d.ts +0 -23
  10. package/dist/components/DatePicker/Calendar.d.ts.map +0 -1
  11. package/dist/components/DatePicker/Calendar.js +0 -127
  12. package/dist/components/DatePicker/Calendar.js.map +0 -1
  13. package/dist/components/DatePicker/Input.d.ts +0 -7
  14. package/dist/components/DatePicker/Input.d.ts.map +0 -1
  15. package/dist/components/DatePicker/Input.js +0 -73
  16. package/dist/components/DatePicker/Input.js.map +0 -1
  17. package/dist/components/DatePicker/MonthGrid.d.ts +0 -34
  18. package/dist/components/DatePicker/MonthGrid.d.ts.map +0 -1
  19. package/dist/components/DatePicker/MonthGrid.js +0 -54
  20. package/dist/components/DatePicker/MonthGrid.js.map +0 -1
  21. package/dist/components/DatePicker/Popover.d.ts +0 -6
  22. package/dist/components/DatePicker/Popover.d.ts.map +0 -1
  23. package/dist/components/DatePicker/Popover.js +0 -72
  24. package/dist/components/DatePicker/Popover.js.map +0 -1
  25. package/dist/components/DatePicker/Root.d.ts +0 -46
  26. package/dist/components/DatePicker/Root.d.ts.map +0 -1
  27. package/dist/components/DatePicker/Root.js +0 -90
  28. package/dist/components/DatePicker/Root.js.map +0 -1
  29. package/dist/components/DatePicker/Trigger.d.ts +0 -6
  30. package/dist/components/DatePicker/Trigger.d.ts.map +0 -1
  31. package/dist/components/DatePicker/Trigger.js +0 -21
  32. package/dist/components/DatePicker/Trigger.js.map +0 -1
  33. package/dist/components/DatePicker/YearGrid.d.ts +0 -29
  34. package/dist/components/DatePicker/YearGrid.d.ts.map +0 -1
  35. package/dist/components/DatePicker/YearGrid.js +0 -53
  36. package/dist/components/DatePicker/YearGrid.js.map +0 -1
  37. package/dist/components/DatePicker/index.d.ts +0 -48
  38. package/dist/components/DatePicker/index.d.ts.map +0 -1
  39. package/dist/components/DatePicker/index.js +0 -42
  40. package/dist/components/DatePicker/index.js.map +0 -1
  41. package/dist/components/DateTimePicker/Input.d.ts +0 -12
  42. package/dist/components/DateTimePicker/Input.d.ts.map +0 -1
  43. package/dist/components/DateTimePicker/Input.js +0 -41
  44. package/dist/components/DateTimePicker/Input.js.map +0 -1
  45. package/dist/components/DateTimePicker/Root.d.ts +0 -60
  46. package/dist/components/DateTimePicker/Root.d.ts.map +0 -1
  47. package/dist/components/DateTimePicker/Root.js +0 -140
  48. package/dist/components/DateTimePicker/Root.js.map +0 -1
  49. package/dist/components/DateTimePicker/index.d.ts +0 -55
  50. package/dist/components/DateTimePicker/index.d.ts.map +0 -1
  51. package/dist/components/DateTimePicker/index.js +0 -55
  52. package/dist/components/DateTimePicker/index.js.map +0 -1
  53. package/dist/components/RangePicker/Calendar.d.ts +0 -24
  54. package/dist/components/RangePicker/Calendar.d.ts.map +0 -1
  55. package/dist/components/RangePicker/Calendar.js +0 -134
  56. package/dist/components/RangePicker/Calendar.js.map +0 -1
  57. package/dist/components/RangePicker/Input.d.ts +0 -14
  58. package/dist/components/RangePicker/Input.d.ts.map +0 -1
  59. package/dist/components/RangePicker/Input.js +0 -38
  60. package/dist/components/RangePicker/Input.js.map +0 -1
  61. package/dist/components/RangePicker/Popover.d.ts +0 -6
  62. package/dist/components/RangePicker/Popover.d.ts.map +0 -1
  63. package/dist/components/RangePicker/Popover.js +0 -71
  64. package/dist/components/RangePicker/Popover.js.map +0 -1
  65. package/dist/components/RangePicker/Presets.d.ts +0 -49
  66. package/dist/components/RangePicker/Presets.d.ts.map +0 -1
  67. package/dist/components/RangePicker/Presets.js +0 -117
  68. package/dist/components/RangePicker/Presets.js.map +0 -1
  69. package/dist/components/RangePicker/Root.d.ts +0 -40
  70. package/dist/components/RangePicker/Root.d.ts.map +0 -1
  71. package/dist/components/RangePicker/Root.js +0 -138
  72. package/dist/components/RangePicker/Root.js.map +0 -1
  73. package/dist/components/RangePicker/index.d.ts +0 -48
  74. package/dist/components/RangePicker/index.d.ts.map +0 -1
  75. package/dist/components/RangePicker/index.js +0 -43
  76. package/dist/components/RangePicker/index.js.map +0 -1
  77. package/dist/components/TimePicker/AmPmToggle.d.ts +0 -15
  78. package/dist/components/TimePicker/AmPmToggle.d.ts.map +0 -1
  79. package/dist/components/TimePicker/AmPmToggle.js +0 -29
  80. package/dist/components/TimePicker/AmPmToggle.js.map +0 -1
  81. package/dist/components/TimePicker/HourList.d.ts +0 -18
  82. package/dist/components/TimePicker/HourList.d.ts.map +0 -1
  83. package/dist/components/TimePicker/HourList.js +0 -71
  84. package/dist/components/TimePicker/HourList.js.map +0 -1
  85. package/dist/components/TimePicker/Input.d.ts +0 -9
  86. package/dist/components/TimePicker/Input.d.ts.map +0 -1
  87. package/dist/components/TimePicker/Input.js +0 -37
  88. package/dist/components/TimePicker/Input.js.map +0 -1
  89. package/dist/components/TimePicker/MinuteList.d.ts +0 -15
  90. package/dist/components/TimePicker/MinuteList.d.ts.map +0 -1
  91. package/dist/components/TimePicker/MinuteList.js +0 -62
  92. package/dist/components/TimePicker/MinuteList.js.map +0 -1
  93. package/dist/components/TimePicker/Root.d.ts +0 -38
  94. package/dist/components/TimePicker/Root.d.ts.map +0 -1
  95. package/dist/components/TimePicker/Root.js +0 -40
  96. package/dist/components/TimePicker/Root.js.map +0 -1
  97. package/dist/components/TimePicker/index.d.ts +0 -32
  98. package/dist/components/TimePicker/index.d.ts.map +0 -1
  99. package/dist/components/TimePicker/index.js +0 -27
  100. package/dist/components/TimePicker/index.js.map +0 -1
  101. package/dist/context/DatePickerContext.d.ts +0 -49
  102. package/dist/context/DatePickerContext.d.ts.map +0 -1
  103. package/dist/context/DatePickerContext.js +0 -18
  104. package/dist/context/DatePickerContext.js.map +0 -1
  105. package/dist/context/RangePickerContext.d.ts +0 -53
  106. package/dist/context/RangePickerContext.d.ts.map +0 -1
  107. package/dist/context/RangePickerContext.js +0 -18
  108. package/dist/context/RangePickerContext.js.map +0 -1
  109. package/dist/context/TimePickerContext.d.ts +0 -29
  110. package/dist/context/TimePickerContext.d.ts.map +0 -1
  111. package/dist/context/TimePickerContext.js +0 -18
  112. package/dist/context/TimePickerContext.js.map +0 -1
  113. package/dist/hooks/useDatePicker.d.ts +0 -63
  114. package/dist/hooks/useDatePicker.d.ts.map +0 -1
  115. package/dist/hooks/useDatePicker.js +0 -82
  116. package/dist/hooks/useDatePicker.js.map +0 -1
  117. package/dist/hooks/useRangePicker.d.ts +0 -67
  118. package/dist/hooks/useRangePicker.d.ts.map +0 -1
  119. package/dist/hooks/useRangePicker.js +0 -116
  120. package/dist/hooks/useRangePicker.js.map +0 -1
  121. package/dist/hooks/useTimePicker.d.ts +0 -63
  122. package/dist/hooks/useTimePicker.d.ts.map +0 -1
  123. package/dist/hooks/useTimePicker.js +0 -69
  124. package/dist/hooks/useTimePicker.js.map +0 -1
  125. package/dist/index.d.ts.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,17 +1,742 @@
1
- export { DatePicker } from './components/DatePicker/index.js';
2
- export { RangePicker } from './components/RangePicker/index.js';
3
- export { TimePicker } from './components/TimePicker/index.js';
4
- export { DateTimePicker } from './components/DateTimePicker/index.js';
5
- export { useDatePicker } from './hooks/useDatePicker.js';
6
- export { useRangePicker } from './hooks/useRangePicker.js';
7
- export { useTimePicker } from './hooks/useTimePicker.js';
8
- export type { DatePickerRootProps, DatePickerInputProps, DatePickerTriggerProps, DatePickerPopoverProps, DatePickerCalendarProps, DatePickerCalendarClassNames, DatePickerMonthGridProps, DatePickerMonthGridClassNames, DatePickerYearGridProps, DatePickerYearGridClassNames, } from './components/DatePicker/index.js';
9
- export type { RangePickerRootProps, RangePickerInputProps, RangeInputPart, RangePickerPopoverProps, RangePickerCalendarProps, RangePickerPresetsProps, RangePickerPresetsClassNames, RangePickerPresetProps, PresetKey, RangePickerCalendarClassNames, } from './components/RangePicker/index.js';
10
- export type { TimePickerRootProps, TimePickerInputProps, TimePickerHourListProps, TimePickerHourListClassNames, TimePickerMinuteListProps, TimePickerMinuteListClassNames, TimePickerAmPmToggleProps, TimePickerAmPmToggleClassNames, } from './components/TimePicker/index.js';
11
- export type { DateTimePickerRootProps, DateTimePickerInputProps, } from './components/DateTimePicker/index.js';
12
- export type { UseDatePickerOptions, UseDatePickerReturn } from './hooks/useDatePicker.js';
13
- export type { UseRangePickerOptions, UseRangePickerReturn } from './hooks/useRangePicker.js';
14
- export type { UseTimePickerOptions, UseTimePickerReturn } from './hooks/useTimePicker.js';
15
- export { DateFnsAdapter } from '@kalyx/core';
16
- export type { ISODateString, DateRange, DisabledRule, DateAdapter, CalendarDay, TimeValue, } from '@kalyx/core';
17
- //# sourceMappingURL=index.d.ts.map
1
+ import * as react from 'react';
2
+ import { ReactNode, HTMLAttributes, InputHTMLAttributes, ButtonHTMLAttributes } from 'react';
3
+ import * as react_jsx_runtime from 'react/jsx-runtime';
4
+ import { ISODateString, DisabledRule, WeekStartsOn, DateAdapter, DateRange, CalendarGrid, TimeValue } from '@kalyx/core';
5
+ export { CalendarDay, DateAdapter, DateFnsAdapter, DateRange, DisabledRule, ISODateString, TimeValue } from '@kalyx/core';
6
+
7
+ /**
8
+ * Props for the DatePicker Root component.
9
+ *
10
+ * @example Controlled
11
+ * ```tsx
12
+ * <DatePicker value={date} onChange={setDate}>
13
+ * <DatePicker.Input />
14
+ * <DatePicker.Popover>
15
+ * <DatePicker.Calendar />
16
+ * </DatePicker.Popover>
17
+ * </DatePicker>
18
+ * ```
19
+ *
20
+ * @example Uncontrolled
21
+ * ```tsx
22
+ * <DatePicker defaultValue="2026-01-15T00:00:00.000Z">
23
+ * <DatePicker.Input />
24
+ * </DatePicker>
25
+ * ```
26
+ */
27
+ interface DatePickerRootProps {
28
+ /** Selected date (controlled, ISO 8601 UTC). `null` means empty. */
29
+ value?: ISODateString | null;
30
+ /** Initial date (uncontrolled) */
31
+ defaultValue?: ISODateString;
32
+ /** Callback fired when the date changes */
33
+ onChange?: (value: ISODateString | null) => void;
34
+ /** Disabled rules */
35
+ disabled?: DisabledRule[] | boolean;
36
+ /** Read-only */
37
+ readOnly?: boolean;
38
+ /** Week start day */
39
+ weekStartsOn?: WeekStartsOn;
40
+ /** Date display format */
41
+ displayFormat?: string;
42
+ /** BCP 47 locale (e.g., "en-US", "ko-KR", "ja-JP") */
43
+ locale?: string;
44
+ /** Date adapter */
45
+ adapter?: DateAdapter;
46
+ /** Child components */
47
+ children: ReactNode;
48
+ }
49
+ declare function DatePickerRoot({ value: controlledValue, defaultValue, onChange, disabled, readOnly, weekStartsOn, displayFormat, locale, adapter, children, }: DatePickerRootProps): react_jsx_runtime.JSX.Element;
50
+
51
+ interface DatePickerPopoverProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
52
+ children?: ReactNode;
53
+ }
54
+ declare function DatePickerPopover({ children, ...props }: DatePickerPopoverProps): react_jsx_runtime.JSX.Element | null;
55
+
56
+ interface DatePickerCalendarClassNames {
57
+ root?: string;
58
+ header?: string;
59
+ title?: string;
60
+ navButton?: string;
61
+ grid?: string;
62
+ gridRow?: string;
63
+ gridCell?: string;
64
+ day?: string;
65
+ daySelected?: string;
66
+ dayToday?: string;
67
+ dayDisabled?: string;
68
+ dayOutsideMonth?: string;
69
+ weekdayHeader?: string;
70
+ }
71
+ interface DatePickerCalendarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
72
+ classNames?: DatePickerCalendarClassNames;
73
+ /** Called when the title ("January 2026") is clicked. Useful for switching to Month/Year views. */
74
+ onTitleClick?: () => void;
75
+ }
76
+ declare function DatePickerCalendar({ classNames, onTitleClick, ...props }: DatePickerCalendarProps): react_jsx_runtime.JSX.Element;
77
+
78
+ interface DatePickerMonthGridClassNames {
79
+ root?: string;
80
+ header?: string;
81
+ title?: string;
82
+ navButton?: string;
83
+ grid?: string;
84
+ month?: string;
85
+ monthSelected?: string;
86
+ monthCurrent?: string;
87
+ }
88
+ interface DatePickerMonthGridProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
89
+ classNames?: DatePickerMonthGridClassNames;
90
+ /** Called when a month is selected. Typically used to switch back to the day view. */
91
+ onSelect?: () => void;
92
+ /** Called when the title (year) is clicked. Useful for switching to the year view. */
93
+ onTitleClick?: () => void;
94
+ }
95
+ /**
96
+ * DatePicker.MonthGrid — Quickly pick a month from a 12-month grid.
97
+ * Click Calendar title -> MonthGrid -> click a month -> back to Calendar.
98
+ *
99
+ * @example
100
+ * ```tsx
101
+ * {view === 'months' && (
102
+ * <DatePicker.MonthGrid
103
+ * onSelect={() => setView('days')}
104
+ * onTitleClick={() => setView('years')}
105
+ * />
106
+ * )}
107
+ * ```
108
+ */
109
+ declare function DatePickerMonthGrid({ classNames, onSelect, onTitleClick, ...props }: DatePickerMonthGridProps): react_jsx_runtime.JSX.Element;
110
+
111
+ interface DatePickerYearGridClassNames {
112
+ root?: string;
113
+ header?: string;
114
+ title?: string;
115
+ navButton?: string;
116
+ grid?: string;
117
+ year?: string;
118
+ yearSelected?: string;
119
+ yearCurrent?: string;
120
+ }
121
+ interface DatePickerYearGridProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
122
+ classNames?: DatePickerYearGridClassNames;
123
+ /** Called when a year is selected. Typically used to switch back to the month view. */
124
+ onSelect?: () => void;
125
+ }
126
+ /**
127
+ * DatePicker.YearGrid — Quickly pick a year from a 12-year grid.
128
+ * Click MonthGrid title -> YearGrid -> click a year -> back to MonthGrid.
129
+ *
130
+ * @example
131
+ * ```tsx
132
+ * {view === 'years' && (
133
+ * <DatePicker.YearGrid onSelect={() => setView('months')} />
134
+ * )}
135
+ * ```
136
+ */
137
+ declare function DatePickerYearGrid({ classNames, onSelect, ...props }: DatePickerYearGridProps): react_jsx_runtime.JSX.Element;
138
+
139
+ interface DatePickerInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange' | 'type'> {
140
+ /** Date display format (defaults to parent's displayFormat) */
141
+ format?: string;
142
+ }
143
+
144
+ interface DatePickerTriggerProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'type'> {
145
+ children?: ReactNode;
146
+ }
147
+
148
+ /**
149
+ * DatePicker — Headless, SSR-safe React DatePicker
150
+ *
151
+ * @example Basic
152
+ * ```tsx
153
+ * <DatePicker value={date} onChange={setDate}>
154
+ * <DatePicker.Input placeholder="날짜 선택" />
155
+ * <DatePicker.Popover>
156
+ * <DatePicker.Calendar />
157
+ * </DatePicker.Popover>
158
+ * </DatePicker>
159
+ * ```
160
+ *
161
+ * @example Month/Year quick navigation
162
+ * ```tsx
163
+ * const [view, setView] = useState('days');
164
+ * <DatePicker value={date} onChange={setDate}>
165
+ * <DatePicker.Input />
166
+ * <DatePicker.Popover>
167
+ * {view === 'days' && <DatePicker.Calendar onTitleClick={() => setView('months')} />}
168
+ * {view === 'months' && <DatePicker.MonthGrid onSelect={() => setView('days')} onTitleClick={() => setView('years')} />}
169
+ * {view === 'years' && <DatePicker.YearGrid onSelect={() => setView('months')} />}
170
+ * </DatePicker.Popover>
171
+ * </DatePicker>
172
+ * ```
173
+ */
174
+ declare const DatePicker: typeof DatePickerRoot & {
175
+ Input: react.ForwardRefExoticComponent<DatePickerInputProps & react.RefAttributes<HTMLInputElement>>;
176
+ Trigger: react.ForwardRefExoticComponent<DatePickerTriggerProps & react.RefAttributes<HTMLButtonElement>>;
177
+ Popover: typeof DatePickerPopover;
178
+ Calendar: typeof DatePickerCalendar;
179
+ MonthGrid: typeof DatePickerMonthGrid;
180
+ YearGrid: typeof DatePickerYearGrid;
181
+ };
182
+
183
+ /**
184
+ * Props for the RangePicker Root component.
185
+ *
186
+ * @example
187
+ * ```tsx
188
+ * <RangePicker value={range} onChange={setRange}>
189
+ * <RangePicker.Input part="start" />
190
+ * <RangePicker.Input part="end" />
191
+ * <RangePicker.Popover>
192
+ * <RangePicker.Calendar />
193
+ * </RangePicker.Popover>
194
+ * </RangePicker>
195
+ * ```
196
+ */
197
+ interface RangePickerRootProps {
198
+ /** Selected range (controlled). `{ start, end }` with ISO strings or null. */
199
+ value?: DateRange;
200
+ /** Initial range (uncontrolled) */
201
+ defaultValue?: DateRange;
202
+ /** Callback fired when the range changes */
203
+ onChange?: (range: DateRange) => void;
204
+ /** Disabled rules */
205
+ disabled?: DisabledRule[] | boolean;
206
+ /** Read-only */
207
+ readOnly?: boolean;
208
+ /** Week start day */
209
+ weekStartsOn?: WeekStartsOn;
210
+ /** Date display format */
211
+ displayFormat?: string;
212
+ /** BCP 47 locale */
213
+ locale?: string;
214
+ /** Date adapter */
215
+ adapter?: DateAdapter;
216
+ /** Child components */
217
+ children: ReactNode;
218
+ }
219
+ declare function RangePickerRoot({ value: controlledValue, defaultValue, onChange, disabled, readOnly, weekStartsOn, displayFormat, locale, adapter, children, }: RangePickerRootProps): react_jsx_runtime.JSX.Element;
220
+
221
+ interface RangePickerPopoverProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
222
+ children?: ReactNode;
223
+ }
224
+ declare function RangePickerPopover({ children, ...props }: RangePickerPopoverProps): react_jsx_runtime.JSX.Element | null;
225
+
226
+ interface RangePickerCalendarClassNames {
227
+ root?: string;
228
+ header?: string;
229
+ title?: string;
230
+ navButton?: string;
231
+ grid?: string;
232
+ gridRow?: string;
233
+ gridCell?: string;
234
+ day?: string;
235
+ daySelected?: string;
236
+ dayToday?: string;
237
+ dayDisabled?: string;
238
+ dayOutsideMonth?: string;
239
+ dayRangeStart?: string;
240
+ dayRangeEnd?: string;
241
+ dayInRange?: string;
242
+ weekdayHeader?: string;
243
+ }
244
+ interface RangePickerCalendarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
245
+ classNames?: RangePickerCalendarClassNames;
246
+ }
247
+ declare function RangePickerCalendar({ classNames, ...props }: RangePickerCalendarProps): react_jsx_runtime.JSX.Element;
248
+
249
+ /** Predefined preset keys. Custom ranges are also supported. */
250
+ type PresetKey = 'today' | 'yesterday' | 'last7days' | 'last30days' | 'thisWeek' | 'lastWeek' | 'thisMonth' | 'lastMonth' | 'thisYear';
251
+ interface RangePickerPresetsClassNames {
252
+ root?: string;
253
+ preset?: string;
254
+ presetActive?: string;
255
+ }
256
+ interface RangePickerPresetsProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
257
+ classNames?: RangePickerPresetsClassNames;
258
+ children?: ReactNode;
259
+ }
260
+ /**
261
+ * RangePicker.Presets — Container that wraps preset buttons.
262
+ * Place `RangePicker.Preset` buttons inside.
263
+ *
264
+ * @example
265
+ * ```tsx
266
+ * <RangePicker.Presets>
267
+ * <RangePicker.Preset value="last7days">Last 7 days</RangePicker.Preset>
268
+ * <RangePicker.Preset value="thisMonth">This month</RangePicker.Preset>
269
+ * </RangePicker.Presets>
270
+ * ```
271
+ */
272
+ declare function RangePickerPresets({ classNames, children, ...props }: RangePickerPresetsProps): react_jsx_runtime.JSX.Element;
273
+ interface RangePickerPresetProps extends Omit<HTMLAttributes<HTMLButtonElement>, 'value'> {
274
+ /** Predefined preset key; omit when passing `range` directly */
275
+ value?: PresetKey;
276
+ /** Pass a range directly (alternative to `value`) */
277
+ range?: DateRange;
278
+ children: ReactNode;
279
+ className?: string;
280
+ }
281
+ /**
282
+ * RangePicker.Preset — One-click preset button to select a date range.
283
+ *
284
+ * Pass either `value` (a preset key) or `range` (a direct range).
285
+ *
286
+ * @example
287
+ * ```tsx
288
+ * <RangePicker.Preset value="last7days">Last 7 days</RangePicker.Preset>
289
+ * <RangePicker.Preset range={{ start: "2026-01-01T...", end: "2026-03-31T..." }}>
290
+ * Q1 2026
291
+ * </RangePicker.Preset>
292
+ * ```
293
+ */
294
+ declare function RangePickerPreset({ value: presetKey, range: directRange, children, onClick, ...props }: RangePickerPresetProps): react_jsx_runtime.JSX.Element;
295
+
296
+ type RangeInputPart = 'start' | 'end';
297
+ interface RangePickerInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange' | 'type'> {
298
+ /** Which part this input represents (start | end) */
299
+ part: RangeInputPart;
300
+ /** Date display format (defaults to parent's displayFormat) */
301
+ format?: string;
302
+ }
303
+
304
+ /**
305
+ * RangePicker — Headless date-range picker component
306
+ *
307
+ * @example Basic
308
+ * ```tsx
309
+ * <RangePicker value={range} onChange={setRange}>
310
+ * <RangePicker.Input part="start" />
311
+ * <RangePicker.Input part="end" />
312
+ * <RangePicker.Popover>
313
+ * <RangePicker.Calendar />
314
+ * </RangePicker.Popover>
315
+ * </RangePicker>
316
+ * ```
317
+ *
318
+ * @example Presets (dashboard)
319
+ * ```tsx
320
+ * <RangePicker value={range} onChange={setRange}>
321
+ * <RangePicker.Input part="start" />
322
+ * <RangePicker.Input part="end" />
323
+ * <RangePicker.Popover>
324
+ * <RangePicker.Presets>
325
+ * <RangePicker.Preset value="last7days">Last 7 days</RangePicker.Preset>
326
+ * <RangePicker.Preset value="last30days">Last 30 days</RangePicker.Preset>
327
+ * <RangePicker.Preset value="thisMonth">This month</RangePicker.Preset>
328
+ * </RangePicker.Presets>
329
+ * <RangePicker.Calendar />
330
+ * </RangePicker.Popover>
331
+ * </RangePicker>
332
+ * ```
333
+ */
334
+ declare const RangePicker: typeof RangePickerRoot & {
335
+ Input: react.ForwardRefExoticComponent<RangePickerInputProps & react.RefAttributes<HTMLInputElement>>;
336
+ Popover: typeof RangePickerPopover;
337
+ Calendar: typeof RangePickerCalendar;
338
+ Presets: typeof RangePickerPresets;
339
+ Preset: typeof RangePickerPreset;
340
+ };
341
+
342
+ type TimePickerFormat = '12h' | '24h';
343
+
344
+ /**
345
+ * Props for the TimePicker Root component.
346
+ *
347
+ * @example
348
+ * ```tsx
349
+ * <TimePicker value={time} onChange={setTime} format="24h" step={15}>
350
+ * <TimePicker.Input />
351
+ * <TimePicker.HourList />
352
+ * <TimePicker.MinuteList />
353
+ * <TimePicker.AmPmToggle />
354
+ * </TimePicker>
355
+ * ```
356
+ */
357
+ interface TimePickerRootProps {
358
+ /** Selected time (controlled, ISO 8601 UTC). The date portion is ignored; only the time is used. */
359
+ value?: ISODateString | null;
360
+ /** Initial time (uncontrolled) */
361
+ defaultValue?: ISODateString;
362
+ /** Callback fired when the time changes */
363
+ onChange?: (value: ISODateString | null) => void;
364
+ /** 12-hour or 24-hour mode */
365
+ format?: TimePickerFormat;
366
+ /** Minute step (e.g., 1, 5, 10, 15, 30) */
367
+ step?: number;
368
+ /** Whether to display seconds */
369
+ withSeconds?: boolean;
370
+ /** Whether entire picker is disabled */
371
+ disabled?: boolean;
372
+ /** Read-only */
373
+ readOnly?: boolean;
374
+ /** Child components */
375
+ children: ReactNode;
376
+ }
377
+ declare function TimePickerRoot({ value: controlledValue, defaultValue, onChange, format, step, withSeconds, disabled, readOnly, children, }: TimePickerRootProps): react_jsx_runtime.JSX.Element;
378
+
379
+ interface TimePickerHourListClassNames {
380
+ root?: string;
381
+ option?: string;
382
+ optionSelected?: string;
383
+ }
384
+ interface TimePickerHourListProps extends Omit<HTMLAttributes<HTMLUListElement>, 'role' | 'children'> {
385
+ classNames?: TimePickerHourListClassNames;
386
+ }
387
+ /**
388
+ * TimePicker.HourList — `role="listbox"` pattern for hour selection.
389
+ * Renders differently depending on 12h/24h mode.
390
+ *
391
+ * ARIA-standard listbox: the <li role="option"> element itself is interactive.
392
+ * Keyboard: ArrowUp/ArrowDown to navigate, Enter/Space to select.
393
+ */
394
+ declare function TimePickerHourList({ classNames, ...props }: TimePickerHourListProps): react_jsx_runtime.JSX.Element;
395
+
396
+ interface TimePickerMinuteListClassNames {
397
+ root?: string;
398
+ option?: string;
399
+ optionSelected?: string;
400
+ }
401
+ interface TimePickerMinuteListProps extends Omit<HTMLAttributes<HTMLUListElement>, 'role' | 'children'> {
402
+ classNames?: TimePickerMinuteListClassNames;
403
+ }
404
+ /**
405
+ * TimePicker.MinuteList — `role="listbox"` pattern for minute selection.
406
+ * The displayed minutes depend on the `step` prop (e.g., step=15 -> [0, 15, 30, 45]).
407
+ */
408
+ declare function TimePickerMinuteList({ classNames, ...props }: TimePickerMinuteListProps): react_jsx_runtime.JSX.Element;
409
+
410
+ interface TimePickerAmPmToggleClassNames {
411
+ root?: string;
412
+ option?: string;
413
+ optionSelected?: string;
414
+ }
415
+ interface TimePickerAmPmToggleProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role' | 'children'> {
416
+ classNames?: TimePickerAmPmToggleClassNames;
417
+ }
418
+ /**
419
+ * TimePicker.AmPmToggle — AM/PM toggle shown only in 12-hour mode.
420
+ * Returns null in 24-hour mode.
421
+ */
422
+ declare function TimePickerAmPmToggle({ classNames, ...props }: TimePickerAmPmToggleProps): react_jsx_runtime.JSX.Element | null;
423
+
424
+ interface TimePickerInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange' | 'type'> {
425
+ }
426
+
427
+ /**
428
+ * TimePicker — Headless time-picker component
429
+ *
430
+ * @example
431
+ * ```tsx
432
+ * <TimePicker value={time} onChange={setTime} format="24h" step={15}>
433
+ * <TimePicker.Input />
434
+ * <div>
435
+ * <TimePicker.HourList />
436
+ * <TimePicker.MinuteList />
437
+ * <TimePicker.AmPmToggle />
438
+ * </div>
439
+ * </TimePicker>
440
+ * ```
441
+ */
442
+ declare const TimePicker: typeof TimePickerRoot & {
443
+ Input: react.ForwardRefExoticComponent<TimePickerInputProps & react.RefAttributes<HTMLInputElement>>;
444
+ HourList: typeof TimePickerHourList;
445
+ MinuteList: typeof TimePickerMinuteList;
446
+ AmPmToggle: typeof TimePickerAmPmToggle;
447
+ };
448
+
449
+ /**
450
+ * Props for the DateTimePicker Root component.
451
+ * Internally provides both DatePickerContext and TimePickerContext (context bridging).
452
+ *
453
+ * @example
454
+ * ```tsx
455
+ * <DateTimePicker value={dt} onChange={setDt} format="24h" step={15}>
456
+ * <DateTimePicker.Input />
457
+ * <DateTimePicker.Popover>
458
+ * <DateTimePicker.Calendar />
459
+ * <DateTimePicker.HourList />
460
+ * <DateTimePicker.MinuteList />
461
+ * </DateTimePicker.Popover>
462
+ * </DateTimePicker>
463
+ * ```
464
+ */
465
+ interface DateTimePickerRootProps {
466
+ /** Selected datetime (controlled, ISO 8601 UTC). Includes both date and time. */
467
+ value?: ISODateString | null;
468
+ /** Initial datetime (uncontrolled) */
469
+ defaultValue?: ISODateString;
470
+ /** Callback fired when the datetime changes */
471
+ onChange?: (value: ISODateString | null) => void;
472
+ /** 12-hour or 24-hour mode */
473
+ format?: TimePickerFormat;
474
+ /** Minute step (e.g., 1, 5, 15, 30) */
475
+ step?: number;
476
+ /** Disabled rules (applied to dates) */
477
+ disabled?: DisabledRule[] | boolean;
478
+ /** Read-only */
479
+ readOnly?: boolean;
480
+ /** Week start day */
481
+ weekStartsOn?: WeekStartsOn;
482
+ /** Date+time display format (for Input) */
483
+ displayFormat?: string;
484
+ /** BCP 47 locale */
485
+ locale?: string;
486
+ /** Date adapter */
487
+ adapter?: DateAdapter;
488
+ /** Child components */
489
+ children: ReactNode;
490
+ }
491
+ /**
492
+ * DateTimePicker.Root — Combined DatePicker + TimePicker component.
493
+ *
494
+ * Manages a single ISO datetime as the source of truth while providing both
495
+ * DatePickerContext and TimePickerContext internally. This lets existing
496
+ * components such as DatePicker.Calendar and TimePicker.HourList be reused as-is.
497
+ *
498
+ * Key behavior:
499
+ * - Clicking a day in Calendar -> changes only the date, preserves the time, keeps popover open
500
+ * - Changing time in TimePicker -> changes only the time, preserves the date
501
+ * - Escape / outside click -> close the popover (commit)
502
+ */
503
+ declare function DateTimePickerRoot({ value: controlledValue, defaultValue, onChange, format, step, disabled, readOnly, weekStartsOn, displayFormat, locale, adapter, children, }: DateTimePickerRootProps): react_jsx_runtime.JSX.Element;
504
+
505
+ interface DateTimePickerInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange' | 'type'> {
506
+ }
507
+
508
+ /**
509
+ * DateTimePicker — Combined component for selecting both date and time.
510
+ *
511
+ * Manages a single ISO datetime as the source of truth while providing both
512
+ * DatePickerContext and TimePickerContext internally. This lets existing
513
+ * components such as DatePicker.Calendar and TimePicker.HourList work as-is.
514
+ *
515
+ * @example
516
+ * ```tsx
517
+ * <DateTimePicker value={dt} onChange={setDt} format="24h" step={15}>
518
+ * <DateTimePicker.Input />
519
+ * <DateTimePicker.Popover>
520
+ * <DateTimePicker.Calendar />
521
+ * <DateTimePicker.HourList />
522
+ * <DateTimePicker.MinuteList />
523
+ * </DateTimePicker.Popover>
524
+ * </DateTimePicker>
525
+ * ```
526
+ *
527
+ * @example 12-hour mode
528
+ * ```tsx
529
+ * <DateTimePicker value={dt} onChange={setDt} format="12h" step={15}>
530
+ * <DateTimePicker.Input />
531
+ * <DateTimePicker.Popover>
532
+ * <DateTimePicker.Calendar />
533
+ * <DateTimePicker.HourList />
534
+ * <DateTimePicker.MinuteList />
535
+ * <DateTimePicker.AmPmToggle />
536
+ * </DateTimePicker.Popover>
537
+ * </DateTimePicker>
538
+ * ```
539
+ */
540
+ declare const DateTimePicker: typeof DateTimePickerRoot & {
541
+ Input: react.ForwardRefExoticComponent<DateTimePickerInputProps & react.RefAttributes<HTMLInputElement>>;
542
+ Popover: typeof DatePickerPopover;
543
+ Calendar: typeof DatePickerCalendar;
544
+ MonthGrid: typeof DatePickerMonthGrid;
545
+ YearGrid: typeof DatePickerYearGrid;
546
+ HourList: typeof TimePickerHourList;
547
+ MinuteList: typeof TimePickerMinuteList;
548
+ AmPmToggle: typeof TimePickerAmPmToggle;
549
+ };
550
+
551
+ interface UseDatePickerOptions {
552
+ /** Selected date (controlled mode) */
553
+ value?: ISODateString | null;
554
+ /** Initial date (uncontrolled mode) */
555
+ defaultValue?: ISODateString;
556
+ /** Callback fired when the date changes */
557
+ onChange?: (value: ISODateString | null) => void;
558
+ /** Rules that mark days as disabled */
559
+ disabled?: DisabledRule[];
560
+ /** Day the week starts on */
561
+ weekStartsOn?: WeekStartsOn;
562
+ /** Date adapter */
563
+ adapter?: DateAdapter;
564
+ }
565
+ interface UseDatePickerReturn {
566
+ /** Currently selected date (ISO string) */
567
+ value: ISODateString | null;
568
+ /** Whether the popover is open */
569
+ isOpen: boolean;
570
+ /** Open the popover */
571
+ open: () => void;
572
+ /** Close the popover */
573
+ close: () => void;
574
+ /** Toggle the popover */
575
+ toggle: () => void;
576
+ /** Select a date */
577
+ selectDate: (iso: ISODateString | null) => void;
578
+ /** Month currently displayed (ISO string) */
579
+ viewMonth: ISODateString;
580
+ /** Change the displayed month */
581
+ setViewMonth: (iso: ISODateString) => void;
582
+ /** Calendar grid data */
583
+ calendar: CalendarGrid;
584
+ /** Currently focused date */
585
+ focusedDate: ISODateString;
586
+ /** Update the focused date */
587
+ setFocusedDate: (iso: ISODateString) => void;
588
+ /** Move to the previous month */
589
+ previousMonth: () => void;
590
+ /** Move to the next month */
591
+ nextMonth: () => void;
592
+ /** Unique ID */
593
+ pickerId: string;
594
+ /** Date adapter */
595
+ adapter: DateAdapter;
596
+ }
597
+ /**
598
+ * Hook that manages DatePicker state.
599
+ * Use this when you want to implement a fully custom UI without the built-in components.
600
+ *
601
+ * @example
602
+ * ```tsx
603
+ * function MyDatePicker() {
604
+ * const { value, isOpen, calendar, open, selectDate } = useDatePicker({
605
+ * onChange: (iso) => console.log(iso),
606
+ * });
607
+ * // ... custom rendering
608
+ * }
609
+ * ```
610
+ */
611
+ declare function useDatePicker(options?: UseDatePickerOptions): UseDatePickerReturn;
612
+
613
+ /** Which part to select next (start | end) */
614
+ type RangeSelectingTarget = 'start' | 'end';
615
+
616
+ interface UseRangePickerOptions {
617
+ /** Selected range (controlled mode) */
618
+ value?: DateRange;
619
+ /** Initial range (uncontrolled mode) */
620
+ defaultValue?: DateRange;
621
+ /** Callback fired when the range changes */
622
+ onChange?: (range: DateRange) => void;
623
+ /** Rules that mark days as disabled */
624
+ disabled?: DisabledRule[];
625
+ /** Day the week starts on */
626
+ weekStartsOn?: WeekStartsOn;
627
+ /** Date adapter */
628
+ adapter?: DateAdapter;
629
+ }
630
+ interface UseRangePickerReturn {
631
+ /** Currently selected range */
632
+ value: DateRange;
633
+ /** Which endpoint will be selected next */
634
+ selectingTarget: RangeSelectingTarget;
635
+ /** Handler for clicking a single date */
636
+ selectDate: (iso: ISODateString) => void;
637
+ /** Set the range directly */
638
+ setRange: (range: DateRange) => void;
639
+ /** Whether the popover is open */
640
+ isOpen: boolean;
641
+ open: () => void;
642
+ close: () => void;
643
+ toggle: () => void;
644
+ /** Hovered date (for range preview) */
645
+ hoverDate: ISODateString | null;
646
+ setHoverDate: (iso: ISODateString | null) => void;
647
+ /** Month currently displayed */
648
+ viewMonth: ISODateString;
649
+ setViewMonth: (iso: ISODateString) => void;
650
+ /** Calendar grid */
651
+ calendar: CalendarGrid;
652
+ /** Currently focused date */
653
+ focusedDate: ISODateString;
654
+ setFocusedDate: (iso: ISODateString) => void;
655
+ /** Move to the previous month */
656
+ previousMonth: () => void;
657
+ /** Move to the next month */
658
+ nextMonth: () => void;
659
+ /** Unique ID */
660
+ pickerId: string;
661
+ /** Date adapter */
662
+ adapter: DateAdapter;
663
+ }
664
+ /**
665
+ * Hook that manages RangePicker state.
666
+ * Use this when you want to build a fully custom UI without the built-in components.
667
+ *
668
+ * @example
669
+ * ```tsx
670
+ * function MyRangePicker() {
671
+ * const { value, calendar, selectDate, selectingTarget } = useRangePicker({
672
+ * onChange: (range) => console.log(range.start, range.end),
673
+ * });
674
+ * // selectingTarget === 'start' -> waiting for start date
675
+ * // selectingTarget === 'end' -> waiting for end date
676
+ * }
677
+ * ```
678
+ */
679
+ declare function useRangePicker(options?: UseRangePickerOptions): UseRangePickerReturn;
680
+
681
+ interface UseTimePickerOptions {
682
+ /** Selected time (controlled mode) */
683
+ value?: ISODateString | null;
684
+ /** Initial time (uncontrolled mode) */
685
+ defaultValue?: ISODateString;
686
+ /** Callback fired when the time changes */
687
+ onChange?: (value: ISODateString | null) => void;
688
+ /** 12h or 24h format */
689
+ format?: TimePickerFormat;
690
+ /** Minute step */
691
+ step?: number;
692
+ /** Whether seconds are shown */
693
+ withSeconds?: boolean;
694
+ }
695
+ interface UseTimePickerReturn {
696
+ /** Current ISO datetime value */
697
+ value: ISODateString | null;
698
+ /** Current time (TimeValue) */
699
+ currentTime: TimeValue;
700
+ /** Update part of the time */
701
+ setTime: (partial: Partial<TimeValue>) => void;
702
+ /** Set the hour directly (1-12 in 12h mode, 0-23 in 24h mode) */
703
+ setHour: (hour: number) => void;
704
+ /** Set the minute */
705
+ setMinute: (minute: number) => void;
706
+ /** Set the second */
707
+ setSecond: (second: number) => void;
708
+ /** Change AM/PM (12h mode only) */
709
+ setPeriod: (period: 'AM' | 'PM') => void;
710
+ /** Available hour list */
711
+ availableHours: number[];
712
+ /** Available minute list (respects step) */
713
+ availableMinutes: number[];
714
+ /** 12h or 24h mode */
715
+ format: TimePickerFormat;
716
+ /** Hour value for display (1-12 in 12h mode) */
717
+ displayHour: number;
718
+ /** Current AM/PM (12h mode only, null in 24h) */
719
+ period: 'AM' | 'PM' | null;
720
+ /** Unique ID */
721
+ pickerId: string;
722
+ }
723
+ /**
724
+ * Hook that manages TimePicker state.
725
+ * Use this when you want to build a fully custom UI without the built-in components.
726
+ *
727
+ * @example
728
+ * ```tsx
729
+ * function MyTimePicker() {
730
+ * const {
731
+ * currentTime, displayHour, period,
732
+ * availableHours, availableMinutes,
733
+ * setHour, setMinute, setPeriod,
734
+ * } = useTimePicker({ format: '12h', step: 15 });
735
+ * // displayHour = 1-12, period = "AM" | "PM"
736
+ * // availableMinutes = [0, 15, 30, 45]
737
+ * }
738
+ * ```
739
+ */
740
+ declare function useTimePicker(options?: UseTimePickerOptions): UseTimePickerReturn;
741
+
742
+ export { DatePicker, type DatePickerCalendarClassNames, type DatePickerCalendarProps, type DatePickerInputProps, type DatePickerMonthGridClassNames, type DatePickerMonthGridProps, type DatePickerPopoverProps, type DatePickerRootProps, type DatePickerTriggerProps, type DatePickerYearGridClassNames, type DatePickerYearGridProps, DateTimePicker, type DateTimePickerInputProps, type DateTimePickerRootProps, type PresetKey, type RangeInputPart, RangePicker, type RangePickerCalendarClassNames, type RangePickerCalendarProps, type RangePickerInputProps, type RangePickerPopoverProps, type RangePickerPresetProps, type RangePickerPresetsClassNames, type RangePickerPresetsProps, type RangePickerRootProps, TimePicker, type TimePickerAmPmToggleClassNames, type TimePickerAmPmToggleProps, type TimePickerHourListClassNames, type TimePickerHourListProps, type TimePickerInputProps, type TimePickerMinuteListClassNames, type TimePickerMinuteListProps, type TimePickerRootProps, type UseDatePickerOptions, type UseDatePickerReturn, type UseRangePickerOptions, type UseRangePickerReturn, type UseTimePickerOptions, type UseTimePickerReturn, useDatePicker, useRangePicker, useTimePicker };