{"version":3,"file":"TextField.cjs","sourceRoot":"","sources":["../../../src/components/TextField/TextField.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useRef,\n  useState,\n} from 'react';\n\nimport { twMerge } from '../../utils/tw-merge';\nimport { Input } from '../Input';\n\nimport { TextFieldSize, TextFieldType } from './TextField.types';\nimport type { TextFieldProps } from './TextField.types';\n\nconst SIZE_CLASS: Record<TextFieldSize, string> = {\n  [TextFieldSize.Sm]: 'h-8',\n  [TextFieldSize.Md]: 'h-10',\n  [TextFieldSize.Lg]: 'h-12',\n};\n\nexport const TextField = forwardRef<HTMLDivElement, TextFieldProps>(\n  (\n    {\n      autoFocus = false,\n      className,\n      id,\n      inputElement,\n      inputProps,\n      inputRef,\n      isDisabled = false,\n      isError = false,\n      isReadOnly = false,\n      maxLength,\n      name,\n      onBlur,\n      onChange,\n      onClick,\n      onFocus,\n      placeholder,\n      required,\n      size = TextFieldSize.Md,\n      startAccessory,\n      endAccessory,\n      style,\n      truncate = true,\n      type = TextFieldType.Text,\n      value,\n      ...rest\n    },\n    ref,\n  ) => {\n    const internalInputRef = useRef<HTMLInputElement | null>(null);\n    const [isFocused, setIsFocused] = useState(autoFocus);\n\n    useEffect(() => {\n      if (isDisabled) {\n        setIsFocused(false);\n      }\n    }, [isDisabled]);\n\n    const handleClick = useCallback(\n      (event: React.MouseEvent<HTMLDivElement>) => {\n        if (isDisabled) {\n          return;\n        }\n        internalInputRef.current?.focus();\n        onClick?.(event);\n      },\n      [isDisabled, onClick],\n    );\n\n    const handleFocus = useCallback(\n      (event: React.FocusEvent<HTMLInputElement>) => {\n        setIsFocused(true);\n        onFocus?.(event);\n      },\n      [onFocus],\n    );\n\n    const handleBlur = useCallback(\n      (event: React.FocusEvent<HTMLInputElement>) => {\n        setIsFocused(false);\n        onBlur?.(event);\n      },\n      [onBlur],\n    );\n\n    const handleInputRef = useCallback(\n      (node: HTMLInputElement | null) => {\n        internalInputRef.current = node;\n        if (typeof inputRef === 'function') {\n          inputRef(node);\n        } else if (inputRef && 'current' in inputRef) {\n          (\n            inputRef as React.MutableRefObject<HTMLInputElement | null>\n          ).current = node;\n        }\n      },\n      [inputRef],\n    );\n\n    const { className: inputClassNameFromProps, ...inputRest } =\n      inputProps ?? {};\n\n    const containerClassName = twMerge(\n      'inline-flex items-center rounded-xl border bg-muted transition-colors',\n      SIZE_CLASS[size],\n      startAccessory ? 'pl-4' : 'pl-0',\n      endAccessory ? 'pr-4' : 'pr-0',\n      isDisabled && 'cursor-not-allowed border-muted opacity-50',\n      !isDisabled && isError && 'border-error-default',\n      !isDisabled && !isError && isFocused && 'border-default',\n      !isDisabled && !isError && !isFocused && 'border-muted',\n      className,\n    );\n\n    const innerInputClassName = twMerge(\n      'm-0 h-full min-w-0 flex-1 border-0 bg-transparent p-0',\n      startAccessory ? 'pl-2' : 'pl-4',\n      endAccessory ? 'pr-2' : 'pr-4',\n      truncate && 'truncate',\n      inputClassNameFromProps,\n    );\n\n    return (\n      <div\n        ref={ref}\n        className={containerClassName}\n        style={style}\n        onClick={handleClick}\n        {...rest}\n      >\n        {startAccessory}\n        {inputElement ?? (\n          <Input\n            {...inputRest}\n            ref={handleInputRef}\n            id={id}\n            name={name}\n            type={type}\n            value={value}\n            placeholder={placeholder}\n            autoFocus={autoFocus}\n            isDisabled={isDisabled}\n            isReadOnly={isReadOnly}\n            isStateStylesDisabled\n            maxLength={maxLength}\n            required={required}\n            aria-invalid={isError || undefined}\n            onChange={onChange}\n            onFocus={handleFocus}\n            onBlur={handleBlur}\n            className={innerInputClassName}\n          />\n        )}\n        {endAccessory}\n      </div>\n    );\n  },\n);\n\nTextField.displayName = 'TextField';\n"]}