/* Vime custom elements bundle */

import type { Components, JSX } from "../types/components";

interface VmAudio extends Components.VmAudio, HTMLElement {}
export const VmAudio: {
  prototype: VmAudio;
  new (): VmAudio;
};

interface VmCaptionControl extends Components.VmCaptionControl, HTMLElement {}
export const VmCaptionControl: {
  prototype: VmCaptionControl;
  new (): VmCaptionControl;
};

interface VmCaptions extends Components.VmCaptions, HTMLElement {}
export const VmCaptions: {
  prototype: VmCaptions;
  new (): VmCaptions;
};

interface VmClickToPlay extends Components.VmClickToPlay, HTMLElement {}
export const VmClickToPlay: {
  prototype: VmClickToPlay;
  new (): VmClickToPlay;
};

interface VmControl extends Components.VmControl, HTMLElement {}
export const VmControl: {
  prototype: VmControl;
  new (): VmControl;
};

interface VmControlGroup extends Components.VmControlGroup, HTMLElement {}
export const VmControlGroup: {
  prototype: VmControlGroup;
  new (): VmControlGroup;
};

interface VmControlSpacer extends Components.VmControlSpacer, HTMLElement {}
export const VmControlSpacer: {
  prototype: VmControlSpacer;
  new (): VmControlSpacer;
};

interface VmControls extends Components.VmControls, HTMLElement {}
export const VmControls: {
  prototype: VmControls;
  new (): VmControls;
};

interface VmCurrentTime extends Components.VmCurrentTime, HTMLElement {}
export const VmCurrentTime: {
  prototype: VmCurrentTime;
  new (): VmCurrentTime;
};

interface VmDailymotion extends Components.VmDailymotion, HTMLElement {}
export const VmDailymotion: {
  prototype: VmDailymotion;
  new (): VmDailymotion;
};

interface VmDash extends Components.VmDash, HTMLElement {}
export const VmDash: {
  prototype: VmDash;
  new (): VmDash;
};

interface VmDblClickFullscreen extends Components.VmDblClickFullscreen, HTMLElement {}
export const VmDblClickFullscreen: {
  prototype: VmDblClickFullscreen;
  new (): VmDblClickFullscreen;
};

interface VmDefaultControls extends Components.VmDefaultControls, HTMLElement {}
export const VmDefaultControls: {
  prototype: VmDefaultControls;
  new (): VmDefaultControls;
};

interface VmDefaultSettings extends Components.VmDefaultSettings, HTMLElement {}
export const VmDefaultSettings: {
  prototype: VmDefaultSettings;
  new (): VmDefaultSettings;
};

interface VmDefaultUi extends Components.VmDefaultUi, HTMLElement {}
export const VmDefaultUi: {
  prototype: VmDefaultUi;
  new (): VmDefaultUi;
};

interface VmEmbed extends Components.VmEmbed, HTMLElement {}
export const VmEmbed: {
  prototype: VmEmbed;
  new (): VmEmbed;
};

interface VmEndTime extends Components.VmEndTime, HTMLElement {}
export const VmEndTime: {
  prototype: VmEndTime;
  new (): VmEndTime;
};

interface VmFile extends Components.VmFile, HTMLElement {}
export const VmFile: {
  prototype: VmFile;
  new (): VmFile;
};

interface VmFullscreenControl extends Components.VmFullscreenControl, HTMLElement {}
export const VmFullscreenControl: {
  prototype: VmFullscreenControl;
  new (): VmFullscreenControl;
};

interface VmHls extends Components.VmHls, HTMLElement {}
export const VmHls: {
  prototype: VmHls;
  new (): VmHls;
};

interface VmIcon extends Components.VmIcon, HTMLElement {}
export const VmIcon: {
  prototype: VmIcon;
  new (): VmIcon;
};

interface VmIconLibrary extends Components.VmIconLibrary, HTMLElement {}
export const VmIconLibrary: {
  prototype: VmIconLibrary;
  new (): VmIconLibrary;
};

interface VmLiveIndicator extends Components.VmLiveIndicator, HTMLElement {}
export const VmLiveIndicator: {
  prototype: VmLiveIndicator;
  new (): VmLiveIndicator;
};

interface VmLoadingScreen extends Components.VmLoadingScreen, HTMLElement {}
export const VmLoadingScreen: {
  prototype: VmLoadingScreen;
  new (): VmLoadingScreen;
};

interface VmMenu extends Components.VmMenu, HTMLElement {}
export const VmMenu: {
  prototype: VmMenu;
  new (): VmMenu;
};

interface VmMenuItem extends Components.VmMenuItem, HTMLElement {}
export const VmMenuItem: {
  prototype: VmMenuItem;
  new (): VmMenuItem;
};

interface VmMenuRadio extends Components.VmMenuRadio, HTMLElement {}
export const VmMenuRadio: {
  prototype: VmMenuRadio;
  new (): VmMenuRadio;
};

interface VmMenuRadioGroup extends Components.VmMenuRadioGroup, HTMLElement {}
export const VmMenuRadioGroup: {
  prototype: VmMenuRadioGroup;
  new (): VmMenuRadioGroup;
};

interface VmMuteControl extends Components.VmMuteControl, HTMLElement {}
export const VmMuteControl: {
  prototype: VmMuteControl;
  new (): VmMuteControl;
};

