/* @component-map * App — Main container, handles tab navigation and toast notifications * SignupBoard — Shows dish cards for claiming, attendee count * LineupView — Full lineup with stats and category grouping * AddDishForm — Form to add new dishes with photo upload * ClaimModal — Modal for claiming/unclaiming dishes * NotificationPanel — Notification bell and dropdown panel * @end-component-map */ import { SignupBoard } from './components/SignupBoard.jsx'; import { LineupView } from './components/LineupView.jsx'; import { AddDishForm } from './components/AddDishForm.jsx'; import { useCallback, useState } from 'react'; import { NotificationPanel } from './components/NotificationPanel.jsx'; function App() { const [activeTab, setActiveTab] = useState('signup'); const [toast, setToast] = useState(null); const showToast = useCallback((message) => { setToast(message); setTimeout(() => setToast(null), 3000); }, []); const switchTab = useCallback((tab) => { setActiveTab(tab); }, []); return (
Bring your A-game & your best dish!