@kalyx/react 0.4.0 → 1.0.0-rc.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.
package/dist/index.d.cts CHANGED
@@ -31,6 +31,13 @@ interface DatePickerRootProps {
31
31
  defaultValue?: ISODateString;
32
32
  /** Callback fired when the date changes */
33
33
  onChange?: (value: ISODateString | null) => void;
34
+ /** Callback fired when the popover open state changes */
35
+ onOpenChange?: (isOpen: boolean) => void;
36
+ /**
37
+ * Callback fired when the calendar view navigates to a different month.
38
+ * The value is the ISO string of the first day of the newly-visible month (UTC).
39
+ */
40
+ onCalendarNavigate?: (viewMonth: ISODateString) => void;
34
41
  /** Disabled rules */
35
42
  disabled?: DisabledRule[] | boolean;
36
43
  /** Read-only */
@@ -54,7 +61,7 @@ interface DatePickerRootProps {
54
61
  /** Child components */
55
62
  children: ReactNode;
56
63
  }
57
- declare function DatePickerRoot({ value: controlledValue, defaultValue, onChange, disabled, readOnly, weekStartsOn, displayFormat, locale, displayTimezone, adapter, labels: labelsProp, children, }: DatePickerRootProps): react_jsx_runtime.JSX.Element;
64
+ declare function DatePickerRoot({ value: controlledValue, defaultValue, onChange, onOpenChange, onCalendarNavigate, disabled, readOnly, weekStartsOn, displayFormat, locale, displayTimezone, adapter, labels: labelsProp, children, }: DatePickerRootProps): react_jsx_runtime.JSX.Element;
58
65
 
59
66
  interface DatePickerPopoverProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
60
67
  children?: ReactNode;
@@ -144,6 +151,50 @@ interface DatePickerYearGridProps extends Omit<HTMLAttributes<HTMLDivElement>, '
144
151
  */
145
152
  declare function DatePickerYearGrid({ classNames, onSelect, ...props }: DatePickerYearGridProps): react_jsx_runtime.JSX.Element;
146
153
 
154
+ /** Predefined single-date preset keys. Pass a custom ISO via `date` for anything else. */
155
+ type DatePickerPresetKey = 'today' | 'tomorrow' | 'yesterday' | 'startOfMonth' | 'endOfMonth' | 'startOfYear';
156
+ interface DatePickerPresetsClassNames {
157
+ root?: string;
158
+ preset?: string;
159
+ presetActive?: string;
160
+ }
161
+ interface DatePickerPresetsProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
162
+ classNames?: DatePickerPresetsClassNames;
163
+ children?: ReactNode;
164
+ }
165
+ /**
166
+ * DatePicker.Presets — Container wrapping preset buttons.
167
+ *
168
+ * @example
169
+ * ```tsx
170
+ * <DatePicker.Presets>
171
+ * <DatePicker.Preset value="today">Today</DatePicker.Preset>
172
+ * <DatePicker.Preset value="tomorrow">Tomorrow</DatePicker.Preset>
173
+ * </DatePicker.Presets>
174
+ * ```
175
+ */
176
+ declare function DatePickerPresets({ classNames, children, ...props }: DatePickerPresetsProps): react_jsx_runtime.JSX.Element;
177
+ interface DatePickerPresetProps extends Omit<HTMLAttributes<HTMLButtonElement>, 'value'> {
178
+ /** Predefined preset key; omit when passing `date` directly */
179
+ value?: DatePickerPresetKey;
180
+ /** Pass an ISO date directly (alternative to `value`) */
181
+ date?: ISODateString;
182
+ children: ReactNode;
183
+ className?: string;
184
+ }
185
+ /**
186
+ * DatePicker.Preset — One-click preset button to select a specific date.
187
+ *
188
+ * Pass either `value` (a preset key) or `date` (a direct ISO string).
189
+ *
190
+ * @example
191
+ * ```tsx
192
+ * <DatePicker.Preset value="today">Today</DatePicker.Preset>
193
+ * <DatePicker.Preset date="2026-01-01T00:00:00.000Z">New Year's</DatePicker.Preset>
194
+ * ```
195
+ */
196
+ declare function DatePickerPreset({ value: presetKey, date: directDate, children, onClick, ...props }: DatePickerPresetProps): react_jsx_runtime.JSX.Element;
197
+
147
198
  interface DatePickerInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange' | 'type'> {
148
199
  /** Date display format (defaults to parent's displayFormat) */
149
200
  format?: string;
@@ -186,6 +237,8 @@ declare const DatePicker: typeof DatePickerRoot & {
186
237
  Calendar: typeof DatePickerCalendar;
187
238
  MonthGrid: typeof DatePickerMonthGrid;
188
239
  YearGrid: typeof DatePickerYearGrid;
240
+ Presets: typeof DatePickerPresets;
241
+ Preset: typeof DatePickerPreset;
189
242
  };
190
243
 
191
244
  /**
@@ -209,6 +262,13 @@ interface RangePickerRootProps {
209
262
  defaultValue?: DateRange;
210
263
  /** Callback fired when the range changes */
211
264
  onChange?: (range: DateRange) => void;
