'use client'; import { useState } from 'react'; import { useTranslations } from 'next-intl'; import { Settings, RotateCcw, Bookmark, Film, Share2, Camera, MessageSquare, LayoutGrid, ChevronDown, ChevronUp, Eye, EyeOff, } from 'lucide-react'; import { dynastyColors, categoryIcons } from '@/data/relics'; export interface LayerState { dynasties: Record; categories: Record; clusters: boolean; labels: boolean; } interface LayerPanelProps { state: LayerState; onChange: (state: LayerState) => void; onReset: () => void; } export function LayerPanel({ state, onChange, onReset }: LayerPanelProps) { const t = useTranslations(); const [dynastyOpen, setDynastyOpen] = useState(true); const [categoryOpen, setCategoryOpen] = useState(true); const [displayOpen, setDisplayOpen] = useState(false); const allDynastiesVisible = Object.values(state.dynasties).every(Boolean); const allCategoriesVisible = Object.values(state.categories).every(Boolean); const toggleDynasty = (dyn: string) => { onChange({ ...state, dynasties: { ...state.dynasties, [dyn]: !state.dynasties[dyn] }, }); }; const toggleAllDynasties = () => { const next = !allDynastiesVisible; onChange({ ...state, dynasties: Object.fromEntries(Object.keys(state.dynasties).map((k) => [k, next])), }); }; const toggleCategory = (cat: string) => { onChange({ ...state, categories: { ...state.categories, [cat]: !state.categories[cat] }, }); }; const toggleAllCategories = () => { const next = !allCategoriesVisible; onChange({ ...state, categories: Object.fromEntries(Object.keys(state.categories).map((k) => [k, next])), }); }; const dynastyName = (dyn: string) => { try { return t(`dynasty.${dyn}`); } catch { return dyn; } }; const categoryName = (cat: string) => { try { return t(`category.${cat}`); } catch { return cat; } }; return (
{/* Main panel */}
{/* Header */}
Beta

{t('sidebar.operatingRelics')}

{/* Display settings dropdown */} {displayOpen && (

{t('sidebar.displayHint')}

)} {/* Scrollable sections */}
{/* Dynasty section */}
{t('filter.dynasty')}
{dynastyOpen && (
{Object.entries(dynastyColors).map(([dyn, color]) => ( ))}
)}
{/* Category section */}
{t('filter.category')}
{categoryOpen && (
{Object.entries(categoryIcons).map(([cat, icon]) => ( ))}
)}
{/* Clusters toggle */} {/* Labels toggle */}
{/* Bottom actions */}
} label={t('map.reset')} onClick={onReset} /> } label={t('sidebar.savedViews')} /> } label={t('sidebar.cinematic')} /> } label={t('sidebar.share')} /> } label={t('sidebar.screenshot')} /> } label={t('sidebar.feedback')} />
{/* Cards panel toggle */}
); } function ActionButton({ icon, label, onClick, disabled, }: { icon: React.ReactNode; label: string; onClick?: () => void; disabled?: boolean; }) { return ( ); }