{"mappings":"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","sources":["packages/@adobe/react-spectrum/src/combobox/ComboBox.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 {AriaButtonProps} from 'react-aria/useButton';\n\nimport {AriaComboBoxProps, useComboBox} from 'react-aria/useComboBox';\nimport {AsyncLoadable, DimensionValue, DOMRefValue, FocusableRef, FocusableRefValue, LoadingState, SingleSelection, SpectrumFieldValidation, SpectrumLabelableProps, SpectrumTextInputBase, StyleProps} from '@react-types/shared';\nimport ChevronDownMedium from '@spectrum-icons/ui/ChevronDownMedium';\nimport {classNames} from '../utils/classNames';\nimport comboboxStyles from './combobox.css';\nimport {ComboBoxValidationValue, MenuTriggerAction, useComboBoxState} from 'react-stately/useComboBoxState';\nimport {dimensionValue} from '../utils/styleProps';\nimport {Field} from '../label/Field';\nimport {FieldButton} from '../button/FieldButton';\nimport {FocusRing} from 'react-aria/FocusRing';\nimport intlMessages from '../../intl/combobox/*.json';\nimport {ListBoxBase, useListBoxLayout} from '../listbox/ListBoxBase';\nimport {MobileComboBox} from './MobileComboBox';\n// @ts-ignore\nimport {Popover} from '../overlays/Popover';\nimport {PressResponder} from 'react-aria/private/interactions/PressResponder';\nimport {ProgressCircle} from '../progress/ProgressCircle';\nimport React, {\n  ForwardedRef,\n  InputHTMLAttributes,\n  ReactElement,\n  RefObject,\n  useCallback,\n  useEffect,\n  useRef,\n  useState\n} from 'react';\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 SpectrumComboBoxProps<T> extends SpectrumTextInputBase, Omit<AriaComboBoxProps<T>, 'menuTrigger' | 'isInvalid' | 'validationState' | 'selectionMode' | 'selectedKey' | 'defaultSelectedKey' | 'onSelectionChange' | 'value' | 'defaultValue' | 'onChange'>, Omit<SingleSelection, 'disallowEmptySelection'>, SpectrumFieldValidation<ComboBoxValidationValue>, SpectrumLabelableProps, StyleProps, Omit<AsyncLoadable, 'isLoading'> {\n  /**\n   * The interaction required to display the ComboBox menu. Note that this prop has no effect on the mobile ComboBox experience.\n   * @default 'input'\n   */\n  menuTrigger?: MenuTriggerAction,\n  /** Whether the ComboBox should be displayed with a quiet style. */\n  isQuiet?: boolean,\n  /** Alignment of the menu relative to the input target.\n   * @default 'start'\n   */\n  align?: 'start' | 'end',\n  /**\n   * Direction the menu will render relative to the ComboBox.\n   * @default 'bottom'\n   */\n  direction?: 'bottom' | 'top',\n  /** The current loading state of the ComboBox. Determines whether or not the progress circle should be shown. */\n  loadingState?: LoadingState,\n  /**\n   * Whether the menu should automatically flip direction when space is limited.\n   * @default true\n   */\n  shouldFlip?: boolean,\n  /** Width of the menu. By default, matches width of the combobox. Note that the minimum width of the dropdown is always equal to the combobox's width. */\n  menuWidth?: DimensionValue,\n  /**\n   * Whether the text or key of the selected item is submitted as part of an HTML form.\n   * When `allowsCustomValue` is `true`, this option does not apply and the text is always submitted.\n   * @default 'text'\n   */\n  formValue?: 'text' | 'key'\n}\n\n/**\n * ComboBoxes combine a text entry with a picker menu, allowing users to filter longer lists to only the selections matching a query.\n */\nexport const ComboBox = React.forwardRef(function ComboBox<T extends object>(props: SpectrumComboBoxProps<T>, ref: FocusableRef<HTMLElement>) {\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('Placeholders are deprecated due to accessibility issues. Please use help text instead. See the docs for details: https://react-spectrum.adobe.com/react-spectrum/ComboBox.html#help-text');\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 combobox\n    return <MobileComboBox {...props} menuTrigger=\"input\" ref={ref} />;\n  } else {\n    return <ComboBoxBase {...props} ref={ref} />;\n  }\n}) as <T>(props: SpectrumComboBoxProps<T> & {ref?: FocusableRef<HTMLElement>}) => ReactElement;\n\nconst ComboBoxBase = React.forwardRef(function ComboBoxBase(props: SpectrumComboBoxProps<any>, ref: FocusableRef<HTMLElement>) {\n  let {\n    menuTrigger = 'input',\n    shouldFlip = true,\n    direction = 'bottom',\n    align = 'start',\n    isQuiet,\n    loadingState,\n    onLoadMore,\n    allowsCustomValue,\n    menuWidth: customMenuWidth,\n    name,\n    formValue = 'text'\n  } = props;\n  if (allowsCustomValue) {\n    formValue = 'text';\n  }\n\n  let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/combobox');\n  let isAsync = loadingState != null;\n  let popoverRef = useRef<DOMRefValue<HTMLDivElement>>(null);\n  let unwrappedPopoverRef = useUnwrapDOMRef(popoverRef);\n  let buttonRef = useRef<FocusableRefValue<HTMLElement>>(null);\n  let unwrappedButtonRef = useUnwrapDOMRef(buttonRef);\n  let listBoxRef = useRef(null);\n  let inputRef = useRef<HTMLInputElement>(null);\n  // serve as the new popover `triggerRef` instead of `unwrappedButtonRef` before for better positioning.\n  let inputGroupRef = useRef<HTMLDivElement>(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    }\n  );\n  let layout = useListBoxLayout();\n\n  let {buttonProps, inputProps, listBoxProps, labelProps, descriptionProps, errorMessageProps, isInvalid, validationErrors, validationDetails} = useComboBox(\n    {\n      ...props,\n      layoutDelegate: layout,\n      buttonRef: unwrappedButtonRef,\n      popoverRef: unwrappedPopoverRef,\n      listBoxRef,\n      inputRef: inputRef,\n      menuTrigger,\n      name: formValue === 'text' ? name : undefined\n    },\n    state\n  );\n\n  // Measure the width of the inputfield and the button to inform the width of the menu (below).\n  let [menuWidth, setMenuWidth] = useState<number | undefined>(undefined);\n  let {scale} = useProvider();\n\n  let onResize = useCallback(() => {\n    if (unwrappedButtonRef.current && inputRef.current) {\n      let buttonWidth = unwrappedButtonRef.current.offsetWidth;\n      let inputWidth = inputRef.current.offsetWidth;\n      setMenuWidth(buttonWidth + inputWidth);\n    }\n  }, [unwrappedButtonRef, 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  let cbInputProps = {...props, children: null};\n\n  return (\n    <>\n      <Field\n        {...props}\n        descriptionProps={descriptionProps}\n        errorMessageProps={errorMessageProps}\n        isInvalid={isInvalid}\n        validationErrors={validationErrors}\n        validationDetails={validationDetails}\n        labelProps={labelProps}\n        ref={domRef}>\n        <ComboBoxInput\n          {...cbInputProps}\n          isOpen={state.isOpen}\n          loadingState={loadingState}\n          inputProps={inputProps}\n          inputRef={inputRef}\n          triggerProps={buttonProps}\n          triggerRef={buttonRef}\n          validationState={props.validationState || (isInvalid ? 'invalid' : undefined)}\n          ref={inputGroupRef} />\n      </Field>\n      {name && formValue === 'key' && <input type=\"hidden\" name={name} form={props.form} value={state.selectedKey ?? ''} />}\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={inputGroupRef}\n        scrollRef={listBoxRef}\n        placement={`${direction} ${align}`}\n        hideArrow\n        isNonModal\n        shouldFlip={shouldFlip}>\n        <ListBoxBase\n          {...listBoxProps}\n          ref={listBoxRef}\n          disallowEmptySelection\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(comboboxStyles, 'no-results')}>\n              {loadingState === 'loading' ? stringFormatter.format('loading') :  stringFormatter.format('noResults')}\n            </span>\n          )} />\n      </Popover>\n    </>\n  );\n});\n\ninterface ComboBoxInputProps extends SpectrumComboBoxProps<unknown> {\n  inputProps: InputHTMLAttributes<HTMLInputElement>,\n  inputRef: RefObject<HTMLInputElement | HTMLTextAreaElement | null>,\n  triggerProps: AriaButtonProps,\n  triggerRef: RefObject<FocusableRefValue<HTMLElement> | null>,\n  style?: React.CSSProperties,\n  className?: string,\n  isOpen?: boolean\n}\n\nconst ComboBoxInput = React.forwardRef(function ComboBoxInput(props: ComboBoxInputProps, ref: ForwardedRef<HTMLElement | null>) {\n  let {\n    isQuiet,\n    isDisabled,\n    validationState,\n    inputProps,\n    inputRef,\n    triggerProps,\n    triggerRef,\n    autoFocus,\n    style,\n    className,\n    loadingState,\n    isOpen,\n    menuTrigger\n  } = props;\n  let {hoverProps, isHovered} = useHover({});\n  let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/combobox');\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      )} />\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 (timeout.current) {\n        clearTimeout(timeout.current);\n      }\n      timeout.current = null;\n    }\n\n    lastInputValue.current = inputValue;\n  }, [isLoading, showLoading, inputValue]);\n\n  let [prevIsLoading, setPrevIsLoading] = useState(isLoading);\n  if (prevIsLoading !== isLoading && !isLoading) {\n    setShowLoading(false);\n    setPrevIsLoading(isLoading);\n  }\n\n  useEffect(() => {\n    return () => {\n      if (timeout.current) {\n        clearTimeout(timeout.current);\n      }\n      timeout.current = null;\n    };\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={\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            className\n          )\n        }>\n        <TextFieldBase\n          inputProps={inputProps}\n          inputRef={inputRef}\n          UNSAFE_className={\n            classNames(\n              styles,\n              'spectrum-InputGroup-field'\n            )\n          }\n          inputClassName={\n            classNames(\n              styles,\n              'spectrum-InputGroup-input'\n            )\n          }\n          validationIconClassName={\n            classNames(\n              styles,\n              'spectrum-InputGroup-input-validationIcon'\n            )\n          }\n          isDisabled={isDisabled}\n          isQuiet={isQuiet}\n          validationState={validationState}\n          // loading circle should only be displayed if menu is open, if menuTrigger is \"manual\", or first time load (to stop circle from showing up when user selects an option)\n          // TODO: add special case for completionMode: complete as well\n          isLoading={showLoading && (isOpen || menuTrigger === 'manual' || loadingState === 'loading')}\n          loadingIndicator={loadingState != null ? loadingCircle : undefined}\n          disableFocusRing />\n        <PressResponder preventFocusOnPress isPressed={isOpen}>\n          <FieldButton\n            {...triggerProps}\n            ref={triggerRef}\n            UNSAFE_className={\n              classNames(\n                styles,\n                'spectrum-FieldButton'\n              )\n            }\n            isQuiet={isQuiet}\n            validationState={validationState}>\n            <ChevronDownMedium UNSAFE_className={classNames(styles, 'spectrum-Dropdown-chevron')} />\n          </FieldButton>\n        </PressResponder>\n      </div>\n    </FocusRing>)\n  );\n});\n"],"names":[],"version":3,"file":"ComboBox.cjs.map"}