Spaces:
Build error
Build error
| import React from "react"; | |
| import { ChatInput } from "./chat-input"; | |
| import { cn } from "#/utils/utils"; | |
| import { ImageCarousel } from "../images/image-carousel"; | |
| import { UploadImageInput } from "../images/upload-image-input"; | |
| interface InteractiveChatBoxProps { | |
| isDisabled?: boolean; | |
| mode?: "stop" | "submit"; | |
| onSubmit: (message: string, images: File[]) => void; | |
| onStop: () => void; | |
| value?: string; | |
| onChange?: (message: string) => void; | |
| } | |
| export function InteractiveChatBox({ | |
| isDisabled, | |
| mode = "submit", | |
| onSubmit, | |
| onStop, | |
| value, | |
| onChange, | |
| }: InteractiveChatBoxProps) { | |
| const [images, setImages] = React.useState<File[]>([]); | |
| const handleUpload = (files: File[]) => { | |
| setImages((prevImages) => [...prevImages, ...files]); | |
| }; | |
| const handleRemoveImage = (index: number) => { | |
| setImages((prevImages) => { | |
| const newImages = [...prevImages]; | |
| newImages.splice(index, 1); | |
| return newImages; | |
| }); | |
| }; | |
| const handleSubmit = (message: string) => { | |
| onSubmit(message, images); | |
| setImages([]); | |
| if (message) { | |
| onChange?.(""); | |
| } | |
| }; | |
| return ( | |
| <div | |
| data-testid="interactive-chat-box" | |
| className="flex flex-col gap-[10px]" | |
| > | |
| {images.length > 0 && ( | |
| <ImageCarousel | |
| size="small" | |
| images={images.map((image) => URL.createObjectURL(image))} | |
| onRemove={handleRemoveImage} | |
| /> | |
| )} | |
| <div | |
| className={cn( | |
| "flex items-end gap-1", | |
| "bg-tertiary border border-neutral-600 rounded-lg px-2", | |
| "transition-colors duration-200", | |
| "hover:border-neutral-500 focus-within:border-neutral-500", | |
| )} | |
| > | |
| <UploadImageInput onUpload={handleUpload} /> | |
| <ChatInput | |
| disabled={isDisabled} | |
| button={mode} | |
| onChange={onChange} | |
| onSubmit={handleSubmit} | |
| onStop={onStop} | |
| value={value} | |
| onImagePaste={handleUpload} | |
| className="py-[10px]" | |
| buttonClassName="py-[10px]" | |
| /> | |
| </div> | |
| </div> | |
| ); | |
| } | |