import { Card as Card_Type, get_suit_symbol, get_rank_symbol, is_red_suit, is_wild, Rank, Rank_Red_Joker, Suit_Joker } from '../game/types' type Card_Size = 'small' | 'normal' interface Card_Props { card: Card_Type level: Rank selected: boolean on_click: () => void size?: Card_Size } const SIZE_CONFIG = { small: { width: 48, height: 67, rank_font: 15, suit_font: 13 }, normal: { width: 60, height: 84, rank_font: 22, suit_font: 20 }, } export function Card({ card, level, selected, on_click, size = 'normal' }: Card_Props) { const is_joker = card.Suit === Suit_Joker const is_red = is_joker ? card.Rank === Rank_Red_Joker : is_red_suit(card.Suit) const is_wild_card = is_wild(card, level) const cfg = SIZE_CONFIG[size] const rank_display = is_joker ? (card.Rank === Rank_Red_Joker ? 'R' : 'B') : get_rank_symbol(card.Rank) const suit_display = is_joker ? '🃏' : get_suit_symbol(card.Suit) return (
{/* Selection overlay */} {selected && (
)} {/* Rank and suit at TOP of card so it's visible when stacked */}
{rank_display} {suit_display}
{/* Big suit in center */}
{suit_display}
) } interface Card_Back_Props { size?: Card_Size } export function Card_Back({ size = 'normal' }: Card_Back_Props) { const cfg = SIZE_CONFIG[size] return (
🀄
) }