bright-ai-18 / components /ChatInput.jsx
akhaliq's picture
akhaliq HF Staff
Upload components/ChatInput.jsx with huggingface_hub
70ecf69 verified
import { useState } from 'react'
export default function ChatInput({ onSendMessage, disabled }) {
const [message, setMessage] = useState('')
const handleSubmit = (e) => {
e.preventDefault()
if (message.trim() && !disabled) {
onSendMessage(message)
setMessage('')
}
}
const handleKeyDown = (e) => {
if (e.key === 'Enter' && !e.shiftKey) {
e.preventDefault()
handleSubmit(e)
}
}
return (
<div className="bg-white dark:bg-gray-800 rounded-2xl shadow-lg border border-gray-200 dark:border-gray-700 p-4 mt-4">
<form onSubmit={handleSubmit} className="flex items-end space-x-3">
<div className="flex-1">
<textarea
value={message}
onChange={(e) => setMessage(e.target.value)}
onKeyDown={handleKeyDown}
placeholder="Type your message..."
disabled={disabled}
rows={1}
className="w-full resize-none bg-transparent border-0 focus:outline-none text-gray-900 dark:text-white placeholder-gray-400 dark:placeholder-gray-500 text-sm md:text-base disabled:opacity-50"
/>
</div>
<button
type="submit"
disabled={disabled || !message.trim()}
className="flex-shrink-0 bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 text-white rounded-xl p-3 transition-all duration-200 disabled:opacity-50 disabled:cursor-not-allowed shadow-md hover:shadow-lg transform hover:scale-105 active:scale-95"
aria-label="Send message"
>
<svg
className="w-5 h-5"
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth={2}
d="M12 19l9 2-9-18-9 18 9-2zm0 0v-8"
/>
</svg>
</button>
</form>
<p className="text-xs text-gray-400 dark:text-gray-500 mt-2">
Press Enter to send, Shift + Enter for new line
</p>
</div>
)
}