import { useMemo, useState } from 'react' import { Flame, RefreshCw, Shuffle } from 'lucide-react' import { KARTEN, KATEGORIEN, KARTEN_OHNE_ROT, kategorieById, type KategorieId, type Spielkarte } from '@/data/game' import { useRedMode } from '@/hooks/useRedMode' const REDMODE_KEY = 'einsbisacht-redmode' type Filter = 'alle' | KategorieId function KartenGesicht({ karte, zeigen }: { karte: Spielkarte | null; zeigen: boolean }) { const kat = karte ? kategorieById(karte.kategorie) : null return (
{/* Rückseite = Nachziehstapel */}
? Nachziehstapel Antippen, um eine Karte zu ziehen
{/* Vorderseite = Statement */} {karte && kat && (
{kat.emoji} {kat.titel} 1–8

{karte.text}

Karte {String(karte.id).padStart(2, '0')} / 20

)}
) } export default function Cards() { const [filter, setFilter] = useState('alle') const [gezogen, setGezogen] = useState(null) const [zaehler, setZaehler] = useState(0) // triggert Re-Flip-Animation const [redMode, setRedMode] = useState( () => localStorage.getItem(REDMODE_KEY) === '1' || new URLSearchParams(window.location.search).get('redmode') === '1' ) useRedMode(redMode) const toggleRedMode = () => { setRedMode((alt) => { localStorage.setItem(REDMODE_KEY, alt ? '0' : '1') return !alt }) } const stapel = useMemo( () => filter === 'alle' ? redMode ? KARTEN : KARTEN_OHNE_ROT : KARTEN.filter((k) => k.kategorie === filter), [filter, redMode] ) const ziehen = () => { const rest = stapel.filter((k) => k.id !== gezogen?.id) const pool = rest.length > 0 ? rest : stapel setGezogen(pool[Math.floor(Math.random() * pool.length)]) setZaehler((z) => z + 1) } return (
{redMode && ( Red Ralf Mode Logo )}

20 Statements · 5 Kategorien

Die Karten

Farblich nach Kategorien sortiert – entscheidet vorab, welche Vibe die Runde haben soll! 🎨

{/* Red Mode Toggle */} {/* Kategorie-Filter */}
setFilter('alle')} label="✨ Alle" /> {KATEGORIEN.filter((k) => k.id !== 'rotlicht' || redMode).map((k) => ( setFilter(k.id)} label={k.id === 'rotlicht' ? `🌶️ Rotlicht` : `${k.emoji} ${k.titel.split(' ')[0]}`} chipKlasse={k.chip} /> ))}
{/* Zieh-Stapel */}
0 ? 'rein' : ''}>
{/* Alle Karten im Überblick */}

Alle Karten ({stapel.length})

{stapel.map((karte) => { const kat = kategorieById(karte.kategorie) return (
{kat.emoji}

{karte.text}

{kat.titel}

) })}
) } function FilterChip({ aktiv, onClick, label, chipKlasse, }: { aktiv: boolean onClick: () => void label: string chipKlasse?: string }) { return ( ) }