@kalyx/react 1.0.0-rc.12 → 1.0.0-rc.14

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
@@ -1,8 +1,9 @@
1
+ export { DateFnsAdapter } from '@kalyx/adapter-date-fns';
2
+ import { ISODateString, DisabledRule, WeekStartsOn, DateAdapter, DatePickerLabels, DateRange, RangePickerLabels, TimePickerLabels, DateTimePickerLabels, CalendarGrid, TimeValue } from '@kalyx/core';
3
+ export { CalendarDay, CalendarGrid, CalendarOptions, CalendarWeek, DEFAULT_DATEPICKER_LABELS, DEFAULT_DATETIMEPICKER_LABELS, DEFAULT_RANGEPICKER_LABELS, DEFAULT_TIMEPICKER_LABELS, DateAdapter, DatePickerLabels, DateRange, DateTimePickerLabels, DisabledRule, ISODateString, RangePickerLabels, TimePickerLabels, TimeValue, WeekStartsOn, WeekdayInfo } from '@kalyx/core';
1
4
  import * as react from 'react';
2
5
  import { ReactNode, HTMLAttributes, InputHTMLAttributes, ButtonHTMLAttributes } from 'react';
3
6
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
- import { ISODateString, DisabledRule, WeekStartsOn, DateAdapter, DatePickerLabels, DateRange, RangePickerLabels, TimePickerLabels, DateTimePickerLabels, CalendarGrid, TimeValue } from '@kalyx/core';
5
- export { CalendarDay, CalendarGrid, CalendarOptions, CalendarWeek, DEFAULT_DATEPICKER_LABELS, DEFAULT_DATETIMEPICKER_LABELS, DEFAULT_RANGEPICKER_LABELS, DEFAULT_TIMEPICKER_LABELS, DateAdapter, DateFnsAdapter, DatePickerLabels, DateRange, DateTimePickerLabels, DisabledRule, ISODateString, RangePickerLabels, TimePickerLabels, TimeValue, WeekStartsOn, WeekdayInfo } from '@kalyx/core';
6
7
 
7
8
  /**
8
9
  * Props for the DatePicker Root component.
@@ -61,7 +62,7 @@ interface DatePickerRootProps {
61
62
  /** Child components */
62
63
  children: ReactNode;
63
64
  }
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;
65
+ declare function DatePickerRoot({ value: controlledValue, defaultValue, onChange, onOpenChange, onCalendarNavigate, disabled, readOnly, weekStartsOn, displayFormat, locale, displayTimezone, adapter: adapterProp, labels: labelsProp, children, }: DatePickerRootProps): react_jsx_runtime.JSX.Element;
65
66
 
66
67
  interface DatePickerPopoverProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
67
68
  children?: ReactNode;
@@ -313,7 +314,7 @@ interface RangePickerRootProps {
313
314
  /** Child components */
314
315
  children: ReactNode;
315
316
  }
316
- 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;
317
+ declare function RangePickerRoot({ value: controlledValue, defaultValue, onChange, onOpenChange, onCalendarNavigate, disabled, readOnly, weekStartsOn, displayFormat, locale, displayTimezone, adapter: adapterProp, labels: labelsProp, children, }: RangePickerRootProps): react_jsx_runtime.JSX.Element;
317
318
 
318
319
  interface RangePickerPopoverProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
319
320
  children?: ReactNode;
@@ -503,12 +504,18 @@ interface TimePickerRootProps {
503
504
  * predicate returns `true` for every step within the hour. Always receives 24-hour values.
504
505
  */
505
506
  filterTime?: (hours: number, minutes: number) => boolean;
507
+ /**
508
+ * Date adapter. Only used when the controlled `value` is `null` to derive
509
+ * "today" as the base for the first time edit. The main `@kalyx/react` entry
510
+ * auto-injects `DateFnsAdapter`; on `@kalyx/react/headless` you must pass one.
511
+ */
512
+ adapter?: DateAdapter;
506
513
  /** Override ARIA labels (defaults to English) */
507
514
  labels?: Partial<TimePickerLabels>;
508
515
  /** Child components */
509
516
  children: ReactNode;
510
517
  }
