{"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, {ForwardedRef, HTMLAttributes, InputHTMLAttributes, ReactElement, ReactNode, useCallback, useEffect, useRef, useState} 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(props: SpectrumComboBoxProps<any>, ref: FocusableRef<HTMLElement>) {\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    ...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) {\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\n          {...props}\n          onClose={state.close}\n          overlayProps={overlayProps}\n          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(props: ComboBoxButtonProps, ref: ForwardedRef<HTMLDivElement>) {\n  let {\n    isQuiet,\n    isDisabled,\n    isPlaceholder,\n    validationState,\n    children,\n    style,\n    className\n  } = props;\n  let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/combobox');\n  let valueId = useId();\n  let invalidId = useId();\n  let validId = useId();\n  let validationIcon = validationState === 'invalid'\n    ? <AlertMedium id={invalidId} aria-label={stringFormatter.format('invalid')} />\n    : <CheckmarkMedium id={validId} aria-label={stringFormatter.format('valid')} />;\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    )\n  });\n\n  let objRef = useObjectRef(ref);\n  let {hoverProps, isHovered} = useHover({});\n  let {buttonProps, isPressed} = 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      validationState === 'valid' ? validId : null\n    ].filter(Boolean).join(' '),\n    elementType: 'div'\n  }, objRef);\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={\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              comboboxStyles,\n              'mobile-combobox'\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                styles,\n                'spectrum-InputGroup-field'\n              )\n            )\n          }>\n          <div\n            className={\n              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(\n                  comboboxStyles,\n                  'mobile-input'\n                )\n              )\n            }>\n            <span\n              id={valueId}\n              className={\n                classNames(\n                  comboboxStyles,\n                  'mobile-value'\n                )\n              }>\n              {children}\n            </span>\n          </div>\n          {validationState && !isDisabled ? validation : null}\n        </div>\n        <div\n          className={\n            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(\n                styles,\n                'spectrum-FieldButton'\n              )\n            )\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    '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  // 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={\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 || 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={\n          classNames(\n            comboboxStyles,\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          labelAlign=\"start\"\n          labelPosition=\"top\"\n          wrapperChildren={(state.inputValue !== '' || loadingState === 'filtering' || validationState != null) && !props.isReadOnly ? clearButton : undefined}\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                comboboxStyles,\n                'tray-textfield',\n                {\n                  'has-label': !!props.label\n                }\n              )\n            )\n          }\n          inputClassName={\n            classNames(\n              comboboxStyles,\n              'tray-textfield-input',\n              classNames(\n                searchStyles,\n                'spectrum-Search-input'\n              )\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(comboboxStyles, 'no-results')}>\n              {stringFormatter.format('noResults')}\n            </span>\n          )}\n          UNSAFE_className={\n            classNames(\n              comboboxStyles,\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":"MobileComboBox.cjs.map"}