Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | 'use client' import { useState } from 'react' import { AppNavBar } from '@/components/AppNavBar' import { NumberLine } from '@/components/toys/number-line/NumberLine' import { useTheme } from '@/contexts/ThemeContext' import { PlayerPicker } from '@/components/shared/PlayerPicker' import type { CallState } from '@/components/toys/number-line/talkToNumber/useRealtimeVoice' export default function NumberLinePage() { const { resolvedTheme } = useTheme() const isDark = resolvedTheme === 'dark' const [selectedPlayerId, setSelectedPlayerId] = useState<string | null>(null) const [callActive, setCallActive] = useState(false) return ( <div data-component="number-line-page" style={{ width: '100vw', height: '100dvh', overflow: 'hidden', background: isDark ? '#111827' : '#f9fafb', display: 'flex', flexDirection: 'column', }} > <AppNavBar navSlot={ <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}> <span style={{ fontSize: '14px', fontWeight: 600, color: isDark ? 'rgba(209, 213, 219, 1)' : 'rgba(55, 65, 81, 1)', }} > 📏 Number Line </span> <PlayerPicker selectedPlayerId={selectedPlayerId} onSelect={setSelectedPlayerId} disabled={callActive} isDark={isDark} /> </div> } /> <div style={{ flex: 1, minHeight: 0, paddingTop: 'var(--app-nav-height)' }}> <NumberLine playerId={selectedPlayerId ?? undefined} onPlayerIdentified={(id) => setSelectedPlayerId(id)} onCallStateChange={(state: CallState) => setCallActive(state !== 'idle' && state !== 'error') } /> </div> </div> ) } |