All files / web/src/app/toys/number-line page.tsx

0% Statements 0/60
0% Branches 0/1
0% Functions 0/1
0% Lines 0/60

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>
  )
}