UNPKG

ranui

Version:

A framework-agnostic Web Components UI library built on native custom elements, with TypeScript types, light/dark theming, SSR and PWA support.

44 lines (43 loc) 2.11 kB
import type { PlaybackSnapshot } from './playback'; import type { PlayerMediaHandlers } from './media'; import type { PlayerContextState, PlayerRuntimeState } from './state'; import type { PlayerVisualSignals } from './store'; export type PlayerMediaDispatchRuntimeState = Pick<PlayerRuntimeState<PlaybackSnapshot>, 'moveProgress' | 'isSeeking' | 'isSwitchingSource' | 'pendingPlaybackRestore' | 'controllerBarTimeId'>; export interface PlayerMediaDispatchRefs { playerBtn: HTMLElement; timeDivide: HTMLElement; playerController: HTMLElement; } export interface PlayerMediaDispatchDeps { refs: PlayerMediaDispatchRefs; state: PlayerMediaDispatchRuntimeState; ctx: Pick<PlayerContextState, 'currentState' | 'duration'>; visualSignals: PlayerVisualSignals; getVideo: () => HTMLVideoElement | undefined; rememberPosition: () => boolean; getSrc: () => string; change: (name: string, value: unknown) => void; setLoadingState: (loading: boolean) => void; resize: () => void; showErrorModal: (message: string) => void; restorePlaybackSnapshot: (snapshot: PlaybackSnapshot) => void; setCurrentTime: (n: number) => number; getCurrentTime: () => number; getTotalTime: () => number; getVolume: () => number; requestAnimationFrame: (fn: Function) => void; cancelAnimationFrame: () => void; updateCurrentProgress: () => void; updateBufferedProgress: () => void; showControllerBar: (e?: MouseEvent) => void; } /** * Native `<video>` event handlers — translates every event into `ctx`/signal * updates and a `change()` dispatch. Native events are the trigger for nearly * every other domain (loading state, resume position, the seek rAF loop, the * auto-hiding controller bar), so this module's deps interface enumerates * that fan-out explicitly as named callbacks rather than hiding it behind a * single opaque dependency — see `docs/PLAYER_ROADMAP.md`'s Phase 3 QoE * metrics, which taps this exact event stream. */ export declare function createMediaEventHandlers(deps: PlayerMediaDispatchDeps): PlayerMediaHandlers;