import { Milliseconds, MillisecondsAccepted } from "@ef-carbon/primitive"; import IMedia, { IOptions as IMediaOptions } from "../IMedia"; import State from "./playable/State"; export default interface IPlayable extends IMedia { readonly looping: boolean; readonly start: Milliseconds; readonly end: Milliseconds; seek(milliseconds: MillisecondsAccepted): Promise; readonly position: Milliseconds | undefined; readonly duration: Milliseconds | undefined; readonly transitioning: boolean; readonly buffering: boolean; readonly playing: boolean; play(): Promise; readonly paused: boolean; pause(): Promise; readonly stopped: boolean; stop(): Promise; } export interface IOptions extends IMediaOptions { start?: MillisecondsAccepted; end?: MillisecondsAccepted; loop?: boolean; state?: State.Stopped | State.Buffering | State.Playing; onStateChange?(state: State): void; onPosition?(position: Milliseconds): void; positionInterval?: MillisecondsAccepted; onDuration?(duration: Milliseconds): void; }