All files / web/src/contexts GameLayoutContext.tsx

100% Statements 32/32
100% Branches 2/2
100% Functions 2/2
100% Lines 32/32

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 331x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 3x 3x 1x 1x 4x 4x  
'use client'
 
import { createContext, useContext, type ReactNode } from 'react'
 
/**
 * Context to control game layout behavior.
 *
 * In the arcade, games use StandardGameLayout which fills 100vh and calculates
 * nav padding. But in practice game breaks, the game is rendered inside a
 * pre-positioned container that already accounts for navs.
 *
 * This context tells StandardGameLayout whether to use:
 * - 'viewport' (default): height: 100vh, calculate nav padding
 * - 'container': height: 100%, no nav padding (parent handles positioning)
 */
type GameLayoutMode = 'viewport' | 'container'
 
const GameLayoutContext = createContext<GameLayoutMode>('viewport')
 
interface GameLayoutProviderProps {
  children: ReactNode
  /** Layout mode: 'viewport' for arcade, 'container' for practice game breaks */
  mode: GameLayoutMode
}
 
export function GameLayoutProvider({ children, mode }: GameLayoutProviderProps) {
  return <GameLayoutContext.Provider value={mode}>{children}</GameLayoutContext.Provider>
}
 
export function useGameLayoutMode(): GameLayoutMode {
  return useContext(GameLayoutContext)
}