{"mappings":"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","sources":["packages/@adobe/react-spectrum/src/datepicker/Input.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 Alert from '@spectrum-icons/ui/AlertMedium';\nimport Checkmark from '@spectrum-icons/ui/CheckmarkMedium';\nimport {classNames} from '../utils/classNames';\nimport datepickerStyles from './styles.css';\nimport {mergeProps} from 'react-aria/mergeProps';\nimport {mergeRefs} from 'react-aria/mergeRefs';\nimport React, {ReactElement, useCallback, useRef} from 'react';\nimport textfieldStyles from '@adobe/spectrum-css-temp/components/textfield/vars.css';\nimport {useEvent} from 'react-aria/private/utils/useEvent';\nimport {useFocusRing} from 'react-aria/useFocusRing';\nimport {useLayoutEffect} from 'react-aria/private/utils/useLayoutEffect';\nimport {useResizeObserver} from 'react-aria/private/utils/useResizeObserver';\nimport {useValueEffect} from 'react-aria/private/utils/useValueEffect';\n\nexport const Input = React.forwardRef(function Input(props: any, ref: any) {\n  let inputRef = useRef<HTMLInputElement | null>(null);\n  let {\n    isDisabled,\n    isQuiet,\n    inputClassName,\n    validationState,\n    children,\n    fieldProps,\n    className,\n    style,\n    disableFocusRing\n  } = props;\n\n  // Reserve padding for the error icon when the width of the input is unconstrained.\n  // When constrained, don't reserve space because adding it only when invalid will\n  // not cause a layout shift.\n  let [reservePadding, setReservePadding] = useValueEffect(false);\n  let onResize = useCallback(\n    () =>\n      setReservePadding(function* (reservePadding) {\n        if (inputRef.current && inputRef.current.parentElement) {\n          if (reservePadding) {\n            // Try to collapse padding if the content is clipped.\n            if (inputRef.current.scrollWidth > inputRef.current.offsetWidth) {\n              let width = inputRef.current.parentElement.offsetWidth;\n              yield false;\n\n              // If removing padding causes a layout shift, add it back.\n              if (inputRef.current.parentElement.offsetWidth !== width) {\n                yield true;\n              }\n            }\n          } else {\n            // Try to add padding if the content is not clipped.\n            if (inputRef.current.offsetWidth >= inputRef.current.scrollWidth) {\n              let width = inputRef.current.parentElement.offsetWidth;\n              yield true;\n\n              // If adding padding does not change the width (i.e. width is constrained), remove it again.\n              if (inputRef.current.parentElement.offsetWidth === width) {\n                yield false;\n              }\n            }\n          }\n        }\n      }),\n    [inputRef, setReservePadding]\n  );\n\n  useLayoutEffect(onResize, [onResize]);\n  useResizeObserver({\n    ref: inputRef,\n    onResize\n  });\n\n  // We also need to listen for resize events of the window so we can detect\n  // when there is enough space for the padding to be re-added. Ideally we'd\n  // use a resize observer on a parent element, but it's hard to know _what_\n  // parent element.\n  useEvent(useRef(typeof window !== 'undefined' ? window : null), 'resize', onResize);\n\n  let {focusProps, isFocusVisible, isFocused} = useFocusRing({\n    isTextInput: true,\n    within: true\n  });\n\n  let isInvalid = validationState === 'invalid' && !isDisabled;\n  let textfieldClass = classNames(\n    textfieldStyles,\n    'spectrum-Textfield',\n    {\n      'spectrum-Textfield--invalid': isInvalid,\n      'spectrum-Textfield--valid': validationState === 'valid' && !isDisabled,\n      'spectrum-Textfield--quiet': isQuiet,\n      'focus-ring': isFocusVisible && !disableFocusRing\n    },\n    classNames(datepickerStyles, 'react-spectrum-Datepicker-field'),\n    className\n  );\n\n  let inputClass = classNames(\n    textfieldStyles,\n    'spectrum-Textfield-input',\n    {\n      'is-disabled': isDisabled,\n      'is-focused': isFocused\n    },\n    classNames(datepickerStyles, 'react-spectrum-DateField-Input'),\n    reservePadding && classNames(datepickerStyles, 'react-spectrum-Datepicker-input'),\n    inputClassName\n  );\n\n  let iconClass = classNames(textfieldStyles, 'spectrum-Textfield-validationIcon');\n\n  let validationIcon: ReactElement | null = null;\n  if (validationState === 'invalid' && !isDisabled) {\n    validationIcon = <Alert data-testid=\"invalid-icon\" UNSAFE_className={iconClass} />;\n  } else if (validationState === 'valid' && !isDisabled) {\n    validationIcon = <Checkmark data-testid=\"valid-icon\" UNSAFE_className={iconClass} />;\n  }\n\n  return (\n    <div\n      role=\"presentation\"\n      {...mergeProps(fieldProps, focusProps)}\n      className={textfieldClass}\n      style={style}>\n      <div role=\"presentation\" className={inputClass}>\n        <div\n          role=\"presentation\"\n          className={classNames(datepickerStyles, 'react-spectrum-Datepicker-inputContents')}\n          ref={mergeRefs(ref, inputRef)}>\n          <div\n            role=\"presentation\"\n            className={classNames(datepickerStyles, 'react-spectrum-Datepicker-inputSized')}\n            style={{minWidth: props.minWidth}}>\n            {children}\n          </div>\n        </div>\n      </div>\n      {validationIcon}\n    </div>\n  );\n});\n"],"names":[],"version":3,"file":"Input.cjs.map"}