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
TypeScript
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;