import React, { forwardRef, useEffect, useImperativeHandle, useRef } from 'react'; export type TextareaVariant = 'default' | 'mono'; export interface TextareaProps extends React.TextareaHTMLAttributes { variant?: TextareaVariant; invalid?: boolean; autoResize?: boolean; } function fit(el: HTMLTextAreaElement | null): void { if (!el) return; el.style.height = 'auto'; el.style.height = `${el.scrollHeight}px`; } export const Textarea = forwardRef( ( { className = '', variant = 'default', invalid, autoResize, onInput, ...rest }, ref ) => { const innerRef = useRef(null); useImperativeHandle(ref, () => innerRef.current as HTMLTextAreaElement); useEffect(() => { if (!autoResize) return; fit(innerRef.current); }, [autoResize, rest.value, rest.defaultValue]); const classes = [ 'textarea', variant !== 'default' && `textarea--${variant}`, className ] .filter(Boolean) .join(' '); return (