import { FileDownloadInfo, LogLevel, MediaCanPlayEvent, MediaControlsChangeEvent, MediaEvents, MediaFullscreenChangeEvent, MediaPlayerProps, MediaPlayerState, MediaRateChangeEvent, MediaTextTrackChangeEvent, MediaTimeUpdateEvent, MediaViewType, MediaVolumeChangeEvent, PlayerSrc, PlyrLayoutProps, PlyrLayoutTranslations, TextTrackInit } from "../types/vidstack-CZeLQ-DR.js"; import { MediaPlayerElement, MediaPlyrLayoutElement, MediaProviderElement } from "../types/vidstack-qlPfnpnE.js"; //#region types/global/plyr.d.ts declare class Plyr implements PlyrProps, PlyrMethods { #private; readonly target: PlyrTarget; readonly config: Partial; static setup(targets: string | NodeList | HTMLElement[], config?: PlyrConfig): Plyr[]; static supported(type: 'audio' | 'video', provider: 'html5' | 'youtube' | 'vimeo'): boolean; readonly player: MediaPlayerElement; readonly provider: MediaProviderElement; readonly layout: MediaPlyrLayoutElement; readonly fullscreen: PlyrFullscreenAdapter; playing: boolean; paused: boolean; ended: boolean; currentTime: number; seeking: boolean; duration: number; volume: number; muted: boolean; loop: boolean; poster: string; get type(): "" | "audio" | "dash" | "google-cast" | "hls" | "video" | "vimeo" | "youtube"; get isHTML5(): boolean; get isEmbed(): boolean; get buffered(): number; get stopped(): boolean; get hasAudio(): boolean; get speed(): number; set speed(speed: number); get currentTrack(): number; set currentTrack(index: number); get pip(): boolean; set pip(isActive: boolean); get quality(): number | null; set quality(value: number | null); get source(): PlyrSource | null; set source(source: PlyrSource | null); get ratio(): string | null; set ratio(ratio: string | null); get download(): FileDownloadInfo; set download(download: FileDownloadInfo); constructor(target: PlyrTarget, config?: Partial); play(): Promise; pause(): Promise; togglePlay(toggle?: boolean): Promise; toggleCaptions(toggle?: boolean): void; toggleControls(toggle?: boolean): void; restart(): void; stop(): void; forward(seekTime?: number): void; rewind(seekTime?: number): void; increaseVolume(step?: number): void; decreaseVolume(step?: number): void; airplay(): Promise; on(type: T, callback: (event: PlyrEvents[T]) => void): void; once(type: T, callback: (event: PlyrEvents[T]) => void): void; off(type: T, callback: (event: PlyrEvents[T]) => void): void; supports(type: string): boolean; destroy(): void; } type PlyrTarget = string | HTMLElement | NodeList | HTMLElement[]; interface PlyrConfig extends Partial>, Partial { /** * Completely disable Plyr. This would allow you to do a User Agent check or similar to * programmatically enable or disable Plyr for a certain UA. * * @defaultValue true * @example * ```ts * enabled: !/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent) * ``` */ enabled: boolean; /** * Display debugging information in the console. * * @defaultValue 'warn' */ debug: boolean | LogLevel; /** * Only allow one player playing at once. * * @defaultValue true */ autoPause: boolean; /** * Gets or sets the video aspect ratio. * * @defaultValue 16/9 */ ratio: string | null; /** * Hide video controls automatically after 2s of no mouse or focus movement, on control element * blur (tab out), on playback start or entering fullscreen. As soon as the mouse is moved, * a control element is focused or playback is paused, the controls reappear instantly. * * @defaultValue true */ hideControls: boolean; /** * Reset the playback to the start once playback is complete. * * @defaultValue false */ resetOnEnd: boolean; /** * Disable right click menu on video to help as very primitive obfuscation to prevent downloads * of content. * * @defaultValue true */ disableContextMenu: boolean; /** * Specify a URL or path to the SVG sprite. See the SVG section for more info. * * @defaultValue null */ iconUrl: string | null; /** * Specify the id prefix for the icons used in the default controls (e.g. "plyr-play" would be * "plyr"). This is to prevent clashes if you're using your own SVG sprite but with the default * controls. Most people can ignore this option. * * @defaultValue 'plyr' */ iconPrefix: 'plyr'; /** * Enable keyboard shortcuts for focused players only or globally. * * @defaultValue `{ focused: true, global: false }` */ keyboard: PlyrKeyboardConfig; /** * Used for internationalization (i18n) of the text within the UI. * * @defaultValue null */ i18n: PlyrI18nConfig | null; /** * Text tracks to be included on initialization. */ tracks?: TextTrackInit[]; } interface PlyrKeyboardConfig { /** * Enable keyboard shortcuts when the player is focused. * * @defaultValue true */ focused: boolean; /** * Enable keyboard shortcuts globally. * * @defaultValue false */ global: boolean; } interface PlyrStorageConfig { /** * Allow use of local storage to store user settings. * * @defaultValue true */ enabled: boolean; /** * The storage key prefix to use. * * @defaultValue 'plyr' */ key: string; } interface PlyrI18nConfig extends Partial {} interface PlyrProps extends Pick { /** * Returns a boolean indicating if the current player is HTML5. */ readonly isHTML5: boolean; /** * Returns a boolean indicating if the current player is an embedded player. */ readonly isEmbed: boolean; /** * Returns a float between 0 and 1 indicating how much of the media is buffered */ readonly buffered: number; /** * Returns a boolean indicating if the current player is stopped. */ readonly stopped: boolean; /** * Returns a boolean indicating if the current media has an audio track. */ readonly hasAudio: boolean; /** * Fullscreen state and methods. */ readonly fullscreen: PlyrFullscreenAdapter; /** * Gets or sets the speed for the player. Generally the minimum should be 0.5. */ speed: number; /** * Gets or sets the caption track by index. -1 means the track is missing or captions is not * active. */ currentTrack: number; /** * Gets or sets the picture-in-picture state of the player. */ pip: boolean; /** * Gets or sets the quality for the player based on height. Setting to -1 will use auto quality. */ quality: number | null; /** * Gets or sets the current source for the player. */ source: PlyrSource | null; /** * Gets or sets the video aspect ratio. */ ratio: string | null; /** * Gets or sets the URL for the download button. */ download: FileDownloadInfo; } interface PlyrSource { title?: string; type?: MediaViewType; sources: PlayerSrc; poster?: string; thumbnails?: string; tracks?: TextTrackInit[]; } declare class PlyrFullscreenAdapter { #private; constructor(plyr: Plyr); /** * Returns a boolean indicating if the current player has fullscreen enabled. */ get enabled(): boolean; /** * Returns a boolean indicating if the current player is in fullscreen mode. */ get active(): boolean; /** * Request to enter fullscreen. */ enter(): Promise; /** * Request to exit fullscreen. */ exit(): Promise; /** * Request to toggle fullscreen. */ toggle(): Promise; } interface PlyrMethods extends Pick { /** * Toggle playback, if no parameters are passed, it will toggle based on current status. */ togglePlay(toggle?: boolean): Promise; /** * Stop playback and reset to start. */ stop(): void; /** * Restart playback. */ restart(): void; /** * Rewind playback by the specified seek time. If no parameter is passed, the default seek time * will be used. */ rewind(seekTime?: number): void; /** * Fast forward by the specified seek time. If no parameter is passed, the default seek time * will be used. */ forward(seekTime?: number): void; /** * Increase volume by the specified step. If no parameter is passed, the default step will be used. */ increaseVolume(step?: number): void; /** * Reduce volume by the specified step. If no parameter is passed, the default step will be used. */ decreaseVolume(step?: number): void; /** * Toggle captions display. If no parameter is passed, it will toggle based on current status. */ toggleCaptions(toggle?: boolean): void; /** * Trigger the airplay dialog on supported devices. */ airplay(): void; /** * Toggle the controls (video only). Takes optional truthy value to force it on/off. */ toggleControls(toggle?: boolean): void; /** * Add an event listener for the specified event. */ on(type: T, callback: (event: PlyrEvents[T]) => void): void; /** * Add an event listener for the specified event once. */ once(type: T, callback: (event: PlyrEvents[T]) => void): void; /** * Remove an event listener for the specified event. */ off(type: T, callback: (event: PlyrEvents[T]) => void): void; /** * Check support for a mime type. */ supports(type: string): boolean; } interface PlyrEvents extends Pick { captionsdisabled: MediaTextTrackChangeEvent; captionsenabled: MediaTextTrackChangeEvent; controlshidden: MediaControlsChangeEvent; controlsshown: MediaControlsChangeEvent; enterfullscreen: MediaFullscreenChangeEvent; exitfullscreen: MediaFullscreenChangeEvent; languagechange: Event; ratechange: MediaRateChangeEvent; ready: MediaCanPlayEvent; timeupdate: MediaTimeUpdateEvent; volumechange: MediaVolumeChangeEvent; } //#endregion export { Plyr, PlyrConfig, PlyrEvents, PlyrFullscreenAdapter, PlyrI18nConfig, PlyrKeyboardConfig, PlyrMethods, PlyrProps, PlyrSource, PlyrStorageConfig, PlyrTarget };