useAutosize
Hace crecer un textarea según lo que escribes entre su altura mínima y máxima, animando cada cambio sin tocar nunca el texto.
pnpm dlx shadcn@latest add https://hextaui.com/r/use-autosize.jsonAñade el hook y todo lo que necesita a tu proyecto.
Copia y pega el siguiente código en tu proyecto.
hooks/use-autosize.ts Actualiza las rutas de importación para que coincidan con la configuración de tu proyecto.
<Textarea autoResize> ya usa este hook. Llámalo tú mismo cuando renderices tu propio <textarea>, como el compositor de un chat o un editor en línea.
En cada cambio el hook pone la altura en auto, lee el scrollHeight natural y lo limita al min-height y max-height de CSS del propio elemento. Todo eso ocurre antes del pintado, así que nunca ves el fotograma colapsado. Los límites permanecen en tu CSS, por lo que pueden ser responsivos o usar lh para contar líneas.
- Los cambios de altura se animan durante 180ms, y un cambio que llega a mitad de la animación parte de la altura actual, así que escribir rápido nunca salta. Con movimiento reducido la altura cambia de golpe.
- Pasado
max-heightel textarea hace scroll. Si no, su barra de scroll permanece oculta, para que no parpadee en cada nueva línea. - Se reajusta cuando cambia el ancho, porque el texto que se ajusta de otra forma cambia la altura.
- Escucha
inputenwindowy solo mide. Nunca lee ni escribe el valor, así que las pulsaciones nunca se retrasan ni se pierden.
Valores controlados
Escribir dispara input, pero definir value desde código no. Pasa el valor como tercer argumento y el textarea se reajusta cuando insertas una plantilla o lo vacías.
- Define
rows={1}yresize-none. Un tirador de redimensionamiento manual choca con la altura automática. - Desactivar
enabledo desmontar elimina la altura y el overflow en línea, devolviendo el tamaño a tu CSS. - En pantallas táctiles, usa texto de al menos 16px en el textarea, o iOS hace zoom al enfocarlo.
| Prop | Tipo | Predeterminado |
|---|---|---|
refEl textarea que se va a dimensionar. | RefObject<HTMLTextAreaElement | null> | – |
enabledSi se debe dimensionar automáticamente. | boolean | – |
valueEl valor controlado. Pasa undefined para textareas no controlados. | unknown | – |
Textarea e InputGroupTextarea.
- MotionLas curvas de easing, duraciones y la comprobación de movimiento reducido con las que se anima cada componente, además de hooks para transformaciones de tamaño y resaltados deslizantes.
- InputUn campo de texto con tres tamaños, estados inválido y de solo lectura, estilos de validación nativos y una fuente táctil de 16px para que los móviles nunca hagan zoom.
- Input groupUn input con iconos, texto, botones o una pista de teclado acoplados, que comparten un solo borde y anillo de foco.
- TextareaTexto de varias líneas que crece con suavidad según lo que escribes entre un mínimo y un máximo de filas, con contadores, validación y un atajo para enviar.