@proyecto-viviana/solidaria-components 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ActionBar.d.ts.map +1 -1
- package/dist/ActionBar.js +2 -11
- package/dist/ActionBar.js.map +1 -1
- package/dist/ActionBar.jsx +2 -11
- package/dist/ActionBar.jsx.map +1 -1
- package/dist/ActionGroup.d.ts.map +1 -1
- package/dist/ActionGroup.js +1 -1
- package/dist/ActionGroup.js.map +1 -1
- package/dist/ActionGroup.jsx +1 -1
- package/dist/ActionGroup.jsx.map +1 -1
- package/dist/Autocomplete.d.ts +2 -2
- package/dist/Autocomplete.d.ts.map +1 -1
- package/dist/Autocomplete.js +7 -7
- package/dist/Autocomplete.js.map +1 -1
- package/dist/Autocomplete.jsx +7 -7
- package/dist/Autocomplete.jsx.map +1 -1
- package/dist/Breadcrumbs.d.ts.map +1 -1
- package/dist/Breadcrumbs.js +15 -16
- package/dist/Breadcrumbs.js.map +1 -1
- package/dist/Breadcrumbs.jsx +19 -24
- package/dist/Breadcrumbs.jsx.map +1 -1
- package/dist/Calendar.d.ts.map +1 -1
- package/dist/Calendar.js +100 -65
- package/dist/Calendar.js.map +1 -1
- package/dist/Calendar.jsx +10 -1
- package/dist/Calendar.jsx.map +1 -1
- package/dist/Color.d.ts.map +1 -1
- package/dist/Color.js +15 -18
- package/dist/Color.js.map +1 -1
- package/dist/Color.jsx +15 -19
- package/dist/Color.jsx.map +1 -1
- package/dist/ComboBox.d.ts +4 -0
- package/dist/ComboBox.d.ts.map +1 -1
- package/dist/ComboBox.js +21 -13
- package/dist/ComboBox.js.map +1 -1
- package/dist/ComboBox.jsx +23 -13
- package/dist/ComboBox.jsx.map +1 -1
- package/dist/DateField.d.ts +11 -2
- package/dist/DateField.d.ts.map +1 -1
- package/dist/DateField2.js +237 -234
- package/dist/DateField2.js.map +1 -1
- package/dist/DateField2.jsx +134 -97
- package/dist/DateField2.jsx.map +1 -1
- package/dist/DatePicker.d.ts +42 -3
- package/dist/DatePicker.d.ts.map +1 -1
- package/dist/DatePicker.js +6 -990
- package/dist/DatePicker.jsx +6 -681
- package/dist/DatePicker2.js +1171 -0
- package/dist/DatePicker2.js.map +1 -0
- package/dist/DatePicker2.jsx +820 -0
- package/dist/DatePicker2.jsx.map +1 -0
- package/dist/DateRangePickerContext.d.ts +2 -0
- package/dist/DateRangePickerContext.d.ts.map +1 -1
- package/dist/Disclosure.d.ts.map +1 -1
- package/dist/Disclosure.js +3 -0
- package/dist/Disclosure.js.map +1 -1
- package/dist/Disclosure.jsx +1 -1
- package/dist/Disclosure.jsx.map +1 -1
- package/dist/GridList.d.ts.map +1 -1
- package/dist/GridList.js +2 -2
- package/dist/GridList.js.map +1 -1
- package/dist/GridList.jsx +2 -2
- package/dist/GridList.jsx.map +1 -1
- package/dist/ListBox.d.ts +2 -2
- package/dist/ListBox.d.ts.map +1 -1
- package/dist/ListBox.js +327 -166
- package/dist/ListBox.js.map +1 -1
- package/dist/ListBox.jsx +161 -25
- package/dist/ListBox.jsx.map +1 -1
- package/dist/Modal.d.ts.map +1 -1
- package/dist/Modal.js +7 -5
- package/dist/Modal.js.map +1 -1
- package/dist/Modal.jsx +5 -5
- package/dist/Modal.jsx.map +1 -1
- package/dist/Popover.d.ts.map +1 -1
- package/dist/Popover.js +16 -9
- package/dist/Popover.js.map +1 -1
- package/dist/Popover.jsx +25 -4
- package/dist/Popover.jsx.map +1 -1
- package/dist/RangeCalendar.d.ts.map +1 -1
- package/dist/RangeCalendar.js +182 -46
- package/dist/RangeCalendar.js.map +1 -1
- package/dist/RangeCalendar.jsx +72 -2
- package/dist/RangeCalendar.jsx.map +1 -1
- package/dist/SearchField.d.ts.map +1 -1
- package/dist/SearchField.js +26 -2
- package/dist/SearchField.js.map +1 -1
- package/dist/SearchField.jsx +26 -2
- package/dist/SearchField.jsx.map +1 -1
- package/dist/Select.d.ts +7 -0
- package/dist/Select.d.ts.map +1 -1
- package/dist/Select.js +62 -49
- package/dist/Select.js.map +1 -1
- package/dist/Select.jsx +33 -18
- package/dist/Select.jsx.map +1 -1
- package/dist/SharedElementTransition.d.ts.map +1 -1
- package/dist/SharedElementTransition.js +35 -33
- package/dist/SharedElementTransition.js.map +1 -1
- package/dist/SharedElementTransition.jsx +35 -33
- package/dist/SharedElementTransition.jsx.map +1 -1
- package/dist/StepList.d.ts.map +1 -1
- package/dist/StepList.js +2 -9
- package/dist/StepList.js.map +1 -1
- package/dist/StepList.jsx +1 -6
- package/dist/StepList.jsx.map +1 -1
- package/dist/Table.d.ts +2 -0
- package/dist/Table.d.ts.map +1 -1
- package/dist/Table.js +10 -3
- package/dist/Table.js.map +1 -1
- package/dist/Table.jsx +10 -3
- package/dist/Table.jsx.map +1 -1
- package/dist/Tabs.d.ts.map +1 -1
- package/dist/Tabs.js +3 -0
- package/dist/Tabs.js.map +1 -1
- package/dist/Tabs.jsx +1 -1
- package/dist/Tabs.jsx.map +1 -1
- package/dist/TagGroup.d.ts +3 -1
- package/dist/TagGroup.d.ts.map +1 -1
- package/dist/TagGroup.js +12 -8
- package/dist/TagGroup.js.map +1 -1
- package/dist/TagGroup.jsx +11 -8
- package/dist/TagGroup.jsx.map +1 -1
- package/dist/TextField.js +4 -1
- package/dist/TextField.js.map +1 -1
- package/dist/TextField.jsx +4 -1
- package/dist/TextField.jsx.map +1 -1
- package/dist/TimeField.d.ts +14 -50
- package/dist/TimeField.d.ts.map +1 -1
- package/dist/TimeField.js +111 -205
- package/dist/TimeField.js.map +1 -1
- package/dist/TimeField.jsx +76 -82
- package/dist/TimeField.jsx.map +1 -1
- package/dist/Tree.d.ts.map +1 -1
- package/dist/Tree.js +3 -3
- package/dist/Tree.js.map +1 -1
- package/dist/Tree.jsx +3 -3
- package/dist/Tree.jsx.map +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -6
- package/dist/index.jsx +5 -6
- package/dist/useDragAndDrop.d.ts +0 -8
- package/dist/useDragAndDrop.d.ts.map +1 -1
- package/dist/useDragAndDrop2.js +6 -2
- package/dist/useDragAndDrop2.js.map +1 -1
- package/dist/useDragAndDrop2.jsx +6 -2
- package/dist/useDragAndDrop2.jsx.map +1 -1
- package/dist/utils.d.ts +1 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +2 -2
- package/dist/utils.js.map +1 -1
- package/dist/utils.jsx +2 -2
- package/dist/utils.jsx.map +1 -1
- package/package.json +3 -9
- package/src/ActionBar.tsx +10 -12
- package/src/ActionGroup.tsx +5 -3
- package/src/Autocomplete.tsx +14 -9
- package/src/Breadcrumbs.tsx +55 -38
- package/src/Calendar.tsx +30 -1
- package/src/Color.tsx +42 -27
- package/src/ComboBox.tsx +49 -17
- package/src/DateField.tsx +285 -52
- package/src/DatePicker.tsx +345 -57
- package/src/DateRangePickerContext.tsx +2 -0
- package/src/Disclosure.tsx +4 -0
- package/src/GridList.tsx +8 -2
- package/src/ListBox.tsx +323 -21
- package/src/Modal.tsx +21 -5
- package/src/Popover.tsx +28 -7
- package/src/RangeCalendar.tsx +120 -1
- package/src/SearchField.tsx +53 -1
- package/src/Select.tsx +101 -20
- package/src/SharedElementTransition.tsx +92 -36
- package/src/StepList.tsx +0 -7
- package/src/Table.tsx +19 -4
- package/src/Tabs.tsx +1 -0
- package/src/TagGroup.tsx +26 -6
- package/src/TextField.tsx +1 -1
- package/src/TimeField.tsx +113 -196
- package/src/Tree.tsx +14 -4
- package/src/index.ts +1 -8
- package/src/useDragAndDrop.ts +8 -10
- package/src/utils.tsx +3 -3
- package/dist/DatePicker.js.map +0 -1
- package/dist/DatePicker.jsx.map +0 -1
- package/dist/HiddenTimeInput.d.ts +0 -25
- package/dist/HiddenTimeInput.d.ts.map +0 -1
- package/dist/HiddenTimeInput.js +0 -104
- package/dist/HiddenTimeInput.js.map +0 -1
- package/dist/HiddenTimeInput.jsx +0 -69
- package/dist/HiddenTimeInput.jsx.map +0 -1
- package/src/HiddenTimeInput.tsx +0 -133
package/dist/DateField2.js
CHANGED
|
@@ -1,109 +1,11 @@
|
|
|
1
1
|
import { Provider, dataAttr, useIsHydrated, useRenderProps } from "./utils.js";
|
|
2
2
|
import { TextContext } from "./Text.js";
|
|
3
3
|
import { FormContext } from "./Form.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { createDateField, createDateSegment,
|
|
4
|
+
import { className, createComponent, effect, getNextElement, insert, mergeProps, runHydrationEvents, setAttribute, setProperty, spread, style, template, use } from "solid-js/web";
|
|
5
|
+
import { Index, Show, createContext, createEffect, createMemo, createSignal, onCleanup, splitProps, useContext } from "solid-js";
|
|
6
|
+
import { createDateField, createDateSegment, createFocusRing, createHover, createVisuallyHidden, mergeProps as mergeProps$2 } from "@proyecto-viviana/solidaria";
|
|
7
7
|
import { access, createDateFieldState } from "@proyecto-viviana/solid-stately";
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* HiddenDateInput component for solidaria-components
|
|
11
|
-
*
|
|
12
|
-
* A hidden native date/datetime-local input for form submission.
|
|
13
|
-
* Renders server-side with the initial value for SSR safety.
|
|
14
|
-
*/
|
|
15
|
-
var _tmpl$$1 = /*#__PURE__*/ template(`<input tabindex=-1 aria-hidden=true>`);
|
|
16
|
-
function accessValue(value) {
|
|
17
|
-
return typeof value === "function" ? value() : value;
|
|
18
|
-
}
|
|
19
|
-
function formatDateValue(value, granularity) {
|
|
20
|
-
if (!value) return "";
|
|
21
|
-
if ("timeZone" in value) return String(value);
|
|
22
|
-
const dateValue = value;
|
|
23
|
-
const year = String(dateValue.year).padStart(4, "0");
|
|
24
|
-
const month = String(dateValue.month).padStart(2, "0");
|
|
25
|
-
const day = String(dateValue.day).padStart(2, "0");
|
|
26
|
-
if (granularity === "day") return `${year}-${month}-${day}`;
|
|
27
|
-
const hasHour = "hour" in dateValue;
|
|
28
|
-
const hour = hasHour ? String(dateValue.hour).padStart(2, "0") : "00";
|
|
29
|
-
const hasMinute = hasHour && "minute" in dateValue;
|
|
30
|
-
const minute = hasMinute ? String(dateValue.minute).padStart(2, "0") : "00";
|
|
31
|
-
if (granularity === "second" && hasMinute && "second" in dateValue) return `${year}-${month}-${day}T${hour}:${minute}:${String(dateValue.second).padStart(2, "0")}`;
|
|
32
|
-
return `${year}-${month}-${day}T${hour}:${minute}`;
|
|
33
|
-
}
|
|
34
|
-
function HiddenDateInput(props) {
|
|
35
|
-
const granularity = () => props.granularity ?? "day";
|
|
36
|
-
const hasValidationBehavior = () => props.validationBehavior != null;
|
|
37
|
-
const validationBehavior = () => props.validationBehavior;
|
|
38
|
-
const usesNativeValidation = () => validationBehavior() === "native";
|
|
39
|
-
const value = () => accessValue(props.value);
|
|
40
|
-
const minValue = () => accessValue(props.minValue);
|
|
41
|
-
const maxValue = () => accessValue(props.maxValue);
|
|
42
|
-
const hasTimeZoneValue = () => Boolean(value() && "timeZone" in value() || minValue() && "timeZone" in minValue() || maxValue() && "timeZone" in maxValue());
|
|
43
|
-
const inputType = () => usesNativeValidation() ? "text" : hasValidationBehavior() ? "hidden" : hasTimeZoneValue() ? "hidden" : granularity() === "day" ? "date" : "datetime-local";
|
|
44
|
-
const formattedValue = () => formatDateValue(value(), granularity());
|
|
45
|
-
const formattedMin = () => formatDateValue(minValue(), granularity());
|
|
46
|
-
const formattedMax = () => formatDateValue(maxValue(), granularity());
|
|
47
|
-
const [inputRef, setInputRef] = createSignal();
|
|
48
|
-
if (props.validationState) createFormValidation({
|
|
49
|
-
get validationBehavior() {
|
|
50
|
-
return validationBehavior();
|
|
51
|
-
},
|
|
52
|
-
get focus() {
|
|
53
|
-
return props.focus;
|
|
54
|
-
}
|
|
55
|
-
}, props.validationState, inputRef);
|
|
56
|
-
createEffect(() => {
|
|
57
|
-
const val = formattedValue();
|
|
58
|
-
const input = inputRef();
|
|
59
|
-
if (input && input.value !== val) input.value = val;
|
|
60
|
-
});
|
|
61
|
-
return (() => {
|
|
62
|
-
var _el$ = getNextElement(_tmpl$$1);
|
|
63
|
-
addEventListener(_el$, "change", usesNativeValidation() ? () => {} : void 0);
|
|
64
|
-
use((el) => {
|
|
65
|
-
setInputRef(el);
|
|
66
|
-
}, _el$);
|
|
67
|
-
effect((_p$) => {
|
|
68
|
-
var _v$ = inputType(), _v$2 = props.name, _v$3 = props.form, _v$4 = props.autoComplete, _v$5 = props.isDisabled, _v$6 = usesNativeValidation() && props.isRequired ? true : void 0, _v$7 = usesNativeValidation() || void 0, _v$8 = hasValidationBehavior() ? void 0 : formattedMin() || void 0, _v$9 = hasValidationBehavior() ? void 0 : formattedMax() || void 0, _v$0 = {
|
|
69
|
-
position: "absolute",
|
|
70
|
-
width: "1px",
|
|
71
|
-
height: "1px",
|
|
72
|
-
padding: "0",
|
|
73
|
-
margin: "-1px",
|
|
74
|
-
overflow: "hidden",
|
|
75
|
-
clip: "rect(0, 0, 0, 0)",
|
|
76
|
-
"white-space": "nowrap",
|
|
77
|
-
"border-width": "0"
|
|
78
|
-
};
|
|
79
|
-
_v$ !== _p$.e && setAttribute(_el$, "type", _p$.e = _v$);
|
|
80
|
-
_v$2 !== _p$.t && setAttribute(_el$, "name", _p$.t = _v$2);
|
|
81
|
-
_v$3 !== _p$.a && setAttribute(_el$, "form", _p$.a = _v$3);
|
|
82
|
-
_v$4 !== _p$.o && setAttribute(_el$, "autocomplete", _p$.o = _v$4);
|
|
83
|
-
_v$5 !== _p$.i && setProperty(_el$, "disabled", _p$.i = _v$5);
|
|
84
|
-
_v$6 !== _p$.n && setProperty(_el$, "required", _p$.n = _v$6);
|
|
85
|
-
_v$7 !== _p$.s && setProperty(_el$, "hidden", _p$.s = _v$7);
|
|
86
|
-
_v$8 !== _p$.h && setAttribute(_el$, "min", _p$.h = _v$8);
|
|
87
|
-
_v$9 !== _p$.r && setAttribute(_el$, "max", _p$.r = _v$9);
|
|
88
|
-
_p$.d = style(_el$, _v$0, _p$.d);
|
|
89
|
-
return _p$;
|
|
90
|
-
}, {
|
|
91
|
-
e: void 0,
|
|
92
|
-
t: void 0,
|
|
93
|
-
a: void 0,
|
|
94
|
-
o: void 0,
|
|
95
|
-
i: void 0,
|
|
96
|
-
n: void 0,
|
|
97
|
-
s: void 0,
|
|
98
|
-
h: void 0,
|
|
99
|
-
r: void 0,
|
|
100
|
-
d: void 0
|
|
101
|
-
});
|
|
102
|
-
effect(() => setProperty(_el$, "value", formattedValue()));
|
|
103
|
-
return _el$;
|
|
104
|
-
})();
|
|
105
|
-
}
|
|
106
|
-
//#endregion
|
|
8
|
+
import { parseDate, parseDateTime, toCalendarDate, toCalendarDateTime, toLocalTimeZone } from "@internationalized/date";
|
|
107
9
|
//#region src/DateRangePickerContext.tsx
|
|
108
10
|
const DateRangePickerContext = createContext(null);
|
|
109
11
|
function useDateRangePickerContext() {
|
|
@@ -119,7 +21,7 @@ function useDateRangePickerContext() {
|
|
|
119
21
|
* Pre-wired headless date field component with segment-based editing.
|
|
120
22
|
* Port of react-aria-components/src/DateField.tsx
|
|
121
23
|
*/
|
|
122
|
-
var _tmpl$ = /*#__PURE__*/ template(`<div class="solidaria-DateField solidaria-DateField--placeholder"aria-hidden=true>`), _tmpl$2 = /*#__PURE__*/ template(`<div>`), _tmpl$3 = /*#__PURE__*/ template(`<
|
|
24
|
+
var _tmpl$ = /*#__PURE__*/ template(`<div class="solidaria-DateField solidaria-DateField--placeholder"aria-hidden=true>`), _tmpl$2 = /*#__PURE__*/ template(`<div>`), _tmpl$3 = /*#__PURE__*/ template(`<div><input tabindex=-1 form>`), _tmpl$4 = /*#__PURE__*/ template(`<input>`), _tmpl$5 = /*#__PURE__*/ template(`<span>`);
|
|
123
25
|
const DateFieldContext = createContext(null);
|
|
124
26
|
const DateFieldStateContext = createContext(null);
|
|
125
27
|
function withFormValidationBehavior(props, formContext) {
|
|
@@ -194,8 +96,7 @@ function DateField(props) {
|
|
|
194
96
|
* Internal DateField component that renders after client mount.
|
|
195
97
|
*/
|
|
196
98
|
function DateFieldInner(props) {
|
|
197
|
-
const
|
|
198
|
-
const [local, stateProps, rest] = splitProps(withFormValidationBehavior(props, formContext), [
|
|
99
|
+
const [local, stateProps, rest] = splitProps(withFormValidationBehavior(props, props.__formContext ?? useContext(FormContext)), [
|
|
199
100
|
"children",
|
|
200
101
|
"class",
|
|
201
102
|
"style",
|
|
@@ -225,11 +126,17 @@ function DateFieldInner(props) {
|
|
|
225
126
|
"isDateUnavailable"
|
|
226
127
|
]);
|
|
227
128
|
const [fieldRef, setFieldRef] = createSignal(null);
|
|
129
|
+
const [validationInputRef, setValidationInputRef] = createSignal(null);
|
|
228
130
|
const state = createDateFieldState(stateProps);
|
|
229
131
|
const fieldAria = createDateField(() => ({
|
|
230
132
|
...rest,
|
|
133
|
+
isDisabled: access(stateProps.isDisabled),
|
|
134
|
+
isReadOnly: access(stateProps.isReadOnly),
|
|
135
|
+
isRequired: access(stateProps.isRequired),
|
|
136
|
+
validationBehavior: stateProps.validationBehavior ?? "native",
|
|
231
137
|
description: stateProps.description,
|
|
232
|
-
errorMessage: stateProps.errorMessage
|
|
138
|
+
errorMessage: stateProps.errorMessage,
|
|
139
|
+
inputRef: () => validationInputRef() ?? void 0
|
|
233
140
|
}), state, fieldRef);
|
|
234
141
|
const renderValues = createMemo(() => ({
|
|
235
142
|
isDisabled: state.isDisabled(),
|
|
@@ -242,7 +149,6 @@ function DateFieldInner(props) {
|
|
|
242
149
|
style: local.style,
|
|
243
150
|
defaultClassName: "solidaria-DateField"
|
|
244
151
|
}, renderValues);
|
|
245
|
-
const validationBehavior = () => stateProps.validationBehavior ?? formContext?.validationBehavior ?? "native";
|
|
246
152
|
const textSlots = { slots: {
|
|
247
153
|
get description() {
|
|
248
154
|
return fieldAria.descriptionProps;
|
|
@@ -255,97 +161,158 @@ function DateFieldInner(props) {
|
|
|
255
161
|
value: state,
|
|
256
162
|
get children() {
|
|
257
163
|
return createComponent(DateFieldContext.Provider, {
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
164
|
+
value: {
|
|
165
|
+
state,
|
|
166
|
+
aria: {
|
|
167
|
+
get labelProps() {
|
|
168
|
+
return fieldAria.labelProps;
|
|
169
|
+
},
|
|
170
|
+
get inputProps() {
|
|
171
|
+
return fieldAria.fieldProps;
|
|
172
|
+
},
|
|
173
|
+
get hiddenInputProps() {
|
|
174
|
+
return mergeProps$2(fieldAria.inputProps, { ref: setValidationInputRef });
|
|
175
|
+
},
|
|
176
|
+
get descriptionProps() {
|
|
177
|
+
return fieldAria.descriptionProps;
|
|
178
|
+
},
|
|
179
|
+
get errorMessageProps() {
|
|
180
|
+
return fieldAria.errorMessageProps;
|
|
266
181
|
}
|
|
267
|
-
}
|
|
182
|
+
}
|
|
268
183
|
},
|
|
269
184
|
get children() {
|
|
270
185
|
return [(() => {
|
|
271
186
|
var _el$2 = getNextElement(_tmpl$2);
|
|
272
187
|
use(setFieldRef, _el$2);
|
|
273
|
-
spread(_el$2, mergeProps(() => fieldAria.fieldProps, {
|
|
274
|
-
get ["class"]() {
|
|
275
|
-
return renderProps.class();
|
|
276
|
-
},
|
|
277
|
-
get style() {
|
|
278
|
-
return renderProps.style();
|
|
279
|
-
},
|
|
280
|
-
get ["data-disabled"]() {
|
|
281
|
-
return dataAttr(state.isDisabled());
|
|
282
|
-
},
|
|
283
|
-
get ["data-readonly"]() {
|
|
284
|
-
return dataAttr(state.isReadOnly());
|
|
285
|
-
},
|
|
286
|
-
get ["data-required"]() {
|
|
287
|
-
return dataAttr(state.isRequired());
|
|
288
|
-
},
|
|
289
|
-
get ["data-invalid"]() {
|
|
290
|
-
return dataAttr(state.isInvalid());
|
|
291
|
-
}
|
|
292
|
-
}), false, true);
|
|
293
188
|
insert(_el$2, createComponent(Provider, {
|
|
294
189
|
values: [[TextContext, textSlots]],
|
|
295
190
|
get children() {
|
|
296
191
|
return local.children;
|
|
297
192
|
}
|
|
298
193
|
}));
|
|
299
|
-
|
|
194
|
+
effect((_p$) => {
|
|
195
|
+
var _v$ = renderProps.class(), _v$2 = renderProps.style(), _v$3 = dataAttr(state.isDisabled()), _v$4 = dataAttr(state.isReadOnly()), _v$5 = dataAttr(state.isRequired()), _v$6 = dataAttr(state.isInvalid());
|
|
196
|
+
_v$ !== _p$.e && className(_el$2, _p$.e = _v$);
|
|
197
|
+
_p$.t = style(_el$2, _v$2, _p$.t);
|
|
198
|
+
_v$3 !== _p$.a && setAttribute(_el$2, "data-disabled", _p$.a = _v$3);
|
|
199
|
+
_v$4 !== _p$.o && setAttribute(_el$2, "data-readonly", _p$.o = _v$4);
|
|
200
|
+
_v$5 !== _p$.i && setAttribute(_el$2, "data-required", _p$.i = _v$5);
|
|
201
|
+
_v$6 !== _p$.n && setAttribute(_el$2, "data-invalid", _p$.n = _v$6);
|
|
202
|
+
return _p$;
|
|
203
|
+
}, {
|
|
204
|
+
e: void 0,
|
|
205
|
+
t: void 0,
|
|
206
|
+
a: void 0,
|
|
207
|
+
o: void 0,
|
|
208
|
+
i: void 0,
|
|
209
|
+
n: void 0
|
|
210
|
+
});
|
|
300
211
|
return _el$2;
|
|
301
|
-
})(), createComponent(
|
|
302
|
-
get
|
|
212
|
+
})(), createComponent(RootHiddenDateInput, {
|
|
213
|
+
get autoComplete() {
|
|
214
|
+
return rest.autoComplete;
|
|
215
|
+
},
|
|
216
|
+
get name() {
|
|
303
217
|
return rest.name;
|
|
304
218
|
},
|
|
305
|
-
get
|
|
306
|
-
return
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
},
|
|
310
|
-
get form() {
|
|
311
|
-
return rest.form;
|
|
312
|
-
},
|
|
313
|
-
get value() {
|
|
314
|
-
return state.value();
|
|
315
|
-
},
|
|
316
|
-
get autoComplete() {
|
|
317
|
-
return rest.autoComplete;
|
|
318
|
-
},
|
|
319
|
-
get isDisabled() {
|
|
320
|
-
return state.isDisabled();
|
|
321
|
-
},
|
|
322
|
-
get isRequired() {
|
|
323
|
-
return state.isRequired();
|
|
324
|
-
},
|
|
325
|
-
get validationBehavior() {
|
|
326
|
-
return validationBehavior();
|
|
327
|
-
},
|
|
328
|
-
validationState: state,
|
|
329
|
-
focus: () => {
|
|
330
|
-
fieldRef()?.querySelector("[role=\"spinbutton\"]")?.focus();
|
|
331
|
-
},
|
|
332
|
-
get minValue() {
|
|
333
|
-
return access(stateProps.minValue);
|
|
334
|
-
},
|
|
335
|
-
get maxValue() {
|
|
336
|
-
return access(stateProps.maxValue);
|
|
337
|
-
},
|
|
338
|
-
get granularity() {
|
|
339
|
-
return state.granularity;
|
|
340
|
-
}
|
|
341
|
-
});
|
|
342
|
-
}
|
|
219
|
+
get isDisabled() {
|
|
220
|
+
return state.isDisabled();
|
|
221
|
+
},
|
|
222
|
+
state
|
|
343
223
|
})];
|
|
344
224
|
}
|
|
345
225
|
});
|
|
346
226
|
}
|
|
347
227
|
});
|
|
348
228
|
}
|
|
229
|
+
const HIDDEN_DATE_SEGMENTS = [
|
|
230
|
+
"day",
|
|
231
|
+
"month",
|
|
232
|
+
"year"
|
|
233
|
+
];
|
|
234
|
+
const HIDDEN_TIME_SEGMENTS = [
|
|
235
|
+
"hour",
|
|
236
|
+
"minute",
|
|
237
|
+
"second"
|
|
238
|
+
];
|
|
239
|
+
const HIDDEN_GRANULARITY_MAP = {
|
|
240
|
+
hour: 1,
|
|
241
|
+
minute: 2,
|
|
242
|
+
second: 3
|
|
243
|
+
};
|
|
244
|
+
/**
|
|
245
|
+
* The always-rendered hidden date input at the DateField root — a faithful port
|
|
246
|
+
* of react-aria-components' HiddenDateInput (private/HiddenDateInput.mjs). It is
|
|
247
|
+
* NOT a validation input: it is a clipped, aria-hidden, tabIndex={-1} native
|
|
248
|
+
* date input that mirrors the current value for browser autofill. `form=""`
|
|
249
|
+
* detaches it from form submission (the DateInput's <Input> submits), so it
|
|
250
|
+
* never double-counts in FormData. RAC renders it unconditionally, which is why
|
|
251
|
+
* it appears as the trailing tabindex="-1" element in the focus trail.
|
|
252
|
+
*/
|
|
253
|
+
function RootHiddenDateInput(props) {
|
|
254
|
+
const { visuallyHiddenProps } = createVisuallyHidden(() => ({ style: {
|
|
255
|
+
position: "fixed",
|
|
256
|
+
top: "0",
|
|
257
|
+
left: "0"
|
|
258
|
+
} }));
|
|
259
|
+
const granularity = () => props.state.granularity ?? "day";
|
|
260
|
+
const inputStep = () => {
|
|
261
|
+
const g = granularity();
|
|
262
|
+
if (g === "second") return 1;
|
|
263
|
+
if (g === "hour") return 3600;
|
|
264
|
+
return 60;
|
|
265
|
+
};
|
|
266
|
+
const inputType = () => granularity() === "day" ? "date" : "datetime-local";
|
|
267
|
+
const dateValue = () => {
|
|
268
|
+
const value = props.state.value();
|
|
269
|
+
if (!value) return "";
|
|
270
|
+
if (granularity() === "day") return toCalendarDate(value).toString();
|
|
271
|
+
return toCalendarDateTime("timeZone" in value ? toLocalTimeZone(value) : value).toString();
|
|
272
|
+
};
|
|
273
|
+
const onChange = (event) => {
|
|
274
|
+
const targetString = (event.currentTarget.value ?? "").toString();
|
|
275
|
+
if (!targetString) return;
|
|
276
|
+
try {
|
|
277
|
+
const g = granularity();
|
|
278
|
+
const targetValue = g === "day" ? parseDate(targetString) : parseDateTime(targetString);
|
|
279
|
+
let timeSegments = HIDDEN_TIME_SEGMENTS;
|
|
280
|
+
if (HIDDEN_TIME_SEGMENTS.includes(g)) timeSegments = HIDDEN_TIME_SEGMENTS.slice(0, HIDDEN_GRANULARITY_MAP[g]);
|
|
281
|
+
const state = props.state;
|
|
282
|
+
if (typeof state.setSegment === "function") for (const type in targetValue) {
|
|
283
|
+
if (HIDDEN_DATE_SEGMENTS.includes(type)) state.setSegment(type, targetValue[type]);
|
|
284
|
+
if (timeSegments.includes(type)) state.setSegment(type, targetValue[type]);
|
|
285
|
+
}
|
|
286
|
+
state.setValue(targetValue);
|
|
287
|
+
} catch {}
|
|
288
|
+
};
|
|
289
|
+
return (() => {
|
|
290
|
+
var _el$3 = getNextElement(_tmpl$3), _el$4 = _el$3.firstChild;
|
|
291
|
+
spread(_el$3, mergeProps(() => visuallyHiddenProps(), {
|
|
292
|
+
"aria-hidden": "true",
|
|
293
|
+
"data-testid": "hidden-dateinput-container"
|
|
294
|
+
}), false, true);
|
|
295
|
+
_el$4.addEventListener("change", onChange);
|
|
296
|
+
effect((_p$) => {
|
|
297
|
+
var _v$7 = props.autoComplete, _v$8 = props.isDisabled, _v$9 = inputType(), _v$0 = props.name, _v$1 = inputStep();
|
|
298
|
+
_v$7 !== _p$.e && setAttribute(_el$4, "autocomplete", _p$.e = _v$7);
|
|
299
|
+
_v$8 !== _p$.t && setProperty(_el$4, "disabled", _p$.t = _v$8);
|
|
300
|
+
_v$9 !== _p$.a && setAttribute(_el$4, "type", _p$.a = _v$9);
|
|
301
|
+
_v$0 !== _p$.o && setAttribute(_el$4, "name", _p$.o = _v$0);
|
|
302
|
+
_v$1 !== _p$.i && setAttribute(_el$4, "step", _p$.i = _v$1);
|
|
303
|
+
return _p$;
|
|
304
|
+
}, {
|
|
305
|
+
e: void 0,
|
|
306
|
+
t: void 0,
|
|
307
|
+
a: void 0,
|
|
308
|
+
o: void 0,
|
|
309
|
+
i: void 0
|
|
310
|
+
});
|
|
311
|
+
effect(() => setProperty(_el$4, "value", dateValue()));
|
|
312
|
+
runHydrationEvents();
|
|
313
|
+
return _el$3;
|
|
314
|
+
})();
|
|
315
|
+
}
|
|
349
316
|
/**
|
|
350
317
|
* The input area containing date segments.
|
|
351
318
|
*/
|
|
@@ -363,6 +330,11 @@ function DateInput(props) {
|
|
|
363
330
|
style: props.style,
|
|
364
331
|
defaultClassName: "solidaria-DateInput"
|
|
365
332
|
}, renderValues);
|
|
333
|
+
const inputDivProps = createMemo(() => mergeProps$2(aria.inputProps, {
|
|
334
|
+
onFocusIn: () => setIsFocused(true),
|
|
335
|
+
onFocusOut: () => setIsFocused(false),
|
|
336
|
+
style: renderProps.style()
|
|
337
|
+
}));
|
|
366
338
|
createEffect(() => {
|
|
367
339
|
const element = inputRef();
|
|
368
340
|
const handler = props.onPointerDownCapture;
|
|
@@ -374,32 +346,45 @@ function DateInput(props) {
|
|
|
374
346
|
return createComponent(DateFieldContext.Provider, {
|
|
375
347
|
value: context,
|
|
376
348
|
get children() {
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
349
|
+
return [(() => {
|
|
350
|
+
var _el$5 = getNextElement(_tmpl$2);
|
|
351
|
+
use(setInputRef, _el$5);
|
|
352
|
+
spread(_el$5, mergeProps(inputDivProps, {
|
|
353
|
+
get ["class"]() {
|
|
354
|
+
return renderProps.class();
|
|
355
|
+
},
|
|
356
|
+
get ["data-disabled"]() {
|
|
357
|
+
return dataAttr(state.isDisabled());
|
|
358
|
+
},
|
|
359
|
+
get ["data-focused"]() {
|
|
360
|
+
return dataAttr(isFocused());
|
|
361
|
+
}
|
|
362
|
+
}), false, true);
|
|
363
|
+
insert(_el$5, createComponent(Index, {
|
|
364
|
+
get each() {
|
|
365
|
+
return state.segments();
|
|
366
|
+
},
|
|
367
|
+
children: (segment) => {
|
|
368
|
+
const liveSegment = new Proxy({}, {
|
|
369
|
+
get: (_t, key) => segment()[key],
|
|
370
|
+
has: (_t, key) => key in segment()
|
|
371
|
+
});
|
|
372
|
+
return props.children?.(liveSegment);
|
|
373
|
+
}
|
|
374
|
+
}));
|
|
375
|
+
runHydrationEvents();
|
|
376
|
+
return _el$5;
|
|
377
|
+
})(), createComponent(Show, {
|
|
378
|
+
get when() {
|
|
379
|
+
return aria.hiddenInputProps;
|
|
391
380
|
},
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
children: (segment) => props.children?.(segment)
|
|
400
|
-
}));
|
|
401
|
-
runHydrationEvents();
|
|
402
|
-
return _el$3;
|
|
381
|
+
children: (hiddenInputProps) => (() => {
|
|
382
|
+
var _el$6 = getNextElement(_tmpl$4);
|
|
383
|
+
spread(_el$6, mergeProps(() => hiddenInputProps()), false, false);
|
|
384
|
+
runHydrationEvents();
|
|
385
|
+
return _el$6;
|
|
386
|
+
})()
|
|
387
|
+
})];
|
|
403
388
|
}
|
|
404
389
|
});
|
|
405
390
|
}
|
|
@@ -409,13 +394,21 @@ function DateInput(props) {
|
|
|
409
394
|
function DateSegment(props) {
|
|
410
395
|
const { state } = useDateFieldContext();
|
|
411
396
|
const [segmentRef, setSegmentRef] = createSignal(null);
|
|
412
|
-
const segmentAria = createDateSegment({
|
|
397
|
+
const segmentAria = createDateSegment({ get segment() {
|
|
398
|
+
return props.segment;
|
|
399
|
+
} }, state, segmentRef);
|
|
400
|
+
const { isFocused, isFocusVisible, focusProps } = createFocusRing();
|
|
401
|
+
const { isHovered, hoverProps } = createHover(() => ({ isDisabled: state.isDisabled() || props.segment.type === "literal" }));
|
|
413
402
|
const renderValues = createMemo(() => ({
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
403
|
+
isHovered: isHovered(),
|
|
404
|
+
isFocused: isFocused(),
|
|
405
|
+
isFocusVisible: isFocusVisible(),
|
|
406
|
+
isPlaceholder: props.segment.isPlaceholder,
|
|
407
|
+
isReadOnly: state.isReadOnly(),
|
|
408
|
+
isDisabled: state.isDisabled(),
|
|
409
|
+
isInvalid: state.isInvalid(),
|
|
417
410
|
type: props.segment.type,
|
|
418
|
-
text:
|
|
411
|
+
text: props.segment.text
|
|
419
412
|
}));
|
|
420
413
|
const renderProps = useRenderProps({
|
|
421
414
|
get children() {
|
|
@@ -427,73 +420,83 @@ function DateSegment(props) {
|
|
|
427
420
|
}, renderValues);
|
|
428
421
|
const getChildren = () => {
|
|
429
422
|
if (typeof props.children === "function") return renderProps.renderChildren();
|
|
430
|
-
return
|
|
423
|
+
return props.segment.text;
|
|
431
424
|
};
|
|
425
|
+
const segmentElementProps = createMemo(() => mergeProps$2(segmentAria.segmentProps, focusProps, hoverProps, { style: renderProps.style() }));
|
|
432
426
|
return (() => {
|
|
433
|
-
var _el$
|
|
434
|
-
use(setSegmentRef, _el$
|
|
435
|
-
spread(_el$
|
|
427
|
+
var _el$7 = getNextElement(_tmpl$5);
|
|
428
|
+
use(setSegmentRef, _el$7);
|
|
429
|
+
spread(_el$7, mergeProps(segmentElementProps, {
|
|
436
430
|
get ["class"]() {
|
|
437
431
|
return renderProps.class();
|
|
438
432
|
},
|
|
439
|
-
get
|
|
440
|
-
return
|
|
433
|
+
get ["data-placeholder"]() {
|
|
434
|
+
return props.segment.isPlaceholder || void 0;
|
|
441
435
|
},
|
|
442
|
-
get ["data-
|
|
443
|
-
return
|
|
436
|
+
get ["data-invalid"]() {
|
|
437
|
+
return state.isInvalid() || void 0;
|
|
444
438
|
},
|
|
445
|
-
get ["data-
|
|
446
|
-
return
|
|
439
|
+
get ["data-readonly"]() {
|
|
440
|
+
return state.isReadOnly() || void 0;
|
|
447
441
|
},
|
|
448
|
-
get ["data-
|
|
449
|
-
return
|
|
442
|
+
get ["data-disabled"]() {
|
|
443
|
+
return state.isDisabled() || void 0;
|
|
450
444
|
},
|
|
451
445
|
get ["data-type"]() {
|
|
452
446
|
return props.segment.type;
|
|
447
|
+
},
|
|
448
|
+
get ["data-hovered"]() {
|
|
449
|
+
return isHovered() || void 0;
|
|
450
|
+
},
|
|
451
|
+
get ["data-focused"]() {
|
|
452
|
+
return isFocused() || void 0;
|
|
453
|
+
},
|
|
454
|
+
get ["data-focus-visible"]() {
|
|
455
|
+
return isFocusVisible() || void 0;
|
|
453
456
|
}
|
|
454
457
|
}), false, true);
|
|
455
|
-
insert(_el$
|
|
458
|
+
insert(_el$7, getChildren);
|
|
456
459
|
runHydrationEvents();
|
|
457
|
-
return _el$
|
|
460
|
+
return _el$7;
|
|
458
461
|
})();
|
|
459
462
|
}
|
|
460
463
|
function DateFieldLabel(props) {
|
|
461
464
|
const { aria } = useDateFieldContext();
|
|
462
465
|
return (() => {
|
|
463
|
-
var _el$
|
|
464
|
-
spread(_el$
|
|
466
|
+
var _el$8 = getNextElement(_tmpl$5);
|
|
467
|
+
spread(_el$8, mergeProps(() => aria.labelProps, { get ["class"]() {
|
|
465
468
|
return props.class;
|
|
466
469
|
} }), false, true);
|
|
467
|
-
insert(_el$
|
|
470
|
+
insert(_el$8, () => props.children);
|
|
468
471
|
runHydrationEvents();
|
|
469
|
-
return _el$
|
|
472
|
+
return _el$8;
|
|
470
473
|
})();
|
|
471
474
|
}
|
|
472
475
|
function DateFieldDescription(props) {
|
|
473
476
|
const { aria } = useDateFieldContext();
|
|
474
477
|
return (() => {
|
|
475
|
-
var _el$
|
|
476
|
-
spread(_el$
|
|
478
|
+
var _el$9 = getNextElement(_tmpl$5);
|
|
479
|
+
spread(_el$9, mergeProps(() => aria.descriptionProps, { get ["class"]() {
|
|
477
480
|
return props.class;
|
|
478
481
|
} }), false, true);
|
|
479
|
-
insert(_el$
|
|
482
|
+
insert(_el$9, () => props.children);
|
|
480
483
|
runHydrationEvents();
|
|
481
|
-
return _el$
|
|
484
|
+
return _el$9;
|
|
482
485
|
})();
|
|
483
486
|
}
|
|
484
487
|
function DateFieldErrorMessage(props) {
|
|
485
488
|
const { aria } = useDateFieldContext();
|
|
486
489
|
return (() => {
|
|
487
|
-
var _el$
|
|
488
|
-
spread(_el$
|
|
490
|
+
var _el$0 = getNextElement(_tmpl$5);
|
|
491
|
+
spread(_el$0, mergeProps(() => aria.errorMessageProps, { get ["class"]() {
|
|
489
492
|
return props.class;
|
|
490
493
|
} }), false, true);
|
|
491
|
-
insert(_el$
|
|
494
|
+
insert(_el$0, () => props.children);
|
|
492
495
|
runHydrationEvents();
|
|
493
|
-
return _el$
|
|
496
|
+
return _el$0;
|
|
494
497
|
})();
|
|
495
498
|
}
|
|
496
499
|
//#endregion
|
|
497
|
-
export { DateFieldLabel as a, DateSegment as c, useDateRangePickerContext as d,
|
|
500
|
+
export { DateFieldLabel as a, DateSegment as c, useDateRangePickerContext as d, DateFieldErrorMessage as i, useDateFieldContext as l, DateFieldContext as n, DateFieldStateContext as o, DateFieldDescription as r, DateInput as s, DateField as t, DateRangePickerContext as u };
|
|
498
501
|
|
|
499
502
|
//# sourceMappingURL=DateField2.js.map
|