265
+ /** Callback fired when the popover open state changes */
266
+ onOpenChange?: (isOpen: boolean) => void;
267
+ /**
268
+ * Callback fired when the calendar view navigates to a different month.
269
+ * The value is the ISO string of the first day of the newly-visible month (UTC).
270
+ */
271
+ onCalendarNavigate?: (viewMonth: ISODateString) => void;
212
272
  /** Disabled rules */
213
273
  disabled?: DisabledRule[] | boolean;
214
274
  /** Read-only */
@@ -232,7 +292,7 @@ interface RangePickerRootProps {
232
292
  /** Child components */
233
293
  children: ReactNode;
234
294
  }
235
- declare function RangePickerRoot({ value: controlledValue, defaultValue, onChange, disabled, readOnly, weekStartsOn, displayFormat, locale, displayTimezone, adapter, labels: labelsProp, children, }: RangePickerRootProps): react_jsx_runtime.JSX.Element;
295
+ declare function RangePickerRoot({ value: controlledValue, defaultValue, onChange, onOpenChange, onCalendarNavigate, disabled, readOnly, weekStartsOn, displayFormat, locale, displayTimezone, adapter, labels: labelsProp, children, }: RangePickerRootProps): react_jsx_runtime.JSX.Element;
236
296
 
237
297
  interface RangePickerPopoverProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
238
298
  children?: ReactNode;
@@ -257,10 +317,18 @@ interface RangePickerCalendarClassNames {
257
317
  dayInRange?: string;
258
318
  weekdayHeader?: string;
259
319
  }
320
+ /**
321
+ * Selection mode for the calendar grid.
322
+ * - `'range'` (default): RangePicker behavior — two clicks (start, end) commit a custom range.
323
+ * - `'week'`: WeekPicker behavior — a single click commits the entire week containing the clicked day.
324
+ */
325
+ type RangePickerCalendarSelectionMode = 'range' | 'week';
260
326
  interface RangePickerCalendarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
261
327
  classNames?: RangePickerCalendarClassNames;
328
+ /** @default 'range' */
329
+ selectionMode?: RangePickerCalendarSelectionMode;
262
330
  }
263
- declare function RangePickerCalendar({ classNames, ...props }: RangePickerCalendarProps): react_jsx_runtime.JSX.Element;
331
+ declare function RangePickerCalendar({ classNames, selectionMode, ...props }: RangePickerCalendarProps): react_jsx_runtime.JSX.Element;
264
332
 
265
333
  /** Predefined preset keys. Custom ranges are also supported. */
266
334
  type PresetKey = 'today' | 'yesterday' | 'last7days' | 'last30days' | 'thisWeek' | 'lastWeek' | 'thisMonth' | 'lastMonth' | 'thisYear';
