Spaces:
Running
Running
import { ArrowUp } from "lucide-react"; | |
import { Input as ShadcnInput } from "./ui/input"; | |
interface InputProps { | |
input: string; | |
handleInputChange: (event: React.ChangeEvent<HTMLInputElement>) => void; | |
isLoading: boolean; | |
status: string; | |
stop: () => void; | |
} | |
export const Input = ({ | |
input, | |
handleInputChange, | |
isLoading, | |
status, | |
stop, | |
}: InputProps) => { | |
return ( | |
<div className="relative w-full"> | |
<ShadcnInput | |
className="bg-secondary py-6 w-full rounded-xl pr-12" | |
value={input} | |
autoFocus | |
placeholder={"Say something..."} | |
onChange={handleInputChange} | |
/> | |
{status === "streaming" || status === "submitted" ? ( | |
<button | |
type="button" | |
onClick={stop} | |
className="cursor-pointer absolute right-2 top-1/2 -translate-y-1/2 rounded-full p-2 bg-black hover:bg-zinc-800 disabled:bg-zinc-300 disabled:cursor-not-allowed transition-colors" | |
> | |
<div className="animate-spin h-4 w-4"> | |
<svg className="h-4 w-4 text-white" viewBox="0 0 24 24"> | |
<circle | |
className="opacity-25" | |
cx="12" | |
cy="12" | |
r="10" | |
stroke="currentColor" | |
strokeWidth="4" | |
fill="none" | |
/> | |
<path | |
className="opacity-75" | |
fill="currentColor" | |
d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" | |
/> | |
</svg> | |
</div> | |
</button> | |
) : ( | |
<button | |
type="submit" | |
disabled={isLoading || !input.trim()} | |
className="absolute right-2 top-1/2 -translate-y-1/2 rounded-full p-2 bg-black hover:bg-zinc-800 disabled:bg-zinc-300 disabled:cursor-not-allowed transition-colors" | |
> | |
<ArrowUp className="h-4 w-4 text-white" /> | |
</button> | |
)} | |
</div> | |
); | |
}; | |