interface VmPipControl extends Components.VmPipControl, HTMLElement {}
export const VmPipControl: {
  prototype: VmPipControl;
  new (): VmPipControl;
};

interface VmPlaybackControl extends Components.VmPlaybackControl, HTMLElement {}
export const VmPlaybackControl: {
  prototype: VmPlaybackControl;
  new (): VmPlaybackControl;
};

interface VmPlayer extends Components.VmPlayer, HTMLElement {}
export const VmPlayer: {
  prototype: VmPlayer;
  new (): VmPlayer;
};

interface VmPoster extends Components.VmPoster, HTMLElement {}
export const VmPoster: {
  prototype: VmPoster;
  new (): VmPoster;
};

interface VmScrim extends Components.VmScrim, HTMLElement {}
export const VmScrim: {
  prototype: VmScrim;
  new (): VmScrim;
};

interface VmScrubberControl extends Components.VmScrubberControl, HTMLElement {}
export const VmScrubberControl: {
  prototype: VmScrubberControl;
  new (): VmScrubberControl;
};

interface VmSettings extends Components.VmSettings, HTMLElement {}
export const VmSettings: {
  prototype: VmSettings;
  new (): VmSettings;
};

interface VmSettingsControl extends Components.VmSettingsControl, HTMLElement {}
export const VmSettingsControl: {
  prototype: VmSettingsControl;
  new (): VmSettingsControl;
};

interface VmSkeleton extends Components.VmSkeleton, HTMLElement {}
export const VmSkeleton: {
  prototype: VmSkeleton;
  new (): VmSkeleton;
};

interface VmSlider extends Components.VmSlider, HTMLElement {}
export const VmSlider: {
  prototype: VmSlider;
  new (): VmSlider;
};

interface VmSpinner extends Components.VmSpinner, HTMLElement {}
export const VmSpinner: {
  prototype: VmSpinner;
  new (): VmSpinner;
};

interface VmSubmenu extends Components.VmSubmenu, HTMLElement {}
export const VmSubmenu: {
  prototype: VmSubmenu;
  new (): VmSubmenu;
};

interface VmTime extends Components.VmTime, HTMLElement {}
export const VmTime: {
  prototype: VmTime;
  new (): VmTime;
};

interface VmTimeProgress extends Components.VmTimeProgress, HTMLElement {}
export const VmTimeProgress: {
  prototype: VmTimeProgress;
  new (): VmTimeProgress;
};

interface VmTooltip extends Components.VmTooltip, HTMLElement {}
export const VmTooltip: {
  prototype: VmTooltip;
  new (): VmTooltip;
};

interface VmUi extends Components.VmUi, HTMLElement {}
export const VmUi: {
  prototype: VmUi;
  new (): VmUi;
};

interface VmVideo extends Components.VmVideo, HTMLElement {}
export const VmVideo: {
  prototype: VmVideo;
  new (): VmVideo;
};

interface VmVimeo extends Components.VmVimeo, HTMLElement {}
export const VmVimeo: {
  prototype: VmVimeo;
  new (): VmVimeo;
};

interface VmVolumeControl extends Components.VmVolumeControl, HTMLElement {}
export const VmVolumeControl: {
  prototype: VmVolumeControl;
  new (): VmVolumeControl;
};

interface VmYoutube extends Components.VmYoutube, HTMLElement {}
export const VmYoutube: {
  prototype: VmYoutube;
  new (): VmYoutube;
};

/**
 * Utility to define all custom elements within this package using the tag name provided in the component's source. 
 * When defining each custom element, it will also check it's safe to define by:
 *
 * 1. Ensuring the "customElements" registry is available in the global context (window).
 * 2. The component tag name is not already defined.
 *
 * Use the standard [customElements.define()](https://developer.mozilla.org/en-US/docs/Web/API/CustomElementRegistry/define) 
 * method instead to define custom elements individually, or to provide a different tag name.
 */
export declare const defineCustomElements: (opts?: any) => void;

/**
 * Used to manually set the base path where assets can be found.
 * If the script is used as "module", it's recommended to use "import.meta.url",
 * such as "setAssetPath(import.meta.url)". Other options include
 * "setAssetPath(document.currentScript.src)", or using a bundler's replace plugin to
 * dynamically set the path at build time, such as "setAssetPath(process.env.ASSET_PATH)".
 * But do note that this configuration depends on how your script is bundled, or lack of
 * bunding, and where your assets can be loaded from. Additionally custom bundling
 * will have to ensure the static assets are copied to its build directory.
 */
export declare const setAssetPath: (path: string) => void;

export interface SetPlatformOptions {
  raf?: (c: FrameRequestCallback) => number;
  ael?: (el: EventTarget, eventName: string, listener: EventListenerOrEventListenerObject, options: boolean | AddEventListenerOptions) => void;
  rel?: (el: EventTarget, eventName: string, listener: EventListenerOrEventListenerObject, options: boolean | AddEventListenerOptions) => void;
  ce?: (eventName: string, opts?: any) => CustomEvent;
}
export declare const setPlatformOptions: (opts: SetPlatformOptions) => void;

export type { Components, JSX };

export * from '../types';