511
- declare function TimePickerRoot({ value: controlledValue, defaultValue, onChange, format, step, withSeconds, displayTimezone, disabled, readOnly, filterTime, labels: labelsProp, children, }: TimePickerRootProps): react_jsx_runtime.JSX.Element;
518
+ declare function TimePickerRoot({ value: controlledValue, defaultValue, onChange, format, step, withSeconds, displayTimezone, disabled, readOnly, filterTime, adapter: adapterProp, labels: labelsProp, children, }: TimePickerRootProps): react_jsx_runtime.JSX.Element;
512
519
 
513
520
  interface TimePickerHourListClassNames {
514
521
  root?: string;
@@ -661,7 +668,7 @@ interface DateTimePickerRootProps {
661
668
  * - Changing time in TimePicker -> changes only the time, preserves the date
662
669
  * - Escape / outside click -> close the popover (commit)
663
670
  */
664
- declare function DateTimePickerRoot({ value: controlledValue, defaultValue, onChange, onOpenChange, onCalendarNavigate, format, step, withSeconds, filterTime, disabled, readOnly, weekStartsOn, displayFormat, locale, displayTimezone, adapter, labels: labelsProp, children, }: DateTimePickerRootProps): react_jsx_runtime.JSX.Element;
671
+ declare function DateTimePickerRoot({ value: controlledValue, defaultValue, onChange, onOpenChange, onCalendarNavigate, format, step, withSeconds, filterTime, disabled, readOnly, weekStartsOn, displayFormat, locale, displayTimezone, adapter: adapterProp, labels: labelsProp, children, }: DateTimePickerRootProps): react_jsx_runtime.JSX.Element;
665
672
 
666
673
  interface DateTimePickerInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange' | 'type'> {
667
674
  }
@@ -1053,6 +1060,12 @@ interface UseTimePickerOptions {
1053
1060
  withSeconds?: boolean;
1054
1061
  /** IANA timezone for time interpretation (see TimePickerRoot#displayTimezone) */
1055
1062
  displayTimezone?: string;
1063
+ /**
1064
+ * Date adapter. Only used when the controlled `value` is `null` to derive
1065
+ * "today" as the base for the first time edit. The main `@kalyx/react` entry
1066
+ * auto-injects `DateFnsAdapter`; on `@kalyx/react/headless` you must pass one.
1067
+ */
1068
+ adapter?: DateAdapter;
1056
1069
  }
1057
1070
  interface UseTimePickerReturn {
1058
1071
  /** Current ISO datetime value */
package/dist/index.d.ts CHANGED
@@ -1,8 +1,9 @@
1
+ export { DateFnsAdapter } from '@kalyx/adapter-date-fns';
2
+ import { ISODateString, DisabledRule, WeekStartsOn, DateAdapter, DatePickerLabels, DateRange, RangePickerLabels, TimePickerLabels, DateTimePickerLabels, CalendarGrid, TimeValue } from '@kalyx/core';
3
+ export { CalendarDay, CalendarGrid, CalendarOptions, CalendarWeek, DEFAULT_DATEPICKER_LABELS, DEFAULT_DATETIMEPICKER_LABELS, DEFAULT_RANGEPICKER_LABELS, DEFAULT_TIMEPICKER_LABELS, DateAdapter, DatePickerLabels, DateRange, DateTimePickerLabels, DisabledRule, ISODateString, RangePickerLabels, TimePickerLabels, TimeValue, WeekStartsOn, WeekdayInfo } from '@kalyx/core';
1
4
  import * as react from 'react';
2
5
  import { ReactNode, HTMLAttributes, InputHTMLAttributes, ButtonHTMLAttributes } from 'react';
3
6
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
- import { ISODateString, DisabledRule, WeekStartsOn, DateAdapter, DatePickerLabels, DateRange, RangePickerLabels, TimePickerLabels, DateTimePickerLabels, CalendarGrid, TimeValue } from '@kalyx/core';
5
- export { CalendarDay, CalendarGrid, CalendarOptions, CalendarWeek, DEFAULT_DATEPICKER_LABELS, DEFAULT_DATETIMEPICKER_LABELS, DEFAULT_RANGEPICKER_LABELS, DEFAULT_TIMEPICKER_LABELS, DateAdapter, DateFnsAdapter, DatePickerLabels, DateRange, DateTimePickerLabels, DisabledRule, ISODateString, RangePickerLabels, TimePickerLabels, TimeValue, WeekStartsOn, WeekdayInfo } from '@kalyx/core';
6
7
 
7
8
  /**
8
9
  * Props for the DatePicker Root component.
@@ -61,7 +62,7 @@ interface DatePickerRootProps {
61
62
  /** Child components */
62
63
  children: ReactNode;
63
64
  }
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;
65
+ declare function DatePickerRoot({ value: controlledValue, defaultValue, onChange, onOpenChange, onCalendarNavigate, disabled, readOnly, weekStartsOn, displayFormat, locale, displayTimezone, adapter: adapterProp, labels: labelsProp, children, }: DatePickerRootProps): react_jsx_runtime.JSX.Element;
65
66
 
66
67
  interface DatePickerPopoverProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
67
68
  children?: ReactNode;
@@ -313,7 +314,7 @@ interface RangePickerRootProps {
313
314
  /** Child components */
314
315
  children: ReactNode;
315
316
  }
316
- 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;
317
+ declare function RangePickerRoot({ value: controlledValue, defaultValue, onChange, onOpenChange, onCalendarNavigate, disabled, readOnly, weekStartsOn, displayFormat, locale, displayTimezone, adapter: adapterProp, labels: labelsProp, children, }: RangePickerRootProps): react_jsx_runtime.JSX.Element;
317
318
 
318
319
  interface RangePickerPopoverProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
319
320
  children?: ReactNode;
@@ -503,12 +504,18 @@ interface TimePickerRootProps {
503
504
  * predicate returns `true` for every step within the hour. Always receives 24-hour values.
504
505
  */
505
506
  filterTime?: (hours: number, minutes: number) => boolean;
507
+ /**
508
+ * Date adapter. Only used when the controlled `value` is `null` to derive
509
+ * "today" as the base for the first time edit. The main `@kalyx/react` entry
510
+ * auto-injects `DateFnsAdapter`; on `@kalyx/react/headless` you must pass one.
511
+ */
512
+ adapter?: DateAdapter;
506
513
  /** Override ARIA labels (defaults to English) */
507
514
  labels?: Partial<TimePickerLabels>;
508
515
  /** Child components */
509
516
  children: ReactNode;
510
517
  }
511
- declare function TimePickerRoot({ value: controlledValue, defaultValue, onChange, format, step, withSeconds, displayTimezone, disabled, readOnly, filterTime, labels: labelsProp, children, }: TimePickerRootProps): react_jsx_runtime.JSX.Element;
518
+ declare function TimePickerRoot({ value: controlledValue, defaultValue, onChange, format, step, withSeconds, displayTimezone, disabled, readOnly, filterTime, adapter: adapterProp, labels: labelsProp, children, }: TimePickerRootProps): react_jsx_runtime.JSX.Element;
512
519
 
513
520
  interface TimePickerHourListClassNames {
514
521
  root?: string;
@@ -661,7 +668,7 @@ interface DateTimePickerRootProps {
661
668
  * - Changing time in TimePicker -> changes only the time, preserves the date
662
669
  * - Escape / outside click -> close the popover (commit)
663
670
  */
664
- declare function DateTimePickerRoot({ value: controlledValue, defaultValue, onChange, onOpenChange, onCalendarNavigate, format, step, withSeconds, filterTime, disabled, readOnly, weekStartsOn, displayFormat, locale, displayTimezone, adapter, labels: labelsProp, children, }: DateTimePickerRootProps): react_jsx_runtime.JSX.Element;
671
+ declare function DateTimePickerRoot({ value: controlledValue, defaultValue, onChange, onOpenChange, onCalendarNavigate, format, step, withSeconds, filterTime, disabled, readOnly, weekStartsOn, displayFormat, locale, displayTimezone, adapter: adapterProp, labels: labelsProp, children, }: DateTimePickerRootProps): react_jsx_runtime.JSX.Element;
665
672
 
666
673
  interface DateTimePickerInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange' | 'type'> {
667
674
  }
@@ -1053,6 +1060,12 @@ interface UseTimePickerOptions {
1053
1060
  withSeconds?: boolean;
1054
1061
  /** IANA timezone for time interpretation (see TimePickerRoot#displayTimezone) */
1055
1062
  displayTimezone?: string;
1063
+ /**
1064
+ * Date adapter. Only used when the controlled `value` is `null` to derive
1065
+ * "today" as the base for the first time edit. The main `@kalyx/react` entry
1066
+ * auto-injects `DateFnsAdapter`; on `@kalyx/react/headless` you must pass one.
1067
+ */
1068
+ adapter?: DateAdapter;
1056
1069
  }
1057
1070
  interface UseTimePickerReturn {
1058
1071
  /** Current ISO datetime value */
package/dist/index.js CHANGED
@@ -1,11 +1,29 @@
1
1
  "use client";
2
+ import { DateFnsAdapter } from '@kalyx/adapter-date-fns';
3
+ export { DateFnsAdapter } from '@kalyx/adapter-date-fns';
2
4
  import { createContext, forwardRef, useState, useRef, useEffect, useCallback, useContext, useId, useMemo } from 'react';
3
- import { parseInputValue, formatTimeString, parseTimeString, getTimeInTimezone, getTime, DateFnsAdapter, DEFAULT_DATEPICKER_LABELS, civilMidnightFromUtcDay, getMonthName, getWeekdayNames, getCalendarDays, formatMonthYear, isDateDisabled, getISOWeekNumber, DEFAULT_RANGEPICKER_LABELS, DEFAULT_TIMEPICKER_LABELS, setTimeInTimezone, setTime, to12Hour, to24Hour, generateMinutes, generateHours, formatFullDate } from '@kalyx/core';
4
- export { DEFAULT_DATEPICKER_LABELS, DEFAULT_DATETIMEPICKER_LABELS, DEFAULT_RANGEPICKER_LABELS, DEFAULT_TIMEPICKER_LABELS, DateFnsAdapter } from '@kalyx/core';
5
+ import { parseInputValue, formatTimeString, parseTimeString, getTimeInTimezone, getTime, DEFAULT_DATEPICKER_LABELS, civilMidnightFromUtcDay, getMonthName, getWeekdayNames, getCalendarDays, formatMonthYear, isDateDisabled, getISOWeekNumber, DEFAULT_RANGEPICKER_LABELS, DEFAULT_TIMEPICKER_LABELS, setTimeInTimezone, setTime, to12Hour, to24Hour, generateMinutes, generateHours, formatFullDate } from '@kalyx/core';
6
+ export { DEFAULT_DATEPICKER_LABELS, DEFAULT_DATETIMEPICKER_LABELS, DEFAULT_RANGEPICKER_LABELS, DEFAULT_TIMEPICKER_LABELS } from '@kalyx/core';
5
7
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
6
8
  import { offset, flip, shift, useFloating, autoUpdate } from '@floating-ui/react';
7
9
 
8
- // src/components/DatePicker/Root.tsx
10
+ // src/index.ts
11
+
12
+ // src/internal/defaultAdapter.ts
13
+ var __defaultAdapter = null;
14
+ function setDefaultAdapter(adapter) {
15
+ __defaultAdapter = adapter;
16
+ }
17
+ function getDefaultAdapter() {
18
+ return __defaultAdapter;
19
+ }
20
+ function resolveAdapter(passed, fallback, componentName) {
21
+ if (passed) return passed;
22
+ if (fallback) return fallback;
23
+ throw new Error(
24
+ `[@kalyx/react/headless] ${componentName} requires an adapter. Pass one via <${componentName} adapter={...}>. If you don't need a custom adapter, import from '@kalyx/react' instead.`
25
+ );
26
+ }
9
27
  var DatePickerContext = createContext(null);
10
28
  function useDatePickerContext(componentName) {
11
29
  const context = useContext(DatePickerContext);
@@ -44,10 +62,11 @@ function DatePickerRoot({
44
62
  displayFormat = "yyyy-MM-dd",
45
63
  locale = "en-US",
46
64
  displayTimezone,
47
- adapter = DateFnsAdapter,
65
+ adapter: adapterProp,
48
66
  labels: labelsProp,
49
67
  children
50
68
  }) {
69
+ const adapter = resolveAdapter(adapterProp, getDefaultAdapter(), "DatePicker");
51
70
  const pickerId = useId();
52
71
  const isControlled = useRef(controlledValue !== void 0).current;
53
72
  const referenceRef = useRef(null);
@@ -1125,10 +1144,11 @@ function RangePickerRoot({
1125
1144
  displayFormat = "yyyy-MM-dd",
1126
1145
  locale = "en-US",
1127
1146
  displayTimezone,
1128
- adapter = DateFnsAdapter,
1147
+ adapter: adapterProp,
1129
1148
  labels: labelsProp,
1130
1149
  children
1131
1150
  }) {
1151
+ const adapter = resolveAdapter(adapterProp, getDefaultAdapter(), "RangePicker");
1132
1152
  const pickerId = useId();
1133
1153
  const isControlled = useRef(controlledValue !== void 0).current;
1134
1154
  const referenceRef = useRef(null);
@@ -1803,9 +1823,11 @@ function TimePickerRoot({
1803
1823
  disabled = false,
1804
1824
  readOnly = false,
1805
1825
  filterTime,
1826
+ adapter: adapterProp,
1806
1827
  labels: labelsProp,
1807
1828
  children
1808
1829
  }) {
1830
+ const adapter = resolveAdapter(adapterProp, getDefaultAdapter(), "TimePicker");
1809
1831
  const pickerId = useId();
1810
1832
  const mergedLabels = useMemo(
1811
1833
  () => ({ ...DEFAULT_TIMEPICKER_LABELS, ...labelsProp }),
@@ -1823,14 +1845,14 @@ function TimePickerRoot({
1823
1845
  const setTime$1 = useCallback(
1824
1846
  (partial) => {
1825
1847
  if (disabled || readOnly) return;
1826
- const base = currentValue ?? DateFnsAdapter.today(displayTimezone);
1848
+ const base = currentValue ?? adapter.today(displayTimezone);
1827
1849
  const newIso = displayTimezone ? setTimeInTimezone(base, partial, displayTimezone) : setTime(base, partial);
1828
1850
  if (!isControlled) {
1829
1851
  setUncontrolledValue(newIso);
1830
1852
  }
1831
1853
  onChange?.(newIso);
1832
1854
  },
1833
- [disabled, readOnly, currentValue, displayTimezone, isControlled, onChange]
1855
+ [disabled, readOnly, currentValue, displayTimezone, isControlled, onChange, adapter]
1834
1856
  );
1835
1857
  const contextValue = useMemo(
1836
1858
  () => ({
@@ -2206,10 +2228,11 @@ function DateTimePickerRoot({
2206
2228
  displayFormat = "yyyy-MM-dd HH:mm",
2207
2229
  locale = "en-US",
2208
2230
  displayTimezone,
2209
- adapter = DateFnsAdapter,
2231
+ adapter: adapterProp,
2210
2232
  labels: labelsProp,
2211
2233
  children
2212
2234
  }) {
2235
+ const adapter = resolveAdapter(adapterProp, getDefaultAdapter(), "DateTimePicker");
2213
2236
  const pickerId = useId();
2214
2237
  const mergedDateLabels = useMemo(
2215
2238
  () => ({ ...DEFAULT_DATEPICKER_LABELS, ...labelsProp }),
@@ -2744,9 +2767,10 @@ function useDatePicker(options = {}) {
2744
2767
  onChange,
2745
2768
  disabled = [],
2746
2769
  weekStartsOn = 0,
2747
- adapter = DateFnsAdapter,
2770
+ adapter: adapterProp,
2748
2771
  displayTimezone
2749
2772
  } = options;
2773
+ const adapter = resolveAdapter(adapterProp, getDefaultAdapter(), "useDatePicker");
2750
2774
  const pickerId = useId();
2751
2775
  const isControlled = useRef(controlledValue !== void 0).current;
2752
2776
  const [uncontrolledValue, setUncontrolledValue] = useState(
@@ -2827,9 +2851,10 @@ function useRangePicker(options = {}) {
2827
2851
  onChange,
2828
2852
  disabled = [],
2829
2853
  weekStartsOn = 0,
2830
- adapter = DateFnsAdapter,
2854
+ adapter: adapterProp,
2831
2855
  displayTimezone
2832
2856
  } = options;
2857
+ const adapter = resolveAdapter(adapterProp, getDefaultAdapter(), "useRangePicker");
2833
2858
  const pickerId = useId();
2834
2859
  const isControlled = useRef(controlledValue !== void 0).current;
2835
2860
  const [uncontrolledValue, setUncontrolledValue] = useState(
@@ -2934,9 +2959,6 @@ function useRangePicker(options = {}) {
2934
2959
  adapter
2935
2960
  };
2936
2961
  }
2937
- function getDefaultIso() {
2938
- return DateFnsAdapter.today();
2939
- }
2940
2962
  function useTimePicker(options = {}) {
2941
2963
  const {
2942
2964
  value: controlledValue,
@@ -2944,15 +2966,17 @@ function useTimePicker(options = {}) {
2944
2966
  onChange,
2945
2967
  format = "24h",
2946
2968
  step = 1,
2947
- displayTimezone
2969
+ displayTimezone,
2970
+ adapter: adapterProp
2948
2971
  } = options;
2972
+ const adapter = resolveAdapter(adapterProp, getDefaultAdapter(), "useTimePicker");
2949
2973
  const pickerId = useId();
2950
2974
  const isControlled = useRef(controlledValue !== void 0).current;
2951
2975
  const [uncontrolledValue, setUncontrolledValue] = useState(
2952
2976
  defaultValue ?? null
2953
2977
  );
2954
2978
  const currentValue = isControlled ? controlledValue ?? null : uncontrolledValue;
2955
- const baseIso = currentValue ?? getDefaultIso();
2979
+ const baseIso = currentValue ?? adapter.today();
2956
2980
  const currentTime = useMemo(
2957
2981
  () => displayTimezone ? getTimeInTimezone(baseIso, displayTimezone) : getTime(baseIso),
2958
2982
  [baseIso, displayTimezone]
@@ -3002,6 +3026,7 @@ function useTimePicker(options = {}) {
3002
3026
  pickerId
3003
3027
  };
3004
3028
  }
3029
+ setDefaultAdapter(DateFnsAdapter);
3005
3030
 
3006
3031
  export { DatePicker, DateTimePicker, MonthPicker, RangePicker, TimePicker, WeekPicker, YearPicker, useDatePicker, useRangePicker, useTimePicker };
3007
3032
  //# sourceMappingURL=index.js.map