@salt-ds/lab 1.0.0-alpha.47 → 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 (47) hide show
  1. package/css/salt-lab.css +1 -25
  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.js +129 -115
  13. package/dist-cjs/date-picker/DatePickerPanel.js.map +1 -1
  14. package/dist-cjs/index.js +0 -2
  15. package/dist-cjs/index.js.map +1 -1
  16. package/dist-es/calendar/Calendar.js +4 -1
  17. package/dist-es/calendar/Calendar.js.map +1 -1
  18. package/dist-es/calendar/useSelection.js +1 -1
  19. package/dist-es/calendar/useSelection.js.map +1 -1
  20. package/dist-es/date-input/DateInput.js +235 -234
  21. package/dist-es/date-input/DateInput.js.map +1 -1
  22. package/dist-es/date-picker/DatePicker.js +135 -142
  23. package/dist-es/date-picker/DatePicker.js.map +1 -1
  24. package/dist-es/date-picker/DatePickerContext.js +14 -20
  25. package/dist-es/date-picker/DatePickerContext.js.map +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-es/index.js +0 -1
  29. package/dist-es/index.js.map +1 -1
  30. package/dist-types/calendar/useCalendar.d.ts +1 -4
  31. package/dist-types/calendar/useSelection.d.ts +2 -2
  32. package/dist-types/date-input/DateInput.d.ts +10 -9
  33. package/dist-types/date-picker/DatePicker.d.ts +18 -22
  34. package/dist-types/date-picker/DatePickerContext.d.ts +7 -9
  35. package/dist-types/date-picker/DatePickerPanel.d.ts +5 -7
  36. package/dist-types/index.d.ts +0 -1
  37. package/package.json +3 -3
  38. package/dist-cjs/divider/Divider.css.js +0 -6
  39. package/dist-cjs/divider/Divider.css.js.map +0 -1
  40. package/dist-cjs/divider/Divider.js +0 -44
  41. package/dist-cjs/divider/Divider.js.map +0 -1
  42. package/dist-es/divider/Divider.css.js +0 -4
  43. package/dist-es/divider/Divider.css.js.map +0 -1
  44. package/dist-es/divider/Divider.js +0 -40
  45. package/dist-es/divider/Divider.js.map +0 -1
  46. package/dist-types/divider/Divider.d.ts +0 -12
  47. package/dist-types/divider/index.d.ts +0 -1
@@ -14,126 +14,140 @@ var Calendar = require('../calendar/Calendar.js');
14
14
  var date = require('@internationalized/date');
15
15
  require('../calendar/internal/CalendarContext.js');
16
16
  require('../calendar/internal/utils.js');
17
- require('../calendar/useSelection.js');
17
+ var useSelection = require('../calendar/useSelection.js');
18
18
 
19
+ function clampDate(date, max) {
20
+ if (!date || !max)
21
+ return void 0;
22
+ return date.compare(max) === 0 ? max : date;
23
+ }
19
24
  const withBaseName = core.makePrefixer("saltDatePickerPanel");
