@kalyx/react 1.0.0-rc.13 → 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,9 +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, DatePickerLabels, DateRange, DateTimePickerLabels, DisabledRule, ISODateString, RangePickerLabels, TimePickerLabels, TimeValue, WeekStartsOn, WeekdayInfo } from '@kalyx/core';
6
- export { DateFnsAdapter } from '@kalyx/adapter-date-fns';
7
7
 
8
8
  /**
9
9
  * Props for the DatePicker Root component.
@@ -62,7 +62,7 @@ interface DatePickerRootProps {
62
62
  /** Child components */
63
63
  children: ReactNode;
64
64
  }
65
- 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;
66
66
 
67
67
  interface DatePickerPopoverProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
68
68
  children?: ReactNode;
@@ -314,7 +314,7 @@ interface RangePickerRootProps {
314
314
  /** Child components */
315
315
  children: ReactNode;
316
316
  }
317
- 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;
318
318
 
319
319
  interface RangePickerPopoverProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
320
320
  children?: ReactNode;
@@ -504,12 +504,18 @@ interface TimePickerRootProps {
504
504
  * predicate returns `true` for every step within the hour. Always receives 24-hour values.
505
505
  */
506
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;
507
513
  /** Override ARIA labels (defaults to English) */
508
514
  labels?: Partial<TimePickerLabels>;
509
515
  /** Child components */
510
516
  children: ReactNode;
511
517
  }
512
- 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;
513
519
 
514
520
  interface TimePickerHourListClassNames {
515
521
  root?: string;
@@ -662,7 +668,7 @@ interface DateTimePickerRootProps {
662
668
  * - Changing time in TimePicker -> changes only the time, preserves the date
663
669
  * - Escape / outside click -> close the popover (commit)
664
670
  */
665
- 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;
666
672
 
667
673
  interface DateTimePickerInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange' | 'type'> {
668
674
  }
@@ -1054,6 +1060,12 @@ interface UseTimePickerOptions {
1054
1060
  withSeconds?: boolean;
1055
1061
  /** IANA timezone for time interpretation (see TimePickerRoot#displayTimezone) */
1056
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;
1057
1069
  }
1058
1070
  interface UseTimePickerReturn {
1059
1071
  /** Current ISO datetime value */
package/dist/index.d.ts CHANGED
@@ -1,9 +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, DatePickerLabels, DateRange, DateTimePickerLabels, DisabledRule, ISODateString, RangePickerLabels, TimePickerLabels, TimeValue, WeekStartsOn, WeekdayInfo } from '@kalyx/core';
6
- export { DateFnsAdapter } from '@kalyx/adapter-date-fns';
7
7
 
8
8
  /**
9
9
  * Props for the DatePicker Root component.
@@ -62,7 +62,7 @@ interface DatePickerRootProps {
62
62
  /** Child components */
63
63
  children: ReactNode;
64
64
  }
65
- 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;
66
66
 
67
67
  interface DatePickerPopoverProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
68
68
  children?: ReactNode;
@@ -314,7 +314,7 @@ interface RangePickerRootProps {
314
314
  /** Child components */
315
315
  children: ReactNode;
316
316
  }
317
- 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;
318
318
 
319
319
  interface RangePickerPopoverProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
320
320
  children?: ReactNode;
@@ -504,12 +504,18 @@ interface TimePickerRootProps {
504
504
  * predicate returns `true` for every step within the hour. Always receives 24-hour values.
505
505
  */
506
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;
507
513
  /** Override ARIA labels (defaults to English) */
508
514
  labels?: Partial<TimePickerLabels>;
509
515
  /** Child components */
510
516
  children: ReactNode;
511
517
  }
512
- 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;
513
519
 
