import { useAviationPlayer } from '../AviationContext'; import { usePlayback, type PlaybackInfo } from './usePlayback'; import { useMediaPosition } from './useMediaPosition'; import { usePlayerActions, type PlayerActions } from './usePlayerActions'; import type { MediaPosition } from '../specs/types.nitro'; import type { PlaybackEngine } from '../specs/PlaybackEngine.nitro'; import type { AviationPlayer } from '../Aviation'; /** * Combined player state returned by {@link usePlayer}. * * Merges playback state, media position, the underlying engine, and bound * action methods into a single object for the common case where a component * renders controls and progress together. */ export interface PlayerState extends PlaybackInfo, PlayerActions { position: MediaPosition; engine: PlaybackEngine; } export function usePlayer(playerArg?: AviationPlayer): PlayerState { const player = useAviationPlayer(playerArg); const playback = usePlayback(player); const position = useMediaPosition(player); const actions = usePlayerActions(player); return { ...playback, position, engine: player.engine, ...actions, }; }