ranui
Version:
A framework-agnostic Web Components UI library built on native custom elements, with TypeScript types, light/dark theming, SSR and PWA support.
49 lines (48 loc) • 2.25 kB
TypeScript
import type { EngineAdapter, EngineQualityLevel } from './adapters/types';
import type { PlaybackSnapshot } from './playback';
import type { PlayerRuntimeState } from './state';
export interface PlayerClarityRefs {
clarityContainer: HTMLElement;
player: HTMLDivElement;
}
export type PlayerClarityRuntimeState = Pick<PlayerRuntimeState<PlaybackSnapshot>, 'isSwitchingSource' | 'pendingPlaybackRestore'>;
export interface PlayerClarityCtx<TLevel extends EngineQualityLevel = EngineQualityLevel> {
levels: TLevel[];
levelMap: Map<string, string>;
clarity: string;
}
export interface PlayerClarityDeps<TLevel extends EngineQualityLevel = EngineQualityLevel> {
refs: PlayerClarityRefs;
state: PlayerClarityRuntimeState;
ctx: PlayerClarityCtx<TLevel>;
getEngine: () => EngineAdapter | undefined;
getVideo: () => HTMLVideoElement | undefined;
getSrc: () => string;
capturePlaybackSnapshot: () => PlaybackSnapshot;
setLoadingState: (loading: boolean) => void;
change: (name: string, value: unknown) => void;
showErrorModal: (message: string) => void;
/**
* Self-forwarding entry for this module's own `createClaritySelect` —
* `manifestLoaded` calls it through the RanPlayer wrapper instead of the
* local closure below, so a `vi.spyOn(player, 'createClaritySelect')` set
* up after construction still intercepts it.
*/
createClaritySelect: () => void;
}
export interface PlayerClarityHandlers<TLevel extends EngineQualityLevel = EngineQualityLevel> {
changeClarity: (e: Event) => void;
createClaritySelect: () => void;
manifestLoaded: (levels: TLevel[]) => void;
hlsError: (payload: {
fatal: boolean;
detail: unknown;
}) => void;
}
/**
* Rendition/quality switching, generalized across whichever `EngineAdapter`
* is currently loaded (`docs/PLAYER_ROADMAP.md` Phase 2) — no engine-specific
* branching lives here, that's the adapter's job (`core/adapters/*.ts`). Kept
* separate from `core/subtitles.ts` since subtitles are engine-independent.
*/
export declare function createClarityHandlers<TLevel extends EngineQualityLevel = EngineQualityLevel>(deps: PlayerClarityDeps<TLevel>): PlayerClarityHandlers<TLevel>;