import { type ForwardedRef, forwardRef } from 'react'; import type { ValidationResult } from 'react-aria-components'; import { TextField as AriaTextField, type TextFieldProps as AriaTextFieldProps, type InputProps, } from 'react-aria-components/TextField'; import { twJoin } from 'tailwind-merge'; import { tv } from 'tailwind-variants'; import { Description, FieldError, Input, Label, fieldBorderStyles, } from './Field'; import { composeTailwindRenderProps, focusRing } from './utils'; const inputStyles = tv({ extend: focusRing, base: 'rounded-md border', variants: { isFocused: fieldBorderStyles.variants.isFocusWithin, ...fieldBorderStyles.variants, }, }); export interface TextFieldProps extends AriaTextFieldProps { label?: string; description?: string; errorMessage?: string | ((validation: ValidationResult) => string); inputProps?: InputProps; } export const TextField = forwardRef(function TextField( { label, description, errorMessage, inputProps, ...props }: TextFieldProps, ref: ForwardedRef, ) { return ( {label && ( )} {description && {description}} {errorMessage} ); });