"use client"; import { ArrowUp, Paintbrush, X } from "lucide-react"; import { FaHand } from "react-icons/fa6"; import { useRef, useState } from "react"; import { HiStop } from "react-icons/hi2"; import { useLocalStorage, useMount, useUpdateEffect } from "react-use"; import { useRouter } from "next/navigation"; import { useNextStep } from "nextstepjs"; import { Button } from "@/components/ui/button"; import { cn } from "@/lib/utils"; import { useGeneration } from "./useGeneration"; import { File, MobileTabType, ProviderType } from "@/lib/type"; import { Models } from "./models"; import { DEFAULT_MODEL, MODELS } from "@/lib/providers"; import { Redesign } from "./redesign"; import { Uploader } from "./uploader"; import { InputMentions } from "./input-mentions"; export function AskAI({ initialPrompt, className, onToggleMobileTab, files, medias, tourHasBeenShown, isNew = false, isHistoryView, projectName = "new", }: { initialPrompt?: string; className?: string; files?: File[] | null; medias?: string[] | null; tourHasBeenShown?: boolean; onToggleMobileTab?: (tab: MobileTabType) => void; isNew?: boolean; isHistoryView?: boolean; projectName?: string; }) { const contentEditableRef = useRef(null); const [model = DEFAULT_MODEL, setModel] = useLocalStorage( "deepsite-model", DEFAULT_MODEL ); const [provider, setProvider] = useLocalStorage( "deepsite-provider", "auto" as ProviderType ); const [prompt, setPrompt] = useState(initialPrompt ?? ""); const [redesignMd, setRedesignMd] = useState<{ md: string; url: string; } | null>(null); const [selectedMedias, setSelectedMedias] = useState([]); const [imageLinks, setImageLinks] = useState([]); const [startTour, setStartTour] = useState(false); const router = useRouter(); const { callAi, isLoading, stopGeneration, audio } = useGeneration(projectName); const { startNextStep } = useNextStep(); const onComplete = () => { onToggleMobileTab?.("right-sidebar"); }; useMount(() => { if (initialPrompt && initialPrompt.trim() !== "" && isNew) { setTimeout(() => { if (isHistoryView) return; callAi( { prompt: initialPrompt, model, onComplete, provider, }, setModel ); router.replace("/new"); }, 200); } }); const onSubmit = () => { if (isHistoryView) return; if (contentEditableRef.current) { contentEditableRef.current.innerHTML = ""; } callAi( { prompt, model, onComplete, provider, redesignMd, medias: [...(selectedMedias ?? []), ...(imageLinks ?? [])], }, setModel ); if (selectedMedias.length > 0) setSelectedMedias([]); if (imageLinks.length > 0) setImageLinks([]); if (redesignMd) setRedesignMd(null); }; return (
{!tourHasBeenShown && (
{!startTour && (
)}
)} {!isNew && ( )} {!files || (files?.length === 0 && (redesignMd ? ( ) : ( { setRedesignMd({ md, url, }); }} /> )))}
{isLoading ? ( ) : ( )}
); }