@salt-ds/lab 1.0.0-alpha.45 → 1.0.0-alpha.47
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/css/salt-lab.css +26 -2
- package/dist-cjs/date-input/DateInput.js +17 -37
- package/dist-cjs/date-input/DateInput.js.map +1 -1
- package/dist-cjs/date-picker/DatePicker.js +9 -5
- package/dist-cjs/date-picker/DatePicker.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerContext.js +0 -2
- package/dist-cjs/date-picker/DatePickerContext.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerPanel.css.js +1 -1
- package/dist-cjs/date-picker/DatePickerPanel.js +29 -29
- package/dist-cjs/date-picker/DatePickerPanel.js.map +1 -1
- package/dist-cjs/divider/Divider.css.js +6 -0
- package/dist-cjs/divider/Divider.css.js.map +1 -0
- package/dist-cjs/divider/Divider.js +44 -0
- package/dist-cjs/divider/Divider.js.map +1 -0
- package/dist-cjs/index.js +2 -0
- package/dist-cjs/index.js.map +1 -1
- package/dist-es/date-input/DateInput.js +18 -38
- package/dist-es/date-input/DateInput.js.map +1 -1
- package/dist-es/date-picker/DatePicker.js +9 -5
- package/dist-es/date-picker/DatePicker.js.map +1 -1
- package/dist-es/date-picker/DatePickerContext.js +0 -2
- package/dist-es/date-picker/DatePickerContext.js.map +1 -1
- package/dist-es/date-picker/DatePickerPanel.css.js +1 -1
- package/dist-es/date-picker/DatePickerPanel.js +30 -30
- package/dist-es/date-picker/DatePickerPanel.js.map +1 -1
- package/dist-es/divider/Divider.css.js +4 -0
- package/dist-es/divider/Divider.css.js.map +1 -0
- package/dist-es/divider/Divider.js +40 -0
- package/dist-es/divider/Divider.js.map +1 -0
- package/dist-es/index.js +1 -0
- package/dist-es/index.js.map +1 -1
- package/dist-types/date-input/DateInput.d.ts +9 -1
- package/dist-types/date-picker/DatePicker.d.ts +18 -3
- package/dist-types/date-picker/DatePickerContext.d.ts +0 -2
- package/dist-types/date-picker/DatePickerPanel.d.ts +6 -2
- package/dist-types/divider/Divider.d.ts +12 -0
- package/dist-types/divider/index.d.ts +1 -0
- package/dist-types/index.d.ts +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var clsx = require('clsx');
|
|
8
|
+
var core = require('@salt-ds/core');
|
|
9
|
+
var window = require('@salt-ds/window');
|
|
10
|
+
var styles = require('@salt-ds/styles');
|
|
11
|
+
var Divider$1 = require('./Divider.css.js');
|
|
12
|
+
|
|
13
|
+
const withBaseName = core.makePrefixer("saltDivider");
|
|
14
|
+
const Divider = React.forwardRef(
|
|
15
|
+
function Divider2(props, ref) {
|
|
16
|
+
const {
|
|
17
|
+
className,
|
|
18
|
+
orientation = "horizontal",
|
|
19
|
+
variant = "primary",
|
|
20
|
+
...rest
|
|
21
|
+
} = props;
|
|
22
|
+
const targetWindow = window.useWindow();
|
|
23
|
+
styles.useComponentCssInjection({
|
|
24
|
+
testId: "salt-divider",
|
|
25
|
+
css: Divider$1,
|
|
26
|
+
window: targetWindow
|
|
27
|
+
});
|
|
28
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
29
|
+
className: clsx.clsx(
|
|
30
|
+
withBaseName(),
|
|
31
|
+
withBaseName(orientation),
|
|
32
|
+
withBaseName(variant),
|
|
33
|
+
className
|
|
34
|
+
),
|
|
35
|
+
"aria-orientation": orientation,
|
|
36
|
+
role: "separator",
|
|
37
|
+
ref,
|
|
38
|
+
...rest
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
exports.Divider = Divider;
|
|
44
|
+
//# sourceMappingURL=Divider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Divider.js","sources":["../src/divider/Divider.tsx"],"sourcesContent":["import { ComponentPropsWithoutRef, forwardRef } from \"react\";\nimport { clsx } from \"clsx\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport dividerCss from \"./Divider.css\";\n\ntype a = HTMLElementTagNameMap;\n\nexport interface DividerProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * The orientation of the divider. Defaults to `\"horizontal\"`.\n */\n orientation?: \"horizontal\" | \"vertical\";\n /**\n * The variant of the divider. Defaults to `\"primary\"`.\n */\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\n}\n\nconst withBaseName = makePrefixer(\"saltDivider\");\n\nexport const Divider = forwardRef<HTMLDivElement, DividerProps>(\n function Divider(props, ref) {\n const {\n className,\n orientation = \"horizontal\",\n variant = \"primary\",\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-divider\",\n css: dividerCss,\n window: targetWindow,\n });\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(orientation),\n withBaseName(variant),\n className\n )}\n aria-orientation={orientation}\n role=\"separator\"\n ref={ref}\n {...rest}\n />\n );\n }\n);\n"],"names":["makePrefixer","forwardRef","Divider","useWindow","useComponentCssInjection","dividerCss","jsx","clsx"],"mappings":";;;;;;;;;;;;AAoBA,MAAM,YAAA,GAAeA,kBAAa,aAAa,CAAA,CAAA;AAExC,MAAM,OAAU,GAAAC,gBAAA;AAAA,EACrB,SAASC,QAAQ,CAAA,KAAA,EAAO,GAAK,EAAA;AAC3B,IAAM,MAAA;AAAA,MACJ,SAAA;AAAA,MACA,WAAc,GAAA,YAAA;AAAA,MACd,OAAU,GAAA,SAAA;AAAA,MACP,GAAA,IAAA;AAAA,KACD,GAAA,KAAA,CAAA;AAEJ,IAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,cAAA;AAAA,MACR,GAAK,EAAAC,SAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAA,uBACGC,cAAA,CAAA,KAAA,EAAA;AAAA,MACC,SAAW,EAAAC,SAAA;AAAA,QACT,YAAa,EAAA;AAAA,QACb,aAAa,WAAW,CAAA;AAAA,QACxB,aAAa,OAAO,CAAA;AAAA,QACpB,SAAA;AAAA,OACF;AAAA,MACA,kBAAkB,EAAA,WAAA;AAAA,MAClB,IAAK,EAAA,WAAA;AAAA,MACL,GAAA;AAAA,MACC,GAAG,IAAA;AAAA,KACN,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
|
package/dist-cjs/index.js
CHANGED
|
@@ -62,6 +62,7 @@ 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');
|
|
65
66
|
var DropdownBase = require('./dropdown/DropdownBase.js');
|
|
66
67
|
var DropdownButton = require('./dropdown/DropdownButton.js');
|
|
67
68
|
var Dropdown = require('./dropdown/Dropdown.js');
|
|
@@ -201,6 +202,7 @@ exports.DateInput = DateInput.DateInput;
|
|
|
201
202
|
exports.DatePicker = DatePicker.DatePicker;
|
|
202
203
|
exports.DeckItem = DeckItem.DeckItem;
|
|
203
204
|
exports.DeckLayout = DeckLayout.DeckLayout;
|
|
205
|
+
exports.Divider = Divider.Divider;
|
|
204
206
|
exports.DropdownBase = DropdownBase.DropdownBase;
|
|
205
207
|
exports.DropdownButton = DropdownButton.DropdownButton;
|
|
206
208
|
exports.Dropdown = Dropdown.Dropdown;
|
package/dist-cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import { clsx } from 'clsx';
|
|
3
|
-
import { forwardRef, useRef, useState,
|
|
3
|
+
import { forwardRef, useRef, useState, useEffect } from 'react';
|
|
4
4
|
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
5
5
|
import { useWindow } from '@salt-ds/window';
|
|
6
6
|
import css_248z from './DateInput.css.js';
|
|
@@ -9,7 +9,7 @@ import { DateFormatter, getLocalTimeZone, CalendarDate, parseAbsoluteToLocal } f
|
|
|
9
9
|
import { useDatePickerContext } from '../date-picker/DatePickerContext.js';
|
|
10
10
|
|
|
11
11
|
const withBaseName = makePrefixer("saltDateInput");
|
|
12
|
-
const isInvalidDate = (value) => value && isNaN(new Date(value));
|
|
12
|
+
const isInvalidDate = (value) => value && isNaN(new Date(value).getDay());
|
|
13
13
|
const createDate = (date) => {
|
|
14
14
|
if (!date || isInvalidDate(date)) {
|
|
15
15
|
return null;
|
|
@@ -30,7 +30,6 @@ function getCalendarDate(inputDate) {
|
|
|
30
30
|
const isoDate = getIsoDate(date);
|
|
31
31
|
return isoDate && new CalendarDate(isoDate.year, isoDate.month, isoDate.day);
|
|
32
32
|
}
|
|
33
|
-
const getDateValidationStatus = (value) => value && isInvalidDate(value) ? "error" : void 0;
|
|
34
33
|
const defaultDateFormatter = (date) => {
|
|
35
34
|
return date ? new DateFormatter("EN-GB", {
|
|
36
35
|
day: "2-digit",
|
|
@@ -54,9 +53,10 @@ const DateInput = forwardRef(
|
|
|
54
53
|
placeholder = "dd mmm yyyy",
|
|
55
54
|
startInputRef,
|
|
56
55
|
endInputRef,
|
|
56
|
+
onSelectionChange,
|
|
57
|
+
onChange,
|
|
57
58
|
...rest
|
|
58
59
|
}, ref) {
|
|
59
|
-
var _a;
|
|
60
60
|
const wrapperRef = useRef(null);
|
|
61
61
|
const inputRef = useForkRef(ref, wrapperRef);
|
|
62
62
|
const inputStringFormatter = (input) => {
|
|
@@ -76,9 +76,7 @@ const DateInput = forwardRef(
|
|
|
76
76
|
setEndDate,
|
|
77
77
|
selectionVariant: pickerSelectionVariant,
|
|
78
78
|
openState,
|
|
79
|
-
setOpen
|
|
80
|
-
validationStatusState,
|
|
81
|
-
setValidationStatus
|
|
79
|
+
setOpen
|
|
82
80
|
} = useDatePickerContext();
|
|
83
81
|
const selectionVariant = selectionVariantProp != null ? selectionVariantProp : pickerSelectionVariant;
|
|
84
82
|
const endDateInputID = useId();
|
|
@@ -102,66 +100,48 @@ const DateInput = forwardRef(
|
|
|
102
100
|
} = useFormFieldProps();
|
|
103
101
|
const isReadOnly = readOnlyProp || formFieldReadOnly;
|
|
104
102
|
const isDisabled = disabled || formFieldDisabled;
|
|
105
|
-
const validationStatus =
|
|
103
|
+
const validationStatus = formFieldValidationStatus != null ? formFieldValidationStatus : validationStatusProp;
|
|
106
104
|
const {
|
|
107
105
|
"aria-describedby": dateInputDescribedBy,
|
|
108
106
|
"aria-labelledby": dateInputLabelledBy,
|
|
109
107
|
onBlur,
|
|
110
|
-
onChange,
|
|
111
108
|
onFocus,
|
|
112
109
|
required: dateInputPropsRequired,
|
|
113
110
|
...restDateInputProps
|
|
114
111
|
} = inputProps;
|
|
115
|
-
const validateRange = useCallback(() => {
|
|
116
|
-
if (startDate && endDate) {
|
|
117
|
-
setValidationStatus(
|
|
118
|
-
(startDate == null ? void 0 : startDate.compare(endDate)) >= 1 ? "error" : void 0
|
|
119
|
-
);
|
|
120
|
-
}
|
|
121
|
-
}, [endDate, startDate, setValidationStatus]);
|
|
122
112
|
useEffect(() => {
|
|
123
113
|
setStartDateStringValue(dateFormatter(startDate));
|
|
124
|
-
|
|
125
|
-
}, [startDate, dateFormatter, validateRange]);
|
|
114
|
+
}, [startDate, dateFormatter]);
|
|
126
115
|
useEffect(() => {
|
|
127
116
|
setEndDateStringValue(dateFormatter(endDate));
|
|
128
|
-
|
|
129
|
-
}, [endDate, dateFormatter, validateRange]);
|
|
117
|
+
}, [endDate, dateFormatter]);
|
|
130
118
|
const isRequired = formFieldRequired ? ["required", "asterisk"].includes(formFieldRequired) : dateInputPropsRequired;
|
|
131
|
-
const updateStartDate = (dateString) => {
|
|
132
|
-
var _a2, _b;
|
|
119
|
+
const updateStartDate = (event, dateString) => {
|
|
133
120
|
if (!dateString)
|
|
134
121
|
setStartDate(void 0);
|
|
135
122
|
const inputDate = inputStringFormatter(dateString);
|
|
136
123
|
const calendarDate = getCalendarDate(inputDate);
|
|
137
|
-
const emptyDateStatus = !calendarDate && inputDate ? "error" : void 0;
|
|
138
|
-
setValidationStatus(
|
|
139
|
-
(_b = (_a2 = getDateValidationStatus(dateString)) != null ? _a2 : getDateValidationStatus(endDateStringValue)) != null ? _b : emptyDateStatus
|
|
140
|
-
);
|
|
141
124
|
if (calendarDate) {
|
|
142
125
|
setStartDate(calendarDate);
|
|
143
126
|
}
|
|
127
|
+
onSelectionChange == null ? void 0 : onSelectionChange(event, calendarDate);
|
|
144
128
|
};
|
|
145
|
-
const updateEndDate = (dateString) => {
|
|
146
|
-
var _a2, _b;
|
|
129
|
+
const updateEndDate = (event, dateString) => {
|
|
147
130
|
if (!dateString)
|
|
148
131
|
setEndDate(void 0);
|
|
149
132
|
const inputDate = inputStringFormatter(dateString);
|
|
150
133
|
const calendarDate = getCalendarDate(inputDate);
|
|
151
|
-
const emptyDateStatus = !calendarDate && inputDate ? "error" : void 0;
|
|
152
|
-
setValidationStatus(
|
|
153
|
-
(_b = (_a2 = getDateValidationStatus(dateString)) != null ? _a2 : getDateValidationStatus(startDateStringValue)) != null ? _b : emptyDateStatus
|
|
154
|
-
);
|
|
155
134
|
if (calendarDate) {
|
|
156
135
|
setEndDate(calendarDate);
|
|
157
136
|
}
|
|
137
|
+
onSelectionChange == null ? void 0 : onSelectionChange(event, calendarDate);
|
|
158
138
|
};
|
|
159
139
|
const handleFocus = (event) => {
|
|
160
140
|
onFocus == null ? void 0 : onFocus(event);
|
|
161
141
|
setFocused(true);
|
|
162
142
|
};
|
|
163
143
|
const handleStartDateBlur = (event) => {
|
|
164
|
-
updateStartDate(event.target.value);
|
|
144
|
+
updateStartDate(event, event.target.value);
|
|
165
145
|
setFocused(false);
|
|
166
146
|
onBlur == null ? void 0 : onBlur(event);
|
|
167
147
|
};
|
|
@@ -171,7 +151,7 @@ const DateInput = forwardRef(
|
|
|
171
151
|
};
|
|
172
152
|
const handleStartDateKeyDown = (event) => {
|
|
173
153
|
if (event.key === "Enter") {
|
|
174
|
-
updateStartDate(startDateStringValue);
|
|
154
|
+
updateStartDate(event, startDateStringValue);
|
|
175
155
|
setOpen(false);
|
|
176
156
|
}
|
|
177
157
|
if (event.key === "Tab" && event.shiftKey && openState) {
|
|
@@ -179,7 +159,7 @@ const DateInput = forwardRef(
|
|
|
179
159
|
}
|
|
180
160
|
};
|
|
181
161
|
const handleEndDateBlur = (event) => {
|
|
182
|
-
updateEndDate(event.target.value);
|
|
162
|
+
updateEndDate(event, event.target.value);
|
|
183
163
|
setFocused(false);
|
|
184
164
|
onBlur == null ? void 0 : onBlur(event);
|
|
185
165
|
};
|
|
@@ -189,14 +169,14 @@ const DateInput = forwardRef(
|
|
|
189
169
|
};
|
|
190
170
|
const handleEndDateKeyDown = (event) => {
|
|
191
171
|
if (event.key === "Enter") {
|
|
192
|
-
updateEndDate(endDateStringValue);
|
|
172
|
+
updateEndDate(event, endDateStringValue);
|
|
193
173
|
setOpen(false);
|
|
194
174
|
}
|
|
195
175
|
};
|
|
196
176
|
const handleInputClick = (event) => {
|
|
197
|
-
var
|
|
177
|
+
var _a;
|
|
198
178
|
if (event.target === wrapperRef.current) {
|
|
199
|
-
(
|
|
179
|
+
(_a = startInputRef == null ? void 0 : startInputRef.current) == null ? void 0 : _a.focus();
|
|
200
180
|
}
|
|
201
181
|
};
|
|
202
182
|
return /* @__PURE__ */ jsxs("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateInput.js","sources":["../src/date-input/DateInput.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport {\n ChangeEvent,\n ComponentPropsWithoutRef,\n FocusEvent,\n forwardRef,\n InputHTMLAttributes,\n KeyboardEvent,\n ReactNode,\n RefObject,\n SyntheticEvent,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport dateInputCss from \"./DateInput.css\";\nimport {\n makePrefixer,\n StatusAdornment,\n useForkRef,\n useFormFieldProps,\n useId,\n} from \"@salt-ds/core\";\nimport {\n CalendarDate,\n DateFormatter,\n DateValue,\n getLocalTimeZone,\n parseAbsoluteToLocal,\n} from \"@internationalized/date\";\nimport { useDatePickerContext } from \"../date-picker/DatePickerContext\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\nconst isInvalidDate = (value: string) =>\n // @ts-ignore evaluating validity of date\n value && isNaN(new Date(value));\nconst createDate = (date: string): Date | null => {\n if (!date || isInvalidDate(date)) {\n return null;\n }\n return new Date(date);\n};\n\nconst getIsoDate = (date: Date) => {\n try {\n return parseAbsoluteToLocal(date?.toISOString());\n } catch (err) {\n return undefined;\n }\n};\n\nfunction getCalendarDate(inputDate: string) {\n const date = createDate(inputDate);\n if (!date) return undefined;\n const isoDate = getIsoDate(date);\n return isoDate && new CalendarDate(isoDate.year, isoDate.month, isoDate.day);\n}\n\nconst getDateValidationStatus = (value: string | undefined) =>\n value && isInvalidDate(value) ? \"error\" : undefined;\n\nconst defaultDateFormatter = (date: DateValue | undefined): string => {\n return date\n ? new DateFormatter(\"EN-GB\", {\n day: \"2-digit\",\n month: \"short\",\n year: \"numeric\",\n }).format(date.toDate(getLocalTimeZone()))\n : \"\";\n};\n\nexport interface DateInputProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\">,\n Pick<ComponentPropsWithoutRef<\"input\">, \"disabled\" | \"placeholder\"> {\n ariaLabel?: string;\n /**\n * The marker to use in an empty read only DateInput.\n * Use `''` to disable this feature. Defaults to '—'.\n */\n emptyReadOnlyMarker?: string;\n /**\n * End adornment component\n */\n endAdornment?: ReactNode;\n /**\n * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes) applied to the `input` elements.\n */\n inputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * If `true`, the component is read only.\n */\n readOnly?: boolean;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\";\n /**\n * Function to format the input value.\n */\n dateFormatter?: (input: DateValue | undefined) => string;\n /**\n * Reference for the startInput;\n */\n startInputRef?: RefObject<HTMLInputElement>;\n /**\n * Reference for the endInput;\n */\n endInputRef?: RefObject<HTMLInputElement>;\n /**\n * Selection variant. Defaults to single select.\n */\n selectionVariant?: \"default\" | \"range\";\n}\n\nexport const DateInput = forwardRef<HTMLDivElement, DateInputProps>(\n function DateInput(\n {\n className,\n ariaLabel,\n disabled,\n selectionVariant: selectionVariantProp,\n emptyReadOnlyMarker = \"—\",\n inputProps = {},\n endAdornment,\n readOnly: readOnlyProp,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n dateFormatter = defaultDateFormatter,\n placeholder = \"dd mmm yyyy\",\n startInputRef,\n endInputRef,\n ...rest\n },\n ref\n ) {\n const wrapperRef = useRef(null);\n const inputRef = useForkRef<HTMLDivElement>(ref, wrapperRef);\n const inputStringFormatter = (input: string): string => {\n const date = getCalendarDate(input);\n return !input || !date ? input : dateFormatter(date);\n };\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-dateInput\",\n css: dateInputCss,\n window: targetWindow,\n });\n\n const {\n startDate,\n endDate,\n setStartDate,\n setEndDate,\n selectionVariant: pickerSelectionVariant,\n openState,\n setOpen,\n validationStatusState,\n setValidationStatus,\n } = useDatePickerContext();\n\n const selectionVariant = selectionVariantProp ?? pickerSelectionVariant;\n\n const endDateInputID = useId();\n const startDateInputID = useId();\n\n const [focused, setFocused] = useState(false);\n const [startDateStringValue, setStartDateStringValue] = useState<string>(\n dateFormatter(startDate)\n );\n const [endDateStringValue, setEndDateStringValue] = useState<string>(\n dateFormatter(endDate)\n );\n\n const {\n a11yProps: {\n \"aria-describedby\": formFieldDescribedBy,\n \"aria-labelledby\": formFieldLabelledBy,\n } = {},\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n necessity: formFieldRequired,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const isDisabled = disabled || formFieldDisabled;\n\n const validationStatus =\n validationStatusState ??\n formFieldValidationStatus ??\n validationStatusProp;\n\n const {\n \"aria-describedby\": dateInputDescribedBy,\n \"aria-labelledby\": dateInputLabelledBy,\n onBlur,\n onChange,\n onFocus,\n required: dateInputPropsRequired,\n ...restDateInputProps\n } = inputProps;\n\n const validateRange = useCallback(() => {\n if (startDate && endDate) {\n setValidationStatus(\n startDate?.compare(endDate) >= 1 ? \"error\" : undefined\n );\n }\n }, [endDate, startDate, setValidationStatus]);\n\n // Effects. Update date strings when dates change\n useEffect(() => {\n setStartDateStringValue(dateFormatter(startDate));\n validateRange();\n }, [startDate, dateFormatter, validateRange]);\n\n useEffect(() => {\n setEndDateStringValue(dateFormatter(endDate));\n validateRange();\n }, [endDate, dateFormatter, validateRange]);\n\n const isRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : dateInputPropsRequired;\n const updateStartDate = (dateString: string) => {\n if (!dateString) setStartDate(undefined);\n const inputDate = inputStringFormatter(dateString);\n const calendarDate = getCalendarDate(inputDate);\n const emptyDateStatus = !calendarDate && inputDate ? \"error\" : undefined;\n setValidationStatus(\n getDateValidationStatus(dateString) ??\n getDateValidationStatus(endDateStringValue) ??\n emptyDateStatus\n );\n if (calendarDate) {\n setStartDate(calendarDate);\n }\n };\n\n const updateEndDate = (dateString: string) => {\n if (!dateString) setEndDate(undefined);\n const inputDate = inputStringFormatter(dateString);\n const calendarDate = getCalendarDate(inputDate);\n const emptyDateStatus = !calendarDate && inputDate ? \"error\" : undefined;\n setValidationStatus(\n getDateValidationStatus(dateString) ??\n getDateValidationStatus(startDateStringValue) ??\n emptyDateStatus\n );\n if (calendarDate) {\n setEndDate(calendarDate);\n }\n };\n\n // Handlers\n const handleFocus = (event: FocusEvent<HTMLInputElement>) => {\n onFocus?.(event);\n setFocused(true);\n };\n const handleStartDateBlur = (event: FocusEvent<HTMLInputElement>) => {\n updateStartDate(event.target.value);\n setFocused(false);\n onBlur?.(event);\n };\n\n const handleStartDateChange = (event: ChangeEvent<HTMLInputElement>) => {\n setStartDateStringValue(event.target.value);\n onChange?.(event);\n };\n\n const handleStartDateKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") {\n updateStartDate(startDateStringValue);\n setOpen(false);\n }\n if (event.key === \"Tab\" && event.shiftKey && openState) {\n setOpen(false);\n }\n };\n\n const handleEndDateBlur = (event: FocusEvent<HTMLInputElement>) => {\n updateEndDate(event.target.value);\n setFocused(false);\n onBlur?.(event);\n };\n const handleEndDateChange = (event: ChangeEvent<HTMLInputElement>) => {\n setEndDateStringValue(event.target.value);\n onChange?.(event);\n };\n const handleEndDateKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") {\n updateEndDate(endDateStringValue);\n setOpen(false);\n }\n };\n\n const handleInputClick = (event: SyntheticEvent<HTMLDivElement>) => {\n if (event.target === wrapperRef.current) {\n startInputRef?.current?.focus();\n }\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"focused\")]: !isDisabled && focused,\n [withBaseName(\"disabled\")]: isDisabled,\n [withBaseName(\"readOnly\")]: isReadOnly,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n },\n className\n )}\n onClick={(event) => handleInputClick(event)}\n ref={inputRef}\n {...rest}\n >\n <input\n autoComplete=\"off\"\n aria-describedby={clsx(formFieldDescribedBy, dateInputDescribedBy)}\n aria-labelledby={clsx(\n formFieldLabelledBy,\n dateInputLabelledBy,\n startDateInputID\n )}\n aria-label={clsx(\"Start date\", ariaLabel)}\n id={startDateInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={startInputRef}\n tabIndex={isDisabled ? -1 : 0}\n onBlur={handleStartDateBlur}\n onChange={handleStartDateChange}\n onKeyDown={handleStartDateKeyDown}\n onFocus={!isDisabled ? handleFocus : undefined}\n placeholder={placeholder}\n size={placeholder.length}\n value={\n isReadOnly && !startDateStringValue\n ? emptyReadOnlyMarker\n : startDateStringValue\n }\n {...restDateInputProps}\n required={isRequired}\n />\n {selectionVariant === \"range\" && (\n <>\n <span>-</span>\n <input\n autoComplete=\"off\"\n aria-describedby={clsx(\n formFieldDescribedBy,\n dateInputDescribedBy\n )}\n aria-labelledby={clsx(\n formFieldLabelledBy,\n dateInputLabelledBy,\n endDateInputID\n )}\n aria-label={clsx(\"End date\", ariaLabel)}\n id={endDateInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={endInputRef}\n tabIndex={isDisabled ? -1 : 0}\n onBlur={handleEndDateBlur}\n onChange={handleEndDateChange}\n onKeyDown={handleEndDateKeyDown}\n onFocus={!isDisabled ? handleFocus : undefined}\n placeholder={placeholder}\n size={placeholder.length}\n value={\n isReadOnly && !endDateStringValue\n ? emptyReadOnlyMarker\n : endDateStringValue\n }\n required={isRequired}\n {...restDateInputProps}\n />\n </>\n )}\n {\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!isDisabled && !isReadOnly && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment}\n </div>\n }\n <div className={withBaseName(\"activationIndicator\")} />\n </div>\n );\n }\n);\n"],"names":["DateInput","dateInputCss","_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DateInput.js","sources":["../src/date-input/DateInput.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport {\n ChangeEvent,\n ChangeEventHandler,\n ComponentPropsWithoutRef,\n FocusEvent,\n forwardRef,\n InputHTMLAttributes,\n KeyboardEvent,\n ReactNode,\n RefObject,\n SyntheticEvent,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport dateInputCss from \"./DateInput.css\";\nimport {\n makePrefixer,\n StatusAdornment,\n useForkRef,\n useFormFieldProps,\n useId,\n} from \"@salt-ds/core\";\nimport {\n CalendarDate,\n DateFormatter,\n DateValue,\n getLocalTimeZone,\n parseAbsoluteToLocal,\n} from \"@internationalized/date\";\nimport { useDatePickerContext } from \"../date-picker/DatePickerContext\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\nconst isInvalidDate = (value: string) =>\n value && isNaN(new Date(value).getDay());\nconst createDate = (date: string): Date | null => {\n if (!date || isInvalidDate(date)) {\n return null;\n }\n return new Date(date);\n};\n\nconst getIsoDate = (date: Date) => {\n try {\n return parseAbsoluteToLocal(date?.toISOString());\n } catch (err) {\n return undefined;\n }\n};\n\nfunction getCalendarDate(inputDate: string) {\n const date = createDate(inputDate);\n if (!date) return undefined;\n const isoDate = getIsoDate(date);\n return isoDate && new CalendarDate(isoDate.year, isoDate.month, isoDate.day);\n}\n\nconst defaultDateFormatter = (date: DateValue | undefined): string => {\n return date\n ? new DateFormatter(\"EN-GB\", {\n day: \"2-digit\",\n month: \"short\",\n year: \"numeric\",\n }).format(date.toDate(getLocalTimeZone()))\n : \"\";\n};\n\nexport interface DateInputProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\">,\n Pick<ComponentPropsWithoutRef<\"input\">, \"disabled\" | \"placeholder\"> {\n ariaLabel?: string;\n /**\n * The marker to use in an empty read only DateInput.\n * Use `''` to disable this feature. Defaults to '—'.\n */\n emptyReadOnlyMarker?: string;\n /**\n * End adornment component\n */\n endAdornment?: ReactNode;\n /**\n * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes) applied to the `input` elements.\n */\n inputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * If `true`, the component is read only.\n */\n readOnly?: boolean;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\";\n /**\n * Function to format the input value.\n */\n dateFormatter?: (input: DateValue | undefined) => string;\n /**\n * Reference for the startInput;\n */\n startInputRef?: RefObject<HTMLInputElement>;\n /**\n * Reference for the endInput;\n */\n endInputRef?: RefObject<HTMLInputElement>;\n /**\n * Selection variant. Defaults to single select.\n */\n selectionVariant?: \"default\" | \"range\";\n /**\n * Callback fired when the selected daate change.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate?: DateValue | { startDate?: DateValue; endDate?: DateValue }\n ) => void;\n onChange?: ChangeEventHandler<HTMLInputElement>;\n}\n\nexport const DateInput = forwardRef<HTMLDivElement, DateInputProps>(\n function DateInput(\n {\n className,\n ariaLabel,\n disabled,\n selectionVariant: selectionVariantProp,\n emptyReadOnlyMarker = \"—\",\n inputProps = {},\n endAdornment,\n readOnly: readOnlyProp,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n dateFormatter = defaultDateFormatter,\n placeholder = \"dd mmm yyyy\",\n startInputRef,\n endInputRef,\n onSelectionChange,\n onChange,\n ...rest\n },\n ref\n ) {\n const wrapperRef = useRef(null);\n const inputRef = useForkRef<HTMLDivElement>(ref, wrapperRef);\n const inputStringFormatter = (input: string): string => {\n const date = getCalendarDate(input);\n return !input || !date ? input : dateFormatter(date);\n };\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-dateInput\",\n css: dateInputCss,\n window: targetWindow,\n });\n\n const {\n startDate,\n endDate,\n setStartDate,\n setEndDate,\n selectionVariant: pickerSelectionVariant,\n openState,\n setOpen,\n } = useDatePickerContext();\n\n const selectionVariant = selectionVariantProp ?? pickerSelectionVariant;\n\n const endDateInputID = useId();\n const startDateInputID = useId();\n\n const [focused, setFocused] = useState(false);\n const [startDateStringValue, setStartDateStringValue] = useState<string>(\n dateFormatter(startDate)\n );\n const [endDateStringValue, setEndDateStringValue] = useState<string>(\n dateFormatter(endDate)\n );\n\n const {\n a11yProps: {\n \"aria-describedby\": formFieldDescribedBy,\n \"aria-labelledby\": formFieldLabelledBy,\n } = {},\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n necessity: formFieldRequired,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const isDisabled = disabled || formFieldDisabled;\n\n const validationStatus = formFieldValidationStatus ?? validationStatusProp;\n\n const {\n \"aria-describedby\": dateInputDescribedBy,\n \"aria-labelledby\": dateInputLabelledBy,\n onBlur,\n onFocus,\n required: dateInputPropsRequired,\n ...restDateInputProps\n } = inputProps;\n\n // Effects. Update date strings when dates change\n useEffect(() => {\n setStartDateStringValue(dateFormatter(startDate));\n }, [startDate, dateFormatter]);\n\n useEffect(() => {\n setEndDateStringValue(dateFormatter(endDate));\n }, [endDate, dateFormatter]);\n\n const isRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : dateInputPropsRequired;\n const updateStartDate = (event: SyntheticEvent, dateString: string) => {\n if (!dateString) setStartDate(undefined);\n const inputDate = inputStringFormatter(dateString);\n const calendarDate = getCalendarDate(inputDate);\n if (calendarDate) {\n setStartDate(calendarDate);\n }\n onSelectionChange?.(event, calendarDate);\n };\n\n const updateEndDate = (event: SyntheticEvent, dateString: string) => {\n if (!dateString) setEndDate(undefined);\n const inputDate = inputStringFormatter(dateString);\n const calendarDate = getCalendarDate(inputDate);\n if (calendarDate) {\n setEndDate(calendarDate);\n }\n onSelectionChange?.(event, calendarDate);\n };\n\n // Handlers\n const handleFocus = (event: FocusEvent<HTMLInputElement>) => {\n onFocus?.(event);\n setFocused(true);\n };\n const handleStartDateBlur = (event: FocusEvent<HTMLInputElement>) => {\n updateStartDate(event, event.target.value);\n setFocused(false);\n onBlur?.(event);\n };\n\n const handleStartDateChange = (event: ChangeEvent<HTMLInputElement>) => {\n setStartDateStringValue(event.target.value);\n onChange?.(event);\n };\n\n const handleStartDateKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") {\n updateStartDate(event, startDateStringValue);\n setOpen(false);\n }\n if (event.key === \"Tab\" && event.shiftKey && openState) {\n setOpen(false);\n }\n };\n\n const handleEndDateBlur = (event: FocusEvent<HTMLInputElement>) => {\n updateEndDate(event, event.target.value);\n setFocused(false);\n onBlur?.(event);\n };\n const handleEndDateChange = (event: ChangeEvent<HTMLInputElement>) => {\n setEndDateStringValue(event.target.value);\n onChange?.(event);\n };\n const handleEndDateKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") {\n updateEndDate(event, endDateStringValue);\n setOpen(false);\n }\n };\n\n const handleInputClick = (event: SyntheticEvent<HTMLDivElement>) => {\n if (event.target === wrapperRef.current) {\n startInputRef?.current?.focus();\n }\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"focused\")]: !isDisabled && focused,\n [withBaseName(\"disabled\")]: isDisabled,\n [withBaseName(\"readOnly\")]: isReadOnly,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n },\n className\n )}\n onClick={(event) => handleInputClick(event)}\n ref={inputRef}\n {...rest}\n >\n <input\n autoComplete=\"off\"\n aria-describedby={clsx(formFieldDescribedBy, dateInputDescribedBy)}\n aria-labelledby={clsx(\n formFieldLabelledBy,\n dateInputLabelledBy,\n startDateInputID\n )}\n aria-label={clsx(\"Start date\", ariaLabel)}\n id={startDateInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={startInputRef}\n tabIndex={isDisabled ? -1 : 0}\n onBlur={handleStartDateBlur}\n onChange={handleStartDateChange}\n onKeyDown={handleStartDateKeyDown}\n onFocus={!isDisabled ? handleFocus : undefined}\n placeholder={placeholder}\n size={placeholder.length}\n value={\n isReadOnly && !startDateStringValue\n ? emptyReadOnlyMarker\n : startDateStringValue\n }\n {...restDateInputProps}\n required={isRequired}\n />\n {selectionVariant === \"range\" && (\n <>\n <span>-</span>\n <input\n autoComplete=\"off\"\n aria-describedby={clsx(\n formFieldDescribedBy,\n dateInputDescribedBy\n )}\n aria-labelledby={clsx(\n formFieldLabelledBy,\n dateInputLabelledBy,\n endDateInputID\n )}\n aria-label={clsx(\"End date\", ariaLabel)}\n id={endDateInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={endInputRef}\n tabIndex={isDisabled ? -1 : 0}\n onBlur={handleEndDateBlur}\n onChange={handleEndDateChange}\n onKeyDown={handleEndDateKeyDown}\n onFocus={!isDisabled ? handleFocus : undefined}\n placeholder={placeholder}\n size={placeholder.length}\n value={\n isReadOnly && !endDateStringValue\n ? emptyReadOnlyMarker\n : endDateStringValue\n }\n required={isRequired}\n {...restDateInputProps}\n />\n </>\n )}\n {\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!isDisabled && !isReadOnly && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment}\n </div>\n }\n <div className={withBaseName(\"activationIndicator\")} />\n </div>\n );\n }\n);\n"],"names":["DateInput","dateInputCss"],"mappings":";;;;;;;;;;AAoCA,MAAM,YAAA,GAAe,aAAa,eAAe,CAAA,CAAA;AACjD,MAAM,aAAA,GAAgB,CAAC,KAAA,KACrB,KAAS,IAAA,KAAA,CAAM,IAAI,IAAK,CAAA,KAAK,CAAE,CAAA,MAAA,EAAQ,CAAA,CAAA;AACzC,MAAM,UAAA,GAAa,CAAC,IAA8B,KAAA;AAChD,EAAA,IAAI,CAAC,IAAA,IAAQ,aAAc,CAAA,IAAI,CAAG,EAAA;AAChC,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACA,EAAO,OAAA,IAAI,KAAK,IAAI,CAAA,CAAA;AACtB,CAAA,CAAA;AAEA,MAAM,UAAA,GAAa,CAAC,IAAe,KAAA;AACjC,EAAI,IAAA;AACF,IAAO,OAAA,oBAAA,CAAqB,6BAAM,WAAa,EAAA,CAAA,CAAA;AAAA,WACxC,GAAP,EAAA;AACA,IAAO,OAAA,KAAA,CAAA,CAAA;AAAA,GACT;AACF,CAAA,CAAA;AAEA,SAAS,gBAAgB,SAAmB,EAAA;AAC1C,EAAM,MAAA,IAAA,GAAO,WAAW,SAAS,CAAA,CAAA;AACjC,EAAA,IAAI,CAAC,IAAA;AAAM,IAAO,OAAA,KAAA,CAAA,CAAA;AAClB,EAAM,MAAA,OAAA,GAAU,WAAW,IAAI,CAAA,CAAA;AAC/B,EAAO,OAAA,OAAA,IAAW,IAAI,YAAa,CAAA,OAAA,CAAQ,MAAM,OAAQ,CAAA,KAAA,EAAO,QAAQ,GAAG,CAAA,CAAA;AAC7E,CAAA;AAEA,MAAM,oBAAA,GAAuB,CAAC,IAAwC,KAAA;AACpE,EAAO,OAAA,IAAA,GACH,IAAI,aAAA,CAAc,OAAS,EAAA;AAAA,IACzB,GAAK,EAAA,SAAA;AAAA,IACL,KAAO,EAAA,OAAA;AAAA,IACP,IAAM,EAAA,SAAA;AAAA,GACP,EAAE,MAAO,CAAA,IAAA,CAAK,OAAO,gBAAiB,EAAC,CAAC,CACzC,GAAA,EAAA,CAAA;AACN,CAAA,CAAA;AAyDO,MAAM,SAAY,GAAA,UAAA;AAAA,EACvB,SAASA,UACP,CAAA;AAAA,IACE,SAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,gBAAkB,EAAA,oBAAA;AAAA,IAClB,mBAAsB,GAAA,QAAA;AAAA,IACtB,aAAa,EAAC;AAAA,IACd,YAAA;AAAA,IACA,QAAU,EAAA,YAAA;AAAA,IACV,gBAAkB,EAAA,oBAAA;AAAA,IAClB,OAAU,GAAA,SAAA;AAAA,IACV,aAAgB,GAAA,oBAAA;AAAA,IAChB,WAAc,GAAA,aAAA;AAAA,IACd,aAAA;AAAA,IACA,WAAA;AAAA,IACA,iBAAA;AAAA,IACA,QAAA;AAAA,IACG,GAAA,IAAA;AAAA,KAEL,GACA,EAAA;AACA,IAAM,MAAA,UAAA,GAAa,OAAO,IAAI,CAAA,CAAA;AAC9B,IAAM,MAAA,QAAA,GAAW,UAA2B,CAAA,GAAA,EAAK,UAAU,CAAA,CAAA;AAC3D,IAAM,MAAA,oBAAA,GAAuB,CAAC,KAA0B,KAAA;AACtD,MAAM,MAAA,IAAA,GAAO,gBAAgB,KAAK,CAAA,CAAA;AAClC,MAAA,OAAO,CAAC,KAAS,IAAA,CAAC,IAAO,GAAA,KAAA,GAAQ,cAAc,IAAI,CAAA,CAAA;AAAA,KACrD,CAAA;AACA,IAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,IAAyB,wBAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,gBAAA;AAAA,MACR,GAAK,EAAAC,QAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAM,MAAA;AAAA,MACJ,SAAA;AAAA,MACA,OAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA,gBAAkB,EAAA,sBAAA;AAAA,MAClB,SAAA;AAAA,MACA,OAAA;AAAA,QACE,oBAAqB,EAAA,CAAA;AAEzB,IAAA,MAAM,mBAAmB,oBAAwB,IAAA,IAAA,GAAA,oBAAA,GAAA,sBAAA,CAAA;AAEjD,IAAA,MAAM,iBAAiB,KAAM,EAAA,CAAA;AAC7B,IAAA,MAAM,mBAAmB,KAAM,EAAA,CAAA;AAE/B,IAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAC5C,IAAM,MAAA,CAAC,oBAAsB,EAAA,uBAAuB,CAAI,GAAA,QAAA;AAAA,MACtD,cAAc,SAAS,CAAA;AAAA,KACzB,CAAA;AACA,IAAM,MAAA,CAAC,kBAAoB,EAAA,qBAAqB,CAAI,GAAA,QAAA;AAAA,MAClD,cAAc,OAAO,CAAA;AAAA,KACvB,CAAA;AAEA,IAAM,MAAA;AAAA,MACJ,SAAW,EAAA;AAAA,QACT,kBAAoB,EAAA,oBAAA;AAAA,QACpB,iBAAmB,EAAA,mBAAA;AAAA,UACjB,EAAC;AAAA,MACL,QAAU,EAAA,iBAAA;AAAA,MACV,QAAU,EAAA,iBAAA;AAAA,MACV,SAAW,EAAA,iBAAA;AAAA,MACX,gBAAkB,EAAA,yBAAA;AAAA,QAChB,iBAAkB,EAAA,CAAA;AAEtB,IAAA,MAAM,aAAa,YAAgB,IAAA,iBAAA,CAAA;AACnC,IAAA,MAAM,aAAa,QAAY,IAAA,iBAAA,CAAA;AAE/B,IAAA,MAAM,mBAAmB,yBAA6B,IAAA,IAAA,GAAA,yBAAA,GAAA,oBAAA,CAAA;AAEtD,IAAM,MAAA;AAAA,MACJ,kBAAoB,EAAA,oBAAA;AAAA,MACpB,iBAAmB,EAAA,mBAAA;AAAA,MACnB,MAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAU,EAAA,sBAAA;AAAA,MACP,GAAA,kBAAA;AAAA,KACD,GAAA,UAAA,CAAA;AAGJ,IAAA,SAAA,CAAU,MAAM;AACd,MAAwB,uBAAA,CAAA,aAAA,CAAc,SAAS,CAAC,CAAA,CAAA;AAAA,KAC/C,EAAA,CAAC,SAAW,EAAA,aAAa,CAAC,CAAA,CAAA;AAE7B,IAAA,SAAA,CAAU,MAAM;AACd,MAAsB,qBAAA,CAAA,aAAA,CAAc,OAAO,CAAC,CAAA,CAAA;AAAA,KAC3C,EAAA,CAAC,OAAS,EAAA,aAAa,CAAC,CAAA,CAAA;AAE3B,IAAM,MAAA,UAAA,GAAa,oBACf,CAAC,UAAA,EAAY,UAAU,CAAE,CAAA,QAAA,CAAS,iBAAiB,CACnD,GAAA,sBAAA,CAAA;AACJ,IAAM,MAAA,eAAA,GAAkB,CAAC,KAAA,EAAuB,UAAuB,KAAA;AACrE,MAAA,IAAI,CAAC,UAAA;AAAY,QAAA,YAAA,CAAa,KAAS,CAAA,CAAA,CAAA;AACvC,MAAM,MAAA,SAAA,GAAY,qBAAqB,UAAU,CAAA,CAAA;AACjD,MAAM,MAAA,YAAA,GAAe,gBAAgB,SAAS,CAAA,CAAA;AAC9C,MAAA,IAAI,YAAc,EAAA;AAChB,QAAA,YAAA,CAAa,YAAY,CAAA,CAAA;AAAA,OAC3B;AACA,MAAA,iBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,iBAAA,CAAoB,KAAO,EAAA,YAAA,CAAA,CAAA;AAAA,KAC7B,CAAA;AAEA,IAAM,MAAA,aAAA,GAAgB,CAAC,KAAA,EAAuB,UAAuB,KAAA;AACnE,MAAA,IAAI,CAAC,UAAA;AAAY,QAAA,UAAA,CAAW,KAAS,CAAA,CAAA,CAAA;AACrC,MAAM,MAAA,SAAA,GAAY,qBAAqB,UAAU,CAAA,CAAA;AACjD,MAAM,MAAA,YAAA,GAAe,gBAAgB,SAAS,CAAA,CAAA;AAC9C,MAAA,IAAI,YAAc,EAAA;AAChB,QAAA,UAAA,CAAW,YAAY,CAAA,CAAA;AAAA,OACzB;AACA,MAAA,iBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,iBAAA,CAAoB,KAAO,EAAA,YAAA,CAAA,CAAA;AAAA,KAC7B,CAAA;AAGA,IAAM,MAAA,WAAA,GAAc,CAAC,KAAwC,KAAA;AAC3D,MAAU,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,KAAA,CAAA,CAAA;AACV,MAAA,UAAA,CAAW,IAAI,CAAA,CAAA;AAAA,KACjB,CAAA;AACA,IAAM,MAAA,mBAAA,GAAsB,CAAC,KAAwC,KAAA;AACnE,MAAgB,eAAA,CAAA,KAAA,EAAO,KAAM,CAAA,MAAA,CAAO,KAAK,CAAA,CAAA;AACzC,MAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAChB,MAAS,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KACX,CAAA;AAEA,IAAM,MAAA,qBAAA,GAAwB,CAAC,KAAyC,KAAA;AACtE,MAAwB,uBAAA,CAAA,KAAA,CAAM,OAAO,KAAK,CAAA,CAAA;AAC1C,MAAW,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KACb,CAAA;AAEA,IAAM,MAAA,sBAAA,GAAyB,CAAC,KAA2C,KAAA;AACzE,MAAI,IAAA,KAAA,CAAM,QAAQ,OAAS,EAAA;AACzB,QAAA,eAAA,CAAgB,OAAO,oBAAoB,CAAA,CAAA;AAC3C,QAAA,OAAA,CAAQ,KAAK,CAAA,CAAA;AAAA,OACf;AACA,MAAA,IAAI,KAAM,CAAA,GAAA,KAAQ,KAAS,IAAA,KAAA,CAAM,YAAY,SAAW,EAAA;AACtD,QAAA,OAAA,CAAQ,KAAK,CAAA,CAAA;AAAA,OACf;AAAA,KACF,CAAA;AAEA,IAAM,MAAA,iBAAA,GAAoB,CAAC,KAAwC,KAAA;AACjE,MAAc,aAAA,CAAA,KAAA,EAAO,KAAM,CAAA,MAAA,CAAO,KAAK,CAAA,CAAA;AACvC,MAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAChB,MAAS,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KACX,CAAA;AACA,IAAM,MAAA,mBAAA,GAAsB,CAAC,KAAyC,KAAA;AACpE,MAAsB,qBAAA,CAAA,KAAA,CAAM,OAAO,KAAK,CAAA,CAAA;AACxC,MAAW,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KACb,CAAA;AACA,IAAM,MAAA,oBAAA,GAAuB,CAAC,KAA2C,KAAA;AACvE,MAAI,IAAA,KAAA,CAAM,QAAQ,OAAS,EAAA;AACzB,QAAA,aAAA,CAAc,OAAO,kBAAkB,CAAA,CAAA;AACvC,QAAA,OAAA,CAAQ,KAAK,CAAA,CAAA;AAAA,OACf;AAAA,KACF,CAAA;AAEA,IAAM,MAAA,gBAAA,GAAmB,CAAC,KAA0C,KAAA;AA5RxE,MAAA,IAAA,EAAA,CAAA;AA6RM,MAAI,IAAA,KAAA,CAAM,MAAW,KAAA,UAAA,CAAW,OAAS,EAAA;AACvC,QAAA,CAAA,EAAA,GAAA,aAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,aAAA,CAAe,YAAf,IAAwB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,EAAA,CAAA;AAAA,OAC1B;AAAA,KACF,CAAA;AAEA,IAAA,uBACG,IAAA,CAAA,KAAA,EAAA;AAAA,MACC,SAAW,EAAA,IAAA;AAAA,QACT,YAAa,EAAA;AAAA,QACb,aAAa,OAAO,CAAA;AAAA,QACpB;AAAA,UACE,CAAC,YAAA,CAAa,SAAS,CAAA,GAAI,CAAC,UAAc,IAAA,OAAA;AAAA,UAC1C,CAAC,YAAa,CAAA,UAAU,CAAI,GAAA,UAAA;AAAA,UAC5B,CAAC,YAAa,CAAA,UAAU,CAAI,GAAA,UAAA;AAAA,UAC5B,CAAC,YAAA,CAAa,gBAAoB,IAAA,IAAA,GAAA,gBAAA,GAAA,EAAE,CAAI,GAAA,gBAAA;AAAA,SAC1C;AAAA,QACA,SAAA;AAAA,OACF;AAAA,MACA,OAAS,EAAA,CAAC,KAAU,KAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,MAC1C,GAAK,EAAA,QAAA;AAAA,MACJ,GAAG,IAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,OAAA,EAAA;AAAA,UACC,YAAa,EAAA,KAAA;AAAA,UACb,kBAAA,EAAkB,IAAK,CAAA,oBAAA,EAAsB,oBAAoB,CAAA;AAAA,UACjE,iBAAiB,EAAA,IAAA;AAAA,YACf,mBAAA;AAAA,YACA,mBAAA;AAAA,YACA,gBAAA;AAAA,WACF;AAAA,UACA,YAAA,EAAY,IAAK,CAAA,YAAA,EAAc,SAAS,CAAA;AAAA,UACxC,EAAI,EAAA,gBAAA;AAAA,UACJ,SAAA,EAAW,aAAa,OAAO,CAAA;AAAA,UAC/B,QAAU,EAAA,UAAA;AAAA,UACV,QAAU,EAAA,UAAA;AAAA,UACV,GAAK,EAAA,aAAA;AAAA,UACL,QAAA,EAAU,aAAa,CAAK,CAAA,GAAA,CAAA;AAAA,UAC5B,MAAQ,EAAA,mBAAA;AAAA,UACR,QAAU,EAAA,qBAAA;AAAA,UACV,SAAW,EAAA,sBAAA;AAAA,UACX,OAAA,EAAS,CAAC,UAAA,GAAa,WAAc,GAAA,KAAA,CAAA;AAAA,UACrC,WAAA;AAAA,UACA,MAAM,WAAY,CAAA,MAAA;AAAA,UAClB,KACE,EAAA,UAAA,IAAc,CAAC,oBAAA,GACX,mBACA,GAAA,oBAAA;AAAA,UAEL,GAAG,kBAAA;AAAA,UACJ,QAAU,EAAA,UAAA;AAAA,SACZ,CAAA;AAAA,QACC,qBAAqB,OACpB,oBAAA,IAAA,CAAA,QAAA,EAAA;AAAA,UACE,QAAA,EAAA;AAAA,4BAAC,GAAA,CAAA,MAAA,EAAA;AAAA,cAAK,QAAA,EAAA,GAAA;AAAA,aAAC,CAAA;AAAA,4BACN,GAAA,CAAA,OAAA,EAAA;AAAA,cACC,YAAa,EAAA,KAAA;AAAA,cACb,kBAAkB,EAAA,IAAA;AAAA,gBAChB,oBAAA;AAAA,gBACA,oBAAA;AAAA,eACF;AAAA,cACA,iBAAiB,EAAA,IAAA;AAAA,gBACf,mBAAA;AAAA,gBACA,mBAAA;AAAA,gBACA,cAAA;AAAA,eACF;AAAA,cACA,YAAA,EAAY,IAAK,CAAA,UAAA,EAAY,SAAS,CAAA;AAAA,cACtC,EAAI,EAAA,cAAA;AAAA,cACJ,SAAA,EAAW,aAAa,OAAO,CAAA;AAAA,cAC/B,QAAU,EAAA,UAAA;AAAA,cACV,QAAU,EAAA,UAAA;AAAA,cACV,GAAK,EAAA,WAAA;AAAA,cACL,QAAA,EAAU,aAAa,CAAK,CAAA,GAAA,CAAA;AAAA,cAC5B,MAAQ,EAAA,iBAAA;AAAA,cACR,QAAU,EAAA,mBAAA;AAAA,cACV,SAAW,EAAA,oBAAA;AAAA,cACX,OAAA,EAAS,CAAC,UAAA,GAAa,WAAc,GAAA,KAAA,CAAA;AAAA,cACrC,WAAA;AAAA,cACA,MAAM,WAAY,CAAA,MAAA;AAAA,cAClB,KACE,EAAA,UAAA,IAAc,CAAC,kBAAA,GACX,mBACA,GAAA,kBAAA;AAAA,cAEN,QAAU,EAAA,UAAA;AAAA,cACT,GAAG,kBAAA;AAAA,aACN,CAAA;AAAA,WAAA;AAAA,SACF,CAAA;AAAA,wBAGC,IAAA,CAAA,KAAA,EAAA;AAAA,UAAI,SAAA,EAAW,aAAa,uBAAuB,CAAA;AAAA,UACjD,QAAA,EAAA;AAAA,YAAA,CAAC,UAAc,IAAA,CAAC,UAAc,IAAA,gBAAA,oBAC5B,GAAA,CAAA,eAAA,EAAA;AAAA,cAAgB,MAAQ,EAAA,gBAAA;AAAA,aAAkB,CAAA;AAAA,YAE5C,YAAA;AAAA,WAAA;AAAA,SACH,CAAA;AAAA,wBAED,GAAA,CAAA,KAAA,EAAA;AAAA,UAAI,SAAA,EAAW,aAAa,qBAAqB,CAAA;AAAA,SAAG,CAAA;AAAA,OAAA;AAAA,KACvD,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
|
|
@@ -29,6 +29,9 @@ const DatePicker = forwardRef(
|
|
|
29
29
|
helperText,
|
|
30
30
|
readOnly: readOnlyProp,
|
|
31
31
|
inputAriaLabel,
|
|
32
|
+
validationStatus,
|
|
33
|
+
onSelectionChange,
|
|
34
|
+
onChange,
|
|
32
35
|
...rest
|
|
33
36
|
}, ref) {
|
|
34
37
|
var _a;
|
|
@@ -50,7 +53,6 @@ const DatePicker = forwardRef(
|
|
|
50
53
|
name: "EndDate",
|
|
51
54
|
state: "endDate"
|
|
52
55
|
});
|
|
53
|
-
const [validationStatusState, setValidationStatus] = useState(void 0);
|
|
54
56
|
const [startVisibleMonth, setStartVisibleMonth] = useState(startDate != null ? startDate : today(getLocalTimeZone()));
|
|
55
57
|
const [endVisibleMonth, setEndVisibleMonth] = useState(
|
|
56
58
|
(_a = endDate != null ? endDate : startDate == null ? void 0 : startDate.add({ months: 1 })) != null ? _a : today(getLocalTimeZone()).add({ months: 1 })
|
|
@@ -87,11 +89,12 @@ const DatePicker = forwardRef(
|
|
|
87
89
|
const endInputRef = useRef(null);
|
|
88
90
|
const inputRef = useForkRef(ref, reference);
|
|
89
91
|
const floatingRef = useForkRef(panelRef, floating);
|
|
90
|
-
const handleSelect = () => {
|
|
92
|
+
const handleSelect = (event, selectedDate) => {
|
|
91
93
|
var _a2;
|
|
92
94
|
if (selectionVariant === "default" && startDate) {
|
|
93
95
|
(_a2 = startInputRef == null ? void 0 : startInputRef.current) == null ? void 0 : _a2.focus();
|
|
94
96
|
}
|
|
97
|
+
onSelectionChange == null ? void 0 : onSelectionChange(event, selectedDate);
|
|
95
98
|
};
|
|
96
99
|
const handleCalendarButton = () => {
|
|
97
100
|
var _a2;
|
|
@@ -116,14 +119,13 @@ const DatePicker = forwardRef(
|
|
|
116
119
|
) ? defaultSelectedDate.startDate : defaultSelectedDate,
|
|
117
120
|
selectionVariant,
|
|
118
121
|
context,
|
|
119
|
-
getPanelPosition
|
|
120
|
-
validationStatusState,
|
|
121
|
-
setValidationStatus
|
|
122
|
+
getPanelPosition
|
|
122
123
|
};
|
|
123
124
|
return /* @__PURE__ */ jsxs(DatePickerContext.Provider, {
|
|
124
125
|
value: datePickerContextValue,
|
|
125
126
|
children: [
|
|
126
127
|
/* @__PURE__ */ jsx(DateInput, {
|
|
128
|
+
validationStatus,
|
|
127
129
|
className: clsx(withBaseName(), className),
|
|
128
130
|
ref: inputRef,
|
|
129
131
|
...getReferenceProps(),
|
|
@@ -133,6 +135,8 @@ const DatePicker = forwardRef(
|
|
|
133
135
|
dateFormatter,
|
|
134
136
|
readOnly: isReadOnly,
|
|
135
137
|
ariaLabel: inputAriaLabel,
|
|
138
|
+
onSelectionChange,
|
|
139
|
+
onChange,
|
|
136
140
|
endAdornment: /* @__PURE__ */ jsx(Button, {
|
|
137
141
|
variant: "secondary",
|
|
138
142
|
onClick: handleCalendarButton,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePicker.js","sources":["../src/date-picker/DatePicker.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport { ComponentPropsWithoutRef, forwardRef, useRef, useState } from \"react\";\n\nimport {\n Button,\n makePrefixer,\n useControlled,\n useFloatingUI,\n useForkRef,\n useFormFieldProps,\n} from \"@salt-ds/core\";\nimport { DatePickerContext } from \"./DatePickerContext\";\nimport { DatePickerPanel } from \"./DatePickerPanel\";\nimport { flip, useDismiss, useInteractions } from \"@floating-ui/react\";\nimport { DateInput } from \"../date-input\";\nimport { DateValue, getLocalTimeZone, today } from \"@internationalized/date\";\nimport { CalendarIcon } from \"@salt-ds/icons\";\nimport {\n CalendarProps,\n isRangeOrOffsetSelectionWithStartDate,\n} from \"../calendar\";\n\nconst withBaseName = makePrefixer(\"saltDatePicker\");\n\nexport interface DatePickerProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\">,\n Pick<\n ComponentPropsWithoutRef<\"input\">,\n \"disabled\" | \"value\" | \"defaultValue\" | \"placeholder\"\n > {\n inputAriaLabel?: string;\n /**\n * Selection variant. Defaults to single select.\n */\n selectionVariant?: \"default\" | \"range\";\n /**\n * If `true`, the component will be disabled.\n */\n disabled?: boolean;\n /**\n * The selected date value. Use when the component is controlled.\n * Can be a single date or an object with start and end dates for range selection.\n */\n selectedDate?: DateValue | { startDate: DateValue; endDate: DateValue };\n /**\n * The default date value. Use when the component is not controlled.\n * Can be a single date or an object with start and end dates for range selection.\n */\n defaultSelectedDate?:\n | DateValue\n | { startDate: DateValue; endDate: DateValue };\n /**\n * Props to be passed to the Calendar component.\n */\n CalendarProps?: Partial<\n Omit<\n CalendarProps,\n | \"selectionVariant\"\n | \"selectedDate\"\n | \"defaultSelectedDate\"\n | \"onSelectedDateChange\"\n >\n >;\n /**\n * Function to format the input value.\n */\n dateFormatter?: (input: DateValue | undefined) => string;\n /**\n * Callback function triggered when open state changes.\n */\n onOpenChange?: (newOpen: boolean) => void;\n /**\n * Display or hide the component.\n */\n open?: boolean;\n /**\n * Helper text to display in the panel\n */\n helperText?: string;\n /**\n * If `true`, the component is read only.\n */\n readOnly?: boolean;\n}\n\nexport const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(\n function DatePicker(\n {\n selectionVariant = \"default\",\n disabled = false,\n placeholder = \"dd mmm yyyy\",\n selectedDate: selectedDateProp,\n defaultSelectedDate,\n dateFormatter,\n CalendarProps,\n className,\n open: openProp,\n onOpenChange: onOpenChangeProp,\n helperText,\n readOnly: readOnlyProp,\n inputAriaLabel,\n ...rest\n },\n ref\n ) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: false,\n name: \"openPanel\",\n state: \"openPanel\",\n });\n\n const [startDate, setStartDate] = useControlled({\n controlled: isRangeOrOffsetSelectionWithStartDate(selectedDateProp)\n ? selectedDateProp.startDate\n : selectedDateProp,\n default: isRangeOrOffsetSelectionWithStartDate(defaultSelectedDate)\n ? defaultSelectedDate.startDate\n : defaultSelectedDate,\n name: \"StartDate\",\n state: \"startDate\",\n });\n const [endDate, setEndDate] = useControlled({\n controlled: isRangeOrOffsetSelectionWithStartDate(selectedDateProp)\n ? selectedDateProp.endDate\n : selectedDateProp,\n default: isRangeOrOffsetSelectionWithStartDate(defaultSelectedDate)\n ? defaultSelectedDate.endDate\n : undefined,\n name: \"EndDate\",\n state: \"endDate\",\n });\n const [validationStatusState, setValidationStatus] = useState<\n \"error\" | undefined\n >(undefined);\n const [startVisibleMonth, setStartVisibleMonth] = useState<\n DateValue | undefined\n >(startDate ?? today(getLocalTimeZone()));\n const [endVisibleMonth, setEndVisibleMonth] = useState<\n DateValue | undefined\n >(\n endDate ??\n startDate?.add({ months: 1 }) ??\n today(getLocalTimeZone()).add({ months: 1 })\n );\n\n const onOpenChange = (newState: boolean) => {\n setOpen(newState);\n startInputRef?.current?.focus();\n onOpenChangeProp?.(newState);\n };\n\n const { x, y, strategy, elements, floating, reference, context } =\n useFloatingUI({\n open: open,\n onOpenChange: onOpenChange,\n placement: \"bottom-start\",\n middleware: [flip({ fallbackStrategy: \"initialPlacement\" })],\n });\n\n const { getReferenceProps, getFloatingProps } = useInteractions([\n useDismiss(context),\n ]);\n const { disabled: formFieldDisabled, readOnly: formFieldReadOnly } =\n useFormFieldProps();\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n\n const getPanelPosition = () => ({\n top: y ?? 0,\n left: x ?? 0,\n position: strategy,\n width: elements.floating?.offsetWidth,\n height: elements.floating?.offsetHeight,\n });\n\n const panelRef = useRef<HTMLDivElement>(null);\n const startInputRef = useRef<HTMLInputElement>(null);\n const endInputRef = useRef<HTMLInputElement>(null);\n const inputRef = useForkRef<HTMLDivElement>(ref, reference);\n const floatingRef = useForkRef<HTMLDivElement>(panelRef, floating);\n\n // Handlers\n const handleSelect = () => {\n if (selectionVariant === \"default\" && startDate) {\n startInputRef?.current?.focus();\n }\n };\n const handleCalendarButton = () => {\n startInputRef?.current?.focus();\n setOpen(!open);\n };\n\n // Context\n const datePickerContextValue = {\n openState: open,\n setOpen,\n disabled,\n endDate,\n setEndDate,\n defaultEndDate: isRangeOrOffsetSelectionWithStartDate(defaultSelectedDate)\n ? defaultSelectedDate.endDate\n : defaultSelectedDate,\n startDate,\n setStartDate,\n startVisibleMonth,\n setStartVisibleMonth,\n endVisibleMonth,\n setEndVisibleMonth,\n defaultStartDate: isRangeOrOffsetSelectionWithStartDate(\n defaultSelectedDate\n )\n ? defaultSelectedDate.startDate\n : defaultSelectedDate,\n selectionVariant,\n context,\n getPanelPosition,\n validationStatusState,\n setValidationStatus,\n };\n\n return (\n <DatePickerContext.Provider value={datePickerContextValue}>\n <DateInput\n className={clsx(withBaseName(), className)}\n ref={inputRef}\n {...getReferenceProps()}\n startInputRef={startInputRef}\n endInputRef={endInputRef}\n placeholder={placeholder}\n dateFormatter={dateFormatter}\n readOnly={isReadOnly}\n ariaLabel={inputAriaLabel}\n endAdornment={\n <Button\n variant=\"secondary\"\n onClick={handleCalendarButton}\n disabled={disabled || isReadOnly || formFieldDisabled}\n aria-label=\"Open Calendar\"\n >\n <CalendarIcon aria-hidden />\n </Button>\n }\n {...rest}\n />\n <DatePickerPanel\n ref={floatingRef}\n {...getFloatingProps()}\n onSelect={handleSelect}\n CalendarProps={CalendarProps}\n helperText={helperText}\n />\n </DatePickerContext.Provider>\n );\n }\n);\n"],"names":["DatePicker","CalendarProps","_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DatePicker.js","sources":["../src/date-picker/DatePicker.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport {\n ChangeEventHandler,\n ComponentPropsWithoutRef,\n forwardRef,\n SyntheticEvent,\n useRef,\n useState,\n} from \"react\";\n\nimport {\n Button,\n makePrefixer,\n useControlled,\n useFloatingUI,\n useForkRef,\n useFormFieldProps,\n} from \"@salt-ds/core\";\nimport { DatePickerContext } from \"./DatePickerContext\";\nimport { DatePickerPanel } from \"./DatePickerPanel\";\nimport { flip, useDismiss, useInteractions } from \"@floating-ui/react\";\nimport { DateInput } from \"../date-input\";\nimport { DateValue, getLocalTimeZone, today } from \"@internationalized/date\";\nimport { CalendarIcon } from \"@salt-ds/icons\";\nimport {\n CalendarProps,\n isRangeOrOffsetSelectionWithStartDate,\n} from \"../calendar\";\n\nconst withBaseName = makePrefixer(\"saltDatePicker\");\n\nexport interface DatePickerProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\">,\n Pick<\n ComponentPropsWithoutRef<\"input\">,\n \"disabled\" | \"value\" | \"defaultValue\" | \"placeholder\"\n > {\n inputAriaLabel?: string;\n /**\n * Selection variant. Defaults to single select.\n */\n selectionVariant?: \"default\" | \"range\";\n /**\n * If `true`, the component will be disabled.\n */\n disabled?: boolean;\n /**\n * The selected date value. Use when the component is controlled.\n * Can be a single date or an object with start and end dates for range selection.\n */\n selectedDate?: DateValue | { startDate?: DateValue; endDate?: DateValue };\n /**\n * The default date value. Use when the component is not controlled.\n * Can be a single date or an object with start and end dates for range selection.\n */\n defaultSelectedDate?:\n | DateValue\n | { startDate: DateValue; endDate: DateValue };\n /**\n * Props to be passed to the Calendar component.\n */\n CalendarProps?: Partial<\n Omit<\n CalendarProps,\n | \"selectionVariant\"\n | \"selectedDate\"\n | \"defaultSelectedDate\"\n | \"onSelectedDateChange\"\n >\n >;\n /**\n * Function to format the input value.\n */\n dateFormatter?: (input: DateValue | undefined) => string;\n /**\n * Callback function triggered when open state changes.\n */\n onOpenChange?: (newOpen: boolean) => void;\n /**\n * Display or hide the component.\n */\n open?: boolean;\n /**\n * Helper text to display in the panel\n */\n helperText?: string;\n /**\n * If `true`, the component is read only.\n */\n readOnly?: boolean;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Callback fired when the selected date change.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate?: DateValue | { startDate?: DateValue; endDate?: DateValue }\n ) => void;\n /**\n * Callback fired when the input value change.\n */\n onChange?: ChangeEventHandler<HTMLInputElement>;\n}\n\nexport const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(\n function DatePicker(\n {\n selectionVariant = \"default\",\n disabled = false,\n placeholder = \"dd mmm yyyy\",\n selectedDate: selectedDateProp,\n defaultSelectedDate,\n dateFormatter,\n CalendarProps,\n className,\n open: openProp,\n onOpenChange: onOpenChangeProp,\n helperText,\n readOnly: readOnlyProp,\n inputAriaLabel,\n validationStatus,\n onSelectionChange,\n onChange,\n ...rest\n },\n ref\n ) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: false,\n name: \"openPanel\",\n state: \"openPanel\",\n });\n\n const [startDate, setStartDate] = useControlled({\n controlled: isRangeOrOffsetSelectionWithStartDate(selectedDateProp)\n ? selectedDateProp.startDate\n : selectedDateProp,\n default: isRangeOrOffsetSelectionWithStartDate(defaultSelectedDate)\n ? defaultSelectedDate.startDate\n : defaultSelectedDate,\n name: \"StartDate\",\n state: \"startDate\",\n });\n const [endDate, setEndDate] = useControlled({\n controlled: isRangeOrOffsetSelectionWithStartDate(selectedDateProp)\n ? selectedDateProp.endDate\n : selectedDateProp,\n default: isRangeOrOffsetSelectionWithStartDate(defaultSelectedDate)\n ? defaultSelectedDate.endDate\n : undefined,\n name: \"EndDate\",\n state: \"endDate\",\n });\n\n const [startVisibleMonth, setStartVisibleMonth] = useState<\n DateValue | undefined\n >(startDate ?? today(getLocalTimeZone()));\n const [endVisibleMonth, setEndVisibleMonth] = useState<\n DateValue | undefined\n >(\n endDate ??\n startDate?.add({ months: 1 }) ??\n today(getLocalTimeZone()).add({ months: 1 })\n );\n\n const onOpenChange = (newState: boolean) => {\n setOpen(newState);\n startInputRef?.current?.focus();\n onOpenChangeProp?.(newState);\n };\n\n const { x, y, strategy, elements, floating, reference, context } =\n useFloatingUI({\n open: open,\n onOpenChange: onOpenChange,\n placement: \"bottom-start\",\n middleware: [flip({ fallbackStrategy: \"initialPlacement\" })],\n });\n\n const { getReferenceProps, getFloatingProps } = useInteractions([\n useDismiss(context),\n ]);\n const { disabled: formFieldDisabled, readOnly: formFieldReadOnly } =\n useFormFieldProps();\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n\n const getPanelPosition = () => ({\n top: y ?? 0,\n left: x ?? 0,\n position: strategy,\n width: elements.floating?.offsetWidth,\n height: elements.floating?.offsetHeight,\n });\n\n const panelRef = useRef<HTMLDivElement>(null);\n const startInputRef = useRef<HTMLInputElement>(null);\n const endInputRef = useRef<HTMLInputElement>(null);\n const inputRef = useForkRef<HTMLDivElement>(ref, reference);\n const floatingRef = useForkRef<HTMLDivElement>(panelRef, floating);\n\n // Handlers\n const handleSelect = (\n event: SyntheticEvent,\n selectedDate?: DateValue | { startDate?: DateValue; endDate?: DateValue }\n ) => {\n if (selectionVariant === \"default\" && startDate) {\n startInputRef?.current?.focus();\n }\n onSelectionChange?.(event, selectedDate);\n };\n const handleCalendarButton = () => {\n startInputRef?.current?.focus();\n setOpen(!open);\n };\n\n // Context\n const datePickerContextValue = {\n openState: open,\n setOpen,\n disabled,\n endDate,\n setEndDate,\n defaultEndDate: isRangeOrOffsetSelectionWithStartDate(defaultSelectedDate)\n ? defaultSelectedDate.endDate\n : defaultSelectedDate,\n startDate,\n setStartDate,\n startVisibleMonth,\n setStartVisibleMonth,\n endVisibleMonth,\n setEndVisibleMonth,\n defaultStartDate: isRangeOrOffsetSelectionWithStartDate(\n defaultSelectedDate\n )\n ? defaultSelectedDate.startDate\n : defaultSelectedDate,\n selectionVariant,\n context,\n getPanelPosition,\n };\n\n return (\n <DatePickerContext.Provider value={datePickerContextValue}>\n <DateInput\n validationStatus={validationStatus}\n className={clsx(withBaseName(), className)}\n ref={inputRef}\n {...getReferenceProps()}\n startInputRef={startInputRef}\n endInputRef={endInputRef}\n placeholder={placeholder}\n dateFormatter={dateFormatter}\n readOnly={isReadOnly}\n ariaLabel={inputAriaLabel}\n onSelectionChange={onSelectionChange}\n onChange={onChange}\n endAdornment={\n <Button\n variant=\"secondary\"\n onClick={handleCalendarButton}\n disabled={disabled || isReadOnly || formFieldDisabled}\n aria-label=\"Open Calendar\"\n >\n <CalendarIcon aria-hidden />\n </Button>\n }\n {...rest}\n />\n <DatePickerPanel\n ref={floatingRef}\n {...getFloatingProps()}\n onSelect={handleSelect}\n CalendarProps={CalendarProps}\n helperText={helperText}\n />\n </DatePickerContext.Provider>\n );\n }\n);\n"],"names":["DatePicker","CalendarProps","_a"],"mappings":"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"}
|
|
@@ -15,8 +15,6 @@ const DatePickerContext = createContext(
|
|
|
15
15
|
endDate: void 0,
|
|
16
16
|
defaultEndDate: void 0,
|
|
17
17
|
setEndDate: () => void 0,
|
|
18
|
-
validationStatusState: void 0,
|
|
19
|
-
setValidationStatus: () => void 0,
|
|
20
18
|
endVisibleMonth: void 0,
|
|
21
19
|
setEndVisibleMonth: () => void 0,
|
|
22
20
|
selectionVariant: "default",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePickerContext.js","sources":["../src/date-picker/DatePickerContext.ts"],"sourcesContent":["import { createContext, UseFloatingUIReturn } from \"@salt-ds/core\";\nimport { useContext } from \"react\";\nimport { DateValue } from \"@internationalized/date\";\n\nexport interface DatePickerContextValue\n extends Partial<Pick<UseFloatingUIReturn, \"context\">> {\n openState: boolean;\n setOpen: (newOpen: boolean) => void;\n disabled: boolean;\n //start date values\n startDate: DateValue | undefined;\n defaultStartDate: DateValue | undefined;\n setStartDate: (newStartDate: DateValue | undefined) => void;\n startVisibleMonth: DateValue | undefined;\n setStartVisibleMonth: (newStartDate: DateValue | undefined) => void;\n // end date values for range picker\n endDate: DateValue | undefined;\n endVisibleMonth: DateValue | undefined;\n setEndVisibleMonth: (newStartDate: DateValue | undefined) => void;\n defaultEndDate: DateValue | undefined;\n setEndDate: (newEndDate: DateValue | undefined) => void;\n
|
|
1
|
+
{"version":3,"file":"DatePickerContext.js","sources":["../src/date-picker/DatePickerContext.ts"],"sourcesContent":["import { createContext, UseFloatingUIReturn } from \"@salt-ds/core\";\nimport { useContext } from \"react\";\nimport { DateValue } from \"@internationalized/date\";\n\nexport interface DatePickerContextValue\n extends Partial<Pick<UseFloatingUIReturn, \"context\">> {\n openState: boolean;\n setOpen: (newOpen: boolean) => void;\n disabled: boolean;\n //start date values\n startDate: DateValue | undefined;\n defaultStartDate: DateValue | undefined;\n setStartDate: (newStartDate: DateValue | undefined) => void;\n startVisibleMonth: DateValue | undefined;\n setStartVisibleMonth: (newStartDate: DateValue | undefined) => void;\n // end date values for range picker\n endDate: DateValue | undefined;\n endVisibleMonth: DateValue | undefined;\n setEndVisibleMonth: (newStartDate: DateValue | undefined) => void;\n defaultEndDate: DateValue | undefined;\n setEndDate: (newEndDate: DateValue | undefined) => void;\n selectionVariant: \"default\" | \"range\";\n getPanelPosition: () => Record<string, unknown>;\n}\n\nexport const DatePickerContext = createContext<DatePickerContextValue>(\n \"DatePickerContext\",\n {\n openState: false,\n setOpen: () => undefined,\n disabled: false,\n startDate: undefined,\n defaultStartDate: undefined,\n setStartDate: () => undefined,\n startVisibleMonth: undefined,\n setStartVisibleMonth: () => undefined,\n endDate: undefined,\n defaultEndDate: undefined,\n setEndDate: () => undefined,\n endVisibleMonth: undefined,\n setEndVisibleMonth: () => undefined,\n selectionVariant: \"default\",\n getPanelPosition: () => ({}),\n }\n);\n\nexport function useDatePickerContext() {\n return useContext(DatePickerContext);\n}\n"],"names":[],"mappings":";;;AAyBO,MAAM,iBAAoB,GAAA,aAAA;AAAA,EAC/B,mBAAA;AAAA,EACA;AAAA,IACE,SAAW,EAAA,KAAA;AAAA,IACX,SAAS,MAAM,KAAA,CAAA;AAAA,IACf,QAAU,EAAA,KAAA;AAAA,IACV,SAAW,EAAA,KAAA,CAAA;AAAA,IACX,gBAAkB,EAAA,KAAA,CAAA;AAAA,IAClB,cAAc,MAAM,KAAA,CAAA;AAAA,IACpB,iBAAmB,EAAA,KAAA,CAAA;AAAA,IACnB,sBAAsB,MAAM,KAAA,CAAA;AAAA,IAC5B,OAAS,EAAA,KAAA,CAAA;AAAA,IACT,cAAgB,EAAA,KAAA,CAAA;AAAA,IAChB,YAAY,MAAM,KAAA,CAAA;AAAA,IAClB,eAAiB,EAAA,KAAA,CAAA;AAAA,IACjB,oBAAoB,MAAM,KAAA,CAAA;AAAA,IAC1B,gBAAkB,EAAA,SAAA;AAAA,IAClB,gBAAA,EAAkB,OAAO,EAAC,CAAA;AAAA,GAC5B;AACF,EAAA;AAEO,SAAS,oBAAuB,GAAA;AACrC,EAAA,OAAO,WAAW,iBAAiB,CAAA,CAAA;AACrC;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var css_248z = ".saltDatePickerPanel {\n background: var(--salt-container-primary-background);\n border: var(--salt-size-border) var(--salt-selectable-borderStyle-selected) var(--salt-selectable-borderColor-selected);\n overflow: hidden;\n overflow-y: auto;\n position: relative;\n z-index: var(--salt-zIndex-
|
|
1
|
+
var css_248z = ".saltDatePickerPanel {\n background: var(--salt-container-primary-background);\n border: var(--salt-size-border) var(--salt-selectable-borderStyle-selected) var(--salt-selectable-borderColor-selected);\n overflow: hidden;\n overflow-y: auto;\n position: relative;\n z-index: var(--salt-zIndex-flyover);\n box-shadow: var(--salt-overlayable-shadow-popout);\n box-sizing: border-box;\n display: flex;\n}\n.saltDatePickerPanel-container {\n width: min-content;\n gap: 1px;\n}\n\n.saltDatePickerPanel-header {\n padding: var(--salt-spacing-100);\n}\n";
|
|
2
2
|
|
|
3
3
|
export { css_248z as default };
|
|
4
4
|
//# sourceMappingURL=DatePickerPanel.css.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import { forwardRef, useState, useEffect } from 'react';
|
|
3
|
-
import { makePrefixer, useFloatingComponent, useFormFieldProps, StackLayout, FlexItem, FormFieldHelperText, FlexLayout } from '@salt-ds/core';
|
|
3
|
+
import { makePrefixer, useFloatingComponent, useFormFieldProps, StackLayout, FlexItem, FormFieldHelperText, FlexLayout, FormFieldContext } from '@salt-ds/core';
|
|
4
4
|
import { clsx } from 'clsx';
|
|
5
5
|
import { useDatePickerContext } from './DatePickerContext.js';
|
|
6
6
|
import css_248z from './DatePickerPanel.css.js';
|
|
@@ -38,23 +38,20 @@ const DatePickerPanel = forwardRef(
|
|
|
38
38
|
setOpen,
|
|
39
39
|
selectionVariant,
|
|
40
40
|
context,
|
|
41
|
-
getPanelPosition
|
|
42
|
-
setValidationStatus
|
|
41
|
+
getPanelPosition
|
|
43
42
|
} = useDatePickerContext();
|
|
44
43
|
const { a11yProps } = useFormFieldProps();
|
|
45
|
-
const setRangeDate = (
|
|
44
|
+
const setRangeDate = (event, newDate) => {
|
|
46
45
|
setStartDate(newDate.startDate);
|
|
47
46
|
setEndDate(newDate.endDate);
|
|
48
|
-
|
|
47
|
+
onSelect == null ? void 0 : onSelect(event, newDate);
|
|
49
48
|
if (newDate.startDate && newDate.endDate) {
|
|
50
49
|
setOpen(false);
|
|
51
50
|
}
|
|
52
|
-
onSelect == null ? void 0 : onSelect();
|
|
53
51
|
};
|
|
54
|
-
const setSingleDate = (
|
|
52
|
+
const setSingleDate = (event, newDate) => {
|
|
55
53
|
setStartDate(newDate);
|
|
56
|
-
|
|
57
|
-
onSelect == null ? void 0 : onSelect();
|
|
54
|
+
onSelect == null ? void 0 : onSelect(event, newDate);
|
|
58
55
|
setOpen(false);
|
|
59
56
|
};
|
|
60
57
|
const handleHoveredDateChange = (_, newHoveredDate) => {
|
|
@@ -103,27 +100,30 @@ const DatePickerPanel = forwardRef(
|
|
|
103
100
|
children: helperText
|
|
104
101
|
})
|
|
105
102
|
}),
|
|
106
|
-
/* @__PURE__ */
|
|
107
|
-
children:
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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
|
+
})
|
|
127
127
|
})
|
|
128
128
|
]
|
|
129
129
|
})
|