import type { EnvironmentId } from "@t3tools/contracts"; import { FolderIcon } from "lucide-react"; import { useEffect, useState } from "react"; import { useAssetUrl } from "../assets/assetUrls"; const loadedProjectFaviconSrcs = new Set(); export function ProjectFavicon(input: { environmentId: EnvironmentId; cwd: string; className?: string; }) { const src = useAssetUrl(input.environmentId, { _tag: "project-favicon", cwd: input.cwd, }); const [status, setStatus] = useState<"loading" | "loaded" | "error">(() => src && loadedProjectFaviconSrcs.has(src) ? "loaded" : "loading", ); useEffect(() => { setStatus(src && loadedProjectFaviconSrcs.has(src) ? "loaded" : "loading"); }, [src]); if (!src) { return ( ); } return ( <> {status !== "loaded" ? ( ) : null} { loadedProjectFaviconSrcs.add(src); setStatus("loaded"); }} onError={() => setStatus("error")} /> ); }