@salt-ds/lab 1.0.0-alpha.46 → 1.0.0-alpha.48

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 (34) hide show
  1. package/css/salt-lab.css +2 -2
  2. package/dist-cjs/calendar/Calendar.js +4 -1
  3. package/dist-cjs/calendar/Calendar.js.map +1 -1
  4. package/dist-cjs/calendar/useSelection.js +1 -1
  5. package/dist-cjs/calendar/useSelection.js.map +1 -1
  6. package/dist-cjs/date-input/DateInput.js +235 -234
  7. package/dist-cjs/date-input/DateInput.js.map +1 -1
  8. package/dist-cjs/date-picker/DatePicker.js +135 -142
  9. package/dist-cjs/date-picker/DatePicker.js.map +1 -1
  10. package/dist-cjs/date-picker/DatePickerContext.js +14 -20
  11. package/dist-cjs/date-picker/DatePickerContext.js.map +1 -1
  12. package/dist-cjs/date-picker/DatePickerPanel.css.js +1 -1
  13. package/dist-cjs/date-picker/DatePickerPanel.js +129 -115
  14. package/dist-cjs/date-picker/DatePickerPanel.js.map +1 -1
  15. package/dist-es/calendar/Calendar.js +4 -1
  16. package/dist-es/calendar/Calendar.js.map +1 -1
  17. package/dist-es/calendar/useSelection.js +1 -1
  18. package/dist-es/calendar/useSelection.js.map +1 -1
  19. package/dist-es/date-input/DateInput.js +235 -234
  20. package/dist-es/date-input/DateInput.js.map +1 -1
  21. package/dist-es/date-picker/DatePicker.js +135 -142
  22. package/dist-es/date-picker/DatePicker.js.map +1 -1
  23. package/dist-es/date-picker/DatePickerContext.js +14 -20
  24. package/dist-es/date-picker/DatePickerContext.js.map +1 -1
  25. package/dist-es/date-picker/DatePickerPanel.css.js +1 -1
  26. package/dist-es/date-picker/DatePickerPanel.js +129 -115
  27. package/dist-es/date-picker/DatePickerPanel.js.map +1 -1
  28. package/dist-types/calendar/useCalendar.d.ts +1 -4
  29. package/dist-types/calendar/useSelection.d.ts +2 -2
  30. package/dist-types/date-input/DateInput.d.ts +10 -9
  31. package/dist-types/date-picker/DatePicker.d.ts +18 -22
  32. package/dist-types/date-picker/DatePickerContext.d.ts +7 -9
  33. package/dist-types/date-picker/DatePickerPanel.d.ts +5 -7
  34. package/package.json +3 -3
@@ -10,126 +10,140 @@ import { Calendar } from '../calendar/Calendar.js';
10
10
  import { endOfMonth, startOfMonth } from '@internationalized/date';
11
11
  import '../calendar/internal/CalendarContext.js';
12
12
  import '../calendar/internal/utils.js';
13
- import '../calendar/useSelection.js';
13
+ import { isRangeOrOffsetSelectionWithStartDate } from '../calendar/useSelection.js';
14
14
 
15
+ function clampDate(date, max) {
16
+ if (!date || !max)
17
+ return void 0;
18
+ return date.compare(max) === 0 ? max : date;
19
+ }
15
20
  const withBaseName = makePrefixer("saltDatePickerPanel");
16
- const DatePickerPanel = forwardRef(
17
- function DatePickerPanel2(props, ref) {
18
- var _a;
19
- const { className, onSelect, helperText, CalendarProps: CalendarProps2, ...rest } = props;
20
- const targetWindow = useWindow();
21
- useComponentCssInjection({
22
- testId: "salt-date-picker-panel",
23
- css: css_248z,
24
- window: targetWindow
25
- });
26
- const { Component: FloatingComponent } = useFloatingComponent();
27
- const [hoveredDate, setHoveredDate] = useState(null);
28
- const {
29
- openState,
30
- startDate,
31
- setStartDate,
32
- startVisibleMonth,
33
- setStartVisibleMonth,
34
- endDate,
35
- setEndDate,
36
- endVisibleMonth,
37
- setEndVisibleMonth,
38
- setOpen,
39
- selectionVariant,
40
- context,
41
- getPanelPosition
42
- } = useDatePickerContext();
43
- const { a11yProps } = useFormFieldProps();
44
- const setRangeDate = (event, newDate) => {
45
- setStartDate(newDate.startDate);
46
- setEndDate(newDate.endDate);
47
- onSelect == null ? void 0 : onSelect(event, newDate);
48
- if (newDate.startDate && newDate.endDate) {
49
- setOpen(false);
50
- }
51
- };
52
- const setSingleDate = (event, newDate) => {
53
- setStartDate(newDate);
54
- onSelect == null ? void 0 : onSelect(event, newDate);
21
+ const DatePickerPanel = forwardRef(function DatePickerPanel2(props, ref) {
22
+ var _a;
23
+ const {
24
+ className,
25
+ onSelect,
26
+ helperText,
27
+ CalendarProps: CalendarProps2,
28
+ visibleMonths,
29
+ ...rest
30
+ } = props;
31
+ const targetWindow = useWindow();
32
+ useComponentCssInjection({
33
+ testId: "salt-date-picker-panel",
34
+ css: css_248z,
35
+ window: targetWindow
36
+ });
37
+ const { Component: FloatingComponent } = useFloatingComponent();
38
+ const [hoveredDate, setHoveredDate] = useState(null);
39
+ const {
40
+ openState,
41
+ selectedDate,
42
+ setSelectedDate,
43
+ startVisibleMonth,
44
+ setStartVisibleMonth,
45
+ endVisibleMonth,
46
+ setEndVisibleMonth,
47
+ setOpen,
48
+ context,
49
+ getPanelPosition,
50
+ selectionVariant
51
+ } = useDatePickerContext();
52
+ const { a11yProps } = useFormFieldProps();
53
+ const isRangePicker = isRangeOrOffsetSelectionWithStartDate(selectedDate) || selectionVariant === "range" && selectedDate === void 0;
54
+ const compact = visibleMonths === 1;
55
+ const setRangeDate = (event, newDate) => {
56
+ setSelectedDate(newDate);
57
+ onSelect == null ? void 0 : onSelect(event, newDate);
58
+ if (newDate.startDate && newDate.endDate) {
55
59
  setOpen(false);
56
- };
57
- const handleHoveredDateChange = (_, newHoveredDate) => {
58
- setHoveredDate(newHoveredDate);
59
- };
60
- useEffect(() => {
61
- if (startDate) {
62
- setStartVisibleMonth(startDate);
63
- setEndVisibleMonth(startDate.add({ months: 1 }));
60
+ }
61
+ };
62
+ const setSingleDate = (event, newDate) => {
63
+ setSelectedDate(newDate);
64
+ onSelect == null ? void 0 : onSelect(event, newDate);
65
+ setOpen(false);
66
+ };
67
+ const handleHoveredDateChange = (_, newHoveredDate) => {
68
+ setHoveredDate(newHoveredDate);
69
+ };
70
+ useEffect(() => {
71
+ if (isRangePicker) {
72
+ if (selectedDate == null ? void 0 : selectedDate.startDate) {
73
+ setStartVisibleMonth(selectedDate.startDate);
74
+ setEndVisibleMonth(selectedDate.startDate.add({ months: 1 }));
64
75
  }
65
- }, [startDate]);
66
- const isRangePicker = selectionVariant === "range";
67
- const firstCalendarProps = isRangePicker ? {
68
- selectionVariant: "range",
69
- hoveredDate: startDate && hoveredDate && hoveredDate.compare(endOfMonth(startDate)) > 0 ? endOfMonth(startDate) : hoveredDate,
70
- onHoveredDateChange: handleHoveredDateChange,
71
- selectedDate: { startDate, endDate },
72
- onSelectedDateChange: setRangeDate,
73
- maxDate: startDate && endOfMonth(startDate),
74
- hideOutOfRangeDates: true
75
- } : {
76
- selectionVariant: "default",
77
- selectedDate: startDate,
78
- onSelectedDateChange: setSingleDate
79
- };
80
- return /* @__PURE__ */ jsx(FloatingComponent, {
81
- open: openState,
82
- className: clsx(withBaseName(), className),
83
- "aria-modal": "true",
84
- ref,
85
- focusManagerProps: context ? {
86
- context,
87
- initialFocus: 4
88
- } : void 0,
89
- ...getPanelPosition(),
90
- ...a11yProps,
91
- ...rest,
92
- children: /* @__PURE__ */ jsxs(StackLayout, {
93
- separators: true,
94
- gap: 0,
95
- className: withBaseName("container"),
96
- children: [
97
- helperText && /* @__PURE__ */ jsx(FlexItem, {
98
- className: withBaseName("header"),
99
- children: /* @__PURE__ */ jsx(FormFieldHelperText, {
100
- children: helperText
101
- })
102
- }),
103
- /* @__PURE__ */ jsx(FlexLayout, {
104
- children: /* @__PURE__ */ jsxs(FormFieldContext.Provider, {
105
- value: {},
106
- children: [
107
- /* @__PURE__ */ jsx(Calendar, {
108
- visibleMonth: startVisibleMonth,
109
- onVisibleMonthChange: (_, month) => setStartVisibleMonth(month),
110
- ...firstCalendarProps,
111
- ...CalendarProps2
112
- }),
113
- isRangePicker && /* @__PURE__ */ jsx(Calendar, {
114
- selectionVariant: "range",
115
- hoveredDate,
116
- onHoveredDateChange: handleHoveredDateChange,
117
- selectedDate: { startDate, endDate },
118
- onSelectedDateChange: setRangeDate,
119
- visibleMonth: endVisibleMonth,
120
- onVisibleMonthChange: (_, month) => setEndVisibleMonth(month),
121
- hideOutOfRangeDates: true,
122
- minDate: startDate ? (_a = startOfMonth(startDate)) == null ? void 0 : _a.add({ months: 1 }) : void 0,
123
- ...CalendarProps2
124
- })
125
- ]
126
- })
76
+ } else {
77
+ setStartVisibleMonth(selectedDate);
78
+ }
79
+ }, [selectedDate]);
80
+ const firstCalendarProps = isRangePicker ? {
81
+ selectionVariant: "range",
82
+ hoveredDate: (selectedDate == null ? void 0 : selectedDate.startDate) && !compact ? clampDate(hoveredDate, endOfMonth(selectedDate == null ? void 0 : selectedDate.startDate)) : hoveredDate,
83
+ onHoveredDateChange: handleHoveredDateChange,
84
+ selectedDate,
85
+ onSelectedDateChange: setRangeDate,
86
+ maxDate: !compact && (selectedDate == null ? void 0 : selectedDate.startDate) ? endOfMonth(selectedDate == null ? void 0 : selectedDate.startDate) : void 0,
87
+ hideOutOfRangeDates: true
88
+ } : {
89
+ selectionVariant: "default",
90
+ selectedDate,
91
+ onSelectedDateChange: setSingleDate
92
+ };
93
+ return /* @__PURE__ */ jsx(FloatingComponent, {
94
+ open: openState,
95
+ className: clsx(withBaseName(), className),
96
+ "aria-modal": "true",
97
+ ref,
98
+ focusManagerProps: context ? {
99
+ context,
100
+ initialFocus: 4
101
+ } : void 0,
102
+ ...getPanelPosition(),
103
+ ...a11yProps,
104
+ ...rest,
105
+ children: /* @__PURE__ */ jsxs(StackLayout, {
106
+ separators: true,
107
+ gap: 0,
108
+ className: withBaseName("container"),
109
+ children: [
110
+ helperText && /* @__PURE__ */ jsx(FlexItem, {
111
+ className: withBaseName("header"),
112
+ children: /* @__PURE__ */ jsx(FormFieldHelperText, {
113
+ children: helperText
114
+ })
115
+ }),
116
+ /* @__PURE__ */ jsx(FlexLayout, {
117
+ children: /* @__PURE__ */ jsxs(FormFieldContext.Provider, {
118
+ value: {},
119
+ children: [
120
+ /* @__PURE__ */ jsx(Calendar, {
121
+ visibleMonth: startVisibleMonth,
122
+ onVisibleMonthChange: (_, month) => setStartVisibleMonth(month),
123
+ ...firstCalendarProps,
124
+ ...CalendarProps2
125
+ }),
126
+ isRangePicker && !compact && /* @__PURE__ */ jsx(Calendar, {
127
+ selectionVariant: "range",
128
+ hoveredDate,
129
+ onHoveredDateChange: handleHoveredDateChange,
130
+ selectedDate,
131
+ onSelectedDateChange: setRangeDate,
132
+ visibleMonth: endVisibleMonth,
133
+ onVisibleMonthChange: (_, month) => setEndVisibleMonth(month),
134
+ hideOutOfRangeDates: true,
135
+ minDate: (selectedDate == null ? void 0 : selectedDate.startDate) ? (_a = startOfMonth(selectedDate == null ? void 0 : selectedDate.startDate)) == null ? void 0 : _a.add({
136
+ months: 1
137
+ }) : void 0,
138
+ ...CalendarProps2
139
+ })
140
+ ]
127
141
  })
128
- ]
129
- })
130
- });
131
- }
132
- );
142
+ })
143
+ ]
144
+ })
145
+ });
146
+ });
133
147
 
134
148
  export { DatePickerPanel };
135
149
  //# sourceMappingURL=DatePickerPanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DatePickerPanel.js","sources":["../src/date-picker/DatePickerPanel.tsx"],"sourcesContent":["import {\n ComponentPropsWithoutRef,\n forwardRef,\n SyntheticEvent,\n useEffect,\n useState,\n} from \"react\";\nimport {\n FlexItem,\n FlexLayout,\n FormFieldHelperText,\n makePrefixer,\n StackLayout,\n useFloatingComponent,\n useFormFieldProps,\n FormFieldContext,\n FormFieldContextValue,\n} from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport { useDatePickerContext } from \"./DatePickerContext\";\nimport dateInputPanelCss from \"./DatePickerPanel.css\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport {\n Calendar,\n CalendarProps,\n UseRangeSelectionCalendarProps,\n UseSingleSelectionCalendarProps,\n} from \"../calendar\";\nimport { DateValue, endOfMonth, startOfMonth } from \"@internationalized/date\";\n\nexport interface DatePickerPanelProps extends ComponentPropsWithoutRef<\"div\"> {\n onSelect?: (\n event: SyntheticEvent,\n selectedDate?: DateValue | { startDate?: DateValue; endDate?: DateValue }\n ) => void;\n helperText?: string;\n CalendarProps?: Partial<\n Omit<\n CalendarProps,\n | \"selectionVariant\"\n | \"selectedDate\"\n | \"defaultSelectedDate\"\n | \"onSelectedDateChange\"\n >\n >;\n}\n\nconst withBaseName = makePrefixer(\"saltDatePickerPanel\");\n\nexport const DatePickerPanel = forwardRef<HTMLDivElement, DatePickerPanelProps>(\n function DatePickerPanel(props, ref) {\n const { className, onSelect, helperText, CalendarProps, ...rest } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-picker-panel\",\n css: dateInputPanelCss,\n window: targetWindow,\n });\n\n const { Component: FloatingComponent } = useFloatingComponent();\n const [hoveredDate, setHoveredDate] = useState<DateValue | null>(null);\n\n const {\n openState,\n startDate,\n setStartDate,\n startVisibleMonth,\n setStartVisibleMonth,\n endDate,\n setEndDate,\n endVisibleMonth,\n setEndVisibleMonth,\n setOpen,\n selectionVariant,\n context,\n getPanelPosition,\n } = useDatePickerContext();\n\n const { a11yProps } = useFormFieldProps();\n\n const setRangeDate: UseRangeSelectionCalendarProps[\"onSelectedDateChange\"] =\n (event, newDate) => {\n setStartDate(newDate.startDate);\n setEndDate(newDate.endDate);\n onSelect?.(event, newDate);\n if (newDate.startDate && newDate.endDate) {\n setOpen(false);\n }\n };\n const setSingleDate: UseSingleSelectionCalendarProps[\"onSelectedDateChange\"] =\n (event, newDate) => {\n setStartDate(newDate);\n onSelect?.(event, newDate);\n setOpen(false);\n };\n const handleHoveredDateChange: CalendarProps[\"onHoveredDateChange\"] = (\n _,\n newHoveredDate\n ) => {\n setHoveredDate(newHoveredDate);\n };\n useEffect(() => {\n if (startDate) {\n setStartVisibleMonth(startDate);\n setEndVisibleMonth(startDate.add({ months: 1 }));\n }\n }, [startDate]);\n\n const isRangePicker = selectionVariant === \"range\";\n const firstCalendarProps: CalendarProps = isRangePicker\n ? {\n selectionVariant: \"range\",\n hoveredDate:\n startDate &&\n hoveredDate &&\n hoveredDate.compare(endOfMonth(startDate)) > 0\n ? endOfMonth(startDate)\n : hoveredDate,\n onHoveredDateChange: handleHoveredDateChange,\n selectedDate: { startDate, endDate },\n onSelectedDateChange: setRangeDate,\n maxDate: startDate && endOfMonth(startDate),\n hideOutOfRangeDates: true,\n }\n : {\n selectionVariant: \"default\",\n selectedDate: startDate,\n onSelectedDateChange: setSingleDate,\n };\n return (\n <FloatingComponent\n open={openState}\n className={clsx(withBaseName(), className)}\n aria-modal=\"true\"\n ref={ref}\n focusManagerProps={\n context\n ? {\n context: context,\n initialFocus: 4,\n }\n : undefined\n }\n {...getPanelPosition()}\n {...a11yProps}\n {...rest}\n >\n <StackLayout separators gap={0} className={withBaseName(\"container\")}>\n {helperText && (\n <FlexItem className={withBaseName(\"header\")}>\n <FormFieldHelperText>{helperText}</FormFieldHelperText>\n </FlexItem>\n )}\n <FlexLayout>\n {/* Avoid Dropdowns in Calendar inheriting the FormField's state */}\n <FormFieldContext.Provider value={{} as FormFieldContextValue}>\n <Calendar\n visibleMonth={startVisibleMonth}\n onVisibleMonthChange={(_, month) => setStartVisibleMonth(month)}\n {...firstCalendarProps}\n {...CalendarProps}\n />\n {isRangePicker && (\n <Calendar\n selectionVariant=\"range\"\n hoveredDate={hoveredDate}\n onHoveredDateChange={handleHoveredDateChange}\n selectedDate={{ startDate, endDate }}\n onSelectedDateChange={setRangeDate}\n visibleMonth={endVisibleMonth}\n onVisibleMonthChange={(_, month) => setEndVisibleMonth(month)}\n hideOutOfRangeDates\n minDate={\n startDate\n ? startOfMonth(startDate)?.add({ months: 1 })\n : undefined\n }\n {...CalendarProps}\n />\n )}\n </FormFieldContext.Provider>\n </FlexLayout>\n </StackLayout>\n </FloatingComponent>\n );\n }\n);\n"],"names":["DatePickerPanel","CalendarProps","dateInputPanelCss"],"mappings":"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"}
1
+ {"version":3,"file":"DatePickerPanel.js","sources":["../src/date-picker/DatePickerPanel.tsx"],"sourcesContent":["import {\n ComponentPropsWithoutRef,\n forwardRef,\n SyntheticEvent,\n useEffect,\n useState,\n} from \"react\";\nimport {\n FlexItem,\n FlexLayout,\n FormFieldContext,\n FormFieldContextValue,\n FormFieldHelperText,\n makePrefixer,\n StackLayout,\n useFloatingComponent,\n useFormFieldProps,\n} from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport { useDatePickerContext } from \"./DatePickerContext\";\nimport dateInputPanelCss from \"./DatePickerPanel.css\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport {\n Calendar,\n CalendarProps,\n isRangeOrOffsetSelectionWithStartDate,\n RangeSelectionValueType,\n SingleSelectionValueType,\n UseRangeSelectionCalendarProps,\n UseSingleSelectionCalendarProps,\n} from \"../calendar\";\nimport { DateValue, endOfMonth, startOfMonth } from \"@internationalized/date\";\n\nfunction clampDate(date: DateValue | null, max: DateValue | null) {\n if (!date || !max) return undefined;\n return date.compare(max) === 0 ? max : date;\n}\n\nexport interface DatePickerPanelProps<SelectionVariantType>\n extends ComponentPropsWithoutRef<\"div\"> {\n onSelect?: (\n event: SyntheticEvent,\n selectedDate?: SelectionVariantType\n ) => void;\n helperText?: string;\n visibleMonths?: 1 | 2;\n CalendarProps?: Partial<\n Omit<\n CalendarProps,\n | \"selectionVariant\"\n | \"selectedDate\"\n | \"defaultSelectedDate\"\n | \"onSelectedDateChange\"\n >\n >;\n}\n\nconst withBaseName = makePrefixer(\"saltDatePickerPanel\");\n\nexport const DatePickerPanel = forwardRef<\n HTMLDivElement,\n DatePickerPanelProps<SingleSelectionValueType | RangeSelectionValueType>\n>(function DatePickerPanel(props, ref) {\n const {\n className,\n onSelect,\n helperText,\n CalendarProps,\n visibleMonths,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-picker-panel\",\n css: dateInputPanelCss,\n window: targetWindow,\n });\n\n const { Component: FloatingComponent } = useFloatingComponent();\n const [hoveredDate, setHoveredDate] = useState<DateValue | null>(null);\n\n const {\n openState,\n selectedDate,\n setSelectedDate,\n startVisibleMonth,\n setStartVisibleMonth,\n endVisibleMonth,\n setEndVisibleMonth,\n setOpen,\n context,\n getPanelPosition,\n selectionVariant,\n } = useDatePickerContext();\n\n const { a11yProps } = useFormFieldProps();\n const isRangePicker =\n isRangeOrOffsetSelectionWithStartDate(selectedDate) ||\n (selectionVariant === \"range\" && selectedDate === undefined);\n const compact = visibleMonths === 1;\n\n const setRangeDate: UseRangeSelectionCalendarProps[\"onSelectedDateChange\"] = (\n event,\n newDate\n ) => {\n setSelectedDate(newDate);\n onSelect?.(event, newDate);\n if (newDate.startDate && newDate.endDate) {\n setOpen(false);\n }\n };\n const setSingleDate: UseSingleSelectionCalendarProps[\"onSelectedDateChange\"] =\n (event, newDate) => {\n setSelectedDate(newDate);\n onSelect?.(event, newDate);\n setOpen(false);\n };\n const handleHoveredDateChange: CalendarProps[\"onHoveredDateChange\"] = (\n _,\n newHoveredDate\n ) => {\n setHoveredDate(newHoveredDate);\n };\n useEffect(() => {\n if (isRangePicker) {\n if (selectedDate?.startDate) {\n setStartVisibleMonth(selectedDate.startDate);\n setEndVisibleMonth(selectedDate.startDate.add({ months: 1 }));\n }\n } else {\n setStartVisibleMonth(selectedDate);\n }\n }, [selectedDate]);\n\n const firstCalendarProps: CalendarProps = isRangePicker\n ? {\n selectionVariant: \"range\",\n // This clamps the hovered date to the end of the visible month, otherwise the hovered date is mirrored across calendars.\n hoveredDate:\n selectedDate?.startDate && !compact\n ? clampDate(hoveredDate, endOfMonth(selectedDate?.startDate))\n : hoveredDate,\n onHoveredDateChange: handleHoveredDateChange,\n selectedDate: selectedDate,\n onSelectedDateChange: setRangeDate,\n maxDate:\n !compact && selectedDate?.startDate\n ? endOfMonth(selectedDate?.startDate)\n : undefined,\n hideOutOfRangeDates: true,\n }\n : {\n selectionVariant: \"default\",\n selectedDate: selectedDate,\n onSelectedDateChange: setSingleDate,\n };\n return (\n <FloatingComponent\n open={openState}\n className={clsx(withBaseName(), className)}\n aria-modal=\"true\"\n ref={ref}\n focusManagerProps={\n context\n ? {\n context: context,\n initialFocus: 4,\n }\n : undefined\n }\n {...getPanelPosition()}\n {...a11yProps}\n {...rest}\n >\n <StackLayout separators gap={0} className={withBaseName(\"container\")}>\n {helperText && (\n <FlexItem className={withBaseName(\"header\")}>\n <FormFieldHelperText>{helperText}</FormFieldHelperText>\n </FlexItem>\n )}\n <FlexLayout>\n {/* Avoid Dropdowns in Calendar inheriting the FormField's state */}\n <FormFieldContext.Provider value={{} as FormFieldContextValue}>\n <Calendar\n visibleMonth={startVisibleMonth}\n onVisibleMonthChange={(_, month) => setStartVisibleMonth(month)}\n {...firstCalendarProps}\n {...CalendarProps}\n />\n {isRangePicker && !compact && (\n <Calendar\n selectionVariant=\"range\"\n hoveredDate={hoveredDate}\n onHoveredDateChange={handleHoveredDateChange}\n selectedDate={selectedDate}\n onSelectedDateChange={setRangeDate}\n visibleMonth={endVisibleMonth}\n onVisibleMonthChange={(_, month) => setEndVisibleMonth(month)}\n hideOutOfRangeDates\n minDate={\n selectedDate?.startDate\n ? startOfMonth(selectedDate?.startDate)?.add({\n months: 1,\n })\n : undefined\n }\n {...CalendarProps}\n />\n )}\n </FormFieldContext.Provider>\n </FlexLayout>\n </StackLayout>\n </FloatingComponent>\n );\n});\n"],"names":["DatePickerPanel","CalendarProps","dateInputPanelCss"],"mappings":"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"}
@@ -16,10 +16,7 @@ interface BaseUseCalendarProps {
16
16
  export declare type useCalendarProps = (Omit<UseSingleSelectionCalendarProps, "isDaySelectable"> | Omit<UseMultiSelectionCalendarProps, "isDaySelectable"> | Omit<UseRangeSelectionCalendarProps, "isDaySelectable"> | Omit<UseOffsetSelectionCalendarProps, "isDaySelectable">) & BaseUseCalendarProps;
17
17
  export declare function useCalendar(props: useCalendarProps): {
18
18
  state: {
19
- selectedDate: import("@internationalized/date").CalendarDate | import("@internationalized/date").CalendarDateTime | import("@internationalized/date").ZonedDateTime | {
20
- startDate?: DateValue | undefined;
21
- endDate?: DateValue | undefined;
22
- } | {
19
+ selectedDate: import("@internationalized/date").CalendarDate | import("@internationalized/date").CalendarDateTime | import("@internationalized/date").ZonedDateTime | import("./useSelection").RangeSelectionValueType | {
23
20
  startDate?: DateValue | undefined;
24
21
  endDate?: DateValue | undefined;
25
22
  } | DateValue[] | null | undefined;
@@ -8,9 +8,9 @@ interface BaseUseSelectionCalendarProps<SelectionVariantType> {
8
8
  isDaySelectable: (date?: DateValue) => boolean;
9
9
  onHoveredDateChange?: (event: SyntheticEvent, hoveredDate: DateValue | null) => void;
10
10
  }
11
- declare type SingleSelectionValueType = DateValue;
11
+ export declare type SingleSelectionValueType = DateValue;
12
12
  declare type MultiSelectionValueType = DateValue[];
13
- declare type RangeSelectionValueType = {
13
+ export declare type RangeSelectionValueType = {
14
14
  startDate?: DateValue;
15
15
  endDate?: DateValue;
16
16
  };
@@ -1,6 +1,7 @@
1
- import { ChangeEventHandler, ComponentPropsWithoutRef, InputHTMLAttributes, ReactNode, RefObject, SyntheticEvent } from "react";
1
+ import { ChangeEvent, ComponentPropsWithoutRef, InputHTMLAttributes, ReactNode, RefObject, SyntheticEvent } from "react";
2
2
  import { DateValue } from "@internationalized/date";
3
- export interface DateInputProps extends Omit<ComponentPropsWithoutRef<"div">, "defaultValue">, Pick<ComponentPropsWithoutRef<"input">, "disabled" | "placeholder"> {
3
+ import { RangeSelectionValueType, SingleSelectionValueType } from "../calendar";
4
+ export interface DateInputProps<SelectionVariantType> extends Omit<ComponentPropsWithoutRef<"div">, "defaultValue" | "onChange">, Pick<ComponentPropsWithoutRef<"input">, "disabled" | "placeholder"> {
4
5
  ariaLabel?: string;
5
6
  /**
6
7
  * The marker to use in an empty read only DateInput.
@@ -44,12 +45,12 @@ export interface DateInputProps extends Omit<ComponentPropsWithoutRef<"div">, "d
44
45
  */
45
46
  selectionVariant?: "default" | "range";
46
47
  /**
47
- * Callback fired when the selected daate change.
48
+ * Callback fired when the selected date change.
48
49
  */
49
- onSelectionChange?: (event: SyntheticEvent, selectedDate?: DateValue | {
50
- startDate?: DateValue;
51
- endDate?: DateValue;
52
- }) => void;
53
- onChange?: ChangeEventHandler<HTMLInputElement>;
50
+ onSelectionChange?: (event: SyntheticEvent, selectedDate?: SelectionVariantType) => void;
51
+ /**
52
+ * Callback fired when the input value change.
53
+ */
54
+ onChange?: SelectionVariantType extends SingleSelectionValueType ? (event: ChangeEvent<HTMLInputElement>, selectedDateInputValue?: string) => void : (event: ChangeEvent<HTMLInputElement>, startDateInputValue?: string, endDateInputValue?: string) => void;
54
55
  }
55
- export declare const DateInput: import("react").ForwardRefExoticComponent<DateInputProps & import("react").RefAttributes<HTMLDivElement>>;
56
+ export declare const DateInput: import("react").ForwardRefExoticComponent<DateInputProps<DateValue | RangeSelectionValueType> & import("react").RefAttributes<HTMLDivElement>>;
@@ -1,8 +1,8 @@
1
- import { ChangeEventHandler, ComponentPropsWithoutRef, SyntheticEvent } from "react";
1
+ import { ChangeEvent, SyntheticEvent } from "react";
2
+ import { DateInputProps } from "../date-input";
2
3
  import { DateValue } from "@internationalized/date";
3
- import { CalendarProps } from "../calendar";
4
- export interface DatePickerProps extends Omit<ComponentPropsWithoutRef<"div">, "defaultValue">, Pick<ComponentPropsWithoutRef<"input">, "disabled" | "value" | "defaultValue" | "placeholder"> {
5
- inputAriaLabel?: string;
4
+ import { CalendarProps, RangeSelectionValueType, SingleSelectionValueType } from "../calendar";
5
+ export interface DatePickerProps<SelectionVariantType> extends DateInputProps<SelectionVariantType> {
6
6
  /**
7
7
  * Selection variant. Defaults to single select.
8
8
  */
@@ -15,18 +15,12 @@ export interface DatePickerProps extends Omit<ComponentPropsWithoutRef<"div">, "
15
15
  * The selected date value. Use when the component is controlled.
16
16
  * Can be a single date or an object with start and end dates for range selection.
17
17
  */
18
- selectedDate?: DateValue | {
19
- startDate?: DateValue;
20
- endDate?: DateValue;
21
- };
18
+ selectedDate?: SelectionVariantType;
22
19
  /**
23
20
  * The default date value. Use when the component is not controlled.
24
21
  * Can be a single date or an object with start and end dates for range selection.
25
22
  */
26
- defaultSelectedDate?: DateValue | {
27
- startDate: DateValue;
28
- endDate: DateValue;
29
- };
23
+ defaultSelectedDate?: SelectionVariantType;
30
24
  /**
31
25
  * Props to be passed to the Calendar component.
32
26
  */
@@ -44,13 +38,13 @@ export interface DatePickerProps extends Omit<ComponentPropsWithoutRef<"div">, "
44
38
  */
45
39
  open?: boolean;
46
40
  /**
47
- * Helper text to display in the panel
41
+ * The default open value. Use when the component is not controlled.
48
42
  */
49
- helperText?: string;
43
+ defaultOpen?: boolean;
50
44
  /**
51
- * If `true`, the component is read only.
45
+ * Helper text to display in the panel
52
46
  */
53
- readOnly?: boolean;
47
+ helperText?: string;
54
48
  /**
55
49
  * Validation status.
56
50
  */
@@ -58,13 +52,15 @@ export interface DatePickerProps extends Omit<ComponentPropsWithoutRef<"div">, "
58
52
  /**
59
53
  * Callback fired when the selected date change.
60
54
  */
61
- onSelectionChange?: (event: SyntheticEvent, selectedDate?: DateValue | {
62
- startDate?: DateValue;
63
- endDate?: DateValue;
64
- }) => void;
55
+ onSelectionChange?: (event: SyntheticEvent, selectedDate?: SelectionVariantType) => void;
65
56
  /**
66
57
  * Callback fired when the input value change.
67
58
  */
68
- onChange?: ChangeEventHandler<HTMLInputElement>;
59
+ onChange?: SelectionVariantType extends SingleSelectionValueType ? (event: ChangeEvent<HTMLInputElement>, selectedDateInputValue?: string) => void : (event: ChangeEvent<HTMLInputElement>, startDateInputValue?: string, endDateInputValue?: string) => void;
60
+ /**
61
+ * Number of Calendars to be shown if selectionVariant is range.
62
+ * 2 is the default value.
63
+ */
64
+ visibleMonths?: 1 | 2;
69
65
  }
70
- export declare const DatePicker: import("react").ForwardRefExoticComponent<DatePickerProps & import("react").RefAttributes<HTMLDivElement>>;
66
+ export declare const DatePicker: import("react").ForwardRefExoticComponent<DatePickerProps<DateValue | RangeSelectionValueType> & import("react").RefAttributes<HTMLDivElement>>;
@@ -1,21 +1,19 @@
1
1
  import { UseFloatingUIReturn } from "@salt-ds/core";
2
2
  import { DateValue } from "@internationalized/date";
3
- export interface DatePickerContextValue extends Partial<Pick<UseFloatingUIReturn, "context">> {
3
+ import { RangeSelectionValueType } from "../calendar";
4
+ export interface DatePickerContextValue<SelectionVariantType> extends Partial<Pick<UseFloatingUIReturn, "context">> {
4
5
  openState: boolean;
5
6
  setOpen: (newOpen: boolean) => void;
6
7
  disabled: boolean;
7
- startDate: DateValue | undefined;
8
- defaultStartDate: DateValue | undefined;
9
- setStartDate: (newStartDate: DateValue | undefined) => void;
8
+ selectedDate: SelectionVariantType | undefined;
9
+ defaultSelectedDate: SelectionVariantType | undefined;
10
+ setSelectedDate: (newStartDate: SelectionVariantType | undefined) => void;
10
11
  startVisibleMonth: DateValue | undefined;
11
12
  setStartVisibleMonth: (newStartDate: DateValue | undefined) => void;
12
- endDate: DateValue | undefined;
13
13
  endVisibleMonth: DateValue | undefined;
14
14
  setEndVisibleMonth: (newStartDate: DateValue | undefined) => void;
15
- defaultEndDate: DateValue | undefined;
16
- setEndDate: (newEndDate: DateValue | undefined) => void;
17
15
  selectionVariant: "default" | "range";
18
16
  getPanelPosition: () => Record<string, unknown>;
19
17
  }
20
- export declare const DatePickerContext: import("react").Context<DatePickerContextValue>;
21
- export declare function useDatePickerContext(): DatePickerContextValue;
18
+ export declare const DatePickerContext: import("react").Context<DatePickerContextValue<DateValue | RangeSelectionValueType>>;
19
+ export declare function useDatePickerContext(): DatePickerContextValue<DateValue | RangeSelectionValueType>;
@@ -1,12 +1,10 @@
1
1
  import { ComponentPropsWithoutRef, SyntheticEvent } from "react";
2
- import { CalendarProps } from "../calendar";
2
+ import { CalendarProps, RangeSelectionValueType } from "../calendar";
3
3
  import { DateValue } from "@internationalized/date";
4
- export interface DatePickerPanelProps extends ComponentPropsWithoutRef<"div"> {
5
- onSelect?: (event: SyntheticEvent, selectedDate?: DateValue | {
6
- startDate?: DateValue;
7
- endDate?: DateValue;
8
- }) => void;
4
+ export interface DatePickerPanelProps<SelectionVariantType> extends ComponentPropsWithoutRef<"div"> {
5
+ onSelect?: (event: SyntheticEvent, selectedDate?: SelectionVariantType) => void;
9
6
  helperText?: string;
7
+ visibleMonths?: 1 | 2;
10
8
  CalendarProps?: Partial<Omit<CalendarProps, "selectionVariant" | "selectedDate" | "defaultSelectedDate" | "onSelectedDateChange">>;
11
9
  }
12
- export declare const DatePickerPanel: import("react").ForwardRefExoticComponent<DatePickerPanelProps & import("react").RefAttributes<HTMLDivElement>>;
10
+ export declare const DatePickerPanel: import("react").ForwardRefExoticComponent<DatePickerPanelProps<DateValue | RangeSelectionValueType> & import("react").RefAttributes<HTMLDivElement>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salt-ds/lab",
3
- "version": "1.0.0-alpha.46",
3
+ "version": "1.0.0-alpha.48",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -26,10 +26,10 @@
26
26
  "react-window": "^1.8.6",
27
27
  "rifm": "^0.12.0",
28
28
  "tinycolor2": "^1.4.2",
29
- "@salt-ds/core": "^1.28.1",
29
+ "@salt-ds/core": "^1.30.0",
30
30
  "@salt-ds/window": "^0.1.1",
31
31
  "@salt-ds/styles": "^0.2.1",
32
- "@salt-ds/icons": "^1.12.0"
32
+ "@salt-ds/icons": "^1.12.1"
33
33
  },
34
34
  "peerDependencies": {
35
35
  "@types/react": ">=16.14.0",