@react-spectrum/autocomplete 3.0.0-alpha.31 → 3.0.0-alpha.33
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/MobileSearchAutocomplete.main.js +86 -86
- package/dist/MobileSearchAutocomplete.main.js.map +1 -1
- package/dist/MobileSearchAutocomplete.mjs +87 -87
- package/dist/MobileSearchAutocomplete.module.js +86 -86
- package/dist/MobileSearchAutocomplete.module.js.map +1 -1
- package/dist/SearchAutocomplete.main.js +37 -36
- package/dist/SearchAutocomplete.main.js.map +1 -1
- package/dist/SearchAutocomplete.mjs +38 -37
- package/dist/SearchAutocomplete.module.js +37 -36
- package/dist/SearchAutocomplete.module.js.map +1 -1
- package/dist/ar-AE.mjs +1 -1
- package/dist/bg-BG.mjs +1 -1
- package/dist/cs-CZ.mjs +1 -1
- package/dist/da-DK.mjs +1 -1
- package/dist/de-DE.mjs +1 -1
- package/dist/el-GR.mjs +1 -1
- package/dist/en-US.mjs +1 -1
- package/dist/es-ES.mjs +1 -1
- package/dist/et-EE.mjs +1 -1
- package/dist/fi-FI.mjs +1 -1
- package/dist/fr-FR.mjs +1 -1
- package/dist/he-IL.mjs +1 -1
- package/dist/hr-HR.mjs +1 -1
- package/dist/hu-HU.mjs +1 -1
- package/dist/inputgroup_vars_css.mjs +1 -1
- package/dist/intlStrings.mjs +1 -1
- package/dist/it-IT.mjs +1 -1
- package/dist/ja-JP.mjs +1 -1
- package/dist/ko-KR.mjs +1 -1
- package/dist/lt-LT.mjs +1 -1
- package/dist/lv-LV.mjs +1 -1
- package/dist/nb-NO.mjs +1 -1
- package/dist/nl-NL.mjs +1 -1
- package/dist/pl-PL.mjs +1 -1
- package/dist/pt-BR.mjs +1 -1
- package/dist/pt-PT.mjs +1 -1
- package/dist/ro-RO.mjs +1 -1
- package/dist/ru-RU.mjs +1 -1
- package/dist/search_vars_css.mjs +1 -1
- package/dist/searchautocomplete_css.mjs +1 -1
- package/dist/sk-SK.mjs +1 -1
- package/dist/sl-SI.mjs +1 -1
- package/dist/sr-SP.mjs +1 -1
- package/dist/sv-SE.mjs +1 -1
- package/dist/textfield_vars_css.mjs +1 -1
- package/dist/tr-TR.mjs +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/uk-UA.mjs +1 -1
- package/dist/{vars.5653edea.css → vars.f9e74788.css} +2 -1
- package/dist/vars.f9e74788.css.map +1 -0
- package/dist/zh-CN.mjs +1 -1
- package/dist/zh-TW.mjs +1 -1
- package/package.json +28 -28
- package/src/MobileSearchAutocomplete.tsx +2 -2
- package/src/SearchAutocomplete.tsx +7 -6
- package/dist/vars.5653edea.css.map +0 -1
|
@@ -5,7 +5,7 @@ import "./vars.31879241.css";
|
|
|
5
5
|
import $9yRST$search_vars_cssmodulejs from "./search_vars_css.module.js";
|
|
6
6
|
import "./vars.936671cd.css";
|
|
7
7
|
import $9yRST$inputgroup_vars_cssmodulejs from "./inputgroup_vars_css.module.js";
|
|
8
|
-
import "./vars.
|
|
8
|
+
import "./vars.f9e74788.css";
|
|
9
9
|
import $9yRST$textfield_vars_cssmodulejs from "./textfield_vars_css.module.js";
|
|
10
10
|
import $9yRST$spectrumiconsuiAlertMedium from "@spectrum-icons/ui/AlertMedium";
|
|
11
11
|
import $9yRST$spectrumiconsuiCheckmarkMedium from "@spectrum-icons/ui/CheckmarkMedium";
|
|
@@ -77,7 +77,7 @@ function $c940f54e16bafef5$var$_MobileSearchAutocomplete(props, ref) {
|
|
|
77
77
|
props = (0, $9yRST$useProviderProps)(props);
|
|
78
78
|
let { isQuiet: isQuiet, isDisabled: isDisabled, isRequired: isRequired, validationBehavior: validationBehavior, validate: validate, name: name, isReadOnly: isReadOnly, onSubmit: onSubmit = ()=>{} } = props;
|
|
79
79
|
let { contains: contains } = (0, $9yRST$useFilter)({
|
|
80
|
-
sensitivity:
|
|
80
|
+
sensitivity: 'base'
|
|
81
81
|
});
|
|
82
82
|
let state = (0, $9yRST$useComboBoxState)({
|
|
83
83
|
...props,
|
|
@@ -98,7 +98,7 @@ function $c940f54e16bafef5$var$_MobileSearchAutocomplete(props, ref) {
|
|
|
98
98
|
let buttonRef = (0, $9yRST$useRef)(null);
|
|
99
99
|
let domRef = (0, $9yRST$useFocusableRef)(ref, buttonRef);
|
|
100
100
|
let { triggerProps: triggerProps, overlayProps: overlayProps } = (0, $9yRST$useOverlayTrigger)({
|
|
101
|
-
type:
|
|
101
|
+
type: 'listbox'
|
|
102
102
|
}, state, buttonRef);
|
|
103
103
|
let inputRef = (0, $9yRST$useRef)(null);
|
|
104
104
|
(0, $9yRST$useFormValidation)({
|
|
@@ -109,12 +109,12 @@ function $c940f54e16bafef5$var$_MobileSearchAutocomplete(props, ref) {
|
|
|
109
109
|
}
|
|
110
110
|
}, state, inputRef);
|
|
111
111
|
let { isInvalid: isInvalid, validationErrors: validationErrors, validationDetails: validationDetails } = state.displayValidation;
|
|
112
|
-
let validationState = props.validationState || (isInvalid ?
|
|
112
|
+
let validationState = props.validationState || (isInvalid ? 'invalid' : undefined);
|
|
113
113
|
var _props_errorMessage;
|
|
114
|
-
let errorMessage = (_props_errorMessage = props.errorMessage) !== null && _props_errorMessage !== void 0 ? _props_errorMessage : validationErrors.join(
|
|
114
|
+
let errorMessage = (_props_errorMessage = props.errorMessage) !== null && _props_errorMessage !== void 0 ? _props_errorMessage : validationErrors.join(' ');
|
|
115
115
|
let { labelProps: labelProps, fieldProps: fieldProps, descriptionProps: descriptionProps, errorMessageProps: errorMessageProps } = (0, $9yRST$useField)({
|
|
116
116
|
...props,
|
|
117
|
-
labelElementType:
|
|
117
|
+
labelElementType: 'span',
|
|
118
118
|
isInvalid: isInvalid,
|
|
119
119
|
errorMessage: errorMessage
|
|
120
120
|
});
|
|
@@ -122,18 +122,18 @@ function $c940f54e16bafef5$var$_MobileSearchAutocomplete(props, ref) {
|
|
|
122
122
|
labelProps.onClick = ()=>{
|
|
123
123
|
if (!props.isDisabled && buttonRef.current) {
|
|
124
124
|
buttonRef.current.focus();
|
|
125
|
-
(0, $9yRST$setInteractionModality)(
|
|
125
|
+
(0, $9yRST$setInteractionModality)('keyboard');
|
|
126
126
|
}
|
|
127
127
|
};
|
|
128
128
|
let inputProps = {
|
|
129
|
-
type:
|
|
129
|
+
type: 'hidden',
|
|
130
130
|
name: name,
|
|
131
131
|
value: state.inputValue
|
|
132
132
|
};
|
|
133
|
-
if (validationBehavior ===
|
|
133
|
+
if (validationBehavior === 'native') {
|
|
134
134
|
// Use a hidden <input type="text"> rather than <input type="hidden">
|
|
135
135
|
// so that an empty value blocks HTML form submission when the field is required.
|
|
136
|
-
inputProps.type =
|
|
136
|
+
inputProps.type = 'text';
|
|
137
137
|
inputProps.hidden = true;
|
|
138
138
|
inputProps.required = isRequired;
|
|
139
139
|
// Ignore react warning.
|
|
@@ -163,9 +163,9 @@ function $c940f54e16bafef5$var$_MobileSearchAutocomplete(props, ref) {
|
|
|
163
163
|
isPlaceholder: !state.inputValue,
|
|
164
164
|
validationState: validationState,
|
|
165
165
|
inputValue: state.inputValue,
|
|
166
|
-
clearInput: ()=>state.setInputValue(
|
|
167
|
-
onPress: ()=>!isReadOnly && state.open(null,
|
|
168
|
-
}, state.inputValue || props.placeholder ||
|
|
166
|
+
clearInput: ()=>state.setInputValue(''),
|
|
167
|
+
onPress: ()=>!isReadOnly && state.open(null, 'manual')
|
|
168
|
+
}, state.inputValue || props.placeholder || '')), /*#__PURE__*/ (0, $9yRST$react).createElement("input", {
|
|
169
169
|
...inputProps,
|
|
170
170
|
ref: inputRef
|
|
171
171
|
}), /*#__PURE__*/ (0, $9yRST$react).createElement((0, $9yRST$Tray), {
|
|
@@ -187,16 +187,16 @@ const $c940f54e16bafef5$var$SearchAutocompleteButton = /*#__PURE__*/ (0, $9yRST$
|
|
|
187
187
|
"data-testid": "searchicon"
|
|
188
188
|
});
|
|
189
189
|
let { icon: icon = searchIcon, isQuiet: isQuiet, isDisabled: isDisabled, isReadOnly: isReadOnly, isPlaceholder: isPlaceholder, validationState: validationState, inputValue: inputValue, clearInput: clearInput, children: children, style: style, className: className } = props;
|
|
190
|
-
let stringFormatter = (0, $9yRST$useLocalizedStringFormatter)((0, ($parcel$interopDefault($9yRST$intlStringsmodulejs))),
|
|
190
|
+
let stringFormatter = (0, $9yRST$useLocalizedStringFormatter)((0, ($parcel$interopDefault($9yRST$intlStringsmodulejs))), '@react-spectrum/autocomplete');
|
|
191
191
|
let valueId = (0, $9yRST$useId)();
|
|
192
192
|
let invalidId = (0, $9yRST$useId)();
|
|
193
|
-
let validationIcon = validationState ===
|
|
193
|
+
let validationIcon = validationState === 'invalid' ? /*#__PURE__*/ (0, $9yRST$react).createElement((0, $9yRST$spectrumiconsuiAlertMedium), {
|
|
194
194
|
id: invalidId,
|
|
195
|
-
"aria-label": stringFormatter.format(
|
|
195
|
+
"aria-label": stringFormatter.format('invalid')
|
|
196
196
|
}) : /*#__PURE__*/ (0, $9yRST$react).createElement((0, $9yRST$spectrumiconsuiCheckmarkMedium), null);
|
|
197
197
|
if (icon) icon = /*#__PURE__*/ (0, $9yRST$react).cloneElement(icon, {
|
|
198
|
-
UNSAFE_className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$textfield_vars_cssmodulejs))),
|
|
199
|
-
size:
|
|
198
|
+
UNSAFE_className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$textfield_vars_cssmodulejs))), 'spectrum-Textfield-icon'),
|
|
199
|
+
size: 'S'
|
|
200
200
|
});
|
|
201
201
|
let clearButton = /*#__PURE__*/ (0, $9yRST$react).createElement((0, $9yRST$ClearButton), {
|
|
202
202
|
onPress: (e)=>{
|
|
@@ -205,25 +205,25 @@ const $c940f54e16bafef5$var$SearchAutocompleteButton = /*#__PURE__*/ (0, $9yRST$
|
|
|
205
205
|
props === null || props === void 0 ? void 0 : (_props_onPress = props.onPress) === null || _props_onPress === void 0 ? void 0 : _props_onPress.call(props, e);
|
|
206
206
|
},
|
|
207
207
|
preventFocus: true,
|
|
208
|
-
"aria-label": stringFormatter.format(
|
|
208
|
+
"aria-label": stringFormatter.format('clear'),
|
|
209
209
|
excludeFromTabOrder: true,
|
|
210
|
-
UNSAFE_className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$search_vars_cssmodulejs))),
|
|
210
|
+
UNSAFE_className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$search_vars_cssmodulejs))), 'spectrum-ClearButton'),
|
|
211
211
|
isDisabled: isDisabled
|
|
212
212
|
});
|
|
213
213
|
let validation = /*#__PURE__*/ (0, $9yRST$react).cloneElement(validationIcon, {
|
|
214
|
-
UNSAFE_className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$textfield_vars_cssmodulejs))),
|
|
214
|
+
UNSAFE_className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$textfield_vars_cssmodulejs))), 'spectrum-Textfield-validationIcon', (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$inputgroup_vars_cssmodulejs))), 'spectrum-InputGroup-input-validationIcon'), (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$search_vars_cssmodulejs))), 'spectrum-Search-validationIcon'))
|
|
215
215
|
});
|
|
216
216
|
let { hoverProps: hoverProps, isHovered: isHovered } = (0, $9yRST$useHover)({});
|
|
217
217
|
let { isFocused: isFocused, isFocusVisible: isFocusVisible, focusProps: focusProps } = (0, $9yRST$useFocusRing)();
|
|
218
218
|
let { buttonProps: buttonProps } = (0, $9yRST$useButton)({
|
|
219
219
|
...props,
|
|
220
|
-
|
|
221
|
-
props[
|
|
222
|
-
props[
|
|
220
|
+
'aria-labelledby': [
|
|
221
|
+
props['aria-labelledby'],
|
|
222
|
+
props['aria-label'] && !props['aria-labelledby'] ? props.id : null,
|
|
223
223
|
valueId,
|
|
224
|
-
validationState ===
|
|
225
|
-
].filter(Boolean).join(
|
|
226
|
-
elementType:
|
|
224
|
+
validationState === 'invalid' ? invalidId : null
|
|
225
|
+
].filter(Boolean).join(' '),
|
|
226
|
+
elementType: 'div'
|
|
227
227
|
}, ref);
|
|
228
228
|
return /*#__PURE__*/ (0, $9yRST$react).createElement("div", {
|
|
229
229
|
...(0, $9yRST$mergeProps)(hoverProps, focusProps, buttonProps),
|
|
@@ -231,40 +231,40 @@ const $c940f54e16bafef5$var$SearchAutocompleteButton = /*#__PURE__*/ (0, $9yRST$
|
|
|
231
231
|
ref: ref,
|
|
232
232
|
style: {
|
|
233
233
|
...style,
|
|
234
|
-
outline:
|
|
234
|
+
outline: 'none'
|
|
235
235
|
},
|
|
236
|
-
className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$inputgroup_vars_cssmodulejs))),
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
}, (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$searchautocomplete_cssmodulejs))),
|
|
236
|
+
className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$inputgroup_vars_cssmodulejs))), 'spectrum-InputGroup', {
|
|
237
|
+
'spectrum-InputGroup--quiet': isQuiet,
|
|
238
|
+
'is-disabled': isDisabled,
|
|
239
|
+
'spectrum-InputGroup--invalid': validationState === 'invalid' && !isDisabled,
|
|
240
|
+
'is-hovered': isHovered,
|
|
241
|
+
'is-focused': isFocused,
|
|
242
|
+
'focus-ring': isFocusVisible
|
|
243
|
+
}, (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$searchautocomplete_cssmodulejs))), 'searchautocomplete', 'mobile-searchautocomplete'), className)
|
|
244
244
|
}, /*#__PURE__*/ (0, $9yRST$react).createElement("div", {
|
|
245
|
-
className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$textfield_vars_cssmodulejs))),
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
}, (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$search_vars_cssmodulejs))),
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
}), (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$inputgroup_vars_cssmodulejs))),
|
|
245
|
+
className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$textfield_vars_cssmodulejs))), 'spectrum-Textfield', {
|
|
246
|
+
'spectrum-Textfield--invalid': validationState === 'invalid' && !isDisabled,
|
|
247
|
+
'spectrum-Textfield--valid': validationState === 'valid' && !isDisabled,
|
|
248
|
+
'spectrum-Textfield--quiet': isQuiet
|
|
249
|
+
}, (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$search_vars_cssmodulejs))), 'spectrum-Search', 'spectrum-Search--loadable', {
|
|
250
|
+
'is-disabled': isDisabled,
|
|
251
|
+
'is-quiet': isQuiet,
|
|
252
|
+
'spectrum-Search--invalid': validationState === 'invalid' && !isDisabled,
|
|
253
|
+
'spectrum-Search--valid': validationState === 'valid' && !isDisabled
|
|
254
|
+
}), (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$inputgroup_vars_cssmodulejs))), 'spectrum-InputGroup-field'))
|
|
255
255
|
}, /*#__PURE__*/ (0, $9yRST$react).createElement("div", {
|
|
256
|
-
className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$textfield_vars_cssmodulejs))),
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
}, (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$search_vars_cssmodulejs))),
|
|
256
|
+
className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$textfield_vars_cssmodulejs))), 'spectrum-Textfield-input', {
|
|
257
|
+
'spectrum-Textfield-inputIcon': !!icon,
|
|
258
|
+
'is-hovered': isHovered,
|
|
259
|
+
'is-placeholder': isPlaceholder,
|
|
260
|
+
'is-disabled': isDisabled,
|
|
261
|
+
'is-quiet': isQuiet,
|
|
262
|
+
'is-focused': isFocused
|
|
263
|
+
}, (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$search_vars_cssmodulejs))), 'spectrum-Search-input'), (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$searchautocomplete_cssmodulejs))), 'mobile-input'))
|
|
264
264
|
}, icon, /*#__PURE__*/ (0, $9yRST$react).createElement("span", {
|
|
265
265
|
id: valueId,
|
|
266
|
-
className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$searchautocomplete_cssmodulejs))),
|
|
267
|
-
}, children)), validationState && !isDisabled ? validation : null, (inputValue !==
|
|
266
|
+
className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$searchautocomplete_cssmodulejs))), 'mobile-value')
|
|
267
|
+
}, children)), validationState && !isDisabled ? validation : null, (inputValue !== '' || validationState != null) && !isReadOnly && clearButton));
|
|
268
268
|
});
|
|
269
269
|
function $c940f54e16bafef5$var$SearchAutocompleteTray(props) {
|
|
270
270
|
let searchIcon = /*#__PURE__*/ (0, $9yRST$react).createElement((0, $9yRST$spectrumiconsuiMagnifier), {
|
|
@@ -277,12 +277,12 @@ function $c940f54e16bafef5$var$SearchAutocompleteTray(props) {
|
|
|
277
277
|
let inputRef = (0, $9yRST$useRef)(null);
|
|
278
278
|
let popoverRef = (0, $9yRST$useRef)(null);
|
|
279
279
|
let listBoxRef = (0, $9yRST$useRef)(null);
|
|
280
|
-
let isLoading = loadingState ===
|
|
281
|
-
let layout = (0, $9yRST$useListBoxLayout)(
|
|
282
|
-
let stringFormatter = (0, $9yRST$useLocalizedStringFormatter)((0, ($parcel$interopDefault($9yRST$intlStringsmodulejs))),
|
|
280
|
+
let isLoading = loadingState === 'loading' || loadingState === 'loadingMore';
|
|
281
|
+
let layout = (0, $9yRST$useListBoxLayout)();
|
|
282
|
+
let stringFormatter = (0, $9yRST$useLocalizedStringFormatter)((0, ($parcel$interopDefault($9yRST$intlStringsmodulejs))), '@react-spectrum/autocomplete');
|
|
283
283
|
let { inputProps: inputProps, listBoxProps: listBoxProps, labelProps: labelProps, clearButtonProps: clearButtonProps } = (0, $9yRST$useSearchAutocomplete)({
|
|
284
284
|
...props,
|
|
285
|
-
|
|
285
|
+
layoutDelegate: layout,
|
|
286
286
|
popoverRef: popoverRef,
|
|
287
287
|
listBoxRef: listBoxRef,
|
|
288
288
|
inputRef: inputRef,
|
|
@@ -300,29 +300,29 @@ function $c940f54e16bafef5$var$SearchAutocompleteTray(props) {
|
|
|
300
300
|
if (!state.isOpen && state.isFocused) state.setFocused(false);
|
|
301
301
|
});
|
|
302
302
|
let { dialogProps: dialogProps } = (0, $9yRST$useDialog)({
|
|
303
|
-
|
|
303
|
+
'aria-labelledby': (0, $9yRST$useId)(labelProps.id)
|
|
304
304
|
}, popoverRef);
|
|
305
305
|
// Override the role of the input to "searchbox" instead of "combobox".
|
|
306
306
|
// Since the listbox is always visible, the combobox role doesn't really give us anything.
|
|
307
307
|
// VoiceOver on iOS reads "double tap to collapse" when focused on the input rather than
|
|
308
308
|
// "double tap to edit text", as with a textbox or searchbox. We'd like double tapping to
|
|
309
309
|
// open the virtual keyboard rather than closing the tray.
|
|
310
|
-
inputProps.role =
|
|
311
|
-
inputProps[
|
|
310
|
+
inputProps.role = 'searchbox';
|
|
311
|
+
inputProps['aria-haspopup'] = 'listbox';
|
|
312
312
|
delete inputProps.onTouchEnd;
|
|
313
313
|
let clearButton = /*#__PURE__*/ (0, $9yRST$react).createElement((0, $9yRST$ClearButton), {
|
|
314
314
|
...clearButtonProps,
|
|
315
315
|
preventFocus: true,
|
|
316
|
-
"aria-label": stringFormatter.format(
|
|
316
|
+
"aria-label": stringFormatter.format('clear'),
|
|
317
317
|
excludeFromTabOrder: true,
|
|
318
|
-
UNSAFE_className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$search_vars_cssmodulejs))),
|
|
318
|
+
UNSAFE_className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$search_vars_cssmodulejs))), 'spectrum-ClearButton'),
|
|
319
319
|
isDisabled: isDisabled
|
|
320
320
|
});
|
|
321
321
|
let loadingCircle = /*#__PURE__*/ (0, $9yRST$react).createElement((0, $9yRST$ProgressCircle), {
|
|
322
|
-
"aria-label": stringFormatter.format(
|
|
322
|
+
"aria-label": stringFormatter.format('loading'),
|
|
323
323
|
size: "S",
|
|
324
324
|
isIndeterminate: true,
|
|
325
|
-
UNSAFE_className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$search_vars_cssmodulejs))),
|
|
325
|
+
UNSAFE_className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$search_vars_cssmodulejs))), 'spectrum-Search-circleLoader', (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$textfield_vars_cssmodulejs))), 'spectrum-Textfield-circleLoader'))
|
|
326
326
|
});
|
|
327
327
|
// Close the software keyboard on scroll to give the user a bigger area to scroll.
|
|
328
328
|
// But only do this if scrolling with touch, otherwise it can cause issues with touch
|
|
@@ -345,7 +345,7 @@ function $c940f54e16bafef5$var$SearchAutocompleteTray(props) {
|
|
|
345
345
|
let inputValue = inputProps.value;
|
|
346
346
|
let lastInputValue = (0, $9yRST$useRef)(inputValue);
|
|
347
347
|
(0, $9yRST$useEffect)(()=>{
|
|
348
|
-
if (loadingState ===
|
|
348
|
+
if (loadingState === 'filtering' && !showLoading) {
|
|
349
349
|
if (timeout.current === null) timeout.current = setTimeout(()=>{
|
|
350
350
|
setShowLoading(true);
|
|
351
351
|
}, 500);
|
|
@@ -356,7 +356,7 @@ function $c940f54e16bafef5$var$SearchAutocompleteTray(props) {
|
|
|
356
356
|
setShowLoading(true);
|
|
357
357
|
}, 500);
|
|
358
358
|
}
|
|
359
|
-
} else if (loadingState !==
|
|
359
|
+
} else if (loadingState !== 'filtering') {
|
|
360
360
|
// If loading is no longer happening, clear any timers and hide the loading circle
|
|
361
361
|
setShowLoading(false);
|
|
362
362
|
if (timeout.current !== null) {
|
|
@@ -372,7 +372,7 @@ function $c940f54e16bafef5$var$SearchAutocompleteTray(props) {
|
|
|
372
372
|
]);
|
|
373
373
|
let onKeyDown = (e)=>{
|
|
374
374
|
// Close virtual keyboard, close tray, and fire onSubmit if user hits Enter w/o any focused options
|
|
375
|
-
if (e.key ===
|
|
375
|
+
if (e.key === 'Enter' && state.selectionManager.focusedKey == null) {
|
|
376
376
|
var _popoverRef_current;
|
|
377
377
|
(_popoverRef_current = popoverRef.current) === null || _popoverRef_current === void 0 ? void 0 : _popoverRef_current.focus();
|
|
378
378
|
if (onClose) onClose();
|
|
@@ -380,8 +380,8 @@ function $c940f54e16bafef5$var$SearchAutocompleteTray(props) {
|
|
|
380
380
|
} else if (inputProps.onKeyDown) inputProps.onKeyDown(e);
|
|
381
381
|
};
|
|
382
382
|
if (icon) icon = /*#__PURE__*/ (0, $9yRST$react).cloneElement(icon, {
|
|
383
|
-
UNSAFE_className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$textfield_vars_cssmodulejs))),
|
|
384
|
-
size:
|
|
383
|
+
UNSAFE_className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$textfield_vars_cssmodulejs))), 'spectrum-Textfield-icon'),
|
|
384
|
+
size: 'S'
|
|
385
385
|
});
|
|
386
386
|
return /*#__PURE__*/ (0, $9yRST$react).createElement((0, $9yRST$FocusScope), {
|
|
387
387
|
restoreFocus: true,
|
|
@@ -389,7 +389,7 @@ function $c940f54e16bafef5$var$SearchAutocompleteTray(props) {
|
|
|
389
389
|
}, /*#__PURE__*/ (0, $9yRST$react).createElement("div", {
|
|
390
390
|
...(0, $9yRST$mergeProps)(overlayProps, dialogProps),
|
|
391
391
|
ref: popoverRef,
|
|
392
|
-
className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$searchautocomplete_cssmodulejs))),
|
|
392
|
+
className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$searchautocomplete_cssmodulejs))), 'tray-dialog')
|
|
393
393
|
}, /*#__PURE__*/ (0, $9yRST$react).createElement((0, $9yRST$DismissButton), {
|
|
394
394
|
onDismiss: onClose
|
|
395
395
|
}), /*#__PURE__*/ (0, $9yRST$react).createElement((0, $9yRST$TextFieldBase), {
|
|
@@ -401,19 +401,19 @@ function $c940f54e16bafef5$var$SearchAutocompleteTray(props) {
|
|
|
401
401
|
},
|
|
402
402
|
inputRef: inputRef,
|
|
403
403
|
isDisabled: isDisabled,
|
|
404
|
-
isLoading: showLoading && loadingState ===
|
|
404
|
+
isLoading: showLoading && loadingState === 'filtering',
|
|
405
405
|
loadingIndicator: loadingState != null ? loadingCircle : undefined,
|
|
406
406
|
validationState: validationState,
|
|
407
|
-
wrapperChildren: (state.inputValue !==
|
|
407
|
+
wrapperChildren: (state.inputValue !== '' || loadingState === 'filtering' || validationState != null) && !props.isReadOnly ? clearButton : undefined,
|
|
408
408
|
icon: icon,
|
|
409
|
-
UNSAFE_className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$search_vars_cssmodulejs))),
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
}, (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$searchautocomplete_cssmodulejs))),
|
|
413
|
-
|
|
409
|
+
UNSAFE_className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$search_vars_cssmodulejs))), 'spectrum-Search', 'spectrum-Textfield', 'spectrum-Search--loadable', {
|
|
410
|
+
'spectrum-Search--invalid': validationState === 'invalid' && !isDisabled,
|
|
411
|
+
'spectrum-Search--valid': validationState === 'valid' && !isDisabled
|
|
412
|
+
}, (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$searchautocomplete_cssmodulejs))), 'tray-textfield', {
|
|
413
|
+
'has-label': !!props.label
|
|
414
414
|
})),
|
|
415
|
-
inputClassName: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$search_vars_cssmodulejs))),
|
|
416
|
-
validationIconClassName: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$search_vars_cssmodulejs))),
|
|
415
|
+
inputClassName: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$search_vars_cssmodulejs))), 'spectrum-Search-input'),
|
|
416
|
+
validationIconClassName: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$search_vars_cssmodulejs))), 'spectrum-Search-validationIcon')
|
|
417
417
|
}), /*#__PURE__*/ (0, $9yRST$react).createElement((0, $9yRST$ListBoxBase), {
|
|
418
418
|
...listBoxProps,
|
|
419
419
|
domProps: {
|
|
@@ -426,10 +426,10 @@ function $c940f54e16bafef5$var$SearchAutocompleteTray(props) {
|
|
|
426
426
|
layout: layout,
|
|
427
427
|
state: state,
|
|
428
428
|
shouldUseVirtualFocus: true,
|
|
429
|
-
renderEmptyState: ()=>loadingState !==
|
|
430
|
-
className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$searchautocomplete_cssmodulejs))),
|
|
431
|
-
}, stringFormatter.format(
|
|
432
|
-
UNSAFE_className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$searchautocomplete_cssmodulejs))),
|
|
429
|
+
renderEmptyState: ()=>loadingState !== 'loading' && /*#__PURE__*/ (0, $9yRST$react).createElement("span", {
|
|
430
|
+
className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$searchautocomplete_cssmodulejs))), 'no-results')
|
|
431
|
+
}, stringFormatter.format('noResults')),
|
|
432
|
+
UNSAFE_className: (0, $9yRST$classNames)((0, ($parcel$interopDefault($9yRST$searchautocomplete_cssmodulejs))), 'tray-listbox'),
|
|
433
433
|
ref: listBoxRef,
|
|
434
434
|
onScroll: onScroll,
|
|
435
435
|
onLoadMore: onLoadMore,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;CAUC;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CD,SAAS,gDAA4C,KAAyC,EAAE,GAA8B;IAC5H,QAAQ,CAAA,GAAA,uBAAe,EAAE;IAEzB,IAAI,WACF,OAAO,cACP,UAAU,cACV,UAAU,sBACV,kBAAkB,YAClB,QAAQ,QACR,IAAI,cACJ,UAAU,YACV,WAAW,KAAO,GACnB,GAAG;IAEJ,IAAI,YAAC,QAAQ,EAAC,GAAG,CAAA,GAAA,gBAAQ,EAAE;QAAC,aAAa;IAAM;IAC/C,IAAI,QAAQ,CAAA,GAAA,uBAAe,EAAE;QAC3B,GAAG,KAAK;QACR,eAAe;QACf,uBAAuB;QACvB,gGAAgG;QAChG,uHAAuH;QACvH,wFAAwF;QACxF,mBAAmB;QACnB,mBAAmB;QACnB,mBAAmB,CAAC,MAAQ,QAAQ,QAAQ,SAAS,MAAM;QAC3D,aAAa;QACb,oBAAoB;QACpB,UAAU,CAAA,GAAA,kBAAU,EAAE,CAAA,IAAK,qBAAA,+BAAA,SAAW,EAAE,UAAU,GAAG;YAAC;SAAS;IACjE;IAEA,IAAI,YAAY,CAAA,GAAA,aAAK,EAAkB;IACvC,IAAI,SAAS,CAAA,GAAA,sBAAc,EAAE,KAAK;IAClC,IAAI,gBAAC,YAAY,gBAAE,YAAY,EAAC,GAAG,CAAA,GAAA,wBAAgB,EAAE;QAAC,MAAM;IAAS,GAAG,OAAO;IAE/E,IAAI,WAAW,CAAA,GAAA,aAAK,EAAoB;IACxC,CAAA,GAAA,wBAAgB,EAAE;QAChB,GAAG,KAAK;QACR,OAAO;gBAAM;oBAAA,qBAAA,UAAU,OAAO,cAAjB,yCAAA,mBAAmB,KAAK;;IACvC,GAAG,OAAO;IACV,IAAI,aAAC,SAAS,oBAAE,gBAAgB,qBAAE,iBAAiB,EAAC,GAAG,MAAM,iBAAiB;IAC9E,IAAI,kBAAkB,MAAM,eAAe,IAAK,CAAA,YAAY,YAAY,SAAQ;QAC7D;IAAnB,IAAI,eAAe,CAAA,sBAAA,MAAM,YAAY,cAAlB,iCAAA,sBAAsB,iBAAiB,IAAI,CAAC;IAE/D,IAAI,cAAC,UAAU,cAAE,UAAU,oBAAE,gBAAgB,qBAAE,iBAAiB,EAAC,GAAG,CAAA,GAAA,eAAO,EAAE;QAC3E,GAAG,KAAK;QACR,kBAAkB;mBAClB;sBACA;IACF;IAEA,kEAAkE;IAClE,WAAW,OAAO,GAAG;QACnB,IAAI,CAAC,MAAM,UAAU,IAAI,UAAU,OAAO,EAAE;YAC1C,UAAU,OAAO,CAAC,KAAK;YACvB,CAAA,GAAA,6BAAqB,EAAE;QACzB;IACF;IAEA,IAAI,aAAoD;QACtD,MAAM;cACN;QACA,OAAO,MAAM,UAAU;IACzB;IAEA,IAAI,uBAAuB,UAAU;QACnC,qEAAqE;QACrE,iFAAiF;QACjF,WAAW,IAAI,GAAG;QAClB,WAAW,MAAM,GAAG;QACpB,WAAW,QAAQ,GAAG;QACtB,wBAAwB;QACxB,WAAW,QAAQ,GAAG,KAAO;IAC/B;IAEA,CAAA,GAAA,mBAAW,EAAE,UAAU,MAAM,UAAU,EAAE,MAAM,aAAa;IAE5D,qBACE,gFACE,gCAAC,CAAA,GAAA,YAAI;QACF,GAAG,KAAK;QACT,YAAY;QACZ,kBAAkB;QAClB,mBAAmB;QACnB,WAAW;QACX,kBAAkB;QAClB,mBAAmB;QACnB,aAAY;QACZ,KAAK;QACL,8CAAA;qBACA,gCAAC;QACE,GAAG,CAAA,GAAA,iBAAS,EAAE,cAAc,YAAY;YAAC,WAAW,MAAM,SAAS;YAAE,MAAM,MAAM,IAAI;QAAA,EAAE;QACxF,KAAK;QACL,SAAS;QACT,YAAY;QACZ,YAAY;QACZ,eAAe,CAAC,MAAM,UAAU;QAChC,iBAAiB;QACjB,YAAY,MAAM,UAAU;QAC5B,YAAY,IAAM,MAAM,aAAa,CAAC;QACtC,SAAS,IAAM,CAAC,cAAc,MAAM,IAAI,CAAC,MAAM;OAC9C,MAAM,UAAU,IAAI,MAAM,WAAW,IAAI,oBAG9C,gCAAC;QAAO,GAAG,UAAU;QAAE,KAAK;sBAC5B,gCAAC,CAAA,GAAA,WAAG;QAAE,OAAO;QAAO,eAAA;QAAe,GAAG,YAAY;qBAChD,gCAAC;QACE,GAAG,KAAK;QACT,SAAS,MAAM,KAAK;QACpB,cAAc;QACd,OAAO;;AAIjB;AAEO,IAAI,0DAA2B,CAAA,GAAA,YAAI,EAAE,UAAU,CAAC;AAiBvD,2GAA2G;AAC3G,sCAAsC;AACtC,MAAM,+DAA2B,CAAA,GAAA,YAAI,EAAE,UAAU,CAAC,SAAS,yBAAyB,KAAoC,EAAE,GAAQ;IAChI,IAAI,2BACF,gCAAC,CAAA,GAAA,+BAAQ;QAAE,eAAY;;IAGzB,IAAI,QACF,OAAO,qBACP,OAAO,cACP,UAAU,cACV,UAAU,iBACV,aAAa,mBACb,eAAe,cACf,UAAU,cACV,UAAU,YACV,QAAQ,SACR,KAAK,aACL,SAAS,EACZ,GAAG;IACF,IAAI,kBAAkB,CAAA,GAAA,kCAA0B,EAAE,CAAA,GAAA,oDAAW,GAAG;IAChE,IAAI,UAAU,CAAA,GAAA,YAAI;IAClB,IAAI,YAAY,CAAA,GAAA,YAAI;IACpB,IAAI,iBAAiB,oBAAoB,0BACrC,gCAAC,CAAA,GAAA,iCAAU;QAAE,IAAI;QAAW,cAAY,gBAAgB,MAAM,CAAC;uBAC/D,gCAAC,CAAA,GAAA,qCAAc;IAEnB,IAAI,MACF,qBAAO,CAAA,GAAA,YAAI,EAAE,YAAY,CAAC,MAAM;QAC9B,kBAAkB,CAAA,GAAA,iBAAS,EACzB,CAAA,GAAA,2DAAc,GACd;QAEF,MAAM;IACR;IAGF,IAAI,4BACF,gCAAC,CAAA,GAAA,kBAAU;QACT,SAAS,CAAC;gBAER;YADA,uBAAA,iCAAA;YACA,kBAAA,6BAAA,iBAAA,MAAO,OAAO,cAAd,qCAAA,oBAAA,OAAiB;QACnB;QACA,cAAA;QACA,cAAY,gBAAgB,MAAM,CAAC;QACnC,qBAAA;QACA,kBACE,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,wDAAW,GACX;QAGJ,YAAY;;IAGhB,IAAI,2BAAa,CAAA,GAAA,YAAI,EAAE,YAAY,CAAC,gBAAgB;QAClD,kBAAkB,CAAA,GAAA,iBAAS,EACzB,CAAA,GAAA,2DAAc,GACd,qCACA,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,4DAAK,GACL,6CAEF,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,wDAAW,GACX;IAGN;IAEA,IAAI,cAAC,UAAU,aAAE,SAAS,EAAC,GAAG,CAAA,GAAA,eAAO,EAAE,CAAC;IACxC,IAAI,aAAC,SAAS,kBAAE,cAAc,cAAE,UAAU,EAAC,GAAG,CAAA,GAAA,mBAAW;IACzD,IAAI,eAAC,WAAW,EAAC,GAAG,CAAA,GAAA,gBAAQ,EAAE;QAC5B,GAAG,KAAK;QACR,mBAAmB;YACjB,KAAK,CAAC,kBAAkB;YACxB,KAAK,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,kBAAkB,GAAG,MAAM,EAAE,GAAG;YAC9D;YACA,oBAAoB,YAAY,YAAY;SAC7C,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC;QACvB,aAAa;IACf,GAAG;IAEH,qBACE,gCAAC;QACE,GAAG,CAAA,GAAA,iBAAS,EAAE,YAAY,YAAY,YAAY;QACnD,iBAAc;QACd,KAAK;QACL,OAAO;YAAC,GAAG,KAAK;YAAE,SAAS;QAAM;QACjC,WACE,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,4DAAK,GACL,uBACA;YACE,8BAA8B;YAC9B,eAAe;YACf,gCAAgC,oBAAoB,aAAa,CAAC;YAClE,cAAc;YACd,cAAc;YACd,cAAc;QAChB,GACA,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,+DAAuB,GACvB,sBACA,8BAEF;qBAGJ,gCAAC;QACC,WACE,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,2DAAc,GACd,sBACA;YACE,+BAA+B,oBAAoB,aAAa,CAAC;YACjE,6BAA6B,oBAAoB,WAAW,CAAC;YAC7D,6BAA6B;QAC/B,GACA,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,wDAAW,GACX,mBACA,6BACA;YACE,eAAe;YACf,YAAY;YACZ,4BAA4B,oBAAoB,aAAa,CAAC;YAC9D,0BAA0B,oBAAoB,WAAW,CAAC;QAC5D,IAEF,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,4DAAK,GACL;qBAIN,gCAAC;QACC,WACE,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,2DAAc,GACd,4BACA;YACE,gCAAgC,CAAC,CAAC;YAClC,cAAc;YACd,kBAAkB;YAClB,eAAe;YACf,YAAY;YACZ,cAAc;QAChB,GACA,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,wDAAW,GACX,0BAEF,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,+DAAuB,GACvB;OAIL,oBACD,gCAAC;QACC,IAAI;QACJ,WACE,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,+DAAuB,GACvB;OAGH,YAGJ,mBAAmB,CAAC,aAAa,aAAa,MAC9C,AAAC,CAAA,eAAe,MAAM,mBAAmB,IAAG,KAAM,CAAC,cAAc;AAI1E;AASA,SAAS,6CAA0B,KAAqC;IACtE,IAAI,2BACF,gCAAC,CAAA,GAAA,+BAAQ;QAAE,eAAY;;IAGzB,IAAI,SACF,8BAA8B;IAC9B,KAAK,QACL,OAAO,wBACP,UAAU,mBACV,eAAe,SACf,KAAK,gBACL,YAAY,gBACZ,YAAY,cACZ,UAAU,WACV,OAAO,YACP,QAAQ,EACT,GAAG;IAEJ,IAAI,UAAU,CAAA,GAAA,aAAK,EAAwC;IAC3D,IAAI,CAAC,aAAa,eAAe,GAAG,CAAA,GAAA,eAAO,EAAE;IAC7C,IAAI,WAAW,CAAA,GAAA,aAAK,EAAoB;IACxC,IAAI,aAAa,CAAA,GAAA,aAAK,EAAkB;IACxC,IAAI,aAAa,CAAA,GAAA,aAAK,EAAkB;IACxC,IAAI,YAAY,iBAAiB,aAAa,iBAAiB;IAC/D,IAAI,SAAS,CAAA,GAAA,uBAAe,EAAE,OAAO;IACrC,IAAI,kBAAkB,CAAA,GAAA,kCAA0B,EAAE,CAAA,GAAA,oDAAW,GAAG;IAEhE,IAAI,cAAC,UAAU,gBAAE,YAAY,cAAE,UAAU,oBAAE,gBAAgB,EAAC,GAAG,CAAA,GAAA,4BAAoB,EACjF;QACE,GAAG,KAAK;QACR,kBAAkB;QAClB,YAAY;oBACZ;kBACA;QACA,4BAA4B;QAC5B,MAAM;IACR,GACA;IAGF,CAAA,GAAA,YAAI,EAAE,SAAS,CAAC;QACd,IAAI,SAAS,OAAO,EAClB,CAAA,GAAA,kBAAU,EAAE,SAAS,OAAO;IAEhC,GAAG,EAAE;IAEL,CAAA,GAAA,YAAI,EAAE,SAAS,CAAC;QACd,4FAA4F;QAC5F,6GAA6G;QAC7G,0GAA0G;QAC1G,yIAAyI;QACzI,IAAI,CAAC,MAAM,MAAM,IAAI,MAAM,SAAS,EAClC,MAAM,UAAU,CAAC;IAErB;IAEA,IAAI,eAAC,WAAW,EAAC,GAAG,CAAA,GAAA,gBAAQ,EAAE;QAC5B,mBAAmB,CAAA,GAAA,YAAI,EAAE,WAAW,EAAE;IACxC,GAAG;IAEH,uEAAuE;IACvE,0FAA0F;IAC1F,wFAAwF;IACxF,yFAAyF;IACzF,0DAA0D;IAC1D,WAAW,IAAI,GAAG;IAClB,UAAU,CAAC,gBAAgB,GAAG;IAC9B,OAAO,WAAW,UAAU;IAE5B,IAAI,4BACF,gCAAC,CAAA,GAAA,kBAAU;QACR,GAAG,gBAAgB;QACpB,cAAA;QACA,cAAY,gBAAgB,MAAM,CAAC;QACnC,qBAAA;QACA,kBACE,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,wDAAW,GACX;QAGJ,YAAY;;IAGhB,IAAI,8BACF,gCAAC,CAAA,GAAA,qBAAa;QACZ,cAAY,gBAAgB,MAAM,CAAC;QACnC,MAAK;QACL,iBAAA;QACA,kBAAkB,CAAA,GAAA,iBAAS,EACzB,CAAA,GAAA,wDAAW,GACX,gCACA,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,2DAAc,GACd;;IAKR,kFAAkF;IAClF,qFAAqF;IACrF,kBAAkB;IAClB,IAAI,cAAc,CAAA,GAAA,aAAK,EAAE;IACzB,IAAI,eAAe;QACjB,YAAY,OAAO,GAAG;IACxB;IAEA,IAAI,aAAa;QACf,YAAY,OAAO,GAAG;IACxB;IAEA,IAAI,WAAW,CAAA,GAAA,kBAAU,EAAE;QACzB,IAAI,CAAC,SAAS,OAAO,IAAI,SAAS,aAAa,KAAK,SAAS,OAAO,IAAI,CAAC,YAAY,OAAO,EAC1F;QAGF,IAAI,WAAW,OAAO,EACpB,WAAW,OAAO,CAAC,KAAK;IAE5B,GAAG;QAAC;QAAU;QAAY;KAAY;IAEtC,IAAI,aAAa,WAAW,KAAK;IACjC,IAAI,iBAAiB,CAAA,GAAA,aAAK,EAAE;IAC5B,CAAA,GAAA,gBAAQ,EAAE;QACR,IAAI,iBAAiB,eAAe,CAAC,aAAa;YAChD,IAAI,QAAQ,OAAO,KAAK,MACtB,QAAQ,OAAO,GAAG,WAAW;gBAC3B,eAAe;YACjB,GAAG;YAGL,2EAA2E;YAC3E,IAAI,eAAe,eAAe,OAAO,EAAE;gBACzC,aAAa,QAAQ,OAAO;gBAC5B,QAAQ,OAAO,GAAG,WAAW;oBAC3B,eAAe;gBACjB,GAAG;YACL;QACF,OAAO,IAAI,iBAAiB,aAAa;YACvC,kFAAkF;YAClF,eAAe;YACf,IAAI,QAAQ,OAAO,KAAK,MAAM;gBAC5B,aAAa,QAAQ,OAAO;gBAC5B,QAAQ,OAAO,GAAG;YACpB;QACF;QAEA,eAAe,OAAO,GAAG;IAC3B,GAAG;QAAC;QAAc;QAAY;KAAY;IAE1C,IAAI,YAAY,CAAC;QACf,mGAAmG;QACnG,IAAI,EAAE,GAAG,KAAK,WAAW,MAAM,gBAAgB,CAAC,UAAU,IAAI,MAAM;gBAClE;aAAA,sBAAA,WAAW,OAAO,cAAlB,0CAAA,oBAAoB,KAAK;YACzB,IAAI,SACF;YAEF,IAAI,UACF,SAAS,cAAc,OAAO,OAAO,WAAW,QAAQ,IAAI;QAEhE,OACE,IAAI,WAAW,SAAS,EACtB,WAAW,SAAS,CAAC;IAG3B;IAEA,IAAI,MACF,qBAAO,CAAA,GAAA,YAAI,EAAE,YAAY,CAAC,MAAM;QAC9B,kBAAkB,CAAA,GAAA,iBAAS,EACvB,CAAA,GAAA,2DAAc,GACd;QAEJ,MAAM;IACR;IAGF,qBACE,gCAAC,CAAA,GAAA,iBAAS;QAAE,cAAA;QAAa,SAAA;qBACvB,gCAAC;QACE,GAAG,CAAA,GAAA,iBAAS,EAAE,cAAc,YAAY;QACzC,KAAK;QACL,WACE,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,+DAAuB,GACvB;qBAGJ,gCAAC,CAAA,GAAA,oBAAY;QAAE,WAAW;sBAC1B,gCAAC,CAAA,GAAA,oBAAY;QACX,OAAO;QACP,YAAY;QACZ,YAAY;YAAC,GAAG,UAAU;uBAAE;QAAS;QACrC,UAAU;QACV,YAAY;QACZ,WAAW,eAAe,iBAAiB;QAC3C,kBAAkB,gBAAgB,OAAO,gBAAgB;QACzD,iBAAiB;QACjB,iBAAiB,AAAC,AAAC,CAAA,MAAM,UAAU,KAAK,MAAM,iBAAiB,eAAe,mBAAmB,IAAG,KAAM,CAAC,MAAM,UAAU,GAAI,cAAc;QAC7I,MAAM;QACN,kBACE,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,wDAAW,GACX,mBACA,sBACA,6BACA;YACE,4BAA4B,oBAAoB,aAAa,CAAC;YAC9D,0BAA0B,oBAAoB,WAAW,CAAC;QAC5D,GACA,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,+DAAuB,GACvB,kBACA;YACE,aAAa,CAAC,CAAC,MAAM,KAAK;QAC5B;QAIN,gBACE,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,wDAAW,GACX;QAGJ,yBACE,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,wDAAW,GACX;sBAGN,gCAAC,CAAA,GAAA,kBAAU;QACR,GAAG,YAAY;QAChB,UAAU;0BAAC;wBAAc;QAAU;QACnC,wBAAA;QACA,uBAAA;QACA,qBAAA;QACA,QAAQ;QACR,OAAO;QACP,uBAAA;QACA,kBAAkB,IAAM,iBAAiB,2BACvC,gCAAC;gBAAK,WAAW,CAAA,GAAA,iBAAS,EAAE,CAAA,GAAA,+DAAuB,GAAG;eACnD,gBAAgB,MAAM,CAAC;QAG5B,kBACE,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,+DAAuB,GACvB;QAGJ,KAAK;QACL,UAAU;QACV,YAAY;QACZ,WAAW;sBACb,gCAAC,CAAA,GAAA,oBAAY;QAAE,WAAW;;AAIlC","sources":["packages/@react-spectrum/autocomplete/src/MobileSearchAutocomplete.tsx"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport AlertMedium from '@spectrum-icons/ui/AlertMedium';\nimport {AriaButtonProps} from '@react-types/button';\nimport CheckmarkMedium from '@spectrum-icons/ui/CheckmarkMedium';\nimport {classNames, useFocusableRef} from '@react-spectrum/utils';\nimport {ClearButton} from '@react-spectrum/button';\nimport {ComboBoxState, useComboBoxState} from '@react-stately/combobox';\nimport {DismissButton, useOverlayTrigger} from '@react-aria/overlays';\nimport {Field} from '@react-spectrum/label';\nimport {FocusableRef, ValidationState} from '@react-types/shared';\nimport {focusSafely, FocusScope, useFocusRing} from '@react-aria/focus';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {ListBoxBase, useListBoxLayout} from '@react-spectrum/listbox';\nimport Magnifier from '@spectrum-icons/ui/Magnifier';\nimport {mergeProps, useFormReset, useId} from '@react-aria/utils';\nimport {ProgressCircle} from '@react-spectrum/progress';\nimport React, {\n HTMLAttributes,\n InputHTMLAttributes,\n ReactElement,\n ReactNode,\n useCallback,\n useEffect,\n useRef,\n useState\n} from 'react';\nimport searchAutocompleteStyles from './searchautocomplete.css';\nimport searchStyles from '@adobe/spectrum-css-temp/components/search/vars.css';\nimport {setInteractionModality, useHover} from '@react-aria/interactions';\nimport {SpectrumSearchAutocompleteProps} from '@react-types/autocomplete';\nimport styles from '@adobe/spectrum-css-temp/components/inputgroup/vars.css';\nimport {TextFieldBase} from '@react-spectrum/textfield';\nimport textfieldStyles from '@adobe/spectrum-css-temp/components/textfield/vars.css';\nimport {Tray} from '@react-spectrum/overlays';\nimport {useButton} from '@react-aria/button';\nimport {useDialog} from '@react-aria/dialog';\nimport {useField} from '@react-aria/label';\nimport {useFilter, useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useFormValidation} from '@react-aria/form';\nimport {useProviderProps} from '@react-spectrum/provider';\nimport {useSearchAutocomplete} from '@react-aria/autocomplete';\n\nfunction _MobileSearchAutocomplete<T extends object>(props: SpectrumSearchAutocompleteProps<T>, ref: FocusableRef<HTMLElement>) {\n props = useProviderProps(props);\n\n let {\n isQuiet,\n isDisabled,\n isRequired,\n validationBehavior,\n validate,\n name,\n isReadOnly,\n onSubmit = () => {}\n } = props;\n\n let {contains} = useFilter({sensitivity: 'base'});\n let state = useComboBoxState({\n ...props,\n defaultFilter: contains,\n allowsEmptyCollection: true,\n // Needs to be false here otherwise we double up on commitSelection/commitCustomValue calls when\n // user taps on underlay (i.e. initial tap will call setFocused(false) -> commitSelection/commitCustomValue via onBlur,\n // then the closing of the tray will call setFocused(false) again due to cleanup effect)\n shouldCloseOnBlur: false,\n allowsCustomValue: true,\n onSelectionChange: (key) => key !== null && onSubmit(null, key),\n selectedKey: undefined,\n defaultSelectedKey: undefined,\n validate: useCallback(v => validate?.(v.inputValue), [validate])\n });\n\n let buttonRef = useRef<HTMLDivElement>(null);\n let domRef = useFocusableRef(ref, buttonRef);\n let {triggerProps, overlayProps} = useOverlayTrigger({type: 'listbox'}, state, buttonRef);\n\n let inputRef = useRef<HTMLInputElement>(null);\n useFormValidation({\n ...props,\n focus: () => buttonRef.current?.focus()\n }, state, inputRef);\n let {isInvalid, validationErrors, validationDetails} = state.displayValidation;\n let validationState = props.validationState || (isInvalid ? 'invalid' : undefined);\n let errorMessage = props.errorMessage ?? validationErrors.join(' ');\n\n let {labelProps, fieldProps, descriptionProps, errorMessageProps} = useField({\n ...props,\n labelElementType: 'span',\n isInvalid,\n errorMessage\n });\n\n // Focus the button and show focus ring when clicking on the label\n labelProps.onClick = () => {\n if (!props.isDisabled && buttonRef.current) {\n buttonRef.current.focus();\n setInteractionModality('keyboard');\n }\n };\n\n let inputProps: InputHTMLAttributes<HTMLInputElement> = {\n type: 'hidden',\n name,\n value: state.inputValue\n };\n\n if (validationBehavior === 'native') {\n // Use a hidden <input type=\"text\"> rather than <input type=\"hidden\">\n // so that an empty value blocks HTML form submission when the field is required.\n inputProps.type = 'text';\n inputProps.hidden = true;\n inputProps.required = isRequired;\n // Ignore react warning.\n inputProps.onChange = () => {};\n }\n\n useFormReset(inputRef, state.inputValue, state.setInputValue);\n\n return (\n <>\n <Field\n {...props}\n labelProps={labelProps}\n descriptionProps={descriptionProps}\n errorMessageProps={errorMessageProps}\n isInvalid={isInvalid}\n validationErrors={validationErrors}\n validationDetails={validationDetails}\n elementType=\"span\"\n ref={domRef}\n includeNecessityIndicatorInAccessibilityName>\n <SearchAutocompleteButton\n {...mergeProps(triggerProps, fieldProps, {autoFocus: props.autoFocus, icon: props.icon})}\n ref={buttonRef}\n isQuiet={isQuiet}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isPlaceholder={!state.inputValue}\n validationState={validationState}\n inputValue={state.inputValue}\n clearInput={() => state.setInputValue('')}\n onPress={() => !isReadOnly && state.open(null, 'manual')}>\n {state.inputValue || props.placeholder || ''}\n </SearchAutocompleteButton>\n </Field>\n <input {...inputProps} ref={inputRef} />\n <Tray state={state} isFixedHeight {...overlayProps}>\n <SearchAutocompleteTray\n {...props}\n onClose={state.close}\n overlayProps={overlayProps}\n state={state} />\n </Tray>\n </>\n );\n}\n\nexport let MobileSearchAutocomplete = React.forwardRef(_MobileSearchAutocomplete) as <T>(props: SpectrumSearchAutocompleteProps<T> & {ref?: FocusableRef<HTMLElement>}) => ReactElement;\n\n\ninterface SearchAutocompleteButtonProps extends AriaButtonProps {\n icon?: ReactElement | null,\n isQuiet?: boolean,\n isDisabled?: boolean,\n isReadOnly?: boolean,\n isPlaceholder?: boolean,\n validationState?: ValidationState,\n inputValue?: string,\n clearInput?: () => void,\n children?: ReactNode,\n style?: React.CSSProperties,\n className?: string\n}\n\n// any type is because we don't want to call useObjectRef because this is an internal component and we know\n// we are always passing an object ref\nconst SearchAutocompleteButton = React.forwardRef(function SearchAutocompleteButton(props: SearchAutocompleteButtonProps, ref: any) {\n let searchIcon = (\n <Magnifier data-testid=\"searchicon\" />\n );\n\n let {\n icon = searchIcon,\n isQuiet,\n isDisabled,\n isReadOnly,\n isPlaceholder,\n validationState,\n inputValue,\n clearInput,\n children,\n style,\n className\n} = props;\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/autocomplete');\n let valueId = useId();\n let invalidId = useId();\n let validationIcon = validationState === 'invalid'\n ? <AlertMedium id={invalidId} aria-label={stringFormatter.format('invalid')} />\n : <CheckmarkMedium />;\n\n if (icon) {\n icon = React.cloneElement(icon, {\n UNSAFE_className: classNames(\n textfieldStyles,\n 'spectrum-Textfield-icon'\n ),\n size: 'S'\n });\n }\n\n let clearButton = (\n <ClearButton\n onPress={(e) => {\n clearInput?.();\n props?.onPress?.(e);\n }}\n preventFocus\n aria-label={stringFormatter.format('clear')}\n excludeFromTabOrder\n UNSAFE_className={\n classNames(\n searchStyles,\n 'spectrum-ClearButton'\n )\n }\n isDisabled={isDisabled} />\n );\n\n let validation = React.cloneElement(validationIcon, {\n UNSAFE_className: classNames(\n textfieldStyles,\n 'spectrum-Textfield-validationIcon',\n classNames(\n styles,\n 'spectrum-InputGroup-input-validationIcon'\n ),\n classNames(\n searchStyles,\n 'spectrum-Search-validationIcon'\n )\n )\n });\n\n let {hoverProps, isHovered} = useHover({});\n let {isFocused, isFocusVisible, focusProps} = useFocusRing();\n let {buttonProps} = useButton({\n ...props,\n 'aria-labelledby': [\n props['aria-labelledby'],\n props['aria-label'] && !props['aria-labelledby'] ? props.id : null,\n valueId,\n validationState === 'invalid' ? invalidId : null\n ].filter(Boolean).join(' '),\n elementType: 'div'\n }, ref);\n\n return (\n <div\n {...mergeProps(hoverProps, focusProps, buttonProps)}\n aria-haspopup=\"dialog\"\n ref={ref}\n style={{...style, outline: 'none'}}\n className={\n classNames(\n styles,\n 'spectrum-InputGroup',\n {\n 'spectrum-InputGroup--quiet': isQuiet,\n 'is-disabled': isDisabled,\n 'spectrum-InputGroup--invalid': validationState === 'invalid' && !isDisabled,\n 'is-hovered': isHovered,\n 'is-focused': isFocused,\n 'focus-ring': isFocusVisible\n },\n classNames(\n searchAutocompleteStyles,\n 'searchautocomplete',\n 'mobile-searchautocomplete'\n ),\n className\n )\n }>\n <div\n className={\n classNames(\n textfieldStyles,\n 'spectrum-Textfield',\n {\n 'spectrum-Textfield--invalid': validationState === 'invalid' && !isDisabled,\n 'spectrum-Textfield--valid': validationState === 'valid' && !isDisabled,\n 'spectrum-Textfield--quiet': isQuiet\n },\n classNames(\n searchStyles,\n 'spectrum-Search',\n 'spectrum-Search--loadable',\n {\n 'is-disabled': isDisabled,\n 'is-quiet': isQuiet,\n 'spectrum-Search--invalid': validationState === 'invalid' && !isDisabled,\n 'spectrum-Search--valid': validationState === 'valid' && !isDisabled\n }\n ),\n classNames(\n styles,\n 'spectrum-InputGroup-field'\n )\n )\n }>\n <div\n className={\n classNames(\n textfieldStyles,\n 'spectrum-Textfield-input',\n {\n 'spectrum-Textfield-inputIcon': !!icon,\n 'is-hovered': isHovered,\n 'is-placeholder': isPlaceholder,\n 'is-disabled': isDisabled,\n 'is-quiet': isQuiet,\n 'is-focused': isFocused\n },\n classNames(\n searchStyles,\n 'spectrum-Search-input'\n ),\n classNames(\n searchAutocompleteStyles,\n 'mobile-input'\n )\n )\n }>\n {icon}\n <span\n id={valueId}\n className={\n classNames(\n searchAutocompleteStyles,\n 'mobile-value'\n )\n }>\n {children}\n </span>\n </div>\n {validationState && !isDisabled ? validation : null}\n {(inputValue !== '' || validationState != null) && !isReadOnly && clearButton}\n </div>\n </div>\n );\n});\n\ninterface SearchAutocompleteTrayProps<T> extends SpectrumSearchAutocompleteProps<T> {\n state: ComboBoxState<T>,\n overlayProps: HTMLAttributes<HTMLElement>,\n loadingIndicator?: ReactElement,\n onClose: () => void\n}\n\nfunction SearchAutocompleteTray<T>(props: SearchAutocompleteTrayProps<T>) {\n let searchIcon = (\n <Magnifier data-testid=\"searchicon\" />\n );\n\n let {\n // completionMode = 'suggest',\n state,\n icon = searchIcon,\n isDisabled,\n validationState,\n label,\n overlayProps,\n loadingState,\n onLoadMore,\n onClose,\n onSubmit\n } = props;\n\n let timeout = useRef<ReturnType<typeof setTimeout> | null>(null);\n let [showLoading, setShowLoading] = useState(false);\n let inputRef = useRef<HTMLInputElement>(null);\n let popoverRef = useRef<HTMLDivElement>(null);\n let listBoxRef = useRef<HTMLDivElement>(null);\n let isLoading = loadingState === 'loading' || loadingState === 'loadingMore';\n let layout = useListBoxLayout(state, isLoading);\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/autocomplete');\n\n let {inputProps, listBoxProps, labelProps, clearButtonProps} = useSearchAutocomplete<T>(\n {\n ...props,\n keyboardDelegate: layout,\n popoverRef: popoverRef,\n listBoxRef,\n inputRef,\n // Handled outside the tray.\n name: undefined\n },\n state\n );\n\n React.useEffect(() => {\n if (inputRef.current) {\n focusSafely(inputRef.current);\n }\n }, []);\n\n React.useEffect(() => {\n // When the tray closes, set state.isFocused (i.e. the tray input's focus tracker) to false.\n // This is to prevent state.isFocused from being set to true when the tray closes via tapping on the underlay\n // (FocusScope attempts to restore focus to the tray input when tapping outside the tray due to \"contain\")\n // Have to do this manually since React doesn't call onBlur when a component is unmounted: https://github.com/facebook/react/issues/12363\n if (!state.isOpen && state.isFocused) {\n state.setFocused(false);\n }\n });\n\n let {dialogProps} = useDialog({\n 'aria-labelledby': useId(labelProps.id)\n }, popoverRef);\n\n // Override the role of the input to \"searchbox\" instead of \"combobox\".\n // Since the listbox is always visible, the combobox role doesn't really give us anything.\n // VoiceOver on iOS reads \"double tap to collapse\" when focused on the input rather than\n // \"double tap to edit text\", as with a textbox or searchbox. We'd like double tapping to\n // open the virtual keyboard rather than closing the tray.\n inputProps.role = 'searchbox';\n inputProps['aria-haspopup'] = 'listbox';\n delete inputProps.onTouchEnd;\n\n let clearButton = (\n <ClearButton\n {...clearButtonProps}\n preventFocus\n aria-label={stringFormatter.format('clear')}\n excludeFromTabOrder\n UNSAFE_className={\n classNames(\n searchStyles,\n 'spectrum-ClearButton'\n )\n }\n isDisabled={isDisabled} />\n );\n\n let loadingCircle = (\n <ProgressCircle\n aria-label={stringFormatter.format('loading')}\n size=\"S\"\n isIndeterminate\n UNSAFE_className={classNames(\n searchStyles,\n 'spectrum-Search-circleLoader',\n classNames(\n textfieldStyles,\n 'spectrum-Textfield-circleLoader'\n )\n )} />\n );\n\n // Close the software keyboard on scroll to give the user a bigger area to scroll.\n // But only do this if scrolling with touch, otherwise it can cause issues with touch\n // screen readers.\n let isTouchDown = useRef(false);\n let onTouchStart = () => {\n isTouchDown.current = true;\n };\n\n let onTouchEnd = () => {\n isTouchDown.current = false;\n };\n\n let onScroll = useCallback(() => {\n if (!inputRef.current || document.activeElement !== inputRef.current || !isTouchDown.current) {\n return;\n }\n\n if (popoverRef.current) {\n popoverRef.current.focus();\n }\n }, [inputRef, popoverRef, isTouchDown]);\n\n let inputValue = inputProps.value;\n let lastInputValue = useRef(inputValue);\n useEffect(() => {\n if (loadingState === 'filtering' && !showLoading) {\n if (timeout.current === null) {\n timeout.current = setTimeout(() => {\n setShowLoading(true);\n }, 500);\n }\n\n // If user is typing, clear the timer and restart since it is a new request\n if (inputValue !== lastInputValue.current) {\n clearTimeout(timeout.current);\n timeout.current = setTimeout(() => {\n setShowLoading(true);\n }, 500);\n }\n } else if (loadingState !== 'filtering') {\n // If loading is no longer happening, clear any timers and hide the loading circle\n setShowLoading(false);\n if (timeout.current !== null) {\n clearTimeout(timeout.current);\n timeout.current = null;\n }\n }\n\n lastInputValue.current = inputValue;\n }, [loadingState, inputValue, showLoading]);\n\n let onKeyDown = (e) => {\n // Close virtual keyboard, close tray, and fire onSubmit if user hits Enter w/o any focused options\n if (e.key === 'Enter' && state.selectionManager.focusedKey == null) {\n popoverRef.current?.focus();\n if (onClose) {\n onClose();\n }\n if (onSubmit) {\n onSubmit(inputValue == null ? null : inputValue.toString(), null);\n }\n } else {\n if (inputProps.onKeyDown) {\n inputProps.onKeyDown(e);\n }\n }\n };\n\n if (icon) {\n icon = React.cloneElement(icon, {\n UNSAFE_className: classNames(\n textfieldStyles,\n 'spectrum-Textfield-icon'\n ),\n size: 'S'\n });\n }\n\n return (\n <FocusScope restoreFocus contain>\n <div\n {...mergeProps(overlayProps, dialogProps)}\n ref={popoverRef}\n className={\n classNames(\n searchAutocompleteStyles,\n 'tray-dialog'\n )\n }>\n <DismissButton onDismiss={onClose} />\n <TextFieldBase\n label={label}\n labelProps={labelProps}\n inputProps={{...inputProps, onKeyDown}}\n inputRef={inputRef}\n isDisabled={isDisabled}\n isLoading={showLoading && loadingState === 'filtering'}\n loadingIndicator={loadingState != null ? loadingCircle : undefined}\n validationState={validationState}\n wrapperChildren={((state.inputValue !== '' || loadingState === 'filtering' || validationState != null) && !props.isReadOnly) ? clearButton : undefined}\n icon={icon}\n UNSAFE_className={\n classNames(\n searchStyles,\n 'spectrum-Search',\n 'spectrum-Textfield',\n 'spectrum-Search--loadable',\n {\n 'spectrum-Search--invalid': validationState === 'invalid' && !isDisabled,\n 'spectrum-Search--valid': validationState === 'valid' && !isDisabled\n },\n classNames(\n searchAutocompleteStyles,\n 'tray-textfield',\n {\n 'has-label': !!props.label\n }\n )\n )\n }\n inputClassName={\n classNames(\n searchStyles,\n 'spectrum-Search-input'\n )\n }\n validationIconClassName={\n classNames(\n searchStyles,\n 'spectrum-Search-validationIcon'\n )\n } />\n <ListBoxBase\n {...listBoxProps}\n domProps={{onTouchStart, onTouchEnd}}\n disallowEmptySelection\n shouldSelectOnPressUp\n focusOnPointerEnter\n layout={layout}\n state={state}\n shouldUseVirtualFocus\n renderEmptyState={() => loadingState !== 'loading' && (\n <span className={classNames(searchAutocompleteStyles, 'no-results')}>\n {stringFormatter.format('noResults')}\n </span>\n )}\n UNSAFE_className={\n classNames(\n searchAutocompleteStyles,\n 'tray-listbox'\n )\n }\n ref={listBoxRef}\n onScroll={onScroll}\n onLoadMore={onLoadMore}\n isLoading={isLoading} />\n <DismissButton onDismiss={onClose} />\n </div>\n </FocusScope>\n );\n}\n"],"names":[],"version":3,"file":"MobileSearchAutocomplete.module.js.map"}
|
|
1
|
+
{"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;CAUC;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CD,SAAS,gDAA4C,KAAyC,EAAE,GAA8B;IAC5H,QAAQ,CAAA,GAAA,uBAAe,EAAE;IAEzB,IAAI,WACF,OAAO,cACP,UAAU,cACV,UAAU,sBACV,kBAAkB,YAClB,QAAQ,QACR,IAAI,cACJ,UAAU,YACV,WAAW,KAAO,GACnB,GAAG;IAEJ,IAAI,YAAC,QAAQ,EAAC,GAAG,CAAA,GAAA,gBAAQ,EAAE;QAAC,aAAa;IAAM;IAC/C,IAAI,QAAQ,CAAA,GAAA,uBAAe,EAAE;QAC3B,GAAG,KAAK;QACR,eAAe;QACf,uBAAuB;QACvB,gGAAgG;QAChG,uHAAuH;QACvH,wFAAwF;QACxF,mBAAmB;QACnB,mBAAmB;QACnB,mBAAmB,CAAC,MAAQ,QAAQ,QAAQ,SAAS,MAAM;QAC3D,aAAa;QACb,oBAAoB;QACpB,UAAU,CAAA,GAAA,kBAAU,EAAE,CAAA,IAAK,qBAAA,+BAAA,SAAW,EAAE,UAAU,GAAG;YAAC;SAAS;IACjE;IAEA,IAAI,YAAY,CAAA,GAAA,aAAK,EAAkB;IACvC,IAAI,SAAS,CAAA,GAAA,sBAAc,EAAE,KAAK;IAClC,IAAI,gBAAC,YAAY,gBAAE,YAAY,EAAC,GAAG,CAAA,GAAA,wBAAgB,EAAE;QAAC,MAAM;IAAS,GAAG,OAAO;IAE/E,IAAI,WAAW,CAAA,GAAA,aAAK,EAAoB;IACxC,CAAA,GAAA,wBAAgB,EAAE;QAChB,GAAG,KAAK;QACR,OAAO;gBAAM;oBAAA,qBAAA,UAAU,OAAO,cAAjB,yCAAA,mBAAmB,KAAK;;IACvC,GAAG,OAAO;IACV,IAAI,aAAC,SAAS,oBAAE,gBAAgB,qBAAE,iBAAiB,EAAC,GAAG,MAAM,iBAAiB;IAC9E,IAAI,kBAAkB,MAAM,eAAe,IAAK,CAAA,YAAY,YAAY,SAAQ;QAC7D;IAAnB,IAAI,eAAe,CAAA,sBAAA,MAAM,YAAY,cAAlB,iCAAA,sBAAsB,iBAAiB,IAAI,CAAC;IAE/D,IAAI,cAAC,UAAU,cAAE,UAAU,oBAAE,gBAAgB,qBAAE,iBAAiB,EAAC,GAAG,CAAA,GAAA,eAAO,EAAE;QAC3E,GAAG,KAAK;QACR,kBAAkB;mBAClB;sBACA;IACF;IAEA,kEAAkE;IAClE,WAAW,OAAO,GAAG;QACnB,IAAI,CAAC,MAAM,UAAU,IAAI,UAAU,OAAO,EAAE;YAC1C,UAAU,OAAO,CAAC,KAAK;YACvB,CAAA,GAAA,6BAAqB,EAAE;QACzB;IACF;IAEA,IAAI,aAAoD;QACtD,MAAM;cACN;QACA,OAAO,MAAM,UAAU;IACzB;IAEA,IAAI,uBAAuB,UAAU;QACnC,qEAAqE;QACrE,iFAAiF;QACjF,WAAW,IAAI,GAAG;QAClB,WAAW,MAAM,GAAG;QACpB,WAAW,QAAQ,GAAG;QACtB,wBAAwB;QACxB,WAAW,QAAQ,GAAG,KAAO;IAC/B;IAEA,CAAA,GAAA,mBAAW,EAAE,UAAU,MAAM,UAAU,EAAE,MAAM,aAAa;IAE5D,qBACE,gFACE,gCAAC,CAAA,GAAA,YAAI;QACF,GAAG,KAAK;QACT,YAAY;QACZ,kBAAkB;QAClB,mBAAmB;QACnB,WAAW;QACX,kBAAkB;QAClB,mBAAmB;QACnB,aAAY;QACZ,KAAK;QACL,8CAAA;qBACA,gCAAC;QACE,GAAG,CAAA,GAAA,iBAAS,EAAE,cAAc,YAAY;YAAC,WAAW,MAAM,SAAS;YAAE,MAAM,MAAM,IAAI;QAAA,EAAE;QACxF,KAAK;QACL,SAAS;QACT,YAAY;QACZ,YAAY;QACZ,eAAe,CAAC,MAAM,UAAU;QAChC,iBAAiB;QACjB,YAAY,MAAM,UAAU;QAC5B,YAAY,IAAM,MAAM,aAAa,CAAC;QACtC,SAAS,IAAM,CAAC,cAAc,MAAM,IAAI,CAAC,MAAM;OAC9C,MAAM,UAAU,IAAI,MAAM,WAAW,IAAI,oBAG9C,gCAAC;QAAO,GAAG,UAAU;QAAE,KAAK;sBAC5B,gCAAC,CAAA,GAAA,WAAG;QAAE,OAAO;QAAO,eAAA;QAAe,GAAG,YAAY;qBAChD,gCAAC;QACE,GAAG,KAAK;QACT,SAAS,MAAM,KAAK;QACpB,cAAc;QACd,OAAO;;AAIjB;AAEO,IAAI,0DAA2B,CAAA,GAAA,YAAI,EAAE,UAAU,CAAC;AAiBvD,2GAA2G;AAC3G,sCAAsC;AACtC,MAAM,+DAA2B,CAAA,GAAA,YAAI,EAAE,UAAU,CAAC,SAAS,yBAAyB,KAAoC,EAAE,GAAQ;IAChI,IAAI,2BACF,gCAAC,CAAA,GAAA,+BAAQ;QAAE,eAAY;;IAGzB,IAAI,QACF,OAAO,qBACP,OAAO,cACP,UAAU,cACV,UAAU,iBACV,aAAa,mBACb,eAAe,cACf,UAAU,cACV,UAAU,YACV,QAAQ,SACR,KAAK,aACL,SAAS,EACZ,GAAG;IACF,IAAI,kBAAkB,CAAA,GAAA,kCAA0B,EAAE,CAAA,GAAA,oDAAW,GAAG;IAChE,IAAI,UAAU,CAAA,GAAA,YAAI;IAClB,IAAI,YAAY,CAAA,GAAA,YAAI;IACpB,IAAI,iBAAiB,oBAAoB,0BACrC,gCAAC,CAAA,GAAA,iCAAU;QAAE,IAAI;QAAW,cAAY,gBAAgB,MAAM,CAAC;uBAC/D,gCAAC,CAAA,GAAA,qCAAc;IAEnB,IAAI,MACF,qBAAO,CAAA,GAAA,YAAI,EAAE,YAAY,CAAC,MAAM;QAC9B,kBAAkB,CAAA,GAAA,iBAAS,EACzB,CAAA,GAAA,2DAAc,GACd;QAEF,MAAM;IACR;IAGF,IAAI,4BACF,gCAAC,CAAA,GAAA,kBAAU;QACT,SAAS,CAAC;gBAER;YADA,uBAAA,iCAAA;YACA,kBAAA,6BAAA,iBAAA,MAAO,OAAO,cAAd,qCAAA,oBAAA,OAAiB;QACnB;QACA,cAAA;QACA,cAAY,gBAAgB,MAAM,CAAC;QACnC,qBAAA;QACA,kBACE,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,wDAAW,GACX;QAGJ,YAAY;;IAGhB,IAAI,2BAAa,CAAA,GAAA,YAAI,EAAE,YAAY,CAAC,gBAAgB;QAClD,kBAAkB,CAAA,GAAA,iBAAS,EACzB,CAAA,GAAA,2DAAc,GACd,qCACA,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,4DAAK,GACL,6CAEF,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,wDAAW,GACX;IAGN;IAEA,IAAI,cAAC,UAAU,aAAE,SAAS,EAAC,GAAG,CAAA,GAAA,eAAO,EAAE,CAAC;IACxC,IAAI,aAAC,SAAS,kBAAE,cAAc,cAAE,UAAU,EAAC,GAAG,CAAA,GAAA,mBAAW;IACzD,IAAI,eAAC,WAAW,EAAC,GAAG,CAAA,GAAA,gBAAQ,EAAE;QAC5B,GAAG,KAAK;QACR,mBAAmB;YACjB,KAAK,CAAC,kBAAkB;YACxB,KAAK,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,kBAAkB,GAAG,MAAM,EAAE,GAAG;YAC9D;YACA,oBAAoB,YAAY,YAAY;SAC7C,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC;QACvB,aAAa;IACf,GAAG;IAEH,qBACE,gCAAC;QACE,GAAG,CAAA,GAAA,iBAAS,EAAE,YAAY,YAAY,YAAY;QACnD,iBAAc;QACd,KAAK;QACL,OAAO;YAAC,GAAG,KAAK;YAAE,SAAS;QAAM;QACjC,WACE,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,4DAAK,GACL,uBACA;YACE,8BAA8B;YAC9B,eAAe;YACf,gCAAgC,oBAAoB,aAAa,CAAC;YAClE,cAAc;YACd,cAAc;YACd,cAAc;QAChB,GACA,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,+DAAuB,GACvB,sBACA,8BAEF;qBAGJ,gCAAC;QACC,WACE,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,2DAAc,GACd,sBACA;YACE,+BAA+B,oBAAoB,aAAa,CAAC;YACjE,6BAA6B,oBAAoB,WAAW,CAAC;YAC7D,6BAA6B;QAC/B,GACA,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,wDAAW,GACX,mBACA,6BACA;YACE,eAAe;YACf,YAAY;YACZ,4BAA4B,oBAAoB,aAAa,CAAC;YAC9D,0BAA0B,oBAAoB,WAAW,CAAC;QAC5D,IAEF,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,4DAAK,GACL;qBAIN,gCAAC;QACC,WACE,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,2DAAc,GACd,4BACA;YACE,gCAAgC,CAAC,CAAC;YAClC,cAAc;YACd,kBAAkB;YAClB,eAAe;YACf,YAAY;YACZ,cAAc;QAChB,GACA,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,wDAAW,GACX,0BAEF,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,+DAAuB,GACvB;OAIL,oBACD,gCAAC;QACC,IAAI;QACJ,WACE,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,+DAAuB,GACvB;OAGH,YAGJ,mBAAmB,CAAC,aAAa,aAAa,MAC9C,AAAC,CAAA,eAAe,MAAM,mBAAmB,IAAG,KAAM,CAAC,cAAc;AAI1E;AASA,SAAS,6CAA0B,KAAqC;IACtE,IAAI,2BACF,gCAAC,CAAA,GAAA,+BAAQ;QAAE,eAAY;;IAGzB,IAAI,SACF,8BAA8B;IAC9B,KAAK,QACL,OAAO,wBACP,UAAU,mBACV,eAAe,SACf,KAAK,gBACL,YAAY,gBACZ,YAAY,cACZ,UAAU,WACV,OAAO,YACP,QAAQ,EACT,GAAG;IAEJ,IAAI,UAAU,CAAA,GAAA,aAAK,EAAwC;IAC3D,IAAI,CAAC,aAAa,eAAe,GAAG,CAAA,GAAA,eAAO,EAAE;IAC7C,IAAI,WAAW,CAAA,GAAA,aAAK,EAAoB;IACxC,IAAI,aAAa,CAAA,GAAA,aAAK,EAAkB;IACxC,IAAI,aAAa,CAAA,GAAA,aAAK,EAAkB;IACxC,IAAI,YAAY,iBAAiB,aAAa,iBAAiB;IAC/D,IAAI,SAAS,CAAA,GAAA,uBAAe;IAC5B,IAAI,kBAAkB,CAAA,GAAA,kCAA0B,EAAE,CAAA,GAAA,oDAAW,GAAG;IAEhE,IAAI,cAAC,UAAU,gBAAE,YAAY,cAAE,UAAU,oBAAE,gBAAgB,EAAC,GAAG,CAAA,GAAA,4BAAoB,EACjF;QACE,GAAG,KAAK;QACR,gBAAgB;QAChB,YAAY;oBACZ;kBACA;QACA,4BAA4B;QAC5B,MAAM;IACR,GACA;IAGF,CAAA,GAAA,YAAI,EAAE,SAAS,CAAC;QACd,IAAI,SAAS,OAAO,EAClB,CAAA,GAAA,kBAAU,EAAE,SAAS,OAAO;IAEhC,GAAG,EAAE;IAEL,CAAA,GAAA,YAAI,EAAE,SAAS,CAAC;QACd,4FAA4F;QAC5F,6GAA6G;QAC7G,0GAA0G;QAC1G,yIAAyI;QACzI,IAAI,CAAC,MAAM,MAAM,IAAI,MAAM,SAAS,EAClC,MAAM,UAAU,CAAC;IAErB;IAEA,IAAI,eAAC,WAAW,EAAC,GAAG,CAAA,GAAA,gBAAQ,EAAE;QAC5B,mBAAmB,CAAA,GAAA,YAAI,EAAE,WAAW,EAAE;IACxC,GAAG;IAEH,uEAAuE;IACvE,0FAA0F;IAC1F,wFAAwF;IACxF,yFAAyF;IACzF,0DAA0D;IAC1D,WAAW,IAAI,GAAG;IAClB,UAAU,CAAC,gBAAgB,GAAG;IAC9B,OAAO,WAAW,UAAU;IAE5B,IAAI,4BACF,gCAAC,CAAA,GAAA,kBAAU;QACR,GAAG,gBAAgB;QACpB,cAAA;QACA,cAAY,gBAAgB,MAAM,CAAC;QACnC,qBAAA;QACA,kBACE,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,wDAAW,GACX;QAGJ,YAAY;;IAGhB,IAAI,8BACF,gCAAC,CAAA,GAAA,qBAAa;QACZ,cAAY,gBAAgB,MAAM,CAAC;QACnC,MAAK;QACL,iBAAA;QACA,kBAAkB,CAAA,GAAA,iBAAS,EACzB,CAAA,GAAA,wDAAW,GACX,gCACA,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,2DAAc,GACd;;IAKR,kFAAkF;IAClF,qFAAqF;IACrF,kBAAkB;IAClB,IAAI,cAAc,CAAA,GAAA,aAAK,EAAE;IACzB,IAAI,eAAe;QACjB,YAAY,OAAO,GAAG;IACxB;IAEA,IAAI,aAAa;QACf,YAAY,OAAO,GAAG;IACxB;IAEA,IAAI,WAAW,CAAA,GAAA,kBAAU,EAAE;QACzB,IAAI,CAAC,SAAS,OAAO,IAAI,SAAS,aAAa,KAAK,SAAS,OAAO,IAAI,CAAC,YAAY,OAAO,EAC1F;QAGF,IAAI,WAAW,OAAO,EACpB,WAAW,OAAO,CAAC,KAAK;IAE5B,GAAG;QAAC;QAAU;QAAY;KAAY;IAEtC,IAAI,aAAa,WAAW,KAAK;IACjC,IAAI,iBAAiB,CAAA,GAAA,aAAK,EAAE;IAC5B,CAAA,GAAA,gBAAQ,EAAE;QACR,IAAI,iBAAiB,eAAe,CAAC,aAAa;YAChD,IAAI,QAAQ,OAAO,KAAK,MACtB,QAAQ,OAAO,GAAG,WAAW;gBAC3B,eAAe;YACjB,GAAG;YAGL,2EAA2E;YAC3E,IAAI,eAAe,eAAe,OAAO,EAAE;gBACzC,aAAa,QAAQ,OAAO;gBAC5B,QAAQ,OAAO,GAAG,WAAW;oBAC3B,eAAe;gBACjB,GAAG;YACL;QACF,OAAO,IAAI,iBAAiB,aAAa;YACvC,kFAAkF;YAClF,eAAe;YACf,IAAI,QAAQ,OAAO,KAAK,MAAM;gBAC5B,aAAa,QAAQ,OAAO;gBAC5B,QAAQ,OAAO,GAAG;YACpB;QACF;QAEA,eAAe,OAAO,GAAG;IAC3B,GAAG;QAAC;QAAc;QAAY;KAAY;IAE1C,IAAI,YAAY,CAAC;QACf,mGAAmG;QACnG,IAAI,EAAE,GAAG,KAAK,WAAW,MAAM,gBAAgB,CAAC,UAAU,IAAI,MAAM;gBAClE;aAAA,sBAAA,WAAW,OAAO,cAAlB,0CAAA,oBAAoB,KAAK;YACzB,IAAI,SACF;YAEF,IAAI,UACF,SAAS,cAAc,OAAO,OAAO,WAAW,QAAQ,IAAI;QAEhE,OACE,IAAI,WAAW,SAAS,EACtB,WAAW,SAAS,CAAC;IAG3B;IAEA,IAAI,MACF,qBAAO,CAAA,GAAA,YAAI,EAAE,YAAY,CAAC,MAAM;QAC9B,kBAAkB,CAAA,GAAA,iBAAS,EACvB,CAAA,GAAA,2DAAc,GACd;QAEJ,MAAM;IACR;IAGF,qBACE,gCAAC,CAAA,GAAA,iBAAS;QAAE,cAAA;QAAa,SAAA;qBACvB,gCAAC;QACE,GAAG,CAAA,GAAA,iBAAS,EAAE,cAAc,YAAY;QACzC,KAAK;QACL,WACE,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,+DAAuB,GACvB;qBAGJ,gCAAC,CAAA,GAAA,oBAAY;QAAE,WAAW;sBAC1B,gCAAC,CAAA,GAAA,oBAAY;QACX,OAAO;QACP,YAAY;QACZ,YAAY;YAAC,GAAG,UAAU;uBAAE;QAAS;QACrC,UAAU;QACV,YAAY;QACZ,WAAW,eAAe,iBAAiB;QAC3C,kBAAkB,gBAAgB,OAAO,gBAAgB;QACzD,iBAAiB;QACjB,iBAAiB,AAAC,AAAC,CAAA,MAAM,UAAU,KAAK,MAAM,iBAAiB,eAAe,mBAAmB,IAAG,KAAM,CAAC,MAAM,UAAU,GAAI,cAAc;QAC7I,MAAM;QACN,kBACE,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,wDAAW,GACX,mBACA,sBACA,6BACA;YACE,4BAA4B,oBAAoB,aAAa,CAAC;YAC9D,0BAA0B,oBAAoB,WAAW,CAAC;QAC5D,GACA,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,+DAAuB,GACvB,kBACA;YACE,aAAa,CAAC,CAAC,MAAM,KAAK;QAC5B;QAIN,gBACE,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,wDAAW,GACX;QAGJ,yBACE,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,wDAAW,GACX;sBAGN,gCAAC,CAAA,GAAA,kBAAU;QACR,GAAG,YAAY;QAChB,UAAU;0BAAC;wBAAc;QAAU;QACnC,wBAAA;QACA,uBAAA;QACA,qBAAA;QACA,QAAQ;QACR,OAAO;QACP,uBAAA;QACA,kBAAkB,IAAM,iBAAiB,2BACvC,gCAAC;gBAAK,WAAW,CAAA,GAAA,iBAAS,EAAE,CAAA,GAAA,+DAAuB,GAAG;eACnD,gBAAgB,MAAM,CAAC;QAG5B,kBACE,CAAA,GAAA,iBAAS,EACP,CAAA,GAAA,+DAAuB,GACvB;QAGJ,KAAK;QACL,UAAU;QACV,YAAY;QACZ,WAAW;sBACb,gCAAC,CAAA,GAAA,oBAAY;QAAE,WAAW;;AAIlC","sources":["packages/@react-spectrum/autocomplete/src/MobileSearchAutocomplete.tsx"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport AlertMedium from '@spectrum-icons/ui/AlertMedium';\nimport {AriaButtonProps} from '@react-types/button';\nimport CheckmarkMedium from '@spectrum-icons/ui/CheckmarkMedium';\nimport {classNames, useFocusableRef} from '@react-spectrum/utils';\nimport {ClearButton} from '@react-spectrum/button';\nimport {ComboBoxState, useComboBoxState} from '@react-stately/combobox';\nimport {DismissButton, useOverlayTrigger} from '@react-aria/overlays';\nimport {Field} from '@react-spectrum/label';\nimport {FocusableRef, ValidationState} from '@react-types/shared';\nimport {focusSafely, FocusScope, useFocusRing} from '@react-aria/focus';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {ListBoxBase, useListBoxLayout} from '@react-spectrum/listbox';\nimport Magnifier from '@spectrum-icons/ui/Magnifier';\nimport {mergeProps, useFormReset, useId} from '@react-aria/utils';\nimport {ProgressCircle} from '@react-spectrum/progress';\nimport React, {\n HTMLAttributes,\n InputHTMLAttributes,\n ReactElement,\n ReactNode,\n useCallback,\n useEffect,\n useRef,\n useState\n} from 'react';\nimport searchAutocompleteStyles from './searchautocomplete.css';\nimport searchStyles from '@adobe/spectrum-css-temp/components/search/vars.css';\nimport {setInteractionModality, useHover} from '@react-aria/interactions';\nimport {SpectrumSearchAutocompleteProps} from '@react-types/autocomplete';\nimport styles from '@adobe/spectrum-css-temp/components/inputgroup/vars.css';\nimport {TextFieldBase} from '@react-spectrum/textfield';\nimport textfieldStyles from '@adobe/spectrum-css-temp/components/textfield/vars.css';\nimport {Tray} from '@react-spectrum/overlays';\nimport {useButton} from '@react-aria/button';\nimport {useDialog} from '@react-aria/dialog';\nimport {useField} from '@react-aria/label';\nimport {useFilter, useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useFormValidation} from '@react-aria/form';\nimport {useProviderProps} from '@react-spectrum/provider';\nimport {useSearchAutocomplete} from '@react-aria/autocomplete';\n\nfunction _MobileSearchAutocomplete<T extends object>(props: SpectrumSearchAutocompleteProps<T>, ref: FocusableRef<HTMLElement>) {\n props = useProviderProps(props);\n\n let {\n isQuiet,\n isDisabled,\n isRequired,\n validationBehavior,\n validate,\n name,\n isReadOnly,\n onSubmit = () => {}\n } = props;\n\n let {contains} = useFilter({sensitivity: 'base'});\n let state = useComboBoxState({\n ...props,\n defaultFilter: contains,\n allowsEmptyCollection: true,\n // Needs to be false here otherwise we double up on commitSelection/commitCustomValue calls when\n // user taps on underlay (i.e. initial tap will call setFocused(false) -> commitSelection/commitCustomValue via onBlur,\n // then the closing of the tray will call setFocused(false) again due to cleanup effect)\n shouldCloseOnBlur: false,\n allowsCustomValue: true,\n onSelectionChange: (key) => key !== null && onSubmit(null, key),\n selectedKey: undefined,\n defaultSelectedKey: undefined,\n validate: useCallback(v => validate?.(v.inputValue), [validate])\n });\n\n let buttonRef = useRef<HTMLDivElement>(null);\n let domRef = useFocusableRef(ref, buttonRef);\n let {triggerProps, overlayProps} = useOverlayTrigger({type: 'listbox'}, state, buttonRef);\n\n let inputRef = useRef<HTMLInputElement>(null);\n useFormValidation({\n ...props,\n focus: () => buttonRef.current?.focus()\n }, state, inputRef);\n let {isInvalid, validationErrors, validationDetails} = state.displayValidation;\n let validationState = props.validationState || (isInvalid ? 'invalid' : undefined);\n let errorMessage = props.errorMessage ?? validationErrors.join(' ');\n\n let {labelProps, fieldProps, descriptionProps, errorMessageProps} = useField({\n ...props,\n labelElementType: 'span',\n isInvalid,\n errorMessage\n });\n\n // Focus the button and show focus ring when clicking on the label\n labelProps.onClick = () => {\n if (!props.isDisabled && buttonRef.current) {\n buttonRef.current.focus();\n setInteractionModality('keyboard');\n }\n };\n\n let inputProps: InputHTMLAttributes<HTMLInputElement> = {\n type: 'hidden',\n name,\n value: state.inputValue\n };\n\n if (validationBehavior === 'native') {\n // Use a hidden <input type=\"text\"> rather than <input type=\"hidden\">\n // so that an empty value blocks HTML form submission when the field is required.\n inputProps.type = 'text';\n inputProps.hidden = true;\n inputProps.required = isRequired;\n // Ignore react warning.\n inputProps.onChange = () => {};\n }\n\n useFormReset(inputRef, state.inputValue, state.setInputValue);\n\n return (\n <>\n <Field\n {...props}\n labelProps={labelProps}\n descriptionProps={descriptionProps}\n errorMessageProps={errorMessageProps}\n isInvalid={isInvalid}\n validationErrors={validationErrors}\n validationDetails={validationDetails}\n elementType=\"span\"\n ref={domRef}\n includeNecessityIndicatorInAccessibilityName>\n <SearchAutocompleteButton\n {...mergeProps(triggerProps, fieldProps, {autoFocus: props.autoFocus, icon: props.icon})}\n ref={buttonRef}\n isQuiet={isQuiet}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isPlaceholder={!state.inputValue}\n validationState={validationState}\n inputValue={state.inputValue}\n clearInput={() => state.setInputValue('')}\n onPress={() => !isReadOnly && state.open(null, 'manual')}>\n {state.inputValue || props.placeholder || ''}\n </SearchAutocompleteButton>\n </Field>\n <input {...inputProps} ref={inputRef} />\n <Tray state={state} isFixedHeight {...overlayProps}>\n <SearchAutocompleteTray\n {...props}\n onClose={state.close}\n overlayProps={overlayProps}\n state={state} />\n </Tray>\n </>\n );\n}\n\nexport let MobileSearchAutocomplete = React.forwardRef(_MobileSearchAutocomplete) as <T>(props: SpectrumSearchAutocompleteProps<T> & {ref?: FocusableRef<HTMLElement>}) => ReactElement;\n\n\ninterface SearchAutocompleteButtonProps extends AriaButtonProps {\n icon?: ReactElement | null,\n isQuiet?: boolean,\n isDisabled?: boolean,\n isReadOnly?: boolean,\n isPlaceholder?: boolean,\n validationState?: ValidationState,\n inputValue?: string,\n clearInput?: () => void,\n children?: ReactNode,\n style?: React.CSSProperties,\n className?: string\n}\n\n// any type is because we don't want to call useObjectRef because this is an internal component and we know\n// we are always passing an object ref\nconst SearchAutocompleteButton = React.forwardRef(function SearchAutocompleteButton(props: SearchAutocompleteButtonProps, ref: any) {\n let searchIcon = (\n <Magnifier data-testid=\"searchicon\" />\n );\n\n let {\n icon = searchIcon,\n isQuiet,\n isDisabled,\n isReadOnly,\n isPlaceholder,\n validationState,\n inputValue,\n clearInput,\n children,\n style,\n className\n} = props;\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/autocomplete');\n let valueId = useId();\n let invalidId = useId();\n let validationIcon = validationState === 'invalid'\n ? <AlertMedium id={invalidId} aria-label={stringFormatter.format('invalid')} />\n : <CheckmarkMedium />;\n\n if (icon) {\n icon = React.cloneElement(icon, {\n UNSAFE_className: classNames(\n textfieldStyles,\n 'spectrum-Textfield-icon'\n ),\n size: 'S'\n });\n }\n\n let clearButton = (\n <ClearButton\n onPress={(e) => {\n clearInput?.();\n props?.onPress?.(e);\n }}\n preventFocus\n aria-label={stringFormatter.format('clear')}\n excludeFromTabOrder\n UNSAFE_className={\n classNames(\n searchStyles,\n 'spectrum-ClearButton'\n )\n }\n isDisabled={isDisabled} />\n );\n\n let validation = React.cloneElement(validationIcon, {\n UNSAFE_className: classNames(\n textfieldStyles,\n 'spectrum-Textfield-validationIcon',\n classNames(\n styles,\n 'spectrum-InputGroup-input-validationIcon'\n ),\n classNames(\n searchStyles,\n 'spectrum-Search-validationIcon'\n )\n )\n });\n\n let {hoverProps, isHovered} = useHover({});\n let {isFocused, isFocusVisible, focusProps} = useFocusRing();\n let {buttonProps} = useButton({\n ...props,\n 'aria-labelledby': [\n props['aria-labelledby'],\n props['aria-label'] && !props['aria-labelledby'] ? props.id : null,\n valueId,\n validationState === 'invalid' ? invalidId : null\n ].filter(Boolean).join(' '),\n elementType: 'div'\n }, ref);\n\n return (\n <div\n {...mergeProps(hoverProps, focusProps, buttonProps)}\n aria-haspopup=\"dialog\"\n ref={ref}\n style={{...style, outline: 'none'}}\n className={\n classNames(\n styles,\n 'spectrum-InputGroup',\n {\n 'spectrum-InputGroup--quiet': isQuiet,\n 'is-disabled': isDisabled,\n 'spectrum-InputGroup--invalid': validationState === 'invalid' && !isDisabled,\n 'is-hovered': isHovered,\n 'is-focused': isFocused,\n 'focus-ring': isFocusVisible\n },\n classNames(\n searchAutocompleteStyles,\n 'searchautocomplete',\n 'mobile-searchautocomplete'\n ),\n className\n )\n }>\n <div\n className={\n classNames(\n textfieldStyles,\n 'spectrum-Textfield',\n {\n 'spectrum-Textfield--invalid': validationState === 'invalid' && !isDisabled,\n 'spectrum-Textfield--valid': validationState === 'valid' && !isDisabled,\n 'spectrum-Textfield--quiet': isQuiet\n },\n classNames(\n searchStyles,\n 'spectrum-Search',\n 'spectrum-Search--loadable',\n {\n 'is-disabled': isDisabled,\n 'is-quiet': isQuiet,\n 'spectrum-Search--invalid': validationState === 'invalid' && !isDisabled,\n 'spectrum-Search--valid': validationState === 'valid' && !isDisabled\n }\n ),\n classNames(\n styles,\n 'spectrum-InputGroup-field'\n )\n )\n }>\n <div\n className={\n classNames(\n textfieldStyles,\n 'spectrum-Textfield-input',\n {\n 'spectrum-Textfield-inputIcon': !!icon,\n 'is-hovered': isHovered,\n 'is-placeholder': isPlaceholder,\n 'is-disabled': isDisabled,\n 'is-quiet': isQuiet,\n 'is-focused': isFocused\n },\n classNames(\n searchStyles,\n 'spectrum-Search-input'\n ),\n classNames(\n searchAutocompleteStyles,\n 'mobile-input'\n )\n )\n }>\n {icon}\n <span\n id={valueId}\n className={\n classNames(\n searchAutocompleteStyles,\n 'mobile-value'\n )\n }>\n {children}\n </span>\n </div>\n {validationState && !isDisabled ? validation : null}\n {(inputValue !== '' || validationState != null) && !isReadOnly && clearButton}\n </div>\n </div>\n );\n});\n\ninterface SearchAutocompleteTrayProps<T> extends SpectrumSearchAutocompleteProps<T> {\n state: ComboBoxState<T>,\n overlayProps: HTMLAttributes<HTMLElement>,\n loadingIndicator?: ReactElement,\n onClose: () => void\n}\n\nfunction SearchAutocompleteTray<T>(props: SearchAutocompleteTrayProps<T>) {\n let searchIcon = (\n <Magnifier data-testid=\"searchicon\" />\n );\n\n let {\n // completionMode = 'suggest',\n state,\n icon = searchIcon,\n isDisabled,\n validationState,\n label,\n overlayProps,\n loadingState,\n onLoadMore,\n onClose,\n onSubmit\n } = props;\n\n let timeout = useRef<ReturnType<typeof setTimeout> | null>(null);\n let [showLoading, setShowLoading] = useState(false);\n let inputRef = useRef<HTMLInputElement>(null);\n let popoverRef = useRef<HTMLDivElement>(null);\n let listBoxRef = useRef<HTMLDivElement>(null);\n let isLoading = loadingState === 'loading' || loadingState === 'loadingMore';\n let layout = useListBoxLayout();\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/autocomplete');\n\n let {inputProps, listBoxProps, labelProps, clearButtonProps} = useSearchAutocomplete<T>(\n {\n ...props,\n layoutDelegate: layout,\n popoverRef: popoverRef,\n listBoxRef,\n inputRef,\n // Handled outside the tray.\n name: undefined\n },\n state\n );\n\n React.useEffect(() => {\n if (inputRef.current) {\n focusSafely(inputRef.current);\n }\n }, []);\n\n React.useEffect(() => {\n // When the tray closes, set state.isFocused (i.e. the tray input's focus tracker) to false.\n // This is to prevent state.isFocused from being set to true when the tray closes via tapping on the underlay\n // (FocusScope attempts to restore focus to the tray input when tapping outside the tray due to \"contain\")\n // Have to do this manually since React doesn't call onBlur when a component is unmounted: https://github.com/facebook/react/issues/12363\n if (!state.isOpen && state.isFocused) {\n state.setFocused(false);\n }\n });\n\n let {dialogProps} = useDialog({\n 'aria-labelledby': useId(labelProps.id)\n }, popoverRef);\n\n // Override the role of the input to \"searchbox\" instead of \"combobox\".\n // Since the listbox is always visible, the combobox role doesn't really give us anything.\n // VoiceOver on iOS reads \"double tap to collapse\" when focused on the input rather than\n // \"double tap to edit text\", as with a textbox or searchbox. We'd like double tapping to\n // open the virtual keyboard rather than closing the tray.\n inputProps.role = 'searchbox';\n inputProps['aria-haspopup'] = 'listbox';\n delete inputProps.onTouchEnd;\n\n let clearButton = (\n <ClearButton\n {...clearButtonProps}\n preventFocus\n aria-label={stringFormatter.format('clear')}\n excludeFromTabOrder\n UNSAFE_className={\n classNames(\n searchStyles,\n 'spectrum-ClearButton'\n )\n }\n isDisabled={isDisabled} />\n );\n\n let loadingCircle = (\n <ProgressCircle\n aria-label={stringFormatter.format('loading')}\n size=\"S\"\n isIndeterminate\n UNSAFE_className={classNames(\n searchStyles,\n 'spectrum-Search-circleLoader',\n classNames(\n textfieldStyles,\n 'spectrum-Textfield-circleLoader'\n )\n )} />\n );\n\n // Close the software keyboard on scroll to give the user a bigger area to scroll.\n // But only do this if scrolling with touch, otherwise it can cause issues with touch\n // screen readers.\n let isTouchDown = useRef(false);\n let onTouchStart = () => {\n isTouchDown.current = true;\n };\n\n let onTouchEnd = () => {\n isTouchDown.current = false;\n };\n\n let onScroll = useCallback(() => {\n if (!inputRef.current || document.activeElement !== inputRef.current || !isTouchDown.current) {\n return;\n }\n\n if (popoverRef.current) {\n popoverRef.current.focus();\n }\n }, [inputRef, popoverRef, isTouchDown]);\n\n let inputValue = inputProps.value;\n let lastInputValue = useRef(inputValue);\n useEffect(() => {\n if (loadingState === 'filtering' && !showLoading) {\n if (timeout.current === null) {\n timeout.current = setTimeout(() => {\n setShowLoading(true);\n }, 500);\n }\n\n // If user is typing, clear the timer and restart since it is a new request\n if (inputValue !== lastInputValue.current) {\n clearTimeout(timeout.current);\n timeout.current = setTimeout(() => {\n setShowLoading(true);\n }, 500);\n }\n } else if (loadingState !== 'filtering') {\n // If loading is no longer happening, clear any timers and hide the loading circle\n setShowLoading(false);\n if (timeout.current !== null) {\n clearTimeout(timeout.current);\n timeout.current = null;\n }\n }\n\n lastInputValue.current = inputValue;\n }, [loadingState, inputValue, showLoading]);\n\n let onKeyDown = (e) => {\n // Close virtual keyboard, close tray, and fire onSubmit if user hits Enter w/o any focused options\n if (e.key === 'Enter' && state.selectionManager.focusedKey == null) {\n popoverRef.current?.focus();\n if (onClose) {\n onClose();\n }\n if (onSubmit) {\n onSubmit(inputValue == null ? null : inputValue.toString(), null);\n }\n } else {\n if (inputProps.onKeyDown) {\n inputProps.onKeyDown(e);\n }\n }\n };\n\n if (icon) {\n icon = React.cloneElement(icon, {\n UNSAFE_className: classNames(\n textfieldStyles,\n 'spectrum-Textfield-icon'\n ),\n size: 'S'\n });\n }\n\n return (\n <FocusScope restoreFocus contain>\n <div\n {...mergeProps(overlayProps, dialogProps)}\n ref={popoverRef}\n className={\n classNames(\n searchAutocompleteStyles,\n 'tray-dialog'\n )\n }>\n <DismissButton onDismiss={onClose} />\n <TextFieldBase\n label={label}\n labelProps={labelProps}\n inputProps={{...inputProps, onKeyDown}}\n inputRef={inputRef}\n isDisabled={isDisabled}\n isLoading={showLoading && loadingState === 'filtering'}\n loadingIndicator={loadingState != null ? loadingCircle : undefined}\n validationState={validationState}\n wrapperChildren={((state.inputValue !== '' || loadingState === 'filtering' || validationState != null) && !props.isReadOnly) ? clearButton : undefined}\n icon={icon}\n UNSAFE_className={\n classNames(\n searchStyles,\n 'spectrum-Search',\n 'spectrum-Textfield',\n 'spectrum-Search--loadable',\n {\n 'spectrum-Search--invalid': validationState === 'invalid' && !isDisabled,\n 'spectrum-Search--valid': validationState === 'valid' && !isDisabled\n },\n classNames(\n searchAutocompleteStyles,\n 'tray-textfield',\n {\n 'has-label': !!props.label\n }\n )\n )\n }\n inputClassName={\n classNames(\n searchStyles,\n 'spectrum-Search-input'\n )\n }\n validationIconClassName={\n classNames(\n searchStyles,\n 'spectrum-Search-validationIcon'\n )\n } />\n <ListBoxBase\n {...listBoxProps}\n domProps={{onTouchStart, onTouchEnd}}\n disallowEmptySelection\n shouldSelectOnPressUp\n focusOnPointerEnter\n layout={layout}\n state={state}\n shouldUseVirtualFocus\n renderEmptyState={() => loadingState !== 'loading' && (\n <span className={classNames(searchAutocompleteStyles, 'no-results')}>\n {stringFormatter.format('noResults')}\n </span>\n )}\n UNSAFE_className={\n classNames(\n searchAutocompleteStyles,\n 'tray-listbox'\n )\n }\n ref={listBoxRef}\n onScroll={onScroll}\n onLoadMore={onLoadMore}\n isLoading={isLoading} />\n <DismissButton onDismiss={onClose} />\n </div>\n </FocusScope>\n );\n}\n"],"names":[],"version":3,"file":"MobileSearchAutocomplete.module.js.map"}
|