{"mappings":"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","sources":["packages/@adobe/react-spectrum/src/autocomplete/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-aria/useButton';\n\nimport {\n  AriaSearchAutocompleteProps,\n  useSearchAutocomplete\n} from 'react-aria/private/autocomplete/useSearchAutocomplete';\nimport {\n  AsyncLoadable,\n  DimensionValue,\n  DOMRefValue,\n  FocusableRef,\n  LoadingState,\n  SpectrumFieldValidation,\n  SpectrumLabelableProps,\n  SpectrumTextInputBase,\n  StyleProps\n} from '@react-types/shared';\nimport {classNames} from '../utils/classNames';\nimport {ClearButton} from '../button/ClearButton';\nimport {dimensionValue} from '../utils/styleProps';\nimport {Field} from '../label/Field';\nimport {filterDOMProps} from 'react-aria/filterDOMProps';\nimport {FocusRing} from 'react-aria/FocusRing';\nimport intlMessages from '../../intl/autocomplete/*.json';\nimport {ListBoxBase, useListBoxLayout} from '../listbox/ListBoxBase';\nimport Magnifier from '@spectrum-icons/ui/Magnifier';\nimport {MenuTriggerAction, useComboBoxState} from 'react-stately/useComboBoxState';\n// @ts-ignore\nimport {MobileSearchAutocomplete} from './MobileSearchAutocomplete';\nimport {Popover} from '../overlays/Popover';\nimport {ProgressCircle} from '../progress/ProgressCircle';\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 styles from '@adobe/spectrum-css-temp/components/inputgroup/vars.css';\nimport {TextFieldBase} from '../textfield/TextFieldBase';\nimport textfieldStyles from '@adobe/spectrum-css-temp/components/textfield/vars.css';\nimport {useFilter} from 'react-aria/useFilter';\nimport {useFocusableRef, useUnwrapDOMRef} from '../utils/useDOMRef';\nimport {useFormProps} from '../form/Form';\nimport {useHover} from 'react-aria/useHover';\nimport {useIsMobileDevice} from '../utils/useIsMobileDevice';\nimport {useLayoutEffect} from 'react-aria/private/utils/useLayoutEffect';\nimport {useLocalizedStringFormatter} from 'react-aria/useLocalizedStringFormatter';\nimport {useProvider, useProviderProps} from '../provider/Provider';\nimport {useResizeObserver} from 'react-aria/private/utils/useResizeObserver';\n\nexport interface SpectrumSearchAutocompleteProps<T>\n  extends\n    SpectrumTextInputBase,\n    Omit<\n      AriaSearchAutocompleteProps<T>,\n      'menuTrigger' | 'isInvalid' | 'validationState' | 'validate'\n    >,\n    SpectrumFieldValidation<string>,\n    SpectrumLabelableProps,\n    StyleProps,\n    Omit<AsyncLoadable, 'isLoading'> {\n  /**\n   * The interaction required to display the SearchAutocomplete menu. Note that this prop has no\n   * effect on the mobile SearchAutocomplete experience.\n   *\n   * @default 'input'\n   */\n  menuTrigger?: MenuTriggerAction;\n  /** Whether the SearchAutocomplete should be displayed with a quiet style. */\n  isQuiet?: boolean;\n  /**\n   * Alignment of the menu relative to the input target.\n   *\n   * @default 'start'\n   */\n  align?: 'start' | 'end';\n  /**\n   * Direction the menu will render relative to the SearchAutocomplete.\n   *\n   * @default 'bottom'\n   */\n  direction?: 'bottom' | 'top';\n  /**\n   * The current loading state of the SearchAutocomplete. Determines whether or not the progress\n   * circle should be shown.\n   */\n  loadingState?: LoadingState;\n  /**\n   * Whether the menu should automatically flip direction when space is limited.\n   *\n   * @default true\n   */\n  shouldFlip?: boolean;\n  /**\n   * Width of the menu. By default, matches width of the trigger. Note that the minimum width of the\n   * dropdown is always equal to the trigger's width.\n   */\n  menuWidth?: DimensionValue;\n  onLoadMore?: () => void;\n  /** An icon to display at the start of the input. */\n  icon?: ReactElement | null;\n}\n\nfunction SearchAutocomplete<T extends object>(\n  props: SpectrumSearchAutocompleteProps<T>,\n  ref: FocusableRef<HTMLElement>\n) {\n  props = useProviderProps(props);\n  props = useFormProps(props);\n\n  let hasWarned = useRef(false);\n  useEffect(() => {\n    if (props.placeholder && !hasWarned.current && process.env.NODE_ENV !== 'production') {\n      console.warn(\n        'Placeholders are deprecated due to accessibility issues. Please use help text instead.'\n      );\n      hasWarned.current = true;\n    }\n  }, [props.placeholder]);\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 ForwardSearchAutocompleteBase<T extends object>(\n  props: SpectrumSearchAutocompleteProps<T>,\n  ref: FocusableRef<HTMLElement>\n) {\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    ...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  let layout = useListBoxLayout();\n\n  let {\n    inputProps,\n    listBoxProps,\n    labelProps,\n    clearButtonProps,\n    descriptionProps,\n    errorMessageProps,\n    isInvalid,\n    validationErrors,\n    validationDetails\n  } = 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\n      ? `calc(${menuWidth}px + calc(2 * var(--spectrum-dropdown-quiet-offset)))`\n      : 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        />\n      </Field>\n      <Popover\n        state={state}\n        UNSAFE_style={style}\n        UNSAFE_className={classNames(styles, 'spectrum-InputGroup-popover', {\n          'spectrum-InputGroup-popover--quiet': isQuiet\n        })}\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 ?? undefined}\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={() =>\n            isAsync && (\n              <span className={classNames(searchAutocompleteStyles, 'no-results')}>\n                {stringFormatter.format('noResults')}\n              </span>\n            )\n          }\n        />\n      </Popover>\n    </>\n  );\n}\n\nlet SearchAutocompleteBase = React.forwardRef(ForwardSearchAutocompleteBase) as <T>(\n  props: SpectrumSearchAutocompleteProps<T> & {ref?: FocusableRef<HTMLElement>}\n) => ReactElement;\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 ForwardSearchAutocompleteInput<T>(props: SearchAutocompleteInputProps<T>, ref: any) {\n  let searchIcon = <Magnifier data-testid=\"searchicon\" />;\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(styles, 'spectrum-InputGroup-input-circleLoader'),\n        classNames(searchStyles, 'spectrum-Search-circleLoader')\n      )}\n    />\n  );\n\n  let clearButton = (\n    <ClearButton\n      {...clearButtonProps}\n      preventFocus\n      UNSAFE_className={classNames(searchStyles, 'spectrum-ClearButton')}\n      isDisabled={isDisabled}\n    />\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      if (timeout.current != null) {\n        clearTimeout(timeout.current);\n        timeout.current = null;\n      }\n    }\n\n    lastInputValue.current = inputValue;\n  }, [isLoading, showLoading, inputValue]);\n  let [prevIsLoading, setPrevIsLoading] = useState(isLoading);\n  if (prevIsLoading !== isLoading && !isLoading) {\n    setShowLoading(false);\n    setPrevIsLoading(isLoading);\n  }\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={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(searchAutocompleteStyles, 'searchautocomplete'),\n          className\n        )}>\n        <TextFieldBase\n          {...domProps}\n          inputProps={inputProps}\n          inputRef={inputRef}\n          UNSAFE_className={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(styles, 'spectrum-InputGroup-field')\n          )}\n          inputClassName={classNames(searchStyles, 'spectrum-Search-input')}\n          validationIconClassName={classNames(searchStyles, 'spectrum-Search-validationIcon')}\n          isDisabled={isDisabled}\n          isQuiet={isQuiet}\n          validationState={validationState}\n          isLoading={\n            showLoading && (isOpen || menuTrigger === 'manual' || loadingState === 'loading')\n          }\n          loadingIndicator={loadingState != null ? loadingCircle : undefined}\n          icon={icon}\n          wrapperChildren={\n            (inputValue !== '' || loadingState === 'filtering' || validationState != null) &&\n            !isReadOnly\n              ? clearButton\n              : undefined\n          }\n          disableFocusRing\n        />\n      </div>\n    </FocusRing>\n  );\n}\n\nlet SearchAutocompleteInput = React.forwardRef(ForwardSearchAutocompleteInput) as <T>(\n  props: SearchAutocompleteInputProps<T> & {ref?: any}\n) => ReactElement;\n\n/**\n * A SearchAutocomplete is a searchfield that supports a dynamic list of suggestions.\n */\nlet ForwardSearchAutocomplete = forwardRef(SearchAutocomplete) as <T>(\n  props: SpectrumSearchAutocompleteProps<T> & {ref?: FocusableRef<HTMLElement>}\n) => ReactElement;\nexport {ForwardSearchAutocomplete as SearchAutocomplete};\n"],"names":[],"version":3,"file":"SearchAutocomplete.mjs.map"}