{"mappings":"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","sources":["packages/@adobe/react-spectrum/src/combobox/MobileComboBox.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, useButton} from 'react-aria/useButton';\nimport buttonStyles from '@adobe/spectrum-css-temp/components/button/vars.css';\nimport CheckmarkMedium from '@spectrum-icons/ui/CheckmarkMedium';\nimport ChevronDownMedium from '@spectrum-icons/ui/ChevronDownMedium';\nimport {classNames} from '../utils/classNames';\nimport {ClearButton} from '../button/ClearButton';\nimport {ComboBoxState, useComboBoxState} from 'react-stately/useComboBoxState';\nimport comboboxStyles from './combobox.css';\nimport {DismissButton} from 'react-aria/Overlay';\nimport {Field} from '../label/Field';\nimport {FocusableRef, FocusableRefValue, ValidationState} from '@react-types/shared';\nimport {FocusRing} from 'react-aria/FocusRing';\nimport {focusSafely} from 'react-aria/private/interactions/focusSafely';\nimport {FocusScope} from 'react-aria/FocusScope';\nimport {getActiveElement} from 'react-aria/private/utils/shadowdom/DOMFunctions';\nimport intlMessages from '../../intl/combobox/*.json';\nimport labelStyles from '@adobe/spectrum-css-temp/components/fieldlabel/vars.css';\nimport {ListBoxBase, useListBoxLayout} from '../listbox/ListBoxBase';\nimport {mergeProps} from 'react-aria/mergeProps';\nimport {ProgressCircle} from '../progress/ProgressCircle';\nimport React, {\n  ForwardedRef,\n  HTMLAttributes,\n  InputHTMLAttributes,\n  ReactElement,\n  ReactNode,\n  useCallback,\n  useEffect,\n  useRef,\n  useState\n} from 'react';\nimport searchStyles from '@adobe/spectrum-css-temp/components/search/vars.css';\nimport {setInteractionModality} from 'react-aria/private/interactions/useFocusVisible';\n// @ts-ignore\nimport {SpectrumComboBoxProps} from './ComboBox';\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 {Tray} from '../overlays/Tray';\nimport {unwrapDOMRef, useFocusableRef} from '../utils/useDOMRef';\nimport {useComboBox} from 'react-aria/useComboBox';\nimport {useDialog} from 'react-aria/useDialog';\nimport {useField} from 'react-aria/useField';\nimport {useFilter} from 'react-aria/useFilter';\nimport {useFormReset} from 'react-aria/private/utils/useFormReset';\nimport {useFormValidation} from 'react-aria/private/form/useFormValidation';\nimport {useHover} from 'react-aria/useHover';\nimport {useId} from 'react-aria/useId';\nimport {useLocalizedStringFormatter} from 'react-aria/useLocalizedStringFormatter';\nimport {useObjectRef} from 'react-aria/useObjectRef';\nimport {useOverlayTrigger} from 'react-aria/useOverlayTrigger';\nimport {useProviderProps} from '../provider/Provider';\n\nexport const MobileComboBox = React.forwardRef(function MobileComboBox(\n  props: SpectrumComboBoxProps<any>,\n  ref: FocusableRef<HTMLElement>\n) {\n  props = useProviderProps(props);\n\n  let {\n    isQuiet,\n    isDisabled,\n    isReadOnly,\n    isRequired,\n    validationBehavior,\n    name,\n    formValue = 'text',\n    allowsCustomValue\n  } = props;\n  if (allowsCustomValue) {\n    formValue = 'text';\n  }\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  });\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    {\n      ...props,\n      focus: () => buttonRef.current?.focus()\n    },\n    state,\n    inputRef\n  );\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) {\n      buttonRef.current?.focus();\n      setInteractionModality('keyboard');\n    }\n  };\n\n  let inputProps: InputHTMLAttributes<HTMLInputElement> = {\n    type: 'hidden',\n    name,\n    value: formValue === 'text' ? state.inputValue : String(state.selectedKey)\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<any>(\n    inputRef,\n    formValue === 'text' ? state.defaultInputValue : state.defaultSelectedKey,\n    formValue === 'text' ? state.setInputValue : state.setSelectedKey\n  );\n\n  return (\n    <>\n      <Field\n        {...props}\n        labelProps={labelProps}\n        descriptionProps={descriptionProps}\n        errorMessageProps={errorMessageProps}\n        validationState={validationState}\n        isInvalid={isInvalid}\n        validationErrors={validationErrors}\n        validationDetails={validationDetails}\n        elementType=\"span\"\n        ref={domRef}\n        includeNecessityIndicatorInAccessibilityName>\n        <ComboBoxButton\n          {...mergeProps(triggerProps, fieldProps, {autoFocus: props.autoFocus})}\n          ref={buttonRef}\n          isQuiet={isQuiet}\n          isDisabled={isDisabled}\n          isPlaceholder={!state.inputValue}\n          validationState={validationState}\n          onPress={() => !isReadOnly && state.open(null, 'manual')}>\n          {state.inputValue || props.placeholder || ''}\n        </ComboBoxButton>\n      </Field>\n      <input {...inputProps} ref={inputRef} />\n      <Tray state={state} isFixedHeight {...overlayProps}>\n        <ComboBoxTray {...props} onClose={state.close} overlayProps={overlayProps} state={state} />\n      </Tray>\n    </>\n  );\n});\n\ninterface ComboBoxButtonProps extends AriaButtonProps {\n  isQuiet?: boolean;\n  isDisabled?: boolean;\n  isPlaceholder?: boolean;\n  validationState?: ValidationState;\n  children?: ReactNode;\n  style?: React.CSSProperties;\n  className?: string;\n}\n\nexport const ComboBoxButton = React.forwardRef(function ComboBoxButton(\n  props: ComboBoxButtonProps,\n  ref: ForwardedRef<HTMLDivElement>\n) {\n  let {isQuiet, isDisabled, isPlaceholder, validationState, children, style, className} = props;\n  let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/combobox');\n  let valueId = useId();\n  let invalidId = useId();\n  let validId = useId();\n  let validationIcon =\n    validationState === 'invalid' ? (\n      <AlertMedium id={invalidId} aria-label={stringFormatter.format('invalid')} />\n    ) : (\n      <CheckmarkMedium id={validId} aria-label={stringFormatter.format('valid')} />\n    );\n\n  let validation = React.cloneElement(validationIcon, {\n    UNSAFE_className: classNames(\n      textfieldStyles,\n      'spectrum-Textfield-validationIcon',\n      classNames(styles, 'spectrum-InputGroup-input-validationIcon')\n    )\n  });\n\n  let objRef = useObjectRef(ref);\n  let {hoverProps, isHovered} = useHover({});\n  let {buttonProps, isPressed} = useButton(\n    {\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        validationState === 'valid' ? validId : null\n      ]\n        .filter(Boolean)\n        .join(' '),\n      elementType: 'div'\n    },\n    objRef\n  );\n\n  return (\n    <FocusRing\n      focusClass={classNames(styles, 'is-focused')}\n      focusRingClass={classNames(styles, 'focus-ring')}>\n      <div\n        {...mergeProps(hoverProps, buttonProps)}\n        aria-haspopup=\"dialog\"\n        ref={objRef}\n        style={{...style, outline: 'none'}}\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(comboboxStyles, 'mobile-combobox'),\n          className\n        )}>\n        <div\n          className={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(styles, 'spectrum-InputGroup-field')\n          )}>\n          <div\n            className={classNames(\n              textfieldStyles,\n              'spectrum-Textfield-input',\n              {\n                'is-hovered': isHovered,\n                'is-placeholder': isPlaceholder,\n                'is-disabled': isDisabled\n              },\n              classNames(\n                styles,\n                'spectrum-InputGroup-input',\n                classNames(labelStyles, 'spectrum-Field-field')\n              ),\n              classNames(comboboxStyles, 'mobile-input')\n            )}>\n            <span id={valueId} className={classNames(comboboxStyles, 'mobile-value')}>\n              {children}\n            </span>\n          </div>\n          {validationState && !isDisabled ? validation : null}\n        </div>\n        <div\n          className={classNames(\n            buttonStyles,\n            'spectrum-FieldButton',\n            {\n              'spectrum-FieldButton--quiet': isQuiet,\n              'is-active': isPressed,\n              'is-disabled': isDisabled,\n              'spectrum-FieldButton--invalid': validationState === 'invalid' && !isDisabled,\n              'is-hovered': isHovered\n            },\n            classNames(styles, 'spectrum-FieldButton')\n          )}>\n          <ChevronDownMedium UNSAFE_className={classNames(styles, 'spectrum-Dropdown-chevron')} />\n        </div>\n      </div>\n    </FocusRing>\n  );\n});\n\ninterface ComboBoxTrayProps extends SpectrumComboBoxProps<any> {\n  state: ComboBoxState<any>;\n  overlayProps: HTMLAttributes<HTMLElement>;\n  loadingIndicator?: ReactElement;\n  onClose: () => void;\n}\n\nfunction ComboBoxTray(props: ComboBoxTrayProps) {\n  let {\n    // completionMode = 'suggest',\n    state,\n    isDisabled,\n    validationState,\n    label,\n    overlayProps,\n    loadingState,\n    onLoadMore,\n    onClose\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 buttonRef = useRef<FocusableRefValue<HTMLElement>>(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/combobox');\n\n  let {inputProps, listBoxProps, labelProps} = useComboBox(\n    {\n      ...props,\n      // completionMode,\n      layoutDelegate: layout,\n      buttonRef: unwrapDOMRef(buttonRef),\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    {\n      'aria-labelledby': useId(labelProps.id)\n    },\n    popoverRef\n  );\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  // Unlike \"combobox\", \"aria-expanded\" is not a valid attribute on \"searchbox\".\n  inputProps.role = 'searchbox';\n  inputProps['aria-haspopup'] = 'listbox';\n  delete inputProps['aria-expanded'];\n  delete inputProps.onTouchEnd;\n\n  let clearButton = (\n    <ClearButton\n      preventFocus\n      aria-label={stringFormatter.format('clear')}\n      excludeFromTabOrder\n      onPress={() => {\n        state.setInputValue('');\n        inputRef.current?.focus();\n      }}\n      UNSAFE_className={classNames(searchStyles, 'spectrum-ClearButton')}\n      isDisabled={isDisabled}\n    />\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(textfieldStyles, '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 || getActiveElement() !== inputRef.current || !isTouchDown.current) {\n      return;\n    }\n\n    popoverRef.current?.focus();\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) {\n        clearTimeout(timeout.current);\n      }\n      timeout.current = null;\n    }\n\n    lastInputValue.current = inputValue;\n  }, [loadingState, inputValue, showLoading]);\n\n  let onKeyDown = e => {\n    // Close virtual keyboard if user hits Enter w/o any focused options\n    if (e.key === 'Enter' && state.selectionManager.focusedKey == null) {\n      popoverRef.current?.focus();\n    } else {\n      inputProps.onKeyDown?.(e);\n    }\n  };\n\n  return (\n    <FocusScope restoreFocus contain>\n      <div\n        {...mergeProps(overlayProps, dialogProps)}\n        ref={popoverRef}\n        className={classNames(comboboxStyles, 'tray-dialog')}>\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          labelAlign=\"start\"\n          labelPosition=\"top\"\n          wrapperChildren={\n            (state.inputValue !== '' || loadingState === 'filtering' || validationState != null) &&\n            !props.isReadOnly\n              ? clearButton\n              : undefined\n          }\n          UNSAFE_className={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(comboboxStyles, 'tray-textfield', {\n              'has-label': !!props.label\n            })\n          )}\n          inputClassName={classNames(\n            comboboxStyles,\n            'tray-textfield-input',\n            classNames(searchStyles, 'spectrum-Search-input')\n          )}\n          validationIconClassName={classNames(searchStyles, 'spectrum-Search-validationIcon')}\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={() =>\n            loadingState !== 'loading' && (\n              <span className={classNames(comboboxStyles, 'no-results')}>\n                {stringFormatter.format('noResults')}\n              </span>\n            )\n          }\n          UNSAFE_className={classNames(comboboxStyles, 'tray-listbox')}\n          ref={listBoxRef}\n          onScroll={onScroll}\n          onLoadMore={onLoadMore}\n          isLoading={isLoading}\n        />\n        <DismissButton onDismiss={onClose} />\n      </div>\n    </FocusScope>\n  );\n}\n"],"names":[],"version":3,"file":"MobileComboBox.mjs.map"}