Spaces:
Running
Running
import * as React from 'react'; | |
import { type UseChatHelpers } from 'ai/react'; | |
import { Button } from '@/components/ui/Button'; | |
import { PromptForm } from '@/components/chat/PromptForm'; | |
import { IconRefresh, IconStop } from '@/components/ui/Icons'; | |
import { MessageBase } from '../../lib/types'; | |
export interface ChatPanelProps | |
extends Pick< | |
UseChatHelpers, | |
'append' | 'isLoading' | 'reload' | 'stop' | 'input' | 'setInput' | |
> { | |
id?: string; | |
title?: string; | |
messages: MessageBase[]; | |
url?: string; | |
} | |
export function ChatPanel({ | |
id, | |
title, | |
isLoading, | |
stop, | |
append, | |
reload, | |
input, | |
setInput, | |
messages, | |
url, | |
}: ChatPanelProps) { | |
return ( | |
<div className="fixed inset-x-0 bottom-0 w-full animate-in duration-300 ease-in-out peer-[[data-state=open]]:group-[]:lg:pl-[250px] peer-[[data-state=open]]:group-[]:xl:pl-[300px]"> | |
<div className="mx-auto sm:max-w-3xl sm:px-4"> | |
<div className="px-4 py-2 space-y-4 border-t shadow-lg bg-background sm:rounded-t-xl sm:border md:py-4"> | |
<PromptForm | |
url={url} | |
onSubmit={async value => { | |
await append({ | |
id, | |
content: value, | |
role: 'user', | |
}); | |
}} | |
input={input} | |
setInput={setInput} | |
isLoading={isLoading} | |
messages={messages} | |
reload={reload} | |
/> | |
</div> | |
</div> | |
</div> | |
); | |
} | |