@react-spectrum/autocomplete 3.0.0-nightly.3390 → 3.0.0-nightly.3398
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/main.css +1 -1
- package/dist/main.js +29 -28
- package/dist/main.js.map +1 -1
- package/dist/module.js +30 -29
- package/dist/module.js.map +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +28 -28
- package/src/MobileSearchAutocomplete.tsx +89 -81
- package/src/SearchAutocomplete.tsx +6 -5
|
@@ -19,8 +19,8 @@ import {ComboBoxState, useComboBoxState} from '@react-stately/combobox';
|
|
|
19
19
|
import {DismissButton} from '@react-aria/overlays';
|
|
20
20
|
import {Field} from '@react-spectrum/label';
|
|
21
21
|
import {FocusableRef, ValidationState} from '@react-types/shared';
|
|
22
|
-
import {FocusRing, FocusScope} from '@react-aria/focus';
|
|
23
22
|
import {focusSafely} from '@react-aria/focus';
|
|
23
|
+
import {FocusScope, useFocusRing} from '@react-aria/focus';
|
|
24
24
|
// @ts-ignore
|
|
25
25
|
import intlMessages from '../intl/*.json';
|
|
26
26
|
import {ListBoxBase, useListBoxLayout} from '@react-spectrum/listbox';
|
|
@@ -99,7 +99,7 @@ export const MobileSearchAutocomplete = React.forwardRef(function MobileSearchAu
|
|
|
99
99
|
ref={domRef}
|
|
100
100
|
includeNecessityIndicatorInAccessibilityName>
|
|
101
101
|
<SearchAutocompleteButton
|
|
102
|
-
{...mergeProps(triggerProps, fieldProps, {autoFocus: props.autoFocus})}
|
|
102
|
+
{...mergeProps(triggerProps, fieldProps, {autoFocus: props.autoFocus, icon: props.icon})}
|
|
103
103
|
ref={buttonRef}
|
|
104
104
|
isQuiet={isQuiet}
|
|
105
105
|
isDisabled={isDisabled}
|
|
@@ -124,6 +124,7 @@ export const MobileSearchAutocomplete = React.forwardRef(function MobileSearchAu
|
|
|
124
124
|
});
|
|
125
125
|
|
|
126
126
|
interface SearchAutocompleteButtonProps extends AriaButtonProps {
|
|
127
|
+
icon?: ReactElement,
|
|
127
128
|
isQuiet?: boolean,
|
|
128
129
|
isDisabled?: boolean,
|
|
129
130
|
isReadOnly?: boolean,
|
|
@@ -137,7 +138,12 @@ interface SearchAutocompleteButtonProps extends AriaButtonProps {
|
|
|
137
138
|
}
|
|
138
139
|
|
|
139
140
|
const SearchAutocompleteButton = React.forwardRef(function SearchAutocompleteButton(props: SearchAutocompleteButtonProps, ref: RefObject<HTMLElement>) {
|
|
141
|
+
let searchIcon = (
|
|
142
|
+
<Magnifier data-testid="searchicon" />
|
|
143
|
+
);
|
|
144
|
+
|
|
140
145
|
let {
|
|
146
|
+
icon = searchIcon,
|
|
141
147
|
isQuiet,
|
|
142
148
|
isDisabled,
|
|
143
149
|
isReadOnly,
|
|
@@ -156,17 +162,15 @@ const SearchAutocompleteButton = React.forwardRef(function SearchAutocompleteBut
|
|
|
156
162
|
? <AlertMedium id={invalidId} aria-label={stringFormatter.format('invalid')} />
|
|
157
163
|
: <CheckmarkMedium />;
|
|
158
164
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
size: 'S'
|
|
169
|
-
});
|
|
165
|
+
if (icon) {
|
|
166
|
+
icon = React.cloneElement(icon, {
|
|
167
|
+
UNSAFE_className: classNames(
|
|
168
|
+
textfieldStyles,
|
|
169
|
+
'spectrum-Textfield-icon'
|
|
170
|
+
),
|
|
171
|
+
size: 'S'
|
|
172
|
+
});
|
|
173
|
+
}
|
|
170
174
|
|
|
171
175
|
let clearButton = (
|
|
172
176
|
<ClearButton
|
|
@@ -199,6 +203,7 @@ const SearchAutocompleteButton = React.forwardRef(function SearchAutocompleteBut
|
|
|
199
203
|
});
|
|
200
204
|
|
|
201
205
|
let {hoverProps, isHovered} = useHover({});
|
|
206
|
+
let {isFocused, isFocusVisible, focusProps} = useFocusRing();
|
|
202
207
|
let {buttonProps} = useButton({
|
|
203
208
|
...props,
|
|
204
209
|
'aria-labelledby': [
|
|
@@ -211,88 +216,88 @@ const SearchAutocompleteButton = React.forwardRef(function SearchAutocompleteBut
|
|
|
211
216
|
}, ref);
|
|
212
217
|
|
|
213
218
|
return (
|
|
214
|
-
<
|
|
215
|
-
|
|
216
|
-
|
|
219
|
+
<div
|
|
220
|
+
{...mergeProps(hoverProps, focusProps, buttonProps)}
|
|
221
|
+
aria-haspopup="dialog"
|
|
222
|
+
ref={ref as RefObject<HTMLDivElement>}
|
|
223
|
+
style={{...style, outline: 'none'}}
|
|
224
|
+
className={
|
|
225
|
+
classNames(
|
|
226
|
+
styles,
|
|
227
|
+
'spectrum-InputGroup',
|
|
228
|
+
{
|
|
229
|
+
'spectrum-InputGroup--quiet': isQuiet,
|
|
230
|
+
'is-disabled': isDisabled,
|
|
231
|
+
'spectrum-InputGroup--invalid': validationState === 'invalid',
|
|
232
|
+
'is-hovered': isHovered,
|
|
233
|
+
'is-focused': isFocused,
|
|
234
|
+
'focus-ring': isFocusVisible
|
|
235
|
+
},
|
|
236
|
+
classNames(
|
|
237
|
+
searchAutocompleteStyles,
|
|
238
|
+
'mobile-searchautocomplete'
|
|
239
|
+
),
|
|
240
|
+
className
|
|
241
|
+
)
|
|
242
|
+
}>
|
|
217
243
|
<div
|
|
218
|
-
{...mergeProps(hoverProps, buttonProps)}
|
|
219
|
-
aria-haspopup="dialog"
|
|
220
|
-
ref={ref as RefObject<HTMLDivElement>}
|
|
221
|
-
style={{...style, outline: 'none'}}
|
|
222
244
|
className={
|
|
223
245
|
classNames(
|
|
224
|
-
|
|
225
|
-
'spectrum-
|
|
246
|
+
textfieldStyles,
|
|
247
|
+
'spectrum-Textfield',
|
|
226
248
|
{
|
|
227
|
-
'spectrum-
|
|
228
|
-
'
|
|
229
|
-
'spectrum-
|
|
230
|
-
'is-hovered': isHovered
|
|
249
|
+
'spectrum-Textfield--invalid': validationState === 'invalid',
|
|
250
|
+
'spectrum-Textfield--valid': validationState === 'valid',
|
|
251
|
+
'spectrum-Textfield--quiet': isQuiet
|
|
231
252
|
},
|
|
232
253
|
classNames(
|
|
233
|
-
|
|
234
|
-
'
|
|
235
|
-
|
|
236
|
-
|
|
254
|
+
searchStyles,
|
|
255
|
+
'spectrum-Search',
|
|
256
|
+
{
|
|
257
|
+
'is-disabled': isDisabled,
|
|
258
|
+
'is-quiet': isQuiet,
|
|
259
|
+
'spectrum-Search--invalid': validationState === 'invalid',
|
|
260
|
+
'spectrum-Search--valid': validationState === 'valid'
|
|
261
|
+
}
|
|
262
|
+
)
|
|
237
263
|
)
|
|
238
264
|
}>
|
|
239
265
|
<div
|
|
240
266
|
className={
|
|
241
267
|
classNames(
|
|
242
268
|
textfieldStyles,
|
|
243
|
-
'spectrum-Textfield',
|
|
269
|
+
'spectrum-Textfield-input',
|
|
244
270
|
{
|
|
245
|
-
'spectrum-Textfield
|
|
246
|
-
'
|
|
247
|
-
'
|
|
271
|
+
'spectrum-Textfield-inputIcon': !!icon,
|
|
272
|
+
'is-hovered': isHovered,
|
|
273
|
+
'is-placeholder': isPlaceholder,
|
|
274
|
+
'is-disabled': isDisabled,
|
|
275
|
+
'is-quiet': isQuiet,
|
|
276
|
+
'is-focused': isFocused,
|
|
277
|
+
'focus-ring': isFocusVisible
|
|
248
278
|
},
|
|
249
279
|
classNames(
|
|
250
280
|
searchStyles,
|
|
251
|
-
'spectrum-Search'
|
|
252
|
-
{
|
|
253
|
-
'is-disabled': isDisabled,
|
|
254
|
-
'is-quiet': isQuiet,
|
|
255
|
-
'spectrum-Search--invalid': validationState === 'invalid',
|
|
256
|
-
'spectrum-Search--valid': validationState === 'valid'
|
|
257
|
-
}
|
|
281
|
+
'spectrum-Search-input'
|
|
258
282
|
)
|
|
259
283
|
)
|
|
260
284
|
}>
|
|
261
|
-
|
|
285
|
+
{icon}
|
|
286
|
+
<span
|
|
287
|
+
id={valueId}
|
|
262
288
|
className={
|
|
263
289
|
classNames(
|
|
264
|
-
|
|
265
|
-
'
|
|
266
|
-
'spectrum-Textfield-inputIcon',
|
|
267
|
-
{
|
|
268
|
-
'is-hovered': isHovered,
|
|
269
|
-
'is-placeholder': isPlaceholder,
|
|
270
|
-
'is-disabled': isDisabled,
|
|
271
|
-
'is-quiet': isQuiet
|
|
272
|
-
},
|
|
273
|
-
classNames(
|
|
274
|
-
searchStyles,
|
|
275
|
-
'spectrum-Search-input'
|
|
276
|
-
)
|
|
290
|
+
searchAutocompleteStyles,
|
|
291
|
+
'mobile-value'
|
|
277
292
|
)
|
|
278
293
|
}>
|
|
279
|
-
{
|
|
280
|
-
|
|
281
|
-
id={valueId}
|
|
282
|
-
className={
|
|
283
|
-
classNames(
|
|
284
|
-
searchAutocompleteStyles,
|
|
285
|
-
'mobile-value'
|
|
286
|
-
)
|
|
287
|
-
}>
|
|
288
|
-
{children}
|
|
289
|
-
</span>
|
|
290
|
-
</div>
|
|
291
|
-
{validationState ? validation : null}
|
|
292
|
-
{(inputValue !== '' || validationState != null) && !isReadOnly && clearButton}
|
|
294
|
+
{children}
|
|
295
|
+
</span>
|
|
293
296
|
</div>
|
|
297
|
+
{validationState ? validation : null}
|
|
298
|
+
{(inputValue !== '' || validationState != null) && !isReadOnly && clearButton}
|
|
294
299
|
</div>
|
|
295
|
-
</
|
|
300
|
+
</div>
|
|
296
301
|
);
|
|
297
302
|
});
|
|
298
303
|
|
|
@@ -304,9 +309,14 @@ interface SearchAutocompleteTrayProps extends SpectrumSearchAutocompleteProps<un
|
|
|
304
309
|
}
|
|
305
310
|
|
|
306
311
|
function SearchAutocompleteTray(props: SearchAutocompleteTrayProps) {
|
|
312
|
+
let searchIcon = (
|
|
313
|
+
<Magnifier data-testid="searchicon" />
|
|
314
|
+
);
|
|
315
|
+
|
|
307
316
|
let {
|
|
308
317
|
// completionMode = 'suggest',
|
|
309
318
|
state,
|
|
319
|
+
icon = searchIcon,
|
|
310
320
|
isDisabled,
|
|
311
321
|
validationState,
|
|
312
322
|
label,
|
|
@@ -450,17 +460,15 @@ function SearchAutocompleteTray(props: SearchAutocompleteTrayProps) {
|
|
|
450
460
|
}
|
|
451
461
|
};
|
|
452
462
|
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
size: 'S'
|
|
463
|
-
});
|
|
463
|
+
if (icon) {
|
|
464
|
+
icon = React.cloneElement(icon, {
|
|
465
|
+
UNSAFE_className: classNames(
|
|
466
|
+
textfieldStyles,
|
|
467
|
+
'spectrum-Textfield-icon'
|
|
468
|
+
),
|
|
469
|
+
size: 'S'
|
|
470
|
+
});
|
|
471
|
+
}
|
|
464
472
|
|
|
465
473
|
return (
|
|
466
474
|
<FocusScope restoreFocus contain>
|
|
@@ -198,7 +198,12 @@ interface SearchAutocompleteInputProps extends SpectrumSearchAutocompleteProps<u
|
|
|
198
198
|
}
|
|
199
199
|
|
|
200
200
|
const SearchAutocompleteInput = React.forwardRef(function SearchAutocompleteInput(props: SearchAutocompleteInputProps, ref: RefObject<HTMLElement>) {
|
|
201
|
+
let searchIcon = (
|
|
202
|
+
<Magnifier data-testid="searchicon" />
|
|
203
|
+
);
|
|
204
|
+
|
|
201
205
|
let {
|
|
206
|
+
icon = searchIcon,
|
|
202
207
|
isQuiet,
|
|
203
208
|
isDisabled,
|
|
204
209
|
isReadOnly,
|
|
@@ -233,10 +238,6 @@ const SearchAutocompleteInput = React.forwardRef(function SearchAutocompleteInpu
|
|
|
233
238
|
)} />
|
|
234
239
|
);
|
|
235
240
|
|
|
236
|
-
let searchIcon = (
|
|
237
|
-
<Magnifier data-testid="searchicon" />
|
|
238
|
-
);
|
|
239
|
-
|
|
240
241
|
let clearButton = (
|
|
241
242
|
<ClearButton
|
|
242
243
|
{...clearButtonProps}
|
|
@@ -324,7 +325,7 @@ const SearchAutocompleteInput = React.forwardRef(function SearchAutocompleteInpu
|
|
|
324
325
|
validationState={validationState}
|
|
325
326
|
isLoading={showLoading && (isOpen || menuTrigger === 'manual' || loadingState === 'loading')}
|
|
326
327
|
loadingIndicator={loadingState != null && loadingCircle}
|
|
327
|
-
icon={
|
|
328
|
+
icon={icon}
|
|
328
329
|
wrapperChildren={(inputValue !== '' && !isReadOnly) && clearButton} />
|
|
329
330
|
</div>
|
|
330
331
|
</FocusRing>
|