import { ArrowUp, Loader2, Sparkles, Upload } from "lucide-react"; import type { ChangeEvent } from "react"; import { HomeAnimationEmbed } from "@/components/home/home-animation-embed"; import { ImageParamsBar, type ImageGenerationParams } from "@/components/image-params-bar"; import { Button } from "@/components/ui/button"; import { Textarea } from "@/components/ui/textarea"; import type { ModelOption, UploadFileItem } from "./types"; import type { PROMPT_TAGS } from "./utils"; type PromptTag = (typeof PROMPT_TAGS)[number]; type LovartHeroComposerProps = { composerPlaceholder: string; displayLogo: string; files: UploadFileItem[]; handleAddFiles: (files: FileList | null) => void; handleImageParamsChange: (nextParams: ImageGenerationParams) => void; heroPromoActionText?: string | null; heroPromoText?: string | null; heroSubtitleText?: string | null; heroTitleText?: string | null; homeAnimationData?: { enabled?: boolean; htmlContent?: string; fileName?: string; }; imageParams: ImageGenerationParams; isMembershipEnabled: boolean; isSubmitting: boolean; onSubmit: () => void; openUpgradeDialog: () => void; prompt: string; removeFile: (id: string) => void; setPrompt: (value: string) => void; shouldInvertLogo: boolean; siteName: string; triggerComposerModel: ModelOption; visiblePromptTags: PromptTag[]; }; export function LovartHeroComposer({ composerPlaceholder, displayLogo, files, handleAddFiles, handleImageParamsChange, heroPromoActionText, heroPromoText, heroSubtitleText, heroTitleText, homeAnimationData, imageParams, isMembershipEnabled, isSubmitting, onSubmit, openUpgradeDialog, prompt, removeFile, setPrompt, shouldInvertLogo, siteName, triggerComposerModel, visiblePromptTags, }: LovartHeroComposerProps) { return (
{isMembershipEnabled ? ( ) : (
NEW {heroPromoText || "现在升级,立享 Kling 3.0 与 Nano Banana Pro,最高 5 折优惠"}
)}
{displayLogo ? ( {siteName} ) : (
)}

{heroTitleText || `${siteName || "Lovart"} 让设计更简单`}

{heroSubtitleText || "懂你的设计代理,帮你搞定一切"}