import { useState } from "react"; import ImageUpload from "./components/ImageUpload"; import CodePreview from "./components/CodePreview"; import Preview from "./components/Preview"; import { generateCode } from "./generateCode"; import Spinner from "./components/Spinner"; import classNames from "classnames"; function App() { const [appState, setAppState] = useState<"INITIAL" | "CODING" | "CODE_READY">( "INITIAL" ); const [generatedCode, setGeneratedCode] = useState(""); const [referenceImages, setReferenceImages] = useState([]); const [executionConsole, setExecutionConsole] = useState([]); const [blobUrl, setBlobUrl] = useState(""); const createBlobUrl = () => { const blob = new Blob([generatedCode], { type: "text/html" }); const url = URL.createObjectURL(blob); setBlobUrl(url); }; function startCodeGeneration(referenceImages: string[]) { setAppState("CODING"); setReferenceImages(referenceImages); generateCode( referenceImages[0], function (token) { setGeneratedCode((prev) => prev + token); }, function (code) { setGeneratedCode(code); }, function (line) { setExecutionConsole((prev) => [...prev, line]); }, function () { setAppState("CODE_READY"); } ); } return (

Screenshot to Code

drag & drop a screenshot below

{appState === "INITIAL" && ( <> )} {(appState === "CODING" || appState === "CODE_READY") && ( <>
Reference

Console

{executionConsole.map((line, index) => (
{line}
))}
{/* Show code preview only when coding */} {appState === "CODING" && ( <>
{executionConsole.slice(-1)[0]}
)} {appState === "CODE_READY" && ( )} )}
); } export default App;