@@ -492,6 +560,13 @@ interface DateTimePickerRootProps {
492
560
  defaultValue?: ISODateString;
493
561
  /** Callback fired when the datetime changes */
494
562
  onChange?: (value: ISODateString | null) => void;
563
+ /** Callback fired when the popover open state changes */
564
+ onOpenChange?: (isOpen: boolean) => void;
565
+ /**
566
+ * Callback fired when the calendar view navigates to a different month.
567
+ * The value is the ISO string of the first day of the newly-visible month (UTC).
568
+ */
569
+ onCalendarNavigate?: (viewMonth: ISODateString) => void;
495
570
  /** 12-hour or 24-hour mode */
496
571
  format?: TimePickerFormat;
497
572
  /** Minute step (e.g., 1, 5, 15, 30) */
@@ -531,7 +606,7 @@ interface DateTimePickerRootProps {
531
606
  * - Changing time in TimePicker -> changes only the time, preserves the date
532
607
  * - Escape / outside click -> close the popover (commit)
533
608
  */
534
- declare function DateTimePickerRoot({ value: controlledValue, defaultValue, onChange, format, step, disabled, readOnly, weekStartsOn, displayFormat, locale, displayTimezone, adapter, labels: labelsProp, children, }: DateTimePickerRootProps): react_jsx_runtime.JSX.Element;
609
+ declare function DateTimePickerRoot({ value: controlledValue, defaultValue, onChange, onOpenChange, onCalendarNavigate, format, step, disabled, readOnly, weekStartsOn, displayFormat, locale, displayTimezone, adapter, labels: labelsProp, children, }: DateTimePickerRootProps): react_jsx_runtime.JSX.Element;
535
610
 
536
611
  interface DateTimePickerInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange' | 'type'> {
537
612
  }
@@ -579,6 +654,183 @@ declare const DateTimePicker: typeof DateTimePickerRoot & {
579
654
  AmPmToggle: typeof TimePickerAmPmToggle;
580
655
  };
581
656
 
657
+ /** Props for MonthPicker Root — identical to DatePicker Root, but `displayFormat` defaults to `"yyyy-MM"`. */
658
+ type MonthPickerRootProps = DatePickerRootProps;
659
+ /**
660
+ * MonthPicker.Root — thin wrapper over DatePicker.Root that defaults `displayFormat` to `"yyyy-MM"`.
661
+ * All other behavior (controlled/uncontrolled, displayTimezone, disabled rules) is inherited.
662
+ */
663
+ declare function MonthPickerRoot(props: MonthPickerRootProps): react_jsx_runtime.JSX.Element;
664
+
665
+ interface MonthPickerGridClassNames {
666
+ root?: string;
667
+ header?: string;
668
+ title?: string;
669
+ navButton?: string;
670
+ grid?: string;
671
+ gridRow?: string;
672
+ month?: string;
673
+ monthSelected?: string;
674
+ monthCurrent?: string;
675
+ monthDisabled?: string;
676
+ }
677
+ interface MonthPickerGridProps extends Omit<HTMLAttributes<HTMLDivElement>, "role"> {
678
+ classNames?: MonthPickerGridClassNames;
679
+ }
680
+ /**
681
+ * MonthPicker.Grid — 12-month commit grid. Clicking a month selects it and closes the popover.
682
+ *
683
+ * Unlike `DatePicker.MonthGrid` (drilldown), this component commits the month selection
684
+ * via `ctx.selectDate`, emitting the month-start ISO string.
685
+ *
686
+ * @example
687
+ * ```tsx
688
+ * <MonthPicker value={month} onChange={setMonth} displayFormat="yyyy-MM">
689
+ * <MonthPicker.Input />
690
+ * <MonthPicker.Popover>
691
+ * <MonthPicker.Grid />
692
+ * </MonthPicker.Popover>
693
+ * </MonthPicker>
694
+ * ```
695
+ */
696
+ declare function MonthPickerGrid({ classNames, ...props }: MonthPickerGridProps): react_jsx_runtime.JSX.Element;
697
+
698
+ /**
699
+ * MonthPicker — Headless month selector. Value is the first day of the selected month (UTC-ISO).
700
+ *
701
+ * Reuses DatePicker infrastructure (Root, Input, Trigger, Popover) so the public surface stays
702
+ * consistent. The only new building block is `MonthPicker.Grid`, a 12-month commit grid.
703
+ *
704
+ * @example Basic
705
+ * ```tsx
706
+ * const [month, setMonth] = useState<string | null>(null);
707
+ * <MonthPicker value={month} onChange={setMonth}>
708
+ * <MonthPicker.Input placeholder="Pick a month" />
709
+ * <MonthPicker.Popover>
710
+ * <MonthPicker.Grid />
711
+ * </MonthPicker.Popover>
712
+ * </MonthPicker>
713
+ * ```
714
+ */
715
+ declare const MonthPicker: typeof MonthPickerRoot & {
716
+ Input: react.ForwardRefExoticComponent<DatePickerInputProps & react.RefAttributes<HTMLInputElement>>;
717
+ Trigger: react.ForwardRefExoticComponent<DatePickerTriggerProps & react.RefAttributes<HTMLButtonElement>>;
718
+ Popover: typeof DatePickerPopover;
719
+ Grid: typeof MonthPickerGrid;
720
+ };
721
+
722
+ /** Props for YearPicker Root — identical to DatePicker Root, but `displayFormat` defaults to `"yyyy"`. */
723
+ type YearPickerRootProps = DatePickerRootProps;
724
+ /**
725
+ * YearPicker.Root — thin wrapper over DatePicker.Root that defaults `displayFormat` to `"yyyy"`.
726
+ */
727
+ declare function YearPickerRoot(props: YearPickerRootProps): react_jsx_runtime.JSX.Element;
728
+
729
+ interface YearPickerGridClassNames {
730
+ root?: string;
731
+ header?: string;
732
+ title?: string;
733
+ navButton?: string;
734
+ grid?: string;
735
+ gridRow?: string;
736
+ year?: string;
737
+ yearSelected?: string;
738
+ yearCurrent?: string;
739
+ yearDisabled?: string;
740
+ }
741
+ interface YearPickerGridProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
742
+ classNames?: YearPickerGridClassNames;
743
+ }
744
+ /**
745
+ * YearPicker.Grid — 12-year decade commit grid. Clicking a year selects it and closes the popover.
746
+ *
747
+ * Unlike `DatePicker.YearGrid` (drilldown), this component commits the year selection via
748
+ * `ctx.selectDate`, emitting the year-start ISO string (Jan 1 at UTC midnight).
749
+ *
750
+ * @example
751
+ * ```tsx
752
+ * <YearPicker value={year} onChange={setYear}>
753
+ * <YearPicker.Input />
754
+ * <YearPicker.Popover>
755
+ * <YearPicker.Grid />
756
+ * </YearPicker.Popover>
757
+ * </YearPicker>
758
+ * ```
759
+ */
760
+ declare function YearPickerGrid({ classNames, ...props }: YearPickerGridProps): react_jsx_runtime.JSX.Element;
761
+
762
+ /**
763
+ * YearPicker — Headless year selector. Value is Jan 1 of the selected year (UTC-ISO).
764
+ *
765
+ * Reuses DatePicker infrastructure (Root, Input, Trigger, Popover) so the public surface stays
766
+ * consistent. The only new building block is `YearPicker.Grid`, a 12-year decade commit grid.
767
+ *
768
+ * @example Basic
769
+ * ```tsx
770
+ * const [year, setYear] = useState<string | null>(null);
771
+ * <YearPicker value={year} onChange={setYear}>
772
+ * <YearPicker.Input placeholder="Pick a year" />
773
+ * <YearPicker.Popover>
774
+ * <YearPicker.Grid />
775
+ * </YearPicker.Popover>
776
+ * </YearPicker>
777
+ * ```
778
+ */
779
+ declare const YearPicker: typeof YearPickerRoot & {
780
+ Input: react.ForwardRefExoticComponent<DatePickerInputProps & react.RefAttributes<HTMLInputElement>>;
781
+ Trigger: react.ForwardRefExoticComponent<DatePickerTriggerProps & react.RefAttributes<HTMLButtonElement>>;
782
+ Popover: typeof DatePickerPopover;
783
+ Grid: typeof YearPickerGrid;
784
+ };
785
+
786
+ /** Props for WeekPicker.Root — reuses RangePicker.Root. */
787
+ type WeekPickerRootProps = RangePickerRootProps;
788
+ /**
789
+ * WeekPicker.Root — thin wrapper over RangePicker.Root.
790
+ *
791
+ * The wrapper is necessary (rather than aliasing `RangePickerRoot` directly) because
792
+ * `Object.assign` on the exported root mutates the target. Without a distinct identity here,
793
+ * `WeekPicker.Calendar` would leak onto `RangePicker.Calendar`.
794
+ */
795
+ declare function WeekPickerRoot(props: WeekPickerRootProps): react_jsx_runtime.JSX.Element;
796
+
797
+ /**
798
+ * WeekPicker.Calendar — renders the same calendar grid as `RangePicker.Calendar` but with
799
+ * `selectionMode="week"` so a single click commits the full week containing the clicked day.
800
+ *
801
+ * This is a thin wrapper over `RangePicker.Calendar` — the two share all keyboard navigation,
802
+ * ARIA semantics, and rendering logic.
803
+ */
804
+ declare function WeekPickerCalendar(props: Omit<RangePickerCalendarProps, 'selectionMode'>): react_jsx_runtime.JSX.Element;
805
+ /** Re-export RangePicker calendar classNames — the surface is identical. */
806
+ type WeekPickerCalendarClassNames = RangePickerCalendarClassNames;
807
+ type WeekPickerCalendarProps = Omit<RangePickerCalendarProps, 'selectionMode'>;
808
+
809
+ /**
810
+ * WeekPicker — Headless week selector. Value is a `DateRange` spanning the entire week (start
811
+ * and end days inclusive, based on `weekStartsOn`). A single click selects the full week.
812
+ *
813
+ * Internally reuses `RangePicker` infrastructure (Root, Input, Popover). The only new primitive
814
+ * is `WeekPicker.Calendar`, which overrides click behavior to commit the full week.
815
+ *
816
+ * @example Basic
817
+ * ```tsx
818
+ * const [week, setWeek] = useState<DateRange>({ start: null, end: null });
819
+ * <WeekPicker value={week} onChange={setWeek}>
820
+ * <WeekPicker.Input part="start" />
821
+ * <WeekPicker.Input part="end" />
822
+ * <WeekPicker.Popover>
823
+ * <WeekPicker.Calendar />
824
+ * </WeekPicker.Popover>
825
+ * </WeekPicker>
826
+ * ```
827
+ */
828
+ declare const WeekPicker: typeof WeekPickerRoot & {
829
+ Input: react.ForwardRefExoticComponent<RangePickerInputProps & react.RefAttributes<HTMLInputElement>>;
830
+ Popover: typeof RangePickerPopover;
831
+ Calendar: typeof WeekPickerCalendar;
832
+ };
833
+
582
834
  interface UseDatePickerOptions {
583
835
  /** Selected date (controlled mode) */
584
836
  value?: ISODateString | null;
@@ -776,4 +1028,4 @@ interface UseTimePickerReturn {
776
1028
  */
777
1029
  declare function useTimePicker(options?: UseTimePickerOptions): UseTimePickerReturn;
778
1030
 
779
- 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 };
1031
+ export { DatePicker, type DatePickerCalendarClassNames, type DatePickerCalendarProps, type DatePickerInputProps, type DatePickerMonthGridClassNames, type DatePickerMonthGridProps, type DatePickerPopoverProps, type DatePickerPresetKey, type DatePickerPresetProps, type DatePickerPresetsClassNames, type DatePickerPresetsProps, type DatePickerRootProps, type DatePickerTriggerProps, type DatePickerYearGridClassNames, type DatePickerYearGridProps, DateTimePicker, type DateTimePickerInputProps, type DateTimePickerRootProps, MonthPicker, type MonthPickerGridClassNames, type MonthPickerGridProps, type DatePickerInputProps as MonthPickerInputProps, type DatePickerPopoverProps as MonthPickerPopoverProps, type MonthPickerRootProps, type DatePickerTriggerProps as MonthPickerTriggerProps, 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, WeekPicker, type WeekPickerCalendarClassNames, type WeekPickerCalendarProps, type RangePickerInputProps as WeekPickerInputProps, type RangePickerPopoverProps as WeekPickerPopoverProps, type WeekPickerRootProps, YearPicker, type YearPickerGridClassNames, type YearPickerGridProps, type DatePickerInputProps as YearPickerInputProps, type DatePickerPopoverProps as YearPickerPopoverProps, type YearPickerRootProps, type DatePickerTriggerProps as YearPickerTriggerProps, useDatePicker, useRangePicker, useTimePicker };
package/dist/index.d.ts CHANGED
@@ -31,6 +31,13 @@ interface DatePickerRootProps {
31
31
  defaultValue?: ISODateString;
32
32
  /** Callback fired when the date changes */
33
33
  onChange?: (value: ISODateString | null) => void;
34
+ /** Callback fired when the popover open state changes */
35
+ onOpenChange?: (isOpen: boolean) => void;
36
+ /**
37
+ * Callback fired when the calendar view navigates to a different month.
38
+ * The value is the ISO string of the first day of the newly-visible month (UTC).
39
+ */
40
+ onCalendarNavigate?: (viewMonth: ISODateString) => void;
34
41
  /** Disabled rules */
35
42
  disabled?: DisabledRule[] | boolean;
36
43
  /** Read-only */
@@ -54,7 +61,7 @@ interface DatePickerRootProps {
54
61
  /** Child components */
55
62
  children: ReactNode;
56
63
  }
57
- declare function DatePickerRoot({ value: controlledValue, defaultValue, onChange, disabled, readOnly, weekStartsOn, displayFormat, locale, displayTimezone, adapter, labels: labelsProp, children, }: DatePickerRootProps): react_jsx_runtime.JSX.Element;
64
+ declare function DatePickerRoot({ value: controlledValue, defaultValue, onChange, onOpenChange, onCalendarNavigate, disabled, readOnly, weekStartsOn, displayFormat, locale, displayTimezone, adapter, labels: labelsProp, children, }: DatePickerRootProps): react_jsx_runtime.JSX.Element;
58
65
 
59
66
  interface DatePickerPopoverProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
60
67
  children?: ReactNode;
@@ -144,6 +151,50 @@ interface DatePickerYearGridProps extends Omit<HTMLAttributes<HTMLDivElement>, '
144
151
  */
145
152
  declare function DatePickerYearGrid({ classNames, onSelect, ...props }: DatePickerYearGridProps): react_jsx_runtime.JSX.Element;
146
153
 
154
+ /** Predefined single-date preset keys. Pass a custom ISO via `date` for anything else. */
155
+ type DatePickerPresetKey = 'today' | 'tomorrow' | 'yesterday' | 'startOfMonth' | 'endOfMonth' | 'startOfYear';
156
+ interface DatePickerPresetsClassNames {
157
+ root?: string;
158
+ preset?: string;
159
+ presetActive?: string;
160
+ }
161
+ interface DatePickerPresetsProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
162
+ classNames?: DatePickerPresetsClassNames;
163
+ children?: ReactNode;
164
+ }
165
+ /**
166
+ * DatePicker.Presets — Container wrapping preset buttons.
167
+ *
168
+ * @example
169
+ * ```tsx
170
+ * <DatePicker.Presets>
171
+ * <DatePicker.Preset value="today">Today</DatePicker.Preset>
172
+ * <DatePicker.Preset value="tomorrow">Tomorrow</DatePicker.Preset>
173
+ * </DatePicker.Presets>
174
+ * ```
175
+ */
176
+ declare function DatePickerPresets({ classNames, children, ...props }: DatePickerPresetsProps): react_jsx_runtime.JSX.Element;
177
+ interface DatePickerPresetProps extends Omit<HTMLAttributes<HTMLButtonElement>, 'value'> {
178
+ /** Predefined preset key; omit when passing `date` directly */
179
+ value?: DatePickerPresetKey;
180
+ /** Pass an ISO date directly (alternative to `value`) */
181
+ date?: ISODateString;
182
+ children: ReactNode;
183
+ className?: string;
184
+ }
185
+ /**
186
+ * DatePicker.Preset — One-click preset button to select a specific date.
187
+ *
188
+ * Pass either `value` (a preset key) or `date` (a direct ISO string).
189
+ *
190
+ * @example
191
+ * ```tsx
192
+ * <DatePicker.Preset value="today">Today</DatePicker.Preset>
193
+ * <DatePicker.Preset date="2026-01-01T00:00:00.000Z">New Year's</DatePicker.Preset>
194
+ * ```
195
+ */
196
+ declare function DatePickerPreset({ value: presetKey, date: directDate, children, onClick, ...props }: DatePickerPresetProps): react_jsx_runtime.JSX.Element;
197
+
147
198
  interface DatePickerInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange' | 'type'> {
148
199
  /** Date display format (defaults to parent's displayFormat) */
149
200
  format?: string;
@@ -186,6 +237,8 @@ declare const DatePicker: typeof DatePickerRoot & {
186
237
  Calendar: typeof DatePickerCalendar;
187
238
  MonthGrid: typeof DatePickerMonthGrid;
188
239
  YearGrid: typeof DatePickerYearGrid;
240
+ Presets: typeof DatePickerPresets;
241
+ Preset: typeof DatePickerPreset;
189
242
  };
190
243
 
191
244
  /**
@@ -209,6 +262,13 @@ interface RangePickerRootProps {
209
262
  defaultValue?: DateRange;
210
263
  /** Callback fired when the range changes */
211
264
  onChange?: (range: DateRange) => void;
265
+ /** Callback fired when the popover open state changes */
266
+ onOpenChange?: (isOpen: boolean) => void;
267
+ /**
268
+ * Callback fired when the calendar view navigates to a different month.
269
+ * The value is the ISO string of the first day of the newly-visible month (UTC).
270
+ */
271
+ onCalendarNavigate?: (viewMonth: ISODateString) => void;
212
272
  /** Disabled rules */
213
273
  disabled?: DisabledRule[] | boolean;
214
274
  /** Read-only */
@@ -232,7 +292,7 @@ interface RangePickerRootProps {
232
292
  /** Child components */
233
293
  children: ReactNode;
234
294
  }
235
- declare function RangePickerRoot({ value: controlledValue, defaultValue, onChange, disabled, readOnly, weekStartsOn, displayFormat, locale, displayTimezone, adapter, labels: labelsProp, children, }: RangePickerRootProps): react_jsx_runtime.JSX.Element;
295
+ declare function RangePickerRoot({ value: controlledValue, defaultValue, onChange, onOpenChange, onCalendarNavigate, disabled, readOnly, weekStartsOn, displayFormat, locale, displayTimezone, adapter, labels: labelsProp, children, }: RangePickerRootProps): react_jsx_runtime.JSX.Element;
236
296
 
237
297
  interface RangePickerPopoverProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
238
298
  children?: ReactNode;
@@ -257,10 +317,18 @@ interface RangePickerCalendarClassNames {
257
317
  dayInRange?: string;
258
318
  weekdayHeader?: string;
259
319
  }
320
+ /**
321
+ * Selection mode for the calendar grid.
322
+ * - `'range'` (default): RangePicker behavior — two clicks (start, end) commit a custom range.
323
+ * - `'week'`: WeekPicker behavior — a single click commits the entire week containing the clicked day.
324
+ */
325
+ type RangePickerCalendarSelectionMode = 'range' | 'week';
260
326
  interface RangePickerCalendarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
261
327
  classNames?: RangePickerCalendarClassNames;
328
+ /** @default 'range' */
329
+ selectionMode?: RangePickerCalendarSelectionMode;
262
330
  }
