PolicyAgent / components /InteractiveAvatarTextInput.tsx
eyuvaraj's picture
Upload 23 files
710adbf verified
import { Input, Spinner, Tooltip } from "@nextui-org/react";
import { Airplane, ArrowRight, PaperPlaneRight } from "@phosphor-icons/react";
import clsx from "clsx";
interface StreamingAvatarTextInputProps {
label: string;
placeholder: string;
input: string;
onSubmit: () => void;
setInput: (value: string) => void;
endContent?: React.ReactNode;
disabled?: boolean;
loading?: boolean;
}
export default function InteractiveAvatarTextInput({
label,
placeholder,
input,
onSubmit,
setInput,
endContent,
disabled = false,
loading = false,
}: StreamingAvatarTextInputProps) {
function handleSubmit() {
if (input.trim() === "") {
return;
}
onSubmit();
setInput("");
}
return (
<Input
endContent={
<div className="flex flex-row items-center h-full">
{endContent}
<Tooltip content="Send message">
{loading ? (
<Spinner
className="text-indigo-300 hover:text-indigo-200"
size="sm"
color="default"
/>
) : (
<button
type="submit"
className="focus:outline-none"
onClick={handleSubmit}
>
<PaperPlaneRight
className={clsx(
"text-indigo-300 hover:text-indigo-200",
disabled && "opacity-50"
)}
size={24}
/>
</button>
)}
</Tooltip>
</div>
}
label={label}
placeholder={placeholder}
size="sm"
value={input}
onKeyDown={(e) => {
if (e.key === "Enter") {
handleSubmit();
}
}}
onValueChange={setInput}
isDisabled={disabled}
/>
);
}