ChatInput.tsx 1.3 KB

1234567891011121314151617181920212223242526272829303132
  1. import * as React from "react";
  2. import { useTranslation } from "react-i18next";
  3. import { Send } from "lucide-react";
  4. import { Button } from "@/components/ui/button";
  5. export function ChatInput({ disabled, onSend }: { disabled?: boolean; onSend: (text: string) => void }) {
  6. const { t } = useTranslation();
  7. const [text, setText] = React.useState("");
  8. return (
  9. <form
  10. className="flex items-end gap-2 border-t border-border bg-surface-elevated p-3"
  11. onSubmit={(event) => {
  12. event.preventDefault();
  13. if (!text.trim()) return;
  14. onSend(text.trim());
  15. setText("");
  16. }}
  17. >
  18. <textarea
  19. aria-label={t("sessions.message")}
  20. className="max-h-32 min-h-10 flex-1 resize-none rounded-md border border-border bg-muted/40 px-3 py-2 text-base outline-none transition placeholder:text-muted-foreground focus:border-primary/70 focus:ring-2 focus:ring-primary/20 sm:text-sm"
  21. value={text}
  22. disabled={disabled}
  23. onChange={(event) => setText(event.target.value)}
  24. placeholder={disabled ? t("sessions.selectSession") : t("sessions.typeMessage")}
  25. />
  26. <Button size="icon" disabled={disabled || !text.trim()} aria-label={t("sessions.sendMessage")}>
  27. <Send className="h-4 w-4" />
  28. </Button>
  29. </form>
  30. );
  31. }