514
520
  interface TimePickerHourListClassNames {
515
521
  root?: string;
@@ -662,7 +668,7 @@ interface DateTimePickerRootProps {
662
668
  * - Changing time in TimePicker -> changes only the time, preserves the date
663
669
  * - Escape / outside click -> close the popover (commit)
664
670
  */
665
- 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;
666
672
 
667
673
  interface DateTimePickerInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange' | 'type'> {
668
674
  }
@@ -1054,6 +1060,12 @@ interface UseTimePickerOptions {
1054
1060
  withSeconds?: boolean;
1055
1061
  /** IANA timezone for time interpretation (see TimePickerRoot#displayTimezone) */
1056
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;
1057
1069
  }
1058
1070
  interface UseTimePickerReturn {
1059
1071
  /** Current ISO datetime value */
package/dist/index.js CHANGED
@@ -1,13 +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
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';
4
6
  export { DEFAULT_DATEPICKER_LABELS, DEFAULT_DATETIMEPICKER_LABELS, DEFAULT_RANGEPICKER_LABELS, DEFAULT_TIMEPICKER_LABELS } from '@kalyx/core';
5
- import { DateFnsAdapter } from '@kalyx/adapter-date-fns';
6
- export { DateFnsAdapter } from '@kalyx/adapter-date-fns';
7
7
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
8
8
  import { offset, flip, shift, useFloating, autoUpdate } from '@floating-ui/react';
9
9
 
10
- // 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
+ }
11
27
  var DatePickerContext = createContext(null);
12
28
  function useDatePickerContext(componentName) {
13
29
  const context = useContext(DatePickerContext);
@@ -46,10 +62,11 @@ function DatePickerRoot({
46
62
  displayFormat = "yyyy-MM-dd",
47
63
  locale = "en-US",
48
64
  displayTimezone,
49
- adapter = DateFnsAdapter,
65
+ adapter: adapterProp,
50
66
  labels: labelsProp,
51
67
  children
52
68
  }) {
69
+ const adapter = resolveAdapter(adapterProp, getDefaultAdapter(), "DatePicker");
53
70
  const pickerId = useId();
54
71
  const isControlled = useRef(controlledValue !== void 0).current;
55
72
  const referenceRef = useRef(null);
@@ -1127,10 +1144,11 @@ function RangePickerRoot({
1127
1144
  displayFormat = "yyyy-MM-dd",
1128
1145
  locale = "en-US",
1129
1146
  displayTimezone,
1130
- adapter = DateFnsAdapter,
1147
+ adapter: adapterProp,
1131
1148
  labels: labelsProp,
1132
1149
  children
1133
1150
  }) {
1151
+ const adapter = resolveAdapter(adapterProp, getDefaultAdapter(), "RangePicker");
1134
1152
  const pickerId = useId();
1135
1153
  const isControlled = useRef(controlledValue !== void 0).current;
1136
1154
  const referenceRef = useRef(null);
@@ -1805,9 +1823,11 @@ function TimePickerRoot({
1805
1823
  disabled = false,
1806
1824
  readOnly = false,
1807
1825
  filterTime,
1826
+ adapter: adapterProp,
1808
1827
  labels: labelsProp,
1809
1828
  children
1810
1829
  }) {
1830
+ const adapter = resolveAdapter(adapterProp, getDefaultAdapter(), "TimePicker");
1811
1831
  const pickerId = useId();
1812
1832
  const mergedLabels = useMemo(
1813
1833
  () => ({ ...DEFAULT_TIMEPICKER_LABELS, ...labelsProp }),
@@ -1825,14 +1845,14 @@ function TimePickerRoot({
1825
1845
  const setTime$1 = useCallback(
1826
1846
  (partial) => {
1827
1847
  if (disabled || readOnly) return;
1828
- const base = currentValue ?? DateFnsAdapter.today(displayTimezone);
1848
+ const base = currentValue ?? adapter.today(displayTimezone);
1829
1849
  const newIso = displayTimezone ? setTimeInTimezone(base, partial, displayTimezone) : setTime(base, partial);
1830
1850
  if (!isControlled) {
1831
1851
  setUncontrolledValue(newIso);
1832
1852
  }
1833
1853
  onChange?.(newIso);
1834
1854
  },
1835
- [disabled, readOnly, currentValue, displayTimezone, isControlled, onChange]
1855
+ [disabled, readOnly, currentValue, displayTimezone, isControlled, onChange, adapter]
1836
1856
  );
1837
1857
  const contextValue = useMemo(
1838
1858
  () => ({
@@ -2208,10 +2228,11 @@ function DateTimePickerRoot({
2208
2228
  displayFormat = "yyyy-MM-dd HH:mm",
2209
2229
  locale = "en-US",
2210
2230
  displayTimezone,
2211
- adapter = DateFnsAdapter,
2231
+ adapter: adapterProp,
2212
2232
  labels: labelsProp,
2213
2233
  children
2214
2234
  }) {
2235
+ const adapter = resolveAdapter(adapterProp, getDefaultAdapter(), "DateTimePicker");
2215
2236
  const pickerId = useId();
2216
2237
  const mergedDateLabels = useMemo(
2217
2238
  () => ({ ...DEFAULT_DATEPICKER_LABELS, ...labelsProp }),
@@ -2746,9 +2767,10 @@ function useDatePicker(options = {}) {
2746
2767
  onChange,
2747
2768
  disabled = [],
2748
2769
  weekStartsOn = 0,
2749
- adapter = DateFnsAdapter,
2770
+ adapter: adapterProp,
2750
2771
  displayTimezone
2751
2772
  } = options;
2773
+ const adapter = resolveAdapter(adapterProp, getDefaultAdapter(), "useDatePicker");
2752
2774
  const pickerId = useId();
2753
2775
  const isControlled = useRef(controlledValue !== void 0).current;
2754
2776
  const [uncontrolledValue, setUncontrolledValue] = useState(
@@ -2829,9 +2851,10 @@ function useRangePicker(options = {}) {
2829
2851
  onChange,
2830
2852
  disabled = [],
2831
2853
  weekStartsOn = 0,
2832
- adapter = DateFnsAdapter,
2854
+ adapter: adapterProp,
2833
2855
  displayTimezone
2834
2856
  } = options;
2857
+ const adapter = resolveAdapter(adapterProp, getDefaultAdapter(), "useRangePicker");
2835
2858
  const pickerId = useId();
2836
2859
  const isControlled = useRef(controlledValue !== void 0).current;
2837
2860
  const [uncontrolledValue, setUncontrolledValue] = useState(
@@ -2936,9 +2959,6 @@ function useRangePicker(options = {}) {
2936
2959
  adapter
2937
2960
  };
2938
2961
  }
2939
- function getDefaultIso() {
2940
- return DateFnsAdapter.today();
2941
- }
2942
2962
  function useTimePicker(options = {}) {
2943
2963
  const {
2944
2964
  value: controlledValue,
@@ -2946,15 +2966,17 @@ function useTimePicker(options = {}) {
2946
2966
  onChange,
2947
2967
  format = "24h",
2948
2968
  step = 1,
2949
- displayTimezone
2969
+ displayTimezone,
2970
+ adapter: adapterProp
2950
2971
  } = options;
2972
+ const adapter = resolveAdapter(adapterProp, getDefaultAdapter(), "useTimePicker");
2951
2973
  const pickerId = useId();
2952
2974
  const isControlled = useRef(controlledValue !== void 0).current;
2953
2975
  const [uncontrolledValue, setUncontrolledValue] = useState(
2954
2976
  defaultValue ?? null
2955
2977
  );
2956
2978
  const currentValue = isControlled ? controlledValue ?? null : uncontrolledValue;
2957
- const baseIso = currentValue ?? getDefaultIso();
2979
+ const baseIso = currentValue ?? adapter.today();
2958
2980
  const currentTime = useMemo(
2959
2981
  () => displayTimezone ? getTimeInTimezone(baseIso, displayTimezone) : getTime(baseIso),
2960
2982
  [baseIso, displayTimezone]
@@ -3004,6 +3026,7 @@ function useTimePicker(options = {}) {
3004
3026
  pickerId
3005
3027
  };
3006
3028
  }
3029
+ setDefaultAdapter(DateFnsAdapter);
3007
3030
 
3008
3031
  export { DatePicker, DateTimePicker, MonthPicker, RangePicker, TimePicker, WeekPicker, YearPicker, useDatePicker, useRangePicker, useTimePicker };
3009
3032
  //# sourceMappingURL=index.js.map