fix(build): [ENG-12] exclude declaration sources from library artifacts

This commit is contained in:
Harvey Zhao committed 2026-09-13 13:37:00 +08:00
1 parent 38355ae4cf
commit 4a299eb2d4
50 files changed
+242 -2157

No files matched your search

-29
View File
@@ -1,29 +0,0 @@
import type * as Definition from './artplayer.js'
declare const Artplayer: typeof Definition.default
// eslint-disable-next-line ts/no-redeclare -- CJS constructor value and instance type share the export.
type Artplayer = Definition.default
// eslint-disable-next-line ts/no-redeclare, ts/no-namespace -- Namespace merging carries named types on the existing CJS export.
declare namespace Artplayer {
type Config = Definition.Config
type Emitter<Events extends { [Name in keyof Events]: readonly unknown[] } = Record<PropertyKey, unknown[]>> = Definition.Emitter<Events>
type Events = Definition.Events
type I18n = Definition.I18n
type Icons = Definition.Icons
type Option = Definition.Option
type OptionInput = Definition.OptionInput
type Player = Definition.Player
type PlaybackControls = Definition.PlaybackControls
type PluginFactory<Host = Artplayer, Result = unknown> = Definition.PluginFactory<Host, Result>
type Plugins = Definition.Plugins
type Setting = Definition.Setting
type SettingOption = Definition.SettingOption
type Subtitle = Definition.Subtitle
type SubtitleUpdateEvents = Definition.SubtitleUpdateEvents
type Template = Definition.Template
type Utils = Definition.Utils
}
// eslint-disable-next-line no-restricted-syntax -- Preserve the real CommonJS constructor export.
export = Artplayer
-2
View File
@@ -1,2 +0,0 @@
export { default } from './artplayer.cjs'
export type { Config, Emitter, Events, I18n, Icons, Option, OptionInput, PlaybackControls, Player, PluginFactory, Plugins, Setting, SettingOption, Subtitle, SubtitleUpdateEvents, Template, Utils } from './artplayer.js'
-216
View File
@@ -1,216 +0,0 @@
import type { Component } from './component'
import type { Config } from './config'
import type { Emitter } from './emitter'
import type { Events, SubtitleUpdateEvents } from './events'
import type { I18n } from './i18n'
import type { Icons } from './icons'
import type { Option, OptionInput } from './option'
import type { PlaybackControls } from './playback'
import type { Player } from './player'
import type { PluginFactory, Plugins } from './plugin'
import type { Setting, SettingOption } from './setting'
import type { Subtitle } from './subtitle'
import type { Template } from './template'
import type { Utils } from './utils'
export type {
Config,
Emitter,
Events,
I18n,
Icons,
Option,
OptionInput,
PlaybackControls,
Player,
PluginFactory,
Plugins,
Setting,
SettingOption,
Subtitle,
SubtitleUpdateEvents,
Template,
Utils,
}
declare class Artplayer extends Player {
constructor(option: Option, readyCallback?: (this: Artplayer, art: Artplayer) => unknown)
constructor(option: OptionInput, readyCallback?: (this: Artplayer, art: Artplayer) => unknown)
static readonly instances: Artplayer[]
static readonly version: string
static readonly env: 'development' | 'production'
static readonly build: string
static readonly config: Config
static readonly utils: Utils
static readonly scheme: Record<keyof Option, unknown>
static readonly Emitter: new <Events extends { [Name in keyof Events]: readonly unknown[] } = Record<PropertyKey, unknown[]>>(...args: unknown[]) => Emitter<Events>
static readonly validator: <T extends object>(option: T, scheme: object) => T
static readonly kindOf: (item: unknown) => string
static readonly html: Artplayer['template']['html']
static readonly option: Option
static STYLE: string
static DEBUG: boolean
static CONTEXTMENU: boolean
static NOTICE_TIME: number
static SETTING_WIDTH: number
static SETTING_ITEM_WIDTH: number
static SETTING_ITEM_HEIGHT: number
static RESIZE_TIME: number
static SCROLL_TIME: number
static SCROLL_GAP: number
static AUTO_PLAYBACK_MAX: number
static AUTO_PLAYBACK_MIN: number
static AUTO_PLAYBACK_TIMEOUT: number
static RECONNECT_TIME_MAX: number
static RECONNECT_SLEEP_TIME: number
static CONTROL_HIDE_TIME: number
static DBCLICK_TIME: number
static DBCLICK_FULLSCREEN: boolean
static MOBILE_DBCLICK_PLAY: boolean
static MOBILE_CLICK_PLAY: boolean
static AUTO_ORIENTATION_TIME: number
static INFO_LOOP_TIME: number
static FAST_FORWARD_VALUE: number
static FAST_FORWARD_TIME: number
static TOUCH_MOVE_RATIO: number
static VOLUME_STEP: number
static SEEK_STEP: number
static PLAYBACK_RATE: number[]
static ASPECT_RATIO: string[]
static FLIP: string[]
static FULLSCREEN_WEB_IN_BODY: boolean
static LOG_VERSION: boolean
static USE_RAF: boolean
static REMOVE_SRC_WHEN_DESTROY: boolean
readonly id: number
readonly option: Option
readonly isLock: boolean
readonly isReady: boolean
readonly isFocus: boolean
readonly isInput: boolean
readonly isRotate: boolean
readonly isDestroy: boolean
flv?: unknown
m3u8?: unknown
hls?: unknown
ts?: unknown
mpd?: unknown
torrent?: unknown
on<T extends keyof Events>(name: T, fn: (...args: Events[T]) => unknown, ctx?: object): this
on<T extends keyof SubtitleUpdateEvents>(name: T, fn: (...args: SubtitleUpdateEvents[T]) => unknown, ctx?: object): this
on(name: string, fn: (...args: unknown[]) => unknown, ctx?: object): this
once<T extends keyof Events>(name: T, fn: (...args: Events[T]) => unknown, ctx?: object): this
once<T extends keyof SubtitleUpdateEvents>(name: T, fn: (...args: SubtitleUpdateEvents[T]) => unknown, ctx?: object): this
once(name: string, fn: (...args: unknown[]) => unknown, ctx?: object): this
emit<T extends keyof Events>(name: T, ...args: Events[T]): this
emit<T extends keyof SubtitleUpdateEvents>(name: T, ...args: SubtitleUpdateEvents[T]): this
emit(name: string, ...args: unknown[]): this
off<T extends keyof Events>(name: T, callback?: (...args: Events[T]) => unknown): this
off<T extends keyof SubtitleUpdateEvents>(name: T, callback?: (...args: SubtitleUpdateEvents[T]) => unknown): this
off(name: string, callback?: (...args: unknown[]) => unknown): this
query: Artplayer['template']['query']
proxy: Artplayer['events']['proxy']
video: Artplayer['template']['$video']
e: { [K in keyof Events]?: { fn: (...args: Events[K]) => unknown, ctx: unknown }[] }
destroy(removeHtml?: boolean): void
reset(): void
readonly template: {
get html(): string
query: <T extends Element = Element>(selector: string) => T | null
} & Template
readonly events: {
proxy: {
(target: EventTarget, eventName: string, handler: (event: Event) => void, options?: boolean | AddEventListenerOptions): () => void
(target: EventTarget, eventName: string[], handler: (event: Event) => void, options?: boolean | AddEventListenerOptions): Array<() => void>
}
hover: (element: HTMLElement, mouseenter?: (event: Event) => any, mouseleave?: (event: Event) => any) => void
remove: (destroyEvent: () => void) => void
destroy: () => void
bindGlobalEvents: (source?: { window?: Window, document?: Document }) => void
}
readonly storage: {
name: string
settings: Record<string, unknown>
get: {
(key: string): unknown
(): Record<string, unknown>
}
set: (key: string, value: unknown) => void
del: (key: string) => void
clear: () => void
}
readonly icons: Icons
readonly i18n: {
languages: I18n
language: Partial<Record<string, string>>
init: () => void
get: (key: string) => string
update: (language: Partial<I18n>) => void
}
readonly notice: {
timer: number | null
get show(): string | Error | false | ''
set show(msg: string | Error | false | '')
destroy: () => void
}
readonly layers: Record<string, HTMLElement | undefined> & Component
readonly controls: Record<string, HTMLElement | undefined> & Component
readonly contextmenu: Record<string, HTMLElement | undefined> & Component
readonly subtitle: {
get url(): string
set url(url: string)
get textTrack(): TextTrack | undefined
get activeCues(): VTTCue[]
get cues(): VTTCue[]
style: (name: string | Partial<CSSStyleDeclaration>, value?: string) => void
switch: (url: string, option?: Subtitle) => Promise<string>
init: (subtitle: Subtitle) => Promise<string | null | undefined>
} & Component
readonly info: Component
readonly loading: Component
readonly hotkey: {
keys: Record<string, ((event: KeyboardEvent) => any)[]>
add: (key: string, callback: (this: Artplayer, event: KeyboardEvent) => any) => Artplayer['hotkey']
remove: (key: string, callback: (event: KeyboardEvent) => any) => Artplayer['hotkey']
}
readonly mask: Component
readonly setting: {
option: SettingOption[]
updateStyle: (width?: number) => void
/** Legacy return signature; a missing runtime entry is null. */
find: (name: string) => SettingOption | undefined
/** Legacy return signature; runtime returns the formatted input item. */
add: (setting: Setting) => Artplayer['setting']
/** Legacy return signature; runtime returns the updated or added item. */
update: (settings: Setting) => Artplayer['setting']
/** Legacy return signature; runtime returns undefined. */
remove: (name: string) => Artplayer['setting']
} & Component
readonly plugins: Plugins
}
export default Artplayer
-143
View File
@@ -1,143 +0,0 @@
import type Artplayer from './artplayer'
/** Input accepted by the existing HTML renderer, including numeric content. */
export interface ComponentInput extends Omit<ComponentOption, 'html'> {
html?: string | HTMLElement | number
}
export interface Selector {
/**
* Whether the default is selected
*/
default?: boolean
/**
* Html string of selector
*/
html: string | HTMLElement
/**
* Value of selector item
*/
value?: string | number
/**
* Allow custom properties
*/
[key: string]: any
}
export interface Component {
/**
* Component self-increasing id
*/
readonly id: number
/**
* Component parent name
*/
readonly name: string | undefined
/**
* Component parent element
*/
readonly $parent: HTMLElement | undefined
/**
* Whether to show component parent
*/
get show(): boolean
/**
* Whether to show component parent
*/
set show(state: boolean)
/**
* Toggle the component parent
*/
toggle: () => void
/**
* Dynamic add a component
*/
add: {
(option: ComponentOption | ((art: Artplayer) => ComponentOption)): HTMLElement | undefined
(option: ComponentInput | ((art: Artplayer) => ComponentInput)): HTMLElement | undefined
}
/**
* Dynamic remove a component by name
*/
remove: (name: string) => void
/**
* Dynamic update a component
*/
update: {
(option: ComponentOption): HTMLElement | undefined
(option: ComponentInput): HTMLElement | undefined
}
}
export interface ComponentOption {
/**
* Html string or html element of component
*/
html?: string | HTMLElement
/**
* Whether to disable component
*/
disable?: boolean
/**
* Unique name for component
*/
name?: string
/**
* Component sort index
*/
index?: number
/**
* Component style object
*/
style?: Partial<CSSStyleDeclaration>
/**
* Component click event
*/
click?: (this: Artplayer, component: Component, event: Event) => void
/**
* When the component was mounted
*/
mounted?: (this: Artplayer, element: HTMLElement) => void
/**
* When the component was before unmount
*/
beforeUnmount?: (this: Artplayer, element: HTMLElement) => void
/**
* Component tooltip, use in controls
*/
tooltip?: string
/**
* Component position, use in controls
*/
position?: 'top' | 'left' | 'right' | (string & Record<never, never>)
/**
* Custom selector list, use in controls
*/
selector?: Selector[]
/**
* When selector item click, use in controls
*/
onSelect?: (this: Artplayer, selector: Selector, element: HTMLElement, event: Event) => void
}
-81
View File
@@ -1,81 +0,0 @@
export interface Config {
readonly properties: readonly [
'audioTracks',
'autoplay',
'buffered',
'controller',
'controls',
'crossOrigin',
'currentSrc',
'currentTime',
'defaultMuted',
'defaultPlaybackRate',
'duration',
'ended',
'error',
'loop',
'mediaGroup',
'muted',
'networkState',
'paused',
'playbackRate',
'played',
'preload',
'readyState',
'seekable',
'seeking',
'src',
'startDate',
'textTracks',
'videoTracks',
'volume',
]
readonly methods: readonly ['addTextTrack', 'canPlayType', 'load', 'play', 'pause']
readonly events: readonly [
'abort',
'canplay',
'canplaythrough',
'durationchange',
'emptied',
'ended',
'error',
'loadeddata',
'loadedmetadata',
'loadstart',
'pause',
'play',
'playing',
'progress',
'ratechange',
'seeked',
'seeking',
'stalled',
'suspend',
'timeupdate',
'volumechange',
'waiting',
]
readonly prototypes: readonly [
'width',
'height',
'videoWidth',
'videoHeight',
'poster',
'webkitDecodedFrameCount',
'webkitDroppedFrameCount',
'playsInline',
'webkitSupportsFullscreen',
'webkitDisplayingFullscreen',
'onenterpictureinpicture',
'onleavepictureinpicture',
'disablePictureInPicture',
'cancelVideoFrameCallback',
'requestVideoFrameCallback',
'getVideoPlaybackQuality',
'requestPictureInPicture',
'webkitEnterFullScreen',
'webkitEnterFullscreen',
'webkitExitFullScreen',
'webkitExitFullscreen',
]
}
-45
View File
@@ -1,45 +0,0 @@
export interface CssVar {
'--art-theme': string
'--art-font-color': string
'--art-background-color': string
'--art-text-shadow-color': string
'--art-transition-duration': string
'--art-padding': string
'--art-border-radius': string
'--art-progress-height': string
'--art-progress-color': string
'--art-progress-top-gap': string
'--art-hover-color': string
'--art-loaded-color': string
'--art-state-size': string
'--art-state-opacity': number
'--art-bottom-height': string
'--art-bottom-offset': string
'--art-bottom-gap': string
'--art-highlight-width': string
'--art-highlight-color': string
'--art-control-height': string
'--art-control-opacity': number
'--art-control-icon-size': string
'--art-control-icon-scale': number
'--art-volume-height': string
'--art-volume-handle-size': string
'--art-lock-size': string
'--art-indicator-scale': number
'--art-indicator-size': string
'--art-fullscreen-web-index': 9999
'--art-settings-icon-size': string
'--art-settings-max-height': string
'--art-selector-max-height': string
'--art-contextmenus-min-width': string
'--art-subtitle-font-size': string
'--art-subtitle-gap': string
'--art-subtitle-bottom': string
'--art-subtitle-border': string
'--art-widget-background': string
'--art-tip-background': string
'--art-scrollbar-size': string
'--art-scrollbar-background': string
'--art-scrollbar-background-hover': string
'--art-mini-progress-height': string
}
-8
View File
@@ -1,8 +0,0 @@
/** The event bus exposed by Artplayer.Emitter; no new runtime export. */
export interface Emitter<Events extends { [Name in keyof Events]: readonly unknown[] } = Record<PropertyKey, unknown[]>> {
e?: { [Name in keyof Events]?: { fn: (...args: [...Events[Name]]) => unknown, ctx: unknown }[] }
on: <Name extends keyof Events, Context>(name: Name, fn: (this: Context, ...args: [...Events[Name]]) => unknown, ctx?: Context) => this
once: <Name extends keyof Events, Context>(name: Name, fn: (this: Context, ...args: [...Events[Name]]) => unknown, ctx?: Context) => this
emit: <Name extends keyof Events>(name: Name, ...args: [...Events[Name]]) => this
off: <Name extends keyof Events>(name: Name, fn?: (...args: [...Events[Name]]) => unknown) => this
}
-106
View File
@@ -1,106 +0,0 @@
import type { AspectRatio, Flip } from './player'
import type { Subtitle } from './subtitle'
export type Bar = 'loaded' | 'played' | 'hover'
/** Actual built-in subtitle update payloads; legacy Events keeps its scalar types. */
export interface SubtitleUpdateEvents {
subtitleBeforeUpdate: [cues: VTTCue[]]
subtitleAfterUpdate: [cues: VTTCue[]]
}
export interface Events {
'document:click': [event: Event]
'document:mouseup': [event: Event]
'document:keydown': [event: Event]
'document:touchend': [event: Event]
'document:touchcancel': [event: Event]
'document:touchmove': [event: Event]
'document:mousemove': [event: Event]
'document:pointerup': [event: Event]
'document:contextmenu': [event: Event]
'document:pointermove': [event: Event]
'document:visibilitychange': [event: Event]
'document:webkitfullscreenchange': [event: Event]
'window:resize': [event: Event]
'window:scroll': [event: Event]
'window:orientationchange': [event: Event]
'video:abort': [event: Event]
'video:canplay': [event: Event]
'video:canplaythrough': [event: Event]
'video:complete': [event: Event]
'video:durationchange': [event: Event]
'video:emptied': [event: Event]
'video:encrypted': [event: Event]
'video:ended': [event: Event]
'video:error': [error: Error]
'video:loadeddata': [event: Event]
'video:loadedmetadata': [event: Event]
'video:loadstart': [event: Event]
'video:pause': [event: Event]
'video:play': [event: Event]
'video:playing': [event: Event]
'video:progress': [event: Event]
'video:ratechange': [event: Event]
'video:seeked': [event: Event]
'video:seeking': [event: Event]
'video:stalled': [event: Event]
'video:suspend': [event: Event]
'video:timeupdate': [event: Event]
'video:volumechange': [event: Event]
'video:waiting': [event: Event]
'info': [state: boolean]
'layer': [state: boolean]
'loading': [state: boolean]
'mask': [state: boolean]
'subtitle': [state: boolean]
'contextmenu': [state: boolean]
'control': [state: boolean]
'setting': [state: boolean]
'hotkey': [event: KeyboardEvent]
'destroy': []
'subtitleOffset': [offset: number]
/** Legacy contextual type; annotate listeners with VTTCue[] for the runtime payload. */
'subtitleBeforeUpdate': [cue: VTTCue]
/** Legacy contextual type; annotate listeners with VTTCue[] for the runtime payload. */
'subtitleAfterUpdate': [cue: VTTCue]
'subtitleLoad': [cues: VTTCue[], option: Subtitle]
'focus': [event: Event]
'blur': [event: Event]
'dblclick': [event: Event]
'click': [event: Event]
'hover': [state: boolean, event: Event]
'mousemove': [event: Event]
'resize': []
'view': [state: boolean]
'lock': [state: boolean]
'aspectRatio': [aspectRatio: AspectRatio]
'autoHeight': [height: number]
'autoSize': [size: { width: number, height: number }]
'ready': []
'airplay': []
'raf': []
'error': [error: Error, reconnectTime: number]
'flip': [flip: Flip]
'fullscreen': [state: boolean]
'fullscreenError': [event: Event]
'fullscreenWeb': [state: boolean]
'mini': [state: boolean]
'pause': []
'pip': [state: boolean]
'play': []
'screenshot': [dataUri: string]
'seek': [currentTime: number, time: number]
'restart': [url: string]
'muted': [state: boolean]
'setBar': [type: Bar, percentage: number, event?: Event | undefined]
'keydown': [event: KeyboardEvent]
}
-61
View File
@@ -1,61 +0,0 @@
type I18nKeys
= | 'en'
| 'zh-cn'
| 'zh-tw'
| 'pl'
| 'cs'
| 'es'
| 'fa'
| 'fr'
| 'id'
| 'ru'
| 'tr'
| 'ar'
| 'vi'
| (string & Record<never, never>)
interface I18nValue {
'Context Menu'?: string
'Lock'?: string
'Video Info': string
'Close': string
'Video Load Failed': string
'Volume': string
'Progress'?: string
'Back'?: string
'Settings'?: string
'Play': string
'Pause': string
'Rate': string
'Mute': string
'Video Flip': string
'Horizontal': string
'Vertical': string
'Reconnect': string
'Show Setting': string
'Hide Setting': string
'Screenshot': string
'Play Speed': string
'Aspect Ratio': string
'Default': string
'Normal': string
'Open': string
'Switch Video': string
'Switch Subtitle': string
'Fullscreen': string
'Exit Fullscreen': string
'Web Fullscreen': string
'Exit Web Fullscreen': string
'Mini Player': string
'PIP Mode': string
'Exit PIP Mode': string
'PIP Not Supported': string
'Fullscreen Not Supported': string
'Subtitle Offset': string
'Last Seen': string
'Jump Play': string
'AirPlay': string
'AirPlay Not Available': string
}
export type I18n = Partial<Record<I18nKeys, Partial<I18nValue>>>
-30
View File
@@ -1,30 +0,0 @@
export interface Icons {
readonly loading: HTMLDivElement
readonly state: HTMLDivElement
readonly play: HTMLDivElement
readonly pause: HTMLDivElement
readonly check: HTMLDivElement
readonly volume: HTMLDivElement
readonly volumeClose: HTMLDivElement
readonly screenshot: HTMLDivElement
readonly setting: HTMLDivElement
readonly pip: HTMLDivElement
readonly arrowLeft: HTMLDivElement
readonly arrowRight: HTMLDivElement
readonly playbackRate: HTMLDivElement
readonly aspectRatio: HTMLDivElement
readonly config: HTMLDivElement
readonly lock: HTMLDivElement
readonly flip: HTMLDivElement
readonly unlock: HTMLDivElement
readonly fullscreenOff: HTMLDivElement
readonly fullscreenOn: HTMLDivElement
readonly fullscreenWebOff: HTMLDivElement
readonly fullscreenWebOn: HTMLDivElement
readonly switchOn: HTMLDivElement
readonly switchOff: HTMLDivElement
readonly error: HTMLDivElement
readonly close: HTMLDivElement
readonly airplay: HTMLDivElement
readonly [key: string]: HTMLDivElement
}
-5
View File
@@ -1,5 +0,0 @@
import type { I18n } from './i18n.js'
declare const language: NonNullable<I18n['en']>
// eslint-disable-next-line no-restricted-syntax -- Preserve the language object's CommonJS value export.
export = language
-1
View File
@@ -1 +0,0 @@
export { default } from './language.cjs'
-4
View File
@@ -1,4 +0,0 @@
import type { I18n } from '../i18n'
declare const language: NonNullable<I18n['en']>
export default language
-331
View File
@@ -1,331 +0,0 @@
import type Artplayer from './artplayer'
import type { ComponentInput, ComponentOption } from './component'
import type { CssVar } from './cssVar'
import type { I18n } from './i18n'
import type { Icons } from './icons'
import type { PluginFactory } from './plugin'
import type { Quality } from './quality'
import type { Setting } from './setting'
import type { Subtitle } from './subtitle'
export type CustomType
= | 'flv'
| 'm3u8'
| 'hls'
| 'ts'
| 'mpd'
| 'torrent'
| (string & Record<never, never>)
export interface Thumbnails {
/**
* The thumbnail image url
*/
url: string
/**
* The thumbnail item number
*/
number?: number
/**
* The thumbnail column size
*/
column?: number
/**
* The thumbnail width
*/
width?: number
/**
* The thumbnail height
*/
height?: number
/**
* The thumbnail scale
*/
scale?: number
}
/** Constructor input; Option retains its historical required URL/read types. */
export interface OptionInput extends Omit<Option, 'url' | 'controls' | 'layers' | 'contextmenu'> {
url?: string
controls?: ComponentInput[]
layers?: ComponentInput[]
contextmenu?: ComponentInput[]
}
export interface Option {
/**
* The player id
*/
id?: string
/**
* The container mounted by the player
*/
container: string | HTMLDivElement
/**
* Video url
*/
url: string
/**
* Video poster image url
*/
poster?: string
/**
* Video url type
*/
type?: CustomType
/**
* Player color theme
*/
theme?: string
/**
* Player language
*/
lang?: keyof I18n
/**
* Player default volume
*/
volume?: number
/**
* Whether live broadcast mode
*/
isLive?: boolean
/**
* Whether video muted
*/
muted?: boolean
/**
* Whether video auto play
*/
autoplay?: boolean
/**
* Whether player auto resize
*/
autoSize?: boolean
/**
* Whether player auto run mini mode
*/
autoMini?: boolean
/**
* Whether video auto loop
*/
loop?: boolean
/**
* Whether show video flip button
*/
flip?: boolean
/**
* Whether show video playback rate button
*/
playbackRate?: boolean
/**
* Whether show video aspect ratio button
*/
aspectRatio?: boolean
/**
* Whether show video screenshot button
*/
screenshot?: boolean
/**
* Whether show video setting button
*/
setting?: boolean
/**
* Whether to enable player hotkey
*/
hotkey?: boolean
/**
* Whether show video pip button
*/
pip?: boolean
/**
* Do you want to run only one player at a time
*/
mutex?: boolean
/**
* Whether use backdrop in UI
*/
backdrop?: boolean
/**
* Whether show video window fullscreen button
*/
fullscreen?: boolean
/**
* Whether show video web fullscreen button
*/
fullscreenWeb?: boolean
/**
* Whether to enable player subtitle offset
*/
subtitleOffset?: boolean
/**
* Whether to enable player mini progress bar
*/
miniProgressBar?: boolean
/**
* Whether use SSR function
*/
useSSR?: boolean
/**
* Whether use playsInline in mobile
*/
playsInline?: boolean
/**
* Whether use lock in mobile
*/
lock?: boolean
/**
* Whether use gesture in mobile
*/
gesture?: boolean
/**
* Whether use fast forward in mobile
*/
fastForward?: boolean
/**
* Whether use auto playback
*/
autoPlayback?: boolean
/**
* Whether use auto orientation in mobile
*/
autoOrientation?: boolean
/**
* Whether use airplay
*/
airplay?: boolean
/**
* Custom video proxy
*/
proxy?: (this: Artplayer, art: Artplayer) => HTMLCanvasElement | HTMLVideoElement | undefined
/**
* Custom plugin list
*/
plugins?: PluginFactory[]
/**
* Custom layer list
*/
layers?: ComponentOption[]
/**
* Custom contextmenu list
*/
contextmenu?: ComponentOption[]
/**
* Custom control list
*/
controls?: ComponentOption[]
/**
* Custom setting list
*/
settings?: Setting[]
/**
* Custom video quality list
*/
quality?: Quality[]
/**
* Custom highlight list
*/
highlight?: {
/**
* The highlight time
*/
time: number
/**
* The highlight text
*/
text: string
}[]
/**
* Custom thumbnail
*/
thumbnails?: Thumbnails
/**
* Custom subtitle option
*/
subtitle?: Subtitle
/**
* Other video attribute
*/
moreVideoAttr?: Partial<Readonly<{
[K in keyof HTMLVideoElement as HTMLVideoElement[K] extends (...args: unknown[]) => unknown
? never
: K]: HTMLVideoElement[K]
}>>
/**
* Custom i18n
*/
i18n?: I18n
/**
* Custom default icons
*/
icons?: {
[key in keyof Icons]?: HTMLElement | string
}
/**
* Custom css variables
*/
cssVar?: Partial<CssVar>
/**
* Custom video type function
*/
customType?: Partial<
Record<
CustomType,
(this: Artplayer, video: HTMLVideoElement, url: string, art: Artplayer) => unknown | Promise<unknown>
>
>
}
-6
View File
@@ -1,6 +0,0 @@
/** Accurate playback method view; assign an existing player without a runtime wrapper. */
export interface PlaybackControls {
play: () => Promise<void>
pause: () => void
toggle: () => Promise<void> | void
}
-113
View File
@@ -1,113 +0,0 @@
import type { CssVar } from './cssVar'
import type { CustomType, Thumbnails } from './option'
import type { Quality } from './quality'
export type AspectRatio = 'default' | '4:3' | '16:9' | (`${number}:${number}` & Record<never, never>)
export type PlaybackRate = 0.5 | 0.75 | 1.0 | 1.25 | 1.5 | 1.75 | 2.0 | (number & Record<never, never>)
export type Flip = 'normal' | 'horizontal' | 'vertical' | (string & Record<never, never>)
export type State = 'standard' | 'mini' | 'pip' | 'fullscreen' | 'fullscreenWeb'
export declare class Player {
get aspectRatio(): AspectRatio
set aspectRatio(ratio: AspectRatio)
get state(): State
set state(state: State)
get type(): CustomType
set type(name: CustomType)
get playbackRate(): PlaybackRate
set playbackRate(rate: PlaybackRate)
get currentTime(): number
set currentTime(time: number)
get duration(): number
get played(): number
get playing(): boolean
get flip(): Flip
set flip(state: Flip)
get fullscreen(): boolean
set fullscreen(state: boolean)
get fullscreenWeb(): boolean
set fullscreenWeb(state: boolean)
get loaded(): number
get loadedTime(): number
get mini(): boolean
set mini(state: boolean)
get pip(): boolean
set pip(state: boolean)
get poster(): string
set poster(url: string)
get rect(): DOMRect
get bottom(): number
get height(): number
get left(): number
get right(): number
get top(): number
get width(): number
get x(): number
get y(): number
set seek(time: number)
get seek(): number
set forward(time: number)
get forward(): number
set backward(time: number)
get backward(): number
get url(): string
set url(url: string)
get volume(): number
set volume(percentage: number)
get muted(): boolean
set muted(state: boolean)
get theme(): string
set theme(theme: string)
get subtitleOffset(): number
set subtitleOffset(time: number)
get switch(): string
set switch(url: string)
get quality(): Quality[]
set quality(quality: Quality[])
get thumbnails(): Thumbnails
set thumbnails(thumbnails: Thumbnails)
pause(): void
play(): Promise<void>
/** Legacy signature; runtime preserves pause's synchronous result or play's Promise. */
toggle(): void
attr(key: string, value?: unknown): unknown
cssVar<T extends keyof CssVar>(key: T, value?: CssVar[T]): CssVar[T]
switchUrl(url: string): Promise<void>
switchQuality(url: string): Promise<void>
getDataURL(): Promise<string>
getBlobUrl(): Promise<string>
screenshot(name?: string): Promise<string>
airplay(): void
autoSize(): void
autoHeight(): void
reset(): void
}
-10
View File
@@ -1,10 +0,0 @@
import type Artplayer from './artplayer'
export type PluginFactory<Host = Artplayer, Result = unknown> = (this: Host, art: Host) => Result
/** Augment this interface with installed plugin results; augmentation does not register a plugin. */
export interface Plugins {
/** Legacy signature: synchronous factories return this registry; Promise factories return a Promise of it. */
add: (plugin: PluginFactory) => Promise<Plugins>
[name: string]: unknown
}
-16
View File
@@ -1,16 +0,0 @@
export interface Quality {
/**
* Whether the default is selected
*/
default?: boolean
/**
* Html string of quality
*/
html: string | HTMLElement
/**
* Video quality url
*/
url: string
}
-54
View File
@@ -1,54 +0,0 @@
import type * as Definition from './runtime.js'
declare const Artplayer: typeof Definition.default
// eslint-disable-next-line ts/no-redeclare -- CJS constructor value and instance type share the export.
type Artplayer = Definition.default
// eslint-disable-next-line ts/no-redeclare, ts/no-namespace -- Named types share the existing CommonJS export.
declare namespace Artplayer {
type ArtplayerConstructor = Definition.ArtplayerConstructor
type OptionInput = Definition.OptionInput
type Option = Definition.Option
type Events = Definition.Events
type Plugins = Definition.Plugins
type PluginFactory<Result = unknown> = Definition.PluginFactory<Result>
type PluginHost = Definition.PluginHost
type ProxyHost = Definition.ProxyHost
type CustomTypeHost = Definition.CustomTypeHost
type LayerHost = Definition.LayerHost
type ControlHost = Definition.ControlHost
type ContextmenuHost = Definition.ContextmenuHost
type PluginRegistration<Result, Registry> = Definition.PluginRegistration<Result, Registry>
type Component = Definition.Component
type Controls = Definition.Controls
type Setting = Definition.Setting
type Subtitle = Definition.Subtitle
type Notice = Definition.Notice
type Utils = Definition.Utils
type MediaSurface = Definition.MediaSurface
type NativeMedia = Definition.NativeMedia
type CanvasMedia = Definition.CanvasMedia
type Player<Media extends MediaSurface = MediaSurface> = Definition.Player<Media>
type Template<Host = Artplayer, Media extends MediaSurface = MediaSurface> = Definition.Template<Host, Media>
type Icons = Definition.Icons
type Config = Definition.Config
type EventRegistry = Definition.EventRegistry
type Storage = Definition.Storage
type I18n<Host = Artplayer> = Definition.I18n<Host>
type Hotkey<Host = Artplayer> = Definition.Hotkey<Host>
type Languages = Definition.Languages
type Dictionary = Definition.Dictionary
type QualityItem = Definition.QualityItem
type SettingItem<Host = Artplayer> = Definition.SettingItem<Host>
type ComponentInput<Host = Artplayer> = Definition.ComponentInput<Host>
type ComponentOption<Host = Artplayer> = Definition.ComponentOption<Host>
type ControlInput<Host = Artplayer> = Definition.ControlInput<Host>
type ControlOption<Host = Artplayer> = Definition.ControlOption<Host>
type SelectorItem = Definition.SelectorItem
type SubtitleCue = Definition.SubtitleCue
type SubtitleOption = Definition.SubtitleOption
type Emitter<Events extends { [Name in keyof Events]: readonly unknown[] } = Record<PropertyKey, unknown[]>> = Definition.Emitter<Events>
}
// eslint-disable-next-line no-restricted-syntax -- Preserve the actual CommonJS constructor export.
export = Artplayer
-2
View File
@@ -1,2 +0,0 @@
export { default } from './runtime.cjs'
export type * from './runtime.js'
-125
View File
@@ -1,125 +0,0 @@
import type LegacyArtplayer from './artplayer'
import type { Emitter } from './emitter'
import type { OptionInput as LegacyOptionInput } from './option'
import type { PluginFactory as LegacyPluginFactory, Plugins as LegacyPlugins } from './plugin'
import type { ComponentInput, Component as ComponentView, ControlInput, Controls as ControlsView } from './runtime/component'
import type { ContextmenuHost, ControlHost, CustomTypeHost, LayerHost, PluginHost, ProxyHost } from './runtime/construction'
import type { Events } from './runtime/events'
import type { MediaSurface } from './runtime/media'
import type { OptionInput as OptionInputView, Option as OptionView } from './runtime/option'
import type { Player } from './runtime/player'
import type { PluginFactory as FactoryView, PluginRegistration, Plugins as PluginsView } from './runtime/plugin'
import type { Config, EventRegistry, Hotkey, I18n, Scheme, Storage, ValidatorPath } from './runtime/services'
import type { Setting as SettingView } from './runtime/setting'
import type { Notice as NoticeView, Subtitle as SubtitleView } from './runtime/subtitle'
import type { Icons, Template } from './runtime/template'
import type { Utils } from './runtime/utils'
export type { Emitter } from './emitter'
export type { ComponentInput, ComponentOption, ControlInput, ControlOption, SelectorItem } from './runtime/component'
export type { ContextmenuHost, ControlHost, CustomTypeHost, LayerHost, PluginHost, ProxyHost } from './runtime/construction'
export type { Events } from './runtime/events'
export type { CanvasMedia, MediaSurface, NativeMedia } from './runtime/media'
export type { Player, QualityItem } from './runtime/player'
export type { PluginRegistration } from './runtime/plugin'
export type { Config, Dictionary, EventRegistry, Hotkey, I18n, Languages, Storage } from './runtime/services'
export type { SettingItem } from './runtime/setting'
export type { SubtitleCue, SubtitleOption } from './runtime/subtitle'
export type { Icons, Template } from './runtime/template'
export type { Utils } from './runtime/utils'
export type PluginFactory<Result = unknown> = FactoryView<PluginHost, Result>
export interface OptionInput extends Omit<OptionInputView<Artplayer>, 'plugins' | 'proxy' | 'customType' | 'layers' | 'controls' | 'contextmenu'> {
plugins?: PluginFactory[]
proxy?: (this: ProxyHost, art: ProxyHost) => MediaSurface
customType?: Record<string, ((this: CustomTypeHost, video: MediaSurface, url: string, art: CustomTypeHost) => unknown) | undefined>
layers?: ComponentInput<LayerHost>[]
controls?: ControlInput<ControlHost>[]
contextmenu?: ComponentInput<ContextmenuHost>[]
}
export interface Option extends OptionView<Artplayer> {}
export interface Component extends ComponentView<Artplayer> {}
export interface Controls extends ControlsView<Artplayer> {}
export interface Setting extends SettingView<Artplayer> {}
export interface Subtitle extends SubtitleView, Omit<Component, keyof SubtitleView> {}
export interface Notice extends NoticeView { art: Artplayer }
/** Augment with installed results. Factories are not wrapped or converted. */
export interface PluginAdd<Registry> {
<Result>(plugin: FactoryView<Artplayer, Result>): PluginRegistration<Result, Registry>
<Result>(plugin: LegacyPluginFactory<LegacyArtplayer, Result>): PluginRegistration<Result, Registry>
}
type LegacyPluginResults = {
[Name in keyof LegacyPlugins as string extends Name ? never : number extends Name ? never : Name extends keyof PluginsView<Artplayer> ? never : Name]: LegacyPlugins[Name]
}
export interface Plugins extends Omit<PluginsView<Artplayer>, 'add'>, LegacyPluginResults {
add: PluginAdd<this>
[name: string]: unknown
}
/** Public view of the existing constructor; this interface emits no runtime fields. */
interface Artplayer extends Player, Emitter<Events> {
constructor: ArtplayerConstructor
id: number
option: Option
isLock: boolean
isReady: boolean
isFocus: boolean
isInput: boolean
isRotate: boolean
isDestroy: boolean
flv?: unknown
m3u8?: unknown
hls?: unknown
ts?: unknown
mpd?: unknown
torrent?: unknown
template: Template<Artplayer>
events: EventRegistry
storage: Storage
icons: Icons
i18n: I18n<Artplayer>
notice: Notice
/** The descriptor installer has no public instance members. */
player: object
layers: Component
controls: Controls
contextmenu: Component & { init: () => void }
subtitle: Subtitle
info: Component & { init: () => void }
loading: Component
hotkey: Hotkey<Artplayer>
mask: Component
setting: Setting
plugins: Plugins
readonly query: Template<Artplayer>['query']
readonly proxy: EventRegistry['proxy']
readonly video: MediaSurface
reset: () => void
destroy: (removeHtml?: boolean) => void
}
type StaticOptions = Pick<typeof LegacyArtplayer, Extract<keyof typeof LegacyArtplayer, Uppercase<string>>>
export interface ArtplayerConstructor extends StaticOptions {
new (option: OptionInput, readyCallback?: (this: Artplayer, art: Artplayer) => unknown): Artplayer
new (option: LegacyOptionInput, readyCallback?: (this: Artplayer, art: Artplayer) => unknown): Artplayer
readonly prototype: Artplayer
readonly instances: Artplayer[]
readonly version: string
readonly config: Config
readonly utils: Utils
readonly scheme: Record<keyof Option, Scheme>
readonly Emitter: new <Events extends { [Name in keyof Events]: readonly unknown[] } = Record<PropertyKey, unknown[]>>(...args: unknown[]) => Emitter<Events>
readonly validator: <T>(option: T, scheme: Scheme, paths?: ValidatorPath) => T
readonly kindOf: (value: unknown) => string
readonly html: string
readonly option: Option
}
// eslint-disable-next-line ts/no-redeclare -- One existing constructor value and its instance view.
declare const Artplayer: ArtplayerConstructor
export default Artplayer
-65
View File
@@ -1,65 +0,0 @@
export type EventCleanup = () => void
export interface SelectorItem {
html: string | HTMLElement | number
value?: string | number
default?: boolean
readonly $control_option?: SelectorItem[]
readonly $control_item?: HTMLDivElement
readonly $control_value?: HTMLDivElement
}
export interface ComponentOption<Host> {
html?: string | HTMLElement | number
disable?: boolean
name?: string
index?: number
style?: Partial<CSSStyleDeclaration>
tooltip?: string | number
position?: string
selector?: SelectorItem[]
click?: (this: Host, component: Component<Host>, event: Event) => unknown
mounted?: (this: Host, element: HTMLDivElement) => unknown
beforeUnmount?: (this: Host, element: HTMLDivElement) => unknown
onSelect?: (this: Host, item: SelectorItem, element: HTMLDivElement, event: Event) => unknown
}
export type ComponentInput<Host> = ComponentOption<Host> | ((art: Host) => ComponentOption<Host>)
export interface ControlOption<Host> extends Omit<ComponentOption<Host>, 'position'> {
position: 'top' | 'left' | 'right'
}
export type ControlInput<Host> = ControlOption<Host> | ((art: Host) => ControlOption<Host>)
export interface ComponentEntry<Host> {
$ref: HTMLDivElement
events: EventCleanup[]
option: ComponentOption<Host>
}
export interface Component<Host> {
id: number
art: Host
name?: string
$parent?: HTMLElement
cache: Map<string, ComponentEntry<Host>>
show: boolean
toggle: () => void
add: (input: ComponentInput<Host>) => HTMLDivElement | undefined
remove: (name: string) => void
update: (option: ComponentOption<Host>) => ReturnType<this['add']>
selector?: (option: ComponentOption<Host>, element: HTMLDivElement, events: EventCleanup[]) => void
}
export interface Controls<Host> extends Omit<Component<Host>, 'add' | 'update' | 'selector'> {
isHover: boolean
timer: number
setting?: HTMLDivElement
thumbnails?: HTMLDivElement
init: () => void
add: (input: ControlInput<Host>) => undefined
update: (option: ComponentOption<Host>) => undefined
check: (target?: SelectorItem) => void
selector: (option: ComponentOption<Host>, element: HTMLDivElement, events: EventCleanup[]) => void
}
-19
View File
@@ -1,19 +0,0 @@
import type { Emitter } from '../emitter'
import type Artplayer from '../runtime'
import type { Events } from './events'
import type { Player } from './player'
/** Safe fields before Template returns; video/query/proxy getters are not usable yet. */
export interface ProxyHost extends Emitter<Events>, Pick<Artplayer, 'constructor' | 'id' | 'option' | 'isLock' | 'isReady' | 'isFocus' | 'isInput' | 'isRotate' | 'isDestroy' | 'destroy'> {}
// Mapped types collapse distinct getter/setter types; preserve Player directly.
type Pending<Names extends keyof Artplayer> = Player & Omit<Artplayer, Names | keyof Player> & Partial<Pick<Artplayer, Names>>
type AfterPlayer = 'layers' | 'controls' | 'contextmenu' | 'subtitle' | 'info' | 'loading' | 'hotkey' | 'mask' | 'setting' | 'plugins'
/** URL assignment awaits its owned delay before invoking customType. */
export type CustomTypeHost = Artplayer
export type LayerHost = Pending<AfterPlayer>
export type ControlHost = Pending<Exclude<AfterPlayer, 'layers'>>
export type ContextmenuHost = Pending<Exclude<AfterPlayer, 'layers' | 'controls'>>
/** Constructor factories run before the Plugins registry is assigned to the player. */
export type PluginHost = Pending<'plugins'>
-26
View File
@@ -1,26 +0,0 @@
import type { Events as LegacyEvents } from '../events'
import type { SubtitleCue, SubtitleOption } from './subtitle'
type NativeEvents = { [Name in Extract<keyof LegacyEvents, `video:${string}`>]: [event: Event] }
interface BuiltinEvents {
[name: `video:${string}`]: [event: Event]
'document:keydown': [KeyboardEvent]
'document:mousemove': [MouseEvent]
'document:mouseup': [MouseEvent]
'mousemove': [MouseEvent]
'click': [MouseEvent]
'blur': [Event]
'error': [error: unknown, attempt: number]
'fullscreenError': [error: unknown]
'aspectRatio': [string]
'flip': [string]
'seek': [time: number, requestedTime: number | string]
'setBar': [type: string, percentage: number, event?: MouseEvent | TouchEvent]
'subtitleBeforeUpdate': [cues: SubtitleCue[]]
'subtitleAfterUpdate': [cues: SubtitleCue[]]
'subtitleLoad': [cues: SubtitleCue[], option: SubtitleOption | null]
}
/** Legacy custom event augmentation is retained; builtin payload corrections take precedence. */
export interface Events extends Omit<LegacyEvents, keyof BuiltinEvents>, NativeEvents, BuiltinEvents, Record<PropertyKey, unknown[]> {}
-41
View File
@@ -1,41 +0,0 @@
export type MediaState = Pick<HTMLMediaElement, 'currentTime' | 'duration' | 'paused' | 'ended' | 'readyState'> & {
readonly playing?: boolean
}
export interface PlaybackMethods<PlayResult = unknown, PauseResult = unknown> {
play: () => PlayResult
pause: () => PauseResult
}
export interface OptionalMediaCapabilities {
readonly textTracks?: ArrayLike<TextTrack>
readonly error?: unknown
requestPictureInPicture?: () => Promise<PictureInPictureWindow>
requestVideoFrameCallback?: (callback: VideoFrameRequestCallback) => number
cancelVideoFrameCallback?: (handle: number) => void
webkitEnterFullscreen?: () => void
webkitExitFullscreen?: () => void
readonly webkitSupportsFullscreen?: boolean
webkitShowPlaybackTargetPicker?: () => void
webkitSupportsPresentationMode?: (mode: string) => boolean
webkitSetPresentationMode?: (mode: string) => void
readonly webkitPresentationMode?: string
readonly webkitDisplayingFullscreen?: boolean
}
export type NativeMedia = Omit<HTMLVideoElement, keyof OptionalMediaCapabilities> & OptionalMediaCapabilities
export type CanvasMedia = HTMLCanvasElement & MediaState & PlaybackMethods & OptionalMediaCapabilities & {
src: string | null
readonly currentSrc: string | null
readonly videoWidth: number
readonly videoHeight: number
readonly buffered: TimeRanges
volume: number
muted: boolean
playbackRate: number
load: () => unknown
}
/** Check optional capabilities before calling them on a native or proxy surface. */
export type MediaSurface = NativeMedia | CanvasMedia
-28
View File
@@ -1,28 +0,0 @@
import type { OptionInput as LegacyOptionInput, Thumbnails } from '../option'
import type { ComponentInput, ControlInput } from './component'
import type { MediaSurface } from './media'
import type { PluginFactory } from './plugin'
import type { Languages } from './services'
import type { SettingItem } from './setting'
import type { SubtitleOption } from './subtitle'
/** Callback receivers are the unchanged player instance selected by this view. */
export interface OptionInput<Host> extends Omit<LegacyOptionInput, 'container' | 'proxy' | 'plugins' | 'layers' | 'controls' | 'contextmenu' | 'settings' | 'customType' | 'i18n' | 'icons'> {
container: string | HTMLDivElement
proxy?: (this: Host, art: Host) => MediaSurface | undefined
plugins?: PluginFactory<Host>[]
layers?: ComponentInput<Host>[]
controls?: ControlInput<Host>[]
contextmenu?: ComponentInput<Host>[]
settings?: SettingItem<Host>[]
customType?: Record<string, ((this: Host, video: MediaSurface, url: string, art: Host) => unknown) | undefined>
i18n?: Languages
icons?: Record<string, string | HTMLElement | undefined>
}
/** Defaults are merged once; later setters may replace thumbnails with a partial input. */
export interface Option<Host> extends Omit<Required<OptionInput<Host>>, 'proxy' | 'subtitle' | 'thumbnails'> {
proxy: OptionInput<Host>['proxy']
subtitle: SubtitleOption
thumbnails: Thumbnails
}
-78
View File
@@ -1,78 +0,0 @@
import type { Thumbnails } from '../option'
import type { State } from '../player'
import type { MediaSurface } from './media'
export interface QualityItem {
html: string | HTMLElement
url: string
default?: boolean
}
/** Player-facing descriptors; native/proxy method results retain their identity. */
export interface Player<Media extends MediaSurface = MediaSurface> {
get currentTime(): number
set currentTime(time: number | string)
readonly duration: number
get seek(): undefined
set seek(time: number | string)
get forward(): undefined
set forward(time: number)
get backward(): undefined
set backward(time: number)
get switch(): undefined
set switch(url: string)
get quality(): undefined
set quality(items: QualityItem[])
get url(): string | null
set url(value: string)
get state(): State
set state(value: string)
get pip(): Element | null | boolean
set pip(value: boolean)
/** The descriptor may be absent before metadata installs the available mode. */
fullscreen?: boolean
fullscreenWeb: boolean
mini: boolean
volume: number
muted: boolean
playbackRate: number
aspectRatio: string
flip: string
poster: string
theme: string
type: string
subtitleOffset: number
thumbnails: Thumbnails
readonly loaded: number
readonly loadedTime: number
readonly played: number
readonly playing: boolean
readonly rect: DOMRect
readonly bottom: number
readonly height: number
readonly left: number
readonly right: number
readonly top: number
readonly width: number
readonly x: number
readonly y: number
play: () => Promise<Awaited<ReturnType<Media['play']>>>
pause: () => ReturnType<Media['pause']>
toggle: () => Promise<Awaited<ReturnType<Media['play']>>> | ReturnType<Media['pause']>
switchUrl: (url: string) => Promise<void>
switchQuality: (url: string) => Promise<void>
autoSize: () => void
autoHeight: () => void
airplay: () => void
getDataURL: () => Promise<string>
getBlobUrl: () => Promise<string>
screenshot: (name?: string) => Promise<string>
attr: {
(key: PropertyKey): unknown
(key: PropertyKey, value: unknown): unknown
}
cssVar: {
(key: string): string
(key: string, value: unknown): string | void
}
}
-13
View File
@@ -1,13 +0,0 @@
export type PluginFactory<Host, Result = unknown> = (this: Host, art: Host) => Result
export type PluginRegistration<Result, Registry>
= unknown extends Result ? Registry | Promise<Registry>
: Result extends Promise<unknown> ? Promise<Registry> : Registry
/** The same registry is returned immediately or after its Promise factory settles. */
export interface Plugins<Host> {
art: Host
id: number
add: <Result>(plugin: PluginFactory<Host, Result>) => PluginRegistration<Result, this>
next: (plugin: PluginFactory<Host>, result: unknown) => this
}
-57
View File
@@ -1,57 +0,0 @@
export interface Config {
properties: string[]
methods: string[]
events: string[]
prototypes: string[]
}
export type Disposer = () => void
export type Listener = EventListenerOrEventListenerObject | null
export interface EventRegistry {
destroyEvents: Set<Disposer>
proxy: {
(target: EventTarget, name: string, callback: Listener, option?: boolean | AddEventListenerOptions | null): Disposer
(target: EventTarget, name: string[], callback: Listener, option?: boolean | AddEventListenerOptions | null): Disposer[]
(target: EventTarget, name: string | string[], callback: Listener, option?: boolean | AddEventListenerOptions | null): Disposer | Disposer[]
}
hover: (target: EventTarget, mouseenter?: (event: Event) => unknown, mouseleave?: (event: Event) => unknown) => void
remove: (dispose: Disposer) => void
destroy: () => void
bindGlobalEvents: (source?: { window?: Window, document?: Document }) => void
}
export interface Storage {
name: string
settings: Record<PropertyKey, unknown>
get: (key?: PropertyKey) => unknown
set: (key: PropertyKey, value: unknown) => void
del: (key: PropertyKey) => void
clear: () => void
}
export type Dictionary = Record<string, string | undefined>
export type Languages = Record<string, Dictionary | undefined>
export interface I18n<Host> {
art: Host
languages: Languages
language: Dictionary
init: () => void
get: (key: string) => string
update: (value: Languages) => void
}
export type HotkeyCallback<Host> = (this: Host, event: KeyboardEvent) => unknown
export interface Hotkey<Host> {
art: Host
keys: Record<string, HotkeyCallback<Host>[]>
init: () => void
add: (key: string, callback: HotkeyCallback<Host>) => this
remove: (key: string, callback: HotkeyCallback<Host>) => this
}
export type ValidatorPath = (string | number)[]
export type Validator = (value: unknown, type: string, paths: ValidatorPath) => unknown
export type Scheme = string | Validator | Scheme[] | { [key: string]: Scheme }
-58
View File
@@ -1,58 +0,0 @@
export type SettingContent = string | HTMLElement | number
export type SettingRange = [value?: number, min?: number, max?: number, step?: number]
export type SettingCallback<Host> = (this: Host, item: SettingItem<Host>, element: HTMLDivElement, event: Event) => unknown
export interface SettingItem<Host> {
name?: string
html?: SettingContent
icon?: SettingContent
tooltip?: SettingContent
width?: number
value?: string | number
default?: boolean
switch?: boolean
range?: SettingRange
selector?: SettingItem<Host>[]
mounted?: (this: Host, element: HTMLDivElement, item: SettingItem<Host>) => unknown
onClick?: SettingCallback<Host>
onSwitch?: SettingCallback<Host>
onRange?: SettingCallback<Host>
onChange?: SettingCallback<Host>
onSelect?: SettingCallback<Host>
readonly $parent?: SettingItem<Host>
readonly $parents?: SettingItem<Host>[]
readonly $option?: SettingItem<Host>[]
readonly $events?: (() => void)[]
readonly $formatted?: boolean
readonly $item?: HTMLDivElement
readonly $icon?: HTMLDivElement
readonly $html?: HTMLDivElement
readonly $tooltip?: HTMLDivElement
readonly $switch?: HTMLDivElement
readonly $range?: HTMLInputElement
}
export interface Setting<Host> {
id: number
art: Host
name: string
$parent: HTMLElement
cache: Map<SettingItem<Host>[], HTMLDivElement>
active: SettingItem<Host>[] | null
option: SettingItem<Host>[]
readonly builtin: SettingItem<Host>[]
show: boolean
toggle: () => void
traverse: (callback: (item: SettingItem<Host>) => void, option?: SettingItem<Host>[]) => void
check: (target?: SettingItem<Host> | null) => void
format: (option?: SettingItem<Host>[], parent?: SettingItem<Host>, parents?: SettingItem<Host>[], names?: string[]) => void
find: (name?: string) => SettingItem<Host> | null
resize: () => void
inactivate: (item: SettingItem<Host>) => void
remove: (name: string) => void
update: (item: SettingItem<Host>) => SettingItem<Host>
add: <Item extends SettingItem<Host>>(item: Item, option?: SettingItem<Host>[]) => Item
createHeader: (item: SettingItem<Host>) => void
createItem: (item: SettingItem<Host>, isUpdate?: boolean) => void
render: (option?: SettingItem<Host>[]) => void
}
-38
View File
@@ -1,38 +0,0 @@
import type { Subtitle as SubtitleInput } from '../subtitle'
export type SubtitleOption = Required<SubtitleInput>
export interface SubtitleCue extends TextTrackCue {
text: string
originalStartTime?: number
originalEndTime?: number
}
export interface SubtitleTrack extends HTMLTrackElement { offset?: number }
export interface Subtitle {
name: string
option: SubtitleOption | null
destroyEvent: () => unknown
url: string
readonly textTrack: TextTrack | undefined
readonly activeCues: SubtitleCue[]
readonly cues: SubtitleCue[]
show: boolean
toggle: () => void
style: {
(styles: Partial<CSSStyleDeclaration>): HTMLDivElement
(key: string, value: string | number): HTMLDivElement
}
update: () => void
switch: (url: string, option?: SubtitleInput) => Promise<string | null | undefined>
init: (option: SubtitleOption) => Promise<string | null | undefined>
createTrack: (kind: string, url: string) => void
}
export interface Notice {
timer: number | null
get show(): boolean
set show(value: string | Error | false)
destroy: () => void
}
-42
View File
@@ -1,42 +0,0 @@
import type { MediaSurface } from './media'
/** Query results remain nullable for caller-supplied SSR templates. */
export interface Template<Host, Media extends MediaSurface = MediaSurface> {
art: Host
$container: HTMLDivElement
$player: HTMLDivElement | null
$video: Media
$track: HTMLTrackElement | null
$poster: HTMLDivElement | null
$subtitle: HTMLDivElement | null
$danmuku: HTMLDivElement | null
$bottom: HTMLDivElement | null
$progress: HTMLDivElement | null
$controls: HTMLDivElement | null
$controlsLeft: HTMLDivElement | null
$controlsCenter: HTMLDivElement | null
$controlsRight: HTMLDivElement | null
$layer: HTMLDivElement | null
$loading: HTMLDivElement | null
$notice: HTMLDivElement | null
$noticeInner: HTMLDivElement | null
$mask: HTMLDivElement | null
$state: HTMLDivElement | null
$setting: HTMLDivElement | null
$info: HTMLDivElement | null
$infoPanel: HTMLDivElement | null
$infoClose: HTMLDivElement | null
$contextmenu: HTMLDivElement | null
$mini?: HTMLElement
query: <ElementType extends Element = Element>(selector: string) => ElementType | null
init: () => void
destroy: (removeHtml: boolean) => void
}
export type IconName = 'loading' | 'state' | 'play' | 'pause' | 'check' | 'volume' | 'volumeClose'
| 'screenshot' | 'setting' | 'pip' | 'arrowLeft' | 'arrowRight' | 'playbackRate' | 'aspectRatio'
| 'config' | 'lock' | 'flip' | 'unlock' | 'fullscreenOff' | 'fullscreenOn' | 'fullscreenWebOff'
| 'fullscreenWebOn' | 'switchOn' | 'switchOff' | 'error' | 'close' | 'airplay'
/** Default getters create fresh icon wrappers; unknown custom keys may be absent. */
export type Icons = Readonly<Record<IconName, HTMLElement>> & { readonly [name: string]: HTMLElement | undefined }
-67
View File
@@ -1,67 +0,0 @@
interface StyledElement { style: CSSStyleDeclaration }
interface EventPathSource {
target: EventTarget | null
composedPath?: () => EventTarget[]
}
type StackFrame = ((...args: never[]) => unknown) | (abstract new (...args: never[]) => object)
export interface Utils {
isBrowser: boolean
userAgent: string
isMobile: boolean
isSafari: boolean
isIOS: boolean
isIOS13: boolean
query: <T extends Element = Element>(selector: string, parent?: ParentNode) => T | null
queryAll: <T extends Element = Element>(selector: string, parent?: ParentNode) => T[]
addClass: (target: Pick<Element, 'classList'>, className: string) => void
removeClass: (target: Pick<Element, 'classList'>, className: string) => void
hasClass: (target: Pick<Element, 'classList'>, className: string) => boolean
append: (parent: Element, child: unknown) => Element | ChildNode | null
remove: <T extends Node>(child: T) => T
replaceElement: <T extends Node>(newChild: T, oldChild: Node) => T
siblings: (target: Element) => Element[]
inverseClass: (target: Element, className: string) => void
createElement: {
<K extends keyof HTMLElementTagNameMap>(tag: K): HTMLElementTagNameMap[K]
(tag: string): HTMLElement
}
setStyle: <T extends StyledElement>(element: T, key: PropertyKey, value: unknown) => T
setStyles: <T extends StyledElement>(element: T, styles: object) => T
getStyle: {
(element: Element, key: string, numberType?: true): number
(element: Element, key: string, numberType: false): string
(element: Element, key: string, numberType: boolean): number | string
}
setStyleText: (id: string, cssText: string) => void
getRect: (element: Pick<Element, 'getBoundingClientRect'>) => DOMRect
tooltip: (target: Element, message: string | number, position?: string) => void
isInViewport: (target: Pick<Element, 'getBoundingClientRect'>, offset?: number) => boolean
includeFromEvent: (event: EventPathSource, target: EventTarget | null | undefined) => boolean
getSafeAreaInsets: () => { top: number, right: number, bottom: number, left: number }
srtToVtt: (text: string) => string
vttToBlob: (text: string) => string
assToVtt: (text: string) => string
getExt: (url: string) => string
download: (url: string, name: string) => void
loadImg: (url: string, scale?: number) => Promise<HTMLImageElement>
errorHandle: <T>(condition: T, message?: string) => T
silencePromise: <T>(value: T) => T extends Promise<infer Result> ? Promise<Result | undefined> : T
def: <T extends object>(object: T, name: PropertyKey, descriptor: PropertyDescriptor & object & ThisType<T>) => T
has: (object: object, name: PropertyKey) => boolean
get: (object: object, name: PropertyKey) => PropertyDescriptor | undefined
mergeDeep: <T extends object[]>(...objects: T) => T[number]
sleep: (milliseconds?: number) => Promise<void>
/** The wrapper preserves its call receiver; the old context argument is ignored. */
debounce: <Receiver, Args extends unknown[]>(callback: (this: Receiver, ...args: Args) => unknown, duration: number, context?: object) => (this: Receiver, ...args: Args) => void
throttle: <Receiver, Args extends unknown[]>(callback: (this: Receiver, ...args: Args) => unknown, duration: number) => (this: Receiver, ...args: Args) => void
clamp: (number: number, a: number, b: number) => number
secondToTime: (second: number) => string
escape: (text: string) => string
unescape: (text: string) => string
capitalize: (text: string) => string
ArtPlayerError: new (message?: string, context?: StackFrame) => Error
getIcon: (key?: string, html?: string | HTMLElement) => HTMLElement
getComposedPath: (event: EventPathSource) => EventTarget[]
supportsFlex: () => boolean
}
-95
View File
@@ -1,95 +0,0 @@
import type Artplayer from './artplayer'
export interface SettingOption extends Omit<Setting, 'html' | 'icon' | 'tooltip'> {
html: string
icon: string | undefined
tooltip: string | undefined
$item: HTMLDivElement
$icon: HTMLDivElement | undefined
$html: HTMLDivElement
$tooltip: HTMLDivElement | undefined
$switch: HTMLDivElement | undefined
$range: HTMLInputElement | undefined
$parent: SettingOption | undefined
$parents: SettingOption[]
$option: SettingOption[]
$events: Array<() => void>
$formatted: boolean
}
export interface Setting {
/**
* Html string or html element of setting name
*/
html: string | HTMLElement
/**
* Html string or html element of setting icon
*/
icon?: string | HTMLElement
/**
* The width of setting
*/
width?: number
/**
* The tooltip of setting
*/
tooltip?: string | HTMLElement
/**
* Whether the default is selected
*/
default?: boolean
/**
* Custom selector list
*/
selector?: Setting[]
/**
* When the setting was mounted
*/
mounted?: (this: Artplayer, panel: HTMLDivElement, item: Setting) => void
/**
* When selector item click
*/
onSelect?: (this: Artplayer, item: SettingOption, element: HTMLDivElement, event: Event) => void
/**
* Custom switch item
*/
switch?: boolean
/**
* When switch item click
*/
onSwitch?: (this: Artplayer, item: SettingOption, element: HTMLDivElement, event: Event) => void
/**
* Custom range item
*/
range?: [value?: number, min?: number, max?: number, step?: number]
/**
* When range item change
*/
onRange?: (this: Artplayer, item: SettingOption, element: HTMLDivElement, event: Event) => void
/**
* When range item change in real time
*/
onChange?: (this: Artplayer, item: SettingOption, element: HTMLDivElement, event: Event) => void
/**
* When range item change in real time
*/
onClick?: (this: Artplayer, item: SettingOption, element: HTMLDivElement, event: Event) => void
/**
* Allow custom properties
*/
[key: string]: any
}
-36
View File
@@ -1,36 +0,0 @@
export interface Subtitle {
/**
* The subtitle url
*/
url?: string
/**
* The subtitle name
*/
name?: string
/**
* The subtitle type
*/
type?: 'vtt' | 'srt' | 'ass' | (string & Record<never, never>)
/**
* The subtitle style object
*/
style?: Partial<CSSStyleDeclaration>
/**
* The subtitle encoding, default utf-8
*/
encoding?: string
/**
* Whether use escape, default true
*/
escape?: boolean
/**
* Change the vtt text
*/
onVttLoad?: (vtt: string) => string
}
-27
View File
@@ -1,27 +0,0 @@
export interface Template {
readonly html: string
readonly $container: HTMLDivElement
readonly $player: HTMLDivElement
readonly $video: HTMLVideoElement
readonly $track: HTMLTrackElement
readonly $poster: HTMLDivElement
readonly $subtitle: HTMLDivElement
readonly $danmuku: HTMLDivElement
readonly $bottom: HTMLDivElement
readonly $progress: HTMLDivElement
readonly $controls: HTMLDivElement
readonly $controlsLeft: HTMLDivElement
readonly $controlsCenter: HTMLDivElement
readonly $controlsRight: HTMLDivElement
readonly $layer: HTMLDivElement
readonly $loading: HTMLDivElement
readonly $notice: HTMLDivElement
readonly $noticeInner: HTMLDivElement
readonly $mask: HTMLDivElement
readonly $state: HTMLDivElement
readonly $setting: HTMLDivElement
readonly $info: HTMLDivElement
readonly $infoPanel: HTMLDivElement
readonly $infoClose: HTMLDivElement
readonly $contextmenu: HTMLDivElement
}
-73
View File
@@ -1,73 +0,0 @@
export interface Utils {
isBrowser: boolean
userAgent: string
isMobile: boolean
isSafari: boolean
isIOS: boolean
isIOS13: boolean
query: <T extends Element = Element>(selector: string, parent?: Document | HTMLElement) => T | null
queryAll: <T extends Element = Element>(selector: string, parent?: Document | HTMLElement) => T[]
addClass: (target: HTMLElement, className: string) => void
removeClass: (target: HTMLElement, className: string) => void
hasClass: (target: HTMLElement, className: string) => boolean
append: (target: HTMLElement, child: HTMLElement | string) => Element | ChildNode
remove: (target: HTMLElement) => HTMLElement
replaceElement: (newChild: HTMLElement, oldChild: HTMLElement) => HTMLElement
siblings: (target: HTMLElement) => HTMLElement[]
inverseClass: (target: HTMLElement, className: string) => void
createElement: <K extends keyof HTMLElementTagNameMap>(tag: K) => HTMLElementTagNameMap[K]
setStyle: <T extends keyof CSSStyleDeclaration>(
element: HTMLElement,
key: T,
value: string | CSSStyleDeclaration[T],
) => HTMLElement
setStyles: (element: HTMLElement, styles: Partial<CSSStyleDeclaration>) => HTMLElement
getStyle: {
(element: HTMLElement, key: keyof CSSStyleDeclaration, numberType?: true): number
(element: HTMLElement, key: keyof CSSStyleDeclaration, numberType: false): string
}
setStyleText: (id: string, cssText: string) => void
getRect: (el: HTMLElement) => { top: number, left: number, width: number, height: number }
tooltip: (target: HTMLElement, msg: string, pos?: string) => void
isInViewport: (target: HTMLElement, offset?: number) => boolean
includeFromEvent: (event: Event, target: HTMLElement) => boolean
getSafeAreaInsets: () => { top: number, right: number, bottom: number, left: number }
srtToVtt: (srtText: string) => string
vttToBlob: (vttText: string) => string
assToVtt: (assText: string) => string
getExt: (url: string) => string
download: (url: string, name: string) => void
loadImg: (url: string, scale?: number) => Promise<HTMLImageElement>
errorHandle: <T extends boolean>(condition: T, msg: string) => T extends true ? T : never
silencePromise: <T>(value: T) => T extends Promise<infer R> ? Promise<R | undefined> : T
def: {
/** Historical string-key signature; runtime returns obj. */
(obj: object, name: string, value: unknown): void
<T>(obj: T, name: PropertyKey, value: PropertyDescriptor & ThisType<T>): T
}
has: (obj: object, name: PropertyKey) => boolean
get: (obj: object, name: PropertyKey) => PropertyDescriptor | undefined
mergeDeep: <T extends object[]>(...args: T) => T[number]
sleep: (ms?: number) => Promise<void>
/** Historical return type; runtime discards the callback result and ignores context. */
debounce: <F extends (...args: any[]) => any>(func: F, wait: number, context?: object) => (...args: Parameters<F>) => ReturnType<F>
/** Historical return type; runtime discards the callback result. */
throttle: <F extends (...args: any[]) => any>(func: F, wait: number) => (...args: Parameters<F>) => ReturnType<F>
clamp: (num: number, a: number, b: number) => number
secondToTime: (second: number) => string
escape: (str: string) => string
unescape: (str: string) => string
capitalize: (str: string) => string
ArtPlayerError: new (message?: string, context?: ((...args: never[]) => unknown) | (abstract new (...args: never[]) => object)) => Error
getIcon: (key?: string, html?: string | HTMLElement) => HTMLElement
getComposedPath: (event: Event) => EventTarget[]
supportsFlex: () => boolean
}