import { useStore } from "../store"; // Mapping statique gid (Google Sheets ID) -> URL icône via api.dofusdb.fr // Pattern URL : https://api.dofusdb.fr/img/items/{iconId}.png const DOFUS_ICON_BASE = "https://api.dofusdb.fr/img/items"; const GID_TO_ICON: Record = { "474870200": `${DOFUS_ICON_BASE}/23009.png`, // Dofawa "743703882": `${DOFUS_ICON_BASE}/23025.png`, // Dofus Argenté "103963898": `${DOFUS_ICON_BASE}/23006.png`, // Dofus Cawotte "1075294690": `${DOFUS_ICON_BASE}/23022.png`, // Dokoko "1567240526": `${DOFUS_ICON_BASE}/23020.png`, // Dofus des Veilleurs "1011508069": `${DOFUS_ICON_BASE}/23002.png`, // Dofus Emeraude "2045137654": `${DOFUS_ICON_BASE}/23001.png`, // Dofus Pourpre "1967508888": `${DOFUS_ICON_BASE}/23032.png`, // Domakuro "1382359191": `${DOFUS_ICON_BASE}/23033.png`, // Dorigami "1413546794": `${DOFUS_ICON_BASE}/23003.png`, // Dofus Turquoise "1641656252": `${DOFUS_ICON_BASE}/23005.png`, // Dofus des Glaces "953522228": `${DOFUS_ICON_BASE}/23023.png`, // Dofus Abyssal "818597042": `${DOFUS_ICON_BASE}/23039.png`, // Dofoozbz "1021129660": `${DOFUS_ICON_BASE}/23016.png`, // Dofus Nébuleux "595670723": `${DOFUS_ICON_BASE}/23004.png`, // Dofus Vulbis "544349966": `${DOFUS_ICON_BASE}/23008.png`, // Dofus Tacheté "1150302145": `${DOFUS_ICON_BASE}/23024.png`, // Dofus Forgelave "882278553": `${DOFUS_ICON_BASE}/23007.png`, // Dofus Ebène "200570588": `${DOFUS_ICON_BASE}/23011.png`, // Dofus Ivoire "1209269839": `${DOFUS_ICON_BASE}/23012.png`, // Dofus Ocre "462784268": `${DOFUS_ICON_BASE}/23027.png`, // Dofus Argenté Scintillant "1543573905": `${DOFUS_ICON_BASE}/23034.png`, // Dofus Cauchemar "1007491889": `${DOFUS_ICON_BASE}/23035.png`, // Dom de Pin "1047555165": `${DOFUS_ICON_BASE}/23036.png`, // Dofus Sylvestre "2105601828": `${DOFUS_ICON_BASE}/23029.png`, // Dofus Cacao "474510463": `${DOFUS_ICON_BASE}/23017.png`, // Dokille "62476099": `${DOFUS_ICON_BASE}/23018.png`, // Dolmanax "1873654554": `${DOFUS_ICON_BASE}/23019.png`, // Dotruche "360188709": `${DOFUS_ICON_BASE}/23010.png`, // Dofus Kaliptus }; export default function HomeView({ needsSync, onSync }: { needsSync?: boolean; onSync?: () => void }) { const { guides, openGuide, profiles, activeProfileId, syncing } = useStore(); const activeProfile = profiles.find(p => p.id === activeProfileId); const totalQuests = guides.reduce((s, g) => s + g.total_quests, 0); const totalCompleted = guides.reduce((s, g) => s + g.completed_quests, 0); const globalPct = totalQuests > 0 ? Math.round((totalCompleted / totalQuests) * 100) : 0; const completedGuides = guides.filter(g => g.total_quests > 0 && g.completed_quests === g.total_quests); const inProgressGuides = guides.filter(g => g.completed_quests > 0 && g.completed_quests < g.total_quests); return (
{/* Header */}

Tougli — Guide Dofus

{activeProfile && (

Profil actif : {activeProfile.name}

)}
{/* First-time sync CTA */} {needsSync && (
Première utilisation

Aucun guide chargé. Synchronisez pour récupérer les données depuis Google Sheets.

)} {/* Global progress */} {guides.length > 0 && (
Progression globale {totalCompleted} / {totalQuests} quêtes ({globalPct}%)
)} {/* En cours */} {inProgressGuides.length > 0 && (
)} {/* Tous les guides */}
); } function Stat({ label, value, color }: { label: string; value: number; color: string }) { return (
{value} {label}
); } function Section({ title, guides, onOpen }: { title: string; guides: import("../types").GuideListItem[]; onOpen: (gid: string) => void; }) { return (

{title}

{guides.map(g => )}
); } function DofusIcon({ gid, pct, size = 44 }: { gid: string; pct: number; size?: number }) { const iconUrl = GID_TO_ICON[gid] ?? null; if (!iconUrl) return null; // L'icône colorée est clippée du bas vers le haut selon pct. // clipPath: inset(top right bottom left) — on réduit depuis le haut. const filledClip = `inset(${100 - pct}% 0 0 0)`; return (
{/* Calque grisé (base) */} {/* Calque coloré, progressivement révélé du bas vers le haut */} {pct > 0 && ( )}
); } function GuideCard({ guide, onOpen }: { guide: import("../types").GuideListItem; onOpen: (gid: string) => void; }) { const pct = guide.total_quests > 0 ? Math.round((guide.completed_quests / guide.total_quests) * 100) : 0; const isDone = pct === 100 && guide.total_quests > 0; const inProgress = guide.completed_quests > 0 && !isDone; const hasIcon = GID_TO_ICON[guide.gid] != null; const accentColor = isDone ? "#4ade80" : inProgress ? "#f0c040" : "#4a9eff"; const borderColor = isDone ? "rgba(74,222,128,0.25)" : "#2d3748"; return ( // Wrapper pour permettre à l'icône de déborder vers le haut
); }