import { useState, useMemo, useCallback, useEffect } from "react"; import { getCachedFontAtlas, loadFontAtlas, clearFontAtlasCache, } from "@/lib/fonts/google-fonts"; import type { FontAtlas } from "@/lib/fonts/types"; import { SYSTEM_FONTS } from "@/constants/font-constants"; type Status = "idle" | "loading" | "error"; export function useFontAtlas({ open }: { open: boolean }) { const [atlas, setAtlas] = useState(() => getCachedFontAtlas(), ); const [status, setStatus] = useState(() => getCachedFontAtlas() ? "idle" : "loading", ); useEffect(() => { if (!open || atlas) return; setStatus("loading"); loadFontAtlas().then((data) => { if (data) { setAtlas(data); setStatus("idle"); } else { setStatus("error"); } }); }, [open, atlas]); const retry = useCallback(() => { clearFontAtlasCache(); setStatus("loading"); loadFontAtlas().then((data) => { if (data) { setAtlas(data); setStatus("idle"); } else { setStatus("error"); } }); }, []); const fontNames = useMemo(() => { if (!atlas) return []; return [...Object.keys(atlas.fonts), ...SYSTEM_FONTS].sort(); }, [atlas]); return { atlas, status, fontNames, retry }; }