components/ImagePromptInput.tsx (50 lines of code) (raw):

"use client"; import { useState } from "react"; import { Button } from "@/components/ui/button"; import { Wand2 } from "lucide-react"; import { Input } from "./ui/input"; interface ImagePromptInputProps { onSubmit: (prompt: string) => void; isEditing: boolean; isLoading: boolean; } export function ImagePromptInput({ onSubmit, isEditing, isLoading, }: ImagePromptInputProps) { const [prompt, setPrompt] = useState(""); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (prompt.trim()) { onSubmit(prompt.trim()); setPrompt(""); } }; return ( <form onSubmit={handleSubmit} className="space-y-4 rounded-lg"> <div className="space-y-2"> <p className="text-sm font-medium text-foreground"> {isEditing ? "Describe how you want to edit the image" : "Describe the image you want to generate"} </p> </div> <Input id="prompt" className="border-secondary" placeholder={ isEditing ? "Example: Make the background blue and add a rainbow..." : "Example: A 3D rendered image of a pig with wings and a top hat flying over a futuristic city..." } value={prompt} onChange={(e) => setPrompt(e.target.value)} /> <Button type="submit" disabled={!prompt.trim() || isLoading} className="w-full bg-primary hover:bg-primary/90" > <Wand2 className="w-4 h-4 mr-2" /> {isEditing ? "Edit Image" : "Generate Image"} </Button> </form> ); }