import React, { useState } from 'react'; import { useAuth } from 'react-oidc-context'; import { useGame } from './hooks/useGame'; import { useQuizLibrary } from './hooks/useQuizLibrary'; import { useUserConfig } from './hooks/useUserConfig'; import { Landing } from './components/Landing'; import { Lobby } from './components/Lobby'; import { GameScreen } from './components/GameScreen'; import { Scoreboard } from './components/Scoreboard'; import { Podium } from './components/Podium'; import { QuizCreator } from './components/QuizCreator'; import { RevealScreen } from './components/RevealScreen'; import { SaveQuizPrompt } from './components/SaveQuizPrompt'; import { QuizEditor } from './components/QuizEditor'; import { SaveOptionsModal } from './components/SaveOptionsModal'; import { DisconnectedScreen } from './components/DisconnectedScreen'; import { WaitingToRejoin } from './components/WaitingToRejoin'; import { HostReconnected } from './components/HostReconnected'; import type { Quiz, GameConfig } from './types'; const seededRandom = (seed: number) => { const x = Math.sin(seed * 9999) * 10000; return x - Math.floor(x); }; const FLOATING_SHAPES = [...Array(15)].map((_, i) => ({ left: `${seededRandom(i * 1) * 100}%`, width: `${seededRandom(i * 2) * 100 + 40}px`, height: `${seededRandom(i * 3) * 100 + 40}px`, animationDuration: `${seededRandom(i * 4) * 20 + 15}s`, animationDelay: `-${seededRandom(i * 5) * 20}s`, borderRadius: seededRandom(i * 6) > 0.5 ? '50%' : '20%', background: 'rgba(255, 255, 255, 0.05)', })); const FloatingShapes = React.memo(() => { return ( <> {FLOATING_SHAPES.map((style, i) => (
))} > ); }); function App() { const auth = useAuth(); const { saveQuiz, updateQuiz, saving } = useQuizLibrary(); const { defaultConfig } = useUserConfig(); const [showSaveOptions, setShowSaveOptions] = useState(false); const [pendingEditedQuiz, setPendingEditedQuiz] = useStateCross your fingers...