263
- declare function RangePickerCalendar({ classNames, ...props }: RangePickerCalendarProps): react_jsx_runtime.JSX.Element;
331
+ declare function RangePickerCalendar({ classNames, selectionMode, ...props }: RangePickerCalendarProps): react_jsx_runtime.JSX.Element;
264
332
 
265
333
  /** Predefined preset keys. Custom ranges are also supported. */
266
334
  type PresetKey = 'today' | 'yesterday' | 'last7days' | 'last30days' | 'thisWeek' | 'lastWeek' | 'thisMonth' | 'lastMonth' | 'thisYear';
@@ -492,6 +560,13 @@ interface DateTimePickerRootProps {
492
560
  defaultValue?: ISODateString;
493
561
  /** Callback fired when the datetime changes */
494
562
  onChange?: (value: ISODateString | null) => void;
563
+ /** Callback fired when the popover open state changes */
564
+ onOpenChange?: (isOpen: boolean) => void;
565
+ /**
566
+ * Callback fired when the calendar view navigates to a different month.
567
+ * The value is the ISO string of the first day of the newly-visible month (UTC).
568
+ */
569
+ onCalendarNavigate?: (viewMonth: ISODateString) => void;
495
570
  /** 12-hour or 24-hour mode */
496
571
  format?: TimePickerFormat;
497
572
  /** Minute step (e.g., 1, 5, 15, 30) */
@@ -531,7 +606,7 @@ interface DateTimePickerRootProps {
531
606
  * - Changing time in TimePicker -> changes only the time, preserves the date
532
607
  * - Escape / outside click -> close the popover (commit)
533
608
  */
534
- declare function DateTimePickerRoot({ value: controlledValue, defaultValue, onChange, format, step, disabled, readOnly, weekStartsOn, displayFormat, locale, displayTimezone, adapter, labels: labelsProp, children, }: DateTimePickerRootProps): react_jsx_runtime.JSX.Element;
609
+ declare function DateTimePickerRoot({ value: controlledValue, defaultValue, onChange, onOpenChange, onCalendarNavigate, format, step, disabled, readOnly, weekStartsOn, displayFormat, locale, displayTimezone, adapter, labels: labelsProp, children, }: DateTimePickerRootProps): react_jsx_runtime.JSX.Element;
535
610
 
536
611
  interface DateTimePickerInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange' | 'type'> {
537
612
  }
@@ -579,6 +654,183 @@ declare const DateTimePicker: typeof DateTimePickerRoot & {
579
654
  AmPmToggle: typeof TimePickerAmPmToggle;
580
655
  };
581
656
 
657
+ /** Props for MonthPicker Root — identical to DatePicker Root, but `displayFormat` defaults to `"yyyy-MM"`. */
658
+ type MonthPickerRootProps = DatePickerRootProps;
659
+ /**
660
+ * MonthPicker.Root — thin wrapper over DatePicker.Root that defaults `displayFormat` to `"yyyy-MM"`.
661
+ * All other behavior (controlled/uncontrolled, displayTimezone, disabled rules) is inherited.
662
+ */
663
+ declare function MonthPickerRoot(props: MonthPickerRootProps): react_jsx_runtime.JSX.Element;
664
+
665
+ interface MonthPickerGridClassNames {
666
+ root?: string;
667
+ header?: string;
668
+ title?: string;
669
+ navButton?: string;
670
+ grid?: string;
671
+ gridRow?: string;
672
+ month?: string;
673
+ monthSelected?: string;
674
+ monthCurrent?: string;
675
+ monthDisabled?: string;
676
+ }
677
+ interface MonthPickerGridProps extends Omit<HTMLAttributes<HTMLDivElement>, "role"> {
678
+ classNames?: MonthPickerGridClassNames;
679
+ }
680
+ /**
681
+ * MonthPicker.Grid — 12-month commit grid. Clicking a month selects it and closes the popover.
682
+ *
683
+ * Unlike `DatePicker.MonthGrid` (drilldown), this component commits the month selection
684
+ * via `ctx.selectDate`, emitting the month-start ISO string.
685
+ *
686
+ * @example
687
+ * ```tsx
688
+ * <MonthPicker value={month} onChange={setMonth} displayFormat="yyyy-MM">
689
+ * <MonthPicker.Input />
690
+ * <MonthPicker.Popover>
691
+ * <MonthPicker.Grid />
692
+ * </MonthPicker.Popover>
693
+ * </MonthPicker>
694
+ * ```
695
+ */
696
+ declare function MonthPickerGrid({ classNames, ...props }: MonthPickerGridProps): react_jsx_runtime.JSX.Element;
697
+
698
+ /**
699
+ * MonthPicker — Headless month selector. Value is the first day of the selected month (UTC-ISO).
700
+ *
701
+ * Reuses DatePicker infrastructure (Root, Input, Trigger, Popover) so the public surface stays
702
+ * consistent. The only new building block is `MonthPicker.Grid`, a 12-month commit grid.
703
+ *
704
+ * @example Basic
705
+ * ```tsx
706
+ * const [month, setMonth] = useState<string | null>(null);
707
+ * <MonthPicker value={month} onChange={setMonth}>
708
+ * <MonthPicker.Input placeholder="Pick a month" />
709
+ * <MonthPicker.Popover>
710
+ * <MonthPicker.Grid />
711
+ * </MonthPicker.Popover>
712
+ * </MonthPicker>
713
+ * ```
714
+ */
715
+ declare const MonthPicker: typeof MonthPickerRoot & {
716
+ Input: react.ForwardRefExoticComponent<DatePickerInputProps & react.RefAttributes<HTMLInputElement>>;
717
+ Trigger: react.ForwardRefExoticComponent<DatePickerTriggerProps & react.RefAttributes<HTMLButtonElement>>;
718
+ Popover: typeof DatePickerPopover;
719
+ Grid: typeof MonthPickerGrid;
720
+ };
721
+
722
+ /** Props for YearPicker Root — identical to DatePicker Root, but `displayFormat` defaults to `"yyyy"`. */
723
+ type YearPickerRootProps = DatePickerRootProps;
724
+ /**
725
+ * YearPicker.Root — thin wrapper over DatePicker.Root that defaults `displayFormat` to `"yyyy"`.
726
+ */
727
+ declare function YearPickerRoot(props: YearPickerRootProps): react_jsx_runtime.JSX.Element;
728
+
729
+ interface YearPickerGridClassNames {
730
+ root?: string;
731
+ header?: string;
732
+ title?: string;
733
+ navButton?: string;
734
+ grid?: string;
735
+ gridRow?: string;
736
+ year?: string;
737
+ yearSelected?: string;
738
+ yearCurrent?: string;
739
+ yearDisabled?: string;
740
+ }
741
+ interface YearPickerGridProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
742
+ classNames?: YearPickerGridClassNames;
743
+ }
744
+ /**
745
+ * YearPicker.Grid — 12-year decade commit grid. Clicking a year selects it and closes the popover.
746
+ *
747
+ * Unlike `DatePicker.YearGrid` (drilldown), this component commits the year selection via
748
+ * `ctx.selectDate`, emitting the year-start ISO string (Jan 1 at UTC midnight).
749
+ *
750
+ * @example
751
+ * ```tsx
752
+ * <YearPicker value={year} onChange={setYear}>
753
+ * <YearPicker.Input />
754
+ * <YearPicker.Popover>
755
+ * <YearPicker.Grid />
756
+ * </YearPicker.Popover>
757
+ * </YearPicker>
758
+ * ```
759
+ */
760
+ declare function YearPickerGrid({ classNames, ...props }: YearPickerGridProps): react_jsx_runtime.JSX.Element;
761
+
762
+ /**
763
+ * YearPicker — Headless year selector. Value is Jan 1 of the selected year (UTC-ISO).
764
+ *
765
+ * Reuses DatePicker infrastructure (Root, Input, Trigger, Popover) so the public surface stays
766
+ * consistent. The only new building block is `YearPicker.Grid`, a 12-year decade commit grid.
767
+ *
768
+ * @example Basic
769
+ * ```tsx
770
+ * const [year, setYear] = useState<string | null>(null);
771
+ * <YearPicker value={year} onChange={setYear}>
772
+ * <YearPicker.Input placeholder="Pick a year" />
773
+ * <YearPicker.Popover>
774
+ * <YearPicker.Grid />
775
+ * </YearPicker.Popover>
776
+ * </YearPicker>
777
+ * ```
778
+ */
779
+ declare const YearPicker: typeof YearPickerRoot & {
780
+ Input: react.ForwardRefExoticComponent<DatePickerInputProps & react.RefAttributes<HTMLInputElement>>;
781
+ Trigger: react.ForwardRefExoticComponent<DatePickerTriggerProps & react.RefAttributes<HTMLButtonElement>>;
782
+ Popover: typeof DatePickerPopover;
783
+ Grid: typeof YearPickerGrid;
784
+ };
785
+
786
+ /** Props for WeekPicker.Root — reuses RangePicker.Root. */
787
+ type WeekPickerRootProps = RangePickerRootProps;
788
+ /**
789
+ * WeekPicker.Root — thin wrapper over RangePicker.Root.
790
+ *
791
+ * The wrapper is necessary (rather than aliasing `RangePickerRoot` directly) because
792
+ * `Object.assign` on the exported root mutates the target. Without a distinct identity here,
793
+ * `WeekPicker.Calendar` would leak onto `RangePicker.Calendar`.
794
+ */
795
+ declare function WeekPickerRoot(props: WeekPickerRootProps): react_jsx_runtime.JSX.Element;
796
+
797
+ /**
798
+ * WeekPicker.Calendar — renders the same calendar grid as `RangePicker.Calendar` but with
799
+ * `selectionMode="week"` so a single click commits the full week containing the clicked day.
800
+ *
801
+ * This is a thin wrapper over `RangePicker.Calendar` — the two share all keyboard navigation,
802
+ * ARIA semantics, and rendering logic.
803
+ */
804
+ declare function WeekPickerCalendar(props: Omit<RangePickerCalendarProps, 'selectionMode'>): react_jsx_runtime.JSX.Element;
805
+ /** Re-export RangePicker calendar classNames — the surface is identical. */
806
+ type WeekPickerCalendarClassNames = RangePickerCalendarClassNames;
807
+ type WeekPickerCalendarProps = Omit<RangePickerCalendarProps, 'selectionMode'>;
808
+
809
+ /**
810
+ * WeekPicker — Headless week selector. Value is a `DateRange` spanning the entire week (start
811
+ * and end days inclusive, based on `weekStartsOn`). A single click selects the full week.
812
+ *
813
+ * Internally reuses `RangePicker` infrastructure (Root, Input, Popover). The only new primitive
814
+ * is `WeekPicker.Calendar`, which overrides click behavior to commit the full week.
815
+ *
816
+ * @example Basic
817
+ * ```tsx
818
+ * const [week, setWeek] = useState<DateRange>({ start: null, end: null });
819
+ * <WeekPicker value={week} onChange={setWeek}>
820
+ * <WeekPicker.Input part="start" />
821
+ * <WeekPicker.Input part="end" />
822
+ * <WeekPicker.Popover>
823
+ * <WeekPicker.Calendar />
824
+ * </WeekPicker.Popover>
825
+ * </WeekPicker>
826
+ * ```
827
+ */
828
+ declare const WeekPicker: typeof WeekPickerRoot & {
829
+ Input: react.ForwardRefExoticComponent<RangePickerInputProps & react.RefAttributes<HTMLInputElement>>;
830
+ Popover: typeof RangePickerPopover;
831
+ Calendar: typeof WeekPickerCalendar;
832
+ };
833
+
582
834
  interface UseDatePickerOptions {
583
835
  /** Selected date (controlled mode) */
584
836
  value?: ISODateString | null;
@@ -776,4 +1028,4 @@ interface UseTimePickerReturn {
776
1028
  */
777
1029
  declare function useTimePicker(options?: UseTimePickerOptions): UseTimePickerReturn;
778
1030
 
779
- 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 };
1031
+ export { DatePicker, type DatePickerCalendarClassNames, type DatePickerCalendarProps, type DatePickerInputProps, type DatePickerMonthGridClassNames, type DatePickerMonthGridProps, type DatePickerPopoverProps, type DatePickerPresetKey, type DatePickerPresetProps, type DatePickerPresetsClassNames, type DatePickerPresetsProps, type DatePickerRootProps, type DatePickerTriggerProps, type DatePickerYearGridClassNames, type DatePickerYearGridProps, DateTimePicker, type DateTimePickerInputProps, type DateTimePickerRootProps, MonthPicker, type MonthPickerGridClassNames, type MonthPickerGridProps, type DatePickerInputProps as MonthPickerInputProps, type DatePickerPopoverProps as MonthPickerPopoverProps, type MonthPickerRootProps, type DatePickerTriggerProps as MonthPickerTriggerProps, 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, WeekPicker, type WeekPickerCalendarClassNames, type WeekPickerCalendarProps, type RangePickerInputProps as WeekPickerInputProps, type RangePickerPopoverProps as WeekPickerPopoverProps, type WeekPickerRootProps, YearPicker, type YearPickerGridClassNames, type YearPickerGridProps, type DatePickerInputProps as YearPickerInputProps, type DatePickerPopoverProps as YearPickerPopoverProps, type YearPickerRootProps, type DatePickerTriggerProps as YearPickerTriggerProps, useDatePicker, useRangePicker, useTimePicker };