/* eslint-disable @next/next/no-img-element -- External card image URLs; next/image migration is out of scope. */ import { ManaCost, ColorFilterSymbol } from './ManaSymbols'; import ManaSymbolSettings from './ManaSymbolSettings'; import { SearchBar } from './ui'; /* 2026-06-04 design-sweep pass: this file used broken Tailwind token classes (bg-bg-*, text-text-*, border-border, bg-accent-ember, focus:ring-accent-ember) throughout — none of those are defined in tailwind.config.js, so the browser pane rendered as transparent nothingness. Sweep replaces them with inline style={{ ... CSS vars ... }}, the SearchBar primitive for the card search input, and `glass-panel` + `rounded-2xl` on the outer pane to match the Liquid Glass system. Rarity badge colours were converted from the stale orange/yellow/gray/green Tailwind defaults to a neutral inline pair (bg-tertiary surface + ember/text-primary fg) so they render correctly in dark theme. */ const rarityBadgeStyle = (rarity) => { switch (rarity) { case 'mythic': return { backgroundColor: 'var(--accent-ember)', color: '#ffffff', }; case 'rare': return { backgroundColor: 'var(--accent-flame)', color: '#ffffff', }; case 'uncommon': return { backgroundColor: 'var(--bg-tertiary)', color: 'var(--text-primary)', }; default: // common return { backgroundColor: 'var(--bg-tertiary)', color: 'var(--text-secondary)', }; } }; const rarityDotColor = (rarity) => { switch (rarity) { case 'mythic': return 'var(--accent-ember)'; case 'rare': return 'var(--accent-flame)'; case 'uncommon': return 'var(--text-secondary)'; default: return 'var(--accent-wood)'; } }; export default function DeckBuilderCardBrowser({ selectedCard, onSelectCard, onClearSelectedCard, viewMode, onViewModeChange, showSettings, onToggleSettings, onCollapseSidebar, searchQuery, onSearchQueryChange, showFilters, onToggleFilters, filters, onFiltersChange, onClearFilters, onToggleColorFilter, searchLoading, searchResults, manaSymbolSettings, onManaSymbolSettingsChange, onAddCardToDeck, }) { const hasActiveFilters = filters.colors.length > 0 || filters.cmc || filters.rarity; return (
{!selectedCard ? ( <> {/* Header */}

Card Browser

{/* View Mode Toggle */}
{/* Search */}
onSearchQueryChange(e.target.value)} onClear={() => onSearchQueryChange('')} placeholder="Search for cards…" />
{/* Settings Panel */} {showSettings && (
)} {/* Quick Filters */} {showFilters && (
{/* Color Filters */}
{hasActiveFilters && ( )}
{['W', 'U', 'B', 'R', 'G'].map((color) => ( ))}
{/* CMC and Rarity */}
)} {/* Card List */}
{viewMode === 'list' ? (
{searchLoading ? (

Searching...

) : searchResults.length === 0 ? (
🔍

{searchQuery ? 'No cards found' : 'No cards available'}

) : ( searchResults.map((card) => (
onSelectCard(card)} >
{card.image_url && ( {card.name} )}

{card.name}

{card.set_name}

{card.mana_cost && ( )} {card.rarity && ( {card.rarity[0].toUpperCase()} )}
)) )}
) : (
{searchLoading ? (

Searching...

) : searchResults.length === 0 ? (
🔍

{searchQuery ? 'No cards found' : 'No cards available'}

) : (
{searchResults.map((card) => (
onSelectCard(card)} > {card.image_url ? (
{card.name}

{card.name}

{card.set_name}

{card.rarity && (
)}
) : (

{card.name}

{card.set_name}

)}
))}
)}
)}
) : ( /* Card Detail View */ <>

{selectedCard.name}

{selectedCard.image_url && (
{selectedCard.name}
)}

{selectedCard.name}

{selectedCard.set_name}

{selectedCard.mana_cost && (
)} {selectedCard.card_type && (
{selectedCard.card_type}
)} {selectedCard.oracle_text && (
{selectedCard.oracle_text}
)}
{selectedCard.rarity && (
{selectedCard.rarity}
)} {selectedCard.cmc !== undefined && (
{selectedCard.cmc}
)}
)} {/* Floating Action Button */} {selectedCard && (
)}
); }