{"mappings":"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","sources":["packages/@adobe/react-spectrum/src/textfield/TextFieldBase.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 CheckmarkMedium from '@spectrum-icons/ui/CheckmarkMedium';\nimport {classNames} from '../utils/classNames';\nimport {createFocusableRef} from '../utils/useDOMRef';\nimport {Field} from '../label/Field';\n// @ts-ignore\nimport intlMessages from '../../intl/textfield/*.json';\nimport {mergeProps} from 'react-aria/mergeProps';\nimport {PressEvents, RefObject, ValidationResult} from '@react-types/shared';\nimport React, {\n  cloneElement,\n  forwardRef,\n  HTMLAttributes,\n  InputHTMLAttributes,\n  LabelHTMLAttributes,\n  ReactElement,\n  Ref,\n  TextareaHTMLAttributes,\n  useImperativeHandle,\n  useRef\n} from 'react';\nimport {SpectrumTextFieldProps, TextFieldRef} from './TextField';\nimport styles from '@adobe/spectrum-css-temp/components/textfield/vars.css';\nimport {useFocusRing} from 'react-aria/useFocusRing';\nimport {useHover} from 'react-aria/useHover';\nimport {useId} from 'react-aria/useId';\nimport {useLocalizedStringFormatter} from 'react-aria/useLocalizedStringFormatter';\n\ninterface TextFieldBaseProps\n  extends\n    Omit<SpectrumTextFieldProps, 'onChange' | 'validate'>,\n    PressEvents,\n    Partial<ValidationResult> {\n  wrapperChildren?: ReactElement | ReactElement[];\n  inputClassName?: string;\n  validationIconClassName?: string;\n  multiLine?: boolean;\n  labelProps?: LabelHTMLAttributes<HTMLLabelElement>;\n  inputProps: InputHTMLAttributes<HTMLInputElement> | TextareaHTMLAttributes<HTMLTextAreaElement>;\n  descriptionProps?: HTMLAttributes<HTMLElement>;\n  errorMessageProps?: HTMLAttributes<HTMLElement>;\n  inputRef?: RefObject<HTMLInputElement | HTMLTextAreaElement | null>;\n  loadingIndicator?: ReactElement;\n  isLoading?: boolean;\n  disableFocusRing?: boolean;\n}\n\nexport const TextFieldBase = forwardRef(function TextFieldBase(\n  props: TextFieldBaseProps,\n  ref: Ref<TextFieldRef<HTMLInputElement | HTMLTextAreaElement>>\n) {\n  let {\n    validationState = props.isInvalid ? 'invalid' : null,\n    icon,\n    isQuiet = false,\n    isDisabled,\n    multiLine,\n    autoFocus,\n    inputClassName,\n    wrapperChildren,\n    labelProps,\n    inputProps,\n    descriptionProps,\n    errorMessageProps,\n    inputRef: userInputRef,\n    isLoading,\n    loadingIndicator,\n    validationIconClassName,\n    disableFocusRing\n  } = props;\n  let {hoverProps, isHovered} = useHover({isDisabled});\n  let domRef = useRef<HTMLDivElement>(null);\n  let defaultInputRef = useRef<HTMLInputElement | HTMLTextAreaElement>(null);\n  let inputRef = userInputRef || defaultInputRef;\n\n  // Expose imperative interface for ref\n  useImperativeHandle(ref, () => ({\n    ...createFocusableRef(domRef, inputRef),\n    select() {\n      if (inputRef.current) {\n        inputRef.current.select();\n      }\n    },\n    getInputElement() {\n      return inputRef.current;\n    }\n  }));\n\n  let ElementType: React.ElementType = multiLine ? 'textarea' : 'input';\n  let isInvalid = validationState === 'invalid' && !isDisabled;\n\n  if (icon) {\n    let UNSAFE_className = classNames(\n      styles,\n      icon.props && (icon.props as any).UNSAFE_className,\n      'spectrum-Textfield-icon'\n    );\n\n    icon = cloneElement(icon, {\n      UNSAFE_className,\n      size: 'S'\n    } as any);\n  }\n\n  let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/textfield');\n  let validId = useId();\n  let validationIcon = isInvalid ? (\n    <AlertMedium />\n  ) : (\n    <CheckmarkMedium id={validId} aria-hidden aria-label={stringFormatter.format('valid')} />\n  );\n  let validation = cloneElement(validationIcon, {\n    UNSAFE_className: classNames(\n      styles,\n      'spectrum-Textfield-validationIcon',\n      validationIconClassName\n    )\n  });\n\n  // Add validation icon IDREF to aria-describedby when validationState is valid\n  let inputPropsAriaDescribedBy = inputProps['aria-describedby'];\n  if (\n    !isInvalid &&\n    validationState === 'valid' &&\n    !isLoading &&\n    !isDisabled &&\n    (!inputPropsAriaDescribedBy || !inputPropsAriaDescribedBy.includes(validId))\n  ) {\n    inputProps['aria-describedby'] = [inputPropsAriaDescribedBy, validId].join(' ').trim();\n  }\n\n  let {focusProps, isFocusVisible} = useFocusRing({\n    isTextInput: true,\n    autoFocus\n  });\n\n  let textField = (\n    <div\n      className={classNames(styles, 'spectrum-Textfield', {\n        'spectrum-Textfield--invalid': isInvalid,\n        'spectrum-Textfield--valid': validationState === 'valid' && !isDisabled,\n        'spectrum-Textfield--loadable': loadingIndicator,\n        'spectrum-Textfield--quiet': isQuiet,\n        'spectrum-Textfield--multiline': multiLine,\n        'focus-ring': !disableFocusRing && isFocusVisible\n      })}>\n      <ElementType\n        {...mergeProps(inputProps, hoverProps, focusProps)}\n        ref={inputRef as any}\n        rows={multiLine ? 1 : undefined}\n        className={classNames(\n          styles,\n          'spectrum-Textfield-input',\n          {\n            'spectrum-Textfield-inputIcon': icon,\n            'is-hovered': isHovered\n          },\n          inputClassName\n        )}\n      />\n      {icon}\n      {validationState && !isLoading && !isDisabled ? validation : null}\n      {isLoading && loadingIndicator}\n      {wrapperChildren}\n    </div>\n  );\n\n  return (\n    <Field\n      {...props}\n      labelProps={labelProps}\n      descriptionProps={descriptionProps}\n      errorMessageProps={errorMessageProps}\n      wrapperClassName={classNames(styles, 'spectrum-Textfield-wrapper', {\n        'spectrum-Textfield-wrapper--quiet': isQuiet\n      })}\n      showErrorIcon={false}\n      ref={domRef}>\n      {textField}\n    </Field>\n  );\n});\n"],"names":[],"version":3,"file":"TextFieldBase.mjs.map"}