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