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