import React, {ChangeEvent, useEffect, useState} from "react"; interface TextAreaInputProps { value: string; setValue: (e: ChangeEvent) => void; placeholder: string; maxLength?: number; } export default function TextAreaInput( { value, setValue, placeholder, maxLength }: TextAreaInputProps) { const [prevLength, setPrevLength] = useState(value.length); const [isGrowing, setIsGrowing] = useState(false); useEffect(() => { if (value.length > prevLength) { setIsGrowing(true); setTimeout(() => setIsGrowing(false), 200); } setPrevLength(value.length); }, [value.length, prevLength]); const getProgressPercentage = () => { if (!maxLength) return 0; return Math.min((value.length / maxLength) * 100, 100); }; const getStatusStyles = () => { if (!maxLength) return {}; const percentage = getProgressPercentage(); if (percentage >= 100) return { textColor: 'text-error', bgColor: 'bg-error/10', borderColor: 'border-error/30', progressColor: 'bg-error' }; if (percentage >= 90) return { textColor: 'text-warning', bgColor: 'bg-warning/10', borderColor: 'border-warning/30', progressColor: 'bg-warning' }; if (percentage >= 75) return { textColor: 'text-warning', bgColor: 'bg-warning/10', borderColor: 'border-warning/30', progressColor: 'bg-warning' }; return { textColor: 'text-success', bgColor: 'bg-success/10', borderColor: 'border-success/30', progressColor: 'bg-success' }; }; const styles = getStatusStyles(); return (