Spaces:
Sleeping
Sleeping
File size: 2,944 Bytes
cc43e3c 052672d cc43e3c c69ef3e 3ba9c0c f80b091 c69ef3e cc43e3c 3ba9c0c f80b091 3ba9c0c f80b091 3ba9c0c f80b091 3ba9c0c f80b091 3ba9c0c f80b091 3ba9c0c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
import * as React from 'react';
import Textarea from 'react-textarea-autosize';
import { UseChatHelpers } from 'ai/react';
import { useEnterSubmit } from '@/lib/hooks/useEnterSubmit';
import { cn } from '@/lib/utils';
import { Button, buttonVariants } from '@/components/ui/Button';
import {
Tooltip,
TooltipContent,
TooltipTrigger,
} from '@/components/ui/Tooltip';
import { IconArrowElbow, IconPlus } from '@/components/ui/Icons';
import { useRouter } from 'next/navigation';
export interface PromptProps
extends Pick<UseChatHelpers, 'input' | 'setInput'> {
onSubmit: (value: string) => void;
isLoading: boolean;
}
export function PromptForm({
onSubmit,
input,
setInput,
isLoading,
}: PromptProps) {
const { formRef, onKeyDown } = useEnterSubmit();
const inputRef = React.useRef<HTMLTextAreaElement>(null);
const router = useRouter();
React.useEffect(() => {
if (inputRef.current) {
inputRef.current.focus();
}
}, []);
return (
<form
onSubmit={async e => {
e.preventDefault();
if (!input?.trim()) {
return;
}
setInput('');
await onSubmit(input);
}}
ref={formRef}
>
<div className="relative flex flex-col w-full px-8 pl-2 overflow-hidden max-h-60 grow bg-background sm:rounded-md sm:border sm:px-12 sm:pl-2">
{/* <Tooltip>
<TooltipTrigger asChild>
<button
onClick={e => {
e.preventDefault()
router.refresh()
router.push('/')
}}
className={cn(
buttonVariants({ size: 'sm', variant: 'outline' }),
'absolute left-0 top-4 size-8 rounded-full bg-background p-0 sm:left-4'
)}
>
<IconPlus />
<span className="sr-only">New Chat</span>
</button>
</TooltipTrigger>
<TooltipContent>New Chat</TooltipContent>
</Tooltip> */}
<Textarea
ref={inputRef}
tabIndex={0}
onKeyDown={onKeyDown}
rows={1}
value={input}
onChange={e => setInput(e.target.value)}
placeholder="Ask questions about the images."
spellCheck={false}
className="min-h-[60px] w-full resize-none bg-transparent px-4 py-[1.3rem] focus-within:outline-none sm:text-sm"
/>
<div className="absolute right-0 top-4 sm:right-4">
<Tooltip>
<TooltipTrigger asChild>
<Button
type="submit"
size="icon"
disabled={isLoading || input === ''}
>
<IconArrowElbow />
<span className="sr-only">Send message</span>
</Button>
</TooltipTrigger>
<TooltipContent>Send message</TooltipContent>
</Tooltip>
</div>
</div>
</form>
);
}
|