'use client'; import { useState, useEffect } from 'react'; import { ScrollArea } from '@/components/ui/scroll-area'; import { Badge } from '@/components/ui/badge'; import { DebugName } from '@/components/game/debug/debug-context'; import { SPELLS_DEF } from '@/lib/game/constants'; import type { SpellDef } from '@/lib/game/types'; export function GrimoireTab() { const [grimoireSpells, setGrimoireSpells] = useState<[string, SpellDef][]>([]); const [loaded, setLoaded] = useState(false); useEffect(() => { if (typeof window !== 'undefined' && SPELLS_DEF) { setGrimoireSpells( Object.entries(SPELLS_DEF).filter((entry): entry is [string, SpellDef] => !!entry[1].grimoire) ); } setLoaded(true); }, []); if (!loaded) { return
Loading grimoire...
; } if (grimoireSpells.length === 0) { return (
No grimoire spells available yet. Defeat guardians to unlock spells.
); } const availablePages = Math.ceil(grimoireSpells.length / 12); return (

A vast tome of arcane knowledge. Study carefully — each spell costs insight to transcribe into your repertoire.

Available pages: {availablePages}. Spells in grimoire: {grimoireSpells.length}.

{grimoireSpells.map(([id, spell]) => (
{spell.name} {spell.elem}
{spell.desc &&

{spell.desc}

}
Cost: {spell.cost.amount} { spell.cost.type === 'element' ? spell.cost.element : 'raw mana' }
Power: {spell.dmg}
{spell.effects && spell.effects.length > 0 && (
Effects: {spell.effects.map(e => e.type).join(', ')}
)}
))}
); }