@react-spectrum/autocomplete 3.0.0-alpha.32 → 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 +3 -3
- package/dist/MobileSearchAutocomplete.main.js.map +1 -1
- package/dist/MobileSearchAutocomplete.mjs +3 -3
- package/dist/MobileSearchAutocomplete.module.js +3 -3
- package/dist/MobileSearchAutocomplete.module.js.map +1 -1
- package/dist/SearchAutocomplete.main.js +4 -3
- package/dist/SearchAutocomplete.main.js.map +1 -1
- package/dist/SearchAutocomplete.mjs +4 -3
- package/dist/SearchAutocomplete.module.js +4 -3
- package/dist/SearchAutocomplete.module.js.map +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/{vars.5653edea.css → vars.f9e74788.css} +2 -1
- package/dist/vars.f9e74788.css.map +1 -0
- 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 @@ require("./vars.31879241.css");
|
|
|
5
5
|
var $1e139f06a0a4b696$exports = require("./search_vars_css.main.js");
|
|
6
6
|
require("./vars.936671cd.css");
|
|
7
7
|
var $2f86633ce5b04f1e$exports = require("./inputgroup_vars_css.main.js");
|
|
8
|
-
require("./vars.
|
|
8
|
+
require("./vars.f9e74788.css");
|
|
9
9
|
var $40cb3a00c193680f$exports = require("./textfield_vars_css.main.js");
|
|
10
10
|
var $56uON$spectrumiconsuiAlertMedium = require("@spectrum-icons/ui/AlertMedium");
|
|
11
11
|
var $56uON$spectrumiconsuiCheckmarkMedium = require("@spectrum-icons/ui/CheckmarkMedium");
|
|
@@ -284,11 +284,11 @@ function $a9f98e219df0b64d$var$SearchAutocompleteTray(props) {
|
|
|
284
284
|
let popoverRef = (0, $56uON$react.useRef)(null);
|
|
285
285
|
let listBoxRef = (0, $56uON$react.useRef)(null);
|
|
286
286
|
let isLoading = loadingState === 'loading' || loadingState === 'loadingMore';
|
|
287
|
-
let layout = (0, $56uON$reactspectrumlistbox.useListBoxLayout)(
|
|
287
|
+
let layout = (0, $56uON$reactspectrumlistbox.useListBoxLayout)();
|
|
288
288
|
let stringFormatter = (0, $56uON$reactariai18n.useLocalizedStringFormatter)((0, ($parcel$interopDefault($e32120882142a69f$exports))), '@react-spectrum/autocomplete');
|
|
289
289
|
let { inputProps: inputProps, listBoxProps: listBoxProps, labelProps: labelProps, clearButtonProps: clearButtonProps } = (0, $56uON$reactariaautocomplete.useSearchAutocomplete)({
|
|
290
290
|
...props,
|
|
291
|
-
|
|
291
|
+
layoutDelegate: layout,
|
|
292
292
|
popoverRef: popoverRef,
|
|
293
293
|
listBoxRef: listBoxRef,
|
|
294
294
|
inputRef: inputRef,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","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.main.js.map"}
|
|
1
|
+
{"mappings":"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","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.main.js.map"}
|
|
@@ -5,7 +5,7 @@ import "./vars.31879241.css";
|
|
|
5
5
|
import $9yRST$search_vars_cssmodulejs from "./search_vars_css.mjs";
|
|
6
6
|
import "./vars.936671cd.css";
|
|
7
7
|
import $9yRST$inputgroup_vars_cssmodulejs from "./inputgroup_vars_css.mjs";
|
|
8
|
-
import "./vars.
|
|
8
|
+
import "./vars.f9e74788.css";
|
|
9
9
|
import $9yRST$textfield_vars_cssmodulejs from "./textfield_vars_css.mjs";
|
|
10
10
|
import $9yRST$spectrumiconsuiAlertMedium from "@spectrum-icons/ui/AlertMedium";
|
|
11
11
|
import $9yRST$spectrumiconsuiCheckmarkMedium from "@spectrum-icons/ui/CheckmarkMedium";
|
|
@@ -278,11 +278,11 @@ function $c940f54e16bafef5$var$SearchAutocompleteTray(props) {
|
|
|
278
278
|
let popoverRef = (0, $9yRST$useRef)(null);
|
|
279
279
|
let listBoxRef = (0, $9yRST$useRef)(null);
|
|
280
280
|
let isLoading = loadingState === 'loading' || loadingState === 'loadingMore';
|
|
281
|
-
let layout = (0, $9yRST$useListBoxLayout)(
|
|
281
|
+
let layout = (0, $9yRST$useListBoxLayout)();
|
|
282
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,
|
|
@@ -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";
|
|
@@ -278,11 +278,11 @@ function $c940f54e16bafef5$var$SearchAutocompleteTray(props) {
|
|
|
278
278
|
let popoverRef = (0, $9yRST$useRef)(null);
|
|
279
279
|
let listBoxRef = (0, $9yRST$useRef)(null);
|
|
280
280
|
let isLoading = loadingState === 'loading' || loadingState === 'loadingMore';
|
|
281
|
-
let layout = (0, $9yRST$useListBoxLayout)(
|
|
281
|
+
let layout = (0, $9yRST$useListBoxLayout)();
|
|
282
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,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","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"}
|
|
@@ -6,7 +6,7 @@ require("./vars.31879241.css");
|
|
|
6
6
|
var $1e139f06a0a4b696$exports = require("./search_vars_css.main.js");
|
|
7
7
|
require("./vars.936671cd.css");
|
|
8
8
|
var $2f86633ce5b04f1e$exports = require("./inputgroup_vars_css.main.js");
|
|
9
|
-
require("./vars.
|
|
9
|
+
require("./vars.f9e74788.css");
|
|
10
10
|
var $40cb3a00c193680f$exports = require("./textfield_vars_css.main.js");
|
|
11
11
|
var $k6PeR$reactspectrumutils = require("@react-spectrum/utils");
|
|
12
12
|
var $k6PeR$reactspectrumbutton = require("@react-spectrum/button");
|
|
@@ -110,10 +110,10 @@ function $dcf500d58a031ca6$var$_SearchAutocompleteBase(props, ref) {
|
|
|
110
110
|
validate
|
|
111
111
|
])
|
|
112
112
|
});
|
|
113
|
-
let layout = (0, $k6PeR$reactspectrumlistbox.useListBoxLayout)(
|
|
113
|
+
let layout = (0, $k6PeR$reactspectrumlistbox.useListBoxLayout)();
|
|
114
114
|
let { inputProps: inputProps, listBoxProps: listBoxProps, labelProps: labelProps, clearButtonProps: clearButtonProps, descriptionProps: descriptionProps, errorMessageProps: errorMessageProps, isInvalid: isInvalid, validationErrors: validationErrors, validationDetails: validationDetails } = (0, $k6PeR$reactariaautocomplete.useSearchAutocomplete)({
|
|
115
115
|
...props,
|
|
116
|
-
|
|
116
|
+
layoutDelegate: layout,
|
|
117
117
|
popoverRef: unwrappedPopoverRef,
|
|
118
118
|
listBoxRef: listBoxRef,
|
|
119
119
|
inputRef: inputRef,
|
|
@@ -184,6 +184,7 @@ function $dcf500d58a031ca6$var$_SearchAutocompleteBase(props, ref) {
|
|
|
184
184
|
state: state,
|
|
185
185
|
shouldUseVirtualFocus: true,
|
|
186
186
|
isLoading: loadingState === 'loading' || loadingState === 'loadingMore',
|
|
187
|
+
showLoadingSpinner: loadingState === 'loadingMore',
|
|
187
188
|
onLoadMore: onLoadMore,
|
|
188
189
|
renderEmptyState: ()=>isAsync && /*#__PURE__*/ (0, ($parcel$interopDefault($k6PeR$react))).createElement("span", {
|
|
189
190
|
className: (0, $k6PeR$reactspectrumutils.classNames)((0, ($parcel$interopDefault($83da5c2df967875d$exports))), 'no-results')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/@react-spectrum/autocomplete/src/SearchAutocomplete.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 */\nimport {AriaButtonProps} from '@react-types/button';\nimport {classNames, dimensionValue, useFocusableRef, useIsMobileDevice, useResizeObserver, useUnwrapDOMRef} from '@react-spectrum/utils';\nimport {ClearButton} from '@react-spectrum/button';\nimport {DOMRefValue, FocusableRef} from '@react-types/shared';\nimport {Field} from '@react-spectrum/label';\nimport {filterDOMProps, useLayoutEffect} from '@react-aria/utils';\nimport {FocusRing} 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 {MobileSearchAutocomplete} from './MobileSearchAutocomplete';\nimport {Popover} from '@react-spectrum/overlays';\nimport {ProgressCircle} from '@react-spectrum/progress';\nimport React, {\n forwardRef,\n InputHTMLAttributes,\n ReactElement,\n RefObject,\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 {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 {useComboBoxState} from '@react-stately/combobox';\nimport {useFilter, useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useFormProps} from '@react-spectrum/form';\nimport {useHover} from '@react-aria/interactions';\nimport {useProvider, useProviderProps} from '@react-spectrum/provider';\nimport {useSearchAutocomplete} from '@react-aria/autocomplete';\n\nfunction SearchAutocomplete<T extends object>(props: SpectrumSearchAutocompleteProps<T>, ref: FocusableRef<HTMLElement>) {\n props = useProviderProps(props);\n props = useFormProps(props);\n\n if (props.placeholder) {\n console.warn('Placeholders are deprecated due to accessibility issues. Please use help text instead.');\n }\n\n let isMobile = useIsMobileDevice();\n if (isMobile) {\n // menuTrigger=focus/manual don't apply to mobile searchwithin\n return <MobileSearchAutocomplete {...props} menuTrigger=\"input\" ref={ref} />;\n } else {\n return <SearchAutocompleteBase {...props} ref={ref} />;\n }\n}\n\nfunction _SearchAutocompleteBase<T extends object>(props: SpectrumSearchAutocompleteProps<T>, ref: FocusableRef<HTMLElement>) {\n props = useProviderProps(props);\n\n let {\n menuTrigger = 'input',\n shouldFlip = true,\n direction = 'bottom',\n align = 'start',\n isQuiet,\n menuWidth: customMenuWidth,\n loadingState,\n onLoadMore,\n onSubmit = () => {},\n validate\n } = props;\n\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/autocomplete');\n let isAsync = loadingState != null;\n let popoverRef = useRef<DOMRefValue<HTMLDivElement>>(null);\n let unwrappedPopoverRef = useUnwrapDOMRef(popoverRef);\n let listBoxRef = useRef(null);\n let inputRef = useRef<HTMLInputElement>(null);\n let domRef = useFocusableRef(ref, inputRef);\n\n let {contains} = useFilter({sensitivity: 'base'});\n let state = useComboBoxState(\n {\n ...props,\n defaultFilter: contains,\n allowsEmptyCollection: isAsync,\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 layout = useListBoxLayout(state, loadingState === 'loadingMore');\n\n let {inputProps, listBoxProps, labelProps, clearButtonProps, descriptionProps, errorMessageProps, isInvalid, validationErrors, validationDetails} = useSearchAutocomplete(\n {\n ...props,\n keyboardDelegate: layout,\n popoverRef: unwrappedPopoverRef,\n listBoxRef,\n inputRef,\n menuTrigger\n },\n state\n );\n\n // Measure the width of the inputfield to inform the width of the menu (below).\n let [menuWidth, setMenuWidth] = useState<number>(0);\n let {scale} = useProvider();\n\n let onResize = useCallback(() => {\n if (inputRef.current) {\n let inputWidth = inputRef.current.offsetWidth;\n setMenuWidth(inputWidth);\n }\n }, [inputRef, setMenuWidth]);\n\n useResizeObserver({\n ref: domRef,\n onResize: onResize\n });\n\n useLayoutEffect(onResize, [scale, onResize]);\n\n let width = isQuiet ? undefined : menuWidth;\n let style = {\n width: customMenuWidth ? dimensionValue(customMenuWidth) : width,\n minWidth: isQuiet ? `calc(${menuWidth}px + calc(2 * var(--spectrum-dropdown-quiet-offset)))` : menuWidth\n };\n\n return (\n <>\n <Field\n {...props}\n descriptionProps={descriptionProps}\n errorMessageProps={errorMessageProps}\n labelProps={labelProps}\n isInvalid={isInvalid}\n validationErrors={validationErrors}\n validationDetails={validationDetails}\n ref={domRef}>\n <SearchAutocompleteInput\n {...props}\n isOpen={state.isOpen}\n loadingState={loadingState}\n inputProps={inputProps}\n inputRef={inputRef}\n clearButtonProps={clearButtonProps}\n validationState={props.validationState || (isInvalid ? 'invalid' : undefined)} />\n </Field>\n <Popover\n state={state}\n UNSAFE_style={style}\n UNSAFE_className={classNames(styles, 'spectrum-InputGroup-popover', {'spectrum-InputGroup-popover--quiet': isQuiet})}\n ref={popoverRef}\n triggerRef={inputRef}\n placement={`${direction} ${align}`}\n hideArrow\n isNonModal\n shouldFlip={shouldFlip}>\n <ListBoxBase\n {...listBoxProps}\n ref={listBoxRef}\n disallowEmptySelection\n autoFocus={state.focusStrategy}\n shouldSelectOnPressUp\n focusOnPointerEnter\n layout={layout}\n state={state}\n shouldUseVirtualFocus\n isLoading={loadingState === 'loading' || loadingState === 'loadingMore'}\n onLoadMore={onLoadMore}\n renderEmptyState={() => isAsync && (\n <span className={classNames(searchAutocompleteStyles, 'no-results')}>\n {stringFormatter.format('noResults')}\n </span>\n )} />\n </Popover>\n </>\n );\n}\n\nlet SearchAutocompleteBase = React.forwardRef(_SearchAutocompleteBase) as <T>(props: SpectrumSearchAutocompleteProps<T> & {ref?: FocusableRef<HTMLElement>}) => ReactElement;\n\n\ninterface SearchAutocompleteInputProps<T> extends SpectrumSearchAutocompleteProps<T> {\n inputProps: InputHTMLAttributes<HTMLInputElement>,\n inputRef: RefObject<HTMLInputElement>,\n style?: React.CSSProperties,\n className?: string,\n isOpen?: boolean,\n clearButtonProps: AriaButtonProps\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\nfunction _SearchAutocompleteInput<T>(props: SearchAutocompleteInputProps<T>, ref: any) {\n let searchIcon = (\n <Magnifier data-testid=\"searchicon\" />\n );\n\n let {\n icon = searchIcon,\n isQuiet,\n isDisabled,\n isReadOnly,\n validationState,\n inputProps,\n inputRef,\n autoFocus,\n style,\n className,\n loadingState,\n isOpen,\n menuTrigger,\n clearButtonProps\n } = props;\n let {hoverProps, isHovered} = useHover({});\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/autocomplete');\n let domProps = filterDOMProps(props);\n let timeout = useRef<ReturnType<typeof setTimeout> | null>(null);\n let [showLoading, setShowLoading] = useState(false);\n\n let loadingCircle = (\n <ProgressCircle\n aria-label={stringFormatter.format('loading')}\n size=\"S\"\n isIndeterminate\n UNSAFE_className={classNames(\n textfieldStyles,\n 'spectrum-Textfield-circleLoader',\n classNames(\n styles,\n 'spectrum-InputGroup-input-circleLoader'\n ),\n classNames(\n searchStyles,\n 'spectrum-Search-circleLoader'\n )\n )} />\n );\n\n let clearButton = (\n <ClearButton\n {...clearButtonProps}\n preventFocus\n UNSAFE_className={\n classNames(\n searchStyles,\n 'spectrum-ClearButton'\n )\n }\n isDisabled={isDisabled} />\n );\n\n let isLoading = loadingState === 'loading' || loadingState === 'filtering';\n let inputValue = inputProps.value;\n let lastInputValue = useRef(inputValue);\n useEffect(() => {\n if (isLoading && !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 (!isLoading) {\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 }, [isLoading, showLoading, inputValue]);\n\n return (\n <FocusRing\n within\n isTextInput\n focusClass={classNames(styles, 'is-focused')}\n focusRingClass={classNames(styles, 'focus-ring')}\n autoFocus={autoFocus}>\n <div\n {...hoverProps}\n ref={ref as RefObject<HTMLDivElement>}\n style={style}\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 },\n classNames(\n searchAutocompleteStyles,\n 'searchautocomplete'\n ),\n className\n )\n }>\n <TextFieldBase\n {...domProps}\n inputProps={inputProps}\n inputRef={inputRef}\n UNSAFE_className={\n classNames(\n searchStyles,\n 'spectrum-Search',\n 'spectrum-Search--loadable',\n 'spectrum-Textfield',\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 classNames(\n styles,\n 'spectrum-InputGroup-field'\n )\n )\n }\n inputClassName={classNames(searchStyles, 'spectrum-Search-input')}\n validationIconClassName={\n classNames(\n searchStyles,\n 'spectrum-Search-validationIcon'\n )\n }\n isDisabled={isDisabled}\n isQuiet={isQuiet}\n validationState={validationState}\n isLoading={showLoading && (isOpen || menuTrigger === 'manual' || loadingState === 'loading')}\n loadingIndicator={loadingState != null ? loadingCircle : undefined}\n icon={icon}\n wrapperChildren={(inputValue !== '' || loadingState === 'filtering' || validationState != null) && !isReadOnly ? clearButton : undefined}\n disableFocusRing />\n </div>\n </FocusRing>\n );\n}\n\nlet SearchAutocompleteInput = React.forwardRef(_SearchAutocompleteInput) as <T>(props: SearchAutocompleteInputProps<T> & {ref?: any}) => ReactElement;\n\n\n/**\n * A SearchAutocomplete is a searchfield that supports a dynamic list of suggestions.\n */\nlet _SearchAutocomplete = forwardRef(SearchAutocomplete) as <T>(props: SpectrumSearchAutocompleteProps<T> & {ref?: FocusableRef<HTMLElement>}) => ReactElement;\nexport {_SearchAutocomplete as SearchAutocomplete};\n"],"names":[],"version":3,"file":"SearchAutocomplete.main.js.map"}
|
|
1
|
+
{"mappings":"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","sources":["packages/@react-spectrum/autocomplete/src/SearchAutocomplete.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 */\nimport {AriaButtonProps} from '@react-types/button';\nimport {classNames, dimensionValue, useFocusableRef, useIsMobileDevice, useResizeObserver, useUnwrapDOMRef} from '@react-spectrum/utils';\nimport {ClearButton} from '@react-spectrum/button';\nimport {DOMRefValue, FocusableRef} from '@react-types/shared';\nimport {Field} from '@react-spectrum/label';\nimport {filterDOMProps, useLayoutEffect} from '@react-aria/utils';\nimport {FocusRing} 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 {MobileSearchAutocomplete} from './MobileSearchAutocomplete';\nimport {Popover} from '@react-spectrum/overlays';\nimport {ProgressCircle} from '@react-spectrum/progress';\nimport React, {\n forwardRef,\n InputHTMLAttributes,\n ReactElement,\n RefObject,\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 {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 {useComboBoxState} from '@react-stately/combobox';\nimport {useFilter, useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useFormProps} from '@react-spectrum/form';\nimport {useHover} from '@react-aria/interactions';\nimport {useProvider, useProviderProps} from '@react-spectrum/provider';\nimport {useSearchAutocomplete} from '@react-aria/autocomplete';\n\nfunction SearchAutocomplete<T extends object>(props: SpectrumSearchAutocompleteProps<T>, ref: FocusableRef<HTMLElement>) {\n props = useProviderProps(props);\n props = useFormProps(props);\n\n if (props.placeholder) {\n console.warn('Placeholders are deprecated due to accessibility issues. Please use help text instead.');\n }\n\n let isMobile = useIsMobileDevice();\n if (isMobile) {\n // menuTrigger=focus/manual don't apply to mobile searchwithin\n return <MobileSearchAutocomplete {...props} menuTrigger=\"input\" ref={ref} />;\n } else {\n return <SearchAutocompleteBase {...props} ref={ref} />;\n }\n}\n\nfunction _SearchAutocompleteBase<T extends object>(props: SpectrumSearchAutocompleteProps<T>, ref: FocusableRef<HTMLElement>) {\n props = useProviderProps(props);\n\n let {\n menuTrigger = 'input',\n shouldFlip = true,\n direction = 'bottom',\n align = 'start',\n isQuiet,\n menuWidth: customMenuWidth,\n loadingState,\n onLoadMore,\n onSubmit = () => {},\n validate\n } = props;\n\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/autocomplete');\n let isAsync = loadingState != null;\n let popoverRef = useRef<DOMRefValue<HTMLDivElement>>(null);\n let unwrappedPopoverRef = useUnwrapDOMRef(popoverRef);\n let listBoxRef = useRef(null);\n let inputRef = useRef<HTMLInputElement>(null);\n let domRef = useFocusableRef(ref, inputRef);\n\n let {contains} = useFilter({sensitivity: 'base'});\n let state = useComboBoxState(\n {\n ...props,\n defaultFilter: contains,\n allowsEmptyCollection: isAsync,\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 layout = useListBoxLayout();\n\n let {inputProps, listBoxProps, labelProps, clearButtonProps, descriptionProps, errorMessageProps, isInvalid, validationErrors, validationDetails} = useSearchAutocomplete(\n {\n ...props,\n layoutDelegate: layout,\n popoverRef: unwrappedPopoverRef,\n listBoxRef,\n inputRef,\n menuTrigger\n },\n state\n );\n\n // Measure the width of the inputfield to inform the width of the menu (below).\n let [menuWidth, setMenuWidth] = useState<number>(0);\n let {scale} = useProvider();\n\n let onResize = useCallback(() => {\n if (inputRef.current) {\n let inputWidth = inputRef.current.offsetWidth;\n setMenuWidth(inputWidth);\n }\n }, [inputRef, setMenuWidth]);\n\n useResizeObserver({\n ref: domRef,\n onResize: onResize\n });\n\n useLayoutEffect(onResize, [scale, onResize]);\n\n let width = isQuiet ? undefined : menuWidth;\n let style = {\n width: customMenuWidth ? dimensionValue(customMenuWidth) : width,\n minWidth: isQuiet ? `calc(${menuWidth}px + calc(2 * var(--spectrum-dropdown-quiet-offset)))` : menuWidth\n };\n\n return (\n <>\n <Field\n {...props}\n descriptionProps={descriptionProps}\n errorMessageProps={errorMessageProps}\n labelProps={labelProps}\n isInvalid={isInvalid}\n validationErrors={validationErrors}\n validationDetails={validationDetails}\n ref={domRef}>\n <SearchAutocompleteInput\n {...props}\n isOpen={state.isOpen}\n loadingState={loadingState}\n inputProps={inputProps}\n inputRef={inputRef}\n clearButtonProps={clearButtonProps}\n validationState={props.validationState || (isInvalid ? 'invalid' : undefined)} />\n </Field>\n <Popover\n state={state}\n UNSAFE_style={style}\n UNSAFE_className={classNames(styles, 'spectrum-InputGroup-popover', {'spectrum-InputGroup-popover--quiet': isQuiet})}\n ref={popoverRef}\n triggerRef={inputRef}\n placement={`${direction} ${align}`}\n hideArrow\n isNonModal\n shouldFlip={shouldFlip}>\n <ListBoxBase\n {...listBoxProps}\n ref={listBoxRef}\n disallowEmptySelection\n autoFocus={state.focusStrategy}\n shouldSelectOnPressUp\n focusOnPointerEnter\n layout={layout}\n state={state}\n shouldUseVirtualFocus\n isLoading={loadingState === 'loading' || loadingState === 'loadingMore'}\n showLoadingSpinner={loadingState === 'loadingMore'}\n onLoadMore={onLoadMore}\n renderEmptyState={() => isAsync && (\n <span className={classNames(searchAutocompleteStyles, 'no-results')}>\n {stringFormatter.format('noResults')}\n </span>\n )} />\n </Popover>\n </>\n );\n}\n\nlet SearchAutocompleteBase = React.forwardRef(_SearchAutocompleteBase) as <T>(props: SpectrumSearchAutocompleteProps<T> & {ref?: FocusableRef<HTMLElement>}) => ReactElement;\n\n\ninterface SearchAutocompleteInputProps<T> extends SpectrumSearchAutocompleteProps<T> {\n inputProps: InputHTMLAttributes<HTMLInputElement>,\n inputRef: RefObject<HTMLInputElement | null>,\n style?: React.CSSProperties,\n className?: string,\n isOpen?: boolean,\n clearButtonProps: AriaButtonProps\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\nfunction _SearchAutocompleteInput<T>(props: SearchAutocompleteInputProps<T>, ref: any) {\n let searchIcon = (\n <Magnifier data-testid=\"searchicon\" />\n );\n\n let {\n icon = searchIcon,\n isQuiet,\n isDisabled,\n isReadOnly,\n validationState,\n inputProps,\n inputRef,\n autoFocus,\n style,\n className,\n loadingState,\n isOpen,\n menuTrigger,\n clearButtonProps\n } = props;\n let {hoverProps, isHovered} = useHover({});\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/autocomplete');\n let domProps = filterDOMProps(props);\n let timeout = useRef<ReturnType<typeof setTimeout> | null>(null);\n let [showLoading, setShowLoading] = useState(false);\n\n let loadingCircle = (\n <ProgressCircle\n aria-label={stringFormatter.format('loading')}\n size=\"S\"\n isIndeterminate\n UNSAFE_className={classNames(\n textfieldStyles,\n 'spectrum-Textfield-circleLoader',\n classNames(\n styles,\n 'spectrum-InputGroup-input-circleLoader'\n ),\n classNames(\n searchStyles,\n 'spectrum-Search-circleLoader'\n )\n )} />\n );\n\n let clearButton = (\n <ClearButton\n {...clearButtonProps}\n preventFocus\n UNSAFE_className={\n classNames(\n searchStyles,\n 'spectrum-ClearButton'\n )\n }\n isDisabled={isDisabled} />\n );\n\n let isLoading = loadingState === 'loading' || loadingState === 'filtering';\n let inputValue = inputProps.value;\n let lastInputValue = useRef(inputValue);\n useEffect(() => {\n if (isLoading && !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 (!isLoading) {\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 }, [isLoading, showLoading, inputValue]);\n\n return (\n (<FocusRing\n within\n isTextInput\n focusClass={classNames(styles, 'is-focused')}\n focusRingClass={classNames(styles, 'focus-ring')}\n autoFocus={autoFocus}>\n <div\n {...hoverProps}\n ref={ref as RefObject<HTMLDivElement | null>}\n style={style}\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 },\n classNames(\n searchAutocompleteStyles,\n 'searchautocomplete'\n ),\n className\n )\n }>\n <TextFieldBase\n {...domProps}\n inputProps={inputProps}\n inputRef={inputRef}\n UNSAFE_className={\n classNames(\n searchStyles,\n 'spectrum-Search',\n 'spectrum-Search--loadable',\n 'spectrum-Textfield',\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 classNames(\n styles,\n 'spectrum-InputGroup-field'\n )\n )\n }\n inputClassName={classNames(searchStyles, 'spectrum-Search-input')}\n validationIconClassName={\n classNames(\n searchStyles,\n 'spectrum-Search-validationIcon'\n )\n }\n isDisabled={isDisabled}\n isQuiet={isQuiet}\n validationState={validationState}\n isLoading={showLoading && (isOpen || menuTrigger === 'manual' || loadingState === 'loading')}\n loadingIndicator={loadingState != null ? loadingCircle : undefined}\n icon={icon}\n wrapperChildren={(inputValue !== '' || loadingState === 'filtering' || validationState != null) && !isReadOnly ? clearButton : undefined}\n disableFocusRing />\n </div>\n </FocusRing>)\n );\n}\n\nlet SearchAutocompleteInput = React.forwardRef(_SearchAutocompleteInput) as <T>(props: SearchAutocompleteInputProps<T> & {ref?: any}) => ReactElement;\n\n\n/**\n * A SearchAutocomplete is a searchfield that supports a dynamic list of suggestions.\n */\nlet _SearchAutocomplete = forwardRef(SearchAutocomplete) as <T>(props: SpectrumSearchAutocompleteProps<T> & {ref?: FocusableRef<HTMLElement>}) => ReactElement;\nexport {_SearchAutocomplete as SearchAutocomplete};\n"],"names":[],"version":3,"file":"SearchAutocomplete.main.js.map"}
|
|
@@ -6,7 +6,7 @@ import "./vars.31879241.css";
|
|
|
6
6
|
import $fLcex$search_vars_cssmodulejs from "./search_vars_css.mjs";
|
|
7
7
|
import "./vars.936671cd.css";
|
|
8
8
|
import $fLcex$inputgroup_vars_cssmodulejs from "./inputgroup_vars_css.mjs";
|
|
9
|
-
import "./vars.
|
|
9
|
+
import "./vars.f9e74788.css";
|
|
10
10
|
import $fLcex$textfield_vars_cssmodulejs from "./textfield_vars_css.mjs";
|
|
11
11
|
import {useIsMobileDevice as $fLcex$useIsMobileDevice, useUnwrapDOMRef as $fLcex$useUnwrapDOMRef, useFocusableRef as $fLcex$useFocusableRef, useResizeObserver as $fLcex$useResizeObserver, dimensionValue as $fLcex$dimensionValue, classNames as $fLcex$classNames} from "@react-spectrum/utils";
|
|
12
12
|
import {ClearButton as $fLcex$ClearButton} from "@react-spectrum/button";
|
|
@@ -104,10 +104,10 @@ function $f3f3b62273a2d260$var$_SearchAutocompleteBase(props, ref) {
|
|
|
104
104
|
validate
|
|
105
105
|
])
|
|
106
106
|
});
|
|
107
|
-
let layout = (0, $fLcex$useListBoxLayout)(
|
|
107
|
+
let layout = (0, $fLcex$useListBoxLayout)();
|
|
108
108
|
let { inputProps: inputProps, listBoxProps: listBoxProps, labelProps: labelProps, clearButtonProps: clearButtonProps, descriptionProps: descriptionProps, errorMessageProps: errorMessageProps, isInvalid: isInvalid, validationErrors: validationErrors, validationDetails: validationDetails } = (0, $fLcex$useSearchAutocomplete)({
|
|
109
109
|
...props,
|
|
110
|
-
|
|
110
|
+
layoutDelegate: layout,
|
|
111
111
|
popoverRef: unwrappedPopoverRef,
|
|
112
112
|
listBoxRef: listBoxRef,
|
|
113
113
|
inputRef: inputRef,
|
|
@@ -178,6 +178,7 @@ function $f3f3b62273a2d260$var$_SearchAutocompleteBase(props, ref) {
|
|
|
178
178
|
state: state,
|
|
179
179
|
shouldUseVirtualFocus: true,
|
|
180
180
|
isLoading: loadingState === 'loading' || loadingState === 'loadingMore',
|
|
181
|
+
showLoadingSpinner: loadingState === 'loadingMore',
|
|
181
182
|
onLoadMore: onLoadMore,
|
|
182
183
|
renderEmptyState: ()=>isAsync && /*#__PURE__*/ (0, $fLcex$react).createElement("span", {
|
|
183
184
|
className: (0, $fLcex$classNames)((0, ($parcel$interopDefault($fLcex$searchautocomplete_cssmodulejs))), 'no-results')
|
|
@@ -6,7 +6,7 @@ import "./vars.31879241.css";
|
|
|
6
6
|
import $fLcex$search_vars_cssmodulejs from "./search_vars_css.module.js";
|
|
7
7
|
import "./vars.936671cd.css";
|
|
8
8
|
import $fLcex$inputgroup_vars_cssmodulejs from "./inputgroup_vars_css.module.js";
|
|
9
|
-
import "./vars.
|
|
9
|
+
import "./vars.f9e74788.css";
|
|
10
10
|
import $fLcex$textfield_vars_cssmodulejs from "./textfield_vars_css.module.js";
|
|
11
11
|
import {useIsMobileDevice as $fLcex$useIsMobileDevice, useUnwrapDOMRef as $fLcex$useUnwrapDOMRef, useFocusableRef as $fLcex$useFocusableRef, useResizeObserver as $fLcex$useResizeObserver, dimensionValue as $fLcex$dimensionValue, classNames as $fLcex$classNames} from "@react-spectrum/utils";
|
|
12
12
|
import {ClearButton as $fLcex$ClearButton} from "@react-spectrum/button";
|
|
@@ -104,10 +104,10 @@ function $f3f3b62273a2d260$var$_SearchAutocompleteBase(props, ref) {
|
|
|
104
104
|
validate
|
|
105
105
|
])
|
|
106
106
|
});
|
|
107
|
-
let layout = (0, $fLcex$useListBoxLayout)(
|
|
107
|
+
let layout = (0, $fLcex$useListBoxLayout)();
|
|
108
108
|
let { inputProps: inputProps, listBoxProps: listBoxProps, labelProps: labelProps, clearButtonProps: clearButtonProps, descriptionProps: descriptionProps, errorMessageProps: errorMessageProps, isInvalid: isInvalid, validationErrors: validationErrors, validationDetails: validationDetails } = (0, $fLcex$useSearchAutocomplete)({
|
|
109
109
|
...props,
|
|
110
|
-
|
|
110
|
+
layoutDelegate: layout,
|
|
111
111
|
popoverRef: unwrappedPopoverRef,
|
|
112
112
|
listBoxRef: listBoxRef,
|
|
113
113
|
inputRef: inputRef,
|
|
@@ -178,6 +178,7 @@ function $f3f3b62273a2d260$var$_SearchAutocompleteBase(props, ref) {
|
|
|
178
178
|
state: state,
|
|
179
179
|
shouldUseVirtualFocus: true,
|
|
180
180
|
isLoading: loadingState === 'loading' || loadingState === 'loadingMore',
|
|
181
|
+
showLoadingSpinner: loadingState === 'loadingMore',
|
|
181
182
|
onLoadMore: onLoadMore,
|
|
182
183
|
renderEmptyState: ()=>isAsync && /*#__PURE__*/ (0, $fLcex$react).createElement("span", {
|
|
183
184
|
className: (0, $fLcex$classNames)((0, ($parcel$interopDefault($fLcex$searchautocomplete_cssmodulejs))), 'no-results')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/@react-spectrum/autocomplete/src/SearchAutocomplete.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 */\nimport {AriaButtonProps} from '@react-types/button';\nimport {classNames, dimensionValue, useFocusableRef, useIsMobileDevice, useResizeObserver, useUnwrapDOMRef} from '@react-spectrum/utils';\nimport {ClearButton} from '@react-spectrum/button';\nimport {DOMRefValue, FocusableRef} from '@react-types/shared';\nimport {Field} from '@react-spectrum/label';\nimport {filterDOMProps, useLayoutEffect} from '@react-aria/utils';\nimport {FocusRing} 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 {MobileSearchAutocomplete} from './MobileSearchAutocomplete';\nimport {Popover} from '@react-spectrum/overlays';\nimport {ProgressCircle} from '@react-spectrum/progress';\nimport React, {\n forwardRef,\n InputHTMLAttributes,\n ReactElement,\n RefObject,\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 {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 {useComboBoxState} from '@react-stately/combobox';\nimport {useFilter, useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useFormProps} from '@react-spectrum/form';\nimport {useHover} from '@react-aria/interactions';\nimport {useProvider, useProviderProps} from '@react-spectrum/provider';\nimport {useSearchAutocomplete} from '@react-aria/autocomplete';\n\nfunction SearchAutocomplete<T extends object>(props: SpectrumSearchAutocompleteProps<T>, ref: FocusableRef<HTMLElement>) {\n props = useProviderProps(props);\n props = useFormProps(props);\n\n if (props.placeholder) {\n console.warn('Placeholders are deprecated due to accessibility issues. Please use help text instead.');\n }\n\n let isMobile = useIsMobileDevice();\n if (isMobile) {\n // menuTrigger=focus/manual don't apply to mobile searchwithin\n return <MobileSearchAutocomplete {...props} menuTrigger=\"input\" ref={ref} />;\n } else {\n return <SearchAutocompleteBase {...props} ref={ref} />;\n }\n}\n\nfunction _SearchAutocompleteBase<T extends object>(props: SpectrumSearchAutocompleteProps<T>, ref: FocusableRef<HTMLElement>) {\n props = useProviderProps(props);\n\n let {\n menuTrigger = 'input',\n shouldFlip = true,\n direction = 'bottom',\n align = 'start',\n isQuiet,\n menuWidth: customMenuWidth,\n loadingState,\n onLoadMore,\n onSubmit = () => {},\n validate\n } = props;\n\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/autocomplete');\n let isAsync = loadingState != null;\n let popoverRef = useRef<DOMRefValue<HTMLDivElement>>(null);\n let unwrappedPopoverRef = useUnwrapDOMRef(popoverRef);\n let listBoxRef = useRef(null);\n let inputRef = useRef<HTMLInputElement>(null);\n let domRef = useFocusableRef(ref, inputRef);\n\n let {contains} = useFilter({sensitivity: 'base'});\n let state = useComboBoxState(\n {\n ...props,\n defaultFilter: contains,\n allowsEmptyCollection: isAsync,\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 layout = useListBoxLayout(state, loadingState === 'loadingMore');\n\n let {inputProps, listBoxProps, labelProps, clearButtonProps, descriptionProps, errorMessageProps, isInvalid, validationErrors, validationDetails} = useSearchAutocomplete(\n {\n ...props,\n keyboardDelegate: layout,\n popoverRef: unwrappedPopoverRef,\n listBoxRef,\n inputRef,\n menuTrigger\n },\n state\n );\n\n // Measure the width of the inputfield to inform the width of the menu (below).\n let [menuWidth, setMenuWidth] = useState<number>(0);\n let {scale} = useProvider();\n\n let onResize = useCallback(() => {\n if (inputRef.current) {\n let inputWidth = inputRef.current.offsetWidth;\n setMenuWidth(inputWidth);\n }\n }, [inputRef, setMenuWidth]);\n\n useResizeObserver({\n ref: domRef,\n onResize: onResize\n });\n\n useLayoutEffect(onResize, [scale, onResize]);\n\n let width = isQuiet ? undefined : menuWidth;\n let style = {\n width: customMenuWidth ? dimensionValue(customMenuWidth) : width,\n minWidth: isQuiet ? `calc(${menuWidth}px + calc(2 * var(--spectrum-dropdown-quiet-offset)))` : menuWidth\n };\n\n return (\n <>\n <Field\n {...props}\n descriptionProps={descriptionProps}\n errorMessageProps={errorMessageProps}\n labelProps={labelProps}\n isInvalid={isInvalid}\n validationErrors={validationErrors}\n validationDetails={validationDetails}\n ref={domRef}>\n <SearchAutocompleteInput\n {...props}\n isOpen={state.isOpen}\n loadingState={loadingState}\n inputProps={inputProps}\n inputRef={inputRef}\n clearButtonProps={clearButtonProps}\n validationState={props.validationState || (isInvalid ? 'invalid' : undefined)} />\n </Field>\n <Popover\n state={state}\n UNSAFE_style={style}\n UNSAFE_className={classNames(styles, 'spectrum-InputGroup-popover', {'spectrum-InputGroup-popover--quiet': isQuiet})}\n ref={popoverRef}\n triggerRef={inputRef}\n placement={`${direction} ${align}`}\n hideArrow\n isNonModal\n shouldFlip={shouldFlip}>\n <ListBoxBase\n {...listBoxProps}\n ref={listBoxRef}\n disallowEmptySelection\n autoFocus={state.focusStrategy}\n shouldSelectOnPressUp\n focusOnPointerEnter\n layout={layout}\n state={state}\n shouldUseVirtualFocus\n isLoading={loadingState === 'loading' || loadingState === 'loadingMore'}\n onLoadMore={onLoadMore}\n renderEmptyState={() => isAsync && (\n <span className={classNames(searchAutocompleteStyles, 'no-results')}>\n {stringFormatter.format('noResults')}\n </span>\n )} />\n </Popover>\n </>\n );\n}\n\nlet SearchAutocompleteBase = React.forwardRef(_SearchAutocompleteBase) as <T>(props: SpectrumSearchAutocompleteProps<T> & {ref?: FocusableRef<HTMLElement>}) => ReactElement;\n\n\ninterface SearchAutocompleteInputProps<T> extends SpectrumSearchAutocompleteProps<T> {\n inputProps: InputHTMLAttributes<HTMLInputElement>,\n inputRef: RefObject<HTMLInputElement>,\n style?: React.CSSProperties,\n className?: string,\n isOpen?: boolean,\n clearButtonProps: AriaButtonProps\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\nfunction _SearchAutocompleteInput<T>(props: SearchAutocompleteInputProps<T>, ref: any) {\n let searchIcon = (\n <Magnifier data-testid=\"searchicon\" />\n );\n\n let {\n icon = searchIcon,\n isQuiet,\n isDisabled,\n isReadOnly,\n validationState,\n inputProps,\n inputRef,\n autoFocus,\n style,\n className,\n loadingState,\n isOpen,\n menuTrigger,\n clearButtonProps\n } = props;\n let {hoverProps, isHovered} = useHover({});\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/autocomplete');\n let domProps = filterDOMProps(props);\n let timeout = useRef<ReturnType<typeof setTimeout> | null>(null);\n let [showLoading, setShowLoading] = useState(false);\n\n let loadingCircle = (\n <ProgressCircle\n aria-label={stringFormatter.format('loading')}\n size=\"S\"\n isIndeterminate\n UNSAFE_className={classNames(\n textfieldStyles,\n 'spectrum-Textfield-circleLoader',\n classNames(\n styles,\n 'spectrum-InputGroup-input-circleLoader'\n ),\n classNames(\n searchStyles,\n 'spectrum-Search-circleLoader'\n )\n )} />\n );\n\n let clearButton = (\n <ClearButton\n {...clearButtonProps}\n preventFocus\n UNSAFE_className={\n classNames(\n searchStyles,\n 'spectrum-ClearButton'\n )\n }\n isDisabled={isDisabled} />\n );\n\n let isLoading = loadingState === 'loading' || loadingState === 'filtering';\n let inputValue = inputProps.value;\n let lastInputValue = useRef(inputValue);\n useEffect(() => {\n if (isLoading && !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 (!isLoading) {\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 }, [isLoading, showLoading, inputValue]);\n\n return (\n <FocusRing\n within\n isTextInput\n focusClass={classNames(styles, 'is-focused')}\n focusRingClass={classNames(styles, 'focus-ring')}\n autoFocus={autoFocus}>\n <div\n {...hoverProps}\n ref={ref as RefObject<HTMLDivElement>}\n style={style}\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 },\n classNames(\n searchAutocompleteStyles,\n 'searchautocomplete'\n ),\n className\n )\n }>\n <TextFieldBase\n {...domProps}\n inputProps={inputProps}\n inputRef={inputRef}\n UNSAFE_className={\n classNames(\n searchStyles,\n 'spectrum-Search',\n 'spectrum-Search--loadable',\n 'spectrum-Textfield',\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 classNames(\n styles,\n 'spectrum-InputGroup-field'\n )\n )\n }\n inputClassName={classNames(searchStyles, 'spectrum-Search-input')}\n validationIconClassName={\n classNames(\n searchStyles,\n 'spectrum-Search-validationIcon'\n )\n }\n isDisabled={isDisabled}\n isQuiet={isQuiet}\n validationState={validationState}\n isLoading={showLoading && (isOpen || menuTrigger === 'manual' || loadingState === 'loading')}\n loadingIndicator={loadingState != null ? loadingCircle : undefined}\n icon={icon}\n wrapperChildren={(inputValue !== '' || loadingState === 'filtering' || validationState != null) && !isReadOnly ? clearButton : undefined}\n disableFocusRing />\n </div>\n </FocusRing>\n );\n}\n\nlet SearchAutocompleteInput = React.forwardRef(_SearchAutocompleteInput) as <T>(props: SearchAutocompleteInputProps<T> & {ref?: any}) => ReactElement;\n\n\n/**\n * A SearchAutocomplete is a searchfield that supports a dynamic list of suggestions.\n */\nlet _SearchAutocomplete = forwardRef(SearchAutocomplete) as <T>(props: SpectrumSearchAutocompleteProps<T> & {ref?: FocusableRef<HTMLElement>}) => ReactElement;\nexport {_SearchAutocomplete as SearchAutocomplete};\n"],"names":[],"version":3,"file":"SearchAutocomplete.module.js.map"}
|
|
1
|
+
{"mappings":"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","sources":["packages/@react-spectrum/autocomplete/src/SearchAutocomplete.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 */\nimport {AriaButtonProps} from '@react-types/button';\nimport {classNames, dimensionValue, useFocusableRef, useIsMobileDevice, useResizeObserver, useUnwrapDOMRef} from '@react-spectrum/utils';\nimport {ClearButton} from '@react-spectrum/button';\nimport {DOMRefValue, FocusableRef} from '@react-types/shared';\nimport {Field} from '@react-spectrum/label';\nimport {filterDOMProps, useLayoutEffect} from '@react-aria/utils';\nimport {FocusRing} 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 {MobileSearchAutocomplete} from './MobileSearchAutocomplete';\nimport {Popover} from '@react-spectrum/overlays';\nimport {ProgressCircle} from '@react-spectrum/progress';\nimport React, {\n forwardRef,\n InputHTMLAttributes,\n ReactElement,\n RefObject,\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 {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 {useComboBoxState} from '@react-stately/combobox';\nimport {useFilter, useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useFormProps} from '@react-spectrum/form';\nimport {useHover} from '@react-aria/interactions';\nimport {useProvider, useProviderProps} from '@react-spectrum/provider';\nimport {useSearchAutocomplete} from '@react-aria/autocomplete';\n\nfunction SearchAutocomplete<T extends object>(props: SpectrumSearchAutocompleteProps<T>, ref: FocusableRef<HTMLElement>) {\n props = useProviderProps(props);\n props = useFormProps(props);\n\n if (props.placeholder) {\n console.warn('Placeholders are deprecated due to accessibility issues. Please use help text instead.');\n }\n\n let isMobile = useIsMobileDevice();\n if (isMobile) {\n // menuTrigger=focus/manual don't apply to mobile searchwithin\n return <MobileSearchAutocomplete {...props} menuTrigger=\"input\" ref={ref} />;\n } else {\n return <SearchAutocompleteBase {...props} ref={ref} />;\n }\n}\n\nfunction _SearchAutocompleteBase<T extends object>(props: SpectrumSearchAutocompleteProps<T>, ref: FocusableRef<HTMLElement>) {\n props = useProviderProps(props);\n\n let {\n menuTrigger = 'input',\n shouldFlip = true,\n direction = 'bottom',\n align = 'start',\n isQuiet,\n menuWidth: customMenuWidth,\n loadingState,\n onLoadMore,\n onSubmit = () => {},\n validate\n } = props;\n\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/autocomplete');\n let isAsync = loadingState != null;\n let popoverRef = useRef<DOMRefValue<HTMLDivElement>>(null);\n let unwrappedPopoverRef = useUnwrapDOMRef(popoverRef);\n let listBoxRef = useRef(null);\n let inputRef = useRef<HTMLInputElement>(null);\n let domRef = useFocusableRef(ref, inputRef);\n\n let {contains} = useFilter({sensitivity: 'base'});\n let state = useComboBoxState(\n {\n ...props,\n defaultFilter: contains,\n allowsEmptyCollection: isAsync,\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 layout = useListBoxLayout();\n\n let {inputProps, listBoxProps, labelProps, clearButtonProps, descriptionProps, errorMessageProps, isInvalid, validationErrors, validationDetails} = useSearchAutocomplete(\n {\n ...props,\n layoutDelegate: layout,\n popoverRef: unwrappedPopoverRef,\n listBoxRef,\n inputRef,\n menuTrigger\n },\n state\n );\n\n // Measure the width of the inputfield to inform the width of the menu (below).\n let [menuWidth, setMenuWidth] = useState<number>(0);\n let {scale} = useProvider();\n\n let onResize = useCallback(() => {\n if (inputRef.current) {\n let inputWidth = inputRef.current.offsetWidth;\n setMenuWidth(inputWidth);\n }\n }, [inputRef, setMenuWidth]);\n\n useResizeObserver({\n ref: domRef,\n onResize: onResize\n });\n\n useLayoutEffect(onResize, [scale, onResize]);\n\n let width = isQuiet ? undefined : menuWidth;\n let style = {\n width: customMenuWidth ? dimensionValue(customMenuWidth) : width,\n minWidth: isQuiet ? `calc(${menuWidth}px + calc(2 * var(--spectrum-dropdown-quiet-offset)))` : menuWidth\n };\n\n return (\n <>\n <Field\n {...props}\n descriptionProps={descriptionProps}\n errorMessageProps={errorMessageProps}\n labelProps={labelProps}\n isInvalid={isInvalid}\n validationErrors={validationErrors}\n validationDetails={validationDetails}\n ref={domRef}>\n <SearchAutocompleteInput\n {...props}\n isOpen={state.isOpen}\n loadingState={loadingState}\n inputProps={inputProps}\n inputRef={inputRef}\n clearButtonProps={clearButtonProps}\n validationState={props.validationState || (isInvalid ? 'invalid' : undefined)} />\n </Field>\n <Popover\n state={state}\n UNSAFE_style={style}\n UNSAFE_className={classNames(styles, 'spectrum-InputGroup-popover', {'spectrum-InputGroup-popover--quiet': isQuiet})}\n ref={popoverRef}\n triggerRef={inputRef}\n placement={`${direction} ${align}`}\n hideArrow\n isNonModal\n shouldFlip={shouldFlip}>\n <ListBoxBase\n {...listBoxProps}\n ref={listBoxRef}\n disallowEmptySelection\n autoFocus={state.focusStrategy}\n shouldSelectOnPressUp\n focusOnPointerEnter\n layout={layout}\n state={state}\n shouldUseVirtualFocus\n isLoading={loadingState === 'loading' || loadingState === 'loadingMore'}\n showLoadingSpinner={loadingState === 'loadingMore'}\n onLoadMore={onLoadMore}\n renderEmptyState={() => isAsync && (\n <span className={classNames(searchAutocompleteStyles, 'no-results')}>\n {stringFormatter.format('noResults')}\n </span>\n )} />\n </Popover>\n </>\n );\n}\n\nlet SearchAutocompleteBase = React.forwardRef(_SearchAutocompleteBase) as <T>(props: SpectrumSearchAutocompleteProps<T> & {ref?: FocusableRef<HTMLElement>}) => ReactElement;\n\n\ninterface SearchAutocompleteInputProps<T> extends SpectrumSearchAutocompleteProps<T> {\n inputProps: InputHTMLAttributes<HTMLInputElement>,\n inputRef: RefObject<HTMLInputElement | null>,\n style?: React.CSSProperties,\n className?: string,\n isOpen?: boolean,\n clearButtonProps: AriaButtonProps\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\nfunction _SearchAutocompleteInput<T>(props: SearchAutocompleteInputProps<T>, ref: any) {\n let searchIcon = (\n <Magnifier data-testid=\"searchicon\" />\n );\n\n let {\n icon = searchIcon,\n isQuiet,\n isDisabled,\n isReadOnly,\n validationState,\n inputProps,\n inputRef,\n autoFocus,\n style,\n className,\n loadingState,\n isOpen,\n menuTrigger,\n clearButtonProps\n } = props;\n let {hoverProps, isHovered} = useHover({});\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/autocomplete');\n let domProps = filterDOMProps(props);\n let timeout = useRef<ReturnType<typeof setTimeout> | null>(null);\n let [showLoading, setShowLoading] = useState(false);\n\n let loadingCircle = (\n <ProgressCircle\n aria-label={stringFormatter.format('loading')}\n size=\"S\"\n isIndeterminate\n UNSAFE_className={classNames(\n textfieldStyles,\n 'spectrum-Textfield-circleLoader',\n classNames(\n styles,\n 'spectrum-InputGroup-input-circleLoader'\n ),\n classNames(\n searchStyles,\n 'spectrum-Search-circleLoader'\n )\n )} />\n );\n\n let clearButton = (\n <ClearButton\n {...clearButtonProps}\n preventFocus\n UNSAFE_className={\n classNames(\n searchStyles,\n 'spectrum-ClearButton'\n )\n }\n isDisabled={isDisabled} />\n );\n\n let isLoading = loadingState === 'loading' || loadingState === 'filtering';\n let inputValue = inputProps.value;\n let lastInputValue = useRef(inputValue);\n useEffect(() => {\n if (isLoading && !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 (!isLoading) {\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 }, [isLoading, showLoading, inputValue]);\n\n return (\n (<FocusRing\n within\n isTextInput\n focusClass={classNames(styles, 'is-focused')}\n focusRingClass={classNames(styles, 'focus-ring')}\n autoFocus={autoFocus}>\n <div\n {...hoverProps}\n ref={ref as RefObject<HTMLDivElement | null>}\n style={style}\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 },\n classNames(\n searchAutocompleteStyles,\n 'searchautocomplete'\n ),\n className\n )\n }>\n <TextFieldBase\n {...domProps}\n inputProps={inputProps}\n inputRef={inputRef}\n UNSAFE_className={\n classNames(\n searchStyles,\n 'spectrum-Search',\n 'spectrum-Search--loadable',\n 'spectrum-Textfield',\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 classNames(\n styles,\n 'spectrum-InputGroup-field'\n )\n )\n }\n inputClassName={classNames(searchStyles, 'spectrum-Search-input')}\n validationIconClassName={\n classNames(\n searchStyles,\n 'spectrum-Search-validationIcon'\n )\n }\n isDisabled={isDisabled}\n isQuiet={isQuiet}\n validationState={validationState}\n isLoading={showLoading && (isOpen || menuTrigger === 'manual' || loadingState === 'loading')}\n loadingIndicator={loadingState != null ? loadingCircle : undefined}\n icon={icon}\n wrapperChildren={(inputValue !== '' || loadingState === 'filtering' || validationState != null) && !isReadOnly ? clearButton : undefined}\n disableFocusRing />\n </div>\n </FocusRing>)\n );\n}\n\nlet SearchAutocompleteInput = React.forwardRef(_SearchAutocompleteInput) as <T>(props: SearchAutocompleteInputProps<T> & {ref?: any}) => ReactElement;\n\n\n/**\n * A SearchAutocomplete is a searchfield that supports a dynamic list of suggestions.\n */\nlet _SearchAutocomplete = forwardRef(SearchAutocomplete) as <T>(props: SpectrumSearchAutocompleteProps<T> & {ref?: FocusableRef<HTMLElement>}) => ReactElement;\nexport {_SearchAutocomplete as SearchAutocomplete};\n"],"names":[],"version":3,"file":"SearchAutocomplete.module.js.map"}
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":";;;
|
|
1
|
+
{"mappings":";;;ACiXA;;GAEG;AACH,OAAA,IAAI,oBAAwD,CAAC,CAAC,EAAE,KAAK,EAAE,gCAAgC,CAAC,CAAC,GAAG;IAAC,GAAG,CAAC,EAAE,aAAa,WAAW,CAAC,CAAA;CAAC,KAAK,YAAY,CAAC;ACvW/J,OAAO,EAAC,IAAI,EAAE,OAAO,EAAC,MAAM,4BAA4B,CAAC;AACzD,YAAY,EAAC,+BAA+B,EAAC,MAAM,2BAA2B,CAAC","sources":["packages/@react-spectrum/autocomplete/src/packages/@react-spectrum/autocomplete/src/MobileSearchAutocomplete.tsx","packages/@react-spectrum/autocomplete/src/packages/@react-spectrum/autocomplete/src/SearchAutocomplete.tsx","packages/@react-spectrum/autocomplete/src/packages/@react-spectrum/autocomplete/src/index.ts","packages/@react-spectrum/autocomplete/src/index.ts"],"sourcesContent":[null,null,null,"/*\n * Copyright 2021 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/// <reference types=\"css-module-types\" />\nexport {SearchAutocomplete} from './SearchAutocomplete';\nexport {Item, Section} from '@react-stately/collections';\nexport type {SpectrumSearchAutocompleteProps} from '@react-types/autocomplete';\n"],"names":[],"version":3,"file":"types.d.ts.map"}
|
|
@@ -244,6 +244,7 @@
|
|
|
244
244
|
}
|
|
245
245
|
|
|
246
246
|
.YO3Nla_spectrum-Textfield-validationIcon {
|
|
247
|
+
box-sizing: content-box;
|
|
247
248
|
pointer-events: all;
|
|
248
249
|
transition: color var(--spectrum-global-animation-duration-100, .13s) ease-in-out;
|
|
249
250
|
padding-inline-end: calc(var(--spectrum-textfield-padding-x, var(--spectrum-global-dimension-size-150)) / 2);
|
|
@@ -546,4 +547,4 @@
|
|
|
546
547
|
border-color: var(--spectrum-textfield-quiet-border-color-key-focus, var(--spectrum-alias-border-color-focus));
|
|
547
548
|
}
|
|
548
549
|
}
|
|
549
|
-
/*# sourceMappingURL=vars.
|
|
550
|
+
/*# sourceMappingURL=vars.f9e74788.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"AA4DA;;;;;AAIE;;;;AAIA;;;;AAIA;;;;AAIA;;;;AAIA;;;;AAIA;;;;AAQA;;;;AAIA;;;;AAKF;;;;;;;;AAOE;;;;;;;;;;;AAqBE;;;;;AAQF;;;;AAKE;;;;;AAOJ;EACE;;;;EAIE;;;;;AAMJ;;;;;;;AAQE;;;;;;AAWF;;;;;;;;;;;;;;;;;;;;AA4CE;;;;;;;;AAYA;;;;;;;AAWE;;;;AAIA;;;;AAJA;;;;AAIA;;;;AAJA;;;;AAIA;;;;AAJA;;;;AAIA;;;;AAJA;;;;AAIA;;;;AAMA;;;;AAKF;;;;;AAME;;;;AAQF;;;;;AAOA;;;;;AAAA;;;;;AAOA;;;;AAIA;;;;;;;;AAUA;;;;;;;AASA;;;;AAIA;;;;AASF;;;;AAIA;;;;;AAKE;;;;AAIA;;;;;AAME;;;;AAOJ;;;;;;;;AAUE;;;;AAKF;;;;;;AAAA;;;;AAAA;;;;AAAA;;;;AAAA;;;;AAOA;;;;;;AAAA;;;;AAAA;;;;AAAA;;;;AAAA;;;;AASA;;;;;;;;;AAAA;;;;AAAA;;;;AAAA;;;;AAAA;;;;AAaA;;;;AASE;;;;AAIE;;;;AAAA;;;;AAAA;;;;AAAA;;;;AAKF;;;;;AAQF;;;;;AAAA;;;;AAAA;;;;AAAA;;;;AAAA;;;;AAME;;;;AAiBF;;;;;;AAKE;;;;AAKA;;;;;AAIE;;;;AAMF;;;;;;AAKE;;;;AAMF;;;;AAME;;;;;AAMF;;;;;;;AASE;;;;AAKA;;;;AAdF;;;;;;;AASE;;;;AAKA;;;;AAKF;;;;AAGE;;;;AAcE;;;;;AAOJ;;;;;AAIE;;;;AAIA;;;;AAIA;;;;AAME;;;;;AAMF;;;;;AAOF;;;;AAGE;;;;AAIA;;;;AAIA;;;;AAME;;;;;AASA;;;;AASJ;;;;AAIA;;;;AAKF;EACE;;;;;;;;;;;;EAUE;;;;;EAKE;;;;;;EAKE","sources":["packages/@adobe/spectrum-css-temp/components/textfield/vars.css"],"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\n@import './index.css';\n@import './skin.css';\n"],"names":[],"version":3,"file":"vars.f9e74788.css.map"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-spectrum/autocomplete",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.33",
|
|
4
4
|
"description": "Spectrum UI components in React",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"main": "dist/main.js",
|
|
@@ -36,30 +36,30 @@
|
|
|
36
36
|
"url": "https://github.com/adobe/react-spectrum"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@react-aria/autocomplete": "3.0.0-alpha.
|
|
40
|
-
"@react-aria/button": "^3.9.
|
|
41
|
-
"@react-aria/dialog": "^3.5.
|
|
42
|
-
"@react-aria/focus": "^3.
|
|
43
|
-
"@react-aria/form": "^3.0.
|
|
44
|
-
"@react-aria/i18n": "^3.
|
|
45
|
-
"@react-aria/interactions": "^3.
|
|
46
|
-
"@react-aria/label": "^3.7.
|
|
47
|
-
"@react-aria/overlays": "^3.
|
|
48
|
-
"@react-aria/utils": "^3.
|
|
49
|
-
"@react-spectrum/button": "^3.16.
|
|
50
|
-
"@react-spectrum/form": "^3.7.
|
|
51
|
-
"@react-spectrum/label": "^3.16.
|
|
52
|
-
"@react-spectrum/listbox": "^3.
|
|
53
|
-
"@react-spectrum/overlays": "^5.6.
|
|
54
|
-
"@react-spectrum/progress": "^3.7.
|
|
55
|
-
"@react-spectrum/textfield": "^3.12.
|
|
56
|
-
"@react-spectrum/utils": "^3.11.
|
|
57
|
-
"@react-stately/collections": "^3.10.
|
|
58
|
-
"@react-stately/combobox": "^3.
|
|
59
|
-
"@react-types/autocomplete": "3.0.0-alpha.
|
|
60
|
-
"@react-types/button": "^3.9.
|
|
61
|
-
"@react-types/shared": "^3.
|
|
62
|
-
"@spectrum-icons/ui": "^3.6.
|
|
39
|
+
"@react-aria/autocomplete": "3.0.0-alpha.30",
|
|
40
|
+
"@react-aria/button": "^3.9.6",
|
|
41
|
+
"@react-aria/dialog": "^3.5.15",
|
|
42
|
+
"@react-aria/focus": "^3.18.0",
|
|
43
|
+
"@react-aria/form": "^3.0.6",
|
|
44
|
+
"@react-aria/i18n": "^3.12.0",
|
|
45
|
+
"@react-aria/interactions": "^3.22.0",
|
|
46
|
+
"@react-aria/label": "^3.7.9",
|
|
47
|
+
"@react-aria/overlays": "^3.23.0",
|
|
48
|
+
"@react-aria/utils": "^3.25.0",
|
|
49
|
+
"@react-spectrum/button": "^3.16.5",
|
|
50
|
+
"@react-spectrum/form": "^3.7.7",
|
|
51
|
+
"@react-spectrum/label": "^3.16.7",
|
|
52
|
+
"@react-spectrum/listbox": "^3.13.0",
|
|
53
|
+
"@react-spectrum/overlays": "^5.6.2",
|
|
54
|
+
"@react-spectrum/progress": "^3.7.8",
|
|
55
|
+
"@react-spectrum/textfield": "^3.12.2",
|
|
56
|
+
"@react-spectrum/utils": "^3.11.8",
|
|
57
|
+
"@react-stately/collections": "^3.10.8",
|
|
58
|
+
"@react-stately/combobox": "^3.9.0",
|
|
59
|
+
"@react-types/autocomplete": "3.0.0-alpha.23",
|
|
60
|
+
"@react-types/button": "^3.9.5",
|
|
61
|
+
"@react-types/shared": "^3.24.0",
|
|
62
|
+
"@spectrum-icons/ui": "^3.6.8",
|
|
63
63
|
"@swc/helpers": "^0.5.0"
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
@@ -67,11 +67,11 @@
|
|
|
67
67
|
},
|
|
68
68
|
"peerDependencies": {
|
|
69
69
|
"@react-spectrum/provider": "^3.0.0",
|
|
70
|
-
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
|
|
71
|
-
"react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
|
|
70
|
+
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0",
|
|
71
|
+
"react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0"
|
|
72
72
|
},
|
|
73
73
|
"publishConfig": {
|
|
74
74
|
"access": "public"
|
|
75
75
|
},
|
|
76
|
-
"gitHead": "
|
|
76
|
+
"gitHead": "86d80e3216bc32e75108831cf3a5a720bc849206"
|
|
77
77
|
}
|
|
@@ -394,13 +394,13 @@ function SearchAutocompleteTray<T>(props: SearchAutocompleteTrayProps<T>) {
|
|
|
394
394
|
let popoverRef = useRef<HTMLDivElement>(null);
|
|
395
395
|
let listBoxRef = useRef<HTMLDivElement>(null);
|
|
396
396
|
let isLoading = loadingState === 'loading' || loadingState === 'loadingMore';
|
|
397
|
-
let layout = useListBoxLayout(
|
|
397
|
+
let layout = useListBoxLayout();
|
|
398
398
|
let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/autocomplete');
|
|
399
399
|
|
|
400
400
|
let {inputProps, listBoxProps, labelProps, clearButtonProps} = useSearchAutocomplete<T>(
|
|
401
401
|
{
|
|
402
402
|
...props,
|
|
403
|
-
|
|
403
|
+
layoutDelegate: layout,
|
|
404
404
|
popoverRef: popoverRef,
|
|
405
405
|
listBoxRef,
|
|
406
406
|
inputRef,
|
|
@@ -100,12 +100,12 @@ function _SearchAutocompleteBase<T extends object>(props: SpectrumSearchAutocomp
|
|
|
100
100
|
validate: useCallback(v => validate?.(v.inputValue), [validate])
|
|
101
101
|
}
|
|
102
102
|
);
|
|
103
|
-
let layout = useListBoxLayout(
|
|
103
|
+
let layout = useListBoxLayout();
|
|
104
104
|
|
|
105
105
|
let {inputProps, listBoxProps, labelProps, clearButtonProps, descriptionProps, errorMessageProps, isInvalid, validationErrors, validationDetails} = useSearchAutocomplete(
|
|
106
106
|
{
|
|
107
107
|
...props,
|
|
108
|
-
|
|
108
|
+
layoutDelegate: layout,
|
|
109
109
|
popoverRef: unwrappedPopoverRef,
|
|
110
110
|
listBoxRef,
|
|
111
111
|
inputRef,
|
|
@@ -179,6 +179,7 @@ function _SearchAutocompleteBase<T extends object>(props: SpectrumSearchAutocomp
|
|
|
179
179
|
state={state}
|
|
180
180
|
shouldUseVirtualFocus
|
|
181
181
|
isLoading={loadingState === 'loading' || loadingState === 'loadingMore'}
|
|
182
|
+
showLoadingSpinner={loadingState === 'loadingMore'}
|
|
182
183
|
onLoadMore={onLoadMore}
|
|
183
184
|
renderEmptyState={() => isAsync && (
|
|
184
185
|
<span className={classNames(searchAutocompleteStyles, 'no-results')}>
|
|
@@ -195,7 +196,7 @@ let SearchAutocompleteBase = React.forwardRef(_SearchAutocompleteBase) as <T>(pr
|
|
|
195
196
|
|
|
196
197
|
interface SearchAutocompleteInputProps<T> extends SpectrumSearchAutocompleteProps<T> {
|
|
197
198
|
inputProps: InputHTMLAttributes<HTMLInputElement>,
|
|
198
|
-
inputRef: RefObject<HTMLInputElement>,
|
|
199
|
+
inputRef: RefObject<HTMLInputElement | null>,
|
|
199
200
|
style?: React.CSSProperties,
|
|
200
201
|
className?: string,
|
|
201
202
|
isOpen?: boolean,
|
|
@@ -294,7 +295,7 @@ function _SearchAutocompleteInput<T>(props: SearchAutocompleteInputProps<T>, ref
|
|
|
294
295
|
}, [isLoading, showLoading, inputValue]);
|
|
295
296
|
|
|
296
297
|
return (
|
|
297
|
-
<FocusRing
|
|
298
|
+
(<FocusRing
|
|
298
299
|
within
|
|
299
300
|
isTextInput
|
|
300
301
|
focusClass={classNames(styles, 'is-focused')}
|
|
@@ -302,7 +303,7 @@ function _SearchAutocompleteInput<T>(props: SearchAutocompleteInputProps<T>, ref
|
|
|
302
303
|
autoFocus={autoFocus}>
|
|
303
304
|
<div
|
|
304
305
|
{...hoverProps}
|
|
305
|
-
ref={ref as RefObject<HTMLDivElement>}
|
|
306
|
+
ref={ref as RefObject<HTMLDivElement | null>}
|
|
306
307
|
style={style}
|
|
307
308
|
className={
|
|
308
309
|
classNames(
|
|
@@ -359,7 +360,7 @@ function _SearchAutocompleteInput<T>(props: SearchAutocompleteInputProps<T>, ref
|
|
|
359
360
|
wrapperChildren={(inputValue !== '' || loadingState === 'filtering' || validationState != null) && !isReadOnly ? clearButton : undefined}
|
|
360
361
|
disableFocusRing />
|
|
361
362
|
</div>
|
|
362
|
-
</FocusRing>
|
|
363
|
+
</FocusRing>)
|
|
363
364
|
);
|
|
364
365
|
}
|
|
365
366
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"AA4DA;;;;;AAIE;;;;AAIA;;;;AAIA;;;;AAIA;;;;AAIA;;;;AAIA;;;;AAQA;;;;AAIA;;;;AAKF;;;;;;;;AAOE;;;;;;;;;;;AAqBE;;;;;AAQF;;;;AAKE;;;;;AAOJ;EACE;;;;EAIE;;;;;AAMJ;;;;;;;AAQE;;;;;;AAWF;;;;;;;;;;;;;;;;;;;;AA4CE;;;;;;;;AAYA;;;;;;;AAWE;;;;AAIA;;;;AAJA;;;;AAIA;;;;AAJA;;;;AAIA;;;;AAJA;;;;AAIA;;;;AAJA;;;;AAIA;;;;AAMA;;;;AAKF;;;;;AAME;;;;AAQF;;;;;AAOA;;;;;AAAA;;;;;AAOA;;;;AAIA;;;;;;;;AAUA;;;;;;;AASA;;;;AAIA;;;;AASF;;;;AAIA;;;;;AAKE;;;;AAIA;;;;;AAME;;;;AAOJ;;;;;;;AASE;;;;AAKF;;;;;;AAAA;;;;AAAA;;;;AAAA;;;;AAAA;;;;AAOA;;;;;;AAAA;;;;AAAA;;;;AAAA;;;;AAAA;;;;AASA;;;;;;;;;AAAA;;;;AAAA;;;;AAAA;;;;AAAA;;;;AAaA;;;;AASE;;;;AAIE;;;;AAAA;;;;AAAA;;;;AAAA;;;;AAKF;;;;;AAQF;;;;;AAAA;;;;AAAA;;;;AAAA;;;;AAAA;;;;AAME;;;;AAiBF;;;;;;AAKE;;;;AAKA;;;;;AAIE;;;;AAMF;;;;;;AAKE;;;;AAMF;;;;AAME;;;;;AAMF;;;;;;;AASE;;;;AAKA;;;;AAdF;;;;;;;AASE;;;;AAKA;;;;AAKF;;;;AAGE;;;;AAcE;;;;;AAOJ;;;;;AAIE;;;;AAIA;;;;AAIA;;;;AAME;;;;;AAMF;;;;;AAOF;;;;AAGE;;;;AAIA;;;;AAIA;;;;AAME;;;;;AASA;;;;AASJ;;;;AAIA;;;;AAKF;EACE;;;;;;;;;;;;EAUE;;;;;EAKE;;;;;;EAKE","sources":["packages/@adobe/spectrum-css-temp/components/textfield/vars.css"],"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\n@import './index.css';\n@import './skin.css';\n"],"names":[],"version":3,"file":"vars.5653edea.css.map"}
|