20
- const DatePickerPanel = React.forwardRef(
21
- function DatePickerPanel2(props, ref) {
22
- var _a;
23
- const { className, onSelect, helperText, CalendarProps: CalendarProps2, ...rest } = props;
24
- const targetWindow = window.useWindow();
25
- styles.useComponentCssInjection({
26
- testId: "salt-date-picker-panel",
27
- css: DatePickerPanel$1,
28
- window: targetWindow
29
- });
30
- const { Component: FloatingComponent } = core.useFloatingComponent();
31
- const [hoveredDate, setHoveredDate] = React.useState(null);
32
- const {
33
- openState,
34
- startDate,
35
- setStartDate,
36
- startVisibleMonth,
37
- setStartVisibleMonth,
38
- endDate,
39
- setEndDate,
40
- endVisibleMonth,
41
- setEndVisibleMonth,
42
- setOpen,
43
- selectionVariant,
44
- context,
45
- getPanelPosition
46
- } = DatePickerContext.useDatePickerContext();
47
- const { a11yProps } = core.useFormFieldProps();
48
- const setRangeDate = (event, newDate) => {
49
- setStartDate(newDate.startDate);
50
- setEndDate(newDate.endDate);
51
- onSelect == null ? void 0 : onSelect(event, newDate);
52
- if (newDate.startDate && newDate.endDate) {
53
- setOpen(false);
54
- }
55
- };
56
- const setSingleDate = (event, newDate) => {
57
- setStartDate(newDate);
58
- onSelect == null ? void 0 : onSelect(event, newDate);
25
+ const DatePickerPanel = React.forwardRef(function DatePickerPanel2(props, ref) {
26
+ var _a;
27
+ const {
28
+ className,
29
+ onSelect,
30
+ helperText,
31
+ CalendarProps: CalendarProps2,
32
+ visibleMonths,
33
+ ...rest
34
+ } = props;
35
+ const targetWindow = window.useWindow();
36
+ styles.useComponentCssInjection({
37
+ testId: "salt-date-picker-panel",
38
+ css: DatePickerPanel$1,
39
+ window: targetWindow
40
+ });
41
+ const { Component: FloatingComponent } = core.useFloatingComponent();
42
+ const [hoveredDate, setHoveredDate] = React.useState(null);
43
+ const {
44
+ openState,
45
+ selectedDate,
46
+ setSelectedDate,
47
+ startVisibleMonth,
48
+ setStartVisibleMonth,
49
+ endVisibleMonth,
50
+ setEndVisibleMonth,
51
+ setOpen,
52
+ context,
53
+ getPanelPosition,
54
+ selectionVariant
55
+ } = DatePickerContext.useDatePickerContext();
56
+ const { a11yProps } = core.useFormFieldProps();
57
+ const isRangePicker = useSelection.isRangeOrOffsetSelectionWithStartDate(selectedDate) || selectionVariant === "range" && selectedDate === void 0;
58
+ const compact = visibleMonths === 1;
59
+ const setRangeDate = (event, newDate) => {
60
+ setSelectedDate(newDate);
61
+ onSelect == null ? void 0 : onSelect(event, newDate);
62
+ if (newDate.startDate && newDate.endDate) {
59
63
  setOpen(false);
60
- };
61
- const handleHoveredDateChange = (_, newHoveredDate) => {
62
- setHoveredDate(newHoveredDate);
63
- };
64
- React.useEffect(() => {
65
- if (startDate) {
66
- setStartVisibleMonth(startDate);
67
- setEndVisibleMonth(startDate.add({ months: 1 }));
64
+ }
65
+ };
66
+ const setSingleDate = (event, newDate) => {
67
+ setSelectedDate(newDate);
68
+ onSelect == null ? void 0 : onSelect(event, newDate);
69
+ setOpen(false);
70
+ };
71
+ const handleHoveredDateChange = (_, newHoveredDate) => {
72
+ setHoveredDate(newHoveredDate);
73
+ };
74
+ React.useEffect(() => {
75
+ if (isRangePicker) {
76
+ if (selectedDate == null ? void 0 : selectedDate.startDate) {
77
+ setStartVisibleMonth(selectedDate.startDate);
78
+ setEndVisibleMonth(selectedDate.startDate.add({ months: 1 }));
68
79
  }
69
- }, [startDate]);
70
- const isRangePicker = selectionVariant === "range";
71
- const firstCalendarProps = isRangePicker ? {
72
- selectionVariant: "range",
73
- hoveredDate: startDate && hoveredDate && hoveredDate.compare(date.endOfMonth(startDate)) > 0 ? date.endOfMonth(startDate) : hoveredDate,
74
- onHoveredDateChange: handleHoveredDateChange,
75
- selectedDate: { startDate, endDate },
76
- onSelectedDateChange: setRangeDate,
77
- maxDate: startDate && date.endOfMonth(startDate),
78
- hideOutOfRangeDates: true
79
- } : {
80
- selectionVariant: "default",
81
- selectedDate: startDate,
82
- onSelectedDateChange: setSingleDate
83
- };
84
- return /* @__PURE__ */ jsxRuntime.jsx(FloatingComponent, {
85
- open: openState,
86
- className: clsx.clsx(withBaseName(), className),
87
- "aria-modal": "true",
88
- ref,
89
- focusManagerProps: context ? {
90
- context,
91
- initialFocus: 4
92
- } : void 0,
93
- ...getPanelPosition(),
94
- ...a11yProps,
95
- ...rest,
96
- children: /* @__PURE__ */ jsxRuntime.jsxs(core.StackLayout, {
97
- separators: true,
98
- gap: 0,
99
- className: withBaseName("container"),
100
- children: [
101
- helperText && /* @__PURE__ */ jsxRuntime.jsx(core.FlexItem, {
102
- className: withBaseName("header"),
103
- children: /* @__PURE__ */ jsxRuntime.jsx(core.FormFieldHelperText, {
104
- children: helperText
105
- })
106
- }),
107
- /* @__PURE__ */ jsxRuntime.jsx(core.FlexLayout, {
108
- children: /* @__PURE__ */ jsxRuntime.jsxs(core.FormFieldContext.Provider, {
109
- value: {},
110
- children: [
111
- /* @__PURE__ */ jsxRuntime.jsx(Calendar.Calendar, {
112
- visibleMonth: startVisibleMonth,
113
- onVisibleMonthChange: (_, month) => setStartVisibleMonth(month),
114
- ...firstCalendarProps,
115
- ...CalendarProps2
116
- }),
117
- isRangePicker && /* @__PURE__ */ jsxRuntime.jsx(Calendar.Calendar, {
118
- selectionVariant: "range",
119
- hoveredDate,
120
- onHoveredDateChange: handleHoveredDateChange,
121
- selectedDate: { startDate, endDate },
122
- onSelectedDateChange: setRangeDate,
123
- visibleMonth: endVisibleMonth,
124
- onVisibleMonthChange: (_, month) => setEndVisibleMonth(month),
125
- hideOutOfRangeDates: true,
126
- minDate: startDate ? (_a = date.startOfMonth(startDate)) == null ? void 0 : _a.add({ months: 1 }) : void 0,
127
- ...CalendarProps2
128
- })
129
- ]
130
- })
80
+ } else {
81
+ setStartVisibleMonth(selectedDate);
82
+ }
83
+ }, [selectedDate]);
84
+ const firstCalendarProps = isRangePicker ? {
85
+ selectionVariant: "range",
86
+ hoveredDate: (selectedDate == null ? void 0 : selectedDate.startDate) && !compact ? clampDate(hoveredDate, date.endOfMonth(selectedDate == null ? void 0 : selectedDate.startDate)) : hoveredDate,
87
+ onHoveredDateChange: handleHoveredDateChange,
88
+ selectedDate,
89
+ onSelectedDateChange: setRangeDate,
90
+ maxDate: !compact && (selectedDate == null ? void 0 : selectedDate.startDate) ? date.endOfMonth(selectedDate == null ? void 0 : selectedDate.startDate) : void 0,
91
+ hideOutOfRangeDates: true
92
+ } : {
93
+ selectionVariant: "default",
94
+ selectedDate,
95
+ onSelectedDateChange: setSingleDate
96
+ };
97
+ return /* @__PURE__ */ jsxRuntime.jsx(FloatingComponent, {
98
+ open: openState,
99
+ className: clsx.clsx(withBaseName(), className),
100
+ "aria-modal": "true",
101
+ ref,
102
+ focusManagerProps: context ? {
103
+ context,
104
+ initialFocus: 4
105
+ } : void 0,
106
+ ...getPanelPosition(),
107
+ ...a11yProps,
108
+ ...rest,
109
+ children: /* @__PURE__ */ jsxRuntime.jsxs(core.StackLayout, {
110
+ separators: true,
111
+ gap: 0,
112
+ className: withBaseName("container"),
113
+ children: [
114
+ helperText && /* @__PURE__ */ jsxRuntime.jsx(core.FlexItem, {
115
+ className: withBaseName("header"),
116
+ children: /* @__PURE__ */ jsxRuntime.jsx(core.FormFieldHelperText, {
117
+ children: helperText
118
+ })
119
+ }),
120
+ /* @__PURE__ */ jsxRuntime.jsx(core.FlexLayout, {
121
+ children: /* @__PURE__ */ jsxRuntime.jsxs(core.FormFieldContext.Provider, {
122
+ value: {},
123
+ children: [
124
+ /* @__PURE__ */ jsxRuntime.jsx(Calendar.Calendar, {
125
+ visibleMonth: startVisibleMonth,
126
+ onVisibleMonthChange: (_, month) => setStartVisibleMonth(month),
127
+ ...firstCalendarProps,
128
+ ...CalendarProps2
129
+ }),
130
+ isRangePicker && !compact && /* @__PURE__ */ jsxRuntime.jsx(Calendar.Calendar, {
131
+ selectionVariant: "range",
132
+ hoveredDate,
133
+ onHoveredDateChange: handleHoveredDateChange,
134
+ selectedDate,
135
+ onSelectedDateChange: setRangeDate,
136
+ visibleMonth: endVisibleMonth,
137
+ onVisibleMonthChange: (_, month) => setEndVisibleMonth(month),
138
+ hideOutOfRangeDates: true,
139
+ minDate: (selectedDate == null ? void 0 : selectedDate.startDate) ? (_a = date.startOfMonth(selectedDate == null ? void 0 : selectedDate.startDate)) == null ? void 0 : _a.add({
140
+ months: 1
141
+ }) : void 0,
142
+ ...CalendarProps2
143
+ })
144
+ ]
131
145
  })
132
- ]
133
- })
134
- });
135
- }
136
- );
146
+ })
147
+ ]
148
+ })
149
+ });
150
+ });
137
151
 
138
152
  exports.DatePickerPanel = DatePickerPanel;
139
153
  //# 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":["makePrefixer","forwardRef","DatePickerPanel","CalendarProps","useWindow","useComponentCssInjection","dateInputPanelCss","useFloatingComponent","useState","useDatePickerContext","useFormFieldProps","useEffect","endOfMonth","jsx","clsx","jsxs","StackLayout","FlexItem","FormFieldHelperText","FlexLayout","FormFieldContext","Calendar","startOfMonth"],"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":["makePrefixer","forwardRef","DatePickerPanel","CalendarProps","useWindow","useComponentCssInjection","dateInputPanelCss","useFloatingComponent","useState","useDatePickerContext","useFormFieldProps","isRangeOrOffsetSelectionWithStartDate","useEffect","endOfMonth","jsx","clsx","jsxs","StackLayout","FlexItem","FormFieldHelperText","FlexLayout","FormFieldContext","Calendar","startOfMonth"],"mappings":"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"}
package/dist-cjs/index.js CHANGED
@@ -62,7 +62,6 @@ var DateInput = require('./date-input/DateInput.js');
62
62
  var DatePicker = require('./date-picker/DatePicker.js');
63
63
  var DeckItem = require('./deck-item/DeckItem.js');
64
64
  var DeckLayout = require('./deck-layout/DeckLayout.js');
65
- var Divider = require('./divider/Divider.js');
66
65
  var DropdownBase = require('./dropdown/DropdownBase.js');
67
66
  var DropdownButton = require('./dropdown/DropdownButton.js');
68
67
  var Dropdown = require('./dropdown/Dropdown.js');
@@ -202,7 +201,6 @@ exports.DateInput = DateInput.DateInput;
202
201
  exports.DatePicker = DatePicker.DatePicker;
203
202
  exports.DeckItem = DeckItem.DeckItem;
204
203
  exports.DeckLayout = DeckLayout.DeckLayout;
205
- exports.Divider = Divider.Divider;
206
204
  exports.DropdownBase = DropdownBase.DropdownBase;
207
205
  exports.DropdownButton = DropdownButton.DropdownButton;
208
206
  exports.Dropdown = Dropdown.Dropdown;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -29,7 +29,10 @@ const Calendar = forwardRef(
29
29
  css: css_248z,
30
30
  window: targetWindow
31
31
  });
32
- const { state, helpers } = useCalendar({ hideYearDropdown, ...rest });
32
+ const { state, helpers } = useCalendar({
33
+ hideYearDropdown,
34
+ ...rest
35
+ });
33
36
  const { setCalendarFocused } = helpers;
34
37
  const handleFocus = useCallback(() => {
35
38
  setCalendarFocused(true);
@@ -1 +1 @@
1
- {"version":3,"file":"Calendar.js","sources":["../src/calendar/Calendar.tsx"],"sourcesContent":["import { forwardRef, useCallback } from \"react\";\nimport { clsx } from \"clsx\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport {\n CalendarNavigation,\n CalendarNavigationProps,\n} from \"./internal/CalendarNavigation\";\nimport { CalendarWeekHeader } from \"./internal/CalendarWeekHeader\";\nimport {\n CalendarCarousel,\n CalendarCarouselProps,\n} from \"./internal/CalendarCarousel\";\nimport { CalendarContext } from \"./internal/CalendarContext\";\nimport { useCalendar, useCalendarProps } from \"./useCalendar\";\n\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nimport calendarCss from \"./Calendar.css\";\nimport { DateFormatter, getLocalTimeZone } from \"@internationalized/date\";\nimport { getCurrentLocale } from \"./internal/utils\";\n\nexport type CalendarProps = useCalendarProps & {\n className?: string;\n renderDayContents?: CalendarCarouselProps[\"renderDayContents\"];\n hideYearDropdown?: CalendarNavigationProps[\"hideYearDropdown\"];\n TooltipProps?: CalendarCarouselProps[\"TooltipProps\"];\n hideOutOfRangeDates?: CalendarCarouselProps[\"hideOutOfRangeDates\"];\n};\n\nconst withBaseName = makePrefixer(\"saltCalendar\");\n\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps>(\n function Calendar(props, ref) {\n const {\n className,\n renderDayContents,\n hideYearDropdown,\n TooltipProps,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar\",\n css: calendarCss,\n window: targetWindow,\n });\n\n const { state, helpers } = useCalendar({ hideYearDropdown, ...rest });\n\n const { setCalendarFocused } = helpers;\n\n const handleFocus = useCallback(() => {\n setCalendarFocused(true);\n }, [setCalendarFocused]);\n\n const handleBlur = useCallback(() => {\n setCalendarFocused(false);\n }, [setCalendarFocused]);\n\n const calendarLabel = new DateFormatter(getCurrentLocale(), {\n month: \"long\",\n year: \"numeric\",\n }).format(state.visibleMonth.toDate(getLocalTimeZone()));\n return (\n <CalendarContext.Provider\n value={{\n state,\n helpers,\n }}\n >\n <div\n className={clsx(withBaseName(), className)}\n role=\"application\"\n aria-label={calendarLabel}\n ref={ref}\n >\n <CalendarNavigation hideYearDropdown={hideYearDropdown} />\n <CalendarWeekHeader />\n <CalendarCarousel\n onFocus={handleFocus}\n onBlur={handleBlur}\n renderDayContents={renderDayContents}\n TooltipProps={TooltipProps}\n />\n </div>\n </CalendarContext.Provider>\n );\n }\n);\n"],"names":["Calendar","calendarCss"],"mappings":";;;;;;;;;;;;;;;AA8BA,MAAM,YAAA,GAAe,aAAa,cAAc,CAAA,CAAA;AAEzC,MAAM,QAAW,GAAA,UAAA;AAAA,EACtB,SAASA,SAAS,CAAA,KAAA,EAAO,GAAK,EAAA;AAC5B,IAAM,MAAA;AAAA,MACJ,SAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,YAAA;AAAA,MACG,GAAA,IAAA;AAAA,KACD,GAAA,KAAA,CAAA;AAEJ,IAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,IAAyB,wBAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,eAAA;AAAA,MACR,GAAK,EAAAC,QAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAM,MAAA,EAAE,OAAO,OAAQ,EAAA,GAAI,YAAY,EAAE,gBAAA,EAAkB,GAAG,IAAA,EAAM,CAAA,CAAA;AAEpE,IAAM,MAAA,EAAE,oBAAuB,GAAA,OAAA,CAAA;AAE/B,IAAM,MAAA,WAAA,GAAc,YAAY,MAAM;AACpC,MAAA,kBAAA,CAAmB,IAAI,CAAA,CAAA;AAAA,KACzB,EAAG,CAAC,kBAAkB,CAAC,CAAA,CAAA;AAEvB,IAAM,MAAA,UAAA,GAAa,YAAY,MAAM;AACnC,MAAA,kBAAA,CAAmB,KAAK,CAAA,CAAA;AAAA,KAC1B,EAAG,CAAC,kBAAkB,CAAC,CAAA,CAAA;AAEvB,IAAA,MAAM,aAAgB,GAAA,IAAI,aAAc,CAAA,gBAAA,EAAoB,EAAA;AAAA,MAC1D,KAAO,EAAA,MAAA;AAAA,MACP,IAAM,EAAA,SAAA;AAAA,KACP,EAAE,MAAO,CAAA,KAAA,CAAM,aAAa,MAAO,CAAA,gBAAA,EAAkB,CAAC,CAAA,CAAA;AACvD,IACE,uBAAA,GAAA,CAAC,gBAAgB,QAAhB,EAAA;AAAA,MACC,KAAO,EAAA;AAAA,QACL,KAAA;AAAA,QACA,OAAA;AAAA,OACF;AAAA,MAEA,QAAC,kBAAA,IAAA,CAAA,KAAA,EAAA;AAAA,QACC,SAAW,EAAA,IAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,QACzC,IAAK,EAAA,aAAA;AAAA,QACL,YAAY,EAAA,aAAA;AAAA,QACZ,GAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAC,GAAA,CAAA,kBAAA,EAAA;AAAA,YAAmB,gBAAA;AAAA,WAAoC,CAAA;AAAA,8BACvD,kBAAmB,EAAA,EAAA,CAAA;AAAA,0BACnB,GAAA,CAAA,gBAAA,EAAA;AAAA,YACC,OAAS,EAAA,WAAA;AAAA,YACT,MAAQ,EAAA,UAAA;AAAA,YACR,iBAAA;AAAA,YACA,YAAA;AAAA,WACF,CAAA;AAAA,SAAA;AAAA,OACF,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
1
+ {"version":3,"file":"Calendar.js","sources":["../src/calendar/Calendar.tsx"],"sourcesContent":["import { forwardRef, useCallback } from \"react\";\nimport { clsx } from \"clsx\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport {\n CalendarNavigation,\n CalendarNavigationProps,\n} from \"./internal/CalendarNavigation\";\nimport { CalendarWeekHeader } from \"./internal/CalendarWeekHeader\";\nimport {\n CalendarCarousel,\n CalendarCarouselProps,\n} from \"./internal/CalendarCarousel\";\nimport { CalendarContext } from \"./internal/CalendarContext\";\nimport { useCalendar, useCalendarProps } from \"./useCalendar\";\n\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nimport calendarCss from \"./Calendar.css\";\nimport { DateFormatter, getLocalTimeZone } from \"@internationalized/date\";\nimport { getCurrentLocale } from \"./internal/utils\";\n\nexport type CalendarProps = useCalendarProps & {\n className?: string;\n renderDayContents?: CalendarCarouselProps[\"renderDayContents\"];\n hideYearDropdown?: CalendarNavigationProps[\"hideYearDropdown\"];\n TooltipProps?: CalendarCarouselProps[\"TooltipProps\"];\n hideOutOfRangeDates?: CalendarCarouselProps[\"hideOutOfRangeDates\"];\n};\n\nconst withBaseName = makePrefixer(\"saltCalendar\");\n\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps>(\n function Calendar(props, ref) {\n const {\n className,\n renderDayContents,\n hideYearDropdown,\n TooltipProps,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar\",\n css: calendarCss,\n window: targetWindow,\n });\n\n const { state, helpers } = useCalendar({\n hideYearDropdown,\n ...rest,\n });\n\n const { setCalendarFocused } = helpers;\n\n const handleFocus = useCallback(() => {\n setCalendarFocused(true);\n }, [setCalendarFocused]);\n\n const handleBlur = useCallback(() => {\n setCalendarFocused(false);\n }, [setCalendarFocused]);\n\n const calendarLabel = new DateFormatter(getCurrentLocale(), {\n month: \"long\",\n year: \"numeric\",\n }).format(state.visibleMonth.toDate(getLocalTimeZone()));\n return (\n <CalendarContext.Provider\n value={{\n state,\n helpers,\n }}\n >\n <div\n className={clsx(withBaseName(), className)}\n role=\"application\"\n aria-label={calendarLabel}\n ref={ref}\n >\n <CalendarNavigation hideYearDropdown={hideYearDropdown} />\n <CalendarWeekHeader />\n <CalendarCarousel\n onFocus={handleFocus}\n onBlur={handleBlur}\n renderDayContents={renderDayContents}\n TooltipProps={TooltipProps}\n />\n </div>\n </CalendarContext.Provider>\n );\n }\n);\n"],"names":["Calendar","calendarCss"],"mappings":";;;;;;;;;;;;;;;AA8BA,MAAM,YAAA,GAAe,aAAa,cAAc,CAAA,CAAA;AAEzC,MAAM,QAAW,GAAA,UAAA;AAAA,EACtB,SAASA,SAAS,CAAA,KAAA,EAAO,GAAK,EAAA;AAC5B,IAAM,MAAA;AAAA,MACJ,SAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,YAAA;AAAA,MACG,GAAA,IAAA;AAAA,KACD,GAAA,KAAA,CAAA;AAEJ,IAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,IAAyB,wBAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,eAAA;AAAA,MACR,GAAK,EAAAC,QAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAA,MAAM,EAAE,KAAA,EAAO,OAAQ,EAAA,GAAI,WAAY,CAAA;AAAA,MACrC,gBAAA;AAAA,MACA,GAAG,IAAA;AAAA,KACJ,CAAA,CAAA;AAED,IAAM,MAAA,EAAE,oBAAuB,GAAA,OAAA,CAAA;AAE/B,IAAM,MAAA,WAAA,GAAc,YAAY,MAAM;AACpC,MAAA,kBAAA,CAAmB,IAAI,CAAA,CAAA;AAAA,KACzB,EAAG,CAAC,kBAAkB,CAAC,CAAA,CAAA;AAEvB,IAAM,MAAA,UAAA,GAAa,YAAY,MAAM;AACnC,MAAA,kBAAA,CAAmB,KAAK,CAAA,CAAA;AAAA,KAC1B,EAAG,CAAC,kBAAkB,CAAC,CAAA,CAAA;AAEvB,IAAA,MAAM,aAAgB,GAAA,IAAI,aAAc,CAAA,gBAAA,EAAoB,EAAA;AAAA,MAC1D,KAAO,EAAA,MAAA;AAAA,MACP,IAAM,EAAA,SAAA;AAAA,KACP,EAAE,MAAO,CAAA,KAAA,CAAM,aAAa,MAAO,CAAA,gBAAA,EAAkB,CAAC,CAAA,CAAA;AACvD,IACE,uBAAA,GAAA,CAAC,gBAAgB,QAAhB,EAAA;AAAA,MACC,KAAO,EAAA;AAAA,QACL,KAAA;AAAA,QACA,OAAA;AAAA,OACF;AAAA,MAEA,QAAC,kBAAA,IAAA,CAAA,KAAA,EAAA;AAAA,QACC,SAAW,EAAA,IAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,QACzC,IAAK,EAAA,aAAA;AAAA,QACL,YAAY,EAAA,aAAA;AAAA,QACZ,GAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAC,GAAA,CAAA,kBAAA,EAAA;AAAA,YAAmB,gBAAA;AAAA,WAAoC,CAAA;AAAA,8BACvD,kBAAmB,EAAA,EAAA,CAAA;AAAA,0BACnB,GAAA,CAAA,gBAAA,EAAA;AAAA,YACC,OAAS,EAAA,WAAA;AAAA,YACT,MAAQ,EAAA,UAAA;AAAA,YACR,iBAAA;AAAA,YACA,YAAA;AAAA,WACF,CAAA;AAAA,SAAA;AAAA,OACF,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
@@ -19,7 +19,7 @@ function isRangeOrOffsetSelectionValue(selectionValue) {
19
19
  return selectionValue != null && isPlainObject(selectionValue);
20
20
  }
21
21
  function isRangeOrOffsetSelectionWithStartDate(selectionValue) {
22
- return isRangeOrOffsetSelectionValue(selectionValue) && Boolean(selectionValue == null ? void 0 : selectionValue.startDate);
22
+ return isRangeOrOffsetSelectionValue(selectionValue) && (selectionValue == null ? void 0 : selectionValue.hasOwnProperty("startDate"));
23
23
  }
24
24
  const withBaseName = makePrefixer("saltCalendarDay");
25
25
  function useSelectionCalendar(props) {
@@ -1 +1 @@
1
- {"version":3,"file":"useSelection.js","sources":["../src/calendar/useSelection.ts"],"sourcesContent":["import { makePrefixer, useControlled } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport { KeyboardEventHandler, MouseEventHandler, SyntheticEvent } from \"react\";\nimport { isPlainObject } from \"../utils\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\nimport { CalendarDate, DateValue, isSameDay } from \"@internationalized/date\";\n\ninterface BaseUseSelectionCalendarProps<SelectionVariantType> {\n hoveredDate?: DateValue | null;\n selectedDate?: SelectionVariantType | null;\n defaultSelectedDate?: SelectionVariantType;\n onSelectedDateChange?: (\n event: SyntheticEvent,\n selectedDate: SelectionVariantType\n ) => void;\n isDaySelectable: (date?: DateValue) => boolean;\n onHoveredDateChange?: (\n event: SyntheticEvent,\n hoveredDate: DateValue | null\n ) => void;\n}\n\ntype SingleSelectionValueType = DateValue;\ntype MultiSelectionValueType = DateValue[];\ntype RangeSelectionValueType = {\n startDate?: DateValue;\n endDate?: DateValue;\n};\ntype OffsetSelectionValueType = {\n startDate?: DateValue;\n endDate?: DateValue;\n};\n\ntype AllSelectionValueType =\n | SingleSelectionValueType\n | MultiSelectionValueType\n | RangeSelectionValueType\n | OffsetSelectionValueType\n | null;\n\nexport interface UseOffsetSelectionCalendarProps\n extends Omit<\n BaseUseSelectionCalendarProps<OffsetSelectionValueType>,\n \"startDateOffset\" | \"endDateOffset\"\n > {\n selectionVariant: \"offset\";\n startDateOffset?: (date: DateValue) => DateValue;\n endDateOffset?: (date: DateValue) => DateValue;\n}\n\nexport interface UseRangeSelectionCalendarProps\n extends BaseUseSelectionCalendarProps<RangeSelectionValueType> {\n selectionVariant: \"range\";\n}\n\nexport interface UseMultiSelectionCalendarProps\n extends BaseUseSelectionCalendarProps<MultiSelectionValueType> {\n selectionVariant: \"multiselect\";\n}\n\nexport interface UseSingleSelectionCalendarProps\n extends BaseUseSelectionCalendarProps<SingleSelectionValueType> {\n selectionVariant: \"default\";\n}\n\nexport type useSelectionCalendarProps =\n | UseSingleSelectionCalendarProps\n | UseMultiSelectionCalendarProps\n | UseRangeSelectionCalendarProps\n | UseOffsetSelectionCalendarProps;\n\nfunction addOrRemoveFromArray(\n array: AllSelectionValueType | null = [],\n item: DateValue\n) {\n if (Array.isArray(array)) {\n if (array.find((element) => isSameDay(element, item))) {\n return array.filter((element) => !isSameDay(element, item));\n }\n return array.concat(item);\n }\n return [item];\n}\n\nconst defaultOffset = (date: DateValue) => date;\n\nexport function isRangeOrOffsetSelectionValue(\n selectionValue?: AllSelectionValueType\n): selectionValue is RangeSelectionValueType | OffsetSelectionValueType {\n return selectionValue != null && isPlainObject(selectionValue);\n}\n\nexport function isRangeOrOffsetSelectionWithStartDate(\n selectionValue?: AllSelectionValueType\n): selectionValue is RangeSelectionValueType | OffsetSelectionValueType {\n return (\n isRangeOrOffsetSelectionValue(selectionValue) &&\n Boolean(selectionValue?.startDate)\n );\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarDay\");\n\nexport function useSelectionCalendar(props: useSelectionCalendarProps) {\n const {\n hoveredDate: hoveredDateProp,\n selectedDate: selectedDateProp,\n defaultSelectedDate,\n // onSelectedDateChange,\n onHoveredDateChange,\n isDaySelectable,\n selectionVariant,\n // startDateOffset,\n // endDateOffset,\n } = props;\n const [selectedDate, setSelectedDateState] = useControlled({\n controlled: selectedDateProp,\n default: defaultSelectedDate,\n name: \"Calendar\",\n state: \"selectedDate\",\n });\n\n const getStartDateOffset = (date: DateValue) => {\n if (props.selectionVariant === \"offset\" && props.startDateOffset) {\n return props.startDateOffset(date);\n } else {\n return defaultOffset(date);\n }\n };\n\n const getEndDateOffset = (date: DateValue) => {\n if (props.selectionVariant === \"offset\" && props.endDateOffset) {\n return props.endDateOffset(date);\n } else {\n return defaultOffset(date);\n }\n };\n\n const setSelectedDate = (\n event: SyntheticEvent<HTMLButtonElement>,\n newSelectedDate: DateValue\n ) => {\n if (isDaySelectable(newSelectedDate)) {\n switch (props.selectionVariant) {\n case \"default\":\n setSelectedDateState(newSelectedDate);\n props.onSelectedDateChange?.(event, newSelectedDate);\n break;\n case \"multiselect\":\n const newDates = addOrRemoveFromArray(selectedDate, newSelectedDate);\n setSelectedDateState(newDates);\n props.onSelectedDateChange?.(event, newDates);\n break;\n case \"range\":\n let base = selectedDate;\n if (isRangeOrOffsetSelectionValue(base)) {\n if (base?.startDate && base?.endDate) {\n base = { startDate: newSelectedDate };\n } else if (\n base?.startDate &&\n newSelectedDate.compare(base.startDate) > 0\n ) {\n base = { ...base, endDate: newSelectedDate };\n } else {\n base = { startDate: newSelectedDate };\n }\n } else {\n base = { startDate: newSelectedDate };\n }\n setSelectedDateState(base);\n props.onSelectedDateChange?.(event, base);\n break;\n case \"offset\":\n const newRange = {\n startDate: getStartDateOffset(newSelectedDate),\n endDate: getEndDateOffset(newSelectedDate),\n };\n setSelectedDateState(newRange);\n props.onSelectedDateChange?.(event, newRange);\n }\n }\n };\n\n const isSelected = (date: DateValue) => {\n switch (selectionVariant) {\n case \"default\":\n return (\n selectedDate instanceof CalendarDate && isSameDay(selectedDate, date)\n );\n case \"multiselect\":\n return (\n Array.isArray(selectedDate) &&\n !!selectedDate.find((element) => isSameDay(element, date))\n );\n default:\n return false;\n }\n };\n\n const [hoveredDate, setHoveredDateState] = useControlled({\n controlled: hoveredDateProp,\n default: undefined,\n name: \"Calendar\",\n state: \"hoveredDate\",\n });\n\n const setHoveredDate = (event: SyntheticEvent, date: DateValue | null) => {\n setHoveredDateState(date);\n onHoveredDateChange?.(event, date);\n };\n\n const isHovered = (date: DateValue) => {\n return !!hoveredDate && isSameDay(date, hoveredDate);\n };\n\n const isSelectedSpan = (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isRangeOrOffsetSelectionValue(selectedDate) &&\n selectedDate?.startDate &&\n selectedDate?.endDate\n ) {\n return (\n date.compare(selectedDate.startDate) > 0 &&\n date.compare(selectedDate.endDate) < 0\n );\n }\n return false;\n };\n const isHoveredSpan = (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isRangeOrOffsetSelectionValue(selectedDate) &&\n selectedDate.startDate &&\n !selectedDate.endDate &&\n hoveredDate\n ) {\n const isForwardRange =\n hoveredDate.compare(selectedDate.startDate) > 0 &&\n ((date.compare(selectedDate.startDate) > 0 &&\n date.compare(hoveredDate) < 0) ||\n isSameDay(date, hoveredDate));\n\n const isValidDayHovered = isDaySelectable(hoveredDate);\n\n return isForwardRange && isValidDayHovered;\n }\n return false;\n };\n\n const isSelectedStart = (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isRangeOrOffsetSelectionValue(selectedDate) &&\n selectedDate.startDate\n ) {\n return isSameDay(selectedDate.startDate, date);\n }\n return false;\n };\n\n const isSelectedEnd = (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isRangeOrOffsetSelectionValue(selectedDate) &&\n selectedDate.endDate\n ) {\n return isSameDay(selectedDate.endDate, date);\n }\n return false;\n };\n\n const isHoveredOffset = (date: DateValue) => {\n if (hoveredDate && selectionVariant === \"offset\") {\n const startDate = getStartDateOffset(hoveredDate);\n const endDate = getEndDateOffset(hoveredDate);\n\n return (\n date.compare(startDate) >= 0 &&\n date.compare(endDate) <= 0 &&\n isDaySelectable(date)\n );\n }\n\n return false;\n };\n\n return {\n state: {\n selectedDate,\n hoveredDate,\n },\n helpers: {\n setSelectedDate,\n isSelected,\n setHoveredDate,\n isHovered,\n isSelectedSpan,\n isHoveredSpan,\n isSelectedStart,\n isSelectedEnd,\n isHoveredOffset,\n },\n };\n}\n\nexport function useSelectionDay({ date }: { date: DateValue }) {\n const {\n helpers: {\n setSelectedDate,\n isSelected,\n setHoveredDate,\n isSelectedSpan,\n isHoveredSpan,\n isSelectedStart,\n isSelectedEnd,\n isHovered,\n isHoveredOffset,\n isDayUnselectable,\n },\n } = useCalendarContext();\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n setSelectedDate(event, date);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = (event) => {\n switch (event.key) {\n case \"Space\":\n case \"Enter\":\n setSelectedDate(event, date);\n event.preventDefault();\n }\n };\n\n const handleMouseOver: MouseEventHandler<HTMLButtonElement> = (event) => {\n setHoveredDate(event, date);\n };\n\n const handleMouseLeave: MouseEventHandler<HTMLButtonElement> = (event) => {\n setHoveredDate(event, null);\n };\n\n const selected = isSelected(date);\n const selectedSpan = isSelectedSpan(date);\n const hoveredSpan = isHoveredSpan(date);\n const selectedStart = isSelectedStart(date);\n const selectedEnd = isSelectedEnd(date);\n const hovered = isHovered(date);\n const hoveredOffset = isHoveredOffset(date);\n\n return {\n handleClick,\n handleKeyDown,\n handleMouseOver,\n handleMouseLeave,\n status: {\n selected,\n selectedSpan,\n hoveredSpan,\n selectedStart,\n selectedEnd,\n hovered,\n hoveredOffset,\n },\n dayProps: {\n className: clsx({\n [withBaseName(\"selected\")]: selected,\n [withBaseName(\"selectedSpan\")]: selectedSpan,\n [withBaseName(\"hoveredSpan\")]: hoveredSpan,\n [withBaseName(\"selectedStart\")]: selectedStart,\n [withBaseName(\"selectedEnd\")]: selectedEnd,\n [withBaseName(\"hovered\")]: hovered,\n [withBaseName(\"hoveredOffset\")]: hoveredOffset,\n }),\n \"aria-pressed\":\n selected || selectedEnd || selectedStart || selectedSpan\n ? \"true\"\n : undefined,\n \"aria-disabled\": !!isDayUnselectable(date) ? \"true\" : undefined,\n },\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useSelection.js","sources":["../src/calendar/useSelection.ts"],"sourcesContent":["import { makePrefixer, useControlled } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport { KeyboardEventHandler, MouseEventHandler, SyntheticEvent } from \"react\";\nimport { isPlainObject } from \"../utils\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\nimport { CalendarDate, DateValue, isSameDay } from \"@internationalized/date\";\n\ninterface BaseUseSelectionCalendarProps<SelectionVariantType> {\n hoveredDate?: DateValue | null;\n selectedDate?: SelectionVariantType | null;\n defaultSelectedDate?: SelectionVariantType;\n onSelectedDateChange?: (\n event: SyntheticEvent,\n selectedDate: SelectionVariantType\n ) => void;\n isDaySelectable: (date?: DateValue) => boolean;\n onHoveredDateChange?: (\n event: SyntheticEvent,\n hoveredDate: DateValue | null\n ) => void;\n}\n\nexport type SingleSelectionValueType = DateValue;\ntype MultiSelectionValueType = DateValue[];\nexport type RangeSelectionValueType = {\n startDate?: DateValue;\n endDate?: DateValue;\n};\ntype OffsetSelectionValueType = {\n startDate?: DateValue;\n endDate?: DateValue;\n};\n\ntype AllSelectionValueType =\n | SingleSelectionValueType\n | MultiSelectionValueType\n | RangeSelectionValueType\n | OffsetSelectionValueType\n | null;\n\nexport interface UseOffsetSelectionCalendarProps\n extends Omit<\n BaseUseSelectionCalendarProps<OffsetSelectionValueType>,\n \"startDateOffset\" | \"endDateOffset\"\n > {\n selectionVariant: \"offset\";\n startDateOffset?: (date: DateValue) => DateValue;\n endDateOffset?: (date: DateValue) => DateValue;\n}\n\nexport interface UseRangeSelectionCalendarProps\n extends BaseUseSelectionCalendarProps<RangeSelectionValueType> {\n selectionVariant: \"range\";\n}\n\nexport interface UseMultiSelectionCalendarProps\n extends BaseUseSelectionCalendarProps<MultiSelectionValueType> {\n selectionVariant: \"multiselect\";\n}\n\nexport interface UseSingleSelectionCalendarProps\n extends BaseUseSelectionCalendarProps<SingleSelectionValueType> {\n selectionVariant: \"default\";\n}\n\nexport type useSelectionCalendarProps =\n | UseSingleSelectionCalendarProps\n | UseMultiSelectionCalendarProps\n | UseRangeSelectionCalendarProps\n | UseOffsetSelectionCalendarProps;\n\nfunction addOrRemoveFromArray(\n array: AllSelectionValueType | null = [],\n item: DateValue\n) {\n if (Array.isArray(array)) {\n if (array.find((element) => isSameDay(element, item))) {\n return array.filter((element) => !isSameDay(element, item));\n }\n return array.concat(item);\n }\n return [item];\n}\n\nconst defaultOffset = (date: DateValue) => date;\n\nexport function isRangeOrOffsetSelectionValue(\n selectionValue?: AllSelectionValueType\n): selectionValue is RangeSelectionValueType | OffsetSelectionValueType {\n return selectionValue != null && isPlainObject(selectionValue);\n}\n\nexport function isRangeOrOffsetSelectionWithStartDate(\n selectionValue?: AllSelectionValueType\n): selectionValue is RangeSelectionValueType | OffsetSelectionValueType {\n return (\n isRangeOrOffsetSelectionValue(selectionValue) &&\n selectionValue?.hasOwnProperty(\"startDate\")\n );\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarDay\");\n\nexport function useSelectionCalendar(props: useSelectionCalendarProps) {\n const {\n hoveredDate: hoveredDateProp,\n selectedDate: selectedDateProp,\n defaultSelectedDate,\n // onSelectedDateChange,\n onHoveredDateChange,\n isDaySelectable,\n selectionVariant,\n // startDateOffset,\n // endDateOffset,\n } = props;\n const [selectedDate, setSelectedDateState] = useControlled({\n controlled: selectedDateProp,\n default: defaultSelectedDate,\n name: \"Calendar\",\n state: \"selectedDate\",\n });\n\n const getStartDateOffset = (date: DateValue) => {\n if (props.selectionVariant === \"offset\" && props.startDateOffset) {\n return props.startDateOffset(date);\n } else {\n return defaultOffset(date);\n }\n };\n\n const getEndDateOffset = (date: DateValue) => {\n if (props.selectionVariant === \"offset\" && props.endDateOffset) {\n return props.endDateOffset(date);\n } else {\n return defaultOffset(date);\n }\n };\n\n const setSelectedDate = (\n event: SyntheticEvent<HTMLButtonElement>,\n newSelectedDate: DateValue\n ) => {\n if (isDaySelectable(newSelectedDate)) {\n switch (props.selectionVariant) {\n case \"default\":\n setSelectedDateState(newSelectedDate);\n props.onSelectedDateChange?.(event, newSelectedDate);\n break;\n case \"multiselect\":\n const newDates = addOrRemoveFromArray(selectedDate, newSelectedDate);\n setSelectedDateState(newDates);\n props.onSelectedDateChange?.(event, newDates);\n break;\n case \"range\":\n let base = selectedDate;\n if (isRangeOrOffsetSelectionValue(base)) {\n if (base?.startDate && base?.endDate) {\n base = { startDate: newSelectedDate };\n } else if (\n base?.startDate &&\n newSelectedDate.compare(base.startDate) > 0\n ) {\n base = { ...base, endDate: newSelectedDate };\n } else {\n base = { startDate: newSelectedDate };\n }\n } else {\n base = { startDate: newSelectedDate };\n }\n setSelectedDateState(base);\n props.onSelectedDateChange?.(event, base);\n break;\n case \"offset\":\n const newRange = {\n startDate: getStartDateOffset(newSelectedDate),\n endDate: getEndDateOffset(newSelectedDate),\n };\n setSelectedDateState(newRange);\n props.onSelectedDateChange?.(event, newRange);\n }\n }\n };\n\n const isSelected = (date: DateValue) => {\n switch (selectionVariant) {\n case \"default\":\n return (\n selectedDate instanceof CalendarDate && isSameDay(selectedDate, date)\n );\n case \"multiselect\":\n return (\n Array.isArray(selectedDate) &&\n !!selectedDate.find((element) => isSameDay(element, date))\n );\n default:\n return false;\n }\n };\n\n const [hoveredDate, setHoveredDateState] = useControlled({\n controlled: hoveredDateProp,\n default: undefined,\n name: \"Calendar\",\n state: \"hoveredDate\",\n });\n\n const setHoveredDate = (event: SyntheticEvent, date: DateValue | null) => {\n setHoveredDateState(date);\n onHoveredDateChange?.(event, date);\n };\n\n const isHovered = (date: DateValue) => {\n return !!hoveredDate && isSameDay(date, hoveredDate);\n };\n\n const isSelectedSpan = (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isRangeOrOffsetSelectionValue(selectedDate) &&\n selectedDate?.startDate &&\n selectedDate?.endDate\n ) {\n return (\n date.compare(selectedDate.startDate) > 0 &&\n date.compare(selectedDate.endDate) < 0\n );\n }\n return false;\n };\n const isHoveredSpan = (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isRangeOrOffsetSelectionValue(selectedDate) &&\n selectedDate.startDate &&\n !selectedDate.endDate &&\n hoveredDate\n ) {\n const isForwardRange =\n hoveredDate.compare(selectedDate.startDate) > 0 &&\n ((date.compare(selectedDate.startDate) > 0 &&\n date.compare(hoveredDate) < 0) ||\n isSameDay(date, hoveredDate));\n\n const isValidDayHovered = isDaySelectable(hoveredDate);\n\n return isForwardRange && isValidDayHovered;\n }\n return false;\n };\n\n const isSelectedStart = (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isRangeOrOffsetSelectionValue(selectedDate) &&\n selectedDate.startDate\n ) {\n return isSameDay(selectedDate.startDate, date);\n }\n return false;\n };\n\n const isSelectedEnd = (date: DateValue) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isRangeOrOffsetSelectionValue(selectedDate) &&\n selectedDate.endDate\n ) {\n return isSameDay(selectedDate.endDate, date);\n }\n return false;\n };\n\n const isHoveredOffset = (date: DateValue) => {\n if (hoveredDate && selectionVariant === \"offset\") {\n const startDate = getStartDateOffset(hoveredDate);\n const endDate = getEndDateOffset(hoveredDate);\n\n return (\n date.compare(startDate) >= 0 &&\n date.compare(endDate) <= 0 &&\n isDaySelectable(date)\n );\n }\n\n return false;\n };\n\n return {\n state: {\n selectedDate,\n hoveredDate,\n },\n helpers: {\n setSelectedDate,\n isSelected,\n setHoveredDate,\n isHovered,\n isSelectedSpan,\n isHoveredSpan,\n isSelectedStart,\n isSelectedEnd,\n isHoveredOffset,\n },\n };\n}\n\nexport function useSelectionDay({ date }: { date: DateValue }) {\n const {\n helpers: {\n setSelectedDate,\n isSelected,\n setHoveredDate,\n isSelectedSpan,\n isHoveredSpan,\n isSelectedStart,\n isSelectedEnd,\n isHovered,\n isHoveredOffset,\n isDayUnselectable,\n },\n } = useCalendarContext();\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n setSelectedDate(event, date);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = (event) => {\n switch (event.key) {\n case \"Space\":\n case \"Enter\":\n setSelectedDate(event, date);\n event.preventDefault();\n }\n };\n\n const handleMouseOver: MouseEventHandler<HTMLButtonElement> = (event) => {\n setHoveredDate(event, date);\n };\n\n const handleMouseLeave: MouseEventHandler<HTMLButtonElement> = (event) => {\n setHoveredDate(event, null);\n };\n\n const selected = isSelected(date);\n const selectedSpan = isSelectedSpan(date);\n const hoveredSpan = isHoveredSpan(date);\n const selectedStart = isSelectedStart(date);\n const selectedEnd = isSelectedEnd(date);\n const hovered = isHovered(date);\n const hoveredOffset = isHoveredOffset(date);\n\n return {\n handleClick,\n handleKeyDown,\n handleMouseOver,\n handleMouseLeave,\n status: {\n selected,\n selectedSpan,\n hoveredSpan,\n selectedStart,\n selectedEnd,\n hovered,\n hoveredOffset,\n },\n dayProps: {\n className: clsx({\n [withBaseName(\"selected\")]: selected,\n [withBaseName(\"selectedSpan\")]: selectedSpan,\n [withBaseName(\"hoveredSpan\")]: hoveredSpan,\n [withBaseName(\"selectedStart\")]: selectedStart,\n [withBaseName(\"selectedEnd\")]: selectedEnd,\n [withBaseName(\"hovered\")]: hovered,\n [withBaseName(\"hoveredOffset\")]: hoveredOffset,\n }),\n \"aria-pressed\":\n selected || selectedEnd || selectedStart || selectedSpan\n ? \"true\"\n : undefined,\n \"aria-disabled\": !!isDayUnselectable(date) ? \"true\" : undefined,\n },\n };\n}\n"],"names":[],"mappings":"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"}