From e947be8a8ecc922577b994ebd5086e465b468b1e Mon Sep 17 00:00:00 2001 From: Harvey Zack Date: Sun, 3 Aug 2025 18:21:59 +0800 Subject: [PATCH] feat: add danmuku plugin documentation and i18n setup instructions - Created a new documentation file for the danmuku plugin with code examples. - Added comprehensive language settings documentation, including default languages, importing languages, adding new languages, and modifying existing languages. - Updated the i18n setup examples to reflect the latest changes in language handling. --- docs/assets/ts/artplayer-plugin-ads.d.ts | 10 +-- .../assets/ts/artplayer-plugin-ambilight.d.ts | 10 +-- docs/assets/ts/artplayer-plugin-asr.d.ts | 5 +- .../ts/artplayer-plugin-auto-thumbnail.d.ts | 10 +-- docs/assets/ts/artplayer-plugin-chapter.d.ts | 10 +-- .../ts/artplayer-plugin-chromecast.d.ts | 10 +-- .../ts/artplayer-plugin-danmuku-mask.d.ts | 10 +-- docs/assets/ts/artplayer-plugin-danmuku.d.ts | 10 +-- .../ts/artplayer-plugin-dash-control.d.ts | 10 +-- .../ts/artplayer-plugin-hls-control.d.ts | 10 +-- docs/assets/ts/artplayer-plugin-iframe.d.ts | 10 ++- docs/assets/ts/artplayer-plugin-libass.d.ts | 12 ++- .../artplayer-plugin-multiple-subtitles.d.ts | 10 +-- docs/assets/ts/artplayer-plugin-vast.d.ts | 6 +- .../ts/artplayer-plugin-vtt-thumbnail.d.ts | 10 +-- docs/assets/ts/artplayer.d.ts | 81 ++++++++++--------- docs/compiled/artplayer-plugin-danmuku.esm.js | 2 +- .../artplayer-plugin-danmuku.esm.js.map | 2 +- docs/compiled/artplayer-plugin-danmuku.js | 2 +- .../artplayer-plugin-danmuku.legacy.js | 2 +- docs/document/404.html | 2 +- docs/document/advanced/built-in.html | 2 +- docs/document/advanced/class.html | 2 +- docs/document/advanced/event.html | 2 +- docs/document/advanced/global.html | 2 +- docs/document/advanced/plugin.html | 2 +- docs/document/advanced/property.html | 2 +- ...md.CofAV5RQ.js => en_index.md.CMmxHsOC.js} | 8 +- ...Q.lean.js => en_index.md.CMmxHsOC.lean.js} | 0 ...QyjGkb.js => en_start_i18n.md.zsx96Hk5.js} | 2 +- ...n.js => en_start_i18n.md.zsx96Hk5.lean.js} | 0 ...ex.md.CY_kSBzI.js => index.md.8qqrK4z3.js} | 8 +- ...SBzI.lean.js => index.md.8qqrK4z3.lean.js} | 0 ...TqgT5.js => plugin_danmuku.md.DNoeLsr7.js} | 2 +- ....js => plugin_danmuku.md.DNoeLsr7.lean.js} | 0 ....C2GGh_gj.js => start_i18n.md.m1IFl0Jd.js} | 2 +- ...lean.js => start_i18n.md.m1IFl0Jd.lean.js} | 0 docs/document/component/contextmenu.html | 2 +- docs/document/component/controls.html | 2 +- docs/document/component/layers.html | 2 +- docs/document/component/setting.html | 2 +- docs/document/en/advanced/built-in.html | 2 +- docs/document/en/advanced/class.html | 2 +- docs/document/en/advanced/event.html | 2 +- docs/document/en/advanced/global.html | 2 +- docs/document/en/advanced/plugin.html | 2 +- docs/document/en/advanced/property.html | 2 +- docs/document/en/component/contextmenu.html | 2 +- docs/document/en/component/controls.html | 2 +- docs/document/en/component/layers.html | 2 +- docs/document/en/component/setting.html | 2 +- docs/document/en/index.html | 12 +-- docs/document/en/start/i18n.html | 6 +- docs/document/en/start/option.html | 2 +- docs/document/hashmap.json | 2 +- docs/document/index.html | 12 +-- docs/document/plugin/danmuku.html | 6 +- docs/document/start/i18n.html | 6 +- docs/document/start/option.html | 2 +- docs/uncompiled/artplayer/index.js | 2 +- docs/uncompiled/artplayer/index.js.map | 2 +- .../dist/artplayer-plugin-danmuku.esm.js | 2 +- .../dist/artplayer-plugin-danmuku.esm.js.map | 2 +- .../dist/artplayer-plugin-danmuku.js | 2 +- .../dist/artplayer-plugin-danmuku.legacy.js | 2 +- packages/artplayer/types/option.d.ts | 2 - scripts/build-ts.js | 56 ++++++++----- 67 files changed, 216 insertions(+), 198 deletions(-) rename docs/document/assets/{en_index.md.CofAV5RQ.js => en_index.md.CMmxHsOC.js} (98%) rename docs/document/assets/{en_index.md.CofAV5RQ.lean.js => en_index.md.CMmxHsOC.lean.js} (100%) rename docs/document/assets/{en_start_i18n.md.r8QyjGkb.js => en_start_i18n.md.zsx96Hk5.js} (98%) rename docs/document/assets/{en_start_i18n.md.r8QyjGkb.lean.js => en_start_i18n.md.zsx96Hk5.lean.js} (100%) rename docs/document/assets/{index.md.CY_kSBzI.js => index.md.8qqrK4z3.js} (98%) rename docs/document/assets/{index.md.CY_kSBzI.lean.js => index.md.8qqrK4z3.lean.js} (100%) rename docs/document/assets/{plugin_danmuku.md.U_aTqgT5.js => plugin_danmuku.md.DNoeLsr7.js} (99%) rename docs/document/assets/{plugin_danmuku.md.U_aTqgT5.lean.js => plugin_danmuku.md.DNoeLsr7.lean.js} (100%) rename docs/document/assets/{start_i18n.md.C2GGh_gj.js => start_i18n.md.m1IFl0Jd.js} (98%) rename docs/document/assets/{start_i18n.md.C2GGh_gj.lean.js => start_i18n.md.m1IFl0Jd.lean.js} (100%) diff --git a/docs/assets/ts/artplayer-plugin-ads.d.ts b/docs/assets/ts/artplayer-plugin-ads.d.ts index f9584cecb..dd3cde90e 100644 --- a/docs/assets/ts/artplayer-plugin-ads.d.ts +++ b/docs/assets/ts/artplayer-plugin-ads.d.ts @@ -1,8 +1,3 @@ -import type Artplayer from 'artplayer' - -export = artplayerPluginAds -export as namespace artplayerPluginAds; - interface Option { /** * 广告源文本,支持视频链接、图片链接、HTML文本 @@ -50,3 +45,8 @@ interface Ads { } declare const artplayerPluginAds: (option: Option) => (art: Artplayer) => Ads + +export default artplayerPluginAds + +export = artplayerPluginAds; +export as namespace artplayerPluginAds; \ No newline at end of file diff --git a/docs/assets/ts/artplayer-plugin-ambilight.d.ts b/docs/assets/ts/artplayer-plugin-ambilight.d.ts index 6b0290bc1..786b884f4 100644 --- a/docs/assets/ts/artplayer-plugin-ambilight.d.ts +++ b/docs/assets/ts/artplayer-plugin-ambilight.d.ts @@ -1,8 +1,3 @@ -import type Artplayer from 'artplayer' - -export = artplayerPluginAmbilight -export as namespace artplayerPluginAmbilight; - interface Option { blur?: string opacity?: number @@ -18,3 +13,8 @@ interface Result { } declare const artplayerPluginAmbilight: (option: Option) => (art: Artplayer) => Result + +export default artplayerPluginAmbilight + +export = artplayerPluginAmbilight; +export as namespace artplayerPluginAmbilight; \ No newline at end of file diff --git a/docs/assets/ts/artplayer-plugin-asr.d.ts b/docs/assets/ts/artplayer-plugin-asr.d.ts index 8f08faefe..a6372bd7d 100644 --- a/docs/assets/ts/artplayer-plugin-asr.d.ts +++ b/docs/assets/ts/artplayer-plugin-asr.d.ts @@ -1,5 +1,3 @@ -import type Artplayer from 'artplayer' - export = artplayerPluginAsr export as namespace artplayerPluginAsr; @@ -24,3 +22,6 @@ interface AsrPluginInstance { } declare function artplayerPluginAsr(option?: AsrPluginOption): (art: Artplayer) => AsrPluginInstance + +export = artplayerPluginAsr; +export as namespace artplayerPluginAsr; \ No newline at end of file diff --git a/docs/assets/ts/artplayer-plugin-auto-thumbnail.d.ts b/docs/assets/ts/artplayer-plugin-auto-thumbnail.d.ts index 23bbb4dbc..dff0302ce 100644 --- a/docs/assets/ts/artplayer-plugin-auto-thumbnail.d.ts +++ b/docs/assets/ts/artplayer-plugin-auto-thumbnail.d.ts @@ -1,8 +1,3 @@ -import type Artplayer from 'artplayer' - -export = artplayerPluginAutoThumbnail -export as namespace artplayerPluginAutoThumbnail; - interface Option { url?: string width?: number @@ -15,3 +10,8 @@ interface Result { } declare const artplayerPluginAutoThumbnail: (option: Option) => (art: Artplayer) => Result + +export default artplayerPluginAutoThumbnail + +export = artplayerPluginAutoThumbnail; +export as namespace artplayerPluginAutoThumbnail; \ No newline at end of file diff --git a/docs/assets/ts/artplayer-plugin-chapter.d.ts b/docs/assets/ts/artplayer-plugin-chapter.d.ts index 3ce2a3c35..0c16baa40 100644 --- a/docs/assets/ts/artplayer-plugin-chapter.d.ts +++ b/docs/assets/ts/artplayer-plugin-chapter.d.ts @@ -1,8 +1,3 @@ -import type Artplayer from 'artplayer' - -export = artplayerPluginChapter -export as namespace artplayerPluginChapter; - type Chapters = { start: number end: number @@ -19,3 +14,8 @@ interface Result { } declare const artplayerPluginChapter: (option: Option) => (art: Artplayer) => Result + +export default artplayerPluginChapter + +export = artplayerPluginChapter; +export as namespace artplayerPluginChapter; \ No newline at end of file diff --git a/docs/assets/ts/artplayer-plugin-chromecast.d.ts b/docs/assets/ts/artplayer-plugin-chromecast.d.ts index 47ead352e..4d3aadd12 100644 --- a/docs/assets/ts/artplayer-plugin-chromecast.d.ts +++ b/docs/assets/ts/artplayer-plugin-chromecast.d.ts @@ -1,8 +1,3 @@ -import type Artplayer from 'artplayer' - -export = artplayerPluginChromecast -export as namespace artplayerPluginChromecast; - interface Option { url?: string sdk?: string @@ -15,3 +10,8 @@ interface Chromecast { } declare const artplayerPluginChromecast: (option: Option) => (art: Artplayer) => Chromecast + +export default artplayerPluginChromecast + +export = artplayerPluginChromecast; +export as namespace artplayerPluginChromecast; \ No newline at end of file diff --git a/docs/assets/ts/artplayer-plugin-danmuku-mask.d.ts b/docs/assets/ts/artplayer-plugin-danmuku-mask.d.ts index 8916518dd..b2c996b79 100644 --- a/docs/assets/ts/artplayer-plugin-danmuku-mask.d.ts +++ b/docs/assets/ts/artplayer-plugin-danmuku-mask.d.ts @@ -1,8 +1,3 @@ -import type Artplayer from 'artplayer' - -export = artplayerPluginDanmukuMask -export as namespace artplayerPluginDanmukuMask; - interface Option { solutionPath?: string modelSelection?: number @@ -23,3 +18,8 @@ interface Result { } declare const artplayerPluginDanmukuMask: (option?: Option) => (art: Artplayer) => Result + +export default artplayerPluginDanmukuMask + +export = artplayerPluginDanmukuMask; +export as namespace artplayerPluginDanmukuMask; \ No newline at end of file diff --git a/docs/assets/ts/artplayer-plugin-danmuku.d.ts b/docs/assets/ts/artplayer-plugin-danmuku.d.ts index 016efdb7d..80a7ef540 100644 --- a/docs/assets/ts/artplayer-plugin-danmuku.d.ts +++ b/docs/assets/ts/artplayer-plugin-danmuku.d.ts @@ -1,8 +1,3 @@ -import type Artplayer from 'artplayer' - -export = artplayerPluginDanmuku -export as namespace artplayerPluginDanmuku; - type Mode = 0 | 1 | 2 type Danmuku = Danmu[] | string | (() => Promise) | Promise @@ -253,3 +248,8 @@ interface Result { } declare const artplayerPluginDanmuku: (option: Option) => (art: Artplayer) => Result + +export default artplayerPluginDanmuku + +export = artplayerPluginDanmuku; +export as namespace artplayerPluginDanmuku; \ No newline at end of file diff --git a/docs/assets/ts/artplayer-plugin-dash-control.d.ts b/docs/assets/ts/artplayer-plugin-dash-control.d.ts index adf60d0de..35057bb07 100644 --- a/docs/assets/ts/artplayer-plugin-dash-control.d.ts +++ b/docs/assets/ts/artplayer-plugin-dash-control.d.ts @@ -1,8 +1,3 @@ -import type Artplayer from 'artplayer' - -export = artplayerPluginDashControl -export as namespace artplayerPluginDashControl; - interface Config { control?: boolean setting?: boolean @@ -15,3 +10,8 @@ declare const artplayerPluginDashControl: (option: { quality?: Config, audio?: C name: 'artplayerPluginDashControl' update: () => void } + +export default artplayerPluginDashControl + +export = artplayerPluginDashControl; +export as namespace artplayerPluginDashControl; \ No newline at end of file diff --git a/docs/assets/ts/artplayer-plugin-hls-control.d.ts b/docs/assets/ts/artplayer-plugin-hls-control.d.ts index c7a4ce996..01c881339 100644 --- a/docs/assets/ts/artplayer-plugin-hls-control.d.ts +++ b/docs/assets/ts/artplayer-plugin-hls-control.d.ts @@ -1,8 +1,3 @@ -import type Artplayer from 'artplayer' - -export = artplayerPluginHlsControl -export as namespace artplayerPluginHlsControl; - interface Config { control?: boolean setting?: boolean @@ -15,3 +10,8 @@ declare const artplayerPluginHlsControl: (option: { quality?: Config, audio?: Co name: 'artplayerPluginHlsControl' update: () => void } + +export default artplayerPluginHlsControl + +export = artplayerPluginHlsControl; +export as namespace artplayerPluginHlsControl; \ No newline at end of file diff --git a/docs/assets/ts/artplayer-plugin-iframe.d.ts b/docs/assets/ts/artplayer-plugin-iframe.d.ts index 6536cf537..f5ebf54f5 100644 --- a/docs/assets/ts/artplayer-plugin-iframe.d.ts +++ b/docs/assets/ts/artplayer-plugin-iframe.d.ts @@ -1,6 +1,3 @@ -export = ArtplayerPluginIframe -export as namespace ArtplayerPluginIframe; - interface Message { type: string data: any @@ -15,7 +12,7 @@ declare class ArtplayerPluginIframe { static onMessage(event: MessageEvent & { data: Message }): void static inject(): void - readonly promises: Record + readonly promises: Record any, reject: (...args: any[]) => any }> readonly injected: boolean readonly destroyed: boolean readonly $iframe: HTMLIFrameElement @@ -28,3 +25,8 @@ declare class ArtplayerPluginIframe { message(callback: (...args: any[]) => any): void destroy(): void } + +export default ArtplayerPluginIframe + +export = artplayerPluginIframe; +export as namespace artplayerPluginIframe; \ No newline at end of file diff --git a/docs/assets/ts/artplayer-plugin-libass.d.ts b/docs/assets/ts/artplayer-plugin-libass.d.ts index cc79e0570..ae373d1b6 100644 --- a/docs/assets/ts/artplayer-plugin-libass.d.ts +++ b/docs/assets/ts/artplayer-plugin-libass.d.ts @@ -1,10 +1,3 @@ -import type SubtitlesOctopus from '@hrgui/libass-wasm-ts' -import type Artplayer from 'artplayer' -import type { Options } from 'libass-wasm' - -export = artplayerPluginAss -export as namespace artplayerPluginAss; - declare const artplayerPluginAss: (options: Options) => (art: Artplayer) => { name: 'artplayerPluginLibass' libass: SubtitlesOctopus @@ -15,3 +8,8 @@ declare const artplayerPluginAss: (options: Options) => (art: Artplayer) => { hide: () => void destroy: () => void } + +export default artplayerPluginAss + +export = artplayerPluginLibass; +export as namespace artplayerPluginLibass; \ No newline at end of file diff --git a/docs/assets/ts/artplayer-plugin-multiple-subtitles.d.ts b/docs/assets/ts/artplayer-plugin-multiple-subtitles.d.ts index 1053c3238..4d6161dff 100644 --- a/docs/assets/ts/artplayer-plugin-multiple-subtitles.d.ts +++ b/docs/assets/ts/artplayer-plugin-multiple-subtitles.d.ts @@ -1,8 +1,3 @@ -import type Artplayer from 'artplayer' - -export = artplayerPluginMultipleSubtitles -export as namespace artplayerPluginMultipleSubtitles; - declare const artplayerPluginMultipleSubtitles: (option: { subtitles: { url?: string @@ -14,3 +9,8 @@ declare const artplayerPluginMultipleSubtitles: (option: { }) => (art: Artplayer) => { name: 'multipleSubtitles' } + +export default artplayerPluginMultipleSubtitles + +export = artplayerPluginMultipleSubtitles; +export as namespace artplayerPluginMultipleSubtitles; \ No newline at end of file diff --git a/docs/assets/ts/artplayer-plugin-vast.d.ts b/docs/assets/ts/artplayer-plugin-vast.d.ts index e46ee978c..1b80f9000 100644 --- a/docs/assets/ts/artplayer-plugin-vast.d.ts +++ b/docs/assets/ts/artplayer-plugin-vast.d.ts @@ -1,6 +1,3 @@ -import type { Player } from '@glomex/vast-ima-player' -import type Artplayer from 'artplayer' - export = artplayerPluginVast export as namespace artplayerPluginVast; @@ -32,3 +29,6 @@ export interface ArtplayerPluginVastInstance { declare function artplayerPluginVast( option: ArtplayerPluginVastOption, ): (art: Artplayer) => ArtplayerPluginVastInstance + +export = artplayerPluginVast; +export as namespace artplayerPluginVast; \ No newline at end of file diff --git a/docs/assets/ts/artplayer-plugin-vtt-thumbnail.d.ts b/docs/assets/ts/artplayer-plugin-vtt-thumbnail.d.ts index 59f5b290f..aaed1e528 100644 --- a/docs/assets/ts/artplayer-plugin-vtt-thumbnail.d.ts +++ b/docs/assets/ts/artplayer-plugin-vtt-thumbnail.d.ts @@ -1,10 +1,10 @@ -import type Artplayer from 'artplayer' - -export = artplayerPluginVttThumbnail -export as namespace artplayerPluginVttThumbnail; - declare const artplayerPluginVttThumbnail: (option: { vtt?: string, style?: Partial }) => ( art: Artplayer, ) => { name: 'artplayerPluginVttThumbnail' } + +export default artplayerPluginVttThumbnail + +export = artplayerPluginVttThumbnail; +export as namespace artplayerPluginVttThumbnail; \ No newline at end of file diff --git a/docs/assets/ts/artplayer.d.ts b/docs/assets/ts/artplayer.d.ts index 012fbd8bc..11588d07b 100644 --- a/docs/assets/ts/artplayer.d.ts +++ b/docs/assets/ts/artplayer.d.ts @@ -120,7 +120,7 @@ export interface Subtitle { onVttLoad?: (vtt: string) => string } -import Artplayer = require('./artplayer') + type Props = { html: string @@ -135,7 +135,7 @@ type Props = { $parent: Setting $parents: Setting[] $option: Setting[] - $events: Function[] + $events: Array<(...args: any[]) => any> $formatted: boolean } & Omit @@ -232,9 +232,9 @@ export interface Quality { url: string } -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) export type PlaybackRate = 0.5 | 0.75 | 1.0 | 1.25 | 1.5 | 1.75 | 2.0 | (number & Record) @@ -259,10 +259,8 @@ export declare class Player { set flip(state: Flip) get fullscreen(): boolean set fullscreen(state: boolean) - set fullscreenToggle(state: boolean) get fullscreenWeb(): boolean set fullscreenWeb(state: boolean) - set fullscreenWebToggle(state: boolean) get loaded(): number get loadedTime(): number get mini(): boolean @@ -281,8 +279,11 @@ export declare class Player { 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 @@ -296,7 +297,9 @@ export declare class Player { get subtitleOffset(): number set subtitleOffset(time: number) set switch(url: string) + get switch(): string set quality(quality: Quality[]) + get quality(): Quality[] get thumbnails(): Thumbnails set thumbnails(thumbnails: Thumbnails) pause(): void @@ -314,14 +317,14 @@ export declare class Player { autoHeight(): void } -import type { ComponentOption } from './component' -import type { CssVar } from './cssVar' -import type { I18n } from './i18n' -import type { Icons } from './icons' -import type { Quality } from './quality' -import type { Setting } from './setting' -import type { Subtitle } from './subtitle' -import Artplayer = require('./artplayer') + + + + + + + + export type CustomType = 'flv' | 'm3u8' | 'hls' | 'ts' | 'mpd' | 'torrent' | (string & Record) @@ -597,7 +600,7 @@ export interface Option { * Other video attribute */ moreVideoAttr?: Partial<{ - [key in keyof HTMLVideoElement as HTMLVideoElement[key] extends Function ? never : key]: HTMLVideoElement[key]; + [key in keyof HTMLVideoElement as HTMLVideoElement[key] extends (...args: any[]) => any ? never : key]: HTMLVideoElement[key]; }> /** @@ -625,8 +628,6 @@ export interface Option { > } -export default Option - export interface Icons { readonly loading: HTMLDivElement readonly state: HTMLDivElement @@ -715,8 +716,8 @@ interface I18nValue { export type I18n = Partial>> -import type { AspectRatio, Flip } from './player' -import type { Subtitle } from './subtitle' + + export type Bar = 'loaded' | 'played' | 'hover' @@ -918,7 +919,7 @@ export interface Config { ] } -import Artplayer = require('./artplayer') + export interface Selector { /** @@ -1041,22 +1042,19 @@ export interface ComponentOption { onSelect?: (this: Artplayer, selector: Selector, element: HTMLElement, event: Event) => void } -import type { Component } from './component' -import type { Config } from './config' -import type { Events } from './events' -import type { I18n } from './i18n' -import type { Icons } from './icons' -import type { Option } from './option' -import type { Setting, SettingOption } from './setting' -import type { Subtitle } from './subtitle' -import type { Template } from './template' -import type { Utils } from './utils' -import { Player } from './player' -export = Artplayer -export as namespace Artplayer; -declare class Artplayer extends Player { + + + + + + + + + + +export default class Artplayer extends Player { constructor(option: Option, readyCallback?: (this: Artplayer, art: Artplayer) => unknown) get Config(): Config @@ -1079,7 +1077,7 @@ declare class Artplayer extends Player { static readonly config: Config static readonly utils: Utils static readonly scheme: Record - static readonly Emitter: Function + static readonly Emitter: (...args: any[]) => any static readonly validator: (option: T, scheme: object) => T static readonly kindOf: (item: any) => string static readonly html: Artplayer['template']['html'] @@ -1138,13 +1136,13 @@ declare class Artplayer extends Player { on(name: T, fn: (...args: Events[T]) => unknown, ctx?: object): unknown once(name: T, fn: (...args: Events[T]) => unknown, ctx?: object): unknown emit(name: T, ...args: unknown[]): unknown - off(name: T, callback?: Function): unknown + off(name: T, callback?: ((...args: Events[T]) => unknown)): unknown query: Artplayer['template']['query'] proxy: Artplayer['events']['proxy'] video: Artplayer['template']['$video'] - e: Record + e: Record any, ctx: unknown }[]> destroy(removeHtml?: boolean): void @@ -1209,7 +1207,7 @@ declare class Artplayer extends Player { readonly hotkey: { keys: Record any)[]> add: (key: string, callback: (this: Artplayer, event: Event) => any) => Artplayer['hotkey'] - remove: (key: string, callback: Function) => Artplayer['hotkey'] + remove: (key: string, callback: (event: Event) => any) => Artplayer['hotkey'] } readonly mask: Component @@ -1229,4 +1227,7 @@ declare class Artplayer extends Player { ) => Promise | Artplayer['plugins'] [pluginName: string]: any } -} \ No newline at end of file +} + +export = Artplayer; +export as namespace Artplayer; \ No newline at end of file diff --git a/docs/compiled/artplayer-plugin-danmuku.esm.js b/docs/compiled/artplayer-plugin-danmuku.esm.js index 4b86f6440..92e83677e 100644 --- a/docs/compiled/artplayer-plugin-danmuku.esm.js +++ b/docs/compiled/artplayer-plugin-danmuku.esm.js @@ -5,5 +5,5 @@ * (c) 2017-2025 Harvey Zack * Released under the MIT License. */ -!function(t,e,i,a,n,o,s,r){var l="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},d="function"==typeof l[a]&&l[a],p=d.i||{},u=d.cache||{},h="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function m(e,i){if(!u[e]){if(!t[e]){if(n[e])return n[e];var o="function"==typeof l[a]&&l[a];if(!i&&o)return o(e,!0);if(d)return d(e,!0);if(h&&"string"==typeof e)return h(e);var s=Error("Cannot find module '"+e+"'");throw s.code="MODULE_NOT_FOUND",s}p.resolve=function(i){var a=t[e][1][i];return null!=a?a:i},p.cache={};var r=u[e]=new m.Module(e);t[e][0].call(r.exports,p,r,r.exports,l)}return u[e].exports;function p(t){var e=p.resolve(t);return!1===e?{}:m(e)}}m.isParcelRequire=!0,m.Module=function(t){this.id=t,this.bundle=m,this.require=h,this.exports={}},m.modules=t,m.cache=u,m.parent=d,m.distDir=void 0,m.publicUrl=void 0,m.devServer=void 0,m.i=p,m.register=function(e,i){t[e]=[function(t,e){e.exports=i},{}]},Object.defineProperty(m,"root",{get:function(){return l[a]}}),l[a]=m;for(var c=0;cu);var o=t("./danmuku"),s=n.interopDefault(o),r=t("./heatmap"),l=n.interopDefault(r),d=t("./setting"),p=n.interopDefault(d);function u(t){return e=>{let i=new(0,s.default)(e,t),a=new(0,p.default)(e,i);return i.option.heatmap&&(0,l.default)(e,i,i.option.heatmap),{name:"artplayerPluginDanmuku",emit:i.emit.bind(i),load:i.load.bind(i),config:i.config.bind(i),hide:i.hide.bind(i),show:i.show.bind(i),reset:i.reset.bind(i),mount:a.mount.bind(a),get option(){return i.option},get isHide(){return i.isHide},get isStop(){return i.isStop}}}}u.icons=p.default.icons,"undefined"!=typeof window&&(window.artplayerPluginDanmuku=u)},{"./danmuku":"6C7g0","./heatmap":"h2ayY","./setting":"90QKZ","@parcel/transformer-js/src/esmodule-helpers.js":"5lQoW"}],"6C7g0":[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i);var o=t("bundle-text:./worker"),s=n.interopDefault(o),r=t("./bilibili");class l{constructor(t,e){let{constructor:i,template:a}=t;this.utils=i.utils,this.validator=i.validator,this.$danmuku=a.$danmuku,this.$player=a.$player,this.art=t,this.queue=[],this.$refs=[],this.isStop=!1,this.isHide=!1,this.timer=null,this.index=0,this.option=l.option,this.states={wait:[],ready:[],emit:[],stop:[]},this.config(e,!0);let n=new Blob([s.default.replace("export{e as default};","")],{type:"application/javascript"});this.worker=new Worker(URL.createObjectURL(n)),this.start=this.start.bind(this),this.stop=this.stop.bind(this),this.reset=this.reset.bind(this),this.resize=this.resize.bind(this),this.destroy=this.destroy.bind(this),t.on("video:play",this.start),t.on("video:playing",this.start),t.on("video:pause",this.stop),t.on("video:waiting",this.stop),t.on("destroy",this.destroy),t.on("resize",this.resize),this.load()}static get option(){return{danmuku:[],speed:5,margin:[10,"25%"],opacity:1,color:"#FFFFFF",mode:0,modes:[0,1,2],fontSize:25,antiOverlap:!0,synchronousPlayback:!1,mount:void 0,heatmap:!1,width:512,points:[],filter:()=>!0,beforeEmit:()=>!0,beforeVisible:()=>!0,visible:!0,emitter:!0,maxLength:200,lockTime:5,theme:"dark",OPACITY:{},FONT_SIZE:{},MARGIN:{},SPEED:{},COLOR:[]}}static get scheme(){return{danmuku:"array|function|string",speed:"number",margin:"array",opacity:"number",color:"string",mode:"number",modes:"array",fontSize:"number|string",antiOverlap:"boolean",synchronousPlayback:"boolean",mount:"?htmldivelement|string",heatmap:"object|boolean",width:"number",points:"array",filter:"function",beforeEmit:"function",beforeVisible:"function",visible:"boolean",emitter:"boolean",maxLength:"number",lockTime:"number",theme:"string",OPACITY:"object",FONT_SIZE:"object",MARGIN:"object",SPEED:"object",COLOR:"array"}}static get cssText(){return` user-select: none; position: absolute; white-space: pre; pointer-events: none; perspective: 500px; display: inline-block; will-change: transform; font-weight: normal; line-height: 1.125; visibility: hidden; font-family: SimHei, "Microsoft JhengHei", Arial, Helvetica, sans-serif; text-shadow: rgb(0, 0, 0) 1px 0px 1px, rgb(0, 0, 0) 0px 1px 1px, rgb(0, 0, 0) 0px -1px 1px, rgb(0, 0, 0) -1px 0px 1px; `}get isRotate(){return this.art.plugins?.autoOrientation?.state}get marginTop(){let{clamp:t}=this.utils,e=this.option.margin[0],{clientHeight:i}=this.$player;return"number"==typeof e?t(e,0,i):"string"==typeof e&&e.endsWith("%")?t(i*(Number.parseFloat(e)/100),0,i):l.option.margin[0]}get marginBottom(){let{clamp:t}=this.utils,e=this.option.margin[1],{clientHeight:i}=this.$player;return"number"==typeof e?t(e,0,i):"string"==typeof e&&e.endsWith("%")?t(i*(Number.parseFloat(e)/100),0,i):l.option.margin[1]}get fontSize(){let{clamp:t}=this.utils,{clientHeight:e}=this.$player,i=this.option.fontSize;return"number"==typeof i?Math.round(t(i,12,e)):"string"==typeof i&&i.endsWith("%")?Math.round(t(e*(Number.parseFloat(i)/100),12,e)):l.option.fontSize}get $ref(){let t=this.$refs.pop()||document.createElement("div");return t.style.cssText=l.cssText,t.dataset.mode="",t.className="",t}get readys(){let{currentTime:t}=this.art,e=[];return this.filter("ready",t=>e.push(t)),this.filter("wait",i=>{t+.1>=i.time&&i.time>=t-.1&&e.push(i)}),e}get visibles(){let t=[],{clientWidth:e}=this.$player,i=this.getLeft(this.$player);return this.filter("emit",a=>{let n=a.$ref.offsetTop,o=this.getLeft(a.$ref)-i,s=a.$ref.clientHeight,r=a.$ref.clientWidth,l=o+r,d=l/a.$restTime,p={};p.top=n,p.left=o,p.height=s,p.width=r,p.right=e-l,p.speed=d,p.distance=l,p.time=a.$restTime,p.mode=a.mode,t.push(p)}),t}get speed(){return this.option.synchronousPlayback&&this.art.playbackRate?this.option.speed/Number(this.art.playbackRate):this.option.speed}async load(t){let{errorHandle:e}=this.utils,i=[],a=t||this.option.danmuku;try{"function"==typeof a?i=await a():a instanceof Promise?i=await a:"string"==typeof a?i=await (0,r.bilibiliDanmuParseFromUrl)(a):Array.isArray(a)&&(i=a),e(Array.isArray(i),"Danmuku need return an array as result"),void 0===t&&(this.reset(),this.queue=[],this.states={wait:[],ready:[],emit:[],stop:[]},this.$refs=[],this.$danmuku.textContent="");for(let t=0;tJSON.stringify(this.option[e])!==JSON.stringify(t[e]))||e)&&(this.option=Object.assign({},l.option,this.option,t),this.validator(this.option,l.scheme),this.option.mode=i(this.option.mode,0,2),this.option.speed=i(this.option.speed,1,10),this.option.opacity=i(this.option.opacity,0,1),this.option.lockTime=i(this.option.lockTime,1,60),this.option.maxLength=i(this.option.maxLength,1,1e3),this.option.mount=this.option.mount||a,t.fontSize&&this.reset(),this.option.visible?this.show():this.hide(),this.art.emit("artplayerPluginDanmuku:config",this.option)),this}getLeft(t){let e=t.getBoundingClientRect();return this.isRotate?e.top:e.left}postMessage(t={}){return new Promise(e=>{t.id=Date.now(),this.worker.postMessage(t),this.worker.onmessage=i=>{let{data:a}=i;a.id===t.id&&e(a)}})}filter(t,e){let i=this.states[t]||[];for(let t=0;te!==t),t.$state=e,t.$ref&&(t.$ref.dataset.state=e),this.states[e].push(t)}makeWait(t){this.setState(t,"wait"),t.$ref&&(t.$ref.style.cssText=l.cssText,t.$ref.style.visibility="hidden",t.$ref.style.marginLeft="0px",t.$ref.style.transform="translateX(0px)",t.$ref.style.transition="transform 0s linear 0s",this.$refs.push(t.$ref),t.$ref=null)}update(){let{setStyles:t}=this.utils;return this.timer=window.requestAnimationFrame(async()=>{if(this.art.playing&&!this.isHide){this.filter("emit",t=>{let e=(Date.now()-t.$lastStartTime)/1e3;t.$restTime-=e,t.$lastStartTime=Date.now(),t.$restTime<=0&&this.makeWait(t)});let e=this.readys;for(let i=0;i{0===e.mode&&(e.$ref.style.left=`${t}px`)}),this.filter("emit",e=>{if(e.$lastStartTime=Date.now(),0===e.mode){let i=t+e.$ref.clientWidth;e.$ref.style.left=`${t}px`,e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition=`transform ${e.$restTime}s linear 0s`}})}continue(){let{clientWidth:t}=this.$player;return this.filter("stop",e=>{if(this.setState(e,"emit"),e.$lastStartTime=Date.now(),0===e.mode){let i=t+e.$ref.clientWidth;e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition=`transform ${e.$restTime}s linear 0s`}}),this}suspend(){let{clientWidth:t}=this.$player;return this.filter("emit",e=>{if(this.setState(e,"stop"),0===e.mode){let i=t-(this.getLeft(e.$ref)-this.getLeft(this.$player));e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition="transform 0s linear 0s"}}),this}stop(){return this.isStop=!0,this.suspend(),window.cancelAnimationFrame(this.timer),this.art.emit("artplayerPluginDanmuku:stop"),this}start(){return this.isStop=!1,this.continue(),this.update(),this.art.emit("artplayerPluginDanmuku:start"),this}reset(){return this.queue.forEach(t=>this.makeWait(t)),this.art.emit("artplayerPluginDanmuku:reset"),this}show(){return this.isHide=!1,this.$danmuku.style.opacity=1,this.option.visible=!0,this.art.emit("artplayerPluginDanmuku:show"),this}hide(){return this.isHide=!0,this.$danmuku.style.opacity=0,this.option.visible=!1,this.art.emit("artplayerPluginDanmuku:hide"),this}destroy(){this.stop(),this.worker.terminate(),this.art.off("video:play",this.start),this.art.off("video:playing",this.start),this.art.off("video:pause",this.stop),this.art.off("video:waiting",this.stop),this.art.off("resize",this.reset),this.art.off("destroy",this.destroy),this.art.emit("artplayerPluginDanmuku:destroy")}}i.default=l},{"bundle-text:./worker":"8UAYg","./bilibili":"8WBpY","@parcel/transformer-js/src/esmodule-helpers.js":"5lQoW"}],"8UAYg":[function(t,e,i,a){e.exports='!function(e,t,i,o,r,n,l,d){var u="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},f="function"==typeof u[o]&&u[o],p=f.i||{},s=f.cache||{},h="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function a(t,i){if(!s[t]){if(!e[t]){if(r[t])return r[t];var n="function"==typeof u[o]&&u[o];if(!i&&n)return n(t,!0);if(f)return f(t,!0);if(h&&"string"==typeof t)return h(t);var l=Error("Cannot find module \'"+t+"\'");throw l.code="MODULE_NOT_FOUND",l}p.resolve=function(i){var o=e[t][1][i];return null!=o?o:i},p.cache={};var d=s[t]=new a.Module(t);e[t][0].call(d.exports,p,d,d.exports,u)}return s[t].exports;function p(e){var t=p.resolve(e);return!1===t?{}:a(t)}}a.isParcelRequire=!0,a.Module=function(e){this.id=e,this.bundle=a,this.require=h,this.exports={}},a.modules=e,a.cache=s,a.parent=f,a.distDir=void 0,a.publicUrl=void 0,a.devServer=void 0,a.i=p,a.register=function(t,i){e[t]=[function(e,t){t.exports=i},{}]},Object.defineProperty(a,"root",{get:function(){return u[o]}}),u[o]=a;for(var c=0;ct.mode===e.mode&&t.top<=d).sort((e,t)=>e.top-t.top);if(0===u.length)if(2===e.mode)return d-e.height;else return n;if(u.unshift({type:"top",top:0,left:0,right:0,height:n,width:i,speed:0,distance:i}),u.push({type:"bottom",top:d,left:0,right:0,height:r,width:i,speed:0,distance:i}),2===e.mode)for(let t=u.length-2;t>=0;t-=1){let i=u[t],o=u[t+1],r=i.top+i.height;if(o.top-r>=e.height)return o.top-e.height}else for(let t=1;t=e.height)return r}let f=[];for(let e=1;et.every(t=>!(it.time))));return t&&t[0]?t[0].top:void 0}case 1:case 2:return}else{switch(e.mode){case 0:f.sort((e,t)=>{let i=Math.min(...t.map(e=>e.right)),o=Math.min(...e.map(e=>e.right));return i*t.length-o*e.length});break;case 1:case 2:f.sort((e,t)=>{let i=Math.max(...t.map(e=>e.width));return Math.max(...e.map(e=>e.width))*e.length-i*t.length})}return f[0][0].top}}onmessage=e=>{let{data:t}=e;t.id&&t.type&&globalThis.postMessage({result:(0,({getDanmuTop:r})[t.type])(t),id:t.id})}},{}]},["4KwZ6"],"4KwZ6","parcelRequire4dc0",{});let{"*":e}=parcelRequire4dc0("4KwZ6");export{e as default};'},{}],"8WBpY":[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");function o(t){switch(t){case 1:case 2:case 3:default:return 0;case 4:return 2;case 5:return 1}}function s(t){return"string"!=typeof t?[]:Array.from(t.matchAll(/]*?p="(?

[^"]+)"[^>]*>(?.*?)<\/d>/gs)).map(t=>{let e=t.groups.p.split(",");return e.length>=8?{text:t.groups.text.trim().replaceAll(""",'"').replaceAll("'","'").replaceAll("<","<").replaceAll(">",">").replaceAll("&","&"),time:Number(e[0]),mode:o(Number(e[1])),fontSize:Number(e[2]),color:`#${Number(e[3]).toString(16)}`,timestamp:Number(e[4]),pool:Number(e[5]),userID:e[6],rowID:Number(e[7])}:null}).filter(Boolean)}function r({data:t}){let{xml:e,id:i}=t;i&&e&&globalThis.postMessage({danmus:s(e),id:i})}function l(t){return new Promise(async e=>{let i=await fetch(t),a=await i.text();try{let t=function(){let t=new Blob([` ${o.toString()} ${s.toString()} onmessage = ${r.toString()} `],{type:"application/javascript"});return new Worker(URL.createObjectURL(t))}();t.onmessage=i=>{let{danmus:a,id:n}=i.data;n&&a&&(e(a),t.terminate())},t.postMessage({xml:a,id:Date.now()})}catch(t){console.error("Error parsing Bilibili Danmu:",t),e(s(a))}})}n.defineInteropFlag(i),n.export(i,"bilibiliDanmuParseFromUrl",()=>l)},{"@parcel/transformer-js/src/esmodule-helpers.js":"5lQoW"}],"5lQoW":[function(t,e,i,a){i.interopDefault=function(t){return t&&t.__esModule?t:{default:t}},i.defineInteropFlag=function(t){Object.defineProperty(t,"__esModule",{value:!0})},i.exportAll=function(t,e){return Object.keys(t).forEach(function(i){"default"===i||"__esModule"===i||Object.prototype.hasOwnProperty.call(e,i)||Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[i]}})}),e},i.export=function(t,e,i){Object.defineProperty(t,e,{enumerable:!0,get:i})}},{}],h2ayY:[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i),n.export(i,"default",()=>s);let o={map:(t,e,i,a,n)=>(t-e)*(n-a)/(i-e)+a,range(t,e,i){let a=Math.round(t/i)*i;return Array.from({length:Math.floor((e-t)/i)},(t,e)=>e*i+a)}};function s(t,e,i){let{query:a}=t.constructor.utils;t.controls.add({name:"heatmap",position:"top",html:"",style:{position:"absolute",top:"-100px",left:"0px",right:"0px",height:"100px",width:"100%",pointerEvents:"none"},mounted(n){let s=null,r=null;function l(d=[]){if(s=null,r=null,n.innerHTML="",!t.duration||t.option.isLive)return;let p={w:n.offsetWidth,h:n.offsetHeight},u={xMin:0,xMax:p.w,yMin:0,yMax:128,scale:.25,opacity:.2,minHeight:Math.floor(.05*p.h),sampling:Math.floor(p.w/100),smoothing:.2,flattening:.2};"object"==typeof i&&Object.assign(u,i);let h=[];if(Array.isArray(d)&&d.length)h=[...d];else{let i=t.duration/p.w;for(let t=0;t<=p.w;t+=u.sampling){let a=e.queue.filter(({time:e})=>e>t*i&&e<=(t+u.sampling)*i).length;h.push([t,a])}}if(0===h.length)return;let m=h[h.length-1],c=m[0],f=m[1];c!==p.w&&h.push([p.w,f]);let g=h.map(t=>t[1]),y=(Math.min(...g)+Math.max(...g))/2;for(let t=0;ty?1+u.scale:1-u.scale)+u.minHeight}let v=(t,e,i,a)=>{let n=function(t,e){let i=e[0]-t[0],a=e[1]-t[1];return{length:Math.sqrt(i**2+a**2),angle:Math.atan2(a,i)}}(e||t,i||t),s=o.map(Math.cos(n.angle)*u.flattening,0,1,1,0),r=n.angle*s+(a?Math.PI:0),l=n.length*u.smoothing;return[t[0]+Math.cos(r)*l,t[1]+Math.sin(r)*l]},x=h.map(t=>[o.map(t[0],u.xMin,u.xMax,0,p.w),o.map(t[1],u.yMin,u.yMax,p.h,0)]).reduce((t,e,i,a)=>0===i?`M ${a[a.length-1][0]},${p.h} L ${e[0]},${p.h} L ${e[0]},${e[1]}`:`${t} ${((t,e,i)=>{let a=v(i[e-1],i[e-2],t),n=v(t,i[e-1],i[e+1],!0),o=e===i.length-1?" z":"";return`C ${a[0]},${a[1]} ${n[0]},${n[1]} ${t[0]},${t[1]}${o}`})(e,i,a)}`,"");n.innerHTML=``,s=a("#heatmap-start",n),r=a("#heatmap-stop",n),s.setAttribute("offset",`${100*t.played}%`),r.setAttribute("offset",`${100*t.played}%`)}t.on("video:timeupdate",()=>{s&&r&&(s.setAttribute("offset",`${100*t.played}%`),r.setAttribute("offset",`${100*t.played}%`))}),t.on("setBar",(t,e)=>{s&&r&&"played"===t&&(s.setAttribute("offset",`${100*e}%`),r.setAttribute("offset",`${100*e}%`))}),t.on("ready",()=>l()),t.on("resize",()=>l()),t.on("artplayerPluginDanmuku:loaded",()=>l()),t.on("artplayerPluginDanmuku:points",t=>l(t))}})}},{"@parcel/transformer-js/src/esmodule-helpers.js":"5lQoW"}],"90QKZ":[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i);var o=t("bundle-text:./img/check_off.svg"),s=n.interopDefault(o),r=t("bundle-text:./img/check_on.svg"),l=n.interopDefault(r),d=t("bundle-text:./img/config.svg"),p=n.interopDefault(d),u=t("bundle-text:./img/mode_0_off.svg"),h=n.interopDefault(u),m=t("bundle-text:./img/mode_0_on.svg"),c=n.interopDefault(m),f=t("bundle-text:./img/mode_1_off.svg"),g=n.interopDefault(f),y=t("bundle-text:./img/mode_1_on.svg"),v=n.interopDefault(y),x=t("bundle-text:./img/mode_2_off.svg"),k=n.interopDefault(x),b=t("bundle-text:./img/mode_2_on.svg"),$=n.interopDefault(b),w=t("bundle-text:./img/off.svg"),M=n.interopDefault(w),D=t("bundle-text:./img/on.svg"),S=n.interopDefault(D),E=t("bundle-text:./img/style.svg"),A=n.interopDefault(E),q=t("bundle-text:./style.less"),T=n.interopDefault(q);if(i.default=class{constructor(t,e){this.art=t,this.danmuku=e,this.utils=t.constructor.utils;let{setStyle:i}=this.utils,{$controlsCenter:a}=t.template;i(a,"display","flex"),this.template={$controlsCenter:a,$mount:a,$danmuku:null,$toggle:null,$config:null,$configPanel:null,$configModes:null,$style:null,$stylePanel:null,$styleModes:null,$colors:null,$opacitySlider:null,$opacityValue:null,$marginSlider:null,$marginValue:null,$fontSizeSlider:null,$fontSizeValue:null,$speedSlider:null,$speedValue:null,$input:null,$send:null},this.slider={opacity:null,margin:null,fontSize:null,speed:null},this.emitting=!1,this.isLock=!1,this.timer=null,this.createTemplate(),this.createSliders(),this.createEvents(),this.mount(this.option.mount),t.on("resize",()=>this.resize()),t.on("fullscreen",t=>this.onFullscreen(t)),t.on("fullscreenWeb",t=>this.onFullscreen(t)),t.proxy(this.template.$config,"mouseenter",()=>{this.onMouseEnter({$control:this.template.$config,$panel:this.template.$configPanel})}),t.proxy(this.template.$style,"mouseenter",()=>{this.onMouseEnter({$control:this.template.$style,$panel:this.template.$stylePanel})})}static get icons(){return{$on:S.default,$off:M.default,$config:p.default,$style:A.default,$mode_0_off:h.default,$mode_0_on:c.default,$mode_1_off:g.default,$mode_1_on:v.default,$mode_2_off:k.default,$mode_2_on:$.default,$check_on:l.default,$check_off:s.default}}get option(){return this.danmuku.option}get outside(){return this.template.$mount!==this.template.$controlsCenter}get TEMPLATE(){let{option:t}=this;return`

${S.default}${M.default}
${p.default}
\u{6309}\u{7C7B}\u{578B}\u{5C4F}\u{853D}
${h.default}${c.default}
\u{6EDA}\u{52A8}
${g.default}${v.default}
\u{9876}\u{90E8}
${k.default}${$.default}
\u{5E95}\u{90E8}
${l.default}${s.default} \u{9632}\u{6B62}\u{5F39}\u{5E55}\u{91CD}\u{53E0}
${l.default}${s.default} \u{540C}\u{6B65}\u{89C6}\u{9891}\u{901F}\u{5EA6}
\u{4E0D}\u{900F}\u{660E}\u{5EA6}
\u{672A}\u{77E5}
\u{663E}\u{793A}\u{533A}\u{57DF}
\u{672A}\u{77E5}
\u{5F39}\u{5E55}\u{5B57}\u{53F7}
\u{672A}\u{77E5}
\u{5F39}\u{5E55}\u{901F}\u{5EA6}
\u{672A}\u{77E5}
${A.default}
\u{6A21}\u{5F0F}
${c.default}
\u{6EDA}\u{52A8}
${v.default}
\u{9876}\u{90E8}
${$.default}
\u{5E95}\u{90E8}
\u{989C}\u{8272}
${this.COLOR.map(t=>`
`).join("")}
\u{53D1}\u{9001}
`}get OPACITY(){return{min:0,max:100,steps:[],...this.option.OPACITY}}get FONT_SIZE(){return{min:12,max:120,steps:[],...this.option.FONT_SIZE}}get MARGIN(){return{min:0,max:3,steps:[{name:"1/4",value:[10,"75%"]},{name:"半屏",value:[10,"50%"]},{name:"3/4",value:[10,"25%"]},{name:"满屏",value:[10,10]}],...this.option.MARGIN}}get SPEED(){return{min:0,max:4,steps:[{name:"极慢",value:10},{name:"较慢",value:7.5,hide:!0},{name:"适中",value:5},{name:"较快",value:2.5,hide:!0},{name:"极快",value:1}],...this.option.SPEED}}get COLOR(){return this.option.COLOR.length?this.option.COLOR:["#FE0302","#FF7204","#FFAA02","#FFD302","#FFFF00","#A0EE00","#00CD00","#019899","#4266BE","#89D5FF","#CC0273","#222222","#9B9B9B","#FFFFFF"]}query(t){let{query:e}=this.utils,{$danmuku:i}=this.template;return e(t,i)}append(t,e){let{append:i}=this.utils;[...t.children].includes(e)||i(t,e)}setData(t,e){let{$player:i}=this.art.template,{$mount:a}=this.template;i.dataset[t]=e,this.outside&&(a.dataset[t]=e)}createTemplate(){let{createElement:t,tooltip:e}=this.utils,i=t("div");i.className="artplayer-plugin-danmuku",i.innerHTML=this.TEMPLATE,this.template.$danmuku=i,this.template.$toggle=this.query(".apd-toggle"),this.template.$config=this.query(".apd-config"),this.template.$configPanel=this.query(".apd-config-panel"),this.template.$configModes=this.query(".apd-config-mode .apd-modes"),this.template.$style=this.query(".apd-style"),this.template.$stylePanel=this.query(".apd-style-panel"),this.template.$styleModes=this.query(".apd-style-mode .apd-modes"),this.template.$colors=this.query(".apd-colors"),this.template.$antiOverlap=this.query(".apd-anti-overlap"),this.template.$syncVideo=this.query(".apd-sync-video"),this.template.$opacitySlider=this.query(".apd-config-opacity .apd-slider"),this.template.$opacityValue=this.query(".apd-config-opacity .apd-value"),this.template.$marginSlider=this.query(".apd-config-margin .apd-slider"),this.template.$marginValue=this.query(".apd-config-margin .apd-value"),this.template.$fontSizeSlider=this.query(".apd-config-fontSize .apd-slider"),this.template.$fontSizeValue=this.query(".apd-config-fontSize .apd-value"),this.template.$speedSlider=this.query(".apd-config-speed .apd-slider"),this.template.$speedValue=this.query(".apd-config-speed .apd-value"),this.template.$input=this.query(".apd-input"),this.template.$send=this.query(".apd-send");let{$toggle:a}=this.template;this.art.on("artplayerPluginDanmuku:show",()=>{e(a,"关闭弹幕")}),this.art.on("artplayerPluginDanmuku:hide",()=>{e(a,"打开弹幕")})}createEvents(){let{$toggle:t,$configModes:e,$styleModes:i,$colors:a,$antiOverlap:n,$syncVideo:o,$send:s,$input:r}=this.template;this.art.proxy(t,"click",()=>{this.danmuku.config({visible:!this.option.visible}),this.reset()}),this.art.proxy(e,"click",t=>{let e=t.target.closest(".apd-mode");if(!e)return;let i=Number(e.dataset.mode);this.option.modes.includes(i)?this.danmuku.config({modes:this.option.modes.filter(t=>t!==i)}):this.danmuku.config({modes:[...this.option.modes,i]}),this.reset()}),this.art.proxy(n,"click",()=>{this.danmuku.config({antiOverlap:!this.option.antiOverlap}),this.reset()}),this.art.proxy(o,"click",()=>{this.danmuku.config({synchronousPlayback:!this.option.synchronousPlayback}),this.reset()}),this.art.proxy(i,"click",t=>{let e=t.target.closest(".apd-mode");if(!e)return;let i=Number(e.dataset.mode);this.danmuku.config({mode:i}),this.reset()}),this.art.proxy(a,"click",t=>{let e=t.target.closest(".apd-color");e&&(this.danmuku.config({color:e.dataset.color}),this.reset())}),this.art.proxy(s,"click",()=>this.emit()),this.art.proxy(r,"keypress",t=>{"Enter"===t.key&&(t.preventDefault(),this.emit())})}createSliders(){this.slider.opacity=this.createSlider({...this.OPACITY,container:this.template.$opacitySlider,findIndex:()=>Math.round(100*this.option.opacity),onChange:t=>{let{$opacityValue:e}=this.template;e.textContent=`${t}%`,this.danmuku.config({opacity:t/100})}}),this.slider.margin=this.createSlider({...this.MARGIN,container:this.template.$marginSlider,findIndex:()=>this.MARGIN.steps.findIndex(t=>t.value[0]===this.option.margin[0]&&t.value[1]===this.option.margin[1]),onChange:t=>{let e=this.MARGIN.steps[t];if(!e)return;let{$marginValue:i}=this.template;i.textContent=e.name,this.danmuku.config({margin:e.value})}}),this.slider.fontSize=this.createSlider({...this.FONT_SIZE,container:this.template.$fontSizeSlider,findIndex:()=>this.danmuku.fontSize,onChange:t=>{let{$fontSizeValue:e}=this.template;e.textContent=`${t}px`,t!==this.danmuku.fontSize&&this.danmuku.config({fontSize:t})}}),this.slider.speed=this.createSlider({...this.SPEED,container:this.template.$speedSlider,findIndex:()=>this.SPEED.steps.findIndex(t=>t.value===this.option.speed),onChange:t=>{let e=this.SPEED.steps[t];if(!e)return;let{$speedValue:i}=this.template;i.textContent=e.name,this.danmuku.config({speed:e.value})}})}createSlider({min:t,max:e,container:i,findIndex:a,onChange:n,steps:o=[]}){let{query:s,clamp:r,setStyle:l}=this.utils;l(i,"touch-action","none"),i.innerHTML=`
${o.map(()=>'
').join("")}
${o.map(t=>t.hide?"":`
${t.name}
`).join("")}
`;let d=s(".apd-slider-dot",i),p=s(".apd-slider-progress",i),u=!1;function h(i=a()){if(ie)return;let s=(i-t)/(e-t);d.style.left=`${100*s}%`,0===o.length&&(p.style.width=d.style.left),n(i)}function m(a){let{top:n,height:o,left:s,width:l}=i.getBoundingClientRect();this.art.isRotate?h(Math.round(r(a.clientY-n,0,o)/o*(e-t)+t)):h(Math.round(r(a.clientX-s,0,l)/l*(e-t)+t))}return this.art.proxy(i,"click",t=>{m.call(this,t)}),this.art.proxy(i,"pointerdown",t=>{u=0===t.button}),this.art.proxy(document,"pointermove",t=>{u&&m.call(this,t)}),this.art.proxy(document,"pointerup",t=>{u&&(u=!1,m.call(this,t))}),{reset:h}}onFullscreen(t){let{$danmuku:e,$controlsCenter:i,$mount:a}=this.template;this.outside?t?this.append(i,e):this.append(a,e):this.append(i,e)}onMouseEnter({$control:t,$panel:e}){let{$player:i}=this.art.template,a=t.getBoundingClientRect(),n=e.getBoundingClientRect(),o=i.getBoundingClientRect(),s=n.width/2-a.width/2,r=o.left-(a.left-s),l=a.right+s-o.right;r>0?e.style.left=`${-s+r}px`:l>0?e.style.left=`${-s-l}px`:e.style.left=`${-s}px`}async emit(){let{$input:t}=this.template,e=t.value.trim();if(!e.length||this.isLock||this.emitting)return;let i={text:e,mode:this.option.mode,color:this.option.color,time:this.art.currentTime};try{this.emitting=!0;let e=await this.option.beforeEmit(i);if(this.emitting=!1,!0!==e)return;i.border=!0,delete i.time,this.danmuku.emit(i),t.value="",this.lock()}catch(t){console.error("Error emitting danmuku:",t),this.emitting=!1}}lock(){let{addClass:t}=this.utils,{$send:e}=this.template;this.isLock=!0;let i=this.option.lockTime;e.textContent=i,t(e,"apd-lock");let a=()=>{this.timer=setTimeout(()=>{0===i?this.unlock():(e.textContent=i-=1,a())},1e3)};a()}unlock(){let{removeClass:t}=this.utils,{$send:e}=this.template;clearTimeout(this.timer),this.isLock=!1,e.textContent="发送",t(e,"apd-lock")}resize(){if(this.outside||this.art.fullscreen||this.art.fullscreenWeb)return;let{$player:t,$controlsCenter:e}=this.art.template,{$danmuku:i}=this.template;this.art.widtht.dataset.color===this.option.color.toUpperCase());n&&t(n,"apd-active"),e(i,this.option.visible?"关闭弹幕":"打开弹幕"),this.resize()}mount(t){let{errorHandle:e}=this.utils,i="string"==typeof t?document.querySelector(t):t;e(i,`Can not find the mount point: ${t}`),this.append(i,this.template.$danmuku),this.template.$mount=i,this.reset()}},"undefined"!=typeof document){let t="artplayer-plugin-danmuku",e=document.getElementById(t);e||((e=document.createElement("style")).id=t,"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{document.head.appendChild(e)}):(document.head||document.documentElement).appendChild(e)),e.textContent=T.default}},{"bundle-text:./img/check_off.svg":"4tC1X","bundle-text:./img/check_on.svg":"iQql8","bundle-text:./img/config.svg":"DK7bp","bundle-text:./img/mode_0_off.svg":"fp5qd","bundle-text:./img/mode_0_on.svg":"fYNQe","bundle-text:./img/mode_1_off.svg":"gQMgY","bundle-text:./img/mode_1_on.svg":"5E8Hg","bundle-text:./img/mode_2_off.svg":"89iSb","bundle-text:./img/mode_2_on.svg":"2YEb0","bundle-text:./img/off.svg":"3WiJz","bundle-text:./img/on.svg":"5XkVj","bundle-text:./img/style.svg":"h2xX3","bundle-text:./style.less":"dHTK8","@parcel/transformer-js/src/esmodule-helpers.js":"5lQoW"}],"4tC1X":[function(t,e,i,a){e.exports=''},{}],iQql8:[function(t,e,i,a){e.exports=''},{}],DK7bp:[function(t,e,i,a){e.exports=''},{}],fp5qd:[function(t,e,i,a){e.exports=''},{}],fYNQe:[function(t,e,i,a){e.exports=''},{}],gQMgY:[function(t,e,i,a){e.exports=''},{}],"5E8Hg":[function(t,e,i,a){e.exports=''},{}],"89iSb":[function(t,e,i,a){e.exports=''},{}],"2YEb0":[function(t,e,i,a){e.exports=''},{}],"3WiJz":[function(t,e,i,a){e.exports=''},{}],"5XkVj":[function(t,e,i,a){e.exports=''},{}],h2xX3:[function(t,e,i,a){e.exports=''},{}],dHTK8:[function(t,e,i,a){e.exports='.artplayer-plugin-danmuku{z-index:99;color:#fff;flex-shrink:0;justify-content:center;align-items:center;gap:10px;width:100%;height:32px;font-size:12px;font-weight:300;display:flex;position:relative}.artplayer-plugin-danmuku .apd-icon{cursor:pointer;opacity:.75;fill:#fff;transition:all .2s}.artplayer-plugin-danmuku .apd-icon:hover{opacity:1}.artplayer-plugin-danmuku .apd-config{display:flex;position:relative}.artplayer-plugin-danmuku .apd-config .apd-config-panel{opacity:0;pointer-events:none;width:320px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-config .apd-config-panel .apd-config-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-config:hover .apd-config-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-config-mode,.artplayer-plugin-danmuku .apd-config-slider,.artplayer-plugin-danmuku .apd-config-other,.artplayer-plugin-danmuku .apd-style-mode{margin-bottom:15px}.artplayer-plugin-danmuku .apd-modes{align-items:center;gap:20px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-modes .apd-mode{cursor:pointer;text-align:center}.artplayer-plugin-danmuku .apd-modes .apd-mode:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-config-slider{align-items:center;gap:12px;display:flex}.artplayer-plugin-danmuku .apd-config-slider .apd-value{text-align:right;width:32px}.artplayer-plugin-danmuku .apd-slider{cursor:pointer;flex:1;justify-content:center;align-items:center;height:20px;display:flex;position:relative}.artplayer-plugin-danmuku .apd-slider .apd-slider-line{background-color:#ffffff40;border-radius:3px;width:100%;height:2px;position:relative;overflow:hidden}.artplayer-plugin-danmuku .apd-slider .apd-slider-points{justify-content:space-between;align-items:center;display:flex;position:absolute;inset:0}.artplayer-plugin-danmuku .apd-slider .apd-slider-points .apd-slider-point{background-color:#ffffff80;border-radius:50%;width:2px;height:2px}.artplayer-plugin-danmuku .apd-slider .apd-slider-progress{background-color:#00a1d6;width:0%;height:100%}.artplayer-plugin-danmuku .apd-slider .apd-slider-dot{background-color:#00a1d6;border-radius:50%;width:12px;height:12px;position:absolute;left:0%;transform:translate(-6px)}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps{color:#777;justify-content:space-between;align-items:center;width:calc(100% + 32px);display:flex;position:absolute;bottom:-12px}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps .apd-slider-step{text-align:center;flex-shrink:0;width:36px;scale:.95}.artplayer-plugin-danmuku .apd-config-other{align-items:center;gap:20px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-check-off,.artplayer-plugin-danmuku .apd-config-other .apd-check-on{width:16px;height:16px}.artplayer-plugin-danmuku .apd-config-other .apd-other{cursor:pointer;align-items:center;gap:2px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-other:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-emitter{background-color:#ffffff40;border-radius:5px;flex:1;align-items:center;height:100%;display:flex}.artplayer-plugin-danmuku .apd-style{justify-content:center;align-items:center;display:flex;position:relative}.artplayer-plugin-danmuku .apd-style .apd-style-panel{opacity:0;pointer-events:none;width:200px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-style .apd-style-panel .apd-style-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-style:hover .apd-style-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-colors{flex-wrap:wrap;gap:8px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-colors .apd-color{cursor:pointer;border-radius:2px;width:16px;height:16px}.artplayer-plugin-danmuku .apd-colors .apd-color.apd-active{border:1px solid #000;box-shadow:0 0 0 1px #fff}.artplayer-plugin-danmuku .apd-input{color:#fff;background-color:#0000;border:none;outline:none;flex:1;width:auto;min-width:0;height:100%;line-height:1}.artplayer-plugin-danmuku .apd-input::placeholder{color:#ffffff80}.artplayer-plugin-danmuku .apd-send{cursor:pointer;width:60px;height:100%;text-shadow:none;background-color:#00a1d6;border-top-right-radius:5px;border-bottom-right-radius:5px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.artplayer-plugin-danmuku .apd-send.apd-lock{cursor:not-allowed;color:#666;background-color:#e7e7e7}.art-controls-center .apd-emitter{flex:none;width:260px}.art-fullscreen .artplayer-plugin-danmuku,.art-fullscreen-web .artplayer-plugin-danmuku{gap:16px;height:38px}.art-fullscreen .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen-web .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-on,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-on{width:28px;height:28px}.art-fullscreen .artplayer-plugin-danmuku .apd-emitter,.art-fullscreen-web .artplayer-plugin-danmuku .apd-emitter{flex:none;width:400px}.art-video-player>.artplayer-plugin-danmuku{padding:0 10px;position:absolute;bottom:-40px;left:0;right:0}.art-video-player:has(>.artplayer-plugin-danmuku){margin-bottom:40px}[data-danmuku-emitter=false] .apd-emitter{display:none!important}[data-danmuku-emitter=false] .art-controls-center .artplayer-plugin-danmuku{justify-content:flex-end;gap:18px}[data-danmuku-emitter=false].art-fullscreen .art-controls-center .artplayer-plugin-danmuku,[data-danmuku-emitter=false].art-fullscreen-web .art-controls-center .artplayer-plugin-danmuku{gap:24px}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-icon{fill:#333}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-emitter{background-color:#f1f2f3}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input{color:#000}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input::placeholder{color:#0000004d}[data-danmuku-visible=false] .apd-toggle-off{display:block}[data-danmuku-visible=false] .apd-toggle-on,[data-danmuku-visible=true] .apd-toggle-off{display:none}[data-danmuku-visible=true] .apd-toggle-on{display:block}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-on{display:none}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-off,[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-on{display:block}[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-off,[data-danmuku-sync-video=false] .apd-sync-video .apd-check-on{display:none}[data-danmuku-sync-video=false] .apd-sync-video .apd-check-off,[data-danmuku-sync-video=true] .apd-sync-video .apd-check-on{display:block}[data-danmuku-sync-video=true] .apd-sync-video .apd-check-off{display:none}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-off{display:block}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-on{display:none}[data-danmuku-mode0=false] .art-danmuku [data-mode="0"]{opacity:0!important}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-off{display:none}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-on{display:block}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"]{color:#00a1d6}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"] path{fill:#00a1d6}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-off{display:block}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-on{display:none}[data-danmuku-mode1=false] .art-danmuku [data-mode="1"]{opacity:0!important}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-off{display:none}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-on{display:block}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"]{color:#00a1d6}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"] path{fill:#00a1d6}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-off{display:block}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-on{display:none}[data-danmuku-mode2=false] .art-danmuku [data-mode="2"]{opacity:0!important}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-off{display:none}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-on{display:block}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"]{color:#00a1d6}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"] path{fill:#00a1d6}'},{}]},["6ZbtA"],"6ZbtA","parcelRequire4dc0",{});let{default:t}=parcelRequire4dc0("6ZbtA");export{t as default}; +!function(t,e,i,a,n,o,s,r){var l="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},d="function"==typeof l[a]&&l[a],p=d.i||{},u=d.cache||{},h="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function m(e,i){if(!u[e]){if(!t[e]){if(n[e])return n[e];var o="function"==typeof l[a]&&l[a];if(!i&&o)return o(e,!0);if(d)return d(e,!0);if(h&&"string"==typeof e)return h(e);var s=Error("Cannot find module '"+e+"'");throw s.code="MODULE_NOT_FOUND",s}p.resolve=function(i){var a=t[e][1][i];return null!=a?a:i},p.cache={};var r=u[e]=new m.Module(e);t[e][0].call(r.exports,p,r,r.exports,l)}return u[e].exports;function p(t){var e=p.resolve(t);return!1===e?{}:m(e)}}m.isParcelRequire=!0,m.Module=function(t){this.id=t,this.bundle=m,this.require=h,this.exports={}},m.modules=t,m.cache=u,m.parent=d,m.distDir=void 0,m.publicUrl=void 0,m.devServer=void 0,m.i=p,m.register=function(e,i){t[e]=[function(t,e){e.exports=i},{}]},Object.defineProperty(m,"root",{get:function(){return l[a]}}),l[a]=m;for(var c=0;cu);var o=t("./danmuku"),s=n.interopDefault(o),r=t("./heatmap"),l=n.interopDefault(r),d=t("./setting"),p=n.interopDefault(d);function u(t){return e=>{let i=new(0,s.default)(e,t),a=new(0,p.default)(e,i);return i.option.heatmap&&(0,l.default)(e,i,i.option.heatmap),{name:"artplayerPluginDanmuku",emit:i.emit.bind(i),load:i.load.bind(i),config:i.config.bind(i),hide:i.hide.bind(i),show:i.show.bind(i),reset:i.reset.bind(i),mount:a.mount.bind(a),get option(){return i.option},get isHide(){return i.isHide},get isStop(){return i.isStop}}}}u.icons=p.default.icons,"undefined"!=typeof window&&(window.artplayerPluginDanmuku=u)},{"./danmuku":"6C7g0","./heatmap":"h2ayY","./setting":"90QKZ","@parcel/transformer-js/src/esmodule-helpers.js":"5lQoW"}],"6C7g0":[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i);var o=t("bundle-text:./worker"),s=n.interopDefault(o),r=t("./bilibili");class l{constructor(t,e){let{constructor:i,template:a}=t;this.utils=i.utils,this.validator=i.validator,this.$danmuku=a.$danmuku,this.$player=a.$player,this.art=t,this.queue=[],this.$refs=[],this.isStop=!1,this.isHide=!1,this.timer=null,this.index=0,this.option=l.option,this.states={wait:[],ready:[],emit:[],stop:[]},this.config(e,!0);let n=new Blob([s.default.replace("export{e as default};","")],{type:"application/javascript"});this.worker=new Worker(URL.createObjectURL(n)),this.start=this.start.bind(this),this.stop=this.stop.bind(this),this.reset=this.reset.bind(this),this.resize=this.resize.bind(this),this.destroy=this.destroy.bind(this),t.on("video:play",this.start),t.on("video:playing",this.start),t.on("video:pause",this.stop),t.on("video:waiting",this.stop),t.on("destroy",this.destroy),t.on("resize",this.resize),this.load()}static get option(){return{danmuku:[],speed:5,margin:[10,"25%"],opacity:1,color:"#FFFFFF",mode:0,modes:[0,1,2],fontSize:25,antiOverlap:!0,synchronousPlayback:!1,mount:void 0,heatmap:!1,width:512,points:[],filter:()=>!0,beforeEmit:()=>!0,beforeVisible:()=>!0,visible:!0,emitter:!0,maxLength:200,lockTime:5,theme:"dark",OPACITY:{},FONT_SIZE:{},MARGIN:{},SPEED:{},COLOR:[]}}static get scheme(){return{danmuku:"array|function|string",speed:"number",margin:"array",opacity:"number",color:"string",mode:"number",modes:"array",fontSize:"number|string",antiOverlap:"boolean",synchronousPlayback:"boolean",mount:"?htmldivelement|string",heatmap:"object|boolean",width:"number",points:"array",filter:"function",beforeEmit:"function",beforeVisible:"function",visible:"boolean",emitter:"boolean",maxLength:"number",lockTime:"number",theme:"string",OPACITY:"object",FONT_SIZE:"object",MARGIN:"object",SPEED:"object",COLOR:"array"}}static get cssText(){return` user-select: none; position: absolute; white-space: pre; pointer-events: none; perspective: 500px; display: inline-block; will-change: transform; font-weight: normal; line-height: 1.125; visibility: hidden; font-family: SimHei, "Microsoft JhengHei", Arial, Helvetica, sans-serif; text-shadow: rgb(0, 0, 0) 1px 0px 1px, rgb(0, 0, 0) 0px 1px 1px, rgb(0, 0, 0) 0px -1px 1px, rgb(0, 0, 0) -1px 0px 1px; `}get isRotate(){return this.art.plugins?.autoOrientation?.state}get marginTop(){let{clamp:t}=this.utils,e=this.option.margin[0],{clientHeight:i}=this.$player;return"number"==typeof e?t(e,0,i):"string"==typeof e&&e.endsWith("%")?t(i*(Number.parseFloat(e)/100),0,i):l.option.margin[0]}get marginBottom(){let{clamp:t}=this.utils,e=this.option.margin[1],{clientHeight:i}=this.$player;return"number"==typeof e?t(e,0,i):"string"==typeof e&&e.endsWith("%")?t(i*(Number.parseFloat(e)/100),0,i):l.option.margin[1]}get fontSize(){let{clamp:t}=this.utils,{clientHeight:e}=this.$player,i=this.option.fontSize;return"number"==typeof i?Math.round(t(i,12,e)):"string"==typeof i&&i.endsWith("%")?Math.round(t(e*(Number.parseFloat(i)/100),12,e)):l.option.fontSize}get $ref(){let t=this.$refs.pop()||document.createElement("div");return t.style.cssText=l.cssText,t.dataset.mode="",t.dataset.id="",t.className="",t}get readys(){let{currentTime:t}=this.art,e=[];return this.filter("ready",t=>e.push(t)),this.filter("wait",i=>{t+.1>=i.time&&i.time>=t-.1&&e.push(i)}),e}get visibles(){let t=[],{clientWidth:e}=this.$player,i=this.getLeft(this.$player);return this.filter("emit",a=>{let n=a.$ref.offsetTop,o=this.getLeft(a.$ref)-i,s=a.$ref.clientHeight,r=a.$ref.clientWidth,l=o+r,d=l/a.$restTime,p={};p.top=n,p.left=o,p.height=s,p.width=r,p.right=e-l,p.speed=d,p.distance=l,p.time=a.$restTime,p.mode=a.mode,t.push(p)}),t}get speed(){return this.option.synchronousPlayback&&this.art.playbackRate?this.option.speed/Number(this.art.playbackRate):this.option.speed}async load(t){let{errorHandle:e}=this.utils,i=[],a=t||this.option.danmuku;try{"function"==typeof a?i=await a():a instanceof Promise?i=await a:"string"==typeof a?i=await (0,r.bilibiliDanmuParseFromUrl)(a):Array.isArray(a)&&(i=a),e(Array.isArray(i),"Danmuku need return an array as result"),void 0===t&&(this.reset(),this.queue=[],this.states={wait:[],ready:[],emit:[],stop:[]},this.$refs=[],this.$danmuku.textContent="");for(let t=0;tJSON.stringify(this.option[e])!==JSON.stringify(t[e]))||e)&&(this.option=Object.assign({},l.option,this.option,t),this.validator(this.option,l.scheme),this.option.mode=i(this.option.mode,0,2),this.option.speed=i(this.option.speed,1,10),this.option.opacity=i(this.option.opacity,0,1),this.option.lockTime=i(this.option.lockTime,1,60),this.option.maxLength=i(this.option.maxLength,1,1e3),this.option.mount=this.option.mount||a,t.fontSize&&this.reset(),this.option.visible?this.show():this.hide(),this.art.emit("artplayerPluginDanmuku:config",this.option)),this}getLeft(t){let e=t.getBoundingClientRect();return this.isRotate?e.top:e.left}postMessage(t={}){return new Promise(e=>{t.id=Date.now(),this.worker.postMessage(t),this.worker.onmessage=i=>{let{data:a}=i;a.id===t.id&&e(a)}})}filter(t,e){let i=this.states[t]||[];for(let t=0;te!==t),t.$state=e,t.$ref&&(t.$ref.dataset.state=e),this.states[e].push(t)}makeWait(t){this.setState(t,"wait"),t.$ref&&(t.$ref.style.cssText=l.cssText,t.$ref.style.visibility="hidden",t.$ref.style.marginLeft="0px",t.$ref.style.transform="translateX(0px)",t.$ref.style.transition="transform 0s linear 0s",this.$refs.push(t.$ref),t.$ref=null)}update(){let{setStyles:t}=this.utils;return this.timer=window.requestAnimationFrame(async()=>{if(this.art.playing&&!this.isHide){this.filter("emit",t=>{let e=(Date.now()-t.$lastStartTime)/1e3;t.$restTime-=e,t.$lastStartTime=Date.now(),t.$restTime<=0&&this.makeWait(t)});let e=this.readys;for(let i=0;i{0===e.mode&&(e.$ref.style.left=`${t}px`)}),this.filter("emit",e=>{if(e.$lastStartTime=Date.now(),0===e.mode){let i=t+e.$ref.clientWidth;e.$ref.style.left=`${t}px`,e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition=`transform ${e.$restTime}s linear 0s`}})}continue(){let{clientWidth:t}=this.$player;return this.filter("stop",e=>{if(this.setState(e,"emit"),e.$lastStartTime=Date.now(),0===e.mode){let i=t+e.$ref.clientWidth;e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition=`transform ${e.$restTime}s linear 0s`}}),this}suspend(){let{clientWidth:t}=this.$player;return this.filter("emit",e=>{if(this.setState(e,"stop"),0===e.mode){let i=t-(this.getLeft(e.$ref)-this.getLeft(this.$player));e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition="transform 0s linear 0s"}}),this}stop(){return this.isStop=!0,this.suspend(),window.cancelAnimationFrame(this.timer),this.art.emit("artplayerPluginDanmuku:stop"),this}start(){return this.isStop=!1,this.continue(),this.update(),this.art.emit("artplayerPluginDanmuku:start"),this}reset(){return this.queue.forEach(t=>this.makeWait(t)),this.art.emit("artplayerPluginDanmuku:reset"),this}show(){return this.isHide=!1,this.$danmuku.style.opacity=1,this.option.visible=!0,this.art.emit("artplayerPluginDanmuku:show"),this}hide(){return this.isHide=!0,this.$danmuku.style.opacity=0,this.option.visible=!1,this.art.emit("artplayerPluginDanmuku:hide"),this}destroy(){this.stop(),this.worker.terminate(),this.art.off("video:play",this.start),this.art.off("video:playing",this.start),this.art.off("video:pause",this.stop),this.art.off("video:waiting",this.stop),this.art.off("resize",this.reset),this.art.off("destroy",this.destroy),this.art.emit("artplayerPluginDanmuku:destroy")}}i.default=l},{"bundle-text:./worker":"8UAYg","./bilibili":"8WBpY","@parcel/transformer-js/src/esmodule-helpers.js":"5lQoW"}],"8UAYg":[function(t,e,i,a){e.exports='!function(e,t,i,o,r,n,l,d){var u="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},f="function"==typeof u[o]&&u[o],p=f.i||{},s=f.cache||{},h="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function a(t,i){if(!s[t]){if(!e[t]){if(r[t])return r[t];var n="function"==typeof u[o]&&u[o];if(!i&&n)return n(t,!0);if(f)return f(t,!0);if(h&&"string"==typeof t)return h(t);var l=Error("Cannot find module \'"+t+"\'");throw l.code="MODULE_NOT_FOUND",l}p.resolve=function(i){var o=e[t][1][i];return null!=o?o:i},p.cache={};var d=s[t]=new a.Module(t);e[t][0].call(d.exports,p,d,d.exports,u)}return s[t].exports;function p(e){var t=p.resolve(e);return!1===t?{}:a(t)}}a.isParcelRequire=!0,a.Module=function(e){this.id=e,this.bundle=a,this.require=h,this.exports={}},a.modules=e,a.cache=s,a.parent=f,a.distDir=void 0,a.publicUrl=void 0,a.devServer=void 0,a.i=p,a.register=function(t,i){e[t]=[function(e,t){t.exports=i},{}]},Object.defineProperty(a,"root",{get:function(){return u[o]}}),u[o]=a;for(var c=0;ct.mode===e.mode&&t.top<=d).sort((e,t)=>e.top-t.top);if(0===u.length)if(2===e.mode)return d-e.height;else return n;if(u.unshift({type:"top",top:0,left:0,right:0,height:n,width:i,speed:0,distance:i}),u.push({type:"bottom",top:d,left:0,right:0,height:r,width:i,speed:0,distance:i}),2===e.mode)for(let t=u.length-2;t>=0;t-=1){let i=u[t],o=u[t+1],r=i.top+i.height;if(o.top-r>=e.height)return o.top-e.height}else for(let t=1;t=e.height)return r}let f=[];for(let e=1;et.every(t=>!(it.time))));return t&&t[0]?t[0].top:void 0}case 1:case 2:return}else{switch(e.mode){case 0:f.sort((e,t)=>{let i=Math.min(...t.map(e=>e.right)),o=Math.min(...e.map(e=>e.right));return i*t.length-o*e.length});break;case 1:case 2:f.sort((e,t)=>{let i=Math.max(...t.map(e=>e.width));return Math.max(...e.map(e=>e.width))*e.length-i*t.length})}return f[0][0].top}}onmessage=e=>{let{data:t}=e;t.id&&t.type&&globalThis.postMessage({result:(0,({getDanmuTop:r})[t.type])(t),id:t.id})}},{}]},["4KwZ6"],"4KwZ6","parcelRequire4dc0",{});let{"*":e}=parcelRequire4dc0("4KwZ6");export{e as default};'},{}],"8WBpY":[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");function o(t){switch(t){case 1:case 2:case 3:default:return 0;case 4:return 2;case 5:return 1}}function s(t){return"string"!=typeof t?[]:Array.from(t.matchAll(/]*?p="(?

[^"]+)"[^>]*>(?.*?)<\/d>/gs)).map(t=>{let e=t.groups.p.split(",");return e.length>=8?{text:t.groups.text.trim().replaceAll(""",'"').replaceAll("'","'").replaceAll("<","<").replaceAll(">",">").replaceAll("&","&"),time:Number(e[0]),mode:o(Number(e[1])),fontSize:Number(e[2]),color:`#${Number(e[3]).toString(16)}`,timestamp:Number(e[4]),pool:Number(e[5]),userID:e[6],rowID:Number(e[7])}:null}).filter(Boolean)}function r({data:t}){let{xml:e,id:i}=t;i&&e&&globalThis.postMessage({danmus:s(e),id:i})}function l(t){return new Promise(async e=>{let i=await fetch(t),a=await i.text();try{let t=function(){let t=new Blob([` ${o.toString()} ${s.toString()} onmessage = ${r.toString()} `],{type:"application/javascript"});return new Worker(URL.createObjectURL(t))}();t.onmessage=i=>{let{danmus:a,id:n}=i.data;n&&a&&(e(a),t.terminate())},t.postMessage({xml:a,id:Date.now()})}catch(t){console.error("Error parsing Bilibili Danmu:",t),e(s(a))}})}n.defineInteropFlag(i),n.export(i,"bilibiliDanmuParseFromUrl",()=>l)},{"@parcel/transformer-js/src/esmodule-helpers.js":"5lQoW"}],"5lQoW":[function(t,e,i,a){i.interopDefault=function(t){return t&&t.__esModule?t:{default:t}},i.defineInteropFlag=function(t){Object.defineProperty(t,"__esModule",{value:!0})},i.exportAll=function(t,e){return Object.keys(t).forEach(function(i){"default"===i||"__esModule"===i||Object.prototype.hasOwnProperty.call(e,i)||Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[i]}})}),e},i.export=function(t,e,i){Object.defineProperty(t,e,{enumerable:!0,get:i})}},{}],h2ayY:[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i),n.export(i,"default",()=>s);let o={map:(t,e,i,a,n)=>(t-e)*(n-a)/(i-e)+a,range(t,e,i){let a=Math.round(t/i)*i;return Array.from({length:Math.floor((e-t)/i)},(t,e)=>e*i+a)}};function s(t,e,i){let{query:a}=t.constructor.utils;t.controls.add({name:"heatmap",position:"top",html:"",style:{position:"absolute",top:"-100px",left:"0px",right:"0px",height:"100px",width:"100%",pointerEvents:"none"},mounted(n){let s=null,r=null;function l(d=[]){if(s=null,r=null,n.innerHTML="",!t.duration||t.option.isLive)return;let p={w:n.offsetWidth,h:n.offsetHeight},u={xMin:0,xMax:p.w,yMin:0,yMax:128,scale:.25,opacity:.2,minHeight:Math.floor(.05*p.h),sampling:Math.floor(p.w/100),smoothing:.2,flattening:.2};"object"==typeof i&&Object.assign(u,i);let h=[];if(Array.isArray(d)&&d.length)h=[...d];else{let i=t.duration/p.w;for(let t=0;t<=p.w;t+=u.sampling){let a=e.queue.filter(({time:e})=>e>t*i&&e<=(t+u.sampling)*i).length;h.push([t,a])}}if(0===h.length)return;let m=h[h.length-1],c=m[0],f=m[1];c!==p.w&&h.push([p.w,f]);let g=h.map(t=>t[1]),y=(Math.min(...g)+Math.max(...g))/2;for(let t=0;ty?1+u.scale:1-u.scale)+u.minHeight}let v=(t,e,i,a)=>{let n=function(t,e){let i=e[0]-t[0],a=e[1]-t[1];return{length:Math.sqrt(i**2+a**2),angle:Math.atan2(a,i)}}(e||t,i||t),s=o.map(Math.cos(n.angle)*u.flattening,0,1,1,0),r=n.angle*s+(a?Math.PI:0),l=n.length*u.smoothing;return[t[0]+Math.cos(r)*l,t[1]+Math.sin(r)*l]},x=h.map(t=>[o.map(t[0],u.xMin,u.xMax,0,p.w),o.map(t[1],u.yMin,u.yMax,p.h,0)]).reduce((t,e,i,a)=>0===i?`M ${a[a.length-1][0]},${p.h} L ${e[0]},${p.h} L ${e[0]},${e[1]}`:`${t} ${((t,e,i)=>{let a=v(i[e-1],i[e-2],t),n=v(t,i[e-1],i[e+1],!0),o=e===i.length-1?" z":"";return`C ${a[0]},${a[1]} ${n[0]},${n[1]} ${t[0]},${t[1]}${o}`})(e,i,a)}`,"");n.innerHTML=``,s=a("#heatmap-start",n),r=a("#heatmap-stop",n),s.setAttribute("offset",`${100*t.played}%`),r.setAttribute("offset",`${100*t.played}%`)}t.on("video:timeupdate",()=>{s&&r&&(s.setAttribute("offset",`${100*t.played}%`),r.setAttribute("offset",`${100*t.played}%`))}),t.on("setBar",(t,e)=>{s&&r&&"played"===t&&(s.setAttribute("offset",`${100*e}%`),r.setAttribute("offset",`${100*e}%`))}),t.on("ready",()=>l()),t.on("resize",()=>l()),t.on("artplayerPluginDanmuku:loaded",()=>l()),t.on("artplayerPluginDanmuku:points",t=>l(t))}})}},{"@parcel/transformer-js/src/esmodule-helpers.js":"5lQoW"}],"90QKZ":[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i);var o=t("bundle-text:./img/check_off.svg"),s=n.interopDefault(o),r=t("bundle-text:./img/check_on.svg"),l=n.interopDefault(r),d=t("bundle-text:./img/config.svg"),p=n.interopDefault(d),u=t("bundle-text:./img/mode_0_off.svg"),h=n.interopDefault(u),m=t("bundle-text:./img/mode_0_on.svg"),c=n.interopDefault(m),f=t("bundle-text:./img/mode_1_off.svg"),g=n.interopDefault(f),y=t("bundle-text:./img/mode_1_on.svg"),v=n.interopDefault(y),x=t("bundle-text:./img/mode_2_off.svg"),k=n.interopDefault(x),b=t("bundle-text:./img/mode_2_on.svg"),$=n.interopDefault(b),w=t("bundle-text:./img/off.svg"),M=n.interopDefault(w),D=t("bundle-text:./img/on.svg"),S=n.interopDefault(D),E=t("bundle-text:./img/style.svg"),A=n.interopDefault(E),q=t("bundle-text:./style.less"),T=n.interopDefault(q);if(i.default=class{constructor(t,e){this.art=t,this.danmuku=e,this.utils=t.constructor.utils;let{setStyle:i}=this.utils,{$controlsCenter:a}=t.template;i(a,"display","flex"),this.template={$controlsCenter:a,$mount:a,$danmuku:null,$toggle:null,$config:null,$configPanel:null,$configModes:null,$style:null,$stylePanel:null,$styleModes:null,$colors:null,$opacitySlider:null,$opacityValue:null,$marginSlider:null,$marginValue:null,$fontSizeSlider:null,$fontSizeValue:null,$speedSlider:null,$speedValue:null,$input:null,$send:null},this.slider={opacity:null,margin:null,fontSize:null,speed:null},this.emitting=!1,this.isLock=!1,this.timer=null,this.createTemplate(),this.createSliders(),this.createEvents(),this.mount(this.option.mount),t.on("resize",()=>this.resize()),t.on("fullscreen",t=>this.onFullscreen(t)),t.on("fullscreenWeb",t=>this.onFullscreen(t)),t.proxy(this.template.$config,"mouseenter",()=>{this.onMouseEnter({$control:this.template.$config,$panel:this.template.$configPanel})}),t.proxy(this.template.$style,"mouseenter",()=>{this.onMouseEnter({$control:this.template.$style,$panel:this.template.$stylePanel})})}static get icons(){return{$on:S.default,$off:M.default,$config:p.default,$style:A.default,$mode_0_off:h.default,$mode_0_on:c.default,$mode_1_off:g.default,$mode_1_on:v.default,$mode_2_off:k.default,$mode_2_on:$.default,$check_on:l.default,$check_off:s.default}}get option(){return this.danmuku.option}get outside(){return this.template.$mount!==this.template.$controlsCenter}get TEMPLATE(){let{option:t}=this;return`

${S.default}${M.default}
${p.default}
\u{6309}\u{7C7B}\u{578B}\u{5C4F}\u{853D}
${h.default}${c.default}
\u{6EDA}\u{52A8}
${g.default}${v.default}
\u{9876}\u{90E8}
${k.default}${$.default}
\u{5E95}\u{90E8}
${l.default}${s.default} \u{9632}\u{6B62}\u{5F39}\u{5E55}\u{91CD}\u{53E0}
${l.default}${s.default} \u{540C}\u{6B65}\u{89C6}\u{9891}\u{901F}\u{5EA6}
\u{4E0D}\u{900F}\u{660E}\u{5EA6}
\u{672A}\u{77E5}
\u{663E}\u{793A}\u{533A}\u{57DF}
\u{672A}\u{77E5}
\u{5F39}\u{5E55}\u{5B57}\u{53F7}
\u{672A}\u{77E5}
\u{5F39}\u{5E55}\u{901F}\u{5EA6}
\u{672A}\u{77E5}
${A.default}
\u{6A21}\u{5F0F}
${c.default}
\u{6EDA}\u{52A8}
${v.default}
\u{9876}\u{90E8}
${$.default}
\u{5E95}\u{90E8}
\u{989C}\u{8272}
${this.COLOR.map(t=>`
`).join("")}
\u{53D1}\u{9001}
`}get OPACITY(){return{min:0,max:100,steps:[],...this.option.OPACITY}}get FONT_SIZE(){return{min:12,max:120,steps:[],...this.option.FONT_SIZE}}get MARGIN(){return{min:0,max:3,steps:[{name:"1/4",value:[10,"75%"]},{name:"半屏",value:[10,"50%"]},{name:"3/4",value:[10,"25%"]},{name:"满屏",value:[10,10]}],...this.option.MARGIN}}get SPEED(){return{min:0,max:4,steps:[{name:"极慢",value:10},{name:"较慢",value:7.5,hide:!0},{name:"适中",value:5},{name:"较快",value:2.5,hide:!0},{name:"极快",value:1}],...this.option.SPEED}}get COLOR(){return this.option.COLOR.length?this.option.COLOR:["#FE0302","#FF7204","#FFAA02","#FFD302","#FFFF00","#A0EE00","#00CD00","#019899","#4266BE","#89D5FF","#CC0273","#222222","#9B9B9B","#FFFFFF"]}query(t){let{query:e}=this.utils,{$danmuku:i}=this.template;return e(t,i)}append(t,e){let{append:i}=this.utils;[...t.children].includes(e)||i(t,e)}setData(t,e){let{$player:i}=this.art.template,{$mount:a}=this.template;i.dataset[t]=e,this.outside&&(a.dataset[t]=e)}createTemplate(){let{createElement:t,tooltip:e}=this.utils,i=t("div");i.className="artplayer-plugin-danmuku",i.innerHTML=this.TEMPLATE,this.template.$danmuku=i,this.template.$toggle=this.query(".apd-toggle"),this.template.$config=this.query(".apd-config"),this.template.$configPanel=this.query(".apd-config-panel"),this.template.$configModes=this.query(".apd-config-mode .apd-modes"),this.template.$style=this.query(".apd-style"),this.template.$stylePanel=this.query(".apd-style-panel"),this.template.$styleModes=this.query(".apd-style-mode .apd-modes"),this.template.$colors=this.query(".apd-colors"),this.template.$antiOverlap=this.query(".apd-anti-overlap"),this.template.$syncVideo=this.query(".apd-sync-video"),this.template.$opacitySlider=this.query(".apd-config-opacity .apd-slider"),this.template.$opacityValue=this.query(".apd-config-opacity .apd-value"),this.template.$marginSlider=this.query(".apd-config-margin .apd-slider"),this.template.$marginValue=this.query(".apd-config-margin .apd-value"),this.template.$fontSizeSlider=this.query(".apd-config-fontSize .apd-slider"),this.template.$fontSizeValue=this.query(".apd-config-fontSize .apd-value"),this.template.$speedSlider=this.query(".apd-config-speed .apd-slider"),this.template.$speedValue=this.query(".apd-config-speed .apd-value"),this.template.$input=this.query(".apd-input"),this.template.$send=this.query(".apd-send");let{$toggle:a}=this.template;this.art.on("artplayerPluginDanmuku:show",()=>{e(a,"关闭弹幕")}),this.art.on("artplayerPluginDanmuku:hide",()=>{e(a,"打开弹幕")})}createEvents(){let{$toggle:t,$configModes:e,$styleModes:i,$colors:a,$antiOverlap:n,$syncVideo:o,$send:s,$input:r}=this.template;this.art.proxy(t,"click",()=>{this.danmuku.config({visible:!this.option.visible}),this.reset()}),this.art.proxy(e,"click",t=>{let e=t.target.closest(".apd-mode");if(!e)return;let i=Number(e.dataset.mode);this.option.modes.includes(i)?this.danmuku.config({modes:this.option.modes.filter(t=>t!==i)}):this.danmuku.config({modes:[...this.option.modes,i]}),this.reset()}),this.art.proxy(n,"click",()=>{this.danmuku.config({antiOverlap:!this.option.antiOverlap}),this.reset()}),this.art.proxy(o,"click",()=>{this.danmuku.config({synchronousPlayback:!this.option.synchronousPlayback}),this.reset()}),this.art.proxy(i,"click",t=>{let e=t.target.closest(".apd-mode");if(!e)return;let i=Number(e.dataset.mode);this.danmuku.config({mode:i}),this.reset()}),this.art.proxy(a,"click",t=>{let e=t.target.closest(".apd-color");e&&(this.danmuku.config({color:e.dataset.color}),this.reset())}),this.art.proxy(s,"click",()=>this.emit()),this.art.proxy(r,"keypress",t=>{"Enter"===t.key&&(t.preventDefault(),this.emit())})}createSliders(){this.slider.opacity=this.createSlider({...this.OPACITY,container:this.template.$opacitySlider,findIndex:()=>Math.round(100*this.option.opacity),onChange:t=>{let{$opacityValue:e}=this.template;e.textContent=`${t}%`,this.danmuku.config({opacity:t/100})}}),this.slider.margin=this.createSlider({...this.MARGIN,container:this.template.$marginSlider,findIndex:()=>this.MARGIN.steps.findIndex(t=>t.value[0]===this.option.margin[0]&&t.value[1]===this.option.margin[1]),onChange:t=>{let e=this.MARGIN.steps[t];if(!e)return;let{$marginValue:i}=this.template;i.textContent=e.name,this.danmuku.config({margin:e.value})}}),this.slider.fontSize=this.createSlider({...this.FONT_SIZE,container:this.template.$fontSizeSlider,findIndex:()=>this.danmuku.fontSize,onChange:t=>{let{$fontSizeValue:e}=this.template;e.textContent=`${t}px`,t!==this.danmuku.fontSize&&this.danmuku.config({fontSize:t})}}),this.slider.speed=this.createSlider({...this.SPEED,container:this.template.$speedSlider,findIndex:()=>this.SPEED.steps.findIndex(t=>t.value===this.option.speed),onChange:t=>{let e=this.SPEED.steps[t];if(!e)return;let{$speedValue:i}=this.template;i.textContent=e.name,this.danmuku.config({speed:e.value})}})}createSlider({min:t,max:e,container:i,findIndex:a,onChange:n,steps:o=[]}){let{query:s,clamp:r,setStyle:l}=this.utils;l(i,"touch-action","none"),i.innerHTML=`
${o.map(()=>'
').join("")}
${o.map(t=>t.hide?"":`
${t.name}
`).join("")}
`;let d=s(".apd-slider-dot",i),p=s(".apd-slider-progress",i),u=!1;function h(i=a()){if(ie)return;let s=(i-t)/(e-t);d.style.left=`${100*s}%`,0===o.length&&(p.style.width=d.style.left),n(i)}function m(a){let{top:n,height:o,left:s,width:l}=i.getBoundingClientRect();this.art.isRotate?h(Math.round(r(a.clientY-n,0,o)/o*(e-t)+t)):h(Math.round(r(a.clientX-s,0,l)/l*(e-t)+t))}return this.art.proxy(i,"click",t=>{m.call(this,t)}),this.art.proxy(i,"pointerdown",t=>{u=0===t.button}),this.art.proxy(document,"pointermove",t=>{u&&m.call(this,t)}),this.art.proxy(document,"pointerup",t=>{u&&(u=!1,m.call(this,t))}),{reset:h}}onFullscreen(t){let{$danmuku:e,$controlsCenter:i,$mount:a}=this.template;this.outside?t?this.append(i,e):this.append(a,e):this.append(i,e)}onMouseEnter({$control:t,$panel:e}){let{$player:i}=this.art.template,a=t.getBoundingClientRect(),n=e.getBoundingClientRect(),o=i.getBoundingClientRect(),s=n.width/2-a.width/2,r=o.left-(a.left-s),l=a.right+s-o.right;r>0?e.style.left=`${-s+r}px`:l>0?e.style.left=`${-s-l}px`:e.style.left=`${-s}px`}async emit(){let{$input:t}=this.template,e=t.value.trim();if(!e.length||this.isLock||this.emitting)return;let i={text:e,mode:this.option.mode,color:this.option.color,time:this.art.currentTime};try{this.emitting=!0;let e=await this.option.beforeEmit(i);if(this.emitting=!1,!0!==e)return;i.border=!0,delete i.time,this.danmuku.emit(i),t.value="",this.lock()}catch(t){console.error("Error emitting danmuku:",t),this.emitting=!1}}lock(){let{addClass:t}=this.utils,{$send:e}=this.template;this.isLock=!0;let i=this.option.lockTime;e.textContent=i,t(e,"apd-lock");let a=()=>{this.timer=setTimeout(()=>{0===i?this.unlock():(e.textContent=i-=1,a())},1e3)};a()}unlock(){let{removeClass:t}=this.utils,{$send:e}=this.template;clearTimeout(this.timer),this.isLock=!1,e.textContent="发送",t(e,"apd-lock")}resize(){if(this.outside||this.art.fullscreen||this.art.fullscreenWeb)return;let{$player:t,$controlsCenter:e}=this.art.template,{$danmuku:i}=this.template;this.art.widtht.dataset.color===this.option.color.toUpperCase());n&&t(n,"apd-active"),e(i,this.option.visible?"关闭弹幕":"打开弹幕"),this.resize()}mount(t){let{errorHandle:e}=this.utils,i="string"==typeof t?document.querySelector(t):t;e(i,`Can not find the mount point: ${t}`),this.append(i,this.template.$danmuku),this.template.$mount=i,this.reset()}},"undefined"!=typeof document){let t="artplayer-plugin-danmuku",e=document.getElementById(t);e||((e=document.createElement("style")).id=t,"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{document.head.appendChild(e)}):(document.head||document.documentElement).appendChild(e)),e.textContent=T.default}},{"bundle-text:./img/check_off.svg":"4tC1X","bundle-text:./img/check_on.svg":"iQql8","bundle-text:./img/config.svg":"DK7bp","bundle-text:./img/mode_0_off.svg":"fp5qd","bundle-text:./img/mode_0_on.svg":"fYNQe","bundle-text:./img/mode_1_off.svg":"gQMgY","bundle-text:./img/mode_1_on.svg":"5E8Hg","bundle-text:./img/mode_2_off.svg":"89iSb","bundle-text:./img/mode_2_on.svg":"2YEb0","bundle-text:./img/off.svg":"3WiJz","bundle-text:./img/on.svg":"5XkVj","bundle-text:./img/style.svg":"h2xX3","bundle-text:./style.less":"dHTK8","@parcel/transformer-js/src/esmodule-helpers.js":"5lQoW"}],"4tC1X":[function(t,e,i,a){e.exports=''},{}],iQql8:[function(t,e,i,a){e.exports=''},{}],DK7bp:[function(t,e,i,a){e.exports=''},{}],fp5qd:[function(t,e,i,a){e.exports=''},{}],fYNQe:[function(t,e,i,a){e.exports=''},{}],gQMgY:[function(t,e,i,a){e.exports=''},{}],"5E8Hg":[function(t,e,i,a){e.exports=''},{}],"89iSb":[function(t,e,i,a){e.exports=''},{}],"2YEb0":[function(t,e,i,a){e.exports=''},{}],"3WiJz":[function(t,e,i,a){e.exports=''},{}],"5XkVj":[function(t,e,i,a){e.exports=''},{}],h2xX3:[function(t,e,i,a){e.exports=''},{}],dHTK8:[function(t,e,i,a){e.exports='.artplayer-plugin-danmuku{z-index:99;color:#fff;flex-shrink:0;justify-content:center;align-items:center;gap:10px;width:100%;height:32px;font-size:12px;font-weight:300;display:flex;position:relative}.artplayer-plugin-danmuku .apd-icon{cursor:pointer;opacity:.75;fill:#fff;transition:all .2s}.artplayer-plugin-danmuku .apd-icon:hover{opacity:1}.artplayer-plugin-danmuku .apd-config{display:flex;position:relative}.artplayer-plugin-danmuku .apd-config .apd-config-panel{opacity:0;pointer-events:none;width:320px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-config .apd-config-panel .apd-config-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-config:hover .apd-config-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-config-mode,.artplayer-plugin-danmuku .apd-config-slider,.artplayer-plugin-danmuku .apd-config-other,.artplayer-plugin-danmuku .apd-style-mode{margin-bottom:15px}.artplayer-plugin-danmuku .apd-modes{align-items:center;gap:20px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-modes .apd-mode{cursor:pointer;text-align:center}.artplayer-plugin-danmuku .apd-modes .apd-mode:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-config-slider{align-items:center;gap:12px;display:flex}.artplayer-plugin-danmuku .apd-config-slider .apd-value{text-align:right;width:32px}.artplayer-plugin-danmuku .apd-slider{cursor:pointer;flex:1;justify-content:center;align-items:center;height:20px;display:flex;position:relative}.artplayer-plugin-danmuku .apd-slider .apd-slider-line{background-color:#ffffff40;border-radius:3px;width:100%;height:2px;position:relative;overflow:hidden}.artplayer-plugin-danmuku .apd-slider .apd-slider-points{justify-content:space-between;align-items:center;display:flex;position:absolute;inset:0}.artplayer-plugin-danmuku .apd-slider .apd-slider-points .apd-slider-point{background-color:#ffffff80;border-radius:50%;width:2px;height:2px}.artplayer-plugin-danmuku .apd-slider .apd-slider-progress{background-color:#00a1d6;width:0%;height:100%}.artplayer-plugin-danmuku .apd-slider .apd-slider-dot{background-color:#00a1d6;border-radius:50%;width:12px;height:12px;position:absolute;left:0%;transform:translate(-6px)}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps{color:#777;justify-content:space-between;align-items:center;width:calc(100% + 32px);display:flex;position:absolute;bottom:-12px}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps .apd-slider-step{text-align:center;flex-shrink:0;width:36px;scale:.95}.artplayer-plugin-danmuku .apd-config-other{align-items:center;gap:20px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-check-off,.artplayer-plugin-danmuku .apd-config-other .apd-check-on{width:16px;height:16px}.artplayer-plugin-danmuku .apd-config-other .apd-other{cursor:pointer;align-items:center;gap:2px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-other:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-emitter{background-color:#ffffff40;border-radius:5px;flex:1;align-items:center;height:100%;display:flex}.artplayer-plugin-danmuku .apd-style{justify-content:center;align-items:center;display:flex;position:relative}.artplayer-plugin-danmuku .apd-style .apd-style-panel{opacity:0;pointer-events:none;width:200px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-style .apd-style-panel .apd-style-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-style:hover .apd-style-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-colors{flex-wrap:wrap;gap:8px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-colors .apd-color{cursor:pointer;border-radius:2px;width:16px;height:16px}.artplayer-plugin-danmuku .apd-colors .apd-color.apd-active{border:1px solid #000;box-shadow:0 0 0 1px #fff}.artplayer-plugin-danmuku .apd-input{color:#fff;background-color:#0000;border:none;outline:none;flex:1;width:auto;min-width:0;height:100%;line-height:1}.artplayer-plugin-danmuku .apd-input::placeholder{color:#ffffff80}.artplayer-plugin-danmuku .apd-send{cursor:pointer;width:60px;height:100%;text-shadow:none;background-color:#00a1d6;border-top-right-radius:5px;border-bottom-right-radius:5px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.artplayer-plugin-danmuku .apd-send.apd-lock{cursor:not-allowed;color:#666;background-color:#e7e7e7}.art-controls-center .apd-emitter{flex:none;width:260px}.art-fullscreen .artplayer-plugin-danmuku,.art-fullscreen-web .artplayer-plugin-danmuku{gap:16px;height:38px}.art-fullscreen .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen-web .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-on,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-on{width:28px;height:28px}.art-fullscreen .artplayer-plugin-danmuku .apd-emitter,.art-fullscreen-web .artplayer-plugin-danmuku .apd-emitter{flex:none;width:400px}.art-video-player>.artplayer-plugin-danmuku{padding:0 10px;position:absolute;bottom:-40px;left:0;right:0}.art-video-player:has(>.artplayer-plugin-danmuku){margin-bottom:40px}[data-danmuku-emitter=false] .apd-emitter{display:none!important}[data-danmuku-emitter=false] .art-controls-center .artplayer-plugin-danmuku{justify-content:flex-end;gap:18px}[data-danmuku-emitter=false].art-fullscreen .art-controls-center .artplayer-plugin-danmuku,[data-danmuku-emitter=false].art-fullscreen-web .art-controls-center .artplayer-plugin-danmuku{gap:24px}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-icon{fill:#333}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-emitter{background-color:#f1f2f3}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input{color:#000}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input::placeholder{color:#0000004d}[data-danmuku-visible=false] .apd-toggle-off{display:block}[data-danmuku-visible=false] .apd-toggle-on,[data-danmuku-visible=true] .apd-toggle-off{display:none}[data-danmuku-visible=true] .apd-toggle-on{display:block}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-on{display:none}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-off,[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-on{display:block}[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-off,[data-danmuku-sync-video=false] .apd-sync-video .apd-check-on{display:none}[data-danmuku-sync-video=false] .apd-sync-video .apd-check-off,[data-danmuku-sync-video=true] .apd-sync-video .apd-check-on{display:block}[data-danmuku-sync-video=true] .apd-sync-video .apd-check-off{display:none}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-off{display:block}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-on{display:none}[data-danmuku-mode0=false] .art-danmuku [data-mode="0"]{opacity:0!important}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-off{display:none}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-on{display:block}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"]{color:#00a1d6}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"] path{fill:#00a1d6}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-off{display:block}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-on{display:none}[data-danmuku-mode1=false] .art-danmuku [data-mode="1"]{opacity:0!important}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-off{display:none}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-on{display:block}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"]{color:#00a1d6}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"] path{fill:#00a1d6}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-off{display:block}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-on{display:none}[data-danmuku-mode2=false] .art-danmuku [data-mode="2"]{opacity:0!important}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-off{display:none}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-on{display:block}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"]{color:#00a1d6}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"] path{fill:#00a1d6}'},{}]},["6ZbtA"],"6ZbtA","parcelRequire4dc0",{});let{default:t}=parcelRequire4dc0("6ZbtA");export{t as default}; //# sourceMappingURL=artplayer-plugin-danmuku.esm.js.map \ No newline at end of file diff --git a/docs/compiled/artplayer-plugin-danmuku.esm.js.map b/docs/compiled/artplayer-plugin-danmuku.esm.js.map index 045897d8f..08a5035ab 100644 --- a/docs/compiled/artplayer-plugin-danmuku.esm.js.map +++ b/docs/compiled/artplayer-plugin-danmuku.esm.js.map @@ -1 +1 @@ -{"mappings":"C,A,S,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,E,I,E,A,a,O,W,W,A,a,O,K,K,A,a,O,O,O,A,a,O,O,O,C,E,E,A,Y,O,C,C,E,E,C,C,E,C,E,E,C,E,C,E,E,E,K,E,C,E,E,A,a,O,Q,A,Y,O,O,O,E,O,O,C,I,C,Q,S,E,C,C,C,E,G,C,C,C,E,C,C,G,C,C,C,E,C,C,G,C,C,E,C,O,C,C,E,C,I,E,A,Y,O,C,C,E,E,C,C,E,C,G,C,G,E,O,E,E,C,G,G,E,O,E,E,C,G,G,G,A,U,O,E,O,E,G,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,O,C,S,C,E,I,E,C,C,E,C,E,C,E,C,O,A,M,E,E,C,E,E,K,C,C,E,I,E,C,C,E,C,I,E,M,C,G,C,C,E,C,E,C,I,C,E,O,C,E,E,E,O,C,E,C,O,C,C,E,C,O,C,S,E,C,E,I,E,E,O,C,G,M,A,C,I,E,C,E,E,E,C,C,E,e,C,C,E,E,M,C,S,C,E,I,C,E,C,E,I,C,M,C,E,I,C,O,C,E,I,C,O,C,C,C,E,E,O,C,E,E,K,C,E,E,M,C,E,E,O,C,K,E,E,S,C,K,E,E,S,C,K,E,E,C,C,E,E,Q,C,S,C,C,C,E,C,C,E,C,C,S,C,C,C,E,E,O,C,C,E,C,E,A,E,O,c,C,E,O,C,I,W,O,C,C,E,A,C,G,C,C,E,C,E,I,I,E,E,E,E,M,C,I,E,C,C,E,E,G,E,C,I,E,E,E,A,C,U,O,S,A,a,O,O,O,O,C,E,A,Y,O,Q,O,G,E,O,W,O,C,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,E,I,E,E,kD,E,iB,C,GCIwB,EAAA,MAAA,CAAA,EAAA,UAAA,IAAA,GAJxB,IAAA,EAAA,EAAA,a,E,E,c,C,GACA,EAAA,EAAA,a,E,E,c,C,GACA,EAAA,EAAA,a,E,E,c,C,GAEe,SAAS,EAAuB,CAAM,EACnD,OAAO,AAAC,IACN,IAAM,EAAU,GAAI,CAAA,EAAA,EAAA,OAAM,AAAN,EAAQ,EAAK,GAC3B,EAAU,GAAI,CAAA,EAAA,EAAA,OAAM,AAAN,EAAQ,EAAK,GAMjC,OAJI,EAAQ,MAAM,CAAC,OAAO,EACxB,AAAA,CAAA,EAAA,EAAA,OAAO,AAAP,EAAQ,EAAK,E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Q,CAAC,QAAQ,EACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAG,EACvB,IAAI,CAAC,KAAK,EACZ,CACF,EAEI,AAAoB,aAApB,OAAO,SAA0B,CACnC,IAAM,EAAK,2BACP,EAAS,SAAS,cAAc,CAAC,GAChC,IAEH,AADA,CAAA,EAAS,SAAS,aAAa,CAAC,QAAhC,EACO,EAAE,CAAG,EACR,AAAwB,YAAxB,SAAS,UAAU,CACrB,SAAS,gBAAgB,CAAC,mBAAoB,KAC5C,SAAS,IAAI,CAAC,WAAW,CAAC,EAC5B,GAGC,AAAA,CAAA,SAAS,IAAI,EAAI,SAAS,eAAc,AAAd,EAAiB,WAAW,CAAC,IAG5D,EAAO,WAAW,CAAG,EAAA,OAAK,AAC5B,C,E,C,kC,Q,iC,Q,+B,Q,mC,Q,kC,Q,mC,Q,kC,Q,mC,Q,kC,Q,4B,Q,2B,Q,8B,Q,2B,Q,iD,O,E,C,Q,C,S,C,C,C,C,C,C,C,EC5vBA,EAAO,OAAO,CAAG,kU,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,+Z,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,omE,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,onB,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,sW,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,kjB,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,iT,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,4hB,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,sT,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,+rD,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,y0D,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,ib,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,grQ,E,C,E,E,C,Q,C,Q,oB,C,G,G,C,Q,C,C,C,kB,gB,K,O","sources":["","packages/artplayer-plugin-danmuku/src/index.js","packages/artplayer-plugin-danmuku/src/danmuku.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-d75e4ef33e90ad74.js","packages/artplayer-plugin-danmuku/src/bilibili.js","node_modules/@parcel/transformer-js/src/esmodule-helpers.js","packages/artplayer-plugin-danmuku/src/heatmap.js","packages/artplayer-plugin-danmuku/src/setting.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-b1f4705e590c7693.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-75df9b67e4ad9f34.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-966493d38fa25693.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-e438774eb5592ca2.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-f628b445d36caf1f.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-df73f5e9e2ab004b.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-1de8ba84e2efbede.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-9ccdc626e87ba3ee.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-9a7360dad8cdbe5b.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-2eccf06bbefc75d0.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-3f382cbac81656d4.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-17da0f3cb542825d.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-d4507e9bfc00ded0.js"],"sourcesContent":["// modules are defined as an array\n// [ module function, map of requires ]\n//\n// map of requires is short require name -> numeric require\n//\n// anything defined in a previous bundle is accessed via the\n// orig method which is the require for previous bundles\n\n(function (\n modules,\n entry,\n mainEntry,\n parcelRequireName,\n externals,\n distDir,\n publicUrl,\n devServer\n) {\n /* eslint-disable no-undef */\n var globalObject =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\n /* eslint-enable no-undef */\n\n // Save the require from previous bundle to this closure if any\n var previousRequire =\n typeof globalObject[parcelRequireName] === 'function' &&\n globalObject[parcelRequireName];\n\n var importMap = previousRequire.i || {};\n var cache = previousRequire.cache || {};\n // Do not use `require` to prevent Webpack from trying to bundle this call\n var nodeRequire =\n typeof module !== 'undefined' &&\n typeof module.require === 'function' &&\n module.require.bind(module);\n\n function newRequire(name, jumped) {\n if (!cache[name]) {\n if (!modules[name]) {\n if (externals[name]) {\n return externals[name];\n }\n // if we cannot find the module within our internal map or\n // cache jump to the current global require ie. the last bundle\n // that was added to the page.\n var currentRequire =\n typeof globalObject[parcelRequireName] === 'function' &&\n globalObject[parcelRequireName];\n if (!jumped && currentRequire) {\n return currentRequire(name, true);\n }\n\n // If there are other bundles on this page the require from the\n // previous one is saved to 'previousRequire'. Repeat this as\n // many times as there are bundles until the module is found or\n // we exhaust the require chain.\n if (previousRequire) {\n return previousRequire(name, true);\n }\n\n // Try the node require function if it exists.\n if (nodeRequire && typeof name === 'string') {\n return nodeRequire(name);\n }\n\n var err = new Error(\"Cannot find module '\" + name + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n }\n\n localRequire.resolve = resolve;\n localRequire.cache = {};\n\n var module = (cache[name] = new newRequire.Module(name));\n\n modules[name][0].call(\n module.exports,\n localRequire,\n module,\n module.exports,\n globalObject\n );\n }\n\n return cache[name].exports;\n\n function localRequire(x) {\n var res = localRequire.resolve(x);\n return res === false ? {} : newRequire(res);\n }\n\n function resolve(x) {\n var id = modules[name][1][x];\n return id != null ? id : x;\n }\n }\n\n function Module(moduleName) {\n this.id = moduleName;\n this.bundle = newRequire;\n this.require = nodeRequire;\n this.exports = {};\n }\n\n newRequire.isParcelRequire = true;\n newRequire.Module = Module;\n newRequire.modules = modules;\n newRequire.cache = cache;\n newRequire.parent = previousRequire;\n newRequire.distDir = distDir;\n newRequire.publicUrl = publicUrl;\n newRequire.devServer = devServer;\n newRequire.i = importMap;\n newRequire.register = function (id, exports) {\n modules[id] = [\n function (require, module) {\n module.exports = exports;\n },\n {},\n ];\n };\n\n // Only insert newRequire.load when it is actually used.\n // The code in this file is linted against ES5, so dynamic import is not allowed.\n // INSERT_LOAD_HERE\n\n Object.defineProperty(newRequire, 'root', {\n get: function () {\n return globalObject[parcelRequireName];\n },\n });\n\n globalObject[parcelRequireName] = newRequire;\n\n for (var i = 0; i < entry.length; i++) {\n newRequire(entry[i]);\n }\n\n if (mainEntry) {\n // Expose entry point to Node, AMD or browser globals\n // Based on https://github.com/ForbesLindesay/umd/blob/master/template.js\n var mainExports = newRequire(mainEntry);\n\n // CommonJS\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n module.exports = mainExports;\n\n // RequireJS\n } else if (typeof define === 'function' && define.amd) {\n define(function () {\n return mainExports;\n });\n }\n }\n})({\"6ZbtA\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nparcelHelpers.export(exports, \"default\", ()=>artplayerPluginDanmuku);\nvar _danmuku = require(\"./danmuku\");\nvar _danmukuDefault = parcelHelpers.interopDefault(_danmuku);\nvar _heatmap = require(\"./heatmap\");\nvar _heatmapDefault = parcelHelpers.interopDefault(_heatmap);\nvar _setting = require(\"./setting\");\nvar _settingDefault = parcelHelpers.interopDefault(_setting);\nfunction artplayerPluginDanmuku(option) {\n return (art)=>{\n const danmuku = new (0, _danmukuDefault.default)(art, option);\n const setting = new (0, _settingDefault.default)(art, danmuku);\n if (danmuku.option.heatmap) (0, _heatmapDefault.default)(art, danmuku, danmuku.option.heatmap);\n return {\n name: 'artplayerPluginDanmuku',\n emit: danmuku.emit.bind(danmuku),\n load: danmuku.load.bind(danmuku),\n config: danmuku.config.bind(danmuku),\n hide: danmuku.hide.bind(danmuku),\n show: danmuku.show.bind(danmuku),\n reset: danmuku.reset.bind(danmuku),\n mount: setting.mount.bind(setting),\n get option () {\n return danmuku.option;\n },\n get isHide () {\n return danmuku.isHide;\n },\n get isStop () {\n return danmuku.isStop;\n }\n };\n };\n}\nartplayerPluginDanmuku.icons = (0, _settingDefault.default).icons;\nif (typeof window !== 'undefined') window.artplayerPluginDanmuku = artplayerPluginDanmuku;\n\n},{\"./danmuku\":\"6C7g0\",\"./heatmap\":\"h2ayY\",\"./setting\":\"90QKZ\",\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}],\"6C7g0\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nvar _worker = require(\"bundle-text:./worker\");\nvar _workerDefault = parcelHelpers.interopDefault(_worker);\nvar _bilibili = require(\"./bilibili\");\nclass Danmuku {\n constructor(art, option){\n const { constructor, template } = art;\n this.utils = constructor.utils // 工具库\n ;\n this.validator = constructor.validator // 配置校验器\n ;\n this.$danmuku = template.$danmuku // 弹幕层容器\n ;\n this.$player = template.$player // 播放器容器\n ;\n this.art = art;\n this.queue = [] // 实际弹幕队列\n ;\n this.$refs = [] // 弹幕DOM节点池\n ;\n this.isStop = false // 是否停止\n ;\n this.isHide = false // 是否隐藏\n ;\n this.timer = null // 定时器\n ;\n this.index = 0 // 弹幕索引\n ;\n // 格式化后的配置项\n this.option = Danmuku.option;\n // 弹幕状态池\n this.states = {\n wait: [],\n ready: [],\n emit: [],\n stop: []\n };\n // 初始化配置\n this.config(option, true);\n // 创建 Web Worker, 用于计算弹幕的 top 值\n const workerText2 = (0, _workerDefault.default).replace('export{e as default};', '');\n const blob = new Blob([\n workerText2\n ], {\n type: 'application/javascript'\n });\n this.worker = new Worker(URL.createObjectURL(blob));\n // 绑定公用事件\n this.start = this.start.bind(this);\n this.stop = this.stop.bind(this);\n this.reset = this.reset.bind(this);\n this.resize = this.resize.bind(this);\n this.destroy = this.destroy.bind(this);\n // 监听事件\n art.on('video:play', this.start);\n art.on('video:playing', this.start);\n art.on('video:pause', this.stop);\n art.on('video:waiting', this.stop);\n art.on('destroy', this.destroy);\n art.on('resize', this.resize);\n // 开始加载弹幕\n this.load();\n }\n // 默认配置\n static get option() {\n return {\n danmuku: [],\n speed: 5,\n margin: [\n 10,\n '25%'\n ],\n opacity: 1,\n color: '#FFFFFF',\n mode: 0,\n modes: [\n 0,\n 1,\n 2\n ],\n fontSize: 25,\n antiOverlap: true,\n synchronousPlayback: false,\n mount: undefined,\n heatmap: false,\n width: 512,\n points: [],\n filter: ()=>true,\n beforeEmit: ()=>true,\n beforeVisible: ()=>true,\n visible: true,\n emitter: true,\n maxLength: 200,\n lockTime: 5,\n theme: 'dark',\n OPACITY: {},\n FONT_SIZE: {},\n MARGIN: {},\n SPEED: {},\n COLOR: []\n };\n }\n // 配置校验\n static get scheme() {\n return {\n danmuku: 'array|function|string',\n speed: 'number',\n margin: 'array',\n opacity: 'number',\n color: 'string',\n mode: 'number',\n modes: 'array',\n fontSize: 'number|string',\n antiOverlap: 'boolean',\n synchronousPlayback: 'boolean',\n mount: '?htmldivelement|string',\n heatmap: 'object|boolean',\n width: 'number',\n points: 'array',\n filter: 'function',\n beforeEmit: 'function',\n beforeVisible: 'function',\n visible: 'boolean',\n emitter: 'boolean',\n maxLength: 'number',\n lockTime: 'number',\n theme: 'string',\n OPACITY: 'object',\n FONT_SIZE: 'object',\n MARGIN: 'object',\n SPEED: 'object',\n COLOR: 'array'\n };\n }\n // 初始弹幕样式\n static get cssText() {\n return `\n user-select: none;\n position: absolute;\n white-space: pre;\n pointer-events: none;\n perspective: 500px;\n display: inline-block;\n will-change: transform;\n font-weight: normal;\n line-height: 1.125;\n visibility: hidden;\n font-family: SimHei, \"Microsoft JhengHei\", Arial, Helvetica, sans-serif;\n text-shadow: rgb(0, 0, 0) 1px 0px 1px, rgb(0, 0, 0) 0px 1px 1px, rgb(0, 0, 0) 0px -1px 1px, rgb(0, 0, 0) -1px 0px 1px;\n `;\n }\n // 是否在移动端使用了自动旋屏,会影响弹幕的left和top值\n get isRotate() {\n return this.art.plugins?.autoOrientation?.state;\n }\n // 计算上空白边距\n get marginTop() {\n const { clamp } = this.utils;\n const value = this.option.margin[0];\n const { clientHeight } = this.$player;\n if (typeof value === 'number') return clamp(value, 0, clientHeight);\n if (typeof value === 'string' && value.endsWith('%')) {\n const ratio = Number.parseFloat(value) / 100;\n return clamp(clientHeight * ratio, 0, clientHeight);\n }\n return Danmuku.option.margin[0];\n }\n // 计算下空白边距\n get marginBottom() {\n const { clamp } = this.utils;\n const value = this.option.margin[1];\n const { clientHeight } = this.$player;\n if (typeof value === 'number') return clamp(value, 0, clientHeight);\n if (typeof value === 'string' && value.endsWith('%')) {\n const ratio = Number.parseFloat(value) / 100;\n return clamp(clientHeight * ratio, 0, clientHeight);\n }\n return Danmuku.option.margin[1];\n }\n // 计算弹幕字体大小\n get fontSize() {\n const { clamp } = this.utils;\n const { clientHeight } = this.$player;\n const fontSize = this.option.fontSize;\n if (typeof fontSize === 'number') return Math.round(clamp(fontSize, 12, clientHeight));\n if (typeof fontSize === 'string' && fontSize.endsWith('%')) {\n const ratio = Number.parseFloat(fontSize) / 100;\n return Math.round(clamp(clientHeight * ratio, 12, clientHeight));\n }\n return Danmuku.option.fontSize;\n }\n // 获取弹幕DOM节点\n get $ref() {\n const $ref = this.$refs.pop() || document.createElement('div');\n $ref.style.cssText = Danmuku.cssText;\n $ref.dataset.mode = '';\n $ref.className = '';\n return $ref;\n }\n // 获取准备好发送的弹幕\n get readys() {\n const { currentTime } = this.art;\n const result = [];\n // 有的是ready状态:之前因为弹幕太多而暂停发送的弹幕\n this.filter('ready', (danmu)=>result.push(danmu));\n // 有的是wait状态:符合时间范围的弹幕\n this.filter('wait', (danmu)=>{\n if (currentTime + 0.1 >= danmu.time && danmu.time >= currentTime - 0.1) result.push(danmu);\n });\n return result;\n }\n // 可见的弹幕的数据,用于计算下一个弹幕的top值\n get visibles() {\n const result = [];\n const { clientWidth } = this.$player;\n const clientLeft = this.getLeft(this.$player);\n this.filter('emit', (danmu)=>{\n const top = danmu.$ref.offsetTop;\n const left = this.getLeft(danmu.$ref) - clientLeft;\n const height = danmu.$ref.clientHeight;\n const width = danmu.$ref.clientWidth;\n const distance = left + width;\n const right = clientWidth - distance;\n const speed = distance / danmu.$restTime;\n const emit = {};\n emit.top = top;\n emit.left = left;\n emit.height = height;\n emit.width = width;\n emit.right = right;\n emit.speed = speed;\n emit.distance = distance;\n emit.time = danmu.$restTime;\n emit.mode = danmu.mode;\n result.push(emit);\n });\n return result;\n }\n // 计算弹幕速度\n get speed() {\n return this.option.synchronousPlayback && this.art.playbackRate ? this.option.speed / Number(this.art.playbackRate) : this.option.speed;\n }\n // 加载弹幕\n async load(danmuku) {\n const { errorHandle } = this.utils;\n let danmus = [];\n const target = danmuku || this.option.danmuku;\n try {\n if (typeof target === 'function') danmus = await target() // 异步函数获取\n ;\n else if (target instanceof Promise) danmus = await target // 从 Promise 对象获取\n ;\n else if (typeof target === 'string') danmus = await (0, _bilibili.bilibiliDanmuParseFromUrl)(target) // 从B站xml链接解析\n ;\n else if (Array.isArray(target)) danmus = target // 直接传入数组\n ;\n errorHandle(Array.isArray(danmus), 'Danmuku need return an array as result');\n // 假如没有传入弹幕参数,则清空弹幕,否则追加弹幕\n if (danmuku === undefined) {\n this.reset() // 重置弹幕\n ;\n this.queue = [] // 清空弹幕队列\n ;\n this.states = {\n wait: [],\n ready: [],\n emit: [],\n stop: []\n } // 清空弹幕状态池\n ;\n this.$refs = [] // 清空弹幕DOM节点池\n ;\n this.$danmuku.textContent = '' // 清空弹幕层\n ;\n }\n // 逐个验证原始弹幕并转换到弹幕队列\n for(let index = 0; index < danmus.length; index++){\n const danmu = danmus[index];\n await this.emit(danmu);\n }\n this.art.emit('artplayerPluginDanmuku:loaded', this.queue);\n } catch (error) {\n this.art.emit('artplayerPluginDanmuku:error', error);\n throw error;\n }\n return this;\n }\n // 把原始弹幕转换到弹幕队列\n async emit(danmu) {\n const { clamp } = this.utils;\n this.validator(danmu, {\n text: 'string',\n mode: '?number',\n color: '?string',\n time: '?number',\n border: '?boolean',\n style: '?object'\n });\n // 弹幕文本为空则直接忽略\n if (!danmu.text.trim()) return this;\n // 设置弹幕时间,如果没有则默认为当前时间加 0.5 秒\n if (danmu.time) danmu.time = clamp(danmu.time, 0, Infinity);\n else danmu.time = this.art.currentTime + 0.5;\n // 设置弹幕模式,如果没有则默认为全局配置\n if (danmu.mode === undefined) danmu.mode = this.option.mode;\n // 设置弹幕单独样式,如果没有则默认为空对象\n if (danmu.style === undefined) danmu.style = {};\n // 设置弹幕颜色,如果没有则默认为全局配置\n if (danmu.color === undefined) danmu.color = this.option.color;\n // 弹幕模式只能是 0, 1, 2\n if (![\n 0,\n 1,\n 2\n ].includes(danmu.mode)) return this;\n // 自定义弹幕过滤函数\n if (!this.option.filter(danmu)) return this;\n // 添加自定义属性\n const item = {\n ...danmu,\n $state: 'wait',\n $id: this.index++,\n $ref: null,\n $restTime: 0,\n $lastStartTime: 0\n };\n // 转换为wait状态\n this.setState(item, 'wait');\n // 添加到实际弹幕队列\n this.queue.push(item);\n // 弹幕有四个状态:\n // - wait: 弹幕还未开始显示,没有被添加到 DOM 中\n // - ready: 弹幕准备好显示,没有被添加到 DOM 中\n // - emit: 弹幕正在显示,已经被添加到 DOM 中\n // - stop: 弹幕正在停止显示,已经被添加到 DOM 中\n return this;\n }\n // 动态配置\n config(option, isInit = false) {\n const { clamp } = this.utils;\n const { $controlsCenter } = this.art.template;\n // 判断配置项是否有变化\n const changed = Object.keys(option).some((key)=>JSON.stringify(this.option[key]) !== JSON.stringify(option[key]));\n // 没有变化则直接返回\n if (!changed && !isInit) return this;\n // 更新配置项\n this.option = Object.assign({}, Danmuku.option, this.option, option);\n this.validator(this.option, Danmuku.scheme);\n this.option.mode = clamp(this.option.mode, 0, 2);\n this.option.speed = clamp(this.option.speed, 1, 10);\n this.option.opacity = clamp(this.option.opacity, 0, 1);\n this.option.lockTime = clamp(this.option.lockTime, 1, 60);\n this.option.maxLength = clamp(this.option.maxLength, 1, 1000);\n this.option.mount = this.option.mount || $controlsCenter;\n // 动态配置有字体大小,需要重新渲染\n if (option.fontSize) this.reset();\n // 通过配置项控制弹幕的显示和隐藏\n if (this.option.visible) this.show();\n else this.hide();\n this.art.emit('artplayerPluginDanmuku:config', this.option);\n return this;\n }\n // 计算DOM的left值,受到旋屏影响\n getLeft($ref) {\n const rect = $ref.getBoundingClientRect();\n return this.isRotate ? rect.top : rect.left;\n }\n // 复杂运算交给 Web Worker 处理\n postMessage(message = {}) {\n return new Promise((resolve)=>{\n message.id = Date.now() // 生成唯一标识\n ;\n this.worker.postMessage(message);\n this.worker.onmessage = (event)=>{\n const { data } = event;\n // 判断是否是当前的消息\n if (data.id === message.id) resolve(data);\n };\n });\n }\n // 根据状态获取弹幕\n filter(state, callback) {\n const danmus = this.states[state] || [];\n for(let index = 0; index < danmus.length; index++)callback(danmus[index]);\n return danmus;\n }\n // 设置弹幕状态\n setState(danmu, state) {\n // 从原状态池中删除\n this.states[danmu.$state] = this.states[danmu.$state].filter((item)=>item !== danmu);\n // 设置新状态\n danmu.$state = state;\n // 设置DOM节点状态\n if (danmu.$ref) danmu.$ref.dataset.state = state;\n // 添加到新状态池中\n this.states[state].push(danmu);\n }\n // 重置弹幕到wait状态,回收弹幕DOM节点\n makeWait(danmu) {\n this.setState(danmu, 'wait');\n if (danmu.$ref) {\n danmu.$ref.style.cssText = Danmuku.cssText;\n danmu.$ref.style.visibility = 'hidden';\n danmu.$ref.style.marginLeft = '0px';\n danmu.$ref.style.transform = 'translateX(0px)';\n danmu.$ref.style.transition = 'transform 0s linear 0s';\n this.$refs.push(danmu.$ref);\n danmu.$ref = null;\n }\n }\n // 实时更新弹幕\n update() {\n const { setStyles } = this.utils;\n this.timer = window.requestAnimationFrame(async ()=>{\n if (this.art.playing && !this.isHide) {\n // 实时计算弹幕的剩余显示时间\n this.filter('emit', (danmu)=>{\n const emitTime = (Date.now() - danmu.$lastStartTime) / 1000;\n danmu.$restTime -= emitTime;\n danmu.$lastStartTime = Date.now();\n // 超过时间即重置弹幕\n if (danmu.$restTime <= 0) this.makeWait(danmu);\n });\n // 获取准备好发送的弹幕,可能包含ready和wait状态的弹幕\n const readys = this.readys;\n for(let index = 0; index < readys.length; index++){\n const danmu = readys[index];\n // 弹幕发送前的过滤器\n const state = await this.option.beforeVisible(danmu);\n if (state) {\n const { clientWidth, clientHeight } = this.$player;\n danmu.$ref = this.$ref // 获取弹幕DOM节点\n ;\n danmu.$ref.textContent = danmu.text // 设置弹幕文本\n ;\n // 提前添加到弹幕层中,用于计算top值\n this.$danmuku.appendChild(danmu.$ref);\n // 设置初始弹幕样式\n danmu.$ref.style.opacity = this.option.opacity;\n danmu.$ref.style.fontSize = `${this.fontSize}px`;\n danmu.$ref.style.color = danmu.color;\n danmu.$ref.style.border = danmu.border ? `1px solid ${danmu.color}` : null;\n danmu.$ref.style.backgroundColor = danmu.border ? 'rgb(0 0 0 / 50%)' : null;\n // 设置单独弹幕样式\n setStyles(danmu.$ref, danmu.style);\n // 记录弹幕时间戳\n danmu.$lastStartTime = Date.now();\n // 计算弹幕剩余时间\n danmu.$restTime = this.speed;\n // 计算弹幕滚动的距离\n const distance = clientWidth + danmu.$ref.clientWidth;\n // 计算弹幕的top值\n const { result: top } = await this.postMessage({\n type: 'getDanmuTop',\n target: {\n mode: danmu.mode,\n height: danmu.$ref.clientHeight,\n speed: distance / danmu.$restTime\n },\n visibles: this.visibles,\n antiOverlap: this.option.antiOverlap,\n clientWidth,\n clientHeight,\n marginBottom: this.marginBottom,\n marginTop: this.marginTop\n });\n if (danmu.$ref) {\n if (!this.isStop && top !== undefined) {\n this.setState(danmu, 'emit') // 转换为emit状态\n ;\n danmu.$ref.style.top = `${top}px`;\n danmu.$ref.style.visibility = 'visible';\n danmu.$ref.dataset.mode = danmu.mode // CSS控制模式的显示和隐藏\n ;\n switch(danmu.mode){\n // 滚动的弹幕\n case 0:\n danmu.$ref.style.left = `${clientWidth}px`;\n danmu.$ref.style.marginLeft = '0px';\n danmu.$ref.style.transform = `translateX(${-distance}px)`;\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`;\n break;\n case 1:\n // falls through\n case 2:\n danmu.$ref.style.left = '50%';\n danmu.$ref.style.marginLeft = `-${danmu.$ref.clientWidth / 2}px`;\n break;\n default:\n break;\n }\n this.art.emit('artplayerPluginDanmuku:visible', danmu);\n } else {\n // 假如弹幕已经停止或者没有 top 值,则重置弹幕为ready状态,回收弹幕DOM节点,等待下次发送\n this.setState(danmu, 'ready');\n this.$refs.push(danmu.$ref);\n danmu.$ref = null;\n }\n }\n }\n }\n }\n // 递归调用\n if (!this.isStop) this.update();\n });\n return this;\n }\n // 重置正在显示的弹幕: stop/emit 状态的弹幕\n resize() {\n const { clientWidth } = this.$player;\n this.filter('stop', (danmu)=>{\n switch(danmu.mode){\n // 滚动的弹幕\n case 0:\n danmu.$ref.style.left = `${clientWidth}px`;\n break;\n default:\n break;\n }\n });\n this.filter('emit', (danmu)=>{\n danmu.$lastStartTime = Date.now();\n switch(danmu.mode){\n // 滚动的弹幕\n case 0:\n {\n const distance = clientWidth + danmu.$ref.clientWidth;\n danmu.$ref.style.left = `${clientWidth}px`;\n danmu.$ref.style.transform = `translateX(${-distance}px)`;\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`;\n break;\n }\n default:\n break;\n }\n });\n }\n // 继续弹幕\n continue() {\n const { clientWidth } = this.$player;\n this.filter('stop', (danmu)=>{\n this.setState(danmu, 'emit') // 转换为emit状态\n ;\n danmu.$lastStartTime = Date.now();\n switch(danmu.mode){\n // 继续滚动的弹幕\n case 0:\n {\n const distance = clientWidth + danmu.$ref.clientWidth;\n danmu.$ref.style.transform = `translateX(${-distance}px)`;\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`;\n break;\n }\n default:\n break;\n }\n });\n return this;\n }\n // 暂停弹幕\n suspend() {\n const { clientWidth } = this.$player;\n this.filter('emit', (danmu)=>{\n this.setState(danmu, 'stop') // 转换为stop状态\n ;\n switch(danmu.mode){\n // 停止滚动的弹幕\n case 0:\n {\n const translateX = clientWidth - (this.getLeft(danmu.$ref) - this.getLeft(this.$player));\n danmu.$ref.style.transform = `translateX(${-translateX}px)`;\n danmu.$ref.style.transition = 'transform 0s linear 0s';\n break;\n }\n default:\n break;\n }\n });\n return this;\n }\n stop() {\n this.isStop = true;\n this.suspend();\n window.cancelAnimationFrame(this.timer);\n this.art.emit('artplayerPluginDanmuku:stop');\n return this;\n }\n start() {\n this.isStop = false;\n this.continue();\n this.update();\n this.art.emit('artplayerPluginDanmuku:start');\n return this;\n }\n reset() {\n this.queue.forEach((danmu)=>this.makeWait(danmu));\n this.art.emit('artplayerPluginDanmuku:reset');\n return this;\n }\n show() {\n this.isHide = false;\n this.$danmuku.style.opacity = 1;\n this.option.visible = true;\n this.art.emit('artplayerPluginDanmuku:show');\n return this;\n }\n hide() {\n this.isHide = true;\n this.$danmuku.style.opacity = 0;\n this.option.visible = false;\n this.art.emit('artplayerPluginDanmuku:hide');\n return this;\n }\n destroy() {\n this.stop();\n this.worker.terminate();\n this.art.off('video:play', this.start);\n this.art.off('video:playing', this.start);\n this.art.off('video:pause', this.stop);\n this.art.off('video:waiting', this.stop);\n this.art.off('resize', this.reset);\n this.art.off('destroy', this.destroy);\n this.art.emit('artplayerPluginDanmuku:destroy');\n }\n}\nexports.default = Danmuku;\n\n},{\"bundle-text:./worker\":\"8UAYg\",\"./bilibili\":\"8WBpY\",\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}],\"8UAYg\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"!function(e,t,i,o,r,n,l,d){var u=\\\"undefined\\\"!=typeof globalThis?globalThis:\\\"undefined\\\"!=typeof self?self:\\\"undefined\\\"!=typeof window?window:\\\"undefined\\\"!=typeof global?global:{},f=\\\"function\\\"==typeof u[o]&&u[o],p=f.i||{},s=f.cache||{},h=\\\"undefined\\\"!=typeof module&&\\\"function\\\"==typeof module.require&&module.require.bind(module);function a(t,i){if(!s[t]){if(!e[t]){if(r[t])return r[t];var n=\\\"function\\\"==typeof u[o]&&u[o];if(!i&&n)return n(t,!0);if(f)return f(t,!0);if(h&&\\\"string\\\"==typeof t)return h(t);var l=Error(\\\"Cannot find module '\\\"+t+\\\"'\\\");throw l.code=\\\"MODULE_NOT_FOUND\\\",l}p.resolve=function(i){var o=e[t][1][i];return null!=o?o:i},p.cache={};var d=s[t]=new a.Module(t);e[t][0].call(d.exports,p,d,d.exports,u)}return s[t].exports;function p(e){var t=p.resolve(e);return!1===t?{}:a(t)}}a.isParcelRequire=!0,a.Module=function(e){this.id=e,this.bundle=a,this.require=h,this.exports={}},a.modules=e,a.cache=s,a.parent=f,a.distDir=void 0,a.publicUrl=void 0,a.devServer=void 0,a.i=p,a.register=function(t,i){e[t]=[function(e,t){t.exports=i},{}]},Object.defineProperty(a,\\\"root\\\",{get:function(){return u[o]}}),u[o]=a;for(var c=0;ct.mode===e.mode&&t.top<=d).sort((e,t)=>e.top-t.top);if(0===u.length)if(2===e.mode)return d-e.height;else return n;if(u.unshift({type:\\\"top\\\",top:0,left:0,right:0,height:n,width:i,speed:0,distance:i}),u.push({type:\\\"bottom\\\",top:d,left:0,right:0,height:r,width:i,speed:0,distance:i}),2===e.mode)for(let t=u.length-2;t>=0;t-=1){let i=u[t],o=u[t+1],r=i.top+i.height;if(o.top-r>=e.height)return o.top-e.height}else for(let t=1;t=e.height)return r}let f=[];for(let e=1;et.every(t=>!(it.time))));return t&&t[0]?t[0].top:void 0}case 1:case 2:return}else{switch(e.mode){case 0:f.sort((e,t)=>{let i=Math.min(...t.map(e=>e.right)),o=Math.min(...e.map(e=>e.right));return i*t.length-o*e.length});break;case 1:case 2:f.sort((e,t)=>{let i=Math.max(...t.map(e=>e.width));return Math.max(...e.map(e=>e.width))*e.length-i*t.length})}return f[0][0].top}}onmessage=e=>{let{data:t}=e;t.id&&t.type&&globalThis.postMessage({result:(0,({getDanmuTop:r})[t.type])(t),id:t.id})}},{}]},[\\\"4KwZ6\\\"],\\\"4KwZ6\\\",\\\"parcelRequire4dc0\\\",{});let{\\\"*\\\":e}=parcelRequire4dc0(\\\"4KwZ6\\\");export{e as default};\";\n\n},{}],\"8WBpY\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nparcelHelpers.export(exports, \"bilibiliDanmuParseFromUrl\", ()=>bilibiliDanmuParseFromUrl);\nfunction getMode(key) {\n switch(key){\n case 1:\n case 2:\n case 3:\n return 0;\n case 4:\n return 2;\n case 5:\n return 1;\n default:\n return 0;\n }\n}\nfunction bilibiliDanmuParseFromXml(xmlString) {\n if (typeof xmlString !== 'string') return [];\n const reg = /]*?p=\"(?

[^\"]+)\"[^>]*>(?.*?)<\\/d>/gs;\n const matches = xmlString.matchAll(reg);\n return Array.from(matches).map((match)=>{\n const attr = match.groups.p.split(',');\n if (attr.length >= 8) {\n const text = match.groups.text.trim().replaceAll('"', '\"').replaceAll(''', '\\'').replaceAll('<', '<').replaceAll('>', '>').replaceAll('&', '&');\n return {\n text,\n time: Number(attr[0]),\n mode: getMode(Number(attr[1])),\n fontSize: Number(attr[2]),\n color: `#${Number(attr[3]).toString(16)}`,\n timestamp: Number(attr[4]),\n pool: Number(attr[5]),\n userID: attr[6],\n rowID: Number(attr[7])\n };\n } else return null;\n }).filter(Boolean);\n}\nfunction onmessage({ data }) {\n const { xml, id } = data;\n if (!id || !xml) return;\n const danmus = bilibiliDanmuParseFromXml(xml);\n globalThis.postMessage({\n danmus,\n id\n });\n}\nfunction createWorker() {\n const workerText = `\n ${getMode.toString()}\n ${bilibiliDanmuParseFromXml.toString()}\n onmessage = ${onmessage.toString()}\n `;\n const blob = new Blob([\n workerText\n ], {\n type: 'application/javascript'\n });\n return new Worker(URL.createObjectURL(blob));\n}\nfunction bilibiliDanmuParseFromUrl(url) {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve)=>{\n const res = await fetch(url);\n const xml = await res.text();\n try {\n const worker = createWorker();\n worker.onmessage = (event)=>{\n const { danmus, id } = event.data;\n if (!id || !danmus) return;\n resolve(danmus);\n worker.terminate();\n };\n worker.postMessage({\n xml,\n id: Date.now()\n });\n } catch (error) {\n console.error('Error parsing Bilibili Danmu:', error);\n const danmus = bilibiliDanmuParseFromXml(xml);\n resolve(danmus);\n }\n });\n}\n\n},{\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}],\"5lQoW\":[function(require,module,exports,__globalThis) {\nexports.interopDefault = function(a) {\n return a && a.__esModule ? a : {\n default: a\n };\n};\nexports.defineInteropFlag = function(a) {\n Object.defineProperty(a, '__esModule', {\n value: true\n });\n};\nexports.exportAll = function(source, dest) {\n Object.keys(source).forEach(function(key) {\n if (key === 'default' || key === '__esModule' || Object.prototype.hasOwnProperty.call(dest, key)) return;\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function() {\n return source[key];\n }\n });\n });\n return dest;\n};\nexports.export = function(dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get\n });\n};\n\n},{}],\"h2ayY\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nparcelHelpers.export(exports, \"default\", ()=>heatmap);\nconst lib = {\n map (value, inMin, inMax, outMin, outMax) {\n return (value - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;\n },\n range (start, end, tick) {\n const s = Math.round(start / tick) * tick;\n return Array.from({\n length: Math.floor((end - start) / tick)\n }, (v, k)=>{\n return k * tick + s;\n });\n }\n};\nfunction line(pointA, pointB) {\n const lengthX = pointB[0] - pointA[0];\n const lengthY = pointB[1] - pointA[1];\n return {\n length: Math.sqrt(lengthX ** 2 + lengthY ** 2),\n angle: Math.atan2(lengthY, lengthX)\n };\n}\nfunction heatmap(art, danmuku, option) {\n const { query } = art.constructor.utils;\n art.controls.add({\n name: 'heatmap',\n position: 'top',\n html: '',\n style: {\n position: 'absolute',\n top: '-100px',\n left: '0px',\n right: '0px',\n height: '100px',\n width: '100%',\n pointerEvents: 'none'\n },\n mounted ($heatmap) {\n let $start = null;\n let $stop = null;\n function update(arg = []) {\n $start = null;\n $stop = null;\n $heatmap.innerHTML = '';\n if (!art.duration || art.option.isLive) return;\n const svg = {\n w: $heatmap.offsetWidth,\n h: $heatmap.offsetHeight\n };\n const options = {\n xMin: 0,\n xMax: svg.w,\n yMin: 0,\n yMax: 128,\n scale: 0.25,\n opacity: 0.2,\n minHeight: Math.floor(svg.h * 0.05),\n sampling: Math.floor(svg.w / 100),\n smoothing: 0.2,\n flattening: 0.2\n };\n if (typeof option === 'object') Object.assign(options, option);\n let points = [];\n if (Array.isArray(arg) && arg.length) points = [\n ...arg\n ];\n else {\n const gap = art.duration / svg.w;\n for(let x = 0; x <= svg.w; x += options.sampling){\n const y = danmuku.queue.filter(({ time })=>time > x * gap && time <= (x + options.sampling) * gap).length;\n points.push([\n x,\n y\n ]);\n }\n }\n if (points.length === 0) return;\n const lastPoint = points[points.length - 1];\n const lastX = lastPoint[0];\n const lastY = lastPoint[1];\n if (lastX !== svg.w) points.push([\n svg.w,\n lastY\n ]);\n const yPoints = points.map((point)=>point[1]);\n const yMin = Math.min(...yPoints);\n const yMax = Math.max(...yPoints);\n const yMid = (yMin + yMax) / 2;\n for(let i = 0; i < points.length; i++){\n const point = points[i];\n const y = point[1];\n point[1] = y * (y > yMid ? 1 + options.scale : 1 - options.scale) + options.minHeight;\n }\n const controlPoint = (current, previous, next, reverse)=>{\n const p = previous || current;\n const n = next || current;\n const o = line(p, n);\n const flat = lib.map(Math.cos(o.angle) * options.flattening, 0, 1, 1, 0);\n const angle = o.angle * flat + (reverse ? Math.PI : 0);\n const length = o.length * options.smoothing;\n const x = current[0] + Math.cos(angle) * length;\n const y = current[1] + Math.sin(angle) * length;\n return [\n x,\n y\n ];\n };\n const bezierCommand = (point, i, a)=>{\n const cps = controlPoint(a[i - 1], a[i - 2], point);\n const cpe = controlPoint(point, a[i - 1], a[i + 1], true);\n const close = i === a.length - 1 ? ' z' : '';\n return `C ${cps[0]},${cps[1]} ${cpe[0]},${cpe[1]} ${point[0]},${point[1]}${close}`;\n };\n const pointsPositions = points.map((e)=>{\n const x = lib.map(e[0], options.xMin, options.xMax, 0, svg.w);\n const y = lib.map(e[1], options.yMin, options.yMax, svg.h, 0);\n return [\n x,\n y\n ];\n });\n const pathD = pointsPositions.reduce((acc, e, i, a)=>i === 0 ? `M ${a[a.length - 1][0]},${svg.h} L ${e[0]},${svg.h} L ${e[0]},${e[1]}` : `${acc} ${bezierCommand(e, i, a)}`, '');\n $heatmap.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n `;\n $start = query('#heatmap-start', $heatmap);\n $stop = query('#heatmap-stop', $heatmap);\n $start.setAttribute('offset', `${art.played * 100}%`);\n $stop.setAttribute('offset', `${art.played * 100}%`);\n }\n art.on('video:timeupdate', ()=>{\n if ($start && $stop) {\n $start.setAttribute('offset', `${art.played * 100}%`);\n $stop.setAttribute('offset', `${art.played * 100}%`);\n }\n });\n art.on('setBar', (type, percentage)=>{\n if ($start && $stop && type === 'played') {\n $start.setAttribute('offset', `${percentage * 100}%`);\n $stop.setAttribute('offset', `${percentage * 100}%`);\n }\n });\n art.on('ready', ()=>update());\n art.on('resize', ()=>update());\n art.on('artplayerPluginDanmuku:loaded', ()=>update());\n art.on('artplayerPluginDanmuku:points', (points)=>update(points));\n }\n });\n}\n\n},{\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}],\"90QKZ\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nvar _checkOffSvg = require(\"bundle-text:./img/check_off.svg\");\nvar _checkOffSvgDefault = parcelHelpers.interopDefault(_checkOffSvg);\nvar _checkOnSvg = require(\"bundle-text:./img/check_on.svg\");\nvar _checkOnSvgDefault = parcelHelpers.interopDefault(_checkOnSvg);\nvar _configSvg = require(\"bundle-text:./img/config.svg\");\nvar _configSvgDefault = parcelHelpers.interopDefault(_configSvg);\nvar _mode0OffSvg = require(\"bundle-text:./img/mode_0_off.svg\");\nvar _mode0OffSvgDefault = parcelHelpers.interopDefault(_mode0OffSvg);\nvar _mode0OnSvg = require(\"bundle-text:./img/mode_0_on.svg\");\nvar _mode0OnSvgDefault = parcelHelpers.interopDefault(_mode0OnSvg);\nvar _mode1OffSvg = require(\"bundle-text:./img/mode_1_off.svg\");\nvar _mode1OffSvgDefault = parcelHelpers.interopDefault(_mode1OffSvg);\nvar _mode1OnSvg = require(\"bundle-text:./img/mode_1_on.svg\");\nvar _mode1OnSvgDefault = parcelHelpers.interopDefault(_mode1OnSvg);\nvar _mode2OffSvg = require(\"bundle-text:./img/mode_2_off.svg\");\nvar _mode2OffSvgDefault = parcelHelpers.interopDefault(_mode2OffSvg);\nvar _mode2OnSvg = require(\"bundle-text:./img/mode_2_on.svg\");\nvar _mode2OnSvgDefault = parcelHelpers.interopDefault(_mode2OnSvg);\nvar _offSvg = require(\"bundle-text:./img/off.svg\");\nvar _offSvgDefault = parcelHelpers.interopDefault(_offSvg);\nvar _onSvg = require(\"bundle-text:./img/on.svg\");\nvar _onSvgDefault = parcelHelpers.interopDefault(_onSvg);\nvar _styleSvg = require(\"bundle-text:./img/style.svg\");\nvar _styleSvgDefault = parcelHelpers.interopDefault(_styleSvg);\nvar _styleLess = require(\"bundle-text:./style.less\");\nvar _styleLessDefault = parcelHelpers.interopDefault(_styleLess);\nclass Setting {\n constructor(art, danmuku){\n this.art = art;\n this.danmuku = danmuku;\n this.utils = art.constructor.utils;\n const { setStyle } = this.utils;\n const { $controlsCenter } = art.template;\n setStyle($controlsCenter, 'display', 'flex');\n this.template = {\n $controlsCenter,\n $mount: $controlsCenter,\n $danmuku: null,\n $toggle: null,\n $config: null,\n $configPanel: null,\n $configModes: null,\n $style: null,\n $stylePanel: null,\n $styleModes: null,\n $colors: null,\n $opacitySlider: null,\n $opacityValue: null,\n $marginSlider: null,\n $marginValue: null,\n $fontSizeSlider: null,\n $fontSizeValue: null,\n $speedSlider: null,\n $speedValue: null,\n $input: null,\n $send: null\n };\n this.slider = {\n opacity: null,\n margin: null,\n fontSize: null,\n speed: null\n };\n this.emitting = false;\n this.isLock = false;\n this.timer = null;\n this.createTemplate();\n this.createSliders();\n this.createEvents();\n this.mount(this.option.mount);\n art.on('resize', ()=>this.resize());\n art.on('fullscreen', (state)=>this.onFullscreen(state));\n art.on('fullscreenWeb', (state)=>this.onFullscreen(state));\n art.proxy(this.template.$config, 'mouseenter', ()=>{\n this.onMouseEnter({\n $control: this.template.$config,\n $panel: this.template.$configPanel\n });\n });\n art.proxy(this.template.$style, 'mouseenter', ()=>{\n this.onMouseEnter({\n $control: this.template.$style,\n $panel: this.template.$stylePanel\n });\n });\n }\n static get icons() {\n return {\n $on: (0, _onSvgDefault.default),\n $off: (0, _offSvgDefault.default),\n $config: (0, _configSvgDefault.default),\n $style: (0, _styleSvgDefault.default),\n $mode_0_off: (0, _mode0OffSvgDefault.default),\n $mode_0_on: (0, _mode0OnSvgDefault.default),\n $mode_1_off: (0, _mode1OffSvgDefault.default),\n $mode_1_on: (0, _mode1OnSvgDefault.default),\n $mode_2_off: (0, _mode2OffSvgDefault.default),\n $mode_2_on: (0, _mode2OnSvgDefault.default),\n $check_on: (0, _checkOnSvgDefault.default),\n $check_off: (0, _checkOffSvgDefault.default)\n };\n }\n get option() {\n return this.danmuku.option;\n }\n get outside() {\n return this.template.$mount !== this.template.$controlsCenter;\n }\n get TEMPLATE() {\n const { option } = this;\n return `\n

\n ${0, _onSvgDefault.default}${0, _offSvgDefault.default}\n
\n
\n ${0, _configSvgDefault.default}\n
\n
\n
\n \\u{6309}\\u{7C7B}\\u{578B}\\u{5C4F}\\u{853D}\n
\n
\n ${0, _mode0OffSvgDefault.default}${0, _mode0OnSvgDefault.default}\n
\\u{6EDA}\\u{52A8}
\n
\n
\n ${0, _mode1OffSvgDefault.default}${0, _mode1OnSvgDefault.default}\n
\\u{9876}\\u{90E8}
\n
\n
\n ${0, _mode2OffSvgDefault.default}${0, _mode2OnSvgDefault.default}\n
\\u{5E95}\\u{90E8}
\n
\n
\n
\n
\n
\n ${0, _checkOnSvgDefault.default}${0, _checkOffSvgDefault.default}\n \\u{9632}\\u{6B62}\\u{5F39}\\u{5E55}\\u{91CD}\\u{53E0}\n
\n
\n ${0, _checkOnSvgDefault.default}${0, _checkOffSvgDefault.default}\n \\u{540C}\\u{6B65}\\u{89C6}\\u{9891}\\u{901F}\\u{5EA6}\n
\n
\n
\n \\u{4E0D}\\u{900F}\\u{660E}\\u{5EA6}\n
\n
\\u{672A}\\u{77E5}
\n
\n
\n \\u{663E}\\u{793A}\\u{533A}\\u{57DF}\n
\n
\\u{672A}\\u{77E5}
\n
\n
\n \\u{5F39}\\u{5E55}\\u{5B57}\\u{53F7}\n
\n
\\u{672A}\\u{77E5}
\n
\n
\n \\u{5F39}\\u{5E55}\\u{901F}\\u{5EA6}\n
\n
\\u{672A}\\u{77E5}
\n
\n
\n
\n
\n
\n
\n ${0, _styleSvgDefault.default}\n
\n
\n
\n \\u{6A21}\\u{5F0F}\n
\n
\n ${0, _mode0OnSvgDefault.default}\n
\\u{6EDA}\\u{52A8}
\n
\n
\n ${0, _mode1OnSvgDefault.default}\n
\\u{9876}\\u{90E8}
\n
\n
\n ${0, _mode2OnSvgDefault.default}\n
\\u{5E95}\\u{90E8}
\n
\n
\n
\n
\n \\u{989C}\\u{8272}\n
\n ${this.COLOR.map((color)=>`
`).join('')}\n
\n
\n
\n
\n
\n \n
\\u{53D1}\\u{9001}
\n
\n `;\n }\n get OPACITY() {\n return {\n min: 0,\n max: 100,\n steps: [],\n ...this.option.OPACITY\n };\n }\n get FONT_SIZE() {\n return {\n min: 12,\n max: 120,\n steps: [],\n ...this.option.FONT_SIZE\n };\n }\n get MARGIN() {\n return {\n min: 0,\n max: 3,\n steps: [\n {\n name: '1/4',\n value: [\n 10,\n '75%'\n ]\n },\n {\n name: \"\\u534A\\u5C4F\",\n value: [\n 10,\n '50%'\n ]\n },\n {\n name: '3/4',\n value: [\n 10,\n '25%'\n ]\n },\n {\n name: \"\\u6EE1\\u5C4F\",\n value: [\n 10,\n 10\n ]\n }\n ],\n ...this.option.MARGIN\n };\n }\n get SPEED() {\n return {\n min: 0,\n max: 4,\n steps: [\n {\n name: \"\\u6781\\u6162\",\n value: 10\n },\n {\n name: \"\\u8F83\\u6162\",\n value: 7.5,\n hide: true\n },\n {\n name: \"\\u9002\\u4E2D\",\n value: 5\n },\n {\n name: \"\\u8F83\\u5FEB\",\n value: 2.5,\n hide: true\n },\n {\n name: \"\\u6781\\u5FEB\",\n value: 1\n }\n ],\n ...this.option.SPEED\n };\n }\n get COLOR() {\n return this.option.COLOR.length ? this.option.COLOR : [\n '#FE0302',\n '#FF7204',\n '#FFAA02',\n '#FFD302',\n '#FFFF00',\n '#A0EE00',\n '#00CD00',\n '#019899',\n '#4266BE',\n '#89D5FF',\n '#CC0273',\n '#222222',\n '#9B9B9B',\n '#FFFFFF'\n ];\n }\n query(selector) {\n const { query } = this.utils;\n const { $danmuku } = this.template;\n return query(selector, $danmuku);\n }\n append(el, target) {\n const { append } = this.utils;\n const children = [\n ...el.children\n ];\n if (children.includes(target)) return;\n append(el, target);\n }\n setData(key, value) {\n const { $player } = this.art.template;\n const { $mount } = this.template;\n $player.dataset[key] = value;\n if (this.outside) $mount.dataset[key] = value;\n }\n createTemplate() {\n const { createElement, tooltip } = this.utils;\n const $danmuku = createElement('div');\n $danmuku.className = 'artplayer-plugin-danmuku';\n $danmuku.innerHTML = this.TEMPLATE;\n this.template.$danmuku = $danmuku;\n this.template.$toggle = this.query('.apd-toggle');\n this.template.$config = this.query('.apd-config');\n this.template.$configPanel = this.query('.apd-config-panel');\n this.template.$configModes = this.query('.apd-config-mode .apd-modes');\n this.template.$style = this.query('.apd-style');\n this.template.$stylePanel = this.query('.apd-style-panel');\n this.template.$styleModes = this.query('.apd-style-mode .apd-modes');\n this.template.$colors = this.query('.apd-colors');\n this.template.$antiOverlap = this.query('.apd-anti-overlap');\n this.template.$syncVideo = this.query('.apd-sync-video');\n this.template.$opacitySlider = this.query('.apd-config-opacity .apd-slider');\n this.template.$opacityValue = this.query('.apd-config-opacity .apd-value');\n this.template.$marginSlider = this.query('.apd-config-margin .apd-slider');\n this.template.$marginValue = this.query('.apd-config-margin .apd-value');\n this.template.$fontSizeSlider = this.query('.apd-config-fontSize .apd-slider');\n this.template.$fontSizeValue = this.query('.apd-config-fontSize .apd-value');\n this.template.$speedSlider = this.query('.apd-config-speed .apd-slider');\n this.template.$speedValue = this.query('.apd-config-speed .apd-value');\n this.template.$input = this.query('.apd-input');\n this.template.$send = this.query('.apd-send');\n const { $toggle } = this.template;\n this.art.on('artplayerPluginDanmuku:show', ()=>{\n tooltip($toggle, \"\\u5173\\u95ED\\u5F39\\u5E55\");\n });\n this.art.on('artplayerPluginDanmuku:hide', ()=>{\n tooltip($toggle, \"\\u6253\\u5F00\\u5F39\\u5E55\");\n });\n }\n createEvents() {\n const { $toggle, $configModes, $styleModes, $colors, $antiOverlap, $syncVideo, $send, $input } = this.template;\n this.art.proxy($toggle, 'click', ()=>{\n this.danmuku.config({\n visible: !this.option.visible\n });\n this.reset();\n });\n this.art.proxy($configModes, 'click', (event)=>{\n const $mode = event.target.closest('.apd-mode');\n if (!$mode) return;\n const mode = Number($mode.dataset.mode);\n if (this.option.modes.includes(mode)) this.danmuku.config({\n modes: this.option.modes.filter((m)=>m !== mode)\n });\n else this.danmuku.config({\n modes: [\n ...this.option.modes,\n mode\n ]\n });\n this.reset();\n });\n this.art.proxy($antiOverlap, 'click', ()=>{\n this.danmuku.config({\n antiOverlap: !this.option.antiOverlap\n });\n this.reset();\n });\n this.art.proxy($syncVideo, 'click', ()=>{\n this.danmuku.config({\n synchronousPlayback: !this.option.synchronousPlayback\n });\n this.reset();\n });\n this.art.proxy($styleModes, 'click', (event)=>{\n const $mode = event.target.closest('.apd-mode');\n if (!$mode) return;\n const mode = Number($mode.dataset.mode);\n this.danmuku.config({\n mode\n });\n this.reset();\n });\n this.art.proxy($colors, 'click', (event)=>{\n const $color = event.target.closest('.apd-color');\n if (!$color) return;\n this.danmuku.config({\n color: $color.dataset.color\n });\n this.reset();\n });\n this.art.proxy($send, 'click', ()=>this.emit());\n this.art.proxy($input, 'keypress', (event)=>{\n if (event.key === 'Enter') {\n event.preventDefault();\n this.emit();\n }\n });\n }\n createSliders() {\n this.slider.opacity = this.createSlider({\n ...this.OPACITY,\n container: this.template.$opacitySlider,\n findIndex: ()=>{\n return Math.round(this.option.opacity * 100);\n },\n onChange: (index)=>{\n const { $opacityValue } = this.template;\n $opacityValue.textContent = `${index}%`;\n this.danmuku.config({\n opacity: index / 100\n });\n }\n });\n this.slider.margin = this.createSlider({\n ...this.MARGIN,\n container: this.template.$marginSlider,\n findIndex: ()=>{\n return this.MARGIN.steps.findIndex((item)=>item.value[0] === this.option.margin[0] && item.value[1] === this.option.margin[1]);\n },\n onChange: (index)=>{\n const margin = this.MARGIN.steps[index];\n if (!margin) return;\n const { $marginValue } = this.template;\n $marginValue.textContent = margin.name;\n this.danmuku.config({\n margin: margin.value\n });\n }\n });\n this.slider.fontSize = this.createSlider({\n ...this.FONT_SIZE,\n container: this.template.$fontSizeSlider,\n findIndex: ()=>{\n return this.danmuku.fontSize;\n },\n onChange: (index)=>{\n const { $fontSizeValue } = this.template;\n $fontSizeValue.textContent = `${index}px`;\n if (index === this.danmuku.fontSize) return;\n this.danmuku.config({\n fontSize: index\n });\n }\n });\n this.slider.speed = this.createSlider({\n ...this.SPEED,\n container: this.template.$speedSlider,\n findIndex: ()=>{\n return this.SPEED.steps.findIndex((item)=>item.value === this.option.speed);\n },\n onChange: (index)=>{\n const speed = this.SPEED.steps[index];\n if (!speed) return;\n const { $speedValue } = this.template;\n $speedValue.textContent = speed.name;\n this.danmuku.config({\n speed: speed.value\n });\n }\n });\n }\n createSlider({ min, max, container, findIndex, onChange, steps = [] }) {\n const { query, clamp, setStyle } = this.utils;\n setStyle(container, 'touch-action', 'none');\n container.innerHTML = `\n
\n
\n ${steps.map(()=>`
`).join('')}\n
\n
\n
\n
\n
\n ${steps.map((step)=>step.hide ? '' : `
${step.name}
`).join('')}\n
\n `;\n const $dot = query('.apd-slider-dot', container);\n const $progress = query('.apd-slider-progress', container);\n let isDroging = false;\n function reset(index = findIndex()) {\n if (index < min || index > max) return;\n const percentage = (index - min) / (max - min);\n $dot.style.left = `${percentage * 100}%`;\n if (steps.length === 0) $progress.style.width = $dot.style.left;\n onChange(index);\n }\n function updateLeft(event) {\n const { top, height, left, width } = container.getBoundingClientRect();\n if (this.art.isRotate) {\n const value = clamp(event.clientY - top, 0, height);\n const index = Math.round(value / height * (max - min) + min);\n reset(index);\n } else {\n const value = clamp(event.clientX - left, 0, width);\n const index = Math.round(value / width * (max - min) + min);\n reset(index);\n }\n }\n this.art.proxy(container, 'click', (event)=>{\n updateLeft.call(this, event);\n });\n this.art.proxy(container, 'pointerdown', (event)=>{\n isDroging = event.button === 0;\n });\n this.art.proxy(document, 'pointermove', (event)=>{\n if (isDroging) updateLeft.call(this, event);\n });\n this.art.proxy(document, 'pointerup', (event)=>{\n if (isDroging) {\n isDroging = false;\n updateLeft.call(this, event);\n }\n });\n return {\n reset\n };\n }\n onFullscreen(state) {\n const { $danmuku, $controlsCenter, $mount } = this.template;\n if (this.outside) {\n if (state) this.append($controlsCenter, $danmuku);\n else this.append($mount, $danmuku);\n } else this.append($controlsCenter, $danmuku);\n }\n onMouseEnter({ $control, $panel }) {\n const { $player } = this.art.template;\n const controlRect = $control.getBoundingClientRect();\n const panelRect = $panel.getBoundingClientRect();\n const playerRect = $player.getBoundingClientRect();\n const half = panelRect.width / 2 - controlRect.width / 2;\n const left = playerRect.left - (controlRect.left - half);\n const right = controlRect.right + half - playerRect.right;\n if (left > 0) $panel.style.left = `${-half + left}px`;\n else if (right > 0) $panel.style.left = `${-half - right}px`;\n else $panel.style.left = `${-half}px`;\n }\n async emit() {\n const { $input } = this.template;\n const text = $input.value.trim();\n if (!text.length) return;\n if (this.isLock) return;\n if (this.emitting) return;\n const danmu = {\n text,\n mode: this.option.mode,\n color: this.option.color,\n time: this.art.currentTime\n };\n try {\n this.emitting = true;\n const state = await this.option.beforeEmit(danmu);\n this.emitting = false;\n if (state !== true) return;\n danmu.border = true;\n delete danmu.time;\n this.danmuku.emit(danmu);\n $input.value = '';\n this.lock();\n } catch (error) {\n console.error('Error emitting danmuku:', error);\n this.emitting = false;\n }\n }\n lock() {\n const { addClass } = this.utils;\n const { $send } = this.template;\n this.isLock = true;\n let time = this.option.lockTime;\n $send.textContent = time;\n addClass($send, 'apd-lock');\n const loop = ()=>{\n this.timer = setTimeout(()=>{\n if (time === 0) this.unlock();\n else {\n time -= 1;\n $send.textContent = time;\n loop();\n }\n }, 1000);\n };\n loop();\n }\n unlock() {\n const { removeClass } = this.utils;\n const { $send } = this.template;\n clearTimeout(this.timer);\n this.isLock = false;\n $send.textContent = \"\\u53D1\\u9001\";\n removeClass($send, 'apd-lock');\n }\n resize() {\n if (this.outside) return;\n if (this.art.fullscreen) return;\n if (this.art.fullscreenWeb) return;\n const { $player, $controlsCenter } = this.art.template;\n const { $danmuku } = this.template;\n if (this.art.width < this.option.width) this.append($player, $danmuku);\n else this.append($controlsCenter, $danmuku);\n }\n reset() {\n const { inverseClass, tooltip } = this.utils;\n const { $toggle, $colors } = this.template;\n this.slider.opacity.reset();\n this.slider.margin.reset();\n this.slider.fontSize.reset();\n this.slider.speed.reset();\n this.setData('danmukuVisible', this.option.visible);\n this.setData('danmukuMode', this.option.mode);\n this.setData('danmukuColor', this.option.color);\n this.setData('danmukuMode0', this.option.modes.includes(0));\n this.setData('danmukuMode1', this.option.modes.includes(1));\n this.setData('danmukuMode2', this.option.modes.includes(2));\n this.setData('danmukuAntiOverlap', this.option.antiOverlap);\n this.setData('danmukuSyncVideo', this.option.synchronousPlayback);\n this.setData('danmukuTheme', this.option.theme);\n this.setData('danmukuEmitter', this.option.emitter);\n const colors = $colors.children;\n const $color = Array.from(colors).find((item)=>item.dataset.color === this.option.color.toUpperCase());\n $color && inverseClass($color, 'apd-active');\n tooltip($toggle, this.option.visible ? \"\\u5173\\u95ED\\u5F39\\u5E55\" : \"\\u6253\\u5F00\\u5F39\\u5E55\");\n this.resize();\n }\n mount(target) {\n const { errorHandle } = this.utils;\n const $el = typeof target === 'string' ? document.querySelector(target) : target;\n errorHandle($el, `Can not find the mount point: ${target}`);\n this.append($el, this.template.$danmuku);\n this.template.$mount = $el;\n this.reset();\n }\n}\nexports.default = Setting;\nif (typeof document !== 'undefined') {\n const id = 'artplayer-plugin-danmuku';\n let $style = document.getElementById(id);\n if (!$style) {\n $style = document.createElement('style');\n $style.id = id;\n if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', ()=>{\n document.head.appendChild($style);\n });\n else (document.head || document.documentElement).appendChild($style);\n }\n $style.textContent = (0, _styleLessDefault.default);\n}\n\n},{\"bundle-text:./img/check_off.svg\":\"4tC1X\",\"bundle-text:./img/check_on.svg\":\"iQql8\",\"bundle-text:./img/config.svg\":\"DK7bp\",\"bundle-text:./img/mode_0_off.svg\":\"fp5qd\",\"bundle-text:./img/mode_0_on.svg\":\"fYNQe\",\"bundle-text:./img/mode_1_off.svg\":\"gQMgY\",\"bundle-text:./img/mode_1_on.svg\":\"5E8Hg\",\"bundle-text:./img/mode_2_off.svg\":\"89iSb\",\"bundle-text:./img/mode_2_on.svg\":\"2YEb0\",\"bundle-text:./img/off.svg\":\"3WiJz\",\"bundle-text:./img/on.svg\":\"5XkVj\",\"bundle-text:./img/style.svg\":\"h2xX3\",\"bundle-text:./style.less\":\"dHTK8\",\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}],\"4tC1X\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"iQql8\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"DK7bp\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"fp5qd\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"fYNQe\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"gQMgY\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"5E8Hg\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"89iSb\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"2YEb0\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"3WiJz\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"5XkVj\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"h2xX3\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"dHTK8\":[function(require,module,exports,__globalThis) {\nmodule.exports = \".artplayer-plugin-danmuku{z-index:99;color:#fff;flex-shrink:0;justify-content:center;align-items:center;gap:10px;width:100%;height:32px;font-size:12px;font-weight:300;display:flex;position:relative}.artplayer-plugin-danmuku .apd-icon{cursor:pointer;opacity:.75;fill:#fff;transition:all .2s}.artplayer-plugin-danmuku .apd-icon:hover{opacity:1}.artplayer-plugin-danmuku .apd-config{display:flex;position:relative}.artplayer-plugin-danmuku .apd-config .apd-config-panel{opacity:0;pointer-events:none;width:320px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-config .apd-config-panel .apd-config-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-config:hover .apd-config-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-config-mode,.artplayer-plugin-danmuku .apd-config-slider,.artplayer-plugin-danmuku .apd-config-other,.artplayer-plugin-danmuku .apd-style-mode{margin-bottom:15px}.artplayer-plugin-danmuku .apd-modes{align-items:center;gap:20px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-modes .apd-mode{cursor:pointer;text-align:center}.artplayer-plugin-danmuku .apd-modes .apd-mode:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-config-slider{align-items:center;gap:12px;display:flex}.artplayer-plugin-danmuku .apd-config-slider .apd-value{text-align:right;width:32px}.artplayer-plugin-danmuku .apd-slider{cursor:pointer;flex:1;justify-content:center;align-items:center;height:20px;display:flex;position:relative}.artplayer-plugin-danmuku .apd-slider .apd-slider-line{background-color:#ffffff40;border-radius:3px;width:100%;height:2px;position:relative;overflow:hidden}.artplayer-plugin-danmuku .apd-slider .apd-slider-points{justify-content:space-between;align-items:center;display:flex;position:absolute;inset:0}.artplayer-plugin-danmuku .apd-slider .apd-slider-points .apd-slider-point{background-color:#ffffff80;border-radius:50%;width:2px;height:2px}.artplayer-plugin-danmuku .apd-slider .apd-slider-progress{background-color:#00a1d6;width:0%;height:100%}.artplayer-plugin-danmuku .apd-slider .apd-slider-dot{background-color:#00a1d6;border-radius:50%;width:12px;height:12px;position:absolute;left:0%;transform:translate(-6px)}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps{color:#777;justify-content:space-between;align-items:center;width:calc(100% + 32px);display:flex;position:absolute;bottom:-12px}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps .apd-slider-step{text-align:center;flex-shrink:0;width:36px;scale:.95}.artplayer-plugin-danmuku .apd-config-other{align-items:center;gap:20px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-check-off,.artplayer-plugin-danmuku .apd-config-other .apd-check-on{width:16px;height:16px}.artplayer-plugin-danmuku .apd-config-other .apd-other{cursor:pointer;align-items:center;gap:2px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-other:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-emitter{background-color:#ffffff40;border-radius:5px;flex:1;align-items:center;height:100%;display:flex}.artplayer-plugin-danmuku .apd-style{justify-content:center;align-items:center;display:flex;position:relative}.artplayer-plugin-danmuku .apd-style .apd-style-panel{opacity:0;pointer-events:none;width:200px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-style .apd-style-panel .apd-style-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-style:hover .apd-style-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-colors{flex-wrap:wrap;gap:8px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-colors .apd-color{cursor:pointer;border-radius:2px;width:16px;height:16px}.artplayer-plugin-danmuku .apd-colors .apd-color.apd-active{border:1px solid #000;box-shadow:0 0 0 1px #fff}.artplayer-plugin-danmuku .apd-input{color:#fff;background-color:#0000;border:none;outline:none;flex:1;width:auto;min-width:0;height:100%;line-height:1}.artplayer-plugin-danmuku .apd-input::placeholder{color:#ffffff80}.artplayer-plugin-danmuku .apd-send{cursor:pointer;width:60px;height:100%;text-shadow:none;background-color:#00a1d6;border-top-right-radius:5px;border-bottom-right-radius:5px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.artplayer-plugin-danmuku .apd-send.apd-lock{cursor:not-allowed;color:#666;background-color:#e7e7e7}.art-controls-center .apd-emitter{flex:none;width:260px}.art-fullscreen .artplayer-plugin-danmuku,.art-fullscreen-web .artplayer-plugin-danmuku{gap:16px;height:38px}.art-fullscreen .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen-web .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-on,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-on{width:28px;height:28px}.art-fullscreen .artplayer-plugin-danmuku .apd-emitter,.art-fullscreen-web .artplayer-plugin-danmuku .apd-emitter{flex:none;width:400px}.art-video-player>.artplayer-plugin-danmuku{padding:0 10px;position:absolute;bottom:-40px;left:0;right:0}.art-video-player:has(>.artplayer-plugin-danmuku){margin-bottom:40px}[data-danmuku-emitter=false] .apd-emitter{display:none!important}[data-danmuku-emitter=false] .art-controls-center .artplayer-plugin-danmuku{justify-content:flex-end;gap:18px}[data-danmuku-emitter=false].art-fullscreen .art-controls-center .artplayer-plugin-danmuku,[data-danmuku-emitter=false].art-fullscreen-web .art-controls-center .artplayer-plugin-danmuku{gap:24px}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-icon{fill:#333}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-emitter{background-color:#f1f2f3}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input{color:#000}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input::placeholder{color:#0000004d}[data-danmuku-visible=false] .apd-toggle-off{display:block}[data-danmuku-visible=false] .apd-toggle-on,[data-danmuku-visible=true] .apd-toggle-off{display:none}[data-danmuku-visible=true] .apd-toggle-on{display:block}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-on{display:none}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-off,[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-on{display:block}[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-off,[data-danmuku-sync-video=false] .apd-sync-video .apd-check-on{display:none}[data-danmuku-sync-video=false] .apd-sync-video .apd-check-off,[data-danmuku-sync-video=true] .apd-sync-video .apd-check-on{display:block}[data-danmuku-sync-video=true] .apd-sync-video .apd-check-off{display:none}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-off{display:block}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-on{display:none}[data-danmuku-mode0=false] .art-danmuku [data-mode=\\\"0\\\"]{opacity:0!important}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-off{display:none}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-on{display:block}[data-danmuku-mode=\\\"0\\\"] .apd-style-mode [data-mode=\\\"0\\\"]{color:#00a1d6}[data-danmuku-mode=\\\"0\\\"] .apd-style-mode [data-mode=\\\"0\\\"] path{fill:#00a1d6}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-off{display:block}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-on{display:none}[data-danmuku-mode1=false] .art-danmuku [data-mode=\\\"1\\\"]{opacity:0!important}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-off{display:none}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-on{display:block}[data-danmuku-mode=\\\"1\\\"] .apd-style-mode [data-mode=\\\"1\\\"]{color:#00a1d6}[data-danmuku-mode=\\\"1\\\"] .apd-style-mode [data-mode=\\\"1\\\"] path{fill:#00a1d6}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-off{display:block}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-on{display:none}[data-danmuku-mode2=false] .art-danmuku [data-mode=\\\"2\\\"]{opacity:0!important}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-off{display:none}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-on{display:block}[data-danmuku-mode=\\\"2\\\"] .apd-style-mode [data-mode=\\\"2\\\"]{color:#00a1d6}[data-danmuku-mode=\\\"2\\\"] .apd-style-mode [data-mode=\\\"2\\\"] path{fill:#00a1d6}\";\n\n},{}]},[\"6ZbtA\"], \"6ZbtA\", \"parcelRequire4dc0\", {})\nlet {default: _default, } = parcelRequire4dc0(\"6ZbtA\");\nexport {_default as default, };\n\n//# sourceMappingURL=index.js.map\n","import Danmuku from './danmuku'\nimport heatmap from './heatmap'\nimport Setting from './setting'\n\nexport default function artplayerPluginDanmuku(option) {\n return (art) => {\n const danmuku = new Danmuku(art, option)\n const setting = new Setting(art, danmuku)\n\n if (danmuku.option.heatmap) {\n heatmap(art, danmuku, danmuku.option.heatmap)\n }\n\n return {\n name: 'artplayerPluginDanmuku',\n emit: danmuku.emit.bind(danmuku),\n load: danmuku.load.bind(danmuku),\n config: danmuku.config.bind(danmuku),\n hide: danmuku.hide.bind(danmuku),\n show: danmuku.show.bind(danmuku),\n reset: danmuku.reset.bind(danmuku),\n mount: setting.mount.bind(setting),\n get option() {\n return danmuku.option\n },\n get isHide() {\n return danmuku.isHide\n },\n get isStop() {\n return danmuku.isStop\n },\n }\n }\n}\n\nartplayerPluginDanmuku.icons = Setting.icons\n\nif (typeof window !== 'undefined') {\n window.artplayerPluginDanmuku = artplayerPluginDanmuku\n}\n","import workerText from 'bundle-text:./worker'\nimport { bilibiliDanmuParseFromUrl } from './bilibili'\n\nexport default class Danmuku {\n constructor(art, option) {\n const { constructor, template } = art\n\n this.utils = constructor.utils // 工具库\n this.validator = constructor.validator // 配置校验器\n this.$danmuku = template.$danmuku // 弹幕层容器\n this.$player = template.$player // 播放器容器\n\n this.art = art\n this.queue = [] // 实际弹幕队列\n this.$refs = [] // 弹幕DOM节点池\n this.isStop = false // 是否停止\n this.isHide = false // 是否隐藏\n this.timer = null // 定时器\n this.index = 0 // 弹幕索引\n\n // 格式化后的配置项\n this.option = Danmuku.option\n\n // 弹幕状态池\n this.states = { wait: [], ready: [], emit: [], stop: [] }\n\n // 初始化配置\n this.config(option, true)\n\n // 创建 Web Worker, 用于计算弹幕的 top 值\n const workerText2 = workerText.replace('export{e as default};', '')\n const blob = new Blob([workerText2], { type: 'application/javascript' })\n this.worker = new Worker(URL.createObjectURL(blob))\n\n // 绑定公用事件\n this.start = this.start.bind(this)\n this.stop = this.stop.bind(this)\n this.reset = this.reset.bind(this)\n this.resize = this.resize.bind(this)\n this.destroy = this.destroy.bind(this)\n\n // 监听事件\n art.on('video:play', this.start)\n art.on('video:playing', this.start)\n art.on('video:pause', this.stop)\n art.on('video:waiting', this.stop)\n art.on('destroy', this.destroy)\n art.on('resize', this.resize)\n\n // 开始加载弹幕\n this.load()\n }\n\n // 默认配置\n static get option() {\n return {\n danmuku: [], // 弹幕数据\n speed: 5, // 弹幕持续时间,范围在[1 ~ 10]\n margin: [10, '25%'], // 弹幕上下边距,支持像素数字和百分比\n opacity: 1, // 弹幕透明度,范围在[0 ~ 1]\n color: '#FFFFFF', // 默认弹幕颜色,可以被单独弹幕项覆盖\n mode: 0, // 默认弹幕模式: 0: 滚动,1: 顶部,2: 底部\n modes: [0, 1, 2], // 弹幕可见的模式\n fontSize: 25, // 弹幕字体大小,支持像素数字和百分比\n antiOverlap: true, // 弹幕是否防重叠\n synchronousPlayback: false, // 是否同步播放速度\n mount: undefined, // 弹幕发射器挂载点, 默认为播放器控制栏中部\n heatmap: false, // 是否开启热力图\n width: 512, // 当播放器宽度小于此值时,弹幕发射器置于播放器底部\n points: [], // 热力图数据\n filter: () => true, // 弹幕载入前的过滤器,只支持返回布尔值\n beforeEmit: () => true, // 弹幕发送前的过滤器,支持返回 Promise\n beforeVisible: () => true, // 弹幕显示前的过滤器,支持返回 Promise\n visible: true, // 弹幕层是否可见\n emitter: true, // 是否开启弹幕发射器\n maxLength: 200, // 弹幕输入框最大长度, 范围在[1 ~ 1000]\n lockTime: 5, // 输入框锁定时间,范围在[1 ~ 60]\n theme: 'dark', // 弹幕主题,支持 dark 和 light,只在自定义挂载时生效\n OPACITY: {}, // 不透明度配置项\n FONT_SIZE: {}, // 弹幕字号配置项\n MARGIN: {}, // 显示区域配置项\n SPEED: {}, // 弹幕速度配置项\n COLOR: [], // 颜色列表配置项\n }\n }\n\n // 配置校验\n static get scheme() {\n return {\n danmuku: 'array|function|string',\n speed: 'number',\n margin: 'array',\n opacity: 'number',\n color: 'string',\n mode: 'number',\n modes: 'array',\n fontSize: 'number|string',\n antiOverlap: 'boolean',\n synchronousPlayback: 'boolean',\n mount: '?htmldivelement|string',\n heatmap: 'object|boolean',\n width: 'number',\n points: 'array',\n filter: 'function',\n beforeEmit: 'function',\n beforeVisible: 'function',\n visible: 'boolean',\n emitter: 'boolean',\n maxLength: 'number',\n lockTime: 'number',\n theme: 'string',\n OPACITY: 'object',\n FONT_SIZE: 'object',\n MARGIN: 'object',\n SPEED: 'object',\n COLOR: 'array',\n }\n }\n\n // 初始弹幕样式\n static get cssText() {\n return `\n user-select: none;\n position: absolute;\n white-space: pre;\n pointer-events: none;\n perspective: 500px;\n display: inline-block;\n will-change: transform;\n font-weight: normal;\n line-height: 1.125;\n visibility: hidden;\n font-family: SimHei, \"Microsoft JhengHei\", Arial, Helvetica, sans-serif;\n text-shadow: rgb(0, 0, 0) 1px 0px 1px, rgb(0, 0, 0) 0px 1px 1px, rgb(0, 0, 0) 0px -1px 1px, rgb(0, 0, 0) -1px 0px 1px;\n `\n }\n\n // 是否在移动端使用了自动旋屏,会影响弹幕的left和top值\n get isRotate() {\n return this.art.plugins?.autoOrientation?.state\n }\n\n // 计算上空白边距\n get marginTop() {\n const { clamp } = this.utils\n const value = this.option.margin[0]\n const { clientHeight } = this.$player\n\n if (typeof value === 'number') {\n return clamp(value, 0, clientHeight)\n }\n\n if (typeof value === 'string' && value.endsWith('%')) {\n const ratio = Number.parseFloat(value) / 100\n return clamp(clientHeight * ratio, 0, clientHeight)\n }\n\n return Danmuku.option.margin[0]\n }\n\n // 计算下空白边距\n get marginBottom() {\n const { clamp } = this.utils\n const value = this.option.margin[1]\n const { clientHeight } = this.$player\n\n if (typeof value === 'number') {\n return clamp(value, 0, clientHeight)\n }\n\n if (typeof value === 'string' && value.endsWith('%')) {\n const ratio = Number.parseFloat(value) / 100\n return clamp(clientHeight * ratio, 0, clientHeight)\n }\n\n return Danmuku.option.margin[1]\n }\n\n // 计算弹幕字体大小\n get fontSize() {\n const { clamp } = this.utils\n const { clientHeight } = this.$player\n\n const fontSize = this.option.fontSize\n\n if (typeof fontSize === 'number') {\n return Math.round(clamp(fontSize, 12, clientHeight))\n }\n\n if (typeof fontSize === 'string' && fontSize.endsWith('%')) {\n const ratio = Number.parseFloat(fontSize) / 100\n return Math.round(clamp(clientHeight * ratio, 12, clientHeight))\n }\n\n return Danmuku.option.fontSize\n }\n\n // 获取弹幕DOM节点\n get $ref() {\n const $ref = this.$refs.pop() || document.createElement('div')\n $ref.style.cssText = Danmuku.cssText\n $ref.dataset.mode = ''\n $ref.className = ''\n return $ref\n }\n\n // 获取准备好发送的弹幕\n get readys() {\n const { currentTime } = this.art\n\n const result = []\n\n // 有的是ready状态:之前因为弹幕太多而暂停发送的弹幕\n this.filter('ready', danmu => result.push(danmu))\n\n // 有的是wait状态:符合时间范围的弹幕\n this.filter('wait', (danmu) => {\n if (currentTime + 0.1 >= danmu.time && danmu.time >= currentTime - 0.1) {\n result.push(danmu)\n }\n })\n\n return result\n }\n\n // 可见的弹幕的数据,用于计算下一个弹幕的top值\n get visibles() {\n const result = []\n const { clientWidth } = this.$player\n const clientLeft = this.getLeft(this.$player)\n\n this.filter('emit', (danmu) => {\n const top = danmu.$ref.offsetTop\n const left = this.getLeft(danmu.$ref) - clientLeft\n const height = danmu.$ref.clientHeight\n const width = danmu.$ref.clientWidth\n const distance = left + width\n const right = clientWidth - distance\n const speed = distance / danmu.$restTime\n\n const emit = {}\n emit.top = top\n emit.left = left\n emit.height = height\n emit.width = width\n emit.right = right\n emit.speed = speed\n emit.distance = distance\n emit.time = danmu.$restTime\n emit.mode = danmu.mode\n\n result.push(emit)\n })\n\n return result\n }\n\n // 计算弹幕速度\n get speed() {\n return this.option.synchronousPlayback && this.art.playbackRate\n ? this.option.speed / Number(this.art.playbackRate)\n : this.option.speed\n }\n\n // 加载弹幕\n async load(danmuku) {\n const { errorHandle } = this.utils\n\n let danmus = []\n const target = danmuku || this.option.danmuku\n\n try {\n if (typeof target === 'function') {\n danmus = await target() // 异步函数获取\n }\n else if (target instanceof Promise) {\n danmus = await target // 从 Promise 对象获取\n }\n else if (typeof target === 'string') {\n danmus = await bilibiliDanmuParseFromUrl(target) // 从B站xml链接解析\n }\n else if (Array.isArray(target)) {\n danmus = target // 直接传入数组\n }\n\n errorHandle(Array.isArray(danmus), 'Danmuku need return an array as result')\n\n // 假如没有传入弹幕参数,则清空弹幕,否则追加弹幕\n if (danmuku === undefined) {\n this.reset() // 重置弹幕\n this.queue = [] // 清空弹幕队列\n this.states = { wait: [], ready: [], emit: [], stop: [] } // 清空弹幕状态池\n this.$refs = [] // 清空弹幕DOM节点池\n this.$danmuku.textContent = '' // 清空弹幕层\n }\n\n // 逐个验证原始弹幕并转换到弹幕队列\n for (let index = 0; index < danmus.length; index++) {\n const danmu = danmus[index]\n await this.emit(danmu)\n }\n\n this.art.emit('artplayerPluginDanmuku:loaded', this.queue)\n }\n catch (error) {\n this.art.emit('artplayerPluginDanmuku:error', error)\n throw error\n }\n\n return this\n }\n\n // 把原始弹幕转换到弹幕队列\n async emit(danmu) {\n const { clamp } = this.utils\n\n this.validator(danmu, {\n text: 'string', // 弹幕文本\n mode: '?number', // 弹幕模式: 0: 滚动,1: 顶部,2: 底部\n color: '?string', // 弹幕颜色\n time: '?number', // 弹幕时间\n border: '?boolean', // 弹幕是否有边框\n style: '?object', // 弹幕额外样式\n })\n\n // 弹幕文本为空则直接忽略\n if (!danmu.text.trim())\n return this\n\n // 设置弹幕时间,如果没有则默认为当前时间加 0.5 秒\n if (danmu.time) {\n danmu.time = clamp(danmu.time, 0, Infinity)\n }\n else {\n danmu.time = this.art.currentTime + 0.5\n }\n\n // 设置弹幕模式,如果没有则默认为全局配置\n if (danmu.mode === undefined) {\n danmu.mode = this.option.mode\n }\n\n // 设置弹幕单独样式,如果没有则默认为空对象\n if (danmu.style === undefined) {\n danmu.style = {}\n }\n\n // 设置弹幕颜色,如果没有则默认为全局配置\n if (danmu.color === undefined) {\n danmu.color = this.option.color\n }\n\n // 弹幕模式只能是 0, 1, 2\n if (![0, 1, 2].includes(danmu.mode))\n return this\n\n // 自定义弹幕过滤函数\n if (!this.option.filter(danmu))\n return this\n\n // 添加自定义属性\n const item = {\n ...danmu,\n $state: 'wait', // 弹幕初始状态\n $id: this.index++, // 弹幕唯一标识\n $ref: null, // 弹幕 DOM 节点\n $restTime: 0, // 弹幕剩余时间\n $lastStartTime: 0, // 弹幕上次开始时间\n }\n\n // 转换为wait状态\n this.setState(item, 'wait')\n\n // 添加到实际弹幕队列\n this.queue.push(item)\n\n // 弹幕有四个状态:\n // - wait: 弹幕还未开始显示,没有被添加到 DOM 中\n // - ready: 弹幕准备好显示,没有被添加到 DOM 中\n // - emit: 弹幕正在显示,已经被添加到 DOM 中\n // - stop: 弹幕正在停止显示,已经被添加到 DOM 中\n\n return this\n }\n\n // 动态配置\n config(option, isInit = false) {\n const { clamp } = this.utils\n const { $controlsCenter } = this.art.template\n\n // 判断配置项是否有变化\n const changed = Object.keys(option).some(\n key => JSON.stringify(this.option[key]) !== JSON.stringify(option[key]),\n )\n\n // 没有变化则直接返回\n if (!changed && !isInit)\n return this\n\n // 更新配置项\n this.option = Object.assign({}, Danmuku.option, this.option, option)\n this.validator(this.option, Danmuku.scheme)\n\n this.option.mode = clamp(this.option.mode, 0, 2)\n this.option.speed = clamp(this.option.speed, 1, 10)\n this.option.opacity = clamp(this.option.opacity, 0, 1)\n this.option.lockTime = clamp(this.option.lockTime, 1, 60)\n this.option.maxLength = clamp(this.option.maxLength, 1, 1000)\n this.option.mount = this.option.mount || $controlsCenter\n\n // 动态配置有字体大小,需要重新渲染\n if (option.fontSize) {\n this.reset()\n }\n\n // 通过配置项控制弹幕的显示和隐藏\n if (this.option.visible) {\n this.show()\n }\n else {\n this.hide()\n }\n\n this.art.emit('artplayerPluginDanmuku:config', this.option)\n\n return this\n }\n\n // 计算DOM的left值,受到旋屏影响\n getLeft($ref) {\n const rect = $ref.getBoundingClientRect()\n return this.isRotate ? rect.top : rect.left\n }\n\n // 复杂运算交给 Web Worker 处理\n postMessage(message = {}) {\n return new Promise((resolve) => {\n message.id = Date.now() // 生成唯一标识\n this.worker.postMessage(message)\n this.worker.onmessage = (event) => {\n const { data } = event\n // 判断是否是当前的消息\n if (data.id === message.id) {\n resolve(data)\n }\n }\n })\n }\n\n // 根据状态获取弹幕\n filter(state, callback) {\n const danmus = this.states[state] || []\n for (let index = 0; index < danmus.length; index++) {\n callback(danmus[index])\n }\n return danmus\n }\n\n // 设置弹幕状态\n setState(danmu, state) {\n // 从原状态池中删除\n this.states[danmu.$state] = this.states[danmu.$state].filter(item => item !== danmu)\n\n // 设置新状态\n danmu.$state = state\n\n // 设置DOM节点状态\n if (danmu.$ref) {\n danmu.$ref.dataset.state = state\n }\n\n // 添加到新状态池中\n this.states[state].push(danmu)\n }\n\n // 重置弹幕到wait状态,回收弹幕DOM节点\n makeWait(danmu) {\n this.setState(danmu, 'wait')\n if (danmu.$ref) {\n danmu.$ref.style.cssText = Danmuku.cssText\n danmu.$ref.style.visibility = 'hidden'\n danmu.$ref.style.marginLeft = '0px'\n danmu.$ref.style.transform = 'translateX(0px)'\n danmu.$ref.style.transition = 'transform 0s linear 0s'\n this.$refs.push(danmu.$ref)\n danmu.$ref = null\n }\n }\n\n // 实时更新弹幕\n update() {\n const { setStyles } = this.utils\n\n this.timer = window.requestAnimationFrame(async () => {\n if (this.art.playing && !this.isHide) {\n // 实时计算弹幕的剩余显示时间\n this.filter('emit', (danmu) => {\n const emitTime = (Date.now() - danmu.$lastStartTime) / 1000\n danmu.$restTime -= emitTime\n danmu.$lastStartTime = Date.now()\n // 超过时间即重置弹幕\n if (danmu.$restTime <= 0) {\n this.makeWait(danmu)\n }\n })\n\n // 获取准备好发送的弹幕,可能包含ready和wait状态的弹幕\n const readys = this.readys\n\n for (let index = 0; index < readys.length; index++) {\n const danmu = readys[index]\n\n // 弹幕发送前的过滤器\n const state = await this.option.beforeVisible(danmu)\n\n if (state) {\n const { clientWidth, clientHeight } = this.$player\n danmu.$ref = this.$ref // 获取弹幕DOM节点\n danmu.$ref.textContent = danmu.text // 设置弹幕文本\n\n // 提前添加到弹幕层中,用于计算top值\n this.$danmuku.appendChild(danmu.$ref)\n\n // 设置初始弹幕样式\n danmu.$ref.style.opacity = this.option.opacity\n danmu.$ref.style.fontSize = `${this.fontSize}px`\n danmu.$ref.style.color = danmu.color\n danmu.$ref.style.border = danmu.border ? `1px solid ${danmu.color}` : null\n danmu.$ref.style.backgroundColor = danmu.border ? 'rgb(0 0 0 / 50%)' : null\n\n // 设置单独弹幕样式\n setStyles(danmu.$ref, danmu.style)\n\n // 记录弹幕时间戳\n danmu.$lastStartTime = Date.now()\n\n // 计算弹幕剩余时间\n danmu.$restTime = this.speed\n\n // 计算弹幕滚动的距离\n const distance = clientWidth + danmu.$ref.clientWidth\n\n // 计算弹幕的top值\n const { result: top } = await this.postMessage({\n type: 'getDanmuTop',\n target: {\n mode: danmu.mode,\n height: danmu.$ref.clientHeight,\n speed: distance / danmu.$restTime,\n }, // 当前弹幕信息\n visibles: this.visibles, // 可见的弹幕的数据\n antiOverlap: this.option.antiOverlap,\n clientWidth,\n clientHeight,\n marginBottom: this.marginBottom,\n marginTop: this.marginTop,\n })\n\n if (danmu.$ref) {\n if (!this.isStop && top !== undefined) {\n this.setState(danmu, 'emit') // 转换为emit状态\n danmu.$ref.style.top = `${top}px`\n danmu.$ref.style.visibility = 'visible'\n danmu.$ref.dataset.mode = danmu.mode // CSS控制模式的显示和隐藏\n\n switch (danmu.mode) {\n // 滚动的弹幕\n case 0: {\n danmu.$ref.style.left = `${clientWidth}px`\n danmu.$ref.style.marginLeft = '0px'\n danmu.$ref.style.transform = `translateX(${-distance}px)`\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`\n break\n }\n case 1:\n // falls through\n case 2:\n danmu.$ref.style.left = '50%'\n danmu.$ref.style.marginLeft = `-${danmu.$ref.clientWidth / 2}px`\n break\n default:\n break\n }\n\n this.art.emit('artplayerPluginDanmuku:visible', danmu)\n }\n else {\n // 假如弹幕已经停止或者没有 top 值,则重置弹幕为ready状态,回收弹幕DOM节点,等待下次发送\n this.setState(danmu, 'ready')\n this.$refs.push(danmu.$ref)\n danmu.$ref = null\n }\n }\n }\n }\n }\n\n // 递归调用\n if (!this.isStop) {\n this.update()\n }\n })\n return this\n }\n\n // 重置正在显示的弹幕: stop/emit 状态的弹幕\n resize() {\n const { clientWidth } = this.$player\n\n this.filter('stop', (danmu) => {\n switch (danmu.mode) {\n // 滚动的弹幕\n case 0:\n danmu.$ref.style.left = `${clientWidth}px`\n break\n default:\n break\n }\n })\n\n this.filter('emit', (danmu) => {\n danmu.$lastStartTime = Date.now()\n switch (danmu.mode) {\n // 滚动的弹幕\n case 0: {\n const distance = clientWidth + danmu.$ref.clientWidth\n danmu.$ref.style.left = `${clientWidth}px`\n danmu.$ref.style.transform = `translateX(${-distance}px)`\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`\n break\n }\n default:\n break\n }\n })\n }\n\n // 继续弹幕\n continue() {\n const { clientWidth } = this.$player\n this.filter('stop', (danmu) => {\n this.setState(danmu, 'emit') // 转换为emit状态\n danmu.$lastStartTime = Date.now()\n switch (danmu.mode) {\n // 继续滚动的弹幕\n case 0: {\n const distance = clientWidth + danmu.$ref.clientWidth\n danmu.$ref.style.transform = `translateX(${-distance}px)`\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`\n break\n }\n default:\n break\n }\n })\n\n return this\n }\n\n // 暂停弹幕\n suspend() {\n const { clientWidth } = this.$player\n this.filter('emit', (danmu) => {\n this.setState(danmu, 'stop') // 转换为stop状态\n switch (danmu.mode) {\n // 停止滚动的弹幕\n case 0: {\n const translateX = clientWidth - (this.getLeft(danmu.$ref) - this.getLeft(this.$player))\n danmu.$ref.style.transform = `translateX(${-translateX}px)`\n danmu.$ref.style.transition = 'transform 0s linear 0s'\n break\n }\n default:\n break\n }\n })\n\n return this\n }\n\n stop() {\n this.isStop = true\n this.suspend()\n window.cancelAnimationFrame(this.timer)\n this.art.emit('artplayerPluginDanmuku:stop')\n return this\n }\n\n start() {\n this.isStop = false\n this.continue()\n this.update()\n this.art.emit('artplayerPluginDanmuku:start')\n return this\n }\n\n reset() {\n this.queue.forEach(danmu => this.makeWait(danmu))\n this.art.emit('artplayerPluginDanmuku:reset')\n return this\n }\n\n show() {\n this.isHide = false\n this.$danmuku.style.opacity = 1\n this.option.visible = true\n this.art.emit('artplayerPluginDanmuku:show')\n return this\n }\n\n hide() {\n this.isHide = true\n this.$danmuku.style.opacity = 0\n this.option.visible = false\n this.art.emit('artplayerPluginDanmuku:hide')\n return this\n }\n\n destroy() {\n this.stop()\n this.worker.terminate()\n this.art.off('video:play', this.start)\n this.art.off('video:playing', this.start)\n this.art.off('video:pause', this.stop)\n this.art.off('video:waiting', this.stop)\n this.art.off('resize', this.reset)\n this.art.off('destroy', this.destroy)\n this.art.emit('artplayerPluginDanmuku:destroy')\n }\n}\n","module.exports = \"dd7efcb5fd87c1c0\";","function getMode(key) {\n switch (key) {\n case 1:\n case 2:\n case 3:\n return 0\n case 4:\n return 2\n case 5:\n return 1\n default:\n return 0\n }\n}\n\nfunction bilibiliDanmuParseFromXml(xmlString) {\n if (typeof xmlString !== 'string')\n return []\n const reg = /]*?p=\"(?

[^\"]+)\"[^>]*>(?.*?)<\\/d>/gs\n const matches = xmlString.matchAll(reg)\n return Array.from(matches)\n .map((match) => {\n const attr = match.groups.p.split(',')\n if (attr.length >= 8) {\n const text = match.groups.text\n .trim()\n .replaceAll('"', '\"')\n .replaceAll(''', '\\'')\n .replaceAll('<', '<')\n .replaceAll('>', '>')\n .replaceAll('&', '&')\n\n return {\n text,\n time: Number(attr[0]),\n mode: getMode(Number(attr[1])),\n fontSize: Number(attr[2]),\n color: `#${Number(attr[3]).toString(16)}`,\n timestamp: Number(attr[4]),\n pool: Number(attr[5]),\n userID: attr[6],\n rowID: Number(attr[7]),\n }\n }\n else {\n return null\n }\n })\n .filter(Boolean)\n}\n\nfunction onmessage({ data }) {\n const { xml, id } = data\n if (!id || !xml)\n return\n const danmus = bilibiliDanmuParseFromXml(xml)\n globalThis.postMessage({ danmus, id })\n}\n\nfunction createWorker() {\n const workerText = `\n ${getMode.toString()}\n ${bilibiliDanmuParseFromXml.toString()}\n onmessage = ${onmessage.toString()}\n `\n const blob = new Blob([workerText], { type: 'application/javascript' })\n return new Worker(URL.createObjectURL(blob))\n}\n\nexport function bilibiliDanmuParseFromUrl(url) {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve) => {\n const res = await fetch(url)\n const xml = await res.text()\n\n try {\n const worker = createWorker()\n worker.onmessage = (event) => {\n const { danmus, id } = event.data\n if (!id || !danmus)\n return\n resolve(danmus)\n worker.terminate()\n }\n worker.postMessage({ xml, id: Date.now() })\n }\n catch (error) {\n console.error('Error parsing Bilibili Danmu:', error)\n const danmus = bilibiliDanmuParseFromXml(xml)\n resolve(danmus)\n }\n })\n}\n","exports.interopDefault = function (a) {\n return a && a.__esModule ? a : {default: a};\n};\n\nexports.defineInteropFlag = function (a) {\n Object.defineProperty(a, '__esModule', {value: true});\n};\n\nexports.exportAll = function (source, dest) {\n Object.keys(source).forEach(function (key) {\n if (\n key === 'default' ||\n key === '__esModule' ||\n Object.prototype.hasOwnProperty.call(dest, key)\n ) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function () {\n return source[key];\n },\n });\n });\n\n return dest;\n};\n\nexports.export = function (dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get,\n });\n};\n","const lib = {\n map(value, inMin, inMax, outMin, outMax) {\n return ((value - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin\n },\n range(start, end, tick) {\n const s = Math.round(start / tick) * tick\n return Array.from(\n {\n length: Math.floor((end - start) / tick),\n },\n (v, k) => {\n return k * tick + s\n },\n )\n },\n}\n\nfunction line(pointA, pointB) {\n const lengthX = pointB[0] - pointA[0]\n const lengthY = pointB[1] - pointA[1]\n return {\n length: Math.sqrt(lengthX ** 2 + lengthY ** 2),\n angle: Math.atan2(lengthY, lengthX),\n }\n}\n\nexport default function heatmap(art, danmuku, option) {\n const { query } = art.constructor.utils\n\n art.controls.add({\n name: 'heatmap',\n position: 'top',\n html: '',\n style: {\n position: 'absolute',\n top: '-100px',\n left: '0px',\n right: '0px',\n height: '100px',\n width: '100%',\n pointerEvents: 'none',\n },\n mounted($heatmap) {\n let $start = null\n let $stop = null\n\n function update(arg = []) {\n $start = null\n $stop = null\n $heatmap.innerHTML = ''\n\n if (!art.duration || art.option.isLive)\n return\n\n const svg = {\n w: $heatmap.offsetWidth,\n h: $heatmap.offsetHeight,\n }\n\n const options = {\n xMin: 0,\n xMax: svg.w,\n yMin: 0,\n yMax: 128,\n scale: 0.25,\n opacity: 0.2,\n minHeight: Math.floor(svg.h * 0.05),\n sampling: Math.floor(svg.w / 100),\n smoothing: 0.2,\n flattening: 0.2,\n }\n\n if (typeof option === 'object') {\n Object.assign(options, option)\n }\n\n let points = []\n\n if (Array.isArray(arg) && arg.length) {\n points = [...arg]\n }\n else {\n const gap = art.duration / svg.w\n for (let x = 0; x <= svg.w; x += options.sampling) {\n const y = danmuku.queue.filter(\n ({ time }) => time > x * gap && time <= (x + options.sampling) * gap,\n ).length\n points.push([x, y])\n }\n }\n\n if (points.length === 0)\n return\n\n const lastPoint = points[points.length - 1]\n const lastX = lastPoint[0]\n const lastY = lastPoint[1]\n if (lastX !== svg.w) {\n points.push([svg.w, lastY])\n }\n\n const yPoints = points.map(point => point[1])\n const yMin = Math.min(...yPoints)\n const yMax = Math.max(...yPoints)\n const yMid = (yMin + yMax) / 2\n\n for (let i = 0; i < points.length; i++) {\n const point = points[i]\n const y = point[1]\n point[1] = y * (y > yMid ? 1 + options.scale : 1 - options.scale) + options.minHeight\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n const o = line(p, n)\n const flat = lib.map(Math.cos(o.angle) * options.flattening, 0, 1, 1, 0)\n const angle = o.angle * flat + (reverse ? Math.PI : 0)\n const length = o.length * options.smoothing\n const x = current[0] + Math.cos(angle) * length\n const y = current[1] + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const cps = controlPoint(a[i - 1], a[i - 2], point)\n const cpe = controlPoint(point, a[i - 1], a[i + 1], true)\n const close = i === a.length - 1 ? ' z' : ''\n return `C ${cps[0]},${cps[1]} ${cpe[0]},${cpe[1]} ${point[0]},${point[1]}${close}`\n }\n\n const pointsPositions = points.map((e) => {\n const x = lib.map(e[0], options.xMin, options.xMax, 0, svg.w)\n const y = lib.map(e[1], options.yMin, options.yMax, svg.h, 0)\n return [x, y]\n })\n\n const pathD = pointsPositions.reduce(\n (acc, e, i, a) =>\n i === 0\n ? `M ${a[a.length - 1][0]},${svg.h} L ${e[0]},${svg.h} L ${e[0]},${e[1]}`\n : `${acc} ${bezierCommand(e, i, a)}`,\n '',\n )\n\n $heatmap.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n `\n\n $start = query('#heatmap-start', $heatmap)\n $stop = query('#heatmap-stop', $heatmap)\n $start.setAttribute('offset', `${art.played * 100}%`)\n $stop.setAttribute('offset', `${art.played * 100}%`)\n }\n\n art.on('video:timeupdate', () => {\n if ($start && $stop) {\n $start.setAttribute('offset', `${art.played * 100}%`)\n $stop.setAttribute('offset', `${art.played * 100}%`)\n }\n })\n\n art.on('setBar', (type, percentage) => {\n if ($start && $stop && type === 'played') {\n $start.setAttribute('offset', `${percentage * 100}%`)\n $stop.setAttribute('offset', `${percentage * 100}%`)\n }\n })\n\n art.on('ready', () => update())\n art.on('resize', () => update())\n art.on('artplayerPluginDanmuku:loaded', () => update())\n art.on('artplayerPluginDanmuku:points', points => update(points))\n },\n })\n}\n","import $check_off from 'bundle-text:./img/check_off.svg'\nimport $check_on from 'bundle-text:./img/check_on.svg'\nimport $config from 'bundle-text:./img/config.svg'\nimport $mode_0_off from 'bundle-text:./img/mode_0_off.svg'\nimport $mode_0_on from 'bundle-text:./img/mode_0_on.svg'\nimport $mode_1_off from 'bundle-text:./img/mode_1_off.svg'\nimport $mode_1_on from 'bundle-text:./img/mode_1_on.svg'\nimport $mode_2_off from 'bundle-text:./img/mode_2_off.svg'\nimport $mode_2_on from 'bundle-text:./img/mode_2_on.svg'\nimport $off from 'bundle-text:./img/off.svg'\nimport $on from 'bundle-text:./img/on.svg'\nimport $style from 'bundle-text:./img/style.svg'\nimport style from 'bundle-text:./style.less'\n\nexport default class Setting {\n constructor(art, danmuku) {\n this.art = art\n this.danmuku = danmuku\n this.utils = art.constructor.utils\n\n const { setStyle } = this.utils\n const { $controlsCenter } = art.template\n setStyle($controlsCenter, 'display', 'flex')\n\n this.template = {\n $controlsCenter,\n $mount: $controlsCenter,\n $danmuku: null,\n $toggle: null,\n $config: null,\n $configPanel: null,\n $configModes: null,\n $style: null,\n $stylePanel: null,\n $styleModes: null,\n $colors: null,\n $opacitySlider: null,\n $opacityValue: null,\n $marginSlider: null,\n $marginValue: null,\n $fontSizeSlider: null,\n $fontSizeValue: null,\n $speedSlider: null,\n $speedValue: null,\n $input: null,\n $send: null,\n }\n\n this.slider = {\n opacity: null,\n margin: null,\n fontSize: null,\n speed: null,\n }\n\n this.emitting = false\n this.isLock = false\n this.timer = null\n\n this.createTemplate()\n this.createSliders()\n this.createEvents()\n\n this.mount(this.option.mount)\n\n art.on('resize', () => this.resize())\n art.on('fullscreen', state => this.onFullscreen(state))\n art.on('fullscreenWeb', state => this.onFullscreen(state))\n\n art.proxy(this.template.$config, 'mouseenter', () => {\n this.onMouseEnter({\n $control: this.template.$config,\n $panel: this.template.$configPanel,\n })\n })\n\n art.proxy(this.template.$style, 'mouseenter', () => {\n this.onMouseEnter({\n $control: this.template.$style,\n $panel: this.template.$stylePanel,\n })\n })\n }\n\n static get icons() {\n return {\n $on,\n $off,\n $config,\n $style,\n $mode_0_off,\n $mode_0_on,\n $mode_1_off,\n $mode_1_on,\n $mode_2_off,\n $mode_2_on,\n $check_on,\n $check_off,\n }\n }\n\n get option() {\n return this.danmuku.option\n }\n\n get outside() {\n return this.template.$mount !== this.template.$controlsCenter\n }\n\n get TEMPLATE() {\n const { option } = this\n return `\n

\n ${$on}${$off}\n
\n
\n ${$config}\n
\n
\n
\n 按类型屏蔽\n
\n
\n ${$mode_0_off}${$mode_0_on}\n
滚动
\n
\n
\n ${$mode_1_off}${$mode_1_on}\n
顶部
\n
\n
\n ${$mode_2_off}${$mode_2_on}\n
底部
\n
\n
\n
\n
\n
\n ${$check_on}${$check_off}\n 防止弹幕重叠\n
\n
\n ${$check_on}${$check_off}\n 同步视频速度\n
\n
\n
\n 不透明度\n
\n
未知
\n
\n
\n 显示区域\n
\n
未知
\n
\n
\n 弹幕字号\n
\n
未知
\n
\n
\n 弹幕速度\n
\n
未知
\n
\n
\n
\n
\n
\n
\n ${$style}\n
\n
\n
\n 模式\n
\n
\n ${$mode_0_on}\n
滚动
\n
\n
\n ${$mode_1_on}\n
顶部
\n
\n
\n ${$mode_2_on}\n
底部
\n
\n
\n
\n
\n 颜色\n
\n ${this.COLOR.map(color => `
`).join('')}\n
\n
\n
\n
\n
\n \n
发送
\n
\n `\n }\n\n get OPACITY() {\n return {\n min: 0,\n max: 100,\n steps: [],\n ...this.option.OPACITY,\n }\n }\n\n get FONT_SIZE() {\n return {\n min: 12,\n max: 120,\n steps: [],\n ...this.option.FONT_SIZE,\n }\n }\n\n get MARGIN() {\n return {\n min: 0,\n max: 3,\n steps: [\n {\n name: '1/4',\n value: [10, '75%'],\n },\n {\n name: '半屏',\n value: [10, '50%'],\n },\n {\n name: '3/4',\n value: [10, '25%'],\n },\n {\n name: '满屏',\n value: [10, 10],\n },\n ],\n ...this.option.MARGIN,\n }\n }\n\n get SPEED() {\n return {\n min: 0,\n max: 4,\n steps: [\n {\n name: '极慢',\n value: 10,\n },\n {\n name: '较慢',\n value: 7.5,\n hide: true,\n },\n {\n name: '适中',\n value: 5,\n },\n {\n name: '较快',\n value: 2.5,\n hide: true,\n },\n {\n name: '极快',\n value: 1,\n },\n ],\n ...this.option.SPEED,\n }\n }\n\n get COLOR() {\n return this.option.COLOR.length\n ? this.option.COLOR\n : [\n '#FE0302',\n '#FF7204',\n '#FFAA02',\n '#FFD302',\n '#FFFF00',\n '#A0EE00',\n '#00CD00',\n '#019899',\n '#4266BE',\n '#89D5FF',\n '#CC0273',\n '#222222',\n '#9B9B9B',\n '#FFFFFF',\n ]\n }\n\n query(selector) {\n const { query } = this.utils\n const { $danmuku } = this.template\n return query(selector, $danmuku)\n }\n\n append(el, target) {\n const { append } = this.utils\n const children = [...el.children]\n if (children.includes(target))\n return\n append(el, target)\n }\n\n setData(key, value) {\n const { $player } = this.art.template\n const { $mount } = this.template\n $player.dataset[key] = value\n if (this.outside) {\n $mount.dataset[key] = value\n }\n }\n\n createTemplate() {\n const { createElement, tooltip } = this.utils\n\n const $danmuku = createElement('div')\n $danmuku.className = 'artplayer-plugin-danmuku'\n $danmuku.innerHTML = this.TEMPLATE\n\n this.template.$danmuku = $danmuku\n this.template.$toggle = this.query('.apd-toggle')\n this.template.$config = this.query('.apd-config')\n this.template.$configPanel = this.query('.apd-config-panel')\n this.template.$configModes = this.query('.apd-config-mode .apd-modes')\n this.template.$style = this.query('.apd-style')\n this.template.$stylePanel = this.query('.apd-style-panel')\n this.template.$styleModes = this.query('.apd-style-mode .apd-modes')\n this.template.$colors = this.query('.apd-colors')\n this.template.$antiOverlap = this.query('.apd-anti-overlap')\n this.template.$syncVideo = this.query('.apd-sync-video')\n this.template.$opacitySlider = this.query('.apd-config-opacity .apd-slider')\n this.template.$opacityValue = this.query('.apd-config-opacity .apd-value')\n this.template.$marginSlider = this.query('.apd-config-margin .apd-slider')\n this.template.$marginValue = this.query('.apd-config-margin .apd-value')\n this.template.$fontSizeSlider = this.query('.apd-config-fontSize .apd-slider')\n this.template.$fontSizeValue = this.query('.apd-config-fontSize .apd-value')\n this.template.$speedSlider = this.query('.apd-config-speed .apd-slider')\n this.template.$speedValue = this.query('.apd-config-speed .apd-value')\n this.template.$input = this.query('.apd-input')\n this.template.$send = this.query('.apd-send')\n\n const { $toggle } = this.template\n\n this.art.on('artplayerPluginDanmuku:show', () => {\n tooltip($toggle, '关闭弹幕')\n })\n\n this.art.on('artplayerPluginDanmuku:hide', () => {\n tooltip($toggle, '打开弹幕')\n })\n }\n\n createEvents() {\n const { $toggle, $configModes, $styleModes, $colors, $antiOverlap, $syncVideo, $send, $input } = this.template\n\n this.art.proxy($toggle, 'click', () => {\n this.danmuku.config({\n visible: !this.option.visible,\n })\n this.reset()\n })\n\n this.art.proxy($configModes, 'click', (event) => {\n const $mode = event.target.closest('.apd-mode')\n if (!$mode)\n return\n const mode = Number($mode.dataset.mode)\n if (this.option.modes.includes(mode)) {\n this.danmuku.config({\n modes: this.option.modes.filter(m => m !== mode),\n })\n }\n else {\n this.danmuku.config({\n modes: [...this.option.modes, mode],\n })\n }\n this.reset()\n })\n\n this.art.proxy($antiOverlap, 'click', () => {\n this.danmuku.config({\n antiOverlap: !this.option.antiOverlap,\n })\n this.reset()\n })\n\n this.art.proxy($syncVideo, 'click', () => {\n this.danmuku.config({\n synchronousPlayback: !this.option.synchronousPlayback,\n })\n this.reset()\n })\n\n this.art.proxy($styleModes, 'click', (event) => {\n const $mode = event.target.closest('.apd-mode')\n if (!$mode)\n return\n const mode = Number($mode.dataset.mode)\n this.danmuku.config({\n mode,\n })\n this.reset()\n })\n\n this.art.proxy($colors, 'click', (event) => {\n const $color = event.target.closest('.apd-color')\n if (!$color)\n return\n this.danmuku.config({\n color: $color.dataset.color,\n })\n this.reset()\n })\n\n this.art.proxy($send, 'click', () => this.emit())\n\n this.art.proxy($input, 'keypress', (event) => {\n if (event.key === 'Enter') {\n event.preventDefault()\n this.emit()\n }\n })\n }\n\n createSliders() {\n this.slider.opacity = this.createSlider({\n ...this.OPACITY,\n container: this.template.$opacitySlider,\n findIndex: () => {\n return Math.round(this.option.opacity * 100)\n },\n onChange: (index) => {\n const { $opacityValue } = this.template\n $opacityValue.textContent = `${index}%`\n this.danmuku.config({\n opacity: index / 100,\n })\n },\n })\n\n this.slider.margin = this.createSlider({\n ...this.MARGIN,\n container: this.template.$marginSlider,\n findIndex: () => {\n return this.MARGIN.steps.findIndex(\n item => item.value[0] === this.option.margin[0] && item.value[1] === this.option.margin[1],\n )\n },\n onChange: (index) => {\n const margin = this.MARGIN.steps[index]\n if (!margin)\n return\n const { $marginValue } = this.template\n $marginValue.textContent = margin.name\n this.danmuku.config({\n margin: margin.value,\n })\n },\n })\n\n this.slider.fontSize = this.createSlider({\n ...this.FONT_SIZE,\n container: this.template.$fontSizeSlider,\n findIndex: () => {\n return this.danmuku.fontSize\n },\n onChange: (index) => {\n const { $fontSizeValue } = this.template\n $fontSizeValue.textContent = `${index}px`\n if (index === this.danmuku.fontSize)\n return\n this.danmuku.config({\n fontSize: index,\n })\n },\n })\n\n this.slider.speed = this.createSlider({\n ...this.SPEED,\n container: this.template.$speedSlider,\n findIndex: () => {\n return this.SPEED.steps.findIndex(item => item.value === this.option.speed)\n },\n onChange: (index) => {\n const speed = this.SPEED.steps[index]\n if (!speed)\n return\n const { $speedValue } = this.template\n $speedValue.textContent = speed.name\n this.danmuku.config({\n speed: speed.value,\n })\n },\n })\n }\n\n createSlider({ min, max, container, findIndex, onChange, steps = [] }) {\n const { query, clamp, setStyle } = this.utils\n\n setStyle(container, 'touch-action', 'none')\n\n container.innerHTML = `\n
\n
\n ${steps.map(() => `
`).join('')}\n
\n
\n
\n
\n
\n ${steps.map(step => (step.hide ? '' : `
${step.name}
`)).join('')}\n
\n `\n\n const $dot = query('.apd-slider-dot', container)\n const $progress = query('.apd-slider-progress', container)\n\n let isDroging = false\n\n function reset(index = findIndex()) {\n if (index < min || index > max)\n return\n const percentage = (index - min) / (max - min)\n $dot.style.left = `${percentage * 100}%`\n if (steps.length === 0) {\n $progress.style.width = $dot.style.left\n }\n onChange(index)\n }\n\n function updateLeft(event) {\n const { top, height, left, width } = container.getBoundingClientRect()\n if (this.art.isRotate) {\n const value = clamp(event.clientY - top, 0, height)\n const index = Math.round((value / height) * (max - min) + min)\n reset(index)\n }\n else {\n const value = clamp(event.clientX - left, 0, width)\n const index = Math.round((value / width) * (max - min) + min)\n reset(index)\n }\n }\n\n this.art.proxy(container, 'click', (event) => {\n updateLeft.call(this, event)\n })\n\n this.art.proxy(container, 'pointerdown', (event) => {\n isDroging = event.button === 0\n })\n\n this.art.proxy(document, 'pointermove', (event) => {\n if (isDroging) {\n updateLeft.call(this, event)\n }\n })\n\n this.art.proxy(document, 'pointerup', (event) => {\n if (isDroging) {\n isDroging = false\n updateLeft.call(this, event)\n }\n })\n\n return { reset }\n }\n\n onFullscreen(state) {\n const { $danmuku, $controlsCenter, $mount } = this.template\n if (this.outside) {\n if (state) {\n this.append($controlsCenter, $danmuku)\n }\n else {\n this.append($mount, $danmuku)\n }\n }\n else {\n this.append($controlsCenter, $danmuku)\n }\n }\n\n onMouseEnter({ $control, $panel }) {\n const { $player } = this.art.template\n const controlRect = $control.getBoundingClientRect()\n const panelRect = $panel.getBoundingClientRect()\n const playerRect = $player.getBoundingClientRect()\n\n const half = panelRect.width / 2 - controlRect.width / 2\n const left = playerRect.left - (controlRect.left - half)\n const right = controlRect.right + half - playerRect.right\n\n if (left > 0) {\n $panel.style.left = `${-half + left}px`\n }\n else if (right > 0) {\n $panel.style.left = `${-half - right}px`\n }\n else {\n $panel.style.left = `${-half}px`\n }\n }\n\n async emit() {\n const { $input } = this.template\n\n const text = $input.value.trim()\n if (!text.length)\n return\n if (this.isLock)\n return\n if (this.emitting)\n return\n\n const danmu = {\n text,\n mode: this.option.mode,\n color: this.option.color,\n time: this.art.currentTime,\n }\n\n try {\n this.emitting = true\n const state = await this.option.beforeEmit(danmu)\n this.emitting = false\n\n if (state !== true)\n return\n\n danmu.border = true\n delete danmu.time\n this.danmuku.emit(danmu)\n $input.value = ''\n\n this.lock()\n }\n catch (error) {\n console.error('Error emitting danmuku:', error)\n this.emitting = false\n }\n }\n\n lock() {\n const { addClass } = this.utils\n const { $send } = this.template\n\n this.isLock = true\n let time = this.option.lockTime\n $send.textContent = time\n addClass($send, 'apd-lock')\n\n const loop = () => {\n this.timer = setTimeout(() => {\n if (time === 0) {\n this.unlock()\n }\n else {\n time -= 1\n $send.textContent = time\n loop()\n }\n }, 1000)\n }\n\n loop()\n }\n\n unlock() {\n const { removeClass } = this.utils\n const { $send } = this.template\n clearTimeout(this.timer)\n this.isLock = false\n $send.textContent = '发送'\n removeClass($send, 'apd-lock')\n }\n\n resize() {\n if (this.outside)\n return\n if (this.art.fullscreen)\n return\n if (this.art.fullscreenWeb)\n return\n const { $player, $controlsCenter } = this.art.template\n const { $danmuku } = this.template\n if (this.art.width < this.option.width) {\n this.append($player, $danmuku)\n }\n else {\n this.append($controlsCenter, $danmuku)\n }\n }\n\n reset() {\n const { inverseClass, tooltip } = this.utils\n const { $toggle, $colors } = this.template\n\n this.slider.opacity.reset()\n this.slider.margin.reset()\n this.slider.fontSize.reset()\n this.slider.speed.reset()\n\n this.setData('danmukuVisible', this.option.visible)\n this.setData('danmukuMode', this.option.mode)\n this.setData('danmukuColor', this.option.color)\n this.setData('danmukuMode0', this.option.modes.includes(0))\n this.setData('danmukuMode1', this.option.modes.includes(1))\n this.setData('danmukuMode2', this.option.modes.includes(2))\n this.setData('danmukuAntiOverlap', this.option.antiOverlap)\n this.setData('danmukuSyncVideo', this.option.synchronousPlayback)\n this.setData('danmukuTheme', this.option.theme)\n this.setData('danmukuEmitter', this.option.emitter)\n\n const colors = $colors.children\n const $color = Array.from(colors).find(item => item.dataset.color === this.option.color.toUpperCase())\n $color && inverseClass($color, 'apd-active')\n\n tooltip($toggle, this.option.visible ? '关闭弹幕' : '打开弹幕')\n\n this.resize()\n }\n\n mount(target) {\n const { errorHandle } = this.utils\n const $el = typeof target === 'string' ? document.querySelector(target) : target\n errorHandle($el, `Can not find the mount point: ${target}`)\n this.append($el, this.template.$danmuku)\n this.template.$mount = $el\n this.reset()\n }\n}\n\nif (typeof document !== 'undefined') {\n const id = 'artplayer-plugin-danmuku'\n let $style = document.getElementById(id)\n if (!$style) {\n $style = document.createElement('style')\n $style.id = id\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => {\n document.head.appendChild($style)\n })\n }\n else {\n (document.head || document.documentElement).appendChild($style)\n }\n }\n $style.textContent = style\n}\n","module.exports = \"0616b3f5e6434b38\";","module.exports = \"8e2849d281974e34\";","module.exports = \"49c14b4dbf213408\";","module.exports = \"a0f690bca27acdee\";","module.exports = \"70b07d4e4796c39f\";","module.exports = \"bffb346eb331a03f\";","module.exports = \"ade441db0e7be833\";","module.exports = \"8acc265c0fe9e947\";","module.exports = \"d374f135d6d7b8db\";","module.exports = \"4e92064d88d9e604\";","module.exports = \"c6881a3522f2fe2a\";","module.exports = \"5050154cc04e750f\";","module.exports = \"95fd45dd2fe5c5a5\";"],"names":["modules","entry","mainEntry","parcelRequireName","externals","distDir","publicUrl","devServer","globalObject","globalThis","self","window","global","previousRequire","importMap","i","cache","nodeRequire","module","require","bind","newRequire","name","jumped","currentRequire","err","Error","code","localRequire","resolve","x","id","Module","call","exports","res","isParcelRequire","moduleName","bundle","parent","register","Object","defineProperty","get","length","mainExports","define","amd","__globalThis","parcelHelpers","defineInteropFlag","export","artplayerPluginDanmuku","_danmuku","_danmukuDefault","interopDefault","_heatmap","_heatmapDefault","_setting","_settingDefault","option","art","danmuku","default","setting","heatmap","emit","load","config","hide","show","reset","mount","isHide","isStop","icons","_worker","_workerDefault","_bilibili","Danmuku","constructor","template","utils","validator","$danmuku","$player","queue","$refs","timer","index","states","wait","ready","stop","blob","Blob","replace","type","worker","Worker","URL","createObjectURL","start","resize","destroy","on","speed","margin","opacity","color","mode","modes","fontSize","antiOverlap","synchronousPlayback","undefined","width","points","filter","beforeEmit","beforeVisible","visible","emitter","maxLength","lockTime","theme","OPACITY","FONT_SIZE","MARGIN","SPEED","COLOR","scheme","cssText","isRotate","plugins","autoOrientation","state","marginTop","clamp","value","clientHeight","endsWith","Number","parseFloat","marginBottom","Math","round","$ref","pop","document","createElement","style","dataset","className","readys","currentTime","result","danmu","push","time","visibles","clientWidth","clientLeft","getLeft","top","offsetTop","left","height","distance","$restTime","right","playbackRate","errorHandle","danmus","target","Promise","bilibiliDanmuParseFromUrl","Array","isArray","textContent","error","text","border","trim","Infinity","includes","item","$state","$id","$lastStartTime","setState","isInit","$controlsCenter","keys","some","key","JSON","stringify","assign","rect","getBoundingClientRect","postMessage","message","Date","now","onmessage","event","data","callback","makeWait","visibility","marginLeft","transform","transition","update","setStyles","requestAnimationFrame","playing","emitTime","appendChild","backgroundColor","continue","suspend","translateX","cancelAnimationFrame","forEach","terminate","off","getMode","bilibiliDanmuParseFromXml","xmlString","from","matchAll","map","match","attr","groups","p","split","replaceAll","toString","timestamp","pool","userID","rowID","Boolean","xml","url","fetch","createWorker","console","a","__esModule","exportAll","source","dest","prototype","hasOwnProperty","enumerable","destName","lib","inMin","inMax","outMin","outMax","range","end","tick","s","floor","v","k","query","controls","add","position","html","pointerEvents","mounted","$heatmap","$start","$stop","arg","innerHTML","duration","isLive","svg","w","offsetWidth","h","offsetHeight","options","xMin","xMax","yMin","yMax","scale","minHeight","sampling","smoothing","flattening","gap","y","lastPoint","lastX","lastY","yPoints","point","yMid","min","max","controlPoint","current","previous","next","reverse","o","line","pointA","pointB","lengthX","lengthY","sqrt","angle","atan2","flat","cos","PI","sin","pathD","pointsPositions","e","reduce","acc","bezierCommand","cps","cpe","close","setAttribute","played","percentage","_checkOffSvg","_checkOffSvgDefault","_checkOnSvg","_checkOnSvgDefault","_configSvg","_configSvgDefault","_mode0OffSvg","_mode0OffSvgDefault","_mode0OnSvg","_mode0OnSvgDefault","_mode1OffSvg","_mode1OffSvgDefault","_mode1OnSvg","_mode1OnSvgDefault","_mode2OffSvg","_mode2OffSvgDefault","_mode2OnSvg","_mode2OnSvgDefault","_offSvg","_offSvgDefault","_onSvg","_onSvgDefault","_styleSvg","_styleSvgDefault","_styleLess","_styleLessDefault","setStyle","$mount","$toggle","$config","$configPanel","$configModes","$style","$stylePanel","$styleModes","$colors","$opacitySlider","$opacityValue","$marginSlider","$marginValue","$fontSizeSlider","$fontSizeValue","$speedSlider","$speedValue","$input","$send","slider","emitting","isLock","createTemplate","createSliders","createEvents","onFullscreen","proxy","onMouseEnter","$control","$panel","$on","$off","$mode_0_off","$mode_0_on","$mode_1_off","$mode_1_on","$mode_2_off","$mode_2_on","$check_on","$check_off","outside","TEMPLATE","join","steps","selector","append","el","children","setData","tooltip","$antiOverlap","$syncVideo","$mode","closest","m","$color","preventDefault","createSlider","container","findIndex","onChange","step","$dot","$progress","isDroging","updateLeft","clientY","clientX","button","controlRect","panelRect","playerRect","half","lock","addClass","loop","setTimeout","unlock","removeClass","clearTimeout","fullscreen","fullscreenWeb","inverseClass","find","toUpperCase","$el","querySelector","getElementById","readyState","addEventListener","head","documentElement","_default","parcelRequire4dc0"],"version":3,"file":"index.js.map"} \ No newline at end of file +{"mappings":"C,A,S,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,E,I,E,A,a,O,W,W,A,a,O,K,K,A,a,O,O,O,A,a,O,O,O,C,E,E,A,Y,O,C,C,E,E,C,C,E,C,E,E,C,E,C,E,E,E,K,E,C,E,E,A,a,O,Q,A,Y,O,O,O,E,O,O,C,I,C,Q,S,E,C,C,C,E,G,C,C,C,E,C,C,G,C,C,C,E,C,C,G,C,C,E,C,O,C,C,E,C,I,E,A,Y,O,C,C,E,E,C,C,E,C,G,C,G,E,O,E,E,C,G,G,E,O,E,E,C,G,G,G,A,U,O,E,O,E,G,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,O,C,S,C,E,I,E,C,C,E,C,E,C,E,C,O,A,M,E,E,C,E,E,K,C,C,E,I,E,C,C,E,C,I,E,M,C,G,C,C,E,C,E,C,I,C,E,O,C,E,E,E,O,C,E,C,O,C,C,E,C,O,C,S,E,C,E,I,E,E,O,C,G,M,A,C,I,E,C,E,E,E,C,C,E,e,C,C,E,E,M,C,S,C,E,I,C,E,C,E,I,C,M,C,E,I,C,O,C,E,I,C,O,C,C,C,E,E,O,C,E,E,K,C,E,E,M,C,E,E,O,C,K,E,E,S,C,K,E,E,S,C,K,E,E,C,C,E,E,Q,C,S,C,C,C,E,C,C,E,C,C,S,C,C,C,E,E,O,C,C,E,C,E,A,E,O,c,C,E,O,C,I,W,O,C,C,E,A,C,G,C,C,E,C,E,I,I,E,E,E,E,M,C,I,E,C,C,E,E,G,E,C,I,E,E,E,A,C,U,O,S,A,a,O,O,O,O,C,E,A,Y,O,Q,O,G,E,O,W,O,C,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,E,I,E,E,kD,E,iB,C,GCIwB,EAAA,MAAA,CAAA,EAAA,UAAA,IAAA,GAJxB,IAAA,EAAA,EAAA,a,E,E,c,C,GACA,EAAA,EAAA,a,E,E,c,C,GACA,EAAA,EAAA,a,E,E,c,C,GAEe,SAAS,EAAuB,CAAM,EACnD,OAAO,AAAC,IACN,IAAM,EAAU,GAAI,CAAA,EAAA,EAAA,OAAM,AAAN,EAAQ,EAAK,GAC3B,EAAU,GAAI,CAAA,EAAA,EAAA,OAAM,AAAN,EAAQ,EAAK,GAMjC,OAJI,EAAQ,MAAM,CAAC,OAAO,EACxB,AAAA,CAAA,EAAA,EAAA,OAAO,AAAP,EAAQ,EAAK,E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,CAAC,GAAU,EAC1E,EAAY,EAAK,CAAC,8BAA8B,EAAE,EAAA,CAAQ,EAC1D,IAAI,CAAC,MAAM,CAAC,EAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,EACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAG,EACvB,IAAI,CAAC,KAAK,EACZ,CACF,EAEI,AAAoB,aAApB,OAAO,SAA0B,CACnC,IAAM,EAAK,2BACP,EAAS,SAAS,cAAc,CAAC,GAChC,IAEH,AADA,CAAA,EAAS,SAAS,aAAa,CAAC,QAAhC,EACO,EAAE,CAAG,EACR,AAAwB,YAAxB,SAAS,UAAU,CACrB,SAAS,gBAAgB,CAAC,mBAAoB,KAC5C,SAAS,IAAI,CAAC,WAAW,CAAC,EAC5B,GAGC,AAAA,CAAA,SAAS,IAAI,EAAI,SAAS,eAAc,AAAd,EAAiB,WAAW,CAAC,IAG5D,EAAO,WAAW,CAAG,EAAA,OAAK,AAC5B,C,E,C,kC,Q,iC,Q,+B,Q,mC,Q,kC,Q,mC,Q,kC,Q,mC,Q,kC,Q,4B,Q,2B,Q,8B,Q,2B,Q,iD,O,E,C,Q,C,S,C,C,C,C,C,C,C,EC5vBA,EAAO,OAAO,CAAG,kU,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,+Z,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,omE,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,onB,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,sW,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,kjB,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,iT,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,4hB,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,sT,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,+rD,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,y0D,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,ib,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,grQ,E,C,E,E,C,Q,C,Q,oB,C,G,G,C,Q,C,C,C,kB,gB,K,O","sources":["","packages/artplayer-plugin-danmuku/src/index.js","packages/artplayer-plugin-danmuku/src/danmuku.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-d75e4ef33e90ad74.js","packages/artplayer-plugin-danmuku/src/bilibili.js","node_modules/@parcel/transformer-js/src/esmodule-helpers.js","packages/artplayer-plugin-danmuku/src/heatmap.js","packages/artplayer-plugin-danmuku/src/setting.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-b1f4705e590c7693.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-75df9b67e4ad9f34.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-966493d38fa25693.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-e438774eb5592ca2.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-f628b445d36caf1f.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-df73f5e9e2ab004b.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-1de8ba84e2efbede.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-9ccdc626e87ba3ee.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-9a7360dad8cdbe5b.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-2eccf06bbefc75d0.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-3f382cbac81656d4.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-17da0f3cb542825d.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-d4507e9bfc00ded0.js"],"sourcesContent":["// modules are defined as an array\n// [ module function, map of requires ]\n//\n// map of requires is short require name -> numeric require\n//\n// anything defined in a previous bundle is accessed via the\n// orig method which is the require for previous bundles\n\n(function (\n modules,\n entry,\n mainEntry,\n parcelRequireName,\n externals,\n distDir,\n publicUrl,\n devServer\n) {\n /* eslint-disable no-undef */\n var globalObject =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\n /* eslint-enable no-undef */\n\n // Save the require from previous bundle to this closure if any\n var previousRequire =\n typeof globalObject[parcelRequireName] === 'function' &&\n globalObject[parcelRequireName];\n\n var importMap = previousRequire.i || {};\n var cache = previousRequire.cache || {};\n // Do not use `require` to prevent Webpack from trying to bundle this call\n var nodeRequire =\n typeof module !== 'undefined' &&\n typeof module.require === 'function' &&\n module.require.bind(module);\n\n function newRequire(name, jumped) {\n if (!cache[name]) {\n if (!modules[name]) {\n if (externals[name]) {\n return externals[name];\n }\n // if we cannot find the module within our internal map or\n // cache jump to the current global require ie. the last bundle\n // that was added to the page.\n var currentRequire =\n typeof globalObject[parcelRequireName] === 'function' &&\n globalObject[parcelRequireName];\n if (!jumped && currentRequire) {\n return currentRequire(name, true);\n }\n\n // If there are other bundles on this page the require from the\n // previous one is saved to 'previousRequire'. Repeat this as\n // many times as there are bundles until the module is found or\n // we exhaust the require chain.\n if (previousRequire) {\n return previousRequire(name, true);\n }\n\n // Try the node require function if it exists.\n if (nodeRequire && typeof name === 'string') {\n return nodeRequire(name);\n }\n\n var err = new Error(\"Cannot find module '\" + name + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n }\n\n localRequire.resolve = resolve;\n localRequire.cache = {};\n\n var module = (cache[name] = new newRequire.Module(name));\n\n modules[name][0].call(\n module.exports,\n localRequire,\n module,\n module.exports,\n globalObject\n );\n }\n\n return cache[name].exports;\n\n function localRequire(x) {\n var res = localRequire.resolve(x);\n return res === false ? {} : newRequire(res);\n }\n\n function resolve(x) {\n var id = modules[name][1][x];\n return id != null ? id : x;\n }\n }\n\n function Module(moduleName) {\n this.id = moduleName;\n this.bundle = newRequire;\n this.require = nodeRequire;\n this.exports = {};\n }\n\n newRequire.isParcelRequire = true;\n newRequire.Module = Module;\n newRequire.modules = modules;\n newRequire.cache = cache;\n newRequire.parent = previousRequire;\n newRequire.distDir = distDir;\n newRequire.publicUrl = publicUrl;\n newRequire.devServer = devServer;\n newRequire.i = importMap;\n newRequire.register = function (id, exports) {\n modules[id] = [\n function (require, module) {\n module.exports = exports;\n },\n {},\n ];\n };\n\n // Only insert newRequire.load when it is actually used.\n // The code in this file is linted against ES5, so dynamic import is not allowed.\n // INSERT_LOAD_HERE\n\n Object.defineProperty(newRequire, 'root', {\n get: function () {\n return globalObject[parcelRequireName];\n },\n });\n\n globalObject[parcelRequireName] = newRequire;\n\n for (var i = 0; i < entry.length; i++) {\n newRequire(entry[i]);\n }\n\n if (mainEntry) {\n // Expose entry point to Node, AMD or browser globals\n // Based on https://github.com/ForbesLindesay/umd/blob/master/template.js\n var mainExports = newRequire(mainEntry);\n\n // CommonJS\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n module.exports = mainExports;\n\n // RequireJS\n } else if (typeof define === 'function' && define.amd) {\n define(function () {\n return mainExports;\n });\n }\n }\n})({\"6ZbtA\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nparcelHelpers.export(exports, \"default\", ()=>artplayerPluginDanmuku);\nvar _danmuku = require(\"./danmuku\");\nvar _danmukuDefault = parcelHelpers.interopDefault(_danmuku);\nvar _heatmap = require(\"./heatmap\");\nvar _heatmapDefault = parcelHelpers.interopDefault(_heatmap);\nvar _setting = require(\"./setting\");\nvar _settingDefault = parcelHelpers.interopDefault(_setting);\nfunction artplayerPluginDanmuku(option) {\n return (art)=>{\n const danmuku = new (0, _danmukuDefault.default)(art, option);\n const setting = new (0, _settingDefault.default)(art, danmuku);\n if (danmuku.option.heatmap) (0, _heatmapDefault.default)(art, danmuku, danmuku.option.heatmap);\n return {\n name: 'artplayerPluginDanmuku',\n emit: danmuku.emit.bind(danmuku),\n load: danmuku.load.bind(danmuku),\n config: danmuku.config.bind(danmuku),\n hide: danmuku.hide.bind(danmuku),\n show: danmuku.show.bind(danmuku),\n reset: danmuku.reset.bind(danmuku),\n mount: setting.mount.bind(setting),\n get option () {\n return danmuku.option;\n },\n get isHide () {\n return danmuku.isHide;\n },\n get isStop () {\n return danmuku.isStop;\n }\n };\n };\n}\nartplayerPluginDanmuku.icons = (0, _settingDefault.default).icons;\nif (typeof window !== 'undefined') window.artplayerPluginDanmuku = artplayerPluginDanmuku;\n\n},{\"./danmuku\":\"6C7g0\",\"./heatmap\":\"h2ayY\",\"./setting\":\"90QKZ\",\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}],\"6C7g0\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nvar _worker = require(\"bundle-text:./worker\");\nvar _workerDefault = parcelHelpers.interopDefault(_worker);\nvar _bilibili = require(\"./bilibili\");\nclass Danmuku {\n constructor(art, option){\n const { constructor, template } = art;\n this.utils = constructor.utils // 工具库\n ;\n this.validator = constructor.validator // 配置校验器\n ;\n this.$danmuku = template.$danmuku // 弹幕层容器\n ;\n this.$player = template.$player // 播放器容器\n ;\n this.art = art;\n this.queue = [] // 实际弹幕队列\n ;\n this.$refs = [] // 弹幕DOM节点池\n ;\n this.isStop = false // 是否停止\n ;\n this.isHide = false // 是否隐藏\n ;\n this.timer = null // 定时器\n ;\n this.index = 0 // 弹幕索引\n ;\n // 格式化后的配置项\n this.option = Danmuku.option;\n // 弹幕状态池\n this.states = {\n wait: [],\n ready: [],\n emit: [],\n stop: []\n };\n // 初始化配置\n this.config(option, true);\n // 创建 Web Worker, 用于计算弹幕的 top 值\n const workerText2 = (0, _workerDefault.default).replace('export{e as default};', '');\n const blob = new Blob([\n workerText2\n ], {\n type: 'application/javascript'\n });\n this.worker = new Worker(URL.createObjectURL(blob));\n // 绑定公用事件\n this.start = this.start.bind(this);\n this.stop = this.stop.bind(this);\n this.reset = this.reset.bind(this);\n this.resize = this.resize.bind(this);\n this.destroy = this.destroy.bind(this);\n // 监听事件\n art.on('video:play', this.start);\n art.on('video:playing', this.start);\n art.on('video:pause', this.stop);\n art.on('video:waiting', this.stop);\n art.on('destroy', this.destroy);\n art.on('resize', this.resize);\n // 开始加载弹幕\n this.load();\n }\n // 默认配置\n static get option() {\n return {\n danmuku: [],\n speed: 5,\n margin: [\n 10,\n '25%'\n ],\n opacity: 1,\n color: '#FFFFFF',\n mode: 0,\n modes: [\n 0,\n 1,\n 2\n ],\n fontSize: 25,\n antiOverlap: true,\n synchronousPlayback: false,\n mount: undefined,\n heatmap: false,\n width: 512,\n points: [],\n filter: ()=>true,\n beforeEmit: ()=>true,\n beforeVisible: ()=>true,\n visible: true,\n emitter: true,\n maxLength: 200,\n lockTime: 5,\n theme: 'dark',\n OPACITY: {},\n FONT_SIZE: {},\n MARGIN: {},\n SPEED: {},\n COLOR: []\n };\n }\n // 配置校验\n static get scheme() {\n return {\n danmuku: 'array|function|string',\n speed: 'number',\n margin: 'array',\n opacity: 'number',\n color: 'string',\n mode: 'number',\n modes: 'array',\n fontSize: 'number|string',\n antiOverlap: 'boolean',\n synchronousPlayback: 'boolean',\n mount: '?htmldivelement|string',\n heatmap: 'object|boolean',\n width: 'number',\n points: 'array',\n filter: 'function',\n beforeEmit: 'function',\n beforeVisible: 'function',\n visible: 'boolean',\n emitter: 'boolean',\n maxLength: 'number',\n lockTime: 'number',\n theme: 'string',\n OPACITY: 'object',\n FONT_SIZE: 'object',\n MARGIN: 'object',\n SPEED: 'object',\n COLOR: 'array'\n };\n }\n // 初始弹幕样式\n static get cssText() {\n return `\n user-select: none;\n position: absolute;\n white-space: pre;\n pointer-events: none;\n perspective: 500px;\n display: inline-block;\n will-change: transform;\n font-weight: normal;\n line-height: 1.125;\n visibility: hidden;\n font-family: SimHei, \"Microsoft JhengHei\", Arial, Helvetica, sans-serif;\n text-shadow: rgb(0, 0, 0) 1px 0px 1px, rgb(0, 0, 0) 0px 1px 1px, rgb(0, 0, 0) 0px -1px 1px, rgb(0, 0, 0) -1px 0px 1px;\n `;\n }\n // 是否在移动端使用了自动旋屏,会影响弹幕的left和top值\n get isRotate() {\n return this.art.plugins?.autoOrientation?.state;\n }\n // 计算上空白边距\n get marginTop() {\n const { clamp } = this.utils;\n const value = this.option.margin[0];\n const { clientHeight } = this.$player;\n if (typeof value === 'number') return clamp(value, 0, clientHeight);\n if (typeof value === 'string' && value.endsWith('%')) {\n const ratio = Number.parseFloat(value) / 100;\n return clamp(clientHeight * ratio, 0, clientHeight);\n }\n return Danmuku.option.margin[0];\n }\n // 计算下空白边距\n get marginBottom() {\n const { clamp } = this.utils;\n const value = this.option.margin[1];\n const { clientHeight } = this.$player;\n if (typeof value === 'number') return clamp(value, 0, clientHeight);\n if (typeof value === 'string' && value.endsWith('%')) {\n const ratio = Number.parseFloat(value) / 100;\n return clamp(clientHeight * ratio, 0, clientHeight);\n }\n return Danmuku.option.margin[1];\n }\n // 计算弹幕字体大小\n get fontSize() {\n const { clamp } = this.utils;\n const { clientHeight } = this.$player;\n const fontSize = this.option.fontSize;\n if (typeof fontSize === 'number') return Math.round(clamp(fontSize, 12, clientHeight));\n if (typeof fontSize === 'string' && fontSize.endsWith('%')) {\n const ratio = Number.parseFloat(fontSize) / 100;\n return Math.round(clamp(clientHeight * ratio, 12, clientHeight));\n }\n return Danmuku.option.fontSize;\n }\n // 获取弹幕DOM节点\n get $ref() {\n const $ref = this.$refs.pop() || document.createElement('div');\n $ref.style.cssText = Danmuku.cssText;\n $ref.dataset.mode = '';\n $ref.dataset.id = '';\n $ref.className = '';\n return $ref;\n }\n // 获取准备好发送的弹幕\n get readys() {\n const { currentTime } = this.art;\n const result = [];\n // 有的是ready状态:之前因为弹幕太多而暂停发送的弹幕\n this.filter('ready', (danmu)=>result.push(danmu));\n // 有的是wait状态:符合时间范围的弹幕\n this.filter('wait', (danmu)=>{\n if (currentTime + 0.1 >= danmu.time && danmu.time >= currentTime - 0.1) result.push(danmu);\n });\n return result;\n }\n // 可见的弹幕的数据,用于计算下一个弹幕的top值\n get visibles() {\n const result = [];\n const { clientWidth } = this.$player;\n const clientLeft = this.getLeft(this.$player);\n this.filter('emit', (danmu)=>{\n const top = danmu.$ref.offsetTop;\n const left = this.getLeft(danmu.$ref) - clientLeft;\n const height = danmu.$ref.clientHeight;\n const width = danmu.$ref.clientWidth;\n const distance = left + width;\n const right = clientWidth - distance;\n const speed = distance / danmu.$restTime;\n const emit = {};\n emit.top = top;\n emit.left = left;\n emit.height = height;\n emit.width = width;\n emit.right = right;\n emit.speed = speed;\n emit.distance = distance;\n emit.time = danmu.$restTime;\n emit.mode = danmu.mode;\n result.push(emit);\n });\n return result;\n }\n // 计算弹幕速度\n get speed() {\n return this.option.synchronousPlayback && this.art.playbackRate ? this.option.speed / Number(this.art.playbackRate) : this.option.speed;\n }\n // 加载弹幕\n async load(danmuku) {\n const { errorHandle } = this.utils;\n let danmus = [];\n const target = danmuku || this.option.danmuku;\n try {\n if (typeof target === 'function') danmus = await target() // 异步函数获取\n ;\n else if (target instanceof Promise) danmus = await target // 从 Promise 对象获取\n ;\n else if (typeof target === 'string') danmus = await (0, _bilibili.bilibiliDanmuParseFromUrl)(target) // 从B站xml链接解析\n ;\n else if (Array.isArray(target)) danmus = target // 直接传入数组\n ;\n errorHandle(Array.isArray(danmus), 'Danmuku need return an array as result');\n // 假如没有传入弹幕参数,则清空弹幕,否则追加弹幕\n if (danmuku === undefined) {\n this.reset() // 重置弹幕\n ;\n this.queue = [] // 清空弹幕队列\n ;\n this.states = {\n wait: [],\n ready: [],\n emit: [],\n stop: []\n } // 清空弹幕状态池\n ;\n this.$refs = [] // 清空弹幕DOM节点池\n ;\n this.$danmuku.textContent = '' // 清空弹幕层\n ;\n }\n // 逐个验证原始弹幕并转换到弹幕队列\n for(let index = 0; index < danmus.length; index++){\n const danmu = danmus[index];\n await this.emit(danmu);\n }\n this.art.emit('artplayerPluginDanmuku:loaded', this.queue);\n } catch (error) {\n this.art.emit('artplayerPluginDanmuku:error', error);\n throw error;\n }\n return this;\n }\n // 把原始弹幕转换到弹幕队列\n async emit(danmu) {\n const { clamp } = this.utils;\n this.validator(danmu, {\n id: '?string',\n text: 'string',\n mode: '?number',\n color: '?string',\n time: '?number',\n border: '?boolean',\n style: '?object'\n });\n // 弹幕文本为空则直接忽略\n if (!danmu.text.trim()) return this;\n // 设置弹幕时间,如果没有则默认为当前时间加 0.5 秒\n if (danmu.time) danmu.time = clamp(danmu.time, 0, Infinity);\n else danmu.time = this.art.currentTime + 0.5;\n // 设置弹幕模式,如果没有则默认为全局配置\n if (danmu.mode === undefined) danmu.mode = this.option.mode;\n // 设置弹幕单独样式,如果没有则默认为空对象\n if (danmu.style === undefined) danmu.style = {};\n // 设置弹幕颜色,如果没有则默认为全局配置\n if (danmu.color === undefined) danmu.color = this.option.color;\n // 弹幕模式只能是 0, 1, 2\n if (![\n 0,\n 1,\n 2\n ].includes(danmu.mode)) return this;\n // 自定义弹幕过滤函数\n if (!this.option.filter(danmu)) return this;\n // 添加自定义属性\n const item = {\n ...danmu,\n $state: 'wait',\n $index: this.index++,\n $ref: null,\n $restTime: 0,\n $lastStartTime: 0\n };\n // 转换为wait状态\n this.setState(item, 'wait');\n // 添加到实际弹幕队列\n this.queue.push(item);\n // 弹幕有四个状态:\n // - wait: 弹幕还未开始显示,没有被添加到 DOM 中\n // - ready: 弹幕准备好显示,没有被添加到 DOM 中\n // - emit: 弹幕正在显示,已经被添加到 DOM 中\n // - stop: 弹幕正在停止显示,已经被添加到 DOM 中\n return this;\n }\n // 动态配置\n config(option, isInit = false) {\n const { clamp } = this.utils;\n const { $controlsCenter } = this.art.template;\n // 判断配置项是否有变化\n const changed = Object.keys(option).some((key)=>JSON.stringify(this.option[key]) !== JSON.stringify(option[key]));\n // 没有变化则直接返回\n if (!changed && !isInit) return this;\n // 更新配置项\n this.option = Object.assign({}, Danmuku.option, this.option, option);\n this.validator(this.option, Danmuku.scheme);\n this.option.mode = clamp(this.option.mode, 0, 2);\n this.option.speed = clamp(this.option.speed, 1, 10);\n this.option.opacity = clamp(this.option.opacity, 0, 1);\n this.option.lockTime = clamp(this.option.lockTime, 1, 60);\n this.option.maxLength = clamp(this.option.maxLength, 1, 1000);\n this.option.mount = this.option.mount || $controlsCenter;\n // 动态配置有字体大小,需要重新渲染\n if (option.fontSize) this.reset();\n // 通过配置项控制弹幕的显示和隐藏\n if (this.option.visible) this.show();\n else this.hide();\n this.art.emit('artplayerPluginDanmuku:config', this.option);\n return this;\n }\n // 计算DOM的left值,受到旋屏影响\n getLeft($ref) {\n const rect = $ref.getBoundingClientRect();\n return this.isRotate ? rect.top : rect.left;\n }\n // 复杂运算交给 Web Worker 处理\n postMessage(message = {}) {\n return new Promise((resolve)=>{\n message.id = Date.now() // 生成唯一标识\n ;\n this.worker.postMessage(message);\n this.worker.onmessage = (event)=>{\n const { data } = event;\n // 判断是否是当前的消息\n if (data.id === message.id) resolve(data);\n };\n });\n }\n // 根据状态获取弹幕\n filter(state, callback) {\n const danmus = this.states[state] || [];\n for(let index = 0; index < danmus.length; index++)callback(danmus[index]);\n return danmus;\n }\n // 设置弹幕状态\n setState(danmu, state) {\n // 从原状态池中删除\n this.states[danmu.$state] = this.states[danmu.$state].filter((item)=>item !== danmu);\n // 设置新状态\n danmu.$state = state;\n // 设置DOM节点状态\n if (danmu.$ref) danmu.$ref.dataset.state = state;\n // 添加到新状态池中\n this.states[state].push(danmu);\n }\n // 重置弹幕到wait状态,回收弹幕DOM节点\n makeWait(danmu) {\n this.setState(danmu, 'wait');\n if (danmu.$ref) {\n danmu.$ref.style.cssText = Danmuku.cssText;\n danmu.$ref.style.visibility = 'hidden';\n danmu.$ref.style.marginLeft = '0px';\n danmu.$ref.style.transform = 'translateX(0px)';\n danmu.$ref.style.transition = 'transform 0s linear 0s';\n this.$refs.push(danmu.$ref);\n danmu.$ref = null;\n }\n }\n // 实时更新弹幕\n update() {\n const { setStyles } = this.utils;\n this.timer = window.requestAnimationFrame(async ()=>{\n if (this.art.playing && !this.isHide) {\n // 实时计算弹幕的剩余显示时间\n this.filter('emit', (danmu)=>{\n const emitTime = (Date.now() - danmu.$lastStartTime) / 1000;\n danmu.$restTime -= emitTime;\n danmu.$lastStartTime = Date.now();\n // 超过时间即重置弹幕\n if (danmu.$restTime <= 0) this.makeWait(danmu);\n });\n // 获取准备好发送的弹幕,可能包含ready和wait状态的弹幕\n const readys = this.readys;\n for(let index = 0; index < readys.length; index++){\n const danmu = readys[index];\n // 弹幕发送前的过滤器\n const state = await this.option.beforeVisible(danmu);\n if (state) {\n const { clientWidth, clientHeight } = this.$player;\n danmu.$ref = this.$ref // 获取弹幕DOM节点\n ;\n danmu.$ref.textContent = danmu.text // 设置弹幕文本\n ;\n // 提前添加到弹幕层中,用于计算top值\n this.$danmuku.appendChild(danmu.$ref);\n // 设置初始弹幕样式\n danmu.$ref.style.opacity = this.option.opacity;\n danmu.$ref.style.fontSize = `${this.fontSize}px`;\n danmu.$ref.style.color = danmu.color;\n danmu.$ref.style.border = danmu.border ? `1px solid ${danmu.color}` : null;\n danmu.$ref.style.backgroundColor = danmu.border ? 'rgb(0 0 0 / 50%)' : null;\n // 设置单独弹幕样式\n setStyles(danmu.$ref, danmu.style);\n // 记录弹幕时间戳\n danmu.$lastStartTime = Date.now();\n // 计算弹幕剩余时间\n danmu.$restTime = this.speed;\n // 计算弹幕滚动的距离\n const distance = clientWidth + danmu.$ref.clientWidth;\n // 计算弹幕的top值\n const { result: top } = await this.postMessage({\n type: 'getDanmuTop',\n target: {\n mode: danmu.mode,\n height: danmu.$ref.clientHeight,\n speed: distance / danmu.$restTime\n },\n visibles: this.visibles,\n antiOverlap: this.option.antiOverlap,\n clientWidth,\n clientHeight,\n marginBottom: this.marginBottom,\n marginTop: this.marginTop\n });\n if (danmu.$ref) {\n if (!this.isStop && top !== undefined) {\n this.setState(danmu, 'emit') // 转换为emit状态\n ;\n danmu.$ref.style.top = `${top}px`;\n danmu.$ref.style.visibility = 'visible';\n danmu.$ref.dataset.mode = danmu.mode // CSS控制模式的显示和隐藏\n ;\n danmu.$ref.dataset.id = danmu.id || '' // 用于悬停的唯一标识\n ;\n switch(danmu.mode){\n // 滚动的弹幕\n case 0:\n danmu.$ref.style.left = `${clientWidth}px`;\n danmu.$ref.style.marginLeft = '0px';\n danmu.$ref.style.transform = `translateX(${-distance}px)`;\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`;\n break;\n case 1:\n // falls through\n case 2:\n danmu.$ref.style.left = '50%';\n danmu.$ref.style.marginLeft = `-${danmu.$ref.clientWidth / 2}px`;\n break;\n default:\n break;\n }\n this.art.emit('artplayerPluginDanmuku:visible', danmu);\n } else {\n // 假如弹幕已经停止或者没有 top 值,则重置弹幕为ready状态,回收弹幕DOM节点,等待下次发送\n this.setState(danmu, 'ready');\n this.$refs.push(danmu.$ref);\n danmu.$ref = null;\n }\n }\n }\n }\n }\n // 递归调用\n if (!this.isStop) this.update();\n });\n return this;\n }\n // 重置正在显示的弹幕: stop/emit 状态的弹幕\n resize() {\n const { clientWidth } = this.$player;\n this.filter('stop', (danmu)=>{\n switch(danmu.mode){\n // 滚动的弹幕\n case 0:\n danmu.$ref.style.left = `${clientWidth}px`;\n break;\n default:\n break;\n }\n });\n this.filter('emit', (danmu)=>{\n danmu.$lastStartTime = Date.now();\n switch(danmu.mode){\n // 滚动的弹幕\n case 0:\n {\n const distance = clientWidth + danmu.$ref.clientWidth;\n danmu.$ref.style.left = `${clientWidth}px`;\n danmu.$ref.style.transform = `translateX(${-distance}px)`;\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`;\n break;\n }\n default:\n break;\n }\n });\n }\n // 继续弹幕\n continue() {\n const { clientWidth } = this.$player;\n this.filter('stop', (danmu)=>{\n this.setState(danmu, 'emit') // 转换为emit状态\n ;\n danmu.$lastStartTime = Date.now();\n switch(danmu.mode){\n // 继续滚动的弹幕\n case 0:\n {\n const distance = clientWidth + danmu.$ref.clientWidth;\n danmu.$ref.style.transform = `translateX(${-distance}px)`;\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`;\n break;\n }\n default:\n break;\n }\n });\n return this;\n }\n // 暂停弹幕\n suspend() {\n const { clientWidth } = this.$player;\n this.filter('emit', (danmu)=>{\n this.setState(danmu, 'stop') // 转换为stop状态\n ;\n switch(danmu.mode){\n // 停止滚动的弹幕\n case 0:\n {\n const translateX = clientWidth - (this.getLeft(danmu.$ref) - this.getLeft(this.$player));\n danmu.$ref.style.transform = `translateX(${-translateX}px)`;\n danmu.$ref.style.transition = 'transform 0s linear 0s';\n break;\n }\n default:\n break;\n }\n });\n return this;\n }\n stop() {\n this.isStop = true;\n this.suspend();\n window.cancelAnimationFrame(this.timer);\n this.art.emit('artplayerPluginDanmuku:stop');\n return this;\n }\n start() {\n this.isStop = false;\n this.continue();\n this.update();\n this.art.emit('artplayerPluginDanmuku:start');\n return this;\n }\n reset() {\n this.queue.forEach((danmu)=>this.makeWait(danmu));\n this.art.emit('artplayerPluginDanmuku:reset');\n return this;\n }\n show() {\n this.isHide = false;\n this.$danmuku.style.opacity = 1;\n this.option.visible = true;\n this.art.emit('artplayerPluginDanmuku:show');\n return this;\n }\n hide() {\n this.isHide = true;\n this.$danmuku.style.opacity = 0;\n this.option.visible = false;\n this.art.emit('artplayerPluginDanmuku:hide');\n return this;\n }\n destroy() {\n this.stop();\n this.worker.terminate();\n this.art.off('video:play', this.start);\n this.art.off('video:playing', this.start);\n this.art.off('video:pause', this.stop);\n this.art.off('video:waiting', this.stop);\n this.art.off('resize', this.reset);\n this.art.off('destroy', this.destroy);\n this.art.emit('artplayerPluginDanmuku:destroy');\n }\n}\nexports.default = Danmuku;\n\n},{\"bundle-text:./worker\":\"8UAYg\",\"./bilibili\":\"8WBpY\",\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}],\"8UAYg\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"!function(e,t,i,o,r,n,l,d){var u=\\\"undefined\\\"!=typeof globalThis?globalThis:\\\"undefined\\\"!=typeof self?self:\\\"undefined\\\"!=typeof window?window:\\\"undefined\\\"!=typeof global?global:{},f=\\\"function\\\"==typeof u[o]&&u[o],p=f.i||{},s=f.cache||{},h=\\\"undefined\\\"!=typeof module&&\\\"function\\\"==typeof module.require&&module.require.bind(module);function a(t,i){if(!s[t]){if(!e[t]){if(r[t])return r[t];var n=\\\"function\\\"==typeof u[o]&&u[o];if(!i&&n)return n(t,!0);if(f)return f(t,!0);if(h&&\\\"string\\\"==typeof t)return h(t);var l=Error(\\\"Cannot find module '\\\"+t+\\\"'\\\");throw l.code=\\\"MODULE_NOT_FOUND\\\",l}p.resolve=function(i){var o=e[t][1][i];return null!=o?o:i},p.cache={};var d=s[t]=new a.Module(t);e[t][0].call(d.exports,p,d,d.exports,u)}return s[t].exports;function p(e){var t=p.resolve(e);return!1===t?{}:a(t)}}a.isParcelRequire=!0,a.Module=function(e){this.id=e,this.bundle=a,this.require=h,this.exports={}},a.modules=e,a.cache=s,a.parent=f,a.distDir=void 0,a.publicUrl=void 0,a.devServer=void 0,a.i=p,a.register=function(t,i){e[t]=[function(e,t){t.exports=i},{}]},Object.defineProperty(a,\\\"root\\\",{get:function(){return u[o]}}),u[o]=a;for(var c=0;ct.mode===e.mode&&t.top<=d).sort((e,t)=>e.top-t.top);if(0===u.length)if(2===e.mode)return d-e.height;else return n;if(u.unshift({type:\\\"top\\\",top:0,left:0,right:0,height:n,width:i,speed:0,distance:i}),u.push({type:\\\"bottom\\\",top:d,left:0,right:0,height:r,width:i,speed:0,distance:i}),2===e.mode)for(let t=u.length-2;t>=0;t-=1){let i=u[t],o=u[t+1],r=i.top+i.height;if(o.top-r>=e.height)return o.top-e.height}else for(let t=1;t=e.height)return r}let f=[];for(let e=1;et.every(t=>!(it.time))));return t&&t[0]?t[0].top:void 0}case 1:case 2:return}else{switch(e.mode){case 0:f.sort((e,t)=>{let i=Math.min(...t.map(e=>e.right)),o=Math.min(...e.map(e=>e.right));return i*t.length-o*e.length});break;case 1:case 2:f.sort((e,t)=>{let i=Math.max(...t.map(e=>e.width));return Math.max(...e.map(e=>e.width))*e.length-i*t.length})}return f[0][0].top}}onmessage=e=>{let{data:t}=e;t.id&&t.type&&globalThis.postMessage({result:(0,({getDanmuTop:r})[t.type])(t),id:t.id})}},{}]},[\\\"4KwZ6\\\"],\\\"4KwZ6\\\",\\\"parcelRequire4dc0\\\",{});let{\\\"*\\\":e}=parcelRequire4dc0(\\\"4KwZ6\\\");export{e as default};\";\n\n},{}],\"8WBpY\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nparcelHelpers.export(exports, \"bilibiliDanmuParseFromUrl\", ()=>bilibiliDanmuParseFromUrl);\nfunction getMode(key) {\n switch(key){\n case 1:\n case 2:\n case 3:\n return 0;\n case 4:\n return 2;\n case 5:\n return 1;\n default:\n return 0;\n }\n}\nfunction bilibiliDanmuParseFromXml(xmlString) {\n if (typeof xmlString !== 'string') return [];\n const reg = /]*?p=\"(?

[^\"]+)\"[^>]*>(?.*?)<\\/d>/gs;\n const matches = xmlString.matchAll(reg);\n return Array.from(matches).map((match)=>{\n const attr = match.groups.p.split(',');\n if (attr.length >= 8) {\n const text = match.groups.text.trim().replaceAll('"', '\"').replaceAll(''', '\\'').replaceAll('<', '<').replaceAll('>', '>').replaceAll('&', '&');\n return {\n text,\n time: Number(attr[0]),\n mode: getMode(Number(attr[1])),\n fontSize: Number(attr[2]),\n color: `#${Number(attr[3]).toString(16)}`,\n timestamp: Number(attr[4]),\n pool: Number(attr[5]),\n userID: attr[6],\n rowID: Number(attr[7])\n };\n } else return null;\n }).filter(Boolean);\n}\nfunction onmessage({ data }) {\n const { xml, id } = data;\n if (!id || !xml) return;\n const danmus = bilibiliDanmuParseFromXml(xml);\n globalThis.postMessage({\n danmus,\n id\n });\n}\nfunction createWorker() {\n const workerText = `\n ${getMode.toString()}\n ${bilibiliDanmuParseFromXml.toString()}\n onmessage = ${onmessage.toString()}\n `;\n const blob = new Blob([\n workerText\n ], {\n type: 'application/javascript'\n });\n return new Worker(URL.createObjectURL(blob));\n}\nfunction bilibiliDanmuParseFromUrl(url) {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve)=>{\n const res = await fetch(url);\n const xml = await res.text();\n try {\n const worker = createWorker();\n worker.onmessage = (event)=>{\n const { danmus, id } = event.data;\n if (!id || !danmus) return;\n resolve(danmus);\n worker.terminate();\n };\n worker.postMessage({\n xml,\n id: Date.now()\n });\n } catch (error) {\n console.error('Error parsing Bilibili Danmu:', error);\n const danmus = bilibiliDanmuParseFromXml(xml);\n resolve(danmus);\n }\n });\n}\n\n},{\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}],\"5lQoW\":[function(require,module,exports,__globalThis) {\nexports.interopDefault = function(a) {\n return a && a.__esModule ? a : {\n default: a\n };\n};\nexports.defineInteropFlag = function(a) {\n Object.defineProperty(a, '__esModule', {\n value: true\n });\n};\nexports.exportAll = function(source, dest) {\n Object.keys(source).forEach(function(key) {\n if (key === 'default' || key === '__esModule' || Object.prototype.hasOwnProperty.call(dest, key)) return;\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function() {\n return source[key];\n }\n });\n });\n return dest;\n};\nexports.export = function(dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get\n });\n};\n\n},{}],\"h2ayY\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nparcelHelpers.export(exports, \"default\", ()=>heatmap);\nconst lib = {\n map (value, inMin, inMax, outMin, outMax) {\n return (value - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;\n },\n range (start, end, tick) {\n const s = Math.round(start / tick) * tick;\n return Array.from({\n length: Math.floor((end - start) / tick)\n }, (v, k)=>{\n return k * tick + s;\n });\n }\n};\nfunction line(pointA, pointB) {\n const lengthX = pointB[0] - pointA[0];\n const lengthY = pointB[1] - pointA[1];\n return {\n length: Math.sqrt(lengthX ** 2 + lengthY ** 2),\n angle: Math.atan2(lengthY, lengthX)\n };\n}\nfunction heatmap(art, danmuku, option) {\n const { query } = art.constructor.utils;\n art.controls.add({\n name: 'heatmap',\n position: 'top',\n html: '',\n style: {\n position: 'absolute',\n top: '-100px',\n left: '0px',\n right: '0px',\n height: '100px',\n width: '100%',\n pointerEvents: 'none'\n },\n mounted ($heatmap) {\n let $start = null;\n let $stop = null;\n function update(arg = []) {\n $start = null;\n $stop = null;\n $heatmap.innerHTML = '';\n if (!art.duration || art.option.isLive) return;\n const svg = {\n w: $heatmap.offsetWidth,\n h: $heatmap.offsetHeight\n };\n const options = {\n xMin: 0,\n xMax: svg.w,\n yMin: 0,\n yMax: 128,\n scale: 0.25,\n opacity: 0.2,\n minHeight: Math.floor(svg.h * 0.05),\n sampling: Math.floor(svg.w / 100),\n smoothing: 0.2,\n flattening: 0.2\n };\n if (typeof option === 'object') Object.assign(options, option);\n let points = [];\n if (Array.isArray(arg) && arg.length) points = [\n ...arg\n ];\n else {\n const gap = art.duration / svg.w;\n for(let x = 0; x <= svg.w; x += options.sampling){\n const y = danmuku.queue.filter(({ time })=>time > x * gap && time <= (x + options.sampling) * gap).length;\n points.push([\n x,\n y\n ]);\n }\n }\n if (points.length === 0) return;\n const lastPoint = points[points.length - 1];\n const lastX = lastPoint[0];\n const lastY = lastPoint[1];\n if (lastX !== svg.w) points.push([\n svg.w,\n lastY\n ]);\n const yPoints = points.map((point)=>point[1]);\n const yMin = Math.min(...yPoints);\n const yMax = Math.max(...yPoints);\n const yMid = (yMin + yMax) / 2;\n for(let i = 0; i < points.length; i++){\n const point = points[i];\n const y = point[1];\n point[1] = y * (y > yMid ? 1 + options.scale : 1 - options.scale) + options.minHeight;\n }\n const controlPoint = (current, previous, next, reverse)=>{\n const p = previous || current;\n const n = next || current;\n const o = line(p, n);\n const flat = lib.map(Math.cos(o.angle) * options.flattening, 0, 1, 1, 0);\n const angle = o.angle * flat + (reverse ? Math.PI : 0);\n const length = o.length * options.smoothing;\n const x = current[0] + Math.cos(angle) * length;\n const y = current[1] + Math.sin(angle) * length;\n return [\n x,\n y\n ];\n };\n const bezierCommand = (point, i, a)=>{\n const cps = controlPoint(a[i - 1], a[i - 2], point);\n const cpe = controlPoint(point, a[i - 1], a[i + 1], true);\n const close = i === a.length - 1 ? ' z' : '';\n return `C ${cps[0]},${cps[1]} ${cpe[0]},${cpe[1]} ${point[0]},${point[1]}${close}`;\n };\n const pointsPositions = points.map((e)=>{\n const x = lib.map(e[0], options.xMin, options.xMax, 0, svg.w);\n const y = lib.map(e[1], options.yMin, options.yMax, svg.h, 0);\n return [\n x,\n y\n ];\n });\n const pathD = pointsPositions.reduce((acc, e, i, a)=>i === 0 ? `M ${a[a.length - 1][0]},${svg.h} L ${e[0]},${svg.h} L ${e[0]},${e[1]}` : `${acc} ${bezierCommand(e, i, a)}`, '');\n $heatmap.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n `;\n $start = query('#heatmap-start', $heatmap);\n $stop = query('#heatmap-stop', $heatmap);\n $start.setAttribute('offset', `${art.played * 100}%`);\n $stop.setAttribute('offset', `${art.played * 100}%`);\n }\n art.on('video:timeupdate', ()=>{\n if ($start && $stop) {\n $start.setAttribute('offset', `${art.played * 100}%`);\n $stop.setAttribute('offset', `${art.played * 100}%`);\n }\n });\n art.on('setBar', (type, percentage)=>{\n if ($start && $stop && type === 'played') {\n $start.setAttribute('offset', `${percentage * 100}%`);\n $stop.setAttribute('offset', `${percentage * 100}%`);\n }\n });\n art.on('ready', ()=>update());\n art.on('resize', ()=>update());\n art.on('artplayerPluginDanmuku:loaded', ()=>update());\n art.on('artplayerPluginDanmuku:points', (points)=>update(points));\n }\n });\n}\n\n},{\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}],\"90QKZ\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nvar _checkOffSvg = require(\"bundle-text:./img/check_off.svg\");\nvar _checkOffSvgDefault = parcelHelpers.interopDefault(_checkOffSvg);\nvar _checkOnSvg = require(\"bundle-text:./img/check_on.svg\");\nvar _checkOnSvgDefault = parcelHelpers.interopDefault(_checkOnSvg);\nvar _configSvg = require(\"bundle-text:./img/config.svg\");\nvar _configSvgDefault = parcelHelpers.interopDefault(_configSvg);\nvar _mode0OffSvg = require(\"bundle-text:./img/mode_0_off.svg\");\nvar _mode0OffSvgDefault = parcelHelpers.interopDefault(_mode0OffSvg);\nvar _mode0OnSvg = require(\"bundle-text:./img/mode_0_on.svg\");\nvar _mode0OnSvgDefault = parcelHelpers.interopDefault(_mode0OnSvg);\nvar _mode1OffSvg = require(\"bundle-text:./img/mode_1_off.svg\");\nvar _mode1OffSvgDefault = parcelHelpers.interopDefault(_mode1OffSvg);\nvar _mode1OnSvg = require(\"bundle-text:./img/mode_1_on.svg\");\nvar _mode1OnSvgDefault = parcelHelpers.interopDefault(_mode1OnSvg);\nvar _mode2OffSvg = require(\"bundle-text:./img/mode_2_off.svg\");\nvar _mode2OffSvgDefault = parcelHelpers.interopDefault(_mode2OffSvg);\nvar _mode2OnSvg = require(\"bundle-text:./img/mode_2_on.svg\");\nvar _mode2OnSvgDefault = parcelHelpers.interopDefault(_mode2OnSvg);\nvar _offSvg = require(\"bundle-text:./img/off.svg\");\nvar _offSvgDefault = parcelHelpers.interopDefault(_offSvg);\nvar _onSvg = require(\"bundle-text:./img/on.svg\");\nvar _onSvgDefault = parcelHelpers.interopDefault(_onSvg);\nvar _styleSvg = require(\"bundle-text:./img/style.svg\");\nvar _styleSvgDefault = parcelHelpers.interopDefault(_styleSvg);\nvar _styleLess = require(\"bundle-text:./style.less\");\nvar _styleLessDefault = parcelHelpers.interopDefault(_styleLess);\nclass Setting {\n constructor(art, danmuku){\n this.art = art;\n this.danmuku = danmuku;\n this.utils = art.constructor.utils;\n const { setStyle } = this.utils;\n const { $controlsCenter } = art.template;\n setStyle($controlsCenter, 'display', 'flex');\n this.template = {\n $controlsCenter,\n $mount: $controlsCenter,\n $danmuku: null,\n $toggle: null,\n $config: null,\n $configPanel: null,\n $configModes: null,\n $style: null,\n $stylePanel: null,\n $styleModes: null,\n $colors: null,\n $opacitySlider: null,\n $opacityValue: null,\n $marginSlider: null,\n $marginValue: null,\n $fontSizeSlider: null,\n $fontSizeValue: null,\n $speedSlider: null,\n $speedValue: null,\n $input: null,\n $send: null\n };\n this.slider = {\n opacity: null,\n margin: null,\n fontSize: null,\n speed: null\n };\n this.emitting = false;\n this.isLock = false;\n this.timer = null;\n this.createTemplate();\n this.createSliders();\n this.createEvents();\n this.mount(this.option.mount);\n art.on('resize', ()=>this.resize());\n art.on('fullscreen', (state)=>this.onFullscreen(state));\n art.on('fullscreenWeb', (state)=>this.onFullscreen(state));\n art.proxy(this.template.$config, 'mouseenter', ()=>{\n this.onMouseEnter({\n $control: this.template.$config,\n $panel: this.template.$configPanel\n });\n });\n art.proxy(this.template.$style, 'mouseenter', ()=>{\n this.onMouseEnter({\n $control: this.template.$style,\n $panel: this.template.$stylePanel\n });\n });\n }\n static get icons() {\n return {\n $on: (0, _onSvgDefault.default),\n $off: (0, _offSvgDefault.default),\n $config: (0, _configSvgDefault.default),\n $style: (0, _styleSvgDefault.default),\n $mode_0_off: (0, _mode0OffSvgDefault.default),\n $mode_0_on: (0, _mode0OnSvgDefault.default),\n $mode_1_off: (0, _mode1OffSvgDefault.default),\n $mode_1_on: (0, _mode1OnSvgDefault.default),\n $mode_2_off: (0, _mode2OffSvgDefault.default),\n $mode_2_on: (0, _mode2OnSvgDefault.default),\n $check_on: (0, _checkOnSvgDefault.default),\n $check_off: (0, _checkOffSvgDefault.default)\n };\n }\n get option() {\n return this.danmuku.option;\n }\n get outside() {\n return this.template.$mount !== this.template.$controlsCenter;\n }\n get TEMPLATE() {\n const { option } = this;\n return `\n

\n ${0, _onSvgDefault.default}${0, _offSvgDefault.default}\n
\n
\n ${0, _configSvgDefault.default}\n
\n
\n
\n \\u{6309}\\u{7C7B}\\u{578B}\\u{5C4F}\\u{853D}\n
\n
\n ${0, _mode0OffSvgDefault.default}${0, _mode0OnSvgDefault.default}\n
\\u{6EDA}\\u{52A8}
\n
\n
\n ${0, _mode1OffSvgDefault.default}${0, _mode1OnSvgDefault.default}\n
\\u{9876}\\u{90E8}
\n
\n
\n ${0, _mode2OffSvgDefault.default}${0, _mode2OnSvgDefault.default}\n
\\u{5E95}\\u{90E8}
\n
\n
\n
\n
\n
\n ${0, _checkOnSvgDefault.default}${0, _checkOffSvgDefault.default}\n \\u{9632}\\u{6B62}\\u{5F39}\\u{5E55}\\u{91CD}\\u{53E0}\n
\n
\n ${0, _checkOnSvgDefault.default}${0, _checkOffSvgDefault.default}\n \\u{540C}\\u{6B65}\\u{89C6}\\u{9891}\\u{901F}\\u{5EA6}\n
\n
\n
\n \\u{4E0D}\\u{900F}\\u{660E}\\u{5EA6}\n
\n
\\u{672A}\\u{77E5}
\n
\n
\n \\u{663E}\\u{793A}\\u{533A}\\u{57DF}\n
\n
\\u{672A}\\u{77E5}
\n
\n
\n \\u{5F39}\\u{5E55}\\u{5B57}\\u{53F7}\n
\n
\\u{672A}\\u{77E5}
\n
\n
\n \\u{5F39}\\u{5E55}\\u{901F}\\u{5EA6}\n
\n
\\u{672A}\\u{77E5}
\n
\n
\n
\n
\n
\n
\n ${0, _styleSvgDefault.default}\n
\n
\n
\n \\u{6A21}\\u{5F0F}\n
\n
\n ${0, _mode0OnSvgDefault.default}\n
\\u{6EDA}\\u{52A8}
\n
\n
\n ${0, _mode1OnSvgDefault.default}\n
\\u{9876}\\u{90E8}
\n
\n
\n ${0, _mode2OnSvgDefault.default}\n
\\u{5E95}\\u{90E8}
\n
\n
\n
\n
\n \\u{989C}\\u{8272}\n
\n ${this.COLOR.map((color)=>`
`).join('')}\n
\n
\n
\n
\n
\n \n
\\u{53D1}\\u{9001}
\n
\n `;\n }\n get OPACITY() {\n return {\n min: 0,\n max: 100,\n steps: [],\n ...this.option.OPACITY\n };\n }\n get FONT_SIZE() {\n return {\n min: 12,\n max: 120,\n steps: [],\n ...this.option.FONT_SIZE\n };\n }\n get MARGIN() {\n return {\n min: 0,\n max: 3,\n steps: [\n {\n name: '1/4',\n value: [\n 10,\n '75%'\n ]\n },\n {\n name: \"\\u534A\\u5C4F\",\n value: [\n 10,\n '50%'\n ]\n },\n {\n name: '3/4',\n value: [\n 10,\n '25%'\n ]\n },\n {\n name: \"\\u6EE1\\u5C4F\",\n value: [\n 10,\n 10\n ]\n }\n ],\n ...this.option.MARGIN\n };\n }\n get SPEED() {\n return {\n min: 0,\n max: 4,\n steps: [\n {\n name: \"\\u6781\\u6162\",\n value: 10\n },\n {\n name: \"\\u8F83\\u6162\",\n value: 7.5,\n hide: true\n },\n {\n name: \"\\u9002\\u4E2D\",\n value: 5\n },\n {\n name: \"\\u8F83\\u5FEB\",\n value: 2.5,\n hide: true\n },\n {\n name: \"\\u6781\\u5FEB\",\n value: 1\n }\n ],\n ...this.option.SPEED\n };\n }\n get COLOR() {\n return this.option.COLOR.length ? this.option.COLOR : [\n '#FE0302',\n '#FF7204',\n '#FFAA02',\n '#FFD302',\n '#FFFF00',\n '#A0EE00',\n '#00CD00',\n '#019899',\n '#4266BE',\n '#89D5FF',\n '#CC0273',\n '#222222',\n '#9B9B9B',\n '#FFFFFF'\n ];\n }\n query(selector) {\n const { query } = this.utils;\n const { $danmuku } = this.template;\n return query(selector, $danmuku);\n }\n append(el, target) {\n const { append } = this.utils;\n const children = [\n ...el.children\n ];\n if (children.includes(target)) return;\n append(el, target);\n }\n setData(key, value) {\n const { $player } = this.art.template;\n const { $mount } = this.template;\n $player.dataset[key] = value;\n if (this.outside) $mount.dataset[key] = value;\n }\n createTemplate() {\n const { createElement, tooltip } = this.utils;\n const $danmuku = createElement('div');\n $danmuku.className = 'artplayer-plugin-danmuku';\n $danmuku.innerHTML = this.TEMPLATE;\n this.template.$danmuku = $danmuku;\n this.template.$toggle = this.query('.apd-toggle');\n this.template.$config = this.query('.apd-config');\n this.template.$configPanel = this.query('.apd-config-panel');\n this.template.$configModes = this.query('.apd-config-mode .apd-modes');\n this.template.$style = this.query('.apd-style');\n this.template.$stylePanel = this.query('.apd-style-panel');\n this.template.$styleModes = this.query('.apd-style-mode .apd-modes');\n this.template.$colors = this.query('.apd-colors');\n this.template.$antiOverlap = this.query('.apd-anti-overlap');\n this.template.$syncVideo = this.query('.apd-sync-video');\n this.template.$opacitySlider = this.query('.apd-config-opacity .apd-slider');\n this.template.$opacityValue = this.query('.apd-config-opacity .apd-value');\n this.template.$marginSlider = this.query('.apd-config-margin .apd-slider');\n this.template.$marginValue = this.query('.apd-config-margin .apd-value');\n this.template.$fontSizeSlider = this.query('.apd-config-fontSize .apd-slider');\n this.template.$fontSizeValue = this.query('.apd-config-fontSize .apd-value');\n this.template.$speedSlider = this.query('.apd-config-speed .apd-slider');\n this.template.$speedValue = this.query('.apd-config-speed .apd-value');\n this.template.$input = this.query('.apd-input');\n this.template.$send = this.query('.apd-send');\n const { $toggle } = this.template;\n this.art.on('artplayerPluginDanmuku:show', ()=>{\n tooltip($toggle, \"\\u5173\\u95ED\\u5F39\\u5E55\");\n });\n this.art.on('artplayerPluginDanmuku:hide', ()=>{\n tooltip($toggle, \"\\u6253\\u5F00\\u5F39\\u5E55\");\n });\n }\n createEvents() {\n const { $toggle, $configModes, $styleModes, $colors, $antiOverlap, $syncVideo, $send, $input } = this.template;\n this.art.proxy($toggle, 'click', ()=>{\n this.danmuku.config({\n visible: !this.option.visible\n });\n this.reset();\n });\n this.art.proxy($configModes, 'click', (event)=>{\n const $mode = event.target.closest('.apd-mode');\n if (!$mode) return;\n const mode = Number($mode.dataset.mode);\n if (this.option.modes.includes(mode)) this.danmuku.config({\n modes: this.option.modes.filter((m)=>m !== mode)\n });\n else this.danmuku.config({\n modes: [\n ...this.option.modes,\n mode\n ]\n });\n this.reset();\n });\n this.art.proxy($antiOverlap, 'click', ()=>{\n this.danmuku.config({\n antiOverlap: !this.option.antiOverlap\n });\n this.reset();\n });\n this.art.proxy($syncVideo, 'click', ()=>{\n this.danmuku.config({\n synchronousPlayback: !this.option.synchronousPlayback\n });\n this.reset();\n });\n this.art.proxy($styleModes, 'click', (event)=>{\n const $mode = event.target.closest('.apd-mode');\n if (!$mode) return;\n const mode = Number($mode.dataset.mode);\n this.danmuku.config({\n mode\n });\n this.reset();\n });\n this.art.proxy($colors, 'click', (event)=>{\n const $color = event.target.closest('.apd-color');\n if (!$color) return;\n this.danmuku.config({\n color: $color.dataset.color\n });\n this.reset();\n });\n this.art.proxy($send, 'click', ()=>this.emit());\n this.art.proxy($input, 'keypress', (event)=>{\n if (event.key === 'Enter') {\n event.preventDefault();\n this.emit();\n }\n });\n }\n createSliders() {\n this.slider.opacity = this.createSlider({\n ...this.OPACITY,\n container: this.template.$opacitySlider,\n findIndex: ()=>{\n return Math.round(this.option.opacity * 100);\n },\n onChange: (index)=>{\n const { $opacityValue } = this.template;\n $opacityValue.textContent = `${index}%`;\n this.danmuku.config({\n opacity: index / 100\n });\n }\n });\n this.slider.margin = this.createSlider({\n ...this.MARGIN,\n container: this.template.$marginSlider,\n findIndex: ()=>{\n return this.MARGIN.steps.findIndex((item)=>item.value[0] === this.option.margin[0] && item.value[1] === this.option.margin[1]);\n },\n onChange: (index)=>{\n const margin = this.MARGIN.steps[index];\n if (!margin) return;\n const { $marginValue } = this.template;\n $marginValue.textContent = margin.name;\n this.danmuku.config({\n margin: margin.value\n });\n }\n });\n this.slider.fontSize = this.createSlider({\n ...this.FONT_SIZE,\n container: this.template.$fontSizeSlider,\n findIndex: ()=>{\n return this.danmuku.fontSize;\n },\n onChange: (index)=>{\n const { $fontSizeValue } = this.template;\n $fontSizeValue.textContent = `${index}px`;\n if (index === this.danmuku.fontSize) return;\n this.danmuku.config({\n fontSize: index\n });\n }\n });\n this.slider.speed = this.createSlider({\n ...this.SPEED,\n container: this.template.$speedSlider,\n findIndex: ()=>{\n return this.SPEED.steps.findIndex((item)=>item.value === this.option.speed);\n },\n onChange: (index)=>{\n const speed = this.SPEED.steps[index];\n if (!speed) return;\n const { $speedValue } = this.template;\n $speedValue.textContent = speed.name;\n this.danmuku.config({\n speed: speed.value\n });\n }\n });\n }\n createSlider({ min, max, container, findIndex, onChange, steps = [] }) {\n const { query, clamp, setStyle } = this.utils;\n setStyle(container, 'touch-action', 'none');\n container.innerHTML = `\n
\n
\n ${steps.map(()=>`
`).join('')}\n
\n
\n
\n
\n
\n ${steps.map((step)=>step.hide ? '' : `
${step.name}
`).join('')}\n
\n `;\n const $dot = query('.apd-slider-dot', container);\n const $progress = query('.apd-slider-progress', container);\n let isDroging = false;\n function reset(index = findIndex()) {\n if (index < min || index > max) return;\n const percentage = (index - min) / (max - min);\n $dot.style.left = `${percentage * 100}%`;\n if (steps.length === 0) $progress.style.width = $dot.style.left;\n onChange(index);\n }\n function updateLeft(event) {\n const { top, height, left, width } = container.getBoundingClientRect();\n if (this.art.isRotate) {\n const value = clamp(event.clientY - top, 0, height);\n const index = Math.round(value / height * (max - min) + min);\n reset(index);\n } else {\n const value = clamp(event.clientX - left, 0, width);\n const index = Math.round(value / width * (max - min) + min);\n reset(index);\n }\n }\n this.art.proxy(container, 'click', (event)=>{\n updateLeft.call(this, event);\n });\n this.art.proxy(container, 'pointerdown', (event)=>{\n isDroging = event.button === 0;\n });\n this.art.proxy(document, 'pointermove', (event)=>{\n if (isDroging) updateLeft.call(this, event);\n });\n this.art.proxy(document, 'pointerup', (event)=>{\n if (isDroging) {\n isDroging = false;\n updateLeft.call(this, event);\n }\n });\n return {\n reset\n };\n }\n onFullscreen(state) {\n const { $danmuku, $controlsCenter, $mount } = this.template;\n if (this.outside) {\n if (state) this.append($controlsCenter, $danmuku);\n else this.append($mount, $danmuku);\n } else this.append($controlsCenter, $danmuku);\n }\n onMouseEnter({ $control, $panel }) {\n const { $player } = this.art.template;\n const controlRect = $control.getBoundingClientRect();\n const panelRect = $panel.getBoundingClientRect();\n const playerRect = $player.getBoundingClientRect();\n const half = panelRect.width / 2 - controlRect.width / 2;\n const left = playerRect.left - (controlRect.left - half);\n const right = controlRect.right + half - playerRect.right;\n if (left > 0) $panel.style.left = `${-half + left}px`;\n else if (right > 0) $panel.style.left = `${-half - right}px`;\n else $panel.style.left = `${-half}px`;\n }\n async emit() {\n const { $input } = this.template;\n const text = $input.value.trim();\n if (!text.length) return;\n if (this.isLock) return;\n if (this.emitting) return;\n const danmu = {\n text,\n mode: this.option.mode,\n color: this.option.color,\n time: this.art.currentTime\n };\n try {\n this.emitting = true;\n const state = await this.option.beforeEmit(danmu);\n this.emitting = false;\n if (state !== true) return;\n danmu.border = true;\n delete danmu.time;\n this.danmuku.emit(danmu);\n $input.value = '';\n this.lock();\n } catch (error) {\n console.error('Error emitting danmuku:', error);\n this.emitting = false;\n }\n }\n lock() {\n const { addClass } = this.utils;\n const { $send } = this.template;\n this.isLock = true;\n let time = this.option.lockTime;\n $send.textContent = time;\n addClass($send, 'apd-lock');\n const loop = ()=>{\n this.timer = setTimeout(()=>{\n if (time === 0) this.unlock();\n else {\n time -= 1;\n $send.textContent = time;\n loop();\n }\n }, 1000);\n };\n loop();\n }\n unlock() {\n const { removeClass } = this.utils;\n const { $send } = this.template;\n clearTimeout(this.timer);\n this.isLock = false;\n $send.textContent = \"\\u53D1\\u9001\";\n removeClass($send, 'apd-lock');\n }\n resize() {\n if (this.outside) return;\n if (this.art.fullscreen) return;\n if (this.art.fullscreenWeb) return;\n const { $player, $controlsCenter } = this.art.template;\n const { $danmuku } = this.template;\n if (this.art.width < this.option.width) this.append($player, $danmuku);\n else this.append($controlsCenter, $danmuku);\n }\n reset() {\n const { inverseClass, tooltip } = this.utils;\n const { $toggle, $colors } = this.template;\n this.slider.opacity.reset();\n this.slider.margin.reset();\n this.slider.fontSize.reset();\n this.slider.speed.reset();\n this.setData('danmukuVisible', this.option.visible);\n this.setData('danmukuMode', this.option.mode);\n this.setData('danmukuColor', this.option.color);\n this.setData('danmukuMode0', this.option.modes.includes(0));\n this.setData('danmukuMode1', this.option.modes.includes(1));\n this.setData('danmukuMode2', this.option.modes.includes(2));\n this.setData('danmukuAntiOverlap', this.option.antiOverlap);\n this.setData('danmukuSyncVideo', this.option.synchronousPlayback);\n this.setData('danmukuTheme', this.option.theme);\n this.setData('danmukuEmitter', this.option.emitter);\n const colors = $colors.children;\n const $color = Array.from(colors).find((item)=>item.dataset.color === this.option.color.toUpperCase());\n $color && inverseClass($color, 'apd-active');\n tooltip($toggle, this.option.visible ? \"\\u5173\\u95ED\\u5F39\\u5E55\" : \"\\u6253\\u5F00\\u5F39\\u5E55\");\n this.resize();\n }\n mount(target) {\n const { errorHandle } = this.utils;\n const $el = typeof target === 'string' ? document.querySelector(target) : target;\n errorHandle($el, `Can not find the mount point: ${target}`);\n this.append($el, this.template.$danmuku);\n this.template.$mount = $el;\n this.reset();\n }\n}\nexports.default = Setting;\nif (typeof document !== 'undefined') {\n const id = 'artplayer-plugin-danmuku';\n let $style = document.getElementById(id);\n if (!$style) {\n $style = document.createElement('style');\n $style.id = id;\n if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', ()=>{\n document.head.appendChild($style);\n });\n else (document.head || document.documentElement).appendChild($style);\n }\n $style.textContent = (0, _styleLessDefault.default);\n}\n\n},{\"bundle-text:./img/check_off.svg\":\"4tC1X\",\"bundle-text:./img/check_on.svg\":\"iQql8\",\"bundle-text:./img/config.svg\":\"DK7bp\",\"bundle-text:./img/mode_0_off.svg\":\"fp5qd\",\"bundle-text:./img/mode_0_on.svg\":\"fYNQe\",\"bundle-text:./img/mode_1_off.svg\":\"gQMgY\",\"bundle-text:./img/mode_1_on.svg\":\"5E8Hg\",\"bundle-text:./img/mode_2_off.svg\":\"89iSb\",\"bundle-text:./img/mode_2_on.svg\":\"2YEb0\",\"bundle-text:./img/off.svg\":\"3WiJz\",\"bundle-text:./img/on.svg\":\"5XkVj\",\"bundle-text:./img/style.svg\":\"h2xX3\",\"bundle-text:./style.less\":\"dHTK8\",\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}],\"4tC1X\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"iQql8\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"DK7bp\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"fp5qd\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"fYNQe\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"gQMgY\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"5E8Hg\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"89iSb\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"2YEb0\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"3WiJz\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"5XkVj\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"h2xX3\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"dHTK8\":[function(require,module,exports,__globalThis) {\nmodule.exports = \".artplayer-plugin-danmuku{z-index:99;color:#fff;flex-shrink:0;justify-content:center;align-items:center;gap:10px;width:100%;height:32px;font-size:12px;font-weight:300;display:flex;position:relative}.artplayer-plugin-danmuku .apd-icon{cursor:pointer;opacity:.75;fill:#fff;transition:all .2s}.artplayer-plugin-danmuku .apd-icon:hover{opacity:1}.artplayer-plugin-danmuku .apd-config{display:flex;position:relative}.artplayer-plugin-danmuku .apd-config .apd-config-panel{opacity:0;pointer-events:none;width:320px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-config .apd-config-panel .apd-config-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-config:hover .apd-config-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-config-mode,.artplayer-plugin-danmuku .apd-config-slider,.artplayer-plugin-danmuku .apd-config-other,.artplayer-plugin-danmuku .apd-style-mode{margin-bottom:15px}.artplayer-plugin-danmuku .apd-modes{align-items:center;gap:20px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-modes .apd-mode{cursor:pointer;text-align:center}.artplayer-plugin-danmuku .apd-modes .apd-mode:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-config-slider{align-items:center;gap:12px;display:flex}.artplayer-plugin-danmuku .apd-config-slider .apd-value{text-align:right;width:32px}.artplayer-plugin-danmuku .apd-slider{cursor:pointer;flex:1;justify-content:center;align-items:center;height:20px;display:flex;position:relative}.artplayer-plugin-danmuku .apd-slider .apd-slider-line{background-color:#ffffff40;border-radius:3px;width:100%;height:2px;position:relative;overflow:hidden}.artplayer-plugin-danmuku .apd-slider .apd-slider-points{justify-content:space-between;align-items:center;display:flex;position:absolute;inset:0}.artplayer-plugin-danmuku .apd-slider .apd-slider-points .apd-slider-point{background-color:#ffffff80;border-radius:50%;width:2px;height:2px}.artplayer-plugin-danmuku .apd-slider .apd-slider-progress{background-color:#00a1d6;width:0%;height:100%}.artplayer-plugin-danmuku .apd-slider .apd-slider-dot{background-color:#00a1d6;border-radius:50%;width:12px;height:12px;position:absolute;left:0%;transform:translate(-6px)}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps{color:#777;justify-content:space-between;align-items:center;width:calc(100% + 32px);display:flex;position:absolute;bottom:-12px}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps .apd-slider-step{text-align:center;flex-shrink:0;width:36px;scale:.95}.artplayer-plugin-danmuku .apd-config-other{align-items:center;gap:20px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-check-off,.artplayer-plugin-danmuku .apd-config-other .apd-check-on{width:16px;height:16px}.artplayer-plugin-danmuku .apd-config-other .apd-other{cursor:pointer;align-items:center;gap:2px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-other:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-emitter{background-color:#ffffff40;border-radius:5px;flex:1;align-items:center;height:100%;display:flex}.artplayer-plugin-danmuku .apd-style{justify-content:center;align-items:center;display:flex;position:relative}.artplayer-plugin-danmuku .apd-style .apd-style-panel{opacity:0;pointer-events:none;width:200px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-style .apd-style-panel .apd-style-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-style:hover .apd-style-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-colors{flex-wrap:wrap;gap:8px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-colors .apd-color{cursor:pointer;border-radius:2px;width:16px;height:16px}.artplayer-plugin-danmuku .apd-colors .apd-color.apd-active{border:1px solid #000;box-shadow:0 0 0 1px #fff}.artplayer-plugin-danmuku .apd-input{color:#fff;background-color:#0000;border:none;outline:none;flex:1;width:auto;min-width:0;height:100%;line-height:1}.artplayer-plugin-danmuku .apd-input::placeholder{color:#ffffff80}.artplayer-plugin-danmuku .apd-send{cursor:pointer;width:60px;height:100%;text-shadow:none;background-color:#00a1d6;border-top-right-radius:5px;border-bottom-right-radius:5px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.artplayer-plugin-danmuku .apd-send.apd-lock{cursor:not-allowed;color:#666;background-color:#e7e7e7}.art-controls-center .apd-emitter{flex:none;width:260px}.art-fullscreen .artplayer-plugin-danmuku,.art-fullscreen-web .artplayer-plugin-danmuku{gap:16px;height:38px}.art-fullscreen .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen-web .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-on,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-on{width:28px;height:28px}.art-fullscreen .artplayer-plugin-danmuku .apd-emitter,.art-fullscreen-web .artplayer-plugin-danmuku .apd-emitter{flex:none;width:400px}.art-video-player>.artplayer-plugin-danmuku{padding:0 10px;position:absolute;bottom:-40px;left:0;right:0}.art-video-player:has(>.artplayer-plugin-danmuku){margin-bottom:40px}[data-danmuku-emitter=false] .apd-emitter{display:none!important}[data-danmuku-emitter=false] .art-controls-center .artplayer-plugin-danmuku{justify-content:flex-end;gap:18px}[data-danmuku-emitter=false].art-fullscreen .art-controls-center .artplayer-plugin-danmuku,[data-danmuku-emitter=false].art-fullscreen-web .art-controls-center .artplayer-plugin-danmuku{gap:24px}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-icon{fill:#333}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-emitter{background-color:#f1f2f3}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input{color:#000}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input::placeholder{color:#0000004d}[data-danmuku-visible=false] .apd-toggle-off{display:block}[data-danmuku-visible=false] .apd-toggle-on,[data-danmuku-visible=true] .apd-toggle-off{display:none}[data-danmuku-visible=true] .apd-toggle-on{display:block}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-on{display:none}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-off,[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-on{display:block}[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-off,[data-danmuku-sync-video=false] .apd-sync-video .apd-check-on{display:none}[data-danmuku-sync-video=false] .apd-sync-video .apd-check-off,[data-danmuku-sync-video=true] .apd-sync-video .apd-check-on{display:block}[data-danmuku-sync-video=true] .apd-sync-video .apd-check-off{display:none}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-off{display:block}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-on{display:none}[data-danmuku-mode0=false] .art-danmuku [data-mode=\\\"0\\\"]{opacity:0!important}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-off{display:none}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-on{display:block}[data-danmuku-mode=\\\"0\\\"] .apd-style-mode [data-mode=\\\"0\\\"]{color:#00a1d6}[data-danmuku-mode=\\\"0\\\"] .apd-style-mode [data-mode=\\\"0\\\"] path{fill:#00a1d6}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-off{display:block}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-on{display:none}[data-danmuku-mode1=false] .art-danmuku [data-mode=\\\"1\\\"]{opacity:0!important}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-off{display:none}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-on{display:block}[data-danmuku-mode=\\\"1\\\"] .apd-style-mode [data-mode=\\\"1\\\"]{color:#00a1d6}[data-danmuku-mode=\\\"1\\\"] .apd-style-mode [data-mode=\\\"1\\\"] path{fill:#00a1d6}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-off{display:block}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-on{display:none}[data-danmuku-mode2=false] .art-danmuku [data-mode=\\\"2\\\"]{opacity:0!important}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-off{display:none}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-on{display:block}[data-danmuku-mode=\\\"2\\\"] .apd-style-mode [data-mode=\\\"2\\\"]{color:#00a1d6}[data-danmuku-mode=\\\"2\\\"] .apd-style-mode [data-mode=\\\"2\\\"] path{fill:#00a1d6}\";\n\n},{}]},[\"6ZbtA\"], \"6ZbtA\", \"parcelRequire4dc0\", {})\nlet {default: _default, } = parcelRequire4dc0(\"6ZbtA\");\nexport {_default as default, };\n\n//# sourceMappingURL=index.js.map\n","import Danmuku from './danmuku'\nimport heatmap from './heatmap'\nimport Setting from './setting'\n\nexport default function artplayerPluginDanmuku(option) {\n return (art) => {\n const danmuku = new Danmuku(art, option)\n const setting = new Setting(art, danmuku)\n\n if (danmuku.option.heatmap) {\n heatmap(art, danmuku, danmuku.option.heatmap)\n }\n\n return {\n name: 'artplayerPluginDanmuku',\n emit: danmuku.emit.bind(danmuku),\n load: danmuku.load.bind(danmuku),\n config: danmuku.config.bind(danmuku),\n hide: danmuku.hide.bind(danmuku),\n show: danmuku.show.bind(danmuku),\n reset: danmuku.reset.bind(danmuku),\n mount: setting.mount.bind(setting),\n get option() {\n return danmuku.option\n },\n get isHide() {\n return danmuku.isHide\n },\n get isStop() {\n return danmuku.isStop\n },\n }\n }\n}\n\nartplayerPluginDanmuku.icons = Setting.icons\n\nif (typeof window !== 'undefined') {\n window.artplayerPluginDanmuku = artplayerPluginDanmuku\n}\n","import workerText from 'bundle-text:./worker'\nimport { bilibiliDanmuParseFromUrl } from './bilibili'\n\nexport default class Danmuku {\n constructor(art, option) {\n const { constructor, template } = art\n\n this.utils = constructor.utils // 工具库\n this.validator = constructor.validator // 配置校验器\n this.$danmuku = template.$danmuku // 弹幕层容器\n this.$player = template.$player // 播放器容器\n\n this.art = art\n this.queue = [] // 实际弹幕队列\n this.$refs = [] // 弹幕DOM节点池\n this.isStop = false // 是否停止\n this.isHide = false // 是否隐藏\n this.timer = null // 定时器\n this.index = 0 // 弹幕索引\n\n // 格式化后的配置项\n this.option = Danmuku.option\n\n // 弹幕状态池\n this.states = { wait: [], ready: [], emit: [], stop: [] }\n\n // 初始化配置\n this.config(option, true)\n\n // 创建 Web Worker, 用于计算弹幕的 top 值\n const workerText2 = workerText.replace('export{e as default};', '')\n const blob = new Blob([workerText2], { type: 'application/javascript' })\n this.worker = new Worker(URL.createObjectURL(blob))\n\n // 绑定公用事件\n this.start = this.start.bind(this)\n this.stop = this.stop.bind(this)\n this.reset = this.reset.bind(this)\n this.resize = this.resize.bind(this)\n this.destroy = this.destroy.bind(this)\n\n // 监听事件\n art.on('video:play', this.start)\n art.on('video:playing', this.start)\n art.on('video:pause', this.stop)\n art.on('video:waiting', this.stop)\n art.on('destroy', this.destroy)\n art.on('resize', this.resize)\n\n // 开始加载弹幕\n this.load()\n }\n\n // 默认配置\n static get option() {\n return {\n danmuku: [], // 弹幕数据\n speed: 5, // 弹幕持续时间,范围在[1 ~ 10]\n margin: [10, '25%'], // 弹幕上下边距,支持像素数字和百分比\n opacity: 1, // 弹幕透明度,范围在[0 ~ 1]\n color: '#FFFFFF', // 默认弹幕颜色,可以被单独弹幕项覆盖\n mode: 0, // 默认弹幕模式: 0: 滚动,1: 顶部,2: 底部\n modes: [0, 1, 2], // 弹幕可见的模式\n fontSize: 25, // 弹幕字体大小,支持像素数字和百分比\n antiOverlap: true, // 弹幕是否防重叠\n synchronousPlayback: false, // 是否同步播放速度\n mount: undefined, // 弹幕发射器挂载点, 默认为播放器控制栏中部\n heatmap: false, // 是否开启热力图\n width: 512, // 当播放器宽度小于此值时,弹幕发射器置于播放器底部\n points: [], // 热力图数据\n filter: () => true, // 弹幕载入前的过滤器,只支持返回布尔值\n beforeEmit: () => true, // 弹幕发送前的过滤器,支持返回 Promise\n beforeVisible: () => true, // 弹幕显示前的过滤器,支持返回 Promise\n visible: true, // 弹幕层是否可见\n emitter: true, // 是否开启弹幕发射器\n maxLength: 200, // 弹幕输入框最大长度, 范围在[1 ~ 1000]\n lockTime: 5, // 输入框锁定时间,范围在[1 ~ 60]\n theme: 'dark', // 弹幕主题,支持 dark 和 light,只在自定义挂载时生效\n OPACITY: {}, // 不透明度配置项\n FONT_SIZE: {}, // 弹幕字号配置项\n MARGIN: {}, // 显示区域配置项\n SPEED: {}, // 弹幕速度配置项\n COLOR: [], // 颜色列表配置项\n }\n }\n\n // 配置校验\n static get scheme() {\n return {\n danmuku: 'array|function|string',\n speed: 'number',\n margin: 'array',\n opacity: 'number',\n color: 'string',\n mode: 'number',\n modes: 'array',\n fontSize: 'number|string',\n antiOverlap: 'boolean',\n synchronousPlayback: 'boolean',\n mount: '?htmldivelement|string',\n heatmap: 'object|boolean',\n width: 'number',\n points: 'array',\n filter: 'function',\n beforeEmit: 'function',\n beforeVisible: 'function',\n visible: 'boolean',\n emitter: 'boolean',\n maxLength: 'number',\n lockTime: 'number',\n theme: 'string',\n OPACITY: 'object',\n FONT_SIZE: 'object',\n MARGIN: 'object',\n SPEED: 'object',\n COLOR: 'array',\n }\n }\n\n // 初始弹幕样式\n static get cssText() {\n return `\n user-select: none;\n position: absolute;\n white-space: pre;\n pointer-events: none;\n perspective: 500px;\n display: inline-block;\n will-change: transform;\n font-weight: normal;\n line-height: 1.125;\n visibility: hidden;\n font-family: SimHei, \"Microsoft JhengHei\", Arial, Helvetica, sans-serif;\n text-shadow: rgb(0, 0, 0) 1px 0px 1px, rgb(0, 0, 0) 0px 1px 1px, rgb(0, 0, 0) 0px -1px 1px, rgb(0, 0, 0) -1px 0px 1px;\n `\n }\n\n // 是否在移动端使用了自动旋屏,会影响弹幕的left和top值\n get isRotate() {\n return this.art.plugins?.autoOrientation?.state\n }\n\n // 计算上空白边距\n get marginTop() {\n const { clamp } = this.utils\n const value = this.option.margin[0]\n const { clientHeight } = this.$player\n\n if (typeof value === 'number') {\n return clamp(value, 0, clientHeight)\n }\n\n if (typeof value === 'string' && value.endsWith('%')) {\n const ratio = Number.parseFloat(value) / 100\n return clamp(clientHeight * ratio, 0, clientHeight)\n }\n\n return Danmuku.option.margin[0]\n }\n\n // 计算下空白边距\n get marginBottom() {\n const { clamp } = this.utils\n const value = this.option.margin[1]\n const { clientHeight } = this.$player\n\n if (typeof value === 'number') {\n return clamp(value, 0, clientHeight)\n }\n\n if (typeof value === 'string' && value.endsWith('%')) {\n const ratio = Number.parseFloat(value) / 100\n return clamp(clientHeight * ratio, 0, clientHeight)\n }\n\n return Danmuku.option.margin[1]\n }\n\n // 计算弹幕字体大小\n get fontSize() {\n const { clamp } = this.utils\n const { clientHeight } = this.$player\n\n const fontSize = this.option.fontSize\n\n if (typeof fontSize === 'number') {\n return Math.round(clamp(fontSize, 12, clientHeight))\n }\n\n if (typeof fontSize === 'string' && fontSize.endsWith('%')) {\n const ratio = Number.parseFloat(fontSize) / 100\n return Math.round(clamp(clientHeight * ratio, 12, clientHeight))\n }\n\n return Danmuku.option.fontSize\n }\n\n // 获取弹幕DOM节点\n get $ref() {\n const $ref = this.$refs.pop() || document.createElement('div')\n $ref.style.cssText = Danmuku.cssText\n $ref.dataset.mode = ''\n $ref.dataset.id = ''\n $ref.className = ''\n return $ref\n }\n\n // 获取准备好发送的弹幕\n get readys() {\n const { currentTime } = this.art\n\n const result = []\n\n // 有的是ready状态:之前因为弹幕太多而暂停发送的弹幕\n this.filter('ready', danmu => result.push(danmu))\n\n // 有的是wait状态:符合时间范围的弹幕\n this.filter('wait', (danmu) => {\n if (currentTime + 0.1 >= danmu.time && danmu.time >= currentTime - 0.1) {\n result.push(danmu)\n }\n })\n\n return result\n }\n\n // 可见的弹幕的数据,用于计算下一个弹幕的top值\n get visibles() {\n const result = []\n const { clientWidth } = this.$player\n const clientLeft = this.getLeft(this.$player)\n\n this.filter('emit', (danmu) => {\n const top = danmu.$ref.offsetTop\n const left = this.getLeft(danmu.$ref) - clientLeft\n const height = danmu.$ref.clientHeight\n const width = danmu.$ref.clientWidth\n const distance = left + width\n const right = clientWidth - distance\n const speed = distance / danmu.$restTime\n\n const emit = {}\n emit.top = top\n emit.left = left\n emit.height = height\n emit.width = width\n emit.right = right\n emit.speed = speed\n emit.distance = distance\n emit.time = danmu.$restTime\n emit.mode = danmu.mode\n\n result.push(emit)\n })\n\n return result\n }\n\n // 计算弹幕速度\n get speed() {\n return this.option.synchronousPlayback && this.art.playbackRate\n ? this.option.speed / Number(this.art.playbackRate)\n : this.option.speed\n }\n\n // 加载弹幕\n async load(danmuku) {\n const { errorHandle } = this.utils\n\n let danmus = []\n const target = danmuku || this.option.danmuku\n\n try {\n if (typeof target === 'function') {\n danmus = await target() // 异步函数获取\n }\n else if (target instanceof Promise) {\n danmus = await target // 从 Promise 对象获取\n }\n else if (typeof target === 'string') {\n danmus = await bilibiliDanmuParseFromUrl(target) // 从B站xml链接解析\n }\n else if (Array.isArray(target)) {\n danmus = target // 直接传入数组\n }\n\n errorHandle(Array.isArray(danmus), 'Danmuku need return an array as result')\n\n // 假如没有传入弹幕参数,则清空弹幕,否则追加弹幕\n if (danmuku === undefined) {\n this.reset() // 重置弹幕\n this.queue = [] // 清空弹幕队列\n this.states = { wait: [], ready: [], emit: [], stop: [] } // 清空弹幕状态池\n this.$refs = [] // 清空弹幕DOM节点池\n this.$danmuku.textContent = '' // 清空弹幕层\n }\n\n // 逐个验证原始弹幕并转换到弹幕队列\n for (let index = 0; index < danmus.length; index++) {\n const danmu = danmus[index]\n await this.emit(danmu)\n }\n\n this.art.emit('artplayerPluginDanmuku:loaded', this.queue)\n }\n catch (error) {\n this.art.emit('artplayerPluginDanmuku:error', error)\n throw error\n }\n\n return this\n }\n\n // 把原始弹幕转换到弹幕队列\n async emit(danmu) {\n const { clamp } = this.utils\n\n this.validator(danmu, {\n id: '?string', // 弹幕唯一标识\n text: 'string', // 弹幕文本\n mode: '?number', // 弹幕模式: 0: 滚动,1: 顶部,2: 底部\n color: '?string', // 弹幕颜色\n time: '?number', // 弹幕时间\n border: '?boolean', // 弹幕是否有边框\n style: '?object', // 弹幕额外样式\n })\n\n // 弹幕文本为空则直接忽略\n if (!danmu.text.trim())\n return this\n\n // 设置弹幕时间,如果没有则默认为当前时间加 0.5 秒\n if (danmu.time) {\n danmu.time = clamp(danmu.time, 0, Infinity)\n }\n else {\n danmu.time = this.art.currentTime + 0.5\n }\n\n // 设置弹幕模式,如果没有则默认为全局配置\n if (danmu.mode === undefined) {\n danmu.mode = this.option.mode\n }\n\n // 设置弹幕单独样式,如果没有则默认为空对象\n if (danmu.style === undefined) {\n danmu.style = {}\n }\n\n // 设置弹幕颜色,如果没有则默认为全局配置\n if (danmu.color === undefined) {\n danmu.color = this.option.color\n }\n\n // 弹幕模式只能是 0, 1, 2\n if (![0, 1, 2].includes(danmu.mode))\n return this\n\n // 自定义弹幕过滤函数\n if (!this.option.filter(danmu))\n return this\n\n // 添加自定义属性\n const item = {\n ...danmu,\n $state: 'wait', // 弹幕初始状态\n $index: this.index++, // 弹幕索引\n $ref: null, // 弹幕 DOM 节点\n $restTime: 0, // 弹幕剩余时间\n $lastStartTime: 0, // 弹幕上次开始时间\n }\n\n // 转换为wait状态\n this.setState(item, 'wait')\n\n // 添加到实际弹幕队列\n this.queue.push(item)\n\n // 弹幕有四个状态:\n // - wait: 弹幕还未开始显示,没有被添加到 DOM 中\n // - ready: 弹幕准备好显示,没有被添加到 DOM 中\n // - emit: 弹幕正在显示,已经被添加到 DOM 中\n // - stop: 弹幕正在停止显示,已经被添加到 DOM 中\n\n return this\n }\n\n // 动态配置\n config(option, isInit = false) {\n const { clamp } = this.utils\n const { $controlsCenter } = this.art.template\n\n // 判断配置项是否有变化\n const changed = Object.keys(option).some(\n key => JSON.stringify(this.option[key]) !== JSON.stringify(option[key]),\n )\n\n // 没有变化则直接返回\n if (!changed && !isInit)\n return this\n\n // 更新配置项\n this.option = Object.assign({}, Danmuku.option, this.option, option)\n this.validator(this.option, Danmuku.scheme)\n\n this.option.mode = clamp(this.option.mode, 0, 2)\n this.option.speed = clamp(this.option.speed, 1, 10)\n this.option.opacity = clamp(this.option.opacity, 0, 1)\n this.option.lockTime = clamp(this.option.lockTime, 1, 60)\n this.option.maxLength = clamp(this.option.maxLength, 1, 1000)\n this.option.mount = this.option.mount || $controlsCenter\n\n // 动态配置有字体大小,需要重新渲染\n if (option.fontSize) {\n this.reset()\n }\n\n // 通过配置项控制弹幕的显示和隐藏\n if (this.option.visible) {\n this.show()\n }\n else {\n this.hide()\n }\n\n this.art.emit('artplayerPluginDanmuku:config', this.option)\n\n return this\n }\n\n // 计算DOM的left值,受到旋屏影响\n getLeft($ref) {\n const rect = $ref.getBoundingClientRect()\n return this.isRotate ? rect.top : rect.left\n }\n\n // 复杂运算交给 Web Worker 处理\n postMessage(message = {}) {\n return new Promise((resolve) => {\n message.id = Date.now() // 生成唯一标识\n this.worker.postMessage(message)\n this.worker.onmessage = (event) => {\n const { data } = event\n // 判断是否是当前的消息\n if (data.id === message.id) {\n resolve(data)\n }\n }\n })\n }\n\n // 根据状态获取弹幕\n filter(state, callback) {\n const danmus = this.states[state] || []\n for (let index = 0; index < danmus.length; index++) {\n callback(danmus[index])\n }\n return danmus\n }\n\n // 设置弹幕状态\n setState(danmu, state) {\n // 从原状态池中删除\n this.states[danmu.$state] = this.states[danmu.$state].filter(item => item !== danmu)\n\n // 设置新状态\n danmu.$state = state\n\n // 设置DOM节点状态\n if (danmu.$ref) {\n danmu.$ref.dataset.state = state\n }\n\n // 添加到新状态池中\n this.states[state].push(danmu)\n }\n\n // 重置弹幕到wait状态,回收弹幕DOM节点\n makeWait(danmu) {\n this.setState(danmu, 'wait')\n if (danmu.$ref) {\n danmu.$ref.style.cssText = Danmuku.cssText\n danmu.$ref.style.visibility = 'hidden'\n danmu.$ref.style.marginLeft = '0px'\n danmu.$ref.style.transform = 'translateX(0px)'\n danmu.$ref.style.transition = 'transform 0s linear 0s'\n this.$refs.push(danmu.$ref)\n danmu.$ref = null\n }\n }\n\n // 实时更新弹幕\n update() {\n const { setStyles } = this.utils\n\n this.timer = window.requestAnimationFrame(async () => {\n if (this.art.playing && !this.isHide) {\n // 实时计算弹幕的剩余显示时间\n this.filter('emit', (danmu) => {\n const emitTime = (Date.now() - danmu.$lastStartTime) / 1000\n danmu.$restTime -= emitTime\n danmu.$lastStartTime = Date.now()\n // 超过时间即重置弹幕\n if (danmu.$restTime <= 0) {\n this.makeWait(danmu)\n }\n })\n\n // 获取准备好发送的弹幕,可能包含ready和wait状态的弹幕\n const readys = this.readys\n\n for (let index = 0; index < readys.length; index++) {\n const danmu = readys[index]\n\n // 弹幕发送前的过滤器\n const state = await this.option.beforeVisible(danmu)\n\n if (state) {\n const { clientWidth, clientHeight } = this.$player\n danmu.$ref = this.$ref // 获取弹幕DOM节点\n danmu.$ref.textContent = danmu.text // 设置弹幕文本\n\n // 提前添加到弹幕层中,用于计算top值\n this.$danmuku.appendChild(danmu.$ref)\n\n // 设置初始弹幕样式\n danmu.$ref.style.opacity = this.option.opacity\n danmu.$ref.style.fontSize = `${this.fontSize}px`\n danmu.$ref.style.color = danmu.color\n danmu.$ref.style.border = danmu.border ? `1px solid ${danmu.color}` : null\n danmu.$ref.style.backgroundColor = danmu.border ? 'rgb(0 0 0 / 50%)' : null\n\n // 设置单独弹幕样式\n setStyles(danmu.$ref, danmu.style)\n\n // 记录弹幕时间戳\n danmu.$lastStartTime = Date.now()\n\n // 计算弹幕剩余时间\n danmu.$restTime = this.speed\n\n // 计算弹幕滚动的距离\n const distance = clientWidth + danmu.$ref.clientWidth\n\n // 计算弹幕的top值\n const { result: top } = await this.postMessage({\n type: 'getDanmuTop',\n target: {\n mode: danmu.mode,\n height: danmu.$ref.clientHeight,\n speed: distance / danmu.$restTime,\n }, // 当前弹幕信息\n visibles: this.visibles, // 可见的弹幕的数据\n antiOverlap: this.option.antiOverlap,\n clientWidth,\n clientHeight,\n marginBottom: this.marginBottom,\n marginTop: this.marginTop,\n })\n\n if (danmu.$ref) {\n if (!this.isStop && top !== undefined) {\n this.setState(danmu, 'emit') // 转换为emit状态\n danmu.$ref.style.top = `${top}px`\n danmu.$ref.style.visibility = 'visible'\n danmu.$ref.dataset.mode = danmu.mode // CSS控制模式的显示和隐藏\n danmu.$ref.dataset.id = danmu.id || '' // 用于悬停的唯一标识\n\n switch (danmu.mode) {\n // 滚动的弹幕\n case 0: {\n danmu.$ref.style.left = `${clientWidth}px`\n danmu.$ref.style.marginLeft = '0px'\n danmu.$ref.style.transform = `translateX(${-distance}px)`\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`\n break\n }\n case 1:\n // falls through\n case 2:\n danmu.$ref.style.left = '50%'\n danmu.$ref.style.marginLeft = `-${danmu.$ref.clientWidth / 2}px`\n break\n default:\n break\n }\n\n this.art.emit('artplayerPluginDanmuku:visible', danmu)\n }\n else {\n // 假如弹幕已经停止或者没有 top 值,则重置弹幕为ready状态,回收弹幕DOM节点,等待下次发送\n this.setState(danmu, 'ready')\n this.$refs.push(danmu.$ref)\n danmu.$ref = null\n }\n }\n }\n }\n }\n\n // 递归调用\n if (!this.isStop) {\n this.update()\n }\n })\n return this\n }\n\n // 重置正在显示的弹幕: stop/emit 状态的弹幕\n resize() {\n const { clientWidth } = this.$player\n\n this.filter('stop', (danmu) => {\n switch (danmu.mode) {\n // 滚动的弹幕\n case 0:\n danmu.$ref.style.left = `${clientWidth}px`\n break\n default:\n break\n }\n })\n\n this.filter('emit', (danmu) => {\n danmu.$lastStartTime = Date.now()\n switch (danmu.mode) {\n // 滚动的弹幕\n case 0: {\n const distance = clientWidth + danmu.$ref.clientWidth\n danmu.$ref.style.left = `${clientWidth}px`\n danmu.$ref.style.transform = `translateX(${-distance}px)`\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`\n break\n }\n default:\n break\n }\n })\n }\n\n // 继续弹幕\n continue() {\n const { clientWidth } = this.$player\n this.filter('stop', (danmu) => {\n this.setState(danmu, 'emit') // 转换为emit状态\n danmu.$lastStartTime = Date.now()\n switch (danmu.mode) {\n // 继续滚动的弹幕\n case 0: {\n const distance = clientWidth + danmu.$ref.clientWidth\n danmu.$ref.style.transform = `translateX(${-distance}px)`\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`\n break\n }\n default:\n break\n }\n })\n\n return this\n }\n\n // 暂停弹幕\n suspend() {\n const { clientWidth } = this.$player\n this.filter('emit', (danmu) => {\n this.setState(danmu, 'stop') // 转换为stop状态\n switch (danmu.mode) {\n // 停止滚动的弹幕\n case 0: {\n const translateX = clientWidth - (this.getLeft(danmu.$ref) - this.getLeft(this.$player))\n danmu.$ref.style.transform = `translateX(${-translateX}px)`\n danmu.$ref.style.transition = 'transform 0s linear 0s'\n break\n }\n default:\n break\n }\n })\n\n return this\n }\n\n stop() {\n this.isStop = true\n this.suspend()\n window.cancelAnimationFrame(this.timer)\n this.art.emit('artplayerPluginDanmuku:stop')\n return this\n }\n\n start() {\n this.isStop = false\n this.continue()\n this.update()\n this.art.emit('artplayerPluginDanmuku:start')\n return this\n }\n\n reset() {\n this.queue.forEach(danmu => this.makeWait(danmu))\n this.art.emit('artplayerPluginDanmuku:reset')\n return this\n }\n\n show() {\n this.isHide = false\n this.$danmuku.style.opacity = 1\n this.option.visible = true\n this.art.emit('artplayerPluginDanmuku:show')\n return this\n }\n\n hide() {\n this.isHide = true\n this.$danmuku.style.opacity = 0\n this.option.visible = false\n this.art.emit('artplayerPluginDanmuku:hide')\n return this\n }\n\n destroy() {\n this.stop()\n this.worker.terminate()\n this.art.off('video:play', this.start)\n this.art.off('video:playing', this.start)\n this.art.off('video:pause', this.stop)\n this.art.off('video:waiting', this.stop)\n this.art.off('resize', this.reset)\n this.art.off('destroy', this.destroy)\n this.art.emit('artplayerPluginDanmuku:destroy')\n }\n}\n","module.exports = \"dd7efcb5fd87c1c0\";","function getMode(key) {\n switch (key) {\n case 1:\n case 2:\n case 3:\n return 0\n case 4:\n return 2\n case 5:\n return 1\n default:\n return 0\n }\n}\n\nfunction bilibiliDanmuParseFromXml(xmlString) {\n if (typeof xmlString !== 'string')\n return []\n const reg = /]*?p=\"(?

[^\"]+)\"[^>]*>(?.*?)<\\/d>/gs\n const matches = xmlString.matchAll(reg)\n return Array.from(matches)\n .map((match) => {\n const attr = match.groups.p.split(',')\n if (attr.length >= 8) {\n const text = match.groups.text\n .trim()\n .replaceAll('"', '\"')\n .replaceAll(''', '\\'')\n .replaceAll('<', '<')\n .replaceAll('>', '>')\n .replaceAll('&', '&')\n\n return {\n text,\n time: Number(attr[0]),\n mode: getMode(Number(attr[1])),\n fontSize: Number(attr[2]),\n color: `#${Number(attr[3]).toString(16)}`,\n timestamp: Number(attr[4]),\n pool: Number(attr[5]),\n userID: attr[6],\n rowID: Number(attr[7]),\n }\n }\n else {\n return null\n }\n })\n .filter(Boolean)\n}\n\nfunction onmessage({ data }) {\n const { xml, id } = data\n if (!id || !xml)\n return\n const danmus = bilibiliDanmuParseFromXml(xml)\n globalThis.postMessage({ danmus, id })\n}\n\nfunction createWorker() {\n const workerText = `\n ${getMode.toString()}\n ${bilibiliDanmuParseFromXml.toString()}\n onmessage = ${onmessage.toString()}\n `\n const blob = new Blob([workerText], { type: 'application/javascript' })\n return new Worker(URL.createObjectURL(blob))\n}\n\nexport function bilibiliDanmuParseFromUrl(url) {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve) => {\n const res = await fetch(url)\n const xml = await res.text()\n\n try {\n const worker = createWorker()\n worker.onmessage = (event) => {\n const { danmus, id } = event.data\n if (!id || !danmus)\n return\n resolve(danmus)\n worker.terminate()\n }\n worker.postMessage({ xml, id: Date.now() })\n }\n catch (error) {\n console.error('Error parsing Bilibili Danmu:', error)\n const danmus = bilibiliDanmuParseFromXml(xml)\n resolve(danmus)\n }\n })\n}\n","exports.interopDefault = function (a) {\n return a && a.__esModule ? a : {default: a};\n};\n\nexports.defineInteropFlag = function (a) {\n Object.defineProperty(a, '__esModule', {value: true});\n};\n\nexports.exportAll = function (source, dest) {\n Object.keys(source).forEach(function (key) {\n if (\n key === 'default' ||\n key === '__esModule' ||\n Object.prototype.hasOwnProperty.call(dest, key)\n ) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function () {\n return source[key];\n },\n });\n });\n\n return dest;\n};\n\nexports.export = function (dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get,\n });\n};\n","const lib = {\n map(value, inMin, inMax, outMin, outMax) {\n return ((value - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin\n },\n range(start, end, tick) {\n const s = Math.round(start / tick) * tick\n return Array.from(\n {\n length: Math.floor((end - start) / tick),\n },\n (v, k) => {\n return k * tick + s\n },\n )\n },\n}\n\nfunction line(pointA, pointB) {\n const lengthX = pointB[0] - pointA[0]\n const lengthY = pointB[1] - pointA[1]\n return {\n length: Math.sqrt(lengthX ** 2 + lengthY ** 2),\n angle: Math.atan2(lengthY, lengthX),\n }\n}\n\nexport default function heatmap(art, danmuku, option) {\n const { query } = art.constructor.utils\n\n art.controls.add({\n name: 'heatmap',\n position: 'top',\n html: '',\n style: {\n position: 'absolute',\n top: '-100px',\n left: '0px',\n right: '0px',\n height: '100px',\n width: '100%',\n pointerEvents: 'none',\n },\n mounted($heatmap) {\n let $start = null\n let $stop = null\n\n function update(arg = []) {\n $start = null\n $stop = null\n $heatmap.innerHTML = ''\n\n if (!art.duration || art.option.isLive)\n return\n\n const svg = {\n w: $heatmap.offsetWidth,\n h: $heatmap.offsetHeight,\n }\n\n const options = {\n xMin: 0,\n xMax: svg.w,\n yMin: 0,\n yMax: 128,\n scale: 0.25,\n opacity: 0.2,\n minHeight: Math.floor(svg.h * 0.05),\n sampling: Math.floor(svg.w / 100),\n smoothing: 0.2,\n flattening: 0.2,\n }\n\n if (typeof option === 'object') {\n Object.assign(options, option)\n }\n\n let points = []\n\n if (Array.isArray(arg) && arg.length) {\n points = [...arg]\n }\n else {\n const gap = art.duration / svg.w\n for (let x = 0; x <= svg.w; x += options.sampling) {\n const y = danmuku.queue.filter(\n ({ time }) => time > x * gap && time <= (x + options.sampling) * gap,\n ).length\n points.push([x, y])\n }\n }\n\n if (points.length === 0)\n return\n\n const lastPoint = points[points.length - 1]\n const lastX = lastPoint[0]\n const lastY = lastPoint[1]\n if (lastX !== svg.w) {\n points.push([svg.w, lastY])\n }\n\n const yPoints = points.map(point => point[1])\n const yMin = Math.min(...yPoints)\n const yMax = Math.max(...yPoints)\n const yMid = (yMin + yMax) / 2\n\n for (let i = 0; i < points.length; i++) {\n const point = points[i]\n const y = point[1]\n point[1] = y * (y > yMid ? 1 + options.scale : 1 - options.scale) + options.minHeight\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n const o = line(p, n)\n const flat = lib.map(Math.cos(o.angle) * options.flattening, 0, 1, 1, 0)\n const angle = o.angle * flat + (reverse ? Math.PI : 0)\n const length = o.length * options.smoothing\n const x = current[0] + Math.cos(angle) * length\n const y = current[1] + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const cps = controlPoint(a[i - 1], a[i - 2], point)\n const cpe = controlPoint(point, a[i - 1], a[i + 1], true)\n const close = i === a.length - 1 ? ' z' : ''\n return `C ${cps[0]},${cps[1]} ${cpe[0]},${cpe[1]} ${point[0]},${point[1]}${close}`\n }\n\n const pointsPositions = points.map((e) => {\n const x = lib.map(e[0], options.xMin, options.xMax, 0, svg.w)\n const y = lib.map(e[1], options.yMin, options.yMax, svg.h, 0)\n return [x, y]\n })\n\n const pathD = pointsPositions.reduce(\n (acc, e, i, a) =>\n i === 0\n ? `M ${a[a.length - 1][0]},${svg.h} L ${e[0]},${svg.h} L ${e[0]},${e[1]}`\n : `${acc} ${bezierCommand(e, i, a)}`,\n '',\n )\n\n $heatmap.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n `\n\n $start = query('#heatmap-start', $heatmap)\n $stop = query('#heatmap-stop', $heatmap)\n $start.setAttribute('offset', `${art.played * 100}%`)\n $stop.setAttribute('offset', `${art.played * 100}%`)\n }\n\n art.on('video:timeupdate', () => {\n if ($start && $stop) {\n $start.setAttribute('offset', `${art.played * 100}%`)\n $stop.setAttribute('offset', `${art.played * 100}%`)\n }\n })\n\n art.on('setBar', (type, percentage) => {\n if ($start && $stop && type === 'played') {\n $start.setAttribute('offset', `${percentage * 100}%`)\n $stop.setAttribute('offset', `${percentage * 100}%`)\n }\n })\n\n art.on('ready', () => update())\n art.on('resize', () => update())\n art.on('artplayerPluginDanmuku:loaded', () => update())\n art.on('artplayerPluginDanmuku:points', points => update(points))\n },\n })\n}\n","import $check_off from 'bundle-text:./img/check_off.svg'\nimport $check_on from 'bundle-text:./img/check_on.svg'\nimport $config from 'bundle-text:./img/config.svg'\nimport $mode_0_off from 'bundle-text:./img/mode_0_off.svg'\nimport $mode_0_on from 'bundle-text:./img/mode_0_on.svg'\nimport $mode_1_off from 'bundle-text:./img/mode_1_off.svg'\nimport $mode_1_on from 'bundle-text:./img/mode_1_on.svg'\nimport $mode_2_off from 'bundle-text:./img/mode_2_off.svg'\nimport $mode_2_on from 'bundle-text:./img/mode_2_on.svg'\nimport $off from 'bundle-text:./img/off.svg'\nimport $on from 'bundle-text:./img/on.svg'\nimport $style from 'bundle-text:./img/style.svg'\nimport style from 'bundle-text:./style.less'\n\nexport default class Setting {\n constructor(art, danmuku) {\n this.art = art\n this.danmuku = danmuku\n this.utils = art.constructor.utils\n\n const { setStyle } = this.utils\n const { $controlsCenter } = art.template\n setStyle($controlsCenter, 'display', 'flex')\n\n this.template = {\n $controlsCenter,\n $mount: $controlsCenter,\n $danmuku: null,\n $toggle: null,\n $config: null,\n $configPanel: null,\n $configModes: null,\n $style: null,\n $stylePanel: null,\n $styleModes: null,\n $colors: null,\n $opacitySlider: null,\n $opacityValue: null,\n $marginSlider: null,\n $marginValue: null,\n $fontSizeSlider: null,\n $fontSizeValue: null,\n $speedSlider: null,\n $speedValue: null,\n $input: null,\n $send: null,\n }\n\n this.slider = {\n opacity: null,\n margin: null,\n fontSize: null,\n speed: null,\n }\n\n this.emitting = false\n this.isLock = false\n this.timer = null\n\n this.createTemplate()\n this.createSliders()\n this.createEvents()\n\n this.mount(this.option.mount)\n\n art.on('resize', () => this.resize())\n art.on('fullscreen', state => this.onFullscreen(state))\n art.on('fullscreenWeb', state => this.onFullscreen(state))\n\n art.proxy(this.template.$config, 'mouseenter', () => {\n this.onMouseEnter({\n $control: this.template.$config,\n $panel: this.template.$configPanel,\n })\n })\n\n art.proxy(this.template.$style, 'mouseenter', () => {\n this.onMouseEnter({\n $control: this.template.$style,\n $panel: this.template.$stylePanel,\n })\n })\n }\n\n static get icons() {\n return {\n $on,\n $off,\n $config,\n $style,\n $mode_0_off,\n $mode_0_on,\n $mode_1_off,\n $mode_1_on,\n $mode_2_off,\n $mode_2_on,\n $check_on,\n $check_off,\n }\n }\n\n get option() {\n return this.danmuku.option\n }\n\n get outside() {\n return this.template.$mount !== this.template.$controlsCenter\n }\n\n get TEMPLATE() {\n const { option } = this\n return `\n

\n ${$on}${$off}\n
\n
\n ${$config}\n
\n
\n
\n 按类型屏蔽\n
\n
\n ${$mode_0_off}${$mode_0_on}\n
滚动
\n
\n
\n ${$mode_1_off}${$mode_1_on}\n
顶部
\n
\n
\n ${$mode_2_off}${$mode_2_on}\n
底部
\n
\n
\n
\n
\n
\n ${$check_on}${$check_off}\n 防止弹幕重叠\n
\n
\n ${$check_on}${$check_off}\n 同步视频速度\n
\n
\n
\n 不透明度\n
\n
未知
\n
\n
\n 显示区域\n
\n
未知
\n
\n
\n 弹幕字号\n
\n
未知
\n
\n
\n 弹幕速度\n
\n
未知
\n
\n
\n
\n
\n
\n
\n ${$style}\n
\n
\n
\n 模式\n
\n
\n ${$mode_0_on}\n
滚动
\n
\n
\n ${$mode_1_on}\n
顶部
\n
\n
\n ${$mode_2_on}\n
底部
\n
\n
\n
\n
\n 颜色\n
\n ${this.COLOR.map(color => `
`).join('')}\n
\n
\n
\n
\n
\n \n
发送
\n
\n `\n }\n\n get OPACITY() {\n return {\n min: 0,\n max: 100,\n steps: [],\n ...this.option.OPACITY,\n }\n }\n\n get FONT_SIZE() {\n return {\n min: 12,\n max: 120,\n steps: [],\n ...this.option.FONT_SIZE,\n }\n }\n\n get MARGIN() {\n return {\n min: 0,\n max: 3,\n steps: [\n {\n name: '1/4',\n value: [10, '75%'],\n },\n {\n name: '半屏',\n value: [10, '50%'],\n },\n {\n name: '3/4',\n value: [10, '25%'],\n },\n {\n name: '满屏',\n value: [10, 10],\n },\n ],\n ...this.option.MARGIN,\n }\n }\n\n get SPEED() {\n return {\n min: 0,\n max: 4,\n steps: [\n {\n name: '极慢',\n value: 10,\n },\n {\n name: '较慢',\n value: 7.5,\n hide: true,\n },\n {\n name: '适中',\n value: 5,\n },\n {\n name: '较快',\n value: 2.5,\n hide: true,\n },\n {\n name: '极快',\n value: 1,\n },\n ],\n ...this.option.SPEED,\n }\n }\n\n get COLOR() {\n return this.option.COLOR.length\n ? this.option.COLOR\n : [\n '#FE0302',\n '#FF7204',\n '#FFAA02',\n '#FFD302',\n '#FFFF00',\n '#A0EE00',\n '#00CD00',\n '#019899',\n '#4266BE',\n '#89D5FF',\n '#CC0273',\n '#222222',\n '#9B9B9B',\n '#FFFFFF',\n ]\n }\n\n query(selector) {\n const { query } = this.utils\n const { $danmuku } = this.template\n return query(selector, $danmuku)\n }\n\n append(el, target) {\n const { append } = this.utils\n const children = [...el.children]\n if (children.includes(target))\n return\n append(el, target)\n }\n\n setData(key, value) {\n const { $player } = this.art.template\n const { $mount } = this.template\n $player.dataset[key] = value\n if (this.outside) {\n $mount.dataset[key] = value\n }\n }\n\n createTemplate() {\n const { createElement, tooltip } = this.utils\n\n const $danmuku = createElement('div')\n $danmuku.className = 'artplayer-plugin-danmuku'\n $danmuku.innerHTML = this.TEMPLATE\n\n this.template.$danmuku = $danmuku\n this.template.$toggle = this.query('.apd-toggle')\n this.template.$config = this.query('.apd-config')\n this.template.$configPanel = this.query('.apd-config-panel')\n this.template.$configModes = this.query('.apd-config-mode .apd-modes')\n this.template.$style = this.query('.apd-style')\n this.template.$stylePanel = this.query('.apd-style-panel')\n this.template.$styleModes = this.query('.apd-style-mode .apd-modes')\n this.template.$colors = this.query('.apd-colors')\n this.template.$antiOverlap = this.query('.apd-anti-overlap')\n this.template.$syncVideo = this.query('.apd-sync-video')\n this.template.$opacitySlider = this.query('.apd-config-opacity .apd-slider')\n this.template.$opacityValue = this.query('.apd-config-opacity .apd-value')\n this.template.$marginSlider = this.query('.apd-config-margin .apd-slider')\n this.template.$marginValue = this.query('.apd-config-margin .apd-value')\n this.template.$fontSizeSlider = this.query('.apd-config-fontSize .apd-slider')\n this.template.$fontSizeValue = this.query('.apd-config-fontSize .apd-value')\n this.template.$speedSlider = this.query('.apd-config-speed .apd-slider')\n this.template.$speedValue = this.query('.apd-config-speed .apd-value')\n this.template.$input = this.query('.apd-input')\n this.template.$send = this.query('.apd-send')\n\n const { $toggle } = this.template\n\n this.art.on('artplayerPluginDanmuku:show', () => {\n tooltip($toggle, '关闭弹幕')\n })\n\n this.art.on('artplayerPluginDanmuku:hide', () => {\n tooltip($toggle, '打开弹幕')\n })\n }\n\n createEvents() {\n const { $toggle, $configModes, $styleModes, $colors, $antiOverlap, $syncVideo, $send, $input } = this.template\n\n this.art.proxy($toggle, 'click', () => {\n this.danmuku.config({\n visible: !this.option.visible,\n })\n this.reset()\n })\n\n this.art.proxy($configModes, 'click', (event) => {\n const $mode = event.target.closest('.apd-mode')\n if (!$mode)\n return\n const mode = Number($mode.dataset.mode)\n if (this.option.modes.includes(mode)) {\n this.danmuku.config({\n modes: this.option.modes.filter(m => m !== mode),\n })\n }\n else {\n this.danmuku.config({\n modes: [...this.option.modes, mode],\n })\n }\n this.reset()\n })\n\n this.art.proxy($antiOverlap, 'click', () => {\n this.danmuku.config({\n antiOverlap: !this.option.antiOverlap,\n })\n this.reset()\n })\n\n this.art.proxy($syncVideo, 'click', () => {\n this.danmuku.config({\n synchronousPlayback: !this.option.synchronousPlayback,\n })\n this.reset()\n })\n\n this.art.proxy($styleModes, 'click', (event) => {\n const $mode = event.target.closest('.apd-mode')\n if (!$mode)\n return\n const mode = Number($mode.dataset.mode)\n this.danmuku.config({\n mode,\n })\n this.reset()\n })\n\n this.art.proxy($colors, 'click', (event) => {\n const $color = event.target.closest('.apd-color')\n if (!$color)\n return\n this.danmuku.config({\n color: $color.dataset.color,\n })\n this.reset()\n })\n\n this.art.proxy($send, 'click', () => this.emit())\n\n this.art.proxy($input, 'keypress', (event) => {\n if (event.key === 'Enter') {\n event.preventDefault()\n this.emit()\n }\n })\n }\n\n createSliders() {\n this.slider.opacity = this.createSlider({\n ...this.OPACITY,\n container: this.template.$opacitySlider,\n findIndex: () => {\n return Math.round(this.option.opacity * 100)\n },\n onChange: (index) => {\n const { $opacityValue } = this.template\n $opacityValue.textContent = `${index}%`\n this.danmuku.config({\n opacity: index / 100,\n })\n },\n })\n\n this.slider.margin = this.createSlider({\n ...this.MARGIN,\n container: this.template.$marginSlider,\n findIndex: () => {\n return this.MARGIN.steps.findIndex(\n item => item.value[0] === this.option.margin[0] && item.value[1] === this.option.margin[1],\n )\n },\n onChange: (index) => {\n const margin = this.MARGIN.steps[index]\n if (!margin)\n return\n const { $marginValue } = this.template\n $marginValue.textContent = margin.name\n this.danmuku.config({\n margin: margin.value,\n })\n },\n })\n\n this.slider.fontSize = this.createSlider({\n ...this.FONT_SIZE,\n container: this.template.$fontSizeSlider,\n findIndex: () => {\n return this.danmuku.fontSize\n },\n onChange: (index) => {\n const { $fontSizeValue } = this.template\n $fontSizeValue.textContent = `${index}px`\n if (index === this.danmuku.fontSize)\n return\n this.danmuku.config({\n fontSize: index,\n })\n },\n })\n\n this.slider.speed = this.createSlider({\n ...this.SPEED,\n container: this.template.$speedSlider,\n findIndex: () => {\n return this.SPEED.steps.findIndex(item => item.value === this.option.speed)\n },\n onChange: (index) => {\n const speed = this.SPEED.steps[index]\n if (!speed)\n return\n const { $speedValue } = this.template\n $speedValue.textContent = speed.name\n this.danmuku.config({\n speed: speed.value,\n })\n },\n })\n }\n\n createSlider({ min, max, container, findIndex, onChange, steps = [] }) {\n const { query, clamp, setStyle } = this.utils\n\n setStyle(container, 'touch-action', 'none')\n\n container.innerHTML = `\n
\n
\n ${steps.map(() => `
`).join('')}\n
\n
\n
\n
\n
\n ${steps.map(step => (step.hide ? '' : `
${step.name}
`)).join('')}\n
\n `\n\n const $dot = query('.apd-slider-dot', container)\n const $progress = query('.apd-slider-progress', container)\n\n let isDroging = false\n\n function reset(index = findIndex()) {\n if (index < min || index > max)\n return\n const percentage = (index - min) / (max - min)\n $dot.style.left = `${percentage * 100}%`\n if (steps.length === 0) {\n $progress.style.width = $dot.style.left\n }\n onChange(index)\n }\n\n function updateLeft(event) {\n const { top, height, left, width } = container.getBoundingClientRect()\n if (this.art.isRotate) {\n const value = clamp(event.clientY - top, 0, height)\n const index = Math.round((value / height) * (max - min) + min)\n reset(index)\n }\n else {\n const value = clamp(event.clientX - left, 0, width)\n const index = Math.round((value / width) * (max - min) + min)\n reset(index)\n }\n }\n\n this.art.proxy(container, 'click', (event) => {\n updateLeft.call(this, event)\n })\n\n this.art.proxy(container, 'pointerdown', (event) => {\n isDroging = event.button === 0\n })\n\n this.art.proxy(document, 'pointermove', (event) => {\n if (isDroging) {\n updateLeft.call(this, event)\n }\n })\n\n this.art.proxy(document, 'pointerup', (event) => {\n if (isDroging) {\n isDroging = false\n updateLeft.call(this, event)\n }\n })\n\n return { reset }\n }\n\n onFullscreen(state) {\n const { $danmuku, $controlsCenter, $mount } = this.template\n if (this.outside) {\n if (state) {\n this.append($controlsCenter, $danmuku)\n }\n else {\n this.append($mount, $danmuku)\n }\n }\n else {\n this.append($controlsCenter, $danmuku)\n }\n }\n\n onMouseEnter({ $control, $panel }) {\n const { $player } = this.art.template\n const controlRect = $control.getBoundingClientRect()\n const panelRect = $panel.getBoundingClientRect()\n const playerRect = $player.getBoundingClientRect()\n\n const half = panelRect.width / 2 - controlRect.width / 2\n const left = playerRect.left - (controlRect.left - half)\n const right = controlRect.right + half - playerRect.right\n\n if (left > 0) {\n $panel.style.left = `${-half + left}px`\n }\n else if (right > 0) {\n $panel.style.left = `${-half - right}px`\n }\n else {\n $panel.style.left = `${-half}px`\n }\n }\n\n async emit() {\n const { $input } = this.template\n\n const text = $input.value.trim()\n if (!text.length)\n return\n if (this.isLock)\n return\n if (this.emitting)\n return\n\n const danmu = {\n text,\n mode: this.option.mode,\n color: this.option.color,\n time: this.art.currentTime,\n }\n\n try {\n this.emitting = true\n const state = await this.option.beforeEmit(danmu)\n this.emitting = false\n\n if (state !== true)\n return\n\n danmu.border = true\n delete danmu.time\n this.danmuku.emit(danmu)\n $input.value = ''\n\n this.lock()\n }\n catch (error) {\n console.error('Error emitting danmuku:', error)\n this.emitting = false\n }\n }\n\n lock() {\n const { addClass } = this.utils\n const { $send } = this.template\n\n this.isLock = true\n let time = this.option.lockTime\n $send.textContent = time\n addClass($send, 'apd-lock')\n\n const loop = () => {\n this.timer = setTimeout(() => {\n if (time === 0) {\n this.unlock()\n }\n else {\n time -= 1\n $send.textContent = time\n loop()\n }\n }, 1000)\n }\n\n loop()\n }\n\n unlock() {\n const { removeClass } = this.utils\n const { $send } = this.template\n clearTimeout(this.timer)\n this.isLock = false\n $send.textContent = '发送'\n removeClass($send, 'apd-lock')\n }\n\n resize() {\n if (this.outside)\n return\n if (this.art.fullscreen)\n return\n if (this.art.fullscreenWeb)\n return\n const { $player, $controlsCenter } = this.art.template\n const { $danmuku } = this.template\n if (this.art.width < this.option.width) {\n this.append($player, $danmuku)\n }\n else {\n this.append($controlsCenter, $danmuku)\n }\n }\n\n reset() {\n const { inverseClass, tooltip } = this.utils\n const { $toggle, $colors } = this.template\n\n this.slider.opacity.reset()\n this.slider.margin.reset()\n this.slider.fontSize.reset()\n this.slider.speed.reset()\n\n this.setData('danmukuVisible', this.option.visible)\n this.setData('danmukuMode', this.option.mode)\n this.setData('danmukuColor', this.option.color)\n this.setData('danmukuMode0', this.option.modes.includes(0))\n this.setData('danmukuMode1', this.option.modes.includes(1))\n this.setData('danmukuMode2', this.option.modes.includes(2))\n this.setData('danmukuAntiOverlap', this.option.antiOverlap)\n this.setData('danmukuSyncVideo', this.option.synchronousPlayback)\n this.setData('danmukuTheme', this.option.theme)\n this.setData('danmukuEmitter', this.option.emitter)\n\n const colors = $colors.children\n const $color = Array.from(colors).find(item => item.dataset.color === this.option.color.toUpperCase())\n $color && inverseClass($color, 'apd-active')\n\n tooltip($toggle, this.option.visible ? '关闭弹幕' : '打开弹幕')\n\n this.resize()\n }\n\n mount(target) {\n const { errorHandle } = this.utils\n const $el = typeof target === 'string' ? document.querySelector(target) : target\n errorHandle($el, `Can not find the mount point: ${target}`)\n this.append($el, this.template.$danmuku)\n this.template.$mount = $el\n this.reset()\n }\n}\n\nif (typeof document !== 'undefined') {\n const id = 'artplayer-plugin-danmuku'\n let $style = document.getElementById(id)\n if (!$style) {\n $style = document.createElement('style')\n $style.id = id\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => {\n document.head.appendChild($style)\n })\n }\n else {\n (document.head || document.documentElement).appendChild($style)\n }\n }\n $style.textContent = style\n}\n","module.exports = \"0616b3f5e6434b38\";","module.exports = \"8e2849d281974e34\";","module.exports = \"49c14b4dbf213408\";","module.exports = \"a0f690bca27acdee\";","module.exports = \"70b07d4e4796c39f\";","module.exports = \"bffb346eb331a03f\";","module.exports = \"ade441db0e7be833\";","module.exports = \"8acc265c0fe9e947\";","module.exports = \"d374f135d6d7b8db\";","module.exports = \"4e92064d88d9e604\";","module.exports = \"c6881a3522f2fe2a\";","module.exports = \"5050154cc04e750f\";","module.exports = \"95fd45dd2fe5c5a5\";"],"names":["modules","entry","mainEntry","parcelRequireName","externals","distDir","publicUrl","devServer","globalObject","globalThis","self","window","global","previousRequire","importMap","i","cache","nodeRequire","module","require","bind","newRequire","name","jumped","currentRequire","err","Error","code","localRequire","resolve","x","id","Module","call","exports","res","isParcelRequire","moduleName","bundle","parent","register","Object","defineProperty","get","length","mainExports","define","amd","__globalThis","parcelHelpers","defineInteropFlag","export","artplayerPluginDanmuku","_danmuku","_danmukuDefault","interopDefault","_heatmap","_heatmapDefault","_setting","_settingDefault","option","art","danmuku","default","setting","heatmap","emit","load","config","hide","show","reset","mount","isHide","isStop","icons","_worker","_workerDefault","_bilibili","Danmuku","constructor","template","utils","validator","$danmuku","$player","queue","$refs","timer","index","states","wait","ready","stop","blob","Blob","replace","type","worker","Worker","URL","createObjectURL","start","resize","destroy","on","speed","margin","opacity","color","mode","modes","fontSize","antiOverlap","synchronousPlayback","undefined","width","points","filter","beforeEmit","beforeVisible","visible","emitter","maxLength","lockTime","theme","OPACITY","FONT_SIZE","MARGIN","SPEED","COLOR","scheme","cssText","isRotate","plugins","autoOrientation","state","marginTop","clamp","value","clientHeight","endsWith","Number","parseFloat","marginBottom","Math","round","$ref","pop","document","createElement","style","dataset","className","readys","currentTime","result","danmu","push","time","visibles","clientWidth","clientLeft","getLeft","top","offsetTop","left","height","distance","$restTime","right","playbackRate","errorHandle","danmus","target","Promise","bilibiliDanmuParseFromUrl","Array","isArray","textContent","error","text","border","trim","Infinity","includes","item","$state","$index","$lastStartTime","setState","isInit","$controlsCenter","keys","some","key","JSON","stringify","assign","rect","getBoundingClientRect","postMessage","message","Date","now","onmessage","event","data","callback","makeWait","visibility","marginLeft","transform","transition","update","setStyles","requestAnimationFrame","playing","emitTime","appendChild","backgroundColor","continue","suspend","translateX","cancelAnimationFrame","forEach","terminate","off","getMode","bilibiliDanmuParseFromXml","xmlString","from","matchAll","map","match","attr","groups","p","split","replaceAll","toString","timestamp","pool","userID","rowID","Boolean","xml","url","fetch","createWorker","console","a","__esModule","exportAll","source","dest","prototype","hasOwnProperty","enumerable","destName","lib","inMin","inMax","outMin","outMax","range","end","tick","s","floor","v","k","query","controls","add","position","html","pointerEvents","mounted","$heatmap","$start","$stop","arg","innerHTML","duration","isLive","svg","w","offsetWidth","h","offsetHeight","options","xMin","xMax","yMin","yMax","scale","minHeight","sampling","smoothing","flattening","gap","y","lastPoint","lastX","lastY","yPoints","point","yMid","min","max","controlPoint","current","previous","next","reverse","o","line","pointA","pointB","lengthX","lengthY","sqrt","angle","atan2","flat","cos","PI","sin","pathD","pointsPositions","e","reduce","acc","bezierCommand","cps","cpe","close","setAttribute","played","percentage","_checkOffSvg","_checkOffSvgDefault","_checkOnSvg","_checkOnSvgDefault","_configSvg","_configSvgDefault","_mode0OffSvg","_mode0OffSvgDefault","_mode0OnSvg","_mode0OnSvgDefault","_mode1OffSvg","_mode1OffSvgDefault","_mode1OnSvg","_mode1OnSvgDefault","_mode2OffSvg","_mode2OffSvgDefault","_mode2OnSvg","_mode2OnSvgDefault","_offSvg","_offSvgDefault","_onSvg","_onSvgDefault","_styleSvg","_styleSvgDefault","_styleLess","_styleLessDefault","setStyle","$mount","$toggle","$config","$configPanel","$configModes","$style","$stylePanel","$styleModes","$colors","$opacitySlider","$opacityValue","$marginSlider","$marginValue","$fontSizeSlider","$fontSizeValue","$speedSlider","$speedValue","$input","$send","slider","emitting","isLock","createTemplate","createSliders","createEvents","onFullscreen","proxy","onMouseEnter","$control","$panel","$on","$off","$mode_0_off","$mode_0_on","$mode_1_off","$mode_1_on","$mode_2_off","$mode_2_on","$check_on","$check_off","outside","TEMPLATE","join","steps","selector","append","el","children","setData","tooltip","$antiOverlap","$syncVideo","$mode","closest","m","$color","preventDefault","createSlider","container","findIndex","onChange","step","$dot","$progress","isDroging","updateLeft","clientY","clientX","button","controlRect","panelRect","playerRect","half","lock","addClass","loop","setTimeout","unlock","removeClass","clearTimeout","fullscreen","fullscreenWeb","inverseClass","find","toUpperCase","$el","querySelector","getElementById","readyState","addEventListener","head","documentElement","_default","parcelRequire4dc0"],"version":3,"file":"index.js.map"} \ No newline at end of file diff --git a/docs/compiled/artplayer-plugin-danmuku.js b/docs/compiled/artplayer-plugin-danmuku.js index b2e93b46b..ecebf27f6 100644 --- a/docs/compiled/artplayer-plugin-danmuku.js +++ b/docs/compiled/artplayer-plugin-danmuku.js @@ -5,4 +5,4 @@ * (c) 2017-2025 Harvey Zack * Released under the MIT License. */ -!function(t,e,i,a,n,o,s,r){var l="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},d="function"==typeof l[a]&&l[a],p=d.i||{},u=d.cache||{},h="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function m(e,i){if(!u[e]){if(!t[e]){if(n[e])return n[e];var o="function"==typeof l[a]&&l[a];if(!i&&o)return o(e,!0);if(d)return d(e,!0);if(h&&"string"==typeof e)return h(e);var s=Error("Cannot find module '"+e+"'");throw s.code="MODULE_NOT_FOUND",s}p.resolve=function(i){var a=t[e][1][i];return null!=a?a:i},p.cache={};var r=u[e]=new m.Module(e);t[e][0].call(r.exports,p,r,r.exports,l)}return u[e].exports;function p(t){var e=p.resolve(t);return!1===e?{}:m(e)}}m.isParcelRequire=!0,m.Module=function(t){this.id=t,this.bundle=m,this.require=h,this.exports={}},m.modules=t,m.cache=u,m.parent=d,m.distDir=void 0,m.publicUrl=void 0,m.devServer=void 0,m.i=p,m.register=function(e,i){t[e]=[function(t,e){e.exports=i},{}]},Object.defineProperty(m,"root",{get:function(){return l[a]}}),l[a]=m;for(var c=0;cu);var o=t("./danmuku"),s=n.interopDefault(o),r=t("./heatmap"),l=n.interopDefault(r),d=t("./setting"),p=n.interopDefault(d);function u(t){return e=>{let i=new(0,s.default)(e,t),a=new(0,p.default)(e,i);return i.option.heatmap&&(0,l.default)(e,i,i.option.heatmap),{name:"artplayerPluginDanmuku",emit:i.emit.bind(i),load:i.load.bind(i),config:i.config.bind(i),hide:i.hide.bind(i),show:i.show.bind(i),reset:i.reset.bind(i),mount:a.mount.bind(a),get option(){return i.option},get isHide(){return i.isHide},get isStop(){return i.isStop}}}}u.icons=p.default.icons,"undefined"!=typeof window&&(window.artplayerPluginDanmuku=u)},{"./danmuku":"g81Wu","./heatmap":"hjtgU","./setting":"ho690","@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],g81Wu:[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i);var o=t("bundle-text:./worker"),s=n.interopDefault(o),r=t("./bilibili");class l{constructor(t,e){let{constructor:i,template:a}=t;this.utils=i.utils,this.validator=i.validator,this.$danmuku=a.$danmuku,this.$player=a.$player,this.art=t,this.queue=[],this.$refs=[],this.isStop=!1,this.isHide=!1,this.timer=null,this.index=0,this.option=l.option,this.states={wait:[],ready:[],emit:[],stop:[]},this.config(e,!0);let n=new Blob([s.default.replace("export{e as default};","")],{type:"application/javascript"});this.worker=new Worker(URL.createObjectURL(n)),this.start=this.start.bind(this),this.stop=this.stop.bind(this),this.reset=this.reset.bind(this),this.resize=this.resize.bind(this),this.destroy=this.destroy.bind(this),t.on("video:play",this.start),t.on("video:playing",this.start),t.on("video:pause",this.stop),t.on("video:waiting",this.stop),t.on("destroy",this.destroy),t.on("resize",this.resize),this.load()}static get option(){return{danmuku:[],speed:5,margin:[10,"25%"],opacity:1,color:"#FFFFFF",mode:0,modes:[0,1,2],fontSize:25,antiOverlap:!0,synchronousPlayback:!1,mount:void 0,heatmap:!1,width:512,points:[],filter:()=>!0,beforeEmit:()=>!0,beforeVisible:()=>!0,visible:!0,emitter:!0,maxLength:200,lockTime:5,theme:"dark",OPACITY:{},FONT_SIZE:{},MARGIN:{},SPEED:{},COLOR:[]}}static get scheme(){return{danmuku:"array|function|string",speed:"number",margin:"array",opacity:"number",color:"string",mode:"number",modes:"array",fontSize:"number|string",antiOverlap:"boolean",synchronousPlayback:"boolean",mount:"?htmldivelement|string",heatmap:"object|boolean",width:"number",points:"array",filter:"function",beforeEmit:"function",beforeVisible:"function",visible:"boolean",emitter:"boolean",maxLength:"number",lockTime:"number",theme:"string",OPACITY:"object",FONT_SIZE:"object",MARGIN:"object",SPEED:"object",COLOR:"array"}}static get cssText(){return` user-select: none; position: absolute; white-space: pre; pointer-events: none; perspective: 500px; display: inline-block; will-change: transform; font-weight: normal; line-height: 1.125; visibility: hidden; font-family: SimHei, "Microsoft JhengHei", Arial, Helvetica, sans-serif; text-shadow: rgb(0, 0, 0) 1px 0px 1px, rgb(0, 0, 0) 0px 1px 1px, rgb(0, 0, 0) 0px -1px 1px, rgb(0, 0, 0) -1px 0px 1px; `}get isRotate(){return this.art.plugins?.autoOrientation?.state}get marginTop(){let{clamp:t}=this.utils,e=this.option.margin[0],{clientHeight:i}=this.$player;return"number"==typeof e?t(e,0,i):"string"==typeof e&&e.endsWith("%")?t(i*(Number.parseFloat(e)/100),0,i):l.option.margin[0]}get marginBottom(){let{clamp:t}=this.utils,e=this.option.margin[1],{clientHeight:i}=this.$player;return"number"==typeof e?t(e,0,i):"string"==typeof e&&e.endsWith("%")?t(i*(Number.parseFloat(e)/100),0,i):l.option.margin[1]}get fontSize(){let{clamp:t}=this.utils,{clientHeight:e}=this.$player,i=this.option.fontSize;return"number"==typeof i?Math.round(t(i,12,e)):"string"==typeof i&&i.endsWith("%")?Math.round(t(e*(Number.parseFloat(i)/100),12,e)):l.option.fontSize}get $ref(){let t=this.$refs.pop()||document.createElement("div");return t.style.cssText=l.cssText,t.dataset.mode="",t.className="",t}get readys(){let{currentTime:t}=this.art,e=[];return this.filter("ready",t=>e.push(t)),this.filter("wait",i=>{t+.1>=i.time&&i.time>=t-.1&&e.push(i)}),e}get visibles(){let t=[],{clientWidth:e}=this.$player,i=this.getLeft(this.$player);return this.filter("emit",a=>{let n=a.$ref.offsetTop,o=this.getLeft(a.$ref)-i,s=a.$ref.clientHeight,r=a.$ref.clientWidth,l=o+r,d=l/a.$restTime,p={};p.top=n,p.left=o,p.height=s,p.width=r,p.right=e-l,p.speed=d,p.distance=l,p.time=a.$restTime,p.mode=a.mode,t.push(p)}),t}get speed(){return this.option.synchronousPlayback&&this.art.playbackRate?this.option.speed/Number(this.art.playbackRate):this.option.speed}async load(t){let{errorHandle:e}=this.utils,i=[],a=t||this.option.danmuku;try{"function"==typeof a?i=await a():a instanceof Promise?i=await a:"string"==typeof a?i=await (0,r.bilibiliDanmuParseFromUrl)(a):Array.isArray(a)&&(i=a),e(Array.isArray(i),"Danmuku need return an array as result"),void 0===t&&(this.reset(),this.queue=[],this.states={wait:[],ready:[],emit:[],stop:[]},this.$refs=[],this.$danmuku.textContent="");for(let t=0;tJSON.stringify(this.option[e])!==JSON.stringify(t[e]))||e)&&(this.option=Object.assign({},l.option,this.option,t),this.validator(this.option,l.scheme),this.option.mode=i(this.option.mode,0,2),this.option.speed=i(this.option.speed,1,10),this.option.opacity=i(this.option.opacity,0,1),this.option.lockTime=i(this.option.lockTime,1,60),this.option.maxLength=i(this.option.maxLength,1,1e3),this.option.mount=this.option.mount||a,t.fontSize&&this.reset(),this.option.visible?this.show():this.hide(),this.art.emit("artplayerPluginDanmuku:config",this.option)),this}getLeft(t){let e=t.getBoundingClientRect();return this.isRotate?e.top:e.left}postMessage(t={}){return new Promise(e=>{t.id=Date.now(),this.worker.postMessage(t),this.worker.onmessage=i=>{let{data:a}=i;a.id===t.id&&e(a)}})}filter(t,e){let i=this.states[t]||[];for(let t=0;te!==t),t.$state=e,t.$ref&&(t.$ref.dataset.state=e),this.states[e].push(t)}makeWait(t){this.setState(t,"wait"),t.$ref&&(t.$ref.style.cssText=l.cssText,t.$ref.style.visibility="hidden",t.$ref.style.marginLeft="0px",t.$ref.style.transform="translateX(0px)",t.$ref.style.transition="transform 0s linear 0s",this.$refs.push(t.$ref),t.$ref=null)}update(){let{setStyles:t}=this.utils;return this.timer=window.requestAnimationFrame(async()=>{if(this.art.playing&&!this.isHide){this.filter("emit",t=>{let e=(Date.now()-t.$lastStartTime)/1e3;t.$restTime-=e,t.$lastStartTime=Date.now(),t.$restTime<=0&&this.makeWait(t)});let e=this.readys;for(let i=0;i{0===e.mode&&(e.$ref.style.left=`${t}px`)}),this.filter("emit",e=>{if(e.$lastStartTime=Date.now(),0===e.mode){let i=t+e.$ref.clientWidth;e.$ref.style.left=`${t}px`,e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition=`transform ${e.$restTime}s linear 0s`}})}continue(){let{clientWidth:t}=this.$player;return this.filter("stop",e=>{if(this.setState(e,"emit"),e.$lastStartTime=Date.now(),0===e.mode){let i=t+e.$ref.clientWidth;e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition=`transform ${e.$restTime}s linear 0s`}}),this}suspend(){let{clientWidth:t}=this.$player;return this.filter("emit",e=>{if(this.setState(e,"stop"),0===e.mode){let i=t-(this.getLeft(e.$ref)-this.getLeft(this.$player));e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition="transform 0s linear 0s"}}),this}stop(){return this.isStop=!0,this.suspend(),window.cancelAnimationFrame(this.timer),this.art.emit("artplayerPluginDanmuku:stop"),this}start(){return this.isStop=!1,this.continue(),this.update(),this.art.emit("artplayerPluginDanmuku:start"),this}reset(){return this.queue.forEach(t=>this.makeWait(t)),this.art.emit("artplayerPluginDanmuku:reset"),this}show(){return this.isHide=!1,this.$danmuku.style.opacity=1,this.option.visible=!0,this.art.emit("artplayerPluginDanmuku:show"),this}hide(){return this.isHide=!0,this.$danmuku.style.opacity=0,this.option.visible=!1,this.art.emit("artplayerPluginDanmuku:hide"),this}destroy(){this.stop(),this.worker.terminate(),this.art.off("video:play",this.start),this.art.off("video:playing",this.start),this.art.off("video:pause",this.stop),this.art.off("video:waiting",this.stop),this.art.off("resize",this.reset),this.art.off("destroy",this.destroy),this.art.emit("artplayerPluginDanmuku:destroy")}}i.default=l},{"bundle-text:./worker":"cK8sH","./bilibili":"jICn4","@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],cK8sH:[function(t,e,i,a){e.exports='!function(e,t,i,o,n,r,f,l){var d="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},u="function"==typeof d[o]&&d[o],p=u.i||{},h=u.cache||{},s="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function a(t,i){if(!h[t]){if(!e[t]){if(n[t])return n[t];var r="function"==typeof d[o]&&d[o];if(!i&&r)return r(t,!0);if(u)return u(t,!0);if(s&&"string"==typeof t)return s(t);var f=Error("Cannot find module \'"+t+"\'");throw f.code="MODULE_NOT_FOUND",f}p.resolve=function(i){var o=e[t][1][i];return null!=o?o:i},p.cache={};var l=h[t]=new a.Module(t);e[t][0].call(l.exports,p,l,l.exports,d)}return h[t].exports;function p(e){var t=p.resolve(e);return!1===t?{}:a(t)}}a.isParcelRequire=!0,a.Module=function(e){this.id=e,this.bundle=a,this.require=s,this.exports={}},a.modules=e,a.cache=h,a.parent=u,a.distDir=void 0,a.publicUrl=void 0,a.devServer=void 0,a.i=p,a.register=function(t,i){e[t]=[function(e,t){t.exports=i},{}]},Object.defineProperty(a,"root",{get:function(){return d[o]}}),d[o]=a;for(var c=0;ct.mode===e.mode&&t.top<=l).sort((e,t)=>e.top-t.top);if(0===d.length)if(2===e.mode)return l-e.height;else return r;if(d.unshift({type:"top",top:0,left:0,right:0,height:r,width:i,speed:0,distance:i}),d.push({type:"bottom",top:l,left:0,right:0,height:n,width:i,speed:0,distance:i}),2===e.mode)for(let t=d.length-2;t>=0;t-=1){let i=d[t],o=d[t+1],n=i.top+i.height;if(o.top-n>=e.height)return o.top-e.height}else for(let t=1;t=e.height)return n}let u=[];for(let e=1;et.every(t=>!(it.time))));return t&&t[0]?t[0].top:void 0}case 1:case 2:return}else{switch(e.mode){case 0:u.sort((e,t)=>{let i=Math.min(...t.map(e=>e.right)),o=Math.min(...e.map(e=>e.right));return i*t.length-o*e.length});break;case 1:case 2:u.sort((e,t)=>{let i=Math.max(...t.map(e=>e.width));return Math.max(...e.map(e=>e.width))*e.length-i*t.length})}return u[0][0].top}}onmessage=e=>{let{data:t}=e;t.id&&t.type&&globalThis.postMessage({result:(0,({getDanmuTop:n})[t.type])(t),id:t.id})}},{}]},["fpBtQ"],"fpBtQ","parcelRequire4dc0",{});'},{}],jICn4:[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");function o(t){switch(t){case 1:case 2:case 3:default:return 0;case 4:return 2;case 5:return 1}}function s(t){return"string"!=typeof t?[]:Array.from(t.matchAll(/]*?p="(?

[^"]+)"[^>]*>(?.*?)<\/d>/gs)).map(t=>{let e=t.groups.p.split(",");return e.length>=8?{text:t.groups.text.trim().replaceAll(""",'"').replaceAll("'","'").replaceAll("<","<").replaceAll(">",">").replaceAll("&","&"),time:Number(e[0]),mode:o(Number(e[1])),fontSize:Number(e[2]),color:`#${Number(e[3]).toString(16)}`,timestamp:Number(e[4]),pool:Number(e[5]),userID:e[6],rowID:Number(e[7])}:null}).filter(Boolean)}function r({data:t}){let{xml:e,id:i}=t;i&&e&&globalThis.postMessage({danmus:s(e),id:i})}function l(t){return new Promise(async e=>{let i=await fetch(t),a=await i.text();try{let t=function(){let t=new Blob([` ${o.toString()} ${s.toString()} onmessage = ${r.toString()} `],{type:"application/javascript"});return new Worker(URL.createObjectURL(t))}();t.onmessage=i=>{let{danmus:a,id:n}=i.data;n&&a&&(e(a),t.terminate())},t.postMessage({xml:a,id:Date.now()})}catch(t){console.error("Error parsing Bilibili Danmu:",t),e(s(a))}})}n.defineInteropFlag(i),n.export(i,"bilibiliDanmuParseFromUrl",()=>l)},{"@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],"6ykb1":[function(t,e,i,a){i.interopDefault=function(t){return t&&t.__esModule?t:{default:t}},i.defineInteropFlag=function(t){Object.defineProperty(t,"__esModule",{value:!0})},i.exportAll=function(t,e){return Object.keys(t).forEach(function(i){"default"===i||"__esModule"===i||Object.prototype.hasOwnProperty.call(e,i)||Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[i]}})}),e},i.export=function(t,e,i){Object.defineProperty(t,e,{enumerable:!0,get:i})}},{}],hjtgU:[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i),n.export(i,"default",()=>s);let o={map:(t,e,i,a,n)=>(t-e)*(n-a)/(i-e)+a,range(t,e,i){let a=Math.round(t/i)*i;return Array.from({length:Math.floor((e-t)/i)},(t,e)=>e*i+a)}};function s(t,e,i){let{query:a}=t.constructor.utils;t.controls.add({name:"heatmap",position:"top",html:"",style:{position:"absolute",top:"-100px",left:"0px",right:"0px",height:"100px",width:"100%",pointerEvents:"none"},mounted(n){let s=null,r=null;function l(d=[]){if(s=null,r=null,n.innerHTML="",!t.duration||t.option.isLive)return;let p={w:n.offsetWidth,h:n.offsetHeight},u={xMin:0,xMax:p.w,yMin:0,yMax:128,scale:.25,opacity:.2,minHeight:Math.floor(.05*p.h),sampling:Math.floor(p.w/100),smoothing:.2,flattening:.2};"object"==typeof i&&Object.assign(u,i);let h=[];if(Array.isArray(d)&&d.length)h=[...d];else{let i=t.duration/p.w;for(let t=0;t<=p.w;t+=u.sampling){let a=e.queue.filter(({time:e})=>e>t*i&&e<=(t+u.sampling)*i).length;h.push([t,a])}}if(0===h.length)return;let m=h[h.length-1],c=m[0],f=m[1];c!==p.w&&h.push([p.w,f]);let g=h.map(t=>t[1]),y=(Math.min(...g)+Math.max(...g))/2;for(let t=0;ty?1+u.scale:1-u.scale)+u.minHeight}let v=(t,e,i,a)=>{let n=function(t,e){let i=e[0]-t[0],a=e[1]-t[1];return{length:Math.sqrt(i**2+a**2),angle:Math.atan2(a,i)}}(e||t,i||t),s=o.map(Math.cos(n.angle)*u.flattening,0,1,1,0),r=n.angle*s+(a?Math.PI:0),l=n.length*u.smoothing;return[t[0]+Math.cos(r)*l,t[1]+Math.sin(r)*l]},x=h.map(t=>[o.map(t[0],u.xMin,u.xMax,0,p.w),o.map(t[1],u.yMin,u.yMax,p.h,0)]).reduce((t,e,i,a)=>0===i?`M ${a[a.length-1][0]},${p.h} L ${e[0]},${p.h} L ${e[0]},${e[1]}`:`${t} ${((t,e,i)=>{let a=v(i[e-1],i[e-2],t),n=v(t,i[e-1],i[e+1],!0),o=e===i.length-1?" z":"";return`C ${a[0]},${a[1]} ${n[0]},${n[1]} ${t[0]},${t[1]}${o}`})(e,i,a)}`,"");n.innerHTML=``,s=a("#heatmap-start",n),r=a("#heatmap-stop",n),s.setAttribute("offset",`${100*t.played}%`),r.setAttribute("offset",`${100*t.played}%`)}t.on("video:timeupdate",()=>{s&&r&&(s.setAttribute("offset",`${100*t.played}%`),r.setAttribute("offset",`${100*t.played}%`))}),t.on("setBar",(t,e)=>{s&&r&&"played"===t&&(s.setAttribute("offset",`${100*e}%`),r.setAttribute("offset",`${100*e}%`))}),t.on("ready",()=>l()),t.on("resize",()=>l()),t.on("artplayerPluginDanmuku:loaded",()=>l()),t.on("artplayerPluginDanmuku:points",t=>l(t))}})}},{"@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],ho690:[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i);var o=t("bundle-text:./img/check_off.svg"),s=n.interopDefault(o),r=t("bundle-text:./img/check_on.svg"),l=n.interopDefault(r),d=t("bundle-text:./img/config.svg"),p=n.interopDefault(d),u=t("bundle-text:./img/mode_0_off.svg"),h=n.interopDefault(u),m=t("bundle-text:./img/mode_0_on.svg"),c=n.interopDefault(m),f=t("bundle-text:./img/mode_1_off.svg"),g=n.interopDefault(f),y=t("bundle-text:./img/mode_1_on.svg"),v=n.interopDefault(y),x=t("bundle-text:./img/mode_2_off.svg"),k=n.interopDefault(x),b=t("bundle-text:./img/mode_2_on.svg"),$=n.interopDefault(b),w=t("bundle-text:./img/off.svg"),M=n.interopDefault(w),D=t("bundle-text:./img/on.svg"),S=n.interopDefault(D),E=t("bundle-text:./img/style.svg"),q=n.interopDefault(E),T=t("bundle-text:./style.less"),A=n.interopDefault(T);if(i.default=class{constructor(t,e){this.art=t,this.danmuku=e,this.utils=t.constructor.utils;let{setStyle:i}=this.utils,{$controlsCenter:a}=t.template;i(a,"display","flex"),this.template={$controlsCenter:a,$mount:a,$danmuku:null,$toggle:null,$config:null,$configPanel:null,$configModes:null,$style:null,$stylePanel:null,$styleModes:null,$colors:null,$opacitySlider:null,$opacityValue:null,$marginSlider:null,$marginValue:null,$fontSizeSlider:null,$fontSizeValue:null,$speedSlider:null,$speedValue:null,$input:null,$send:null},this.slider={opacity:null,margin:null,fontSize:null,speed:null},this.emitting=!1,this.isLock=!1,this.timer=null,this.createTemplate(),this.createSliders(),this.createEvents(),this.mount(this.option.mount),t.on("resize",()=>this.resize()),t.on("fullscreen",t=>this.onFullscreen(t)),t.on("fullscreenWeb",t=>this.onFullscreen(t)),t.proxy(this.template.$config,"mouseenter",()=>{this.onMouseEnter({$control:this.template.$config,$panel:this.template.$configPanel})}),t.proxy(this.template.$style,"mouseenter",()=>{this.onMouseEnter({$control:this.template.$style,$panel:this.template.$stylePanel})})}static get icons(){return{$on:S.default,$off:M.default,$config:p.default,$style:q.default,$mode_0_off:h.default,$mode_0_on:c.default,$mode_1_off:g.default,$mode_1_on:v.default,$mode_2_off:k.default,$mode_2_on:$.default,$check_on:l.default,$check_off:s.default}}get option(){return this.danmuku.option}get outside(){return this.template.$mount!==this.template.$controlsCenter}get TEMPLATE(){let{option:t}=this;return`

${S.default}${M.default}
${p.default}
\u{6309}\u{7C7B}\u{578B}\u{5C4F}\u{853D}
${h.default}${c.default}
\u{6EDA}\u{52A8}
${g.default}${v.default}
\u{9876}\u{90E8}
${k.default}${$.default}
\u{5E95}\u{90E8}
${l.default}${s.default} \u{9632}\u{6B62}\u{5F39}\u{5E55}\u{91CD}\u{53E0}
${l.default}${s.default} \u{540C}\u{6B65}\u{89C6}\u{9891}\u{901F}\u{5EA6}
\u{4E0D}\u{900F}\u{660E}\u{5EA6}
\u{672A}\u{77E5}
\u{663E}\u{793A}\u{533A}\u{57DF}
\u{672A}\u{77E5}
\u{5F39}\u{5E55}\u{5B57}\u{53F7}
\u{672A}\u{77E5}
\u{5F39}\u{5E55}\u{901F}\u{5EA6}
\u{672A}\u{77E5}
${q.default}
\u{6A21}\u{5F0F}
${c.default}
\u{6EDA}\u{52A8}
${v.default}
\u{9876}\u{90E8}
${$.default}
\u{5E95}\u{90E8}
\u{989C}\u{8272}
${this.COLOR.map(t=>`
`).join("")}
\u{53D1}\u{9001}
`}get OPACITY(){return{min:0,max:100,steps:[],...this.option.OPACITY}}get FONT_SIZE(){return{min:12,max:120,steps:[],...this.option.FONT_SIZE}}get MARGIN(){return{min:0,max:3,steps:[{name:"1/4",value:[10,"75%"]},{name:"半屏",value:[10,"50%"]},{name:"3/4",value:[10,"25%"]},{name:"满屏",value:[10,10]}],...this.option.MARGIN}}get SPEED(){return{min:0,max:4,steps:[{name:"极慢",value:10},{name:"较慢",value:7.5,hide:!0},{name:"适中",value:5},{name:"较快",value:2.5,hide:!0},{name:"极快",value:1}],...this.option.SPEED}}get COLOR(){return this.option.COLOR.length?this.option.COLOR:["#FE0302","#FF7204","#FFAA02","#FFD302","#FFFF00","#A0EE00","#00CD00","#019899","#4266BE","#89D5FF","#CC0273","#222222","#9B9B9B","#FFFFFF"]}query(t){let{query:e}=this.utils,{$danmuku:i}=this.template;return e(t,i)}append(t,e){let{append:i}=this.utils;[...t.children].includes(e)||i(t,e)}setData(t,e){let{$player:i}=this.art.template,{$mount:a}=this.template;i.dataset[t]=e,this.outside&&(a.dataset[t]=e)}createTemplate(){let{createElement:t,tooltip:e}=this.utils,i=t("div");i.className="artplayer-plugin-danmuku",i.innerHTML=this.TEMPLATE,this.template.$danmuku=i,this.template.$toggle=this.query(".apd-toggle"),this.template.$config=this.query(".apd-config"),this.template.$configPanel=this.query(".apd-config-panel"),this.template.$configModes=this.query(".apd-config-mode .apd-modes"),this.template.$style=this.query(".apd-style"),this.template.$stylePanel=this.query(".apd-style-panel"),this.template.$styleModes=this.query(".apd-style-mode .apd-modes"),this.template.$colors=this.query(".apd-colors"),this.template.$antiOverlap=this.query(".apd-anti-overlap"),this.template.$syncVideo=this.query(".apd-sync-video"),this.template.$opacitySlider=this.query(".apd-config-opacity .apd-slider"),this.template.$opacityValue=this.query(".apd-config-opacity .apd-value"),this.template.$marginSlider=this.query(".apd-config-margin .apd-slider"),this.template.$marginValue=this.query(".apd-config-margin .apd-value"),this.template.$fontSizeSlider=this.query(".apd-config-fontSize .apd-slider"),this.template.$fontSizeValue=this.query(".apd-config-fontSize .apd-value"),this.template.$speedSlider=this.query(".apd-config-speed .apd-slider"),this.template.$speedValue=this.query(".apd-config-speed .apd-value"),this.template.$input=this.query(".apd-input"),this.template.$send=this.query(".apd-send");let{$toggle:a}=this.template;this.art.on("artplayerPluginDanmuku:show",()=>{e(a,"关闭弹幕")}),this.art.on("artplayerPluginDanmuku:hide",()=>{e(a,"打开弹幕")})}createEvents(){let{$toggle:t,$configModes:e,$styleModes:i,$colors:a,$antiOverlap:n,$syncVideo:o,$send:s,$input:r}=this.template;this.art.proxy(t,"click",()=>{this.danmuku.config({visible:!this.option.visible}),this.reset()}),this.art.proxy(e,"click",t=>{let e=t.target.closest(".apd-mode");if(!e)return;let i=Number(e.dataset.mode);this.option.modes.includes(i)?this.danmuku.config({modes:this.option.modes.filter(t=>t!==i)}):this.danmuku.config({modes:[...this.option.modes,i]}),this.reset()}),this.art.proxy(n,"click",()=>{this.danmuku.config({antiOverlap:!this.option.antiOverlap}),this.reset()}),this.art.proxy(o,"click",()=>{this.danmuku.config({synchronousPlayback:!this.option.synchronousPlayback}),this.reset()}),this.art.proxy(i,"click",t=>{let e=t.target.closest(".apd-mode");if(!e)return;let i=Number(e.dataset.mode);this.danmuku.config({mode:i}),this.reset()}),this.art.proxy(a,"click",t=>{let e=t.target.closest(".apd-color");e&&(this.danmuku.config({color:e.dataset.color}),this.reset())}),this.art.proxy(s,"click",()=>this.emit()),this.art.proxy(r,"keypress",t=>{"Enter"===t.key&&(t.preventDefault(),this.emit())})}createSliders(){this.slider.opacity=this.createSlider({...this.OPACITY,container:this.template.$opacitySlider,findIndex:()=>Math.round(100*this.option.opacity),onChange:t=>{let{$opacityValue:e}=this.template;e.textContent=`${t}%`,this.danmuku.config({opacity:t/100})}}),this.slider.margin=this.createSlider({...this.MARGIN,container:this.template.$marginSlider,findIndex:()=>this.MARGIN.steps.findIndex(t=>t.value[0]===this.option.margin[0]&&t.value[1]===this.option.margin[1]),onChange:t=>{let e=this.MARGIN.steps[t];if(!e)return;let{$marginValue:i}=this.template;i.textContent=e.name,this.danmuku.config({margin:e.value})}}),this.slider.fontSize=this.createSlider({...this.FONT_SIZE,container:this.template.$fontSizeSlider,findIndex:()=>this.danmuku.fontSize,onChange:t=>{let{$fontSizeValue:e}=this.template;e.textContent=`${t}px`,t!==this.danmuku.fontSize&&this.danmuku.config({fontSize:t})}}),this.slider.speed=this.createSlider({...this.SPEED,container:this.template.$speedSlider,findIndex:()=>this.SPEED.steps.findIndex(t=>t.value===this.option.speed),onChange:t=>{let e=this.SPEED.steps[t];if(!e)return;let{$speedValue:i}=this.template;i.textContent=e.name,this.danmuku.config({speed:e.value})}})}createSlider({min:t,max:e,container:i,findIndex:a,onChange:n,steps:o=[]}){let{query:s,clamp:r,setStyle:l}=this.utils;l(i,"touch-action","none"),i.innerHTML=`
${o.map(()=>'
').join("")}
${o.map(t=>t.hide?"":`
${t.name}
`).join("")}
`;let d=s(".apd-slider-dot",i),p=s(".apd-slider-progress",i),u=!1;function h(i=a()){if(ie)return;let s=(i-t)/(e-t);d.style.left=`${100*s}%`,0===o.length&&(p.style.width=d.style.left),n(i)}function m(a){let{top:n,height:o,left:s,width:l}=i.getBoundingClientRect();this.art.isRotate?h(Math.round(r(a.clientY-n,0,o)/o*(e-t)+t)):h(Math.round(r(a.clientX-s,0,l)/l*(e-t)+t))}return this.art.proxy(i,"click",t=>{m.call(this,t)}),this.art.proxy(i,"pointerdown",t=>{u=0===t.button}),this.art.proxy(document,"pointermove",t=>{u&&m.call(this,t)}),this.art.proxy(document,"pointerup",t=>{u&&(u=!1,m.call(this,t))}),{reset:h}}onFullscreen(t){let{$danmuku:e,$controlsCenter:i,$mount:a}=this.template;this.outside?t?this.append(i,e):this.append(a,e):this.append(i,e)}onMouseEnter({$control:t,$panel:e}){let{$player:i}=this.art.template,a=t.getBoundingClientRect(),n=e.getBoundingClientRect(),o=i.getBoundingClientRect(),s=n.width/2-a.width/2,r=o.left-(a.left-s),l=a.right+s-o.right;r>0?e.style.left=`${-s+r}px`:l>0?e.style.left=`${-s-l}px`:e.style.left=`${-s}px`}async emit(){let{$input:t}=this.template,e=t.value.trim();if(!e.length||this.isLock||this.emitting)return;let i={text:e,mode:this.option.mode,color:this.option.color,time:this.art.currentTime};try{this.emitting=!0;let e=await this.option.beforeEmit(i);if(this.emitting=!1,!0!==e)return;i.border=!0,delete i.time,this.danmuku.emit(i),t.value="",this.lock()}catch(t){console.error("Error emitting danmuku:",t),this.emitting=!1}}lock(){let{addClass:t}=this.utils,{$send:e}=this.template;this.isLock=!0;let i=this.option.lockTime;e.textContent=i,t(e,"apd-lock");let a=()=>{this.timer=setTimeout(()=>{0===i?this.unlock():(e.textContent=i-=1,a())},1e3)};a()}unlock(){let{removeClass:t}=this.utils,{$send:e}=this.template;clearTimeout(this.timer),this.isLock=!1,e.textContent="发送",t(e,"apd-lock")}resize(){if(this.outside||this.art.fullscreen||this.art.fullscreenWeb)return;let{$player:t,$controlsCenter:e}=this.art.template,{$danmuku:i}=this.template;this.art.widtht.dataset.color===this.option.color.toUpperCase());n&&t(n,"apd-active"),e(i,this.option.visible?"关闭弹幕":"打开弹幕"),this.resize()}mount(t){let{errorHandle:e}=this.utils,i="string"==typeof t?document.querySelector(t):t;e(i,`Can not find the mount point: ${t}`),this.append(i,this.template.$danmuku),this.template.$mount=i,this.reset()}},"undefined"!=typeof document){let t="artplayer-plugin-danmuku",e=document.getElementById(t);e||((e=document.createElement("style")).id=t,"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{document.head.appendChild(e)}):(document.head||document.documentElement).appendChild(e)),e.textContent=A.default}},{"bundle-text:./img/check_off.svg":"gf3jX","bundle-text:./img/check_on.svg":"9EUUq","bundle-text:./img/config.svg":"jqR46","bundle-text:./img/mode_0_off.svg":"fFoDs","bundle-text:./img/mode_0_on.svg":"hkEt9","bundle-text:./img/mode_1_off.svg":"3n5ax","bundle-text:./img/mode_1_on.svg":"hJjtU","bundle-text:./img/mode_2_off.svg":"dWW5U","bundle-text:./img/mode_2_on.svg":"1QGuJ","bundle-text:./img/off.svg":"bMJJY","bundle-text:./img/on.svg":"2h5UL","bundle-text:./img/style.svg":"9tkqu","bundle-text:./style.less":"e4L1w","@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],gf3jX:[function(t,e,i,a){e.exports=''},{}],"9EUUq":[function(t,e,i,a){e.exports=''},{}],jqR46:[function(t,e,i,a){e.exports=''},{}],fFoDs:[function(t,e,i,a){e.exports=''},{}],hkEt9:[function(t,e,i,a){e.exports=''},{}],"3n5ax":[function(t,e,i,a){e.exports=''},{}],hJjtU:[function(t,e,i,a){e.exports=''},{}],dWW5U:[function(t,e,i,a){e.exports=''},{}],"1QGuJ":[function(t,e,i,a){e.exports=''},{}],bMJJY:[function(t,e,i,a){e.exports=''},{}],"2h5UL":[function(t,e,i,a){e.exports=''},{}],"9tkqu":[function(t,e,i,a){e.exports=''},{}],e4L1w:[function(t,e,i,a){e.exports='.artplayer-plugin-danmuku{z-index:99;color:#fff;flex-shrink:0;justify-content:center;align-items:center;gap:10px;width:100%;height:32px;font-size:12px;font-weight:300;display:flex;position:relative}.artplayer-plugin-danmuku .apd-icon{cursor:pointer;opacity:.75;fill:#fff;transition:all .2s}.artplayer-plugin-danmuku .apd-icon:hover{opacity:1}.artplayer-plugin-danmuku .apd-config{display:flex;position:relative}.artplayer-plugin-danmuku .apd-config .apd-config-panel{opacity:0;pointer-events:none;width:320px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-config .apd-config-panel .apd-config-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-config:hover .apd-config-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-config-mode,.artplayer-plugin-danmuku .apd-config-slider,.artplayer-plugin-danmuku .apd-config-other,.artplayer-plugin-danmuku .apd-style-mode{margin-bottom:15px}.artplayer-plugin-danmuku .apd-modes{align-items:center;gap:20px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-modes .apd-mode{cursor:pointer;text-align:center}.artplayer-plugin-danmuku .apd-modes .apd-mode:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-config-slider{align-items:center;gap:12px;display:flex}.artplayer-plugin-danmuku .apd-config-slider .apd-value{text-align:right;width:32px}.artplayer-plugin-danmuku .apd-slider{cursor:pointer;flex:1;justify-content:center;align-items:center;height:20px;display:flex;position:relative}.artplayer-plugin-danmuku .apd-slider .apd-slider-line{background-color:#ffffff40;border-radius:3px;width:100%;height:2px;position:relative;overflow:hidden}.artplayer-plugin-danmuku .apd-slider .apd-slider-points{justify-content:space-between;align-items:center;display:flex;position:absolute;inset:0}.artplayer-plugin-danmuku .apd-slider .apd-slider-points .apd-slider-point{background-color:#ffffff80;border-radius:50%;width:2px;height:2px}.artplayer-plugin-danmuku .apd-slider .apd-slider-progress{background-color:#00a1d6;width:0%;height:100%}.artplayer-plugin-danmuku .apd-slider .apd-slider-dot{background-color:#00a1d6;border-radius:50%;width:12px;height:12px;position:absolute;left:0%;transform:translate(-6px)}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps{color:#777;justify-content:space-between;align-items:center;width:calc(100% + 32px);display:flex;position:absolute;bottom:-12px}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps .apd-slider-step{text-align:center;flex-shrink:0;width:36px;scale:.95}.artplayer-plugin-danmuku .apd-config-other{align-items:center;gap:20px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-check-off,.artplayer-plugin-danmuku .apd-config-other .apd-check-on{width:16px;height:16px}.artplayer-plugin-danmuku .apd-config-other .apd-other{cursor:pointer;align-items:center;gap:2px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-other:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-emitter{background-color:#ffffff40;border-radius:5px;flex:1;align-items:center;height:100%;display:flex}.artplayer-plugin-danmuku .apd-style{justify-content:center;align-items:center;display:flex;position:relative}.artplayer-plugin-danmuku .apd-style .apd-style-panel{opacity:0;pointer-events:none;width:200px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-style .apd-style-panel .apd-style-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-style:hover .apd-style-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-colors{flex-wrap:wrap;gap:8px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-colors .apd-color{cursor:pointer;border-radius:2px;width:16px;height:16px}.artplayer-plugin-danmuku .apd-colors .apd-color.apd-active{border:1px solid #000;box-shadow:0 0 0 1px #fff}.artplayer-plugin-danmuku .apd-input{color:#fff;background-color:#0000;border:none;outline:none;flex:1;width:auto;min-width:0;height:100%;line-height:1}.artplayer-plugin-danmuku .apd-input::placeholder{color:#ffffff80}.artplayer-plugin-danmuku .apd-send{cursor:pointer;width:60px;height:100%;text-shadow:none;background-color:#00a1d6;border-top-right-radius:5px;border-bottom-right-radius:5px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.artplayer-plugin-danmuku .apd-send.apd-lock{cursor:not-allowed;color:#666;background-color:#e7e7e7}.art-controls-center .apd-emitter{flex:none;width:260px}.art-fullscreen .artplayer-plugin-danmuku,.art-fullscreen-web .artplayer-plugin-danmuku{gap:16px;height:38px}.art-fullscreen .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen-web .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-on,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-on{width:28px;height:28px}.art-fullscreen .artplayer-plugin-danmuku .apd-emitter,.art-fullscreen-web .artplayer-plugin-danmuku .apd-emitter{flex:none;width:400px}.art-video-player>.artplayer-plugin-danmuku{padding:0 10px;position:absolute;bottom:-40px;left:0;right:0}.art-video-player:has(>.artplayer-plugin-danmuku){margin-bottom:40px}[data-danmuku-emitter=false] .apd-emitter{display:none!important}[data-danmuku-emitter=false] .art-controls-center .artplayer-plugin-danmuku{justify-content:flex-end;gap:18px}[data-danmuku-emitter=false].art-fullscreen .art-controls-center .artplayer-plugin-danmuku,[data-danmuku-emitter=false].art-fullscreen-web .art-controls-center .artplayer-plugin-danmuku{gap:24px}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-icon{fill:#333}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-emitter{background-color:#f1f2f3}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input{color:#000}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input::placeholder{color:#0000004d}[data-danmuku-visible=false] .apd-toggle-off{display:block}[data-danmuku-visible=false] .apd-toggle-on,[data-danmuku-visible=true] .apd-toggle-off{display:none}[data-danmuku-visible=true] .apd-toggle-on{display:block}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-on{display:none}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-off,[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-on{display:block}[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-off,[data-danmuku-sync-video=false] .apd-sync-video .apd-check-on{display:none}[data-danmuku-sync-video=false] .apd-sync-video .apd-check-off,[data-danmuku-sync-video=true] .apd-sync-video .apd-check-on{display:block}[data-danmuku-sync-video=true] .apd-sync-video .apd-check-off{display:none}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-off{display:block}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-on{display:none}[data-danmuku-mode0=false] .art-danmuku [data-mode="0"]{opacity:0!important}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-off{display:none}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-on{display:block}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"]{color:#00a1d6}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"] path{fill:#00a1d6}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-off{display:block}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-on{display:none}[data-danmuku-mode1=false] .art-danmuku [data-mode="1"]{opacity:0!important}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-off{display:none}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-on{display:block}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"]{color:#00a1d6}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"] path{fill:#00a1d6}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-off{display:block}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-on{display:none}[data-danmuku-mode2=false] .art-danmuku [data-mode="2"]{opacity:0!important}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-off{display:none}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-on{display:block}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"]{color:#00a1d6}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"] path{fill:#00a1d6}'},{}]},["666Ok"],"666Ok","parcelRequire4dc0",{}); \ No newline at end of file +!function(t,e,i,a,n,o,s,r){var l="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},d="function"==typeof l[a]&&l[a],p=d.i||{},u=d.cache||{},h="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function m(e,i){if(!u[e]){if(!t[e]){if(n[e])return n[e];var o="function"==typeof l[a]&&l[a];if(!i&&o)return o(e,!0);if(d)return d(e,!0);if(h&&"string"==typeof e)return h(e);var s=Error("Cannot find module '"+e+"'");throw s.code="MODULE_NOT_FOUND",s}p.resolve=function(i){var a=t[e][1][i];return null!=a?a:i},p.cache={};var r=u[e]=new m.Module(e);t[e][0].call(r.exports,p,r,r.exports,l)}return u[e].exports;function p(t){var e=p.resolve(t);return!1===e?{}:m(e)}}m.isParcelRequire=!0,m.Module=function(t){this.id=t,this.bundle=m,this.require=h,this.exports={}},m.modules=t,m.cache=u,m.parent=d,m.distDir=void 0,m.publicUrl=void 0,m.devServer=void 0,m.i=p,m.register=function(e,i){t[e]=[function(t,e){e.exports=i},{}]},Object.defineProperty(m,"root",{get:function(){return l[a]}}),l[a]=m;for(var c=0;cu);var o=t("./danmuku"),s=n.interopDefault(o),r=t("./heatmap"),l=n.interopDefault(r),d=t("./setting"),p=n.interopDefault(d);function u(t){return e=>{let i=new(0,s.default)(e,t),a=new(0,p.default)(e,i);return i.option.heatmap&&(0,l.default)(e,i,i.option.heatmap),{name:"artplayerPluginDanmuku",emit:i.emit.bind(i),load:i.load.bind(i),config:i.config.bind(i),hide:i.hide.bind(i),show:i.show.bind(i),reset:i.reset.bind(i),mount:a.mount.bind(a),get option(){return i.option},get isHide(){return i.isHide},get isStop(){return i.isStop}}}}u.icons=p.default.icons,"undefined"!=typeof window&&(window.artplayerPluginDanmuku=u)},{"./danmuku":"g81Wu","./heatmap":"hjtgU","./setting":"ho690","@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],g81Wu:[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i);var o=t("bundle-text:./worker"),s=n.interopDefault(o),r=t("./bilibili");class l{constructor(t,e){let{constructor:i,template:a}=t;this.utils=i.utils,this.validator=i.validator,this.$danmuku=a.$danmuku,this.$player=a.$player,this.art=t,this.queue=[],this.$refs=[],this.isStop=!1,this.isHide=!1,this.timer=null,this.index=0,this.option=l.option,this.states={wait:[],ready:[],emit:[],stop:[]},this.config(e,!0);let n=new Blob([s.default.replace("export{e as default};","")],{type:"application/javascript"});this.worker=new Worker(URL.createObjectURL(n)),this.start=this.start.bind(this),this.stop=this.stop.bind(this),this.reset=this.reset.bind(this),this.resize=this.resize.bind(this),this.destroy=this.destroy.bind(this),t.on("video:play",this.start),t.on("video:playing",this.start),t.on("video:pause",this.stop),t.on("video:waiting",this.stop),t.on("destroy",this.destroy),t.on("resize",this.resize),this.load()}static get option(){return{danmuku:[],speed:5,margin:[10,"25%"],opacity:1,color:"#FFFFFF",mode:0,modes:[0,1,2],fontSize:25,antiOverlap:!0,synchronousPlayback:!1,mount:void 0,heatmap:!1,width:512,points:[],filter:()=>!0,beforeEmit:()=>!0,beforeVisible:()=>!0,visible:!0,emitter:!0,maxLength:200,lockTime:5,theme:"dark",OPACITY:{},FONT_SIZE:{},MARGIN:{},SPEED:{},COLOR:[]}}static get scheme(){return{danmuku:"array|function|string",speed:"number",margin:"array",opacity:"number",color:"string",mode:"number",modes:"array",fontSize:"number|string",antiOverlap:"boolean",synchronousPlayback:"boolean",mount:"?htmldivelement|string",heatmap:"object|boolean",width:"number",points:"array",filter:"function",beforeEmit:"function",beforeVisible:"function",visible:"boolean",emitter:"boolean",maxLength:"number",lockTime:"number",theme:"string",OPACITY:"object",FONT_SIZE:"object",MARGIN:"object",SPEED:"object",COLOR:"array"}}static get cssText(){return` user-select: none; position: absolute; white-space: pre; pointer-events: none; perspective: 500px; display: inline-block; will-change: transform; font-weight: normal; line-height: 1.125; visibility: hidden; font-family: SimHei, "Microsoft JhengHei", Arial, Helvetica, sans-serif; text-shadow: rgb(0, 0, 0) 1px 0px 1px, rgb(0, 0, 0) 0px 1px 1px, rgb(0, 0, 0) 0px -1px 1px, rgb(0, 0, 0) -1px 0px 1px; `}get isRotate(){return this.art.plugins?.autoOrientation?.state}get marginTop(){let{clamp:t}=this.utils,e=this.option.margin[0],{clientHeight:i}=this.$player;return"number"==typeof e?t(e,0,i):"string"==typeof e&&e.endsWith("%")?t(i*(Number.parseFloat(e)/100),0,i):l.option.margin[0]}get marginBottom(){let{clamp:t}=this.utils,e=this.option.margin[1],{clientHeight:i}=this.$player;return"number"==typeof e?t(e,0,i):"string"==typeof e&&e.endsWith("%")?t(i*(Number.parseFloat(e)/100),0,i):l.option.margin[1]}get fontSize(){let{clamp:t}=this.utils,{clientHeight:e}=this.$player,i=this.option.fontSize;return"number"==typeof i?Math.round(t(i,12,e)):"string"==typeof i&&i.endsWith("%")?Math.round(t(e*(Number.parseFloat(i)/100),12,e)):l.option.fontSize}get $ref(){let t=this.$refs.pop()||document.createElement("div");return t.style.cssText=l.cssText,t.dataset.mode="",t.dataset.id="",t.className="",t}get readys(){let{currentTime:t}=this.art,e=[];return this.filter("ready",t=>e.push(t)),this.filter("wait",i=>{t+.1>=i.time&&i.time>=t-.1&&e.push(i)}),e}get visibles(){let t=[],{clientWidth:e}=this.$player,i=this.getLeft(this.$player);return this.filter("emit",a=>{let n=a.$ref.offsetTop,o=this.getLeft(a.$ref)-i,s=a.$ref.clientHeight,r=a.$ref.clientWidth,l=o+r,d=l/a.$restTime,p={};p.top=n,p.left=o,p.height=s,p.width=r,p.right=e-l,p.speed=d,p.distance=l,p.time=a.$restTime,p.mode=a.mode,t.push(p)}),t}get speed(){return this.option.synchronousPlayback&&this.art.playbackRate?this.option.speed/Number(this.art.playbackRate):this.option.speed}async load(t){let{errorHandle:e}=this.utils,i=[],a=t||this.option.danmuku;try{"function"==typeof a?i=await a():a instanceof Promise?i=await a:"string"==typeof a?i=await (0,r.bilibiliDanmuParseFromUrl)(a):Array.isArray(a)&&(i=a),e(Array.isArray(i),"Danmuku need return an array as result"),void 0===t&&(this.reset(),this.queue=[],this.states={wait:[],ready:[],emit:[],stop:[]},this.$refs=[],this.$danmuku.textContent="");for(let t=0;tJSON.stringify(this.option[e])!==JSON.stringify(t[e]))||e)&&(this.option=Object.assign({},l.option,this.option,t),this.validator(this.option,l.scheme),this.option.mode=i(this.option.mode,0,2),this.option.speed=i(this.option.speed,1,10),this.option.opacity=i(this.option.opacity,0,1),this.option.lockTime=i(this.option.lockTime,1,60),this.option.maxLength=i(this.option.maxLength,1,1e3),this.option.mount=this.option.mount||a,t.fontSize&&this.reset(),this.option.visible?this.show():this.hide(),this.art.emit("artplayerPluginDanmuku:config",this.option)),this}getLeft(t){let e=t.getBoundingClientRect();return this.isRotate?e.top:e.left}postMessage(t={}){return new Promise(e=>{t.id=Date.now(),this.worker.postMessage(t),this.worker.onmessage=i=>{let{data:a}=i;a.id===t.id&&e(a)}})}filter(t,e){let i=this.states[t]||[];for(let t=0;te!==t),t.$state=e,t.$ref&&(t.$ref.dataset.state=e),this.states[e].push(t)}makeWait(t){this.setState(t,"wait"),t.$ref&&(t.$ref.style.cssText=l.cssText,t.$ref.style.visibility="hidden",t.$ref.style.marginLeft="0px",t.$ref.style.transform="translateX(0px)",t.$ref.style.transition="transform 0s linear 0s",this.$refs.push(t.$ref),t.$ref=null)}update(){let{setStyles:t}=this.utils;return this.timer=window.requestAnimationFrame(async()=>{if(this.art.playing&&!this.isHide){this.filter("emit",t=>{let e=(Date.now()-t.$lastStartTime)/1e3;t.$restTime-=e,t.$lastStartTime=Date.now(),t.$restTime<=0&&this.makeWait(t)});let e=this.readys;for(let i=0;i{0===e.mode&&(e.$ref.style.left=`${t}px`)}),this.filter("emit",e=>{if(e.$lastStartTime=Date.now(),0===e.mode){let i=t+e.$ref.clientWidth;e.$ref.style.left=`${t}px`,e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition=`transform ${e.$restTime}s linear 0s`}})}continue(){let{clientWidth:t}=this.$player;return this.filter("stop",e=>{if(this.setState(e,"emit"),e.$lastStartTime=Date.now(),0===e.mode){let i=t+e.$ref.clientWidth;e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition=`transform ${e.$restTime}s linear 0s`}}),this}suspend(){let{clientWidth:t}=this.$player;return this.filter("emit",e=>{if(this.setState(e,"stop"),0===e.mode){let i=t-(this.getLeft(e.$ref)-this.getLeft(this.$player));e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition="transform 0s linear 0s"}}),this}stop(){return this.isStop=!0,this.suspend(),window.cancelAnimationFrame(this.timer),this.art.emit("artplayerPluginDanmuku:stop"),this}start(){return this.isStop=!1,this.continue(),this.update(),this.art.emit("artplayerPluginDanmuku:start"),this}reset(){return this.queue.forEach(t=>this.makeWait(t)),this.art.emit("artplayerPluginDanmuku:reset"),this}show(){return this.isHide=!1,this.$danmuku.style.opacity=1,this.option.visible=!0,this.art.emit("artplayerPluginDanmuku:show"),this}hide(){return this.isHide=!0,this.$danmuku.style.opacity=0,this.option.visible=!1,this.art.emit("artplayerPluginDanmuku:hide"),this}destroy(){this.stop(),this.worker.terminate(),this.art.off("video:play",this.start),this.art.off("video:playing",this.start),this.art.off("video:pause",this.stop),this.art.off("video:waiting",this.stop),this.art.off("resize",this.reset),this.art.off("destroy",this.destroy),this.art.emit("artplayerPluginDanmuku:destroy")}}i.default=l},{"bundle-text:./worker":"cK8sH","./bilibili":"jICn4","@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],cK8sH:[function(t,e,i,a){e.exports='!function(e,t,i,o,n,r,f,l){var d="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},u="function"==typeof d[o]&&d[o],p=u.i||{},h=u.cache||{},s="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function a(t,i){if(!h[t]){if(!e[t]){if(n[t])return n[t];var r="function"==typeof d[o]&&d[o];if(!i&&r)return r(t,!0);if(u)return u(t,!0);if(s&&"string"==typeof t)return s(t);var f=Error("Cannot find module \'"+t+"\'");throw f.code="MODULE_NOT_FOUND",f}p.resolve=function(i){var o=e[t][1][i];return null!=o?o:i},p.cache={};var l=h[t]=new a.Module(t);e[t][0].call(l.exports,p,l,l.exports,d)}return h[t].exports;function p(e){var t=p.resolve(e);return!1===t?{}:a(t)}}a.isParcelRequire=!0,a.Module=function(e){this.id=e,this.bundle=a,this.require=s,this.exports={}},a.modules=e,a.cache=h,a.parent=u,a.distDir=void 0,a.publicUrl=void 0,a.devServer=void 0,a.i=p,a.register=function(t,i){e[t]=[function(e,t){t.exports=i},{}]},Object.defineProperty(a,"root",{get:function(){return d[o]}}),d[o]=a;for(var c=0;ct.mode===e.mode&&t.top<=l).sort((e,t)=>e.top-t.top);if(0===d.length)if(2===e.mode)return l-e.height;else return r;if(d.unshift({type:"top",top:0,left:0,right:0,height:r,width:i,speed:0,distance:i}),d.push({type:"bottom",top:l,left:0,right:0,height:n,width:i,speed:0,distance:i}),2===e.mode)for(let t=d.length-2;t>=0;t-=1){let i=d[t],o=d[t+1],n=i.top+i.height;if(o.top-n>=e.height)return o.top-e.height}else for(let t=1;t=e.height)return n}let u=[];for(let e=1;et.every(t=>!(it.time))));return t&&t[0]?t[0].top:void 0}case 1:case 2:return}else{switch(e.mode){case 0:u.sort((e,t)=>{let i=Math.min(...t.map(e=>e.right)),o=Math.min(...e.map(e=>e.right));return i*t.length-o*e.length});break;case 1:case 2:u.sort((e,t)=>{let i=Math.max(...t.map(e=>e.width));return Math.max(...e.map(e=>e.width))*e.length-i*t.length})}return u[0][0].top}}onmessage=e=>{let{data:t}=e;t.id&&t.type&&globalThis.postMessage({result:(0,({getDanmuTop:n})[t.type])(t),id:t.id})}},{}]},["fpBtQ"],"fpBtQ","parcelRequire4dc0",{});'},{}],jICn4:[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");function o(t){switch(t){case 1:case 2:case 3:default:return 0;case 4:return 2;case 5:return 1}}function s(t){return"string"!=typeof t?[]:Array.from(t.matchAll(/]*?p="(?

[^"]+)"[^>]*>(?.*?)<\/d>/gs)).map(t=>{let e=t.groups.p.split(",");return e.length>=8?{text:t.groups.text.trim().replaceAll(""",'"').replaceAll("'","'").replaceAll("<","<").replaceAll(">",">").replaceAll("&","&"),time:Number(e[0]),mode:o(Number(e[1])),fontSize:Number(e[2]),color:`#${Number(e[3]).toString(16)}`,timestamp:Number(e[4]),pool:Number(e[5]),userID:e[6],rowID:Number(e[7])}:null}).filter(Boolean)}function r({data:t}){let{xml:e,id:i}=t;i&&e&&globalThis.postMessage({danmus:s(e),id:i})}function l(t){return new Promise(async e=>{let i=await fetch(t),a=await i.text();try{let t=function(){let t=new Blob([` ${o.toString()} ${s.toString()} onmessage = ${r.toString()} `],{type:"application/javascript"});return new Worker(URL.createObjectURL(t))}();t.onmessage=i=>{let{danmus:a,id:n}=i.data;n&&a&&(e(a),t.terminate())},t.postMessage({xml:a,id:Date.now()})}catch(t){console.error("Error parsing Bilibili Danmu:",t),e(s(a))}})}n.defineInteropFlag(i),n.export(i,"bilibiliDanmuParseFromUrl",()=>l)},{"@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],"6ykb1":[function(t,e,i,a){i.interopDefault=function(t){return t&&t.__esModule?t:{default:t}},i.defineInteropFlag=function(t){Object.defineProperty(t,"__esModule",{value:!0})},i.exportAll=function(t,e){return Object.keys(t).forEach(function(i){"default"===i||"__esModule"===i||Object.prototype.hasOwnProperty.call(e,i)||Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[i]}})}),e},i.export=function(t,e,i){Object.defineProperty(t,e,{enumerable:!0,get:i})}},{}],hjtgU:[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i),n.export(i,"default",()=>s);let o={map:(t,e,i,a,n)=>(t-e)*(n-a)/(i-e)+a,range(t,e,i){let a=Math.round(t/i)*i;return Array.from({length:Math.floor((e-t)/i)},(t,e)=>e*i+a)}};function s(t,e,i){let{query:a}=t.constructor.utils;t.controls.add({name:"heatmap",position:"top",html:"",style:{position:"absolute",top:"-100px",left:"0px",right:"0px",height:"100px",width:"100%",pointerEvents:"none"},mounted(n){let s=null,r=null;function l(d=[]){if(s=null,r=null,n.innerHTML="",!t.duration||t.option.isLive)return;let p={w:n.offsetWidth,h:n.offsetHeight},u={xMin:0,xMax:p.w,yMin:0,yMax:128,scale:.25,opacity:.2,minHeight:Math.floor(.05*p.h),sampling:Math.floor(p.w/100),smoothing:.2,flattening:.2};"object"==typeof i&&Object.assign(u,i);let h=[];if(Array.isArray(d)&&d.length)h=[...d];else{let i=t.duration/p.w;for(let t=0;t<=p.w;t+=u.sampling){let a=e.queue.filter(({time:e})=>e>t*i&&e<=(t+u.sampling)*i).length;h.push([t,a])}}if(0===h.length)return;let m=h[h.length-1],c=m[0],f=m[1];c!==p.w&&h.push([p.w,f]);let g=h.map(t=>t[1]),y=(Math.min(...g)+Math.max(...g))/2;for(let t=0;ty?1+u.scale:1-u.scale)+u.minHeight}let v=(t,e,i,a)=>{let n=function(t,e){let i=e[0]-t[0],a=e[1]-t[1];return{length:Math.sqrt(i**2+a**2),angle:Math.atan2(a,i)}}(e||t,i||t),s=o.map(Math.cos(n.angle)*u.flattening,0,1,1,0),r=n.angle*s+(a?Math.PI:0),l=n.length*u.smoothing;return[t[0]+Math.cos(r)*l,t[1]+Math.sin(r)*l]},x=h.map(t=>[o.map(t[0],u.xMin,u.xMax,0,p.w),o.map(t[1],u.yMin,u.yMax,p.h,0)]).reduce((t,e,i,a)=>0===i?`M ${a[a.length-1][0]},${p.h} L ${e[0]},${p.h} L ${e[0]},${e[1]}`:`${t} ${((t,e,i)=>{let a=v(i[e-1],i[e-2],t),n=v(t,i[e-1],i[e+1],!0),o=e===i.length-1?" z":"";return`C ${a[0]},${a[1]} ${n[0]},${n[1]} ${t[0]},${t[1]}${o}`})(e,i,a)}`,"");n.innerHTML=``,s=a("#heatmap-start",n),r=a("#heatmap-stop",n),s.setAttribute("offset",`${100*t.played}%`),r.setAttribute("offset",`${100*t.played}%`)}t.on("video:timeupdate",()=>{s&&r&&(s.setAttribute("offset",`${100*t.played}%`),r.setAttribute("offset",`${100*t.played}%`))}),t.on("setBar",(t,e)=>{s&&r&&"played"===t&&(s.setAttribute("offset",`${100*e}%`),r.setAttribute("offset",`${100*e}%`))}),t.on("ready",()=>l()),t.on("resize",()=>l()),t.on("artplayerPluginDanmuku:loaded",()=>l()),t.on("artplayerPluginDanmuku:points",t=>l(t))}})}},{"@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],ho690:[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i);var o=t("bundle-text:./img/check_off.svg"),s=n.interopDefault(o),r=t("bundle-text:./img/check_on.svg"),l=n.interopDefault(r),d=t("bundle-text:./img/config.svg"),p=n.interopDefault(d),u=t("bundle-text:./img/mode_0_off.svg"),h=n.interopDefault(u),m=t("bundle-text:./img/mode_0_on.svg"),c=n.interopDefault(m),f=t("bundle-text:./img/mode_1_off.svg"),g=n.interopDefault(f),y=t("bundle-text:./img/mode_1_on.svg"),v=n.interopDefault(y),x=t("bundle-text:./img/mode_2_off.svg"),k=n.interopDefault(x),b=t("bundle-text:./img/mode_2_on.svg"),$=n.interopDefault(b),w=t("bundle-text:./img/off.svg"),M=n.interopDefault(w),D=t("bundle-text:./img/on.svg"),S=n.interopDefault(D),E=t("bundle-text:./img/style.svg"),q=n.interopDefault(E),T=t("bundle-text:./style.less"),A=n.interopDefault(T);if(i.default=class{constructor(t,e){this.art=t,this.danmuku=e,this.utils=t.constructor.utils;let{setStyle:i}=this.utils,{$controlsCenter:a}=t.template;i(a,"display","flex"),this.template={$controlsCenter:a,$mount:a,$danmuku:null,$toggle:null,$config:null,$configPanel:null,$configModes:null,$style:null,$stylePanel:null,$styleModes:null,$colors:null,$opacitySlider:null,$opacityValue:null,$marginSlider:null,$marginValue:null,$fontSizeSlider:null,$fontSizeValue:null,$speedSlider:null,$speedValue:null,$input:null,$send:null},this.slider={opacity:null,margin:null,fontSize:null,speed:null},this.emitting=!1,this.isLock=!1,this.timer=null,this.createTemplate(),this.createSliders(),this.createEvents(),this.mount(this.option.mount),t.on("resize",()=>this.resize()),t.on("fullscreen",t=>this.onFullscreen(t)),t.on("fullscreenWeb",t=>this.onFullscreen(t)),t.proxy(this.template.$config,"mouseenter",()=>{this.onMouseEnter({$control:this.template.$config,$panel:this.template.$configPanel})}),t.proxy(this.template.$style,"mouseenter",()=>{this.onMouseEnter({$control:this.template.$style,$panel:this.template.$stylePanel})})}static get icons(){return{$on:S.default,$off:M.default,$config:p.default,$style:q.default,$mode_0_off:h.default,$mode_0_on:c.default,$mode_1_off:g.default,$mode_1_on:v.default,$mode_2_off:k.default,$mode_2_on:$.default,$check_on:l.default,$check_off:s.default}}get option(){return this.danmuku.option}get outside(){return this.template.$mount!==this.template.$controlsCenter}get TEMPLATE(){let{option:t}=this;return`

${S.default}${M.default}
${p.default}
\u{6309}\u{7C7B}\u{578B}\u{5C4F}\u{853D}
${h.default}${c.default}
\u{6EDA}\u{52A8}
${g.default}${v.default}
\u{9876}\u{90E8}
${k.default}${$.default}
\u{5E95}\u{90E8}
${l.default}${s.default} \u{9632}\u{6B62}\u{5F39}\u{5E55}\u{91CD}\u{53E0}
${l.default}${s.default} \u{540C}\u{6B65}\u{89C6}\u{9891}\u{901F}\u{5EA6}
\u{4E0D}\u{900F}\u{660E}\u{5EA6}
\u{672A}\u{77E5}
\u{663E}\u{793A}\u{533A}\u{57DF}
\u{672A}\u{77E5}
\u{5F39}\u{5E55}\u{5B57}\u{53F7}
\u{672A}\u{77E5}
\u{5F39}\u{5E55}\u{901F}\u{5EA6}
\u{672A}\u{77E5}
${q.default}
\u{6A21}\u{5F0F}
${c.default}
\u{6EDA}\u{52A8}
${v.default}
\u{9876}\u{90E8}
${$.default}
\u{5E95}\u{90E8}
\u{989C}\u{8272}
${this.COLOR.map(t=>`
`).join("")}
\u{53D1}\u{9001}
`}get OPACITY(){return{min:0,max:100,steps:[],...this.option.OPACITY}}get FONT_SIZE(){return{min:12,max:120,steps:[],...this.option.FONT_SIZE}}get MARGIN(){return{min:0,max:3,steps:[{name:"1/4",value:[10,"75%"]},{name:"半屏",value:[10,"50%"]},{name:"3/4",value:[10,"25%"]},{name:"满屏",value:[10,10]}],...this.option.MARGIN}}get SPEED(){return{min:0,max:4,steps:[{name:"极慢",value:10},{name:"较慢",value:7.5,hide:!0},{name:"适中",value:5},{name:"较快",value:2.5,hide:!0},{name:"极快",value:1}],...this.option.SPEED}}get COLOR(){return this.option.COLOR.length?this.option.COLOR:["#FE0302","#FF7204","#FFAA02","#FFD302","#FFFF00","#A0EE00","#00CD00","#019899","#4266BE","#89D5FF","#CC0273","#222222","#9B9B9B","#FFFFFF"]}query(t){let{query:e}=this.utils,{$danmuku:i}=this.template;return e(t,i)}append(t,e){let{append:i}=this.utils;[...t.children].includes(e)||i(t,e)}setData(t,e){let{$player:i}=this.art.template,{$mount:a}=this.template;i.dataset[t]=e,this.outside&&(a.dataset[t]=e)}createTemplate(){let{createElement:t,tooltip:e}=this.utils,i=t("div");i.className="artplayer-plugin-danmuku",i.innerHTML=this.TEMPLATE,this.template.$danmuku=i,this.template.$toggle=this.query(".apd-toggle"),this.template.$config=this.query(".apd-config"),this.template.$configPanel=this.query(".apd-config-panel"),this.template.$configModes=this.query(".apd-config-mode .apd-modes"),this.template.$style=this.query(".apd-style"),this.template.$stylePanel=this.query(".apd-style-panel"),this.template.$styleModes=this.query(".apd-style-mode .apd-modes"),this.template.$colors=this.query(".apd-colors"),this.template.$antiOverlap=this.query(".apd-anti-overlap"),this.template.$syncVideo=this.query(".apd-sync-video"),this.template.$opacitySlider=this.query(".apd-config-opacity .apd-slider"),this.template.$opacityValue=this.query(".apd-config-opacity .apd-value"),this.template.$marginSlider=this.query(".apd-config-margin .apd-slider"),this.template.$marginValue=this.query(".apd-config-margin .apd-value"),this.template.$fontSizeSlider=this.query(".apd-config-fontSize .apd-slider"),this.template.$fontSizeValue=this.query(".apd-config-fontSize .apd-value"),this.template.$speedSlider=this.query(".apd-config-speed .apd-slider"),this.template.$speedValue=this.query(".apd-config-speed .apd-value"),this.template.$input=this.query(".apd-input"),this.template.$send=this.query(".apd-send");let{$toggle:a}=this.template;this.art.on("artplayerPluginDanmuku:show",()=>{e(a,"关闭弹幕")}),this.art.on("artplayerPluginDanmuku:hide",()=>{e(a,"打开弹幕")})}createEvents(){let{$toggle:t,$configModes:e,$styleModes:i,$colors:a,$antiOverlap:n,$syncVideo:o,$send:s,$input:r}=this.template;this.art.proxy(t,"click",()=>{this.danmuku.config({visible:!this.option.visible}),this.reset()}),this.art.proxy(e,"click",t=>{let e=t.target.closest(".apd-mode");if(!e)return;let i=Number(e.dataset.mode);this.option.modes.includes(i)?this.danmuku.config({modes:this.option.modes.filter(t=>t!==i)}):this.danmuku.config({modes:[...this.option.modes,i]}),this.reset()}),this.art.proxy(n,"click",()=>{this.danmuku.config({antiOverlap:!this.option.antiOverlap}),this.reset()}),this.art.proxy(o,"click",()=>{this.danmuku.config({synchronousPlayback:!this.option.synchronousPlayback}),this.reset()}),this.art.proxy(i,"click",t=>{let e=t.target.closest(".apd-mode");if(!e)return;let i=Number(e.dataset.mode);this.danmuku.config({mode:i}),this.reset()}),this.art.proxy(a,"click",t=>{let e=t.target.closest(".apd-color");e&&(this.danmuku.config({color:e.dataset.color}),this.reset())}),this.art.proxy(s,"click",()=>this.emit()),this.art.proxy(r,"keypress",t=>{"Enter"===t.key&&(t.preventDefault(),this.emit())})}createSliders(){this.slider.opacity=this.createSlider({...this.OPACITY,container:this.template.$opacitySlider,findIndex:()=>Math.round(100*this.option.opacity),onChange:t=>{let{$opacityValue:e}=this.template;e.textContent=`${t}%`,this.danmuku.config({opacity:t/100})}}),this.slider.margin=this.createSlider({...this.MARGIN,container:this.template.$marginSlider,findIndex:()=>this.MARGIN.steps.findIndex(t=>t.value[0]===this.option.margin[0]&&t.value[1]===this.option.margin[1]),onChange:t=>{let e=this.MARGIN.steps[t];if(!e)return;let{$marginValue:i}=this.template;i.textContent=e.name,this.danmuku.config({margin:e.value})}}),this.slider.fontSize=this.createSlider({...this.FONT_SIZE,container:this.template.$fontSizeSlider,findIndex:()=>this.danmuku.fontSize,onChange:t=>{let{$fontSizeValue:e}=this.template;e.textContent=`${t}px`,t!==this.danmuku.fontSize&&this.danmuku.config({fontSize:t})}}),this.slider.speed=this.createSlider({...this.SPEED,container:this.template.$speedSlider,findIndex:()=>this.SPEED.steps.findIndex(t=>t.value===this.option.speed),onChange:t=>{let e=this.SPEED.steps[t];if(!e)return;let{$speedValue:i}=this.template;i.textContent=e.name,this.danmuku.config({speed:e.value})}})}createSlider({min:t,max:e,container:i,findIndex:a,onChange:n,steps:o=[]}){let{query:s,clamp:r,setStyle:l}=this.utils;l(i,"touch-action","none"),i.innerHTML=`
${o.map(()=>'
').join("")}
${o.map(t=>t.hide?"":`
${t.name}
`).join("")}
`;let d=s(".apd-slider-dot",i),p=s(".apd-slider-progress",i),u=!1;function h(i=a()){if(ie)return;let s=(i-t)/(e-t);d.style.left=`${100*s}%`,0===o.length&&(p.style.width=d.style.left),n(i)}function m(a){let{top:n,height:o,left:s,width:l}=i.getBoundingClientRect();this.art.isRotate?h(Math.round(r(a.clientY-n,0,o)/o*(e-t)+t)):h(Math.round(r(a.clientX-s,0,l)/l*(e-t)+t))}return this.art.proxy(i,"click",t=>{m.call(this,t)}),this.art.proxy(i,"pointerdown",t=>{u=0===t.button}),this.art.proxy(document,"pointermove",t=>{u&&m.call(this,t)}),this.art.proxy(document,"pointerup",t=>{u&&(u=!1,m.call(this,t))}),{reset:h}}onFullscreen(t){let{$danmuku:e,$controlsCenter:i,$mount:a}=this.template;this.outside?t?this.append(i,e):this.append(a,e):this.append(i,e)}onMouseEnter({$control:t,$panel:e}){let{$player:i}=this.art.template,a=t.getBoundingClientRect(),n=e.getBoundingClientRect(),o=i.getBoundingClientRect(),s=n.width/2-a.width/2,r=o.left-(a.left-s),l=a.right+s-o.right;r>0?e.style.left=`${-s+r}px`:l>0?e.style.left=`${-s-l}px`:e.style.left=`${-s}px`}async emit(){let{$input:t}=this.template,e=t.value.trim();if(!e.length||this.isLock||this.emitting)return;let i={text:e,mode:this.option.mode,color:this.option.color,time:this.art.currentTime};try{this.emitting=!0;let e=await this.option.beforeEmit(i);if(this.emitting=!1,!0!==e)return;i.border=!0,delete i.time,this.danmuku.emit(i),t.value="",this.lock()}catch(t){console.error("Error emitting danmuku:",t),this.emitting=!1}}lock(){let{addClass:t}=this.utils,{$send:e}=this.template;this.isLock=!0;let i=this.option.lockTime;e.textContent=i,t(e,"apd-lock");let a=()=>{this.timer=setTimeout(()=>{0===i?this.unlock():(e.textContent=i-=1,a())},1e3)};a()}unlock(){let{removeClass:t}=this.utils,{$send:e}=this.template;clearTimeout(this.timer),this.isLock=!1,e.textContent="发送",t(e,"apd-lock")}resize(){if(this.outside||this.art.fullscreen||this.art.fullscreenWeb)return;let{$player:t,$controlsCenter:e}=this.art.template,{$danmuku:i}=this.template;this.art.widtht.dataset.color===this.option.color.toUpperCase());n&&t(n,"apd-active"),e(i,this.option.visible?"关闭弹幕":"打开弹幕"),this.resize()}mount(t){let{errorHandle:e}=this.utils,i="string"==typeof t?document.querySelector(t):t;e(i,`Can not find the mount point: ${t}`),this.append(i,this.template.$danmuku),this.template.$mount=i,this.reset()}},"undefined"!=typeof document){let t="artplayer-plugin-danmuku",e=document.getElementById(t);e||((e=document.createElement("style")).id=t,"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{document.head.appendChild(e)}):(document.head||document.documentElement).appendChild(e)),e.textContent=A.default}},{"bundle-text:./img/check_off.svg":"gf3jX","bundle-text:./img/check_on.svg":"9EUUq","bundle-text:./img/config.svg":"jqR46","bundle-text:./img/mode_0_off.svg":"fFoDs","bundle-text:./img/mode_0_on.svg":"hkEt9","bundle-text:./img/mode_1_off.svg":"3n5ax","bundle-text:./img/mode_1_on.svg":"hJjtU","bundle-text:./img/mode_2_off.svg":"dWW5U","bundle-text:./img/mode_2_on.svg":"1QGuJ","bundle-text:./img/off.svg":"bMJJY","bundle-text:./img/on.svg":"2h5UL","bundle-text:./img/style.svg":"9tkqu","bundle-text:./style.less":"e4L1w","@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],gf3jX:[function(t,e,i,a){e.exports=''},{}],"9EUUq":[function(t,e,i,a){e.exports=''},{}],jqR46:[function(t,e,i,a){e.exports=''},{}],fFoDs:[function(t,e,i,a){e.exports=''},{}],hkEt9:[function(t,e,i,a){e.exports=''},{}],"3n5ax":[function(t,e,i,a){e.exports=''},{}],hJjtU:[function(t,e,i,a){e.exports=''},{}],dWW5U:[function(t,e,i,a){e.exports=''},{}],"1QGuJ":[function(t,e,i,a){e.exports=''},{}],bMJJY:[function(t,e,i,a){e.exports=''},{}],"2h5UL":[function(t,e,i,a){e.exports=''},{}],"9tkqu":[function(t,e,i,a){e.exports=''},{}],e4L1w:[function(t,e,i,a){e.exports='.artplayer-plugin-danmuku{z-index:99;color:#fff;flex-shrink:0;justify-content:center;align-items:center;gap:10px;width:100%;height:32px;font-size:12px;font-weight:300;display:flex;position:relative}.artplayer-plugin-danmuku .apd-icon{cursor:pointer;opacity:.75;fill:#fff;transition:all .2s}.artplayer-plugin-danmuku .apd-icon:hover{opacity:1}.artplayer-plugin-danmuku .apd-config{display:flex;position:relative}.artplayer-plugin-danmuku .apd-config .apd-config-panel{opacity:0;pointer-events:none;width:320px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-config .apd-config-panel .apd-config-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-config:hover .apd-config-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-config-mode,.artplayer-plugin-danmuku .apd-config-slider,.artplayer-plugin-danmuku .apd-config-other,.artplayer-plugin-danmuku .apd-style-mode{margin-bottom:15px}.artplayer-plugin-danmuku .apd-modes{align-items:center;gap:20px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-modes .apd-mode{cursor:pointer;text-align:center}.artplayer-plugin-danmuku .apd-modes .apd-mode:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-config-slider{align-items:center;gap:12px;display:flex}.artplayer-plugin-danmuku .apd-config-slider .apd-value{text-align:right;width:32px}.artplayer-plugin-danmuku .apd-slider{cursor:pointer;flex:1;justify-content:center;align-items:center;height:20px;display:flex;position:relative}.artplayer-plugin-danmuku .apd-slider .apd-slider-line{background-color:#ffffff40;border-radius:3px;width:100%;height:2px;position:relative;overflow:hidden}.artplayer-plugin-danmuku .apd-slider .apd-slider-points{justify-content:space-between;align-items:center;display:flex;position:absolute;inset:0}.artplayer-plugin-danmuku .apd-slider .apd-slider-points .apd-slider-point{background-color:#ffffff80;border-radius:50%;width:2px;height:2px}.artplayer-plugin-danmuku .apd-slider .apd-slider-progress{background-color:#00a1d6;width:0%;height:100%}.artplayer-plugin-danmuku .apd-slider .apd-slider-dot{background-color:#00a1d6;border-radius:50%;width:12px;height:12px;position:absolute;left:0%;transform:translate(-6px)}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps{color:#777;justify-content:space-between;align-items:center;width:calc(100% + 32px);display:flex;position:absolute;bottom:-12px}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps .apd-slider-step{text-align:center;flex-shrink:0;width:36px;scale:.95}.artplayer-plugin-danmuku .apd-config-other{align-items:center;gap:20px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-check-off,.artplayer-plugin-danmuku .apd-config-other .apd-check-on{width:16px;height:16px}.artplayer-plugin-danmuku .apd-config-other .apd-other{cursor:pointer;align-items:center;gap:2px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-other:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-emitter{background-color:#ffffff40;border-radius:5px;flex:1;align-items:center;height:100%;display:flex}.artplayer-plugin-danmuku .apd-style{justify-content:center;align-items:center;display:flex;position:relative}.artplayer-plugin-danmuku .apd-style .apd-style-panel{opacity:0;pointer-events:none;width:200px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-style .apd-style-panel .apd-style-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-style:hover .apd-style-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-colors{flex-wrap:wrap;gap:8px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-colors .apd-color{cursor:pointer;border-radius:2px;width:16px;height:16px}.artplayer-plugin-danmuku .apd-colors .apd-color.apd-active{border:1px solid #000;box-shadow:0 0 0 1px #fff}.artplayer-plugin-danmuku .apd-input{color:#fff;background-color:#0000;border:none;outline:none;flex:1;width:auto;min-width:0;height:100%;line-height:1}.artplayer-plugin-danmuku .apd-input::placeholder{color:#ffffff80}.artplayer-plugin-danmuku .apd-send{cursor:pointer;width:60px;height:100%;text-shadow:none;background-color:#00a1d6;border-top-right-radius:5px;border-bottom-right-radius:5px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.artplayer-plugin-danmuku .apd-send.apd-lock{cursor:not-allowed;color:#666;background-color:#e7e7e7}.art-controls-center .apd-emitter{flex:none;width:260px}.art-fullscreen .artplayer-plugin-danmuku,.art-fullscreen-web .artplayer-plugin-danmuku{gap:16px;height:38px}.art-fullscreen .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen-web .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-on,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-on{width:28px;height:28px}.art-fullscreen .artplayer-plugin-danmuku .apd-emitter,.art-fullscreen-web .artplayer-plugin-danmuku .apd-emitter{flex:none;width:400px}.art-video-player>.artplayer-plugin-danmuku{padding:0 10px;position:absolute;bottom:-40px;left:0;right:0}.art-video-player:has(>.artplayer-plugin-danmuku){margin-bottom:40px}[data-danmuku-emitter=false] .apd-emitter{display:none!important}[data-danmuku-emitter=false] .art-controls-center .artplayer-plugin-danmuku{justify-content:flex-end;gap:18px}[data-danmuku-emitter=false].art-fullscreen .art-controls-center .artplayer-plugin-danmuku,[data-danmuku-emitter=false].art-fullscreen-web .art-controls-center .artplayer-plugin-danmuku{gap:24px}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-icon{fill:#333}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-emitter{background-color:#f1f2f3}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input{color:#000}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input::placeholder{color:#0000004d}[data-danmuku-visible=false] .apd-toggle-off{display:block}[data-danmuku-visible=false] .apd-toggle-on,[data-danmuku-visible=true] .apd-toggle-off{display:none}[data-danmuku-visible=true] .apd-toggle-on{display:block}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-on{display:none}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-off,[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-on{display:block}[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-off,[data-danmuku-sync-video=false] .apd-sync-video .apd-check-on{display:none}[data-danmuku-sync-video=false] .apd-sync-video .apd-check-off,[data-danmuku-sync-video=true] .apd-sync-video .apd-check-on{display:block}[data-danmuku-sync-video=true] .apd-sync-video .apd-check-off{display:none}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-off{display:block}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-on{display:none}[data-danmuku-mode0=false] .art-danmuku [data-mode="0"]{opacity:0!important}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-off{display:none}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-on{display:block}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"]{color:#00a1d6}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"] path{fill:#00a1d6}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-off{display:block}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-on{display:none}[data-danmuku-mode1=false] .art-danmuku [data-mode="1"]{opacity:0!important}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-off{display:none}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-on{display:block}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"]{color:#00a1d6}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"] path{fill:#00a1d6}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-off{display:block}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-on{display:none}[data-danmuku-mode2=false] .art-danmuku [data-mode="2"]{opacity:0!important}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-off{display:none}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-on{display:block}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"]{color:#00a1d6}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"] path{fill:#00a1d6}'},{}]},["666Ok"],"666Ok","parcelRequire4dc0",{}); \ No newline at end of file diff --git a/docs/compiled/artplayer-plugin-danmuku.legacy.js b/docs/compiled/artplayer-plugin-danmuku.legacy.js index ca721b8d1..71da36514 100644 --- a/docs/compiled/artplayer-plugin-danmuku.legacy.js +++ b/docs/compiled/artplayer-plugin-danmuku.legacy.js @@ -5,4 +5,4 @@ * (c) 2017-2025 Harvey Zack * Released under the MIT License. */ -!function(e,t,n,r,a,i,o,s){var l="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},u="function"==typeof l[r]&&l[r],c=u.i||{},d=u.cache||{},p="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function f(t,n){if(!d[t]){if(!e[t]){if(a[t])return a[t];var i="function"==typeof l[r]&&l[r];if(!n&&i)return i(t,!0);if(u)return u(t,!0);if(p&&"string"==typeof t)return p(t);var o=Error("Cannot find module '"+t+"'");throw o.code="MODULE_NOT_FOUND",o}c.resolve=function(n){var r=e[t][1][n];return null!=r?r:n},c.cache={};var s=d[t]=new f.Module(t);e[t][0].call(s.exports,c,s,s.exports,l)}return d[t].exports;function c(e){var t=c.resolve(e);return!1===t?{}:f(t)}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.require=p,this.exports={}},f.modules=e,f.cache=d,f.parent=u,f.distDir=void 0,f.publicUrl=void 0,f.devServer=void 0,f.i=c,f.register=function(t,n){e[t]=[function(e,t){t.exports=n},{}]},Object.defineProperty(f,"root",{get:function(){return l[r]}}),l[r]=f;for(var h=0;h=n.time&&n.time>=e-.1&&t.push(n)}),t}},{key:"visibles",get:function(){var e=this,t=[],n=this.$player.clientWidth,r=this.getLeft(this.$player);return this.filter("emit",function(a){var i=a.$ref.offsetTop,o=e.getLeft(a.$ref)-r,s=a.$ref.clientHeight,l=a.$ref.clientWidth,u=o+l,c=u/a.$restTime,d={};d.top=i,d.left=o,d.height=s,d.width=l,d.right=n-u,d.speed=c,d.distance=u,d.time=a.$restTime,d.mode=a.mode,t.push(d)}),t}},{key:"speed",get:function(){return this.option.synchronousPlayback&&this.art.playbackRate?this.option.speed/Number(this.art.playbackRate):this.option.speed}},{key:"load",value:function(e){return(0,i._)(function(){var t,n,r,a,i,o;return(0,c._)(this,function(s){switch(s.label){case 0:t=this.utils.errorHandle,n=[],r=e||this.option.danmuku,s.label=1;case 1:if(s.trys.push([1,13,,14]),"function"!=typeof r)return[3,3];return[4,r()];case 2:case 4:case 6:return n=s.sent(),[3,8];case 3:if(!(r instanceof Promise))return[3,5];return[4,r];case 5:if("string"!=typeof r)return[3,7];return[4,(0,f.bilibiliDanmuParseFromUrl)(r)];case 7:Array.isArray(r)&&(n=r),s.label=8;case 8:t(Array.isArray(n),"Danmuku need return an array as result"),void 0===e&&(this.reset(),this.queue=[],this.states={wait:[],ready:[],emit:[],stop:[]},this.$refs=[],this.$danmuku.textContent=""),a=0,s.label=9;case 9:if(!(a1&&void 0!==arguments[1]&&arguments[1],a=this.utils.clamp,i=this.art.template.$controlsCenter;return(Object.keys(t).some(function(e){return JSON.stringify(n.option[e])!==JSON.stringify(t[e])})||r)&&(this.option=Object.assign({},e.option,this.option,t),this.validator(this.option,e.scheme),this.option.mode=a(this.option.mode,0,2),this.option.speed=a(this.option.speed,1,10),this.option.opacity=a(this.option.opacity,0,1),this.option.lockTime=a(this.option.lockTime,1,60),this.option.maxLength=a(this.option.maxLength,1,1e3),this.option.mount=this.option.mount||i,t.fontSize&&this.reset(),this.option.visible?this.show():this.hide(),this.art.emit("artplayerPluginDanmuku:config",this.option)),this}},{key:"getLeft",value:function(e){var t=e.getBoundingClientRect();return this.isRotate?t.top:t.left}},{key:"postMessage",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new Promise(function(n){t.id=Date.now(),e.worker.postMessage(t),e.worker.onmessage=function(e){var r=e.data;r.id===t.id&&n(r)}})}},{key:"filter",value:function(e,t){for(var n=this.states[e]||[],r=0;rt.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,r=Object.getOwnPropertySymbols(e);at.indexOf(r[a])&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]]);return n}function c(e,t,n,r){var a,o=arguments.length,s=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(("undefined"==typeof Reflect?"undefined":(0,i._)(Reflect))==="object"&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var l=e.length-1;l>=0;l--)(a=e[l])&&(s=(o<3?a(s):o>3?a(t,n,s):a(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}function d(e,t){return function(n,r){t(n,r,e)}}function p(e,t,n,r,a,o){function s(e){if(void 0!==e&&"function"!=typeof e)throw TypeError("Function expected");return e}for(var l,u=r.kind,c="getter"===u?"get":"setter"===u?"set":"value",d=!t&&e?r.static?e:e.prototype:null,p=t||(d?Object.getOwnPropertyDescriptor(d,r.name):{}),f=!1,h=n.length-1;h>=0;h--){var m={};for(var y in r)m[y]="access"===y?{}:r[y];for(var y in r.access)m.access[y]=r.access[y];m.addInitializer=function(e){if(f)throw TypeError("Cannot add initializers after decoration has completed");o.push(s(e||null))};var g=(0,n[h])("accessor"===u?{get:p.get,set:p.set}:p[c],m);if("accessor"===u){if(void 0===g)continue;if(null===g||(void 0===g?"undefined":(0,i._)(g))!=="object")throw TypeError("Object expected");(l=s(g.get))&&(p.get=l),(l=s(g.set))&&(p.set=l),(l=s(g.init))&&a.unshift(l)}else(l=s(g))&&("field"===u?a.unshift(l):p[c]=l)}d&&Object.defineProperty(d,r.name,p),f=!0}function f(e,t,n){for(var r=arguments.length>2,a=0;a0&&a[a.length-1])&&(6===u[0]||2===u[0])){i=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function k(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,a,i=n.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)o.push(r.value)}catch(e){a={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(a)throw a.error}}return o}function w(){for(var e=[],t=0;t1||s(e,t)})},t&&(r[e]=t(r[e])))}function s(e,t){try{var n;(n=a[e](t)).value instanceof S?Promise.resolve(n.value.v).then(l,u):c(i[0][2],n)}catch(e){c(i[0][3],e)}}function l(e){s("next",e)}function u(e){s("throw",e)}function c(e,t){e(t),i.shift(),i.length&&s(i[0][0],i[0][1])}}function M(e){var t,n;return t={},r("next"),r("throw",function(e){throw e}),r("return"),t[Symbol.iterator]=function(){return this},t;function r(r,a){t[r]=e[r]?function(t){return(n=!n)?{value:S(e[r](t)),done:!1}:a?a(t):t}:a}}function P(e){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=x(e),t={},r("next"),r("throw"),r("return"),t[Symbol.asyncIterator]=function(){return this},t);function r(n){t[n]=e[n]&&function(t){return new Promise(function(r,a){var i,o,s;i=r,o=a,s=(t=e[n](t)).done,Promise.resolve(t.value).then(function(e){i({value:e,done:s})},o)})}}}function D(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var E=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},T=function(e){return(T=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t})(e)};function A(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=T(e),r=0;r=0;d-=1){var l=s[d],p=s[d+1],h=l.top+l.height;if(p.top-h>=t.height)return p.top-t.height}else for(var m=1;m=t.height)return v}for(var y=[],_=1;_e.time))})});return A&&A[0]?A[0].top:void 0;case 1:case 2:return}else{switch(t.mode){case 0:y.sort(function(e,t){var r,n,o=(r=Math).min.apply(r,(0,i._)(t.map(function(e){return e.right}))),f=(n=Math).min.apply(n,(0,i._)(e.map(function(e){return e.right})));return o*t.length-f*e.length});break;case 1:case 2:y.sort(function(e,t){var r,n,o=(r=Math).max.apply(r,(0,i._)(t.map(function(e){return e.width})));return(n=Math).max.apply(n,(0,i._)(e.map(function(e){return e.width})))*e.length-o*t.length})}return y[0][0].top}}onmessage=function(e){var t=e.data;t.id&&t.type&&globalThis.postMessage({result:(0,({getDanmuTop:o})[t.type])(t),id:t.id})}},{"@swc/helpers/cjs/_to_consumable_array.cjs":"i81N6"}],i81N6:[function(e,t,r,n){"use strict";var i=e("d402183024004bc7"),o=e("3209e2b12672cd18"),f=e("fc58adb8f1bff142"),u=e("5e213dc122a10171");r._=function(e){return i._(e)||o._(e)||u._(e)||f._()}},{d402183024004bc7:"hfQG0","3209e2b12672cd18":"fQrlQ",fc58adb8f1bff142:"fWabh","5e213dc122a10171":"fh7mx"}],hfQG0:[function(e,t,r,n){"use strict";var i=e("5bd5b10bf87fc8e");r._=function(e){if(Array.isArray(e))return i._(e)}},{"5bd5b10bf87fc8e":"1WOAB"}],"1WOAB":[function(e,t,r,n){"use strict";r._=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r]*?p="(?

[^"]+)"[^>]*>(?.*?)<\\/d>',"gs");return Array.from(e.matchAll(t)).map(function(e){var t=e.groups.p.split(",");return t.length>=8?{text:e.groups.text.trim().replaceAll(""",'"').replaceAll("'","'").replaceAll("<","<").replaceAll(">",">").replaceAll("&","&"),time:Number(t[0]),mode:s(Number(t[1])),fontSize:Number(t[2]),color:"#".concat(Number(t[3]).toString(16)),timestamp:Number(t[4]),pool:Number(t[5]),userID:t[6],rowID:Number(t[7])}:null}).filter(Boolean)}function u(e){var t=e.data,n=t.xml,r=t.id;r&&n&&globalThis.postMessage({danmus:l(n),id:r})}function c(e){return new Promise(function(t){return(0,i._)(function(){var n,r;return(0,o._)(this,function(a){switch(a.label){case 0:return[4,fetch(e)];case 1:return[4,a.sent().text()];case 2:n=a.sent();try{var i;i=new Blob(["\n ".concat(s.toString(),"\n ").concat(l.toString(),"\n onmessage = ").concat(u.toString(),"\n ")],{type:"application/javascript"}),(r=new Worker(URL.createObjectURL(i))).onmessage=function(e){var n=e.data,a=n.danmus;n.id&&a&&(t(a),r.terminate())},r.postMessage({xml:n,id:Date.now()})}catch(e){console.error("Error parsing Bilibili Danmu:",e),t(l(n))}return[2]}})})()})}},{"@swc/helpers/cjs/_async_to_generator.cjs":"cZn0e","@swc/helpers/cjs/_ts_generator.cjs":"eltGh","@parcel/transformer-js/src/esmodule-helpers.js":"qpMMf"}],hLPK6:[function(e,t,n,r){var a=e("@parcel/transformer-js/src/esmodule-helpers.js");a.defineInteropFlag(n),a.export(n,"default",function(){return l});var i=e("@swc/helpers/cjs/_to_consumable_array.cjs"),o=e("@swc/helpers/cjs/_type_of.cjs"),s=function(e,t,n,r,a){return(e-t)*(a-r)/(n-t)+r};function l(e,t,n){var r=e.constructor.utils.query;e.controls.add({name:"heatmap",position:"top",html:"",style:{position:"absolute",top:"-100px",left:"0px",right:"0px",height:"100px",width:"100%",pointerEvents:"none"},mounted:function(a){var l=null,u=null;function c(){var c,d,p=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(l=null,u=null,a.innerHTML="",e.duration&&!e.option.isLive){var f={w:a.offsetWidth,h:a.offsetHeight},h={xMin:0,xMax:f.w,yMin:0,yMax:128,scale:.25,opacity:.2,minHeight:Math.floor(.05*f.h),sampling:Math.floor(f.w/100),smoothing:.2,flattening:.2};(void 0===n?"undefined":(0,o._)(n))==="object"&&Object.assign(h,n);var m=[];if(Array.isArray(p)&&p.length)m=(0,i._)(p);else for(var y=function(e){var n=t.queue.filter(function(t){var n=t.time;return n>e*g&&n<=(e+h.sampling)*g}).length;m.push([e,n])},g=e.duration/f.w,v=0;v<=f.w;v+=h.sampling)y(v);if(0!==m.length){var b=m[m.length-1],_=b[0],x=b[1];_!==f.w&&m.push([f.w,x]);for(var k=m.map(function(e){return e[1]}),w=((c=Math).min.apply(c,(0,i._)(k))+(d=Math).max.apply(d,(0,i._)(k)))/2,j=0;jw?1+h.scale:1-h.scale)+h.minHeight}var O=function(e,t,n,r){var a,i,o=t||e,l=n||e,u={length:Math.sqrt(Math.pow(a=l[0]-o[0],2)+Math.pow(i=l[1]-o[1],2)),angle:Math.atan2(i,a)},c=s(Math.cos(u.angle)*h.flattening,0,1,1,0),d=u.angle*c+(r?Math.PI:0),p=u.length*h.smoothing;return[e[0]+Math.cos(d)*p,e[1]+Math.sin(d)*p]},M=function(e,t,n){var r=O(n[t-1],n[t-2],e),a=O(e,n[t-1],n[t+1],!0),i=t===n.length-1?" z":"";return"C ".concat(r[0],",").concat(r[1]," ").concat(a[0],",").concat(a[1]," ").concat(e[0],",").concat(e[1]).concat(i)},P=m.map(function(e){return[s(e[0],h.xMin,h.xMax,0,f.w),s(e[1],h.yMin,h.yMax,f.h,0)]}).reduce(function(e,t,n,r){return 0===n?"M ".concat(r[r.length-1][0],",").concat(f.h," L ").concat(t[0],",").concat(f.h," L ").concat(t[0],",").concat(t[1]):"".concat(e," ").concat(M(t,n,r))},"");a.innerHTML='\n\n\n\n\n\n\n\n\n\n\n\n '),l=r("#heatmap-start",a),u=r("#heatmap-stop",a),l.setAttribute("offset","".concat(100*e.played,"%")),u.setAttribute("offset","".concat(100*e.played,"%"))}}}e.on("video:timeupdate",function(){l&&u&&(l.setAttribute("offset","".concat(100*e.played,"%")),u.setAttribute("offset","".concat(100*e.played,"%")))}),e.on("setBar",function(e,t){l&&u&&"played"===e&&(l.setAttribute("offset","".concat(100*t,"%")),u.setAttribute("offset","".concat(100*t,"%")))}),e.on("ready",function(){return c()}),e.on("resize",function(){return c()}),e.on("artplayerPluginDanmuku:loaded",function(){return c()}),e.on("artplayerPluginDanmuku:points",function(e){return c(e)})}})}},{"@swc/helpers/cjs/_to_consumable_array.cjs":"i81N6","@swc/helpers/cjs/_type_of.cjs":"iXhRw","@parcel/transformer-js/src/esmodule-helpers.js":"qpMMf"}],i81N6:[function(e,t,n,r){"use strict";var a=e("d402183024004bc7"),i=e("3209e2b12672cd18"),o=e("fc58adb8f1bff142"),s=e("5e213dc122a10171");n._=function(e){return a._(e)||i._(e)||s._(e)||o._()}},{d402183024004bc7:"hfQG0","3209e2b12672cd18":"fQrlQ",fc58adb8f1bff142:"fWabh","5e213dc122a10171":"fh7mx"}],hfQG0:[function(e,t,n,r){"use strict";var a=e("5bd5b10bf87fc8e");n._=function(e){if(Array.isArray(e))return a._(e)}},{"5bd5b10bf87fc8e":"1WOAB"}],"1WOAB":[function(e,t,n,r){"use strict";n._=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n\n '.concat(A.default).concat(E.default,'\n\n

\n ').concat(g.default,'\n
\n
\n
\n 按类型屏蔽\n
\n
\n ').concat(b.default).concat(x.default,'\n
滚动
\n
\n
\n ').concat(w.default).concat($.default,'\n
顶部
\n
\n
\n ').concat(O.default).concat(P.default,'\n
底部
\n
\n
\n
\n
\n
\n ').concat(m.default).concat(f.default,'\n 防止弹幕重叠\n
\n
\n ').concat(m.default).concat(f.default,'\n 同步视频速度\n
\n
\n
\n 不透明度\n
\n
未知
\n
\n
\n 显示区域\n
\n
未知
\n
\n
\n 弹幕字号\n
\n
未知
\n
\n
\n 弹幕速度\n
\n
未知
\n
\n
\n
\n
\n
\n
\n ').concat(C.default,'\n
\n
\n
\n 模式\n
\n
\n ').concat(x.default,'\n
滚动
\n
\n
\n ').concat($.default,'\n
顶部
\n
\n
\n ').concat(P.default,'\n
底部
\n
\n
\n
\n
\n 颜色\n
\n ').concat(this.COLOR.map(function(e){return'
')}).join(""),'\n
\n
\n
\n
\n
\n\n
发送
\n
\n ')}},{key:"OPACITY",get:function(){return(0,l._)({min:0,max:100,steps:[]},this.option.OPACITY)}},{key:"FONT_SIZE",get:function(){return(0,l._)({min:12,max:120,steps:[]},this.option.FONT_SIZE)}},{key:"MARGIN",get:function(){return(0,l._)({min:0,max:3,steps:[{name:"1/4",value:[10,"75%"]},{name:"半屏",value:[10,"50%"]},{name:"3/4",value:[10,"25%"]},{name:"满屏",value:[10,10]}]},this.option.MARGIN)}},{key:"SPEED",get:function(){return(0,l._)({min:0,max:4,steps:[{name:"极慢",value:10},{name:"较慢",value:7.5,hide:!0},{name:"适中",value:5},{name:"较快",value:2.5,hide:!0},{name:"极快",value:1}]},this.option.SPEED)}},{key:"COLOR",get:function(){return this.option.COLOR.length?this.option.COLOR:["#FE0302","#FF7204","#FFAA02","#FFD302","#FFFF00","#A0EE00","#00CD00","#019899","#4266BE","#89D5FF","#CC0273","#222222","#9B9B9B","#FFFFFF"]}},{key:"query",value:function(e){return(0,this.utils.query)(e,this.template.$danmuku)}},{key:"append",value:function(e,t){var n=this.utils.append;(0,c._)(e.children).includes(t)||n(e,t)}},{key:"setData",value:function(e,t){var n=this.art.template.$player,r=this.template.$mount;n.dataset[e]=t,this.outside&&(r.dataset[e]=t)}},{key:"createTemplate",value:function(){var e=this.utils,t=e.createElement,n=e.tooltip,r=t("div");r.className="artplayer-plugin-danmuku",r.innerHTML=this.TEMPLATE,this.template.$danmuku=r,this.template.$toggle=this.query(".apd-toggle"),this.template.$config=this.query(".apd-config"),this.template.$configPanel=this.query(".apd-config-panel"),this.template.$configModes=this.query(".apd-config-mode .apd-modes"),this.template.$style=this.query(".apd-style"),this.template.$stylePanel=this.query(".apd-style-panel"),this.template.$styleModes=this.query(".apd-style-mode .apd-modes"),this.template.$colors=this.query(".apd-colors"),this.template.$antiOverlap=this.query(".apd-anti-overlap"),this.template.$syncVideo=this.query(".apd-sync-video"),this.template.$opacitySlider=this.query(".apd-config-opacity .apd-slider"),this.template.$opacityValue=this.query(".apd-config-opacity .apd-value"),this.template.$marginSlider=this.query(".apd-config-margin .apd-slider"),this.template.$marginValue=this.query(".apd-config-margin .apd-value"),this.template.$fontSizeSlider=this.query(".apd-config-fontSize .apd-slider"),this.template.$fontSizeValue=this.query(".apd-config-fontSize .apd-value"),this.template.$speedSlider=this.query(".apd-config-speed .apd-slider"),this.template.$speedValue=this.query(".apd-config-speed .apd-value"),this.template.$input=this.query(".apd-input"),this.template.$send=this.query(".apd-send");var a=this.template.$toggle;this.art.on("artplayerPluginDanmuku:show",function(){n(a,"关闭弹幕")}),this.art.on("artplayerPluginDanmuku:hide",function(){n(a,"打开弹幕")})}},{key:"createEvents",value:function(){var e=this,t=this.template,n=t.$toggle,r=t.$configModes,a=t.$styleModes,i=t.$colors,o=t.$antiOverlap,s=t.$syncVideo,l=t.$send,u=t.$input;this.art.proxy(n,"click",function(){e.danmuku.config({visible:!e.option.visible}),e.reset()}),this.art.proxy(r,"click",function(t){var n=t.target.closest(".apd-mode");if(n){var r=Number(n.dataset.mode);e.option.modes.includes(r)?e.danmuku.config({modes:e.option.modes.filter(function(e){return e!==r})}):e.danmuku.config({modes:(0,c._)(e.option.modes).concat([r])}),e.reset()}}),this.art.proxy(o,"click",function(){e.danmuku.config({antiOverlap:!e.option.antiOverlap}),e.reset()}),this.art.proxy(s,"click",function(){e.danmuku.config({synchronousPlayback:!e.option.synchronousPlayback}),e.reset()}),this.art.proxy(a,"click",function(t){var n=t.target.closest(".apd-mode");if(n){var r=Number(n.dataset.mode);e.danmuku.config({mode:r}),e.reset()}}),this.art.proxy(i,"click",function(t){var n=t.target.closest(".apd-color");n&&(e.danmuku.config({color:n.dataset.color}),e.reset())}),this.art.proxy(l,"click",function(){return e.emit()}),this.art.proxy(u,"keypress",function(t){"Enter"===t.key&&(t.preventDefault(),e.emit())})}},{key:"createSliders",value:function(){var e=this;this.slider.opacity=this.createSlider((0,u._)((0,l._)({},this.OPACITY),{container:this.template.$opacitySlider,findIndex:function(){return Math.round(100*e.option.opacity)},onChange:function(t){e.template.$opacityValue.textContent="".concat(t,"%"),e.danmuku.config({opacity:t/100})}})),this.slider.margin=this.createSlider((0,u._)((0,l._)({},this.MARGIN),{container:this.template.$marginSlider,findIndex:function(){return e.MARGIN.steps.findIndex(function(t){return t.value[0]===e.option.margin[0]&&t.value[1]===e.option.margin[1]})},onChange:function(t){var n=e.MARGIN.steps[t];n&&(e.template.$marginValue.textContent=n.name,e.danmuku.config({margin:n.value}))}})),this.slider.fontSize=this.createSlider((0,u._)((0,l._)({},this.FONT_SIZE),{container:this.template.$fontSizeSlider,findIndex:function(){return e.danmuku.fontSize},onChange:function(t){e.template.$fontSizeValue.textContent="".concat(t,"px"),t!==e.danmuku.fontSize&&e.danmuku.config({fontSize:t})}})),this.slider.speed=this.createSlider((0,u._)((0,l._)({},this.SPEED),{container:this.template.$speedSlider,findIndex:function(){return e.SPEED.steps.findIndex(function(t){return t.value===e.option.speed})},onChange:function(t){var n=e.SPEED.steps[t];n&&(e.template.$speedValue.textContent=n.name,e.danmuku.config({speed:n.value}))}}))}},{key:"createSlider",value:function(e){var t=this,n=e.min,r=e.max,a=e.container,i=e.findIndex,o=e.onChange,s=e.steps,l=void 0===s?[]:s,u=this.utils,c=u.query,d=u.clamp;(0,u.setStyle)(a,"touch-action","none"),a.innerHTML='\n
\n
\n '.concat(l.map(function(){return'
'}).join(""),'\n
\n
\n
\n
\n
\n ').concat(l.map(function(e){return e.hide?"":'
'.concat(e.name,"
")}).join(""),"\n
\n ");var p=c(".apd-slider-dot",a),f=c(".apd-slider-progress",a),h=!1;function m(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:i();if(!(er)){var t=(e-n)/(r-n);p.style.left="".concat(100*t,"%"),0===l.length&&(f.style.width=p.style.left),o(e)}}function y(e){var t=a.getBoundingClientRect(),i=t.top,o=t.height,s=t.left,l=t.width;this.art.isRotate?m(Math.round(d(e.clientY-i,0,o)/o*(r-n)+n)):m(Math.round(d(e.clientX-s,0,l)/l*(r-n)+n))}return this.art.proxy(a,"click",function(e){y.call(t,e)}),this.art.proxy(a,"pointerdown",function(e){h=0===e.button}),this.art.proxy(document,"pointermove",function(e){h&&y.call(t,e)}),this.art.proxy(document,"pointerup",function(e){h&&(h=!1,y.call(t,e))}),{reset:m}}},{key:"onFullscreen",value:function(e){var t=this.template,n=t.$danmuku,r=t.$controlsCenter,a=t.$mount;this.outside?e?this.append(r,n):this.append(a,n):this.append(r,n)}},{key:"onMouseEnter",value:function(e){var t=e.$control,n=e.$panel,r=this.art.template.$player,a=t.getBoundingClientRect(),i=n.getBoundingClientRect(),o=r.getBoundingClientRect(),s=i.width/2-a.width/2,l=o.left-(a.left-s),u=a.right+s-o.right;l>0?n.style.left="".concat(-s+l,"px"):u>0?n.style.left="".concat(-s-u,"px"):n.style.left="".concat(-s,"px")}},{key:"emit",value:function(){return(0,i._)(function(){var e,t,n,r;return(0,d._)(this,function(a){switch(a.label){case 0:if(!(t=(e=this.template.$input).value.trim()).length||this.isLock||this.emitting)return[2];n={text:t,mode:this.option.mode,color:this.option.color,time:this.art.currentTime},a.label=1;case 1:return a.trys.push([1,3,,4]),this.emitting=!0,[4,this.option.beforeEmit(n)];case 2:if(r=a.sent(),this.emitting=!1,!0!==r)return[2];return n.border=!0,delete n.time,this.danmuku.emit(n),e.value="",this.lock(),[3,4];case 3:return console.error("Error emitting danmuku:",a.sent()),this.emitting=!1,[3,4];case 4:return[2]}})}).call(this)}},{key:"lock",value:function(){var e=this,t=this.utils.addClass,n=this.template.$send;this.isLock=!0;var r=this.option.lockTime;n.textContent=r,t(n,"apd-lock");var a=function(){e.timer=setTimeout(function(){0===r?e.unlock():(n.textContent=r-=1,a())},1e3)};a()}},{key:"unlock",value:function(){var e=this.utils.removeClass,t=this.template.$send;clearTimeout(this.timer),this.isLock=!1,t.textContent="发送",e(t,"apd-lock")}},{key:"resize",value:function(){if(!this.outside&&!this.art.fullscreen&&!this.art.fullscreenWeb){var e=this.art.template,t=e.$player,n=e.$controlsCenter,r=this.template.$danmuku;this.art.width'},{}],ilP9j:[function(e,t,n,r){t.exports=''},{}],"9pxJ0":[function(e,t,n,r){t.exports=''},{}],"5tLUB":[function(e,t,n,r){t.exports=''},{}],atPtW:[function(e,t,n,r){t.exports=''},{}],lYyTv:[function(e,t,n,r){t.exports=''},{}],bzdWd:[function(e,t,n,r){t.exports=''},{}],ckFYR:[function(e,t,n,r){t.exports=''},{}],"2vLQf":[function(e,t,n,r){t.exports=''},{}],"95P3w":[function(e,t,n,r){t.exports=''},{}],jLRWo:[function(e,t,n,r){t.exports=''},{}],XRdY2:[function(e,t,n,r){t.exports=''},{}],jWk9o:[function(e,t,n,r){t.exports='.artplayer-plugin-danmuku{z-index:99;color:#fff;flex-shrink:0;justify-content:center;align-items:center;gap:10px;width:100%;height:32px;font-size:12px;font-weight:300;display:flex;position:relative}.artplayer-plugin-danmuku .apd-icon{cursor:pointer;opacity:.75;fill:#fff;transition:all .2s}.artplayer-plugin-danmuku .apd-icon:hover{opacity:1}.artplayer-plugin-danmuku .apd-config{display:flex;position:relative}.artplayer-plugin-danmuku .apd-config .apd-config-panel{opacity:0;pointer-events:none;width:320px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-config .apd-config-panel .apd-config-panel-inner{background-color:rgba(0,0,0,.85);border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-config:hover .apd-config-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-config-mode,.artplayer-plugin-danmuku .apd-config-slider,.artplayer-plugin-danmuku .apd-config-other,.artplayer-plugin-danmuku .apd-style-mode{margin-bottom:15px}.artplayer-plugin-danmuku .apd-modes{align-items:center;gap:20px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-modes .apd-mode{cursor:pointer;text-align:center}.artplayer-plugin-danmuku .apd-modes .apd-mode:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-config-slider{align-items:center;gap:12px;display:flex}.artplayer-plugin-danmuku .apd-config-slider .apd-value{text-align:right;width:32px}.artplayer-plugin-danmuku .apd-slider{cursor:pointer;flex:1;justify-content:center;align-items:center;height:20px;display:flex;position:relative}.artplayer-plugin-danmuku .apd-slider .apd-slider-line{background-color:rgba(255,255,255,.25);border-radius:3px;width:100%;height:2px;position:relative;overflow:hidden}.artplayer-plugin-danmuku .apd-slider .apd-slider-points{justify-content:space-between;align-items:center;display:flex;position:absolute;top:0;bottom:0;left:0;right:0}.artplayer-plugin-danmuku .apd-slider .apd-slider-points .apd-slider-point{background-color:rgba(255,255,255,.5);border-radius:50%;width:2px;height:2px}.artplayer-plugin-danmuku .apd-slider .apd-slider-progress{background-color:#00a1d6;width:0%;height:100%}.artplayer-plugin-danmuku .apd-slider .apd-slider-dot{background-color:#00a1d6;border-radius:50%;width:12px;height:12px;position:absolute;left:0%;transform:translate(-6px)}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps{color:#777;justify-content:space-between;align-items:center;width:calc(100% + 32px);display:flex;position:absolute;bottom:-12px}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps .apd-slider-step{text-align:center;flex-shrink:0;width:36px;scale:.95}.artplayer-plugin-danmuku .apd-config-other{align-items:center;gap:20px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-check-off,.artplayer-plugin-danmuku .apd-config-other .apd-check-on{width:16px;height:16px}.artplayer-plugin-danmuku .apd-config-other .apd-other{cursor:pointer;align-items:center;gap:2px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-other:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-emitter{background-color:rgba(255,255,255,.25);border-radius:5px;flex:1;align-items:center;height:100%;display:flex}.artplayer-plugin-danmuku .apd-style{justify-content:center;align-items:center;display:flex;position:relative}.artplayer-plugin-danmuku .apd-style .apd-style-panel{opacity:0;pointer-events:none;width:200px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-style .apd-style-panel .apd-style-panel-inner{background-color:rgba(0,0,0,.85);border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-style:hover .apd-style-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-colors{flex-wrap:wrap;gap:8px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-colors .apd-color{cursor:pointer;border-radius:2px;width:16px;height:16px}.artplayer-plugin-danmuku .apd-colors .apd-color.apd-active{border:1px solid #000;box-shadow:0 0 0 1px #fff}.artplayer-plugin-danmuku .apd-input{color:#fff;background-color:transparent;border:none;outline:none;flex:1;width:auto;min-width:0;height:100%;line-height:1}.artplayer-plugin-danmuku .apd-input::placeholder{color:rgba(255,255,255,.5)}.artplayer-plugin-danmuku .apd-input::placeholder{color:rgba(255,255,255,.5)}.artplayer-plugin-danmuku .apd-send{cursor:pointer;width:60px;height:100%;text-shadow:none;background-color:#00a1d6;border-top-right-radius:5px;border-bottom-right-radius:5px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.artplayer-plugin-danmuku .apd-send.apd-lock{cursor:not-allowed;color:#666;background-color:#e7e7e7}.art-controls-center .apd-emitter{flex:none;width:260px}.art-fullscreen .artplayer-plugin-danmuku,.art-fullscreen-web .artplayer-plugin-danmuku{gap:16px;height:38px}.art-fullscreen .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen-web .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-on,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-on{width:28px;height:28px}.art-fullscreen .artplayer-plugin-danmuku .apd-emitter,.art-fullscreen-web .artplayer-plugin-danmuku .apd-emitter{flex:none;width:400px}.art-video-player>.artplayer-plugin-danmuku{padding:0 10px;position:absolute;bottom:-40px;left:0;right:0}.art-video-player:has(>.artplayer-plugin-danmuku){margin-bottom:40px}[data-danmuku-emitter=false] .apd-emitter{display:none!important}[data-danmuku-emitter=false] .art-controls-center .artplayer-plugin-danmuku{justify-content:flex-end;gap:18px}[data-danmuku-emitter=false].art-fullscreen .art-controls-center .artplayer-plugin-danmuku,[data-danmuku-emitter=false].art-fullscreen-web .art-controls-center .artplayer-plugin-danmuku{gap:24px}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-icon{fill:#333}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-emitter{background-color:#f1f2f3}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input{color:#000}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input::placeholder{color:rgba(0,0,0,.3)}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input::placeholder{color:rgba(0,0,0,.3)}[data-danmuku-visible=false] .apd-toggle-off{display:block}[data-danmuku-visible=false] .apd-toggle-on,[data-danmuku-visible=true] .apd-toggle-off{display:none}[data-danmuku-visible=true] .apd-toggle-on{display:block}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-on{display:none}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-off,[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-on{display:block}[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-off,[data-danmuku-sync-video=false] .apd-sync-video .apd-check-on{display:none}[data-danmuku-sync-video=false] .apd-sync-video .apd-check-off,[data-danmuku-sync-video=true] .apd-sync-video .apd-check-on{display:block}[data-danmuku-sync-video=true] .apd-sync-video .apd-check-off{display:none}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-off{display:block}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-on{display:none}[data-danmuku-mode0=false] .art-danmuku [data-mode="0"]{opacity:0!important}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-off{display:none}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-on{display:block}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"]{color:#00a1d6}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"] path{fill:#00a1d6}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-off{display:block}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-on{display:none}[data-danmuku-mode1=false] .art-danmuku [data-mode="1"]{opacity:0!important}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-off{display:none}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-on{display:block}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"]{color:#00a1d6}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"] path{fill:#00a1d6}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-off{display:block}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-on{display:none}[data-danmuku-mode2=false] .art-danmuku [data-mode="2"]{opacity:0!important}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-off{display:none}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-on{display:block}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"]{color:#00a1d6}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"] path{fill:#00a1d6}'},{}]},["l3CkF"],"l3CkF","parcelRequire4dc0",{}); \ No newline at end of file +!function(e,t,n,r,a,i,o,s){var l="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},u="function"==typeof l[r]&&l[r],c=u.i||{},d=u.cache||{},p="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function f(t,n){if(!d[t]){if(!e[t]){if(a[t])return a[t];var i="function"==typeof l[r]&&l[r];if(!n&&i)return i(t,!0);if(u)return u(t,!0);if(p&&"string"==typeof t)return p(t);var o=Error("Cannot find module '"+t+"'");throw o.code="MODULE_NOT_FOUND",o}c.resolve=function(n){var r=e[t][1][n];return null!=r?r:n},c.cache={};var s=d[t]=new f.Module(t);e[t][0].call(s.exports,c,s,s.exports,l)}return d[t].exports;function c(e){var t=c.resolve(e);return!1===t?{}:f(t)}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.require=p,this.exports={}},f.modules=e,f.cache=d,f.parent=u,f.distDir=void 0,f.publicUrl=void 0,f.devServer=void 0,f.i=c,f.register=function(t,n){e[t]=[function(e,t){t.exports=n},{}]},Object.defineProperty(f,"root",{get:function(){return l[r]}}),l[r]=f;for(var h=0;h=n.time&&n.time>=e-.1&&t.push(n)}),t}},{key:"visibles",get:function(){var e=this,t=[],n=this.$player.clientWidth,r=this.getLeft(this.$player);return this.filter("emit",function(a){var i=a.$ref.offsetTop,o=e.getLeft(a.$ref)-r,s=a.$ref.clientHeight,l=a.$ref.clientWidth,u=o+l,c=u/a.$restTime,d={};d.top=i,d.left=o,d.height=s,d.width=l,d.right=n-u,d.speed=c,d.distance=u,d.time=a.$restTime,d.mode=a.mode,t.push(d)}),t}},{key:"speed",get:function(){return this.option.synchronousPlayback&&this.art.playbackRate?this.option.speed/Number(this.art.playbackRate):this.option.speed}},{key:"load",value:function(e){return(0,i._)(function(){var t,n,r,a,i,o;return(0,c._)(this,function(s){switch(s.label){case 0:t=this.utils.errorHandle,n=[],r=e||this.option.danmuku,s.label=1;case 1:if(s.trys.push([1,13,,14]),"function"!=typeof r)return[3,3];return[4,r()];case 2:case 4:case 6:return n=s.sent(),[3,8];case 3:if(!(r instanceof Promise))return[3,5];return[4,r];case 5:if("string"!=typeof r)return[3,7];return[4,(0,f.bilibiliDanmuParseFromUrl)(r)];case 7:Array.isArray(r)&&(n=r),s.label=8;case 8:t(Array.isArray(n),"Danmuku need return an array as result"),void 0===e&&(this.reset(),this.queue=[],this.states={wait:[],ready:[],emit:[],stop:[]},this.$refs=[],this.$danmuku.textContent=""),a=0,s.label=9;case 9:if(!(a1&&void 0!==arguments[1]&&arguments[1],a=this.utils.clamp,i=this.art.template.$controlsCenter;return(Object.keys(t).some(function(e){return JSON.stringify(n.option[e])!==JSON.stringify(t[e])})||r)&&(this.option=Object.assign({},e.option,this.option,t),this.validator(this.option,e.scheme),this.option.mode=a(this.option.mode,0,2),this.option.speed=a(this.option.speed,1,10),this.option.opacity=a(this.option.opacity,0,1),this.option.lockTime=a(this.option.lockTime,1,60),this.option.maxLength=a(this.option.maxLength,1,1e3),this.option.mount=this.option.mount||i,t.fontSize&&this.reset(),this.option.visible?this.show():this.hide(),this.art.emit("artplayerPluginDanmuku:config",this.option)),this}},{key:"getLeft",value:function(e){var t=e.getBoundingClientRect();return this.isRotate?t.top:t.left}},{key:"postMessage",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new Promise(function(n){t.id=Date.now(),e.worker.postMessage(t),e.worker.onmessage=function(e){var r=e.data;r.id===t.id&&n(r)}})}},{key:"filter",value:function(e,t){for(var n=this.states[e]||[],r=0;rt.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,r=Object.getOwnPropertySymbols(e);at.indexOf(r[a])&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]]);return n}function c(e,t,n,r){var a,o=arguments.length,s=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(("undefined"==typeof Reflect?"undefined":(0,i._)(Reflect))==="object"&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var l=e.length-1;l>=0;l--)(a=e[l])&&(s=(o<3?a(s):o>3?a(t,n,s):a(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}function d(e,t){return function(n,r){t(n,r,e)}}function p(e,t,n,r,a,o){function s(e){if(void 0!==e&&"function"!=typeof e)throw TypeError("Function expected");return e}for(var l,u=r.kind,c="getter"===u?"get":"setter"===u?"set":"value",d=!t&&e?r.static?e:e.prototype:null,p=t||(d?Object.getOwnPropertyDescriptor(d,r.name):{}),f=!1,h=n.length-1;h>=0;h--){var m={};for(var y in r)m[y]="access"===y?{}:r[y];for(var y in r.access)m.access[y]=r.access[y];m.addInitializer=function(e){if(f)throw TypeError("Cannot add initializers after decoration has completed");o.push(s(e||null))};var g=(0,n[h])("accessor"===u?{get:p.get,set:p.set}:p[c],m);if("accessor"===u){if(void 0===g)continue;if(null===g||(void 0===g?"undefined":(0,i._)(g))!=="object")throw TypeError("Object expected");(l=s(g.get))&&(p.get=l),(l=s(g.set))&&(p.set=l),(l=s(g.init))&&a.unshift(l)}else(l=s(g))&&("field"===u?a.unshift(l):p[c]=l)}d&&Object.defineProperty(d,r.name,p),f=!0}function f(e,t,n){for(var r=arguments.length>2,a=0;a0&&a[a.length-1])&&(6===u[0]||2===u[0])){i=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function k(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,a,i=n.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)o.push(r.value)}catch(e){a={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(a)throw a.error}}return o}function w(){for(var e=[],t=0;t1||s(e,t)})},t&&(r[e]=t(r[e])))}function s(e,t){try{var n;(n=a[e](t)).value instanceof S?Promise.resolve(n.value.v).then(l,u):c(i[0][2],n)}catch(e){c(i[0][3],e)}}function l(e){s("next",e)}function u(e){s("throw",e)}function c(e,t){e(t),i.shift(),i.length&&s(i[0][0],i[0][1])}}function M(e){var t,n;return t={},r("next"),r("throw",function(e){throw e}),r("return"),t[Symbol.iterator]=function(){return this},t;function r(r,a){t[r]=e[r]?function(t){return(n=!n)?{value:S(e[r](t)),done:!1}:a?a(t):t}:a}}function P(e){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=x(e),t={},r("next"),r("throw"),r("return"),t[Symbol.asyncIterator]=function(){return this},t);function r(n){t[n]=e[n]&&function(t){return new Promise(function(r,a){var i,o,s;i=r,o=a,s=(t=e[n](t)).done,Promise.resolve(t.value).then(function(e){i({value:e,done:s})},o)})}}}function D(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var E=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},T=function(e){return(T=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t})(e)};function A(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=T(e),r=0;r=0;d-=1){var l=s[d],p=s[d+1],h=l.top+l.height;if(p.top-h>=t.height)return p.top-t.height}else for(var m=1;m=t.height)return v}for(var y=[],_=1;_e.time))})});return A&&A[0]?A[0].top:void 0;case 1:case 2:return}else{switch(t.mode){case 0:y.sort(function(e,t){var r,n,o=(r=Math).min.apply(r,(0,i._)(t.map(function(e){return e.right}))),f=(n=Math).min.apply(n,(0,i._)(e.map(function(e){return e.right})));return o*t.length-f*e.length});break;case 1:case 2:y.sort(function(e,t){var r,n,o=(r=Math).max.apply(r,(0,i._)(t.map(function(e){return e.width})));return(n=Math).max.apply(n,(0,i._)(e.map(function(e){return e.width})))*e.length-o*t.length})}return y[0][0].top}}onmessage=function(e){var t=e.data;t.id&&t.type&&globalThis.postMessage({result:(0,({getDanmuTop:o})[t.type])(t),id:t.id})}},{"@swc/helpers/cjs/_to_consumable_array.cjs":"i81N6"}],i81N6:[function(e,t,r,n){"use strict";var i=e("d402183024004bc7"),o=e("3209e2b12672cd18"),f=e("fc58adb8f1bff142"),u=e("5e213dc122a10171");r._=function(e){return i._(e)||o._(e)||u._(e)||f._()}},{d402183024004bc7:"hfQG0","3209e2b12672cd18":"fQrlQ",fc58adb8f1bff142:"fWabh","5e213dc122a10171":"fh7mx"}],hfQG0:[function(e,t,r,n){"use strict";var i=e("5bd5b10bf87fc8e");r._=function(e){if(Array.isArray(e))return i._(e)}},{"5bd5b10bf87fc8e":"1WOAB"}],"1WOAB":[function(e,t,r,n){"use strict";r._=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r]*?p="(?

[^"]+)"[^>]*>(?.*?)<\\/d>',"gs");return Array.from(e.matchAll(t)).map(function(e){var t=e.groups.p.split(",");return t.length>=8?{text:e.groups.text.trim().replaceAll(""",'"').replaceAll("'","'").replaceAll("<","<").replaceAll(">",">").replaceAll("&","&"),time:Number(t[0]),mode:s(Number(t[1])),fontSize:Number(t[2]),color:"#".concat(Number(t[3]).toString(16)),timestamp:Number(t[4]),pool:Number(t[5]),userID:t[6],rowID:Number(t[7])}:null}).filter(Boolean)}function u(e){var t=e.data,n=t.xml,r=t.id;r&&n&&globalThis.postMessage({danmus:l(n),id:r})}function c(e){return new Promise(function(t){return(0,i._)(function(){var n,r;return(0,o._)(this,function(a){switch(a.label){case 0:return[4,fetch(e)];case 1:return[4,a.sent().text()];case 2:n=a.sent();try{var i;i=new Blob(["\n ".concat(s.toString(),"\n ").concat(l.toString(),"\n onmessage = ").concat(u.toString(),"\n ")],{type:"application/javascript"}),(r=new Worker(URL.createObjectURL(i))).onmessage=function(e){var n=e.data,a=n.danmus;n.id&&a&&(t(a),r.terminate())},r.postMessage({xml:n,id:Date.now()})}catch(e){console.error("Error parsing Bilibili Danmu:",e),t(l(n))}return[2]}})})()})}},{"@swc/helpers/cjs/_async_to_generator.cjs":"cZn0e","@swc/helpers/cjs/_ts_generator.cjs":"eltGh","@parcel/transformer-js/src/esmodule-helpers.js":"qpMMf"}],hLPK6:[function(e,t,n,r){var a=e("@parcel/transformer-js/src/esmodule-helpers.js");a.defineInteropFlag(n),a.export(n,"default",function(){return l});var i=e("@swc/helpers/cjs/_to_consumable_array.cjs"),o=e("@swc/helpers/cjs/_type_of.cjs"),s=function(e,t,n,r,a){return(e-t)*(a-r)/(n-t)+r};function l(e,t,n){var r=e.constructor.utils.query;e.controls.add({name:"heatmap",position:"top",html:"",style:{position:"absolute",top:"-100px",left:"0px",right:"0px",height:"100px",width:"100%",pointerEvents:"none"},mounted:function(a){var l=null,u=null;function c(){var c,d,p=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(l=null,u=null,a.innerHTML="",e.duration&&!e.option.isLive){var f={w:a.offsetWidth,h:a.offsetHeight},h={xMin:0,xMax:f.w,yMin:0,yMax:128,scale:.25,opacity:.2,minHeight:Math.floor(.05*f.h),sampling:Math.floor(f.w/100),smoothing:.2,flattening:.2};(void 0===n?"undefined":(0,o._)(n))==="object"&&Object.assign(h,n);var m=[];if(Array.isArray(p)&&p.length)m=(0,i._)(p);else for(var y=function(e){var n=t.queue.filter(function(t){var n=t.time;return n>e*g&&n<=(e+h.sampling)*g}).length;m.push([e,n])},g=e.duration/f.w,v=0;v<=f.w;v+=h.sampling)y(v);if(0!==m.length){var b=m[m.length-1],_=b[0],x=b[1];_!==f.w&&m.push([f.w,x]);for(var k=m.map(function(e){return e[1]}),w=((c=Math).min.apply(c,(0,i._)(k))+(d=Math).max.apply(d,(0,i._)(k)))/2,j=0;jw?1+h.scale:1-h.scale)+h.minHeight}var O=function(e,t,n,r){var a,i,o=t||e,l=n||e,u={length:Math.sqrt(Math.pow(a=l[0]-o[0],2)+Math.pow(i=l[1]-o[1],2)),angle:Math.atan2(i,a)},c=s(Math.cos(u.angle)*h.flattening,0,1,1,0),d=u.angle*c+(r?Math.PI:0),p=u.length*h.smoothing;return[e[0]+Math.cos(d)*p,e[1]+Math.sin(d)*p]},M=function(e,t,n){var r=O(n[t-1],n[t-2],e),a=O(e,n[t-1],n[t+1],!0),i=t===n.length-1?" z":"";return"C ".concat(r[0],",").concat(r[1]," ").concat(a[0],",").concat(a[1]," ").concat(e[0],",").concat(e[1]).concat(i)},P=m.map(function(e){return[s(e[0],h.xMin,h.xMax,0,f.w),s(e[1],h.yMin,h.yMax,f.h,0)]}).reduce(function(e,t,n,r){return 0===n?"M ".concat(r[r.length-1][0],",").concat(f.h," L ").concat(t[0],",").concat(f.h," L ").concat(t[0],",").concat(t[1]):"".concat(e," ").concat(M(t,n,r))},"");a.innerHTML='\n\n\n\n\n\n\n\n\n\n\n\n '),l=r("#heatmap-start",a),u=r("#heatmap-stop",a),l.setAttribute("offset","".concat(100*e.played,"%")),u.setAttribute("offset","".concat(100*e.played,"%"))}}}e.on("video:timeupdate",function(){l&&u&&(l.setAttribute("offset","".concat(100*e.played,"%")),u.setAttribute("offset","".concat(100*e.played,"%")))}),e.on("setBar",function(e,t){l&&u&&"played"===e&&(l.setAttribute("offset","".concat(100*t,"%")),u.setAttribute("offset","".concat(100*t,"%")))}),e.on("ready",function(){return c()}),e.on("resize",function(){return c()}),e.on("artplayerPluginDanmuku:loaded",function(){return c()}),e.on("artplayerPluginDanmuku:points",function(e){return c(e)})}})}},{"@swc/helpers/cjs/_to_consumable_array.cjs":"i81N6","@swc/helpers/cjs/_type_of.cjs":"iXhRw","@parcel/transformer-js/src/esmodule-helpers.js":"qpMMf"}],i81N6:[function(e,t,n,r){"use strict";var a=e("d402183024004bc7"),i=e("3209e2b12672cd18"),o=e("fc58adb8f1bff142"),s=e("5e213dc122a10171");n._=function(e){return a._(e)||i._(e)||s._(e)||o._()}},{d402183024004bc7:"hfQG0","3209e2b12672cd18":"fQrlQ",fc58adb8f1bff142:"fWabh","5e213dc122a10171":"fh7mx"}],hfQG0:[function(e,t,n,r){"use strict";var a=e("5bd5b10bf87fc8e");n._=function(e){if(Array.isArray(e))return a._(e)}},{"5bd5b10bf87fc8e":"1WOAB"}],"1WOAB":[function(e,t,n,r){"use strict";n._=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n\n '.concat(A.default).concat(E.default,'\n\n

\n ').concat(g.default,'\n
\n
\n
\n 按类型屏蔽\n
\n
\n ').concat(b.default).concat(x.default,'\n
滚动
\n
\n
\n ').concat(w.default).concat($.default,'\n
顶部
\n
\n
\n ').concat(O.default).concat(P.default,'\n
底部
\n
\n
\n
\n
\n
\n ').concat(m.default).concat(f.default,'\n 防止弹幕重叠\n
\n
\n ').concat(m.default).concat(f.default,'\n 同步视频速度\n
\n
\n
\n 不透明度\n
\n
未知
\n
\n
\n 显示区域\n
\n
未知
\n
\n
\n 弹幕字号\n
\n
未知
\n
\n
\n 弹幕速度\n
\n
未知
\n
\n
\n
\n
\n
\n
\n ').concat(C.default,'\n
\n
\n
\n 模式\n
\n
\n ').concat(x.default,'\n
滚动
\n
\n
\n ').concat($.default,'\n
顶部
\n
\n
\n ').concat(P.default,'\n
底部
\n
\n
\n
\n
\n 颜色\n
\n ').concat(this.COLOR.map(function(e){return'
')}).join(""),'\n
\n
\n
\n
\n
\n\n
发送
\n
\n ')}},{key:"OPACITY",get:function(){return(0,l._)({min:0,max:100,steps:[]},this.option.OPACITY)}},{key:"FONT_SIZE",get:function(){return(0,l._)({min:12,max:120,steps:[]},this.option.FONT_SIZE)}},{key:"MARGIN",get:function(){return(0,l._)({min:0,max:3,steps:[{name:"1/4",value:[10,"75%"]},{name:"半屏",value:[10,"50%"]},{name:"3/4",value:[10,"25%"]},{name:"满屏",value:[10,10]}]},this.option.MARGIN)}},{key:"SPEED",get:function(){return(0,l._)({min:0,max:4,steps:[{name:"极慢",value:10},{name:"较慢",value:7.5,hide:!0},{name:"适中",value:5},{name:"较快",value:2.5,hide:!0},{name:"极快",value:1}]},this.option.SPEED)}},{key:"COLOR",get:function(){return this.option.COLOR.length?this.option.COLOR:["#FE0302","#FF7204","#FFAA02","#FFD302","#FFFF00","#A0EE00","#00CD00","#019899","#4266BE","#89D5FF","#CC0273","#222222","#9B9B9B","#FFFFFF"]}},{key:"query",value:function(e){return(0,this.utils.query)(e,this.template.$danmuku)}},{key:"append",value:function(e,t){var n=this.utils.append;(0,c._)(e.children).includes(t)||n(e,t)}},{key:"setData",value:function(e,t){var n=this.art.template.$player,r=this.template.$mount;n.dataset[e]=t,this.outside&&(r.dataset[e]=t)}},{key:"createTemplate",value:function(){var e=this.utils,t=e.createElement,n=e.tooltip,r=t("div");r.className="artplayer-plugin-danmuku",r.innerHTML=this.TEMPLATE,this.template.$danmuku=r,this.template.$toggle=this.query(".apd-toggle"),this.template.$config=this.query(".apd-config"),this.template.$configPanel=this.query(".apd-config-panel"),this.template.$configModes=this.query(".apd-config-mode .apd-modes"),this.template.$style=this.query(".apd-style"),this.template.$stylePanel=this.query(".apd-style-panel"),this.template.$styleModes=this.query(".apd-style-mode .apd-modes"),this.template.$colors=this.query(".apd-colors"),this.template.$antiOverlap=this.query(".apd-anti-overlap"),this.template.$syncVideo=this.query(".apd-sync-video"),this.template.$opacitySlider=this.query(".apd-config-opacity .apd-slider"),this.template.$opacityValue=this.query(".apd-config-opacity .apd-value"),this.template.$marginSlider=this.query(".apd-config-margin .apd-slider"),this.template.$marginValue=this.query(".apd-config-margin .apd-value"),this.template.$fontSizeSlider=this.query(".apd-config-fontSize .apd-slider"),this.template.$fontSizeValue=this.query(".apd-config-fontSize .apd-value"),this.template.$speedSlider=this.query(".apd-config-speed .apd-slider"),this.template.$speedValue=this.query(".apd-config-speed .apd-value"),this.template.$input=this.query(".apd-input"),this.template.$send=this.query(".apd-send");var a=this.template.$toggle;this.art.on("artplayerPluginDanmuku:show",function(){n(a,"关闭弹幕")}),this.art.on("artplayerPluginDanmuku:hide",function(){n(a,"打开弹幕")})}},{key:"createEvents",value:function(){var e=this,t=this.template,n=t.$toggle,r=t.$configModes,a=t.$styleModes,i=t.$colors,o=t.$antiOverlap,s=t.$syncVideo,l=t.$send,u=t.$input;this.art.proxy(n,"click",function(){e.danmuku.config({visible:!e.option.visible}),e.reset()}),this.art.proxy(r,"click",function(t){var n=t.target.closest(".apd-mode");if(n){var r=Number(n.dataset.mode);e.option.modes.includes(r)?e.danmuku.config({modes:e.option.modes.filter(function(e){return e!==r})}):e.danmuku.config({modes:(0,c._)(e.option.modes).concat([r])}),e.reset()}}),this.art.proxy(o,"click",function(){e.danmuku.config({antiOverlap:!e.option.antiOverlap}),e.reset()}),this.art.proxy(s,"click",function(){e.danmuku.config({synchronousPlayback:!e.option.synchronousPlayback}),e.reset()}),this.art.proxy(a,"click",function(t){var n=t.target.closest(".apd-mode");if(n){var r=Number(n.dataset.mode);e.danmuku.config({mode:r}),e.reset()}}),this.art.proxy(i,"click",function(t){var n=t.target.closest(".apd-color");n&&(e.danmuku.config({color:n.dataset.color}),e.reset())}),this.art.proxy(l,"click",function(){return e.emit()}),this.art.proxy(u,"keypress",function(t){"Enter"===t.key&&(t.preventDefault(),e.emit())})}},{key:"createSliders",value:function(){var e=this;this.slider.opacity=this.createSlider((0,u._)((0,l._)({},this.OPACITY),{container:this.template.$opacitySlider,findIndex:function(){return Math.round(100*e.option.opacity)},onChange:function(t){e.template.$opacityValue.textContent="".concat(t,"%"),e.danmuku.config({opacity:t/100})}})),this.slider.margin=this.createSlider((0,u._)((0,l._)({},this.MARGIN),{container:this.template.$marginSlider,findIndex:function(){return e.MARGIN.steps.findIndex(function(t){return t.value[0]===e.option.margin[0]&&t.value[1]===e.option.margin[1]})},onChange:function(t){var n=e.MARGIN.steps[t];n&&(e.template.$marginValue.textContent=n.name,e.danmuku.config({margin:n.value}))}})),this.slider.fontSize=this.createSlider((0,u._)((0,l._)({},this.FONT_SIZE),{container:this.template.$fontSizeSlider,findIndex:function(){return e.danmuku.fontSize},onChange:function(t){e.template.$fontSizeValue.textContent="".concat(t,"px"),t!==e.danmuku.fontSize&&e.danmuku.config({fontSize:t})}})),this.slider.speed=this.createSlider((0,u._)((0,l._)({},this.SPEED),{container:this.template.$speedSlider,findIndex:function(){return e.SPEED.steps.findIndex(function(t){return t.value===e.option.speed})},onChange:function(t){var n=e.SPEED.steps[t];n&&(e.template.$speedValue.textContent=n.name,e.danmuku.config({speed:n.value}))}}))}},{key:"createSlider",value:function(e){var t=this,n=e.min,r=e.max,a=e.container,i=e.findIndex,o=e.onChange,s=e.steps,l=void 0===s?[]:s,u=this.utils,c=u.query,d=u.clamp;(0,u.setStyle)(a,"touch-action","none"),a.innerHTML='\n
\n
\n '.concat(l.map(function(){return'
'}).join(""),'\n
\n
\n
\n
\n
\n ').concat(l.map(function(e){return e.hide?"":'
'.concat(e.name,"
")}).join(""),"\n
\n ");var p=c(".apd-slider-dot",a),f=c(".apd-slider-progress",a),h=!1;function m(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:i();if(!(er)){var t=(e-n)/(r-n);p.style.left="".concat(100*t,"%"),0===l.length&&(f.style.width=p.style.left),o(e)}}function y(e){var t=a.getBoundingClientRect(),i=t.top,o=t.height,s=t.left,l=t.width;this.art.isRotate?m(Math.round(d(e.clientY-i,0,o)/o*(r-n)+n)):m(Math.round(d(e.clientX-s,0,l)/l*(r-n)+n))}return this.art.proxy(a,"click",function(e){y.call(t,e)}),this.art.proxy(a,"pointerdown",function(e){h=0===e.button}),this.art.proxy(document,"pointermove",function(e){h&&y.call(t,e)}),this.art.proxy(document,"pointerup",function(e){h&&(h=!1,y.call(t,e))}),{reset:m}}},{key:"onFullscreen",value:function(e){var t=this.template,n=t.$danmuku,r=t.$controlsCenter,a=t.$mount;this.outside?e?this.append(r,n):this.append(a,n):this.append(r,n)}},{key:"onMouseEnter",value:function(e){var t=e.$control,n=e.$panel,r=this.art.template.$player,a=t.getBoundingClientRect(),i=n.getBoundingClientRect(),o=r.getBoundingClientRect(),s=i.width/2-a.width/2,l=o.left-(a.left-s),u=a.right+s-o.right;l>0?n.style.left="".concat(-s+l,"px"):u>0?n.style.left="".concat(-s-u,"px"):n.style.left="".concat(-s,"px")}},{key:"emit",value:function(){return(0,i._)(function(){var e,t,n,r;return(0,d._)(this,function(a){switch(a.label){case 0:if(!(t=(e=this.template.$input).value.trim()).length||this.isLock||this.emitting)return[2];n={text:t,mode:this.option.mode,color:this.option.color,time:this.art.currentTime},a.label=1;case 1:return a.trys.push([1,3,,4]),this.emitting=!0,[4,this.option.beforeEmit(n)];case 2:if(r=a.sent(),this.emitting=!1,!0!==r)return[2];return n.border=!0,delete n.time,this.danmuku.emit(n),e.value="",this.lock(),[3,4];case 3:return console.error("Error emitting danmuku:",a.sent()),this.emitting=!1,[3,4];case 4:return[2]}})}).call(this)}},{key:"lock",value:function(){var e=this,t=this.utils.addClass,n=this.template.$send;this.isLock=!0;var r=this.option.lockTime;n.textContent=r,t(n,"apd-lock");var a=function(){e.timer=setTimeout(function(){0===r?e.unlock():(n.textContent=r-=1,a())},1e3)};a()}},{key:"unlock",value:function(){var e=this.utils.removeClass,t=this.template.$send;clearTimeout(this.timer),this.isLock=!1,t.textContent="发送",e(t,"apd-lock")}},{key:"resize",value:function(){if(!this.outside&&!this.art.fullscreen&&!this.art.fullscreenWeb){var e=this.art.template,t=e.$player,n=e.$controlsCenter,r=this.template.$danmuku;this.art.width'},{}],ilP9j:[function(e,t,n,r){t.exports=''},{}],"9pxJ0":[function(e,t,n,r){t.exports=''},{}],"5tLUB":[function(e,t,n,r){t.exports=''},{}],atPtW:[function(e,t,n,r){t.exports=''},{}],lYyTv:[function(e,t,n,r){t.exports=''},{}],bzdWd:[function(e,t,n,r){t.exports=''},{}],ckFYR:[function(e,t,n,r){t.exports=''},{}],"2vLQf":[function(e,t,n,r){t.exports=''},{}],"95P3w":[function(e,t,n,r){t.exports=''},{}],jLRWo:[function(e,t,n,r){t.exports=''},{}],XRdY2:[function(e,t,n,r){t.exports=''},{}],jWk9o:[function(e,t,n,r){t.exports='.artplayer-plugin-danmuku{z-index:99;color:#fff;flex-shrink:0;justify-content:center;align-items:center;gap:10px;width:100%;height:32px;font-size:12px;font-weight:300;display:flex;position:relative}.artplayer-plugin-danmuku .apd-icon{cursor:pointer;opacity:.75;fill:#fff;transition:all .2s}.artplayer-plugin-danmuku .apd-icon:hover{opacity:1}.artplayer-plugin-danmuku .apd-config{display:flex;position:relative}.artplayer-plugin-danmuku .apd-config .apd-config-panel{opacity:0;pointer-events:none;width:320px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-config .apd-config-panel .apd-config-panel-inner{background-color:rgba(0,0,0,.85);border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-config:hover .apd-config-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-config-mode,.artplayer-plugin-danmuku .apd-config-slider,.artplayer-plugin-danmuku .apd-config-other,.artplayer-plugin-danmuku .apd-style-mode{margin-bottom:15px}.artplayer-plugin-danmuku .apd-modes{align-items:center;gap:20px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-modes .apd-mode{cursor:pointer;text-align:center}.artplayer-plugin-danmuku .apd-modes .apd-mode:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-config-slider{align-items:center;gap:12px;display:flex}.artplayer-plugin-danmuku .apd-config-slider .apd-value{text-align:right;width:32px}.artplayer-plugin-danmuku .apd-slider{cursor:pointer;flex:1;justify-content:center;align-items:center;height:20px;display:flex;position:relative}.artplayer-plugin-danmuku .apd-slider .apd-slider-line{background-color:rgba(255,255,255,.25);border-radius:3px;width:100%;height:2px;position:relative;overflow:hidden}.artplayer-plugin-danmuku .apd-slider .apd-slider-points{justify-content:space-between;align-items:center;display:flex;position:absolute;top:0;bottom:0;left:0;right:0}.artplayer-plugin-danmuku .apd-slider .apd-slider-points .apd-slider-point{background-color:rgba(255,255,255,.5);border-radius:50%;width:2px;height:2px}.artplayer-plugin-danmuku .apd-slider .apd-slider-progress{background-color:#00a1d6;width:0%;height:100%}.artplayer-plugin-danmuku .apd-slider .apd-slider-dot{background-color:#00a1d6;border-radius:50%;width:12px;height:12px;position:absolute;left:0%;transform:translate(-6px)}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps{color:#777;justify-content:space-between;align-items:center;width:calc(100% + 32px);display:flex;position:absolute;bottom:-12px}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps .apd-slider-step{text-align:center;flex-shrink:0;width:36px;scale:.95}.artplayer-plugin-danmuku .apd-config-other{align-items:center;gap:20px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-check-off,.artplayer-plugin-danmuku .apd-config-other .apd-check-on{width:16px;height:16px}.artplayer-plugin-danmuku .apd-config-other .apd-other{cursor:pointer;align-items:center;gap:2px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-other:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-emitter{background-color:rgba(255,255,255,.25);border-radius:5px;flex:1;align-items:center;height:100%;display:flex}.artplayer-plugin-danmuku .apd-style{justify-content:center;align-items:center;display:flex;position:relative}.artplayer-plugin-danmuku .apd-style .apd-style-panel{opacity:0;pointer-events:none;width:200px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-style .apd-style-panel .apd-style-panel-inner{background-color:rgba(0,0,0,.85);border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-style:hover .apd-style-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-colors{flex-wrap:wrap;gap:8px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-colors .apd-color{cursor:pointer;border-radius:2px;width:16px;height:16px}.artplayer-plugin-danmuku .apd-colors .apd-color.apd-active{border:1px solid #000;box-shadow:0 0 0 1px #fff}.artplayer-plugin-danmuku .apd-input{color:#fff;background-color:transparent;border:none;outline:none;flex:1;width:auto;min-width:0;height:100%;line-height:1}.artplayer-plugin-danmuku .apd-input::placeholder{color:rgba(255,255,255,.5)}.artplayer-plugin-danmuku .apd-input::placeholder{color:rgba(255,255,255,.5)}.artplayer-plugin-danmuku .apd-send{cursor:pointer;width:60px;height:100%;text-shadow:none;background-color:#00a1d6;border-top-right-radius:5px;border-bottom-right-radius:5px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.artplayer-plugin-danmuku .apd-send.apd-lock{cursor:not-allowed;color:#666;background-color:#e7e7e7}.art-controls-center .apd-emitter{flex:none;width:260px}.art-fullscreen .artplayer-plugin-danmuku,.art-fullscreen-web .artplayer-plugin-danmuku{gap:16px;height:38px}.art-fullscreen .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen-web .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-on,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-on{width:28px;height:28px}.art-fullscreen .artplayer-plugin-danmuku .apd-emitter,.art-fullscreen-web .artplayer-plugin-danmuku .apd-emitter{flex:none;width:400px}.art-video-player>.artplayer-plugin-danmuku{padding:0 10px;position:absolute;bottom:-40px;left:0;right:0}.art-video-player:has(>.artplayer-plugin-danmuku){margin-bottom:40px}[data-danmuku-emitter=false] .apd-emitter{display:none!important}[data-danmuku-emitter=false] .art-controls-center .artplayer-plugin-danmuku{justify-content:flex-end;gap:18px}[data-danmuku-emitter=false].art-fullscreen .art-controls-center .artplayer-plugin-danmuku,[data-danmuku-emitter=false].art-fullscreen-web .art-controls-center .artplayer-plugin-danmuku{gap:24px}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-icon{fill:#333}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-emitter{background-color:#f1f2f3}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input{color:#000}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input::placeholder{color:rgba(0,0,0,.3)}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input::placeholder{color:rgba(0,0,0,.3)}[data-danmuku-visible=false] .apd-toggle-off{display:block}[data-danmuku-visible=false] .apd-toggle-on,[data-danmuku-visible=true] .apd-toggle-off{display:none}[data-danmuku-visible=true] .apd-toggle-on{display:block}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-on{display:none}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-off,[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-on{display:block}[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-off,[data-danmuku-sync-video=false] .apd-sync-video .apd-check-on{display:none}[data-danmuku-sync-video=false] .apd-sync-video .apd-check-off,[data-danmuku-sync-video=true] .apd-sync-video .apd-check-on{display:block}[data-danmuku-sync-video=true] .apd-sync-video .apd-check-off{display:none}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-off{display:block}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-on{display:none}[data-danmuku-mode0=false] .art-danmuku [data-mode="0"]{opacity:0!important}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-off{display:none}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-on{display:block}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"]{color:#00a1d6}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"] path{fill:#00a1d6}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-off{display:block}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-on{display:none}[data-danmuku-mode1=false] .art-danmuku [data-mode="1"]{opacity:0!important}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-off{display:none}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-on{display:block}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"]{color:#00a1d6}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"] path{fill:#00a1d6}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-off{display:block}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-on{display:none}[data-danmuku-mode2=false] .art-danmuku [data-mode="2"]{opacity:0!important}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-off{display:none}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-on{display:block}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"]{color:#00a1d6}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"] path{fill:#00a1d6}'},{}]},["l3CkF"],"l3CkF","parcelRequire4dc0",{}); \ No newline at end of file diff --git a/docs/document/404.html b/docs/document/404.html index c1038d9c1..9134b7640 100644 --- a/docs/document/404.html +++ b/docs/document/404.html @@ -21,7 +21,7 @@
- + \ No newline at end of file diff --git a/docs/document/advanced/built-in.html b/docs/document/advanced/built-in.html index 30c058392..e7f0caac6 100644 --- a/docs/document/advanced/built-in.html +++ b/docs/document/advanced/built-in.html @@ -206,7 +206,7 @@ art.on('ready', () => { art.plugins.add(myPlugin); }); - + \ No newline at end of file diff --git a/docs/document/advanced/class.html b/docs/document/advanced/class.html index 96ab64691..32606a755 100644 --- a/docs/document/advanced/class.html +++ b/docs/document/advanced/class.html @@ -31,7 +31,7 @@ }); console.info([...Artplayer.instances]);

version ​

返回播放器的版本信息

▶ Run Code
js
console.info(Artplayer.version);

env ​

返回播放器的环境变量

▶ Run Code
js
console.info(Artplayer.env);

build ​

返回播放器的打包时间

▶ Run Code
js
console.info(Artplayer.build);

config ​

返回视频的默认配置

▶ Run Code
js
console.info(Artplayer.config);

utils ​

返回播放器的工具函数集合

▶ Run Code
js
console.info(Artplayer.utils);

全部工具函数请参考以下地址:

artplayer/types/utils.d.ts

scheme ​

返回播放器选项的校验方案

▶ Run Code
js
console.info(Artplayer.scheme);

Emitter ​

返回事件分发器的构造函数

▶ Run Code
js
console.info(Artplayer.Emitter);

validator ​

返回选项的校验函数

▶ Run Code
js
console.info(Artplayer.validator);

kindOf ​

返回类型检测的函数工具

▶ Run Code
js
console.info(Artplayer.kindOf);

html ​

返回播放器所需的 html 字符串

▶ Run Code
js
console.info(Artplayer.html);

option ​

返回播放器的默认选项

▶ Run Code
js
console.info(Artplayer.option);
- + \ No newline at end of file diff --git a/docs/document/advanced/event.html b/docs/document/advanced/event.html index 088ec8005..c326eb28c 100644 --- a/docs/document/advanced/event.html +++ b/docs/document/advanced/event.html @@ -385,7 +385,7 @@ art.on('keydown', (event) => { console.log(event.code); });

video:canplay ​

浏览器可以播放媒体文件了,但估计没有足够的数据来支撑播放到结束,不必停下来进一步缓冲内容

video:canplaythrough ​

浏览器估计它可以在不停止内容缓冲的情况下播放媒体直到结束

video:complete ​

OfflineAudioContext 渲染完成

video:durationchange ​

duration 属性的值改变时触发

video:emptied ​

媒体内容变为空;例如,当这个 media 已经加载完成(或者部分加载完成),则发送此事件,并调用 load() 方法重新加载它

video:ended ​

视频停止播放,因为 media 已经到达结束点

video:error ​

获取媒体数据时出错,或者资源类型不是受支持的媒体格式

video:loadeddata ​

media 中的首帧已经完成加载

video:loadedmetadata ​

已加载元数据

video:pause ​

播放已暂停

video:play ​

播放已开始

video:playing ​

由于缺乏数据而暂停或延迟后,播放准备开始

video:progress ​

在浏览器加载资源时周期性触发

video:ratechange ​

播放速率发生变化

video:seeked ​

跳帧(seek)操作完成

video:seeking ​

跳帧(seek)操作开始

video:stalled ​

用户代理(user agent)正在尝试获取媒体数据,但数据意外未出现

video:suspend ​

媒体数据加载已暂停

video:timeupdate ​

currentTime 属性指定的时间发生变化

video:volumechange ​

音量发生变化

video:waiting ​

由于暂时缺少数据,播放已停止

- + \ No newline at end of file diff --git a/docs/document/advanced/global.html b/docs/document/advanced/global.html index c70680a5c..6b84628d3 100644 --- a/docs/document/advanced/global.html +++ b/docs/document/advanced/global.html @@ -240,7 +240,7 @@ url: '/assets/sample/video.mp4', miniProgressBar: true, }); - + \ No newline at end of file diff --git a/docs/document/advanced/plugin.html b/docs/document/advanced/plugin.html index fbb167390..0f149a165 100644 --- a/docs/document/advanced/plugin.html +++ b/docs/document/advanced/plugin.html @@ -122,7 +122,7 @@ }) ], }); - + \ No newline at end of file diff --git a/docs/document/advanced/property.html b/docs/document/advanced/property.html index 4c55dff09..c01c1566e 100644 --- a/docs/document/advanced/property.html +++ b/docs/document/advanced/property.html @@ -427,7 +427,7 @@ art.on('ready', () => { art.subtitleOffset = 1; }); - + \ No newline at end of file diff --git a/docs/document/assets/en_index.md.CofAV5RQ.js b/docs/document/assets/en_index.md.CMmxHsOC.js similarity index 98% rename from docs/document/assets/en_index.md.CofAV5RQ.js rename to docs/document/assets/en_index.md.CMmxHsOC.js index 99239b280..5debd3c10 100644 --- a/docs/document/assets/en_index.md.CofAV5RQ.js +++ b/docs/document/assets/en_index.md.CMmxHsOC.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Installation and Usage","description":"","frontmatter":{},"headers":[],"relativePath":"en/index.md","filePath":"en/index.md","lastUpdated":1754013470000}'),p={name:"en/index.md"};function t(e,s,h,k,r,E){return n(),a("div",null,s[0]||(s[0]=[l(`

Installation and Usage ​

Installation ​

bash
npm install artplayer
bash
yarn add artplayer
bash
pnpm add artplayer
html
<script src="path/to/artplayer.js"></script>

CDN ​

bash
https://cdn.jsdelivr.net/npm/artplayer/dist/artplayer.js
bash
https://unpkg.com/artplayer/dist/artplayer.js

Usage ​

html
<html>
+import{_ as i,c as a,o as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Installation and Usage","description":"","frontmatter":{},"headers":[],"relativePath":"en/index.md","filePath":"en/index.md","lastUpdated":1754013470000}'),p={name:"en/index.md"};function t(e,s,h,k,r,E){return n(),a("div",null,s[0]||(s[0]=[l(`

Installation and Usage ​

Installation ​

bash
npm install artplayer
bash
yarn add artplayer
bash
pnpm add artplayer
html
<script src="path/to/artplayer.js"></script>

CDN ​

bash
https://cdn.jsdelivr.net/npm/artplayer/dist/artplayer.js
bash
https://unpkg.com/artplayer/dist/artplayer.js

Usage ​

html
<html>
     <head>
         <title>ArtPlayer Demo</title>
         <meta charset="UTF-8" />
@@ -19,7 +19,7 @@ import{_ as i,c as a,o as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g
           });
         </script>
     </body>
-</html>

Warning

The player's size depends on the size of the container container, so your container container must have a size.

You can find more usage examples at the link below

/packages/artplayer-template

Vue.js ​

vue
<template>
+</html>

Warning

The player's size depends on the size of the container container, so your container container must have a size.

You can find more usage examples at the link below

/packages/artplayer-template

Vue.js ​

vue
<template>
   <div ref="artRef"></div>
 </template>
 
@@ -83,7 +83,7 @@ import{_ as i,c as a,o as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g
     },
   },
 };
-</script>

Artplayer Not Responsive:

Modifying option directly in Vue.js will not change the player

React.js ​

jsx
import { useEffect, useRef } from 'react';
+</script>

Artplayer Not Responsive:

Modifying option directly in Vue.js will not change the player

React.js ​

jsx
import { useEffect, useRef } from 'react';
 import Artplayer from 'artplayer';
 
 export default function Player({ option, getInstance, ...rest }) {
@@ -171,7 +171,7 @@ import{_ as i,c as a,o as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g
 
 option.volume = 0.5;
 
-const art8 = new Artplayer(option);

Ancient Browsers ​

The production build of artplayer.js is only compatible with the latest major version of Chrome: last 1 Chrome version

For ancient browsers, you can use the artplayer.legacy.js file, which is compatible up to: IE 11

js
import Artplayer from 'artplayer/dist/artplayer.legacy.js';
bash
https://cdn.jsdelivr.net/npm/artplayer/dist/artplayer.legacy.js
bash
https://unpkg.com/artplayer/dist/artplayer.legacy.js

If you need to support even older browsers, please modify the following configuration and then build it yourself:

Build configuration: scripts/build.js

Refer to documentation: browserslist

ECMAScript Module ​

Starting from 5.2.4, artplayer and all plugins will also provide an ESM version of js, such as:

  • artplayer/dist/artplayer.esm.js
  • artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.esm.js
html
<!DOCTYPE html>
+const art8 = new Artplayer(option);

Ancient Browsers ​

The production build of artplayer.js is only compatible with the latest major version of Chrome: last 1 Chrome version

For ancient browsers, you can use the artplayer.legacy.js file, which is compatible up to: IE 11

js
import Artplayer from 'artplayer/dist/artplayer.legacy.js';
bash
https://cdn.jsdelivr.net/npm/artplayer/dist/artplayer.legacy.js
bash
https://unpkg.com/artplayer/dist/artplayer.legacy.js

If you need to support even older browsers, please modify the following configuration and then build it yourself:

Build configuration: scripts/build.js

Refer to documentation: browserslist

ECMAScript Module ​

Starting from 5.2.4, artplayer and all plugins will also provide an ESM version of js, such as:

  • artplayer/dist/artplayer.esm.js
  • artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.esm.js
html
<!DOCTYPE html>
 <html lang="en">
 
 <head>
diff --git a/docs/document/assets/en_index.md.CofAV5RQ.lean.js b/docs/document/assets/en_index.md.CMmxHsOC.lean.js
similarity index 100%
rename from docs/document/assets/en_index.md.CofAV5RQ.lean.js
rename to docs/document/assets/en_index.md.CMmxHsOC.lean.js
diff --git a/docs/document/assets/en_start_i18n.md.r8QyjGkb.js b/docs/document/assets/en_start_i18n.md.zsx96Hk5.js
similarity index 98%
rename from docs/document/assets/en_start_i18n.md.r8QyjGkb.js
rename to docs/document/assets/en_start_i18n.md.zsx96Hk5.js
index 2599b1021..7c5aa74a3 100644
--- a/docs/document/assets/en_start_i18n.md.r8QyjGkb.js
+++ b/docs/document/assets/en_start_i18n.md.zsx96Hk5.js
@@ -2,7 +2,7 @@ import{_ as a,c as i,o as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g
     container: '.artplayer-app',
     url: '/assets/sample/video.mp4',
     lang: 'zh-cn', // or 'en'
-});

Importing Languages ​

Language files before packaging are located in: artplayer/src/i18n/*.js. You are welcome to add your language. Packaged language files are located at: artplayer/dist/i18n/*.js

js
import id from 'artplayer/dist/i18n/id.js';
+});

Importing Languages ​

Language files before packaging are located in: artplayer/src/i18n/*.js. You are welcome to add your language. Packaged language files are located at: artplayer/dist/i18n/*.js

js
import id from 'artplayer/dist/i18n/id.js';
 import zhTw from 'artplayer/dist/i18n/zh-tw.js';
 
 var art = new Artplayer({
diff --git a/docs/document/assets/en_start_i18n.md.r8QyjGkb.lean.js b/docs/document/assets/en_start_i18n.md.zsx96Hk5.lean.js
similarity index 100%
rename from docs/document/assets/en_start_i18n.md.r8QyjGkb.lean.js
rename to docs/document/assets/en_start_i18n.md.zsx96Hk5.lean.js
diff --git a/docs/document/assets/index.md.CY_kSBzI.js b/docs/document/assets/index.md.8qqrK4z3.js
similarity index 98%
rename from docs/document/assets/index.md.CY_kSBzI.js
rename to docs/document/assets/index.md.8qqrK4z3.js
index df100b46e..4c0194f96 100644
--- a/docs/document/assets/index.md.CY_kSBzI.js
+++ b/docs/document/assets/index.md.8qqrK4z3.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"安装使用","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1754013470000}'),p={name:"index.md"};function t(e,s,h,k,r,E){return n(),a("div",null,s[0]||(s[0]=[l(`

安装使用 ​

安装 ​

bash
npm install artplayer
bash
yarn add artplayer
bash
pnpm add artplayer
html
<script src="path/to/artplayer.js"></script>

CDN ​

bash
https://cdn.jsdelivr.net/npm/artplayer/dist/artplayer.js
bash
https://unpkg.com/artplayer/dist/artplayer.js

使用 ​

html
<html>
+import{_ as i,c as a,o as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"安装使用","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1754013470000}'),p={name:"index.md"};function t(e,s,h,k,r,E){return n(),a("div",null,s[0]||(s[0]=[l(`

安装使用 ​

安装 ​

bash
npm install artplayer
bash
yarn add artplayer
bash
pnpm add artplayer
html
<script src="path/to/artplayer.js"></script>

CDN ​

bash
https://cdn.jsdelivr.net/npm/artplayer/dist/artplayer.js
bash
https://unpkg.com/artplayer/dist/artplayer.js

使用 ​

html
<html>
     <head>
         <title>ArtPlayer Demo</title>
         <meta charset="UTF-8" />
@@ -19,7 +19,7 @@ import{_ as i,c as a,o as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g
           });
         </script>
     </body>
-</html>

提示

播放器的尺寸依赖于容器 container 的尺寸,所以你的容器 container 必须是有尺寸的

以下链接可以看到更多的使用例子

/packages/artplayer-template

Vue.js ​

vue
<template>
+</html>

提示

播放器的尺寸依赖于容器 container 的尺寸,所以你的容器 container 必须是有尺寸的

以下链接可以看到更多的使用例子

/packages/artplayer-template

Vue.js ​

vue
<template>
   <div ref="artRef"></div>
 </template>
 
@@ -83,7 +83,7 @@ import{_ as i,c as a,o as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g
     },
   },
 };
-</script>

Artplayer 非响应式:

在 Vue.js 里直接修改 option 是不会改变播放器的

React.js ​

jsx
import { useEffect, useRef } from 'react';
+</script>

Artplayer 非响应式:

在 Vue.js 里直接修改 option 是不会改变播放器的

React.js ​

jsx
import { useEffect, useRef } from 'react';
 import Artplayer from 'artplayer';
 
 export default function Player({ option, getInstance, ...rest }) {
@@ -171,7 +171,7 @@ import{_ as i,c as a,o as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g
 
 option.volume = 0.5;
 
-const art8 = new Artplayer(option);

古老的浏览器 ​

生产构建的 artplayer.js 只兼容最新一个主版本的 Chrome:last 1 Chrome version

对于古老的浏览器,可以使用 artplayer.legacy.js 文件,可以兼容到:IE 11

js
import Artplayer from 'artplayer/dist/artplayer.legacy.js';
bash
https://cdn.jsdelivr.net/npm/artplayer/dist/artplayer.legacy.js
bash
https://unpkg.com/artplayer/dist/artplayer.legacy.js

假如你要兼容更古老的浏览器时,请修改以下配置然后自行构建:

构建配置:scripts/build.js

参考文档:browserslist

ECMAScript Module ​

从 5.2.4 开始,artplayer和所有插件还会提供一个ESM版本的js,如:

  • artplayer/dist/artplayer.esm.js
  • artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.esm.js
html
<!DOCTYPE html>
+const art8 = new Artplayer(option);

古老的浏览器 ​

生产构建的 artplayer.js 只兼容最新一个主版本的 Chrome:last 1 Chrome version

对于古老的浏览器,可以使用 artplayer.legacy.js 文件,可以兼容到:IE 11

js
import Artplayer from 'artplayer/dist/artplayer.legacy.js';
bash
https://cdn.jsdelivr.net/npm/artplayer/dist/artplayer.legacy.js
bash
https://unpkg.com/artplayer/dist/artplayer.legacy.js

假如你要兼容更古老的浏览器时,请修改以下配置然后自行构建:

构建配置:scripts/build.js

参考文档:browserslist

ECMAScript Module ​

从 5.2.4 开始,artplayer和所有插件还会提供一个ESM版本的js,如:

  • artplayer/dist/artplayer.esm.js
  • artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.esm.js
html
<!DOCTYPE html>
 <html lang="en">
 
 <head>
diff --git a/docs/document/assets/index.md.CY_kSBzI.lean.js b/docs/document/assets/index.md.8qqrK4z3.lean.js
similarity index 100%
rename from docs/document/assets/index.md.CY_kSBzI.lean.js
rename to docs/document/assets/index.md.8qqrK4z3.lean.js
diff --git a/docs/document/assets/plugin_danmuku.md.U_aTqgT5.js b/docs/document/assets/plugin_danmuku.md.DNoeLsr7.js
similarity index 99%
rename from docs/document/assets/plugin_danmuku.md.U_aTqgT5.js
rename to docs/document/assets/plugin_danmuku.md.DNoeLsr7.js
index cc82c416a..1cf41d3b6 100644
--- a/docs/document/assets/plugin_danmuku.md.U_aTqgT5.js
+++ b/docs/document/assets/plugin_danmuku.md.DNoeLsr7.js
@@ -1,4 +1,4 @@
-import{_ as n,c as l,o as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const y=JSON.parse('{"title":"弹幕库","description":"","frontmatter":{},"headers":[],"relativePath":"plugin/danmuku.md","filePath":"plugin/danmuku.md","lastUpdated":1734270991000}'),h={name:"plugin/danmuku.md"};function e(k,a,t,r,E,d){return p(),l("div",null,a[0]||(a[0]=[s(`

弹幕库 ​

演示 ​

👉 查看完整演示

安装 ​

bash
npm install artplayer-plugin-danmuku
bash
yarn add artplayer-plugin-danmuku
bash
pnpm add artplayer-plugin-danmuku
html
<script src="path/to/artplayer-plugin-danmuku.js"></script>

CDN ​

bash
https://cdn.jsdelivr.net/npm/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.js
bash
https://unpkg.com/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.js

弹幕结构 ​

每一个弹幕是一个对象,多个弹幕组成的数组就是弹幕库,通常只需要text就可以发送一个弹幕,其余都是非必要参数

js
{
+import{_ as n,c as l,o as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const y=JSON.parse('{"title":"弹幕库","description":"","frontmatter":{},"headers":[],"relativePath":"plugin/danmuku.md","filePath":"plugin/danmuku.md","lastUpdated":1734270991000}'),h={name:"plugin/danmuku.md"};function e(k,a,t,r,E,d){return p(),l("div",null,a[0]||(a[0]=[s(`

弹幕库 ​

演示 ​

👉 查看完整演示

安装 ​

bash
npm install artplayer-plugin-danmuku
bash
yarn add artplayer-plugin-danmuku
bash
pnpm add artplayer-plugin-danmuku
html
<script src="path/to/artplayer-plugin-danmuku.js"></script>

CDN ​

bash
https://cdn.jsdelivr.net/npm/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.js
bash
https://unpkg.com/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.js

弹幕结构 ​

每一个弹幕是一个对象,多个弹幕组成的数组就是弹幕库,通常只需要text就可以发送一个弹幕,其余都是非必要参数

js
{
     text: '', // 弹幕文本
     time: 10, // 弹幕时间, 默认为当前播放器时间
     mode: 0, // 弹幕模式: 0: 滚动(默认),1: 顶部,2: 底部
diff --git a/docs/document/assets/plugin_danmuku.md.U_aTqgT5.lean.js b/docs/document/assets/plugin_danmuku.md.DNoeLsr7.lean.js
similarity index 100%
rename from docs/document/assets/plugin_danmuku.md.U_aTqgT5.lean.js
rename to docs/document/assets/plugin_danmuku.md.DNoeLsr7.lean.js
diff --git a/docs/document/assets/start_i18n.md.C2GGh_gj.js b/docs/document/assets/start_i18n.md.m1IFl0Jd.js
similarity index 98%
rename from docs/document/assets/start_i18n.md.C2GGh_gj.js
rename to docs/document/assets/start_i18n.md.m1IFl0Jd.js
index 08a467b7e..fb6f7f1ee 100644
--- a/docs/document/assets/start_i18n.md.C2GGh_gj.js
+++ b/docs/document/assets/start_i18n.md.m1IFl0Jd.js
@@ -2,7 +2,7 @@ import{_ as a,c as i,o as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const c
     container: '.artplayer-app',
     url: '/assets/sample/video.mp4',
     lang: 'zh-cn', // or 'en'
-});

导入语言 ​

打包前的语言文件存放于: artplayer/src/i18n/*.js, 欢迎来添加你的语言

打包后的语言文件存放于: artplayer/dist/i18n/*.js

js
import id from 'artplayer/dist/i18n/id.js';
+});

导入语言 ​

打包前的语言文件存放于: artplayer/src/i18n/*.js, 欢迎来添加你的语言

打包后的语言文件存放于: artplayer/dist/i18n/*.js

js
import id from 'artplayer/dist/i18n/id.js';
 import zhTw from 'artplayer/dist/i18n/zh-tw.js';
 
 var art = new Artplayer({
diff --git a/docs/document/assets/start_i18n.md.C2GGh_gj.lean.js b/docs/document/assets/start_i18n.md.m1IFl0Jd.lean.js
similarity index 100%
rename from docs/document/assets/start_i18n.md.C2GGh_gj.lean.js
rename to docs/document/assets/start_i18n.md.m1IFl0Jd.lean.js
diff --git a/docs/document/component/contextmenu.html b/docs/document/component/contextmenu.html
index 4a9ffb5ea..a3ab37451 100644
--- a/docs/document/component/contextmenu.html
+++ b/docs/document/component/contextmenu.html
@@ -106,7 +106,7 @@
         })
     }, 3000);
 });
- + \ No newline at end of file diff --git a/docs/document/component/controls.html b/docs/document/component/controls.html index 933987dba..28f2c486e 100644 --- a/docs/document/component/controls.html +++ b/docs/document/component/controls.html @@ -153,7 +153,7 @@ }); }, 3000); });
- + \ No newline at end of file diff --git a/docs/document/component/layers.html b/docs/document/component/layers.html index 0fd14c3cc..29e8f7066 100644 --- a/docs/document/component/layers.html +++ b/docs/document/component/layers.html @@ -125,7 +125,7 @@ }); }, 3000); }); - + \ No newline at end of file diff --git a/docs/document/component/setting.html b/docs/document/component/setting.html index c6028962b..af45d08ec 100644 --- a/docs/document/component/setting.html +++ b/docs/document/component/setting.html @@ -245,7 +245,7 @@ }); }, 3000); }); - + \ No newline at end of file diff --git a/docs/document/en/advanced/built-in.html b/docs/document/en/advanced/built-in.html index bd797034e..271f7bc41 100644 --- a/docs/document/en/advanced/built-in.html +++ b/docs/document/en/advanced/built-in.html @@ -206,7 +206,7 @@ art.on('ready', () => { art.plugins.add(myPlugin); }); - + \ No newline at end of file diff --git a/docs/document/en/advanced/class.html b/docs/document/en/advanced/class.html index 14e582069..896644cd8 100644 --- a/docs/document/en/advanced/class.html +++ b/docs/document/en/advanced/class.html @@ -31,7 +31,7 @@ }); console.info([...Artplayer.instances]);

version ​

Returns the version information of the player.

▶ Run Code
js
console.info(Artplayer.version);

env ​

Returns the environment variables of the player.

▶ Run Code
js
console.info(Artplayer.env);

build ​

Returns the build time of the player

▶ Run Code
js
console.info(Artplayer.build);

config ​

Returns the default configuration of the video

▶ Run Code
js
console.info(Artplayer.config);

utils ​

Returns a collection of utility functions for the player

▶ Run Code
js
console.info(Artplayer.utils);

For the full list of utility functions, please refer to the following address:

artplayer/types/utils.d.ts

scheme ​

Returns the validation scheme for the player options

▶ Run Code
js
console.info(Artplayer.scheme);

Emitter ​

Returns the constructor for the event dispatcher

▶ Run Code
js
console.info(Artplayer.Emitter);

validator ​

Returns the validation function for options

▶ Run Code
js
console.info(Artplayer.validator);

kindOf ​

Returns the function tool for type checking

▶ Run Code
js
console.info(Artplayer.kindOf);

html ​

Returns the html string required for the player

▶ Run Code
js
console.info(Artplayer.html);

option ​

Returns the player's default options

▶ Run Code
js
console.info(Artplayer.option);
- + \ No newline at end of file diff --git a/docs/document/en/advanced/event.html b/docs/document/en/advanced/event.html index 3408558ad..a5f7ac844 100644 --- a/docs/document/en/advanced/event.html +++ b/docs/document/en/advanced/event.html @@ -385,7 +385,7 @@ art.on('keydown', (event) => { console.log(event.code); });

video:canplay ​

The browser can play the media file, but estimates there is not enough data to play through to the end without having to stop for further buffering

video:canplaythrough ​

The browser estimates it can play the media through to the end without stopping for content buffering

video:complete ​

OfflineAudioContext rendering is complete

video:durationchange ​

Triggered when the value of the duration property changes

video:emptied ​

The media content becomes empty; for example, when this media has been completely loaded (or partially loaded), this event is sent and the load() method is called to reload it

video:ended ​

The video has stopped because the media reached the end point

video:error ​

An error occurred while fetching media data, or the resource type is not a supported media format

video:loadeddata ​

The first frame of the media has finished loading

video:loadedmetadata ​

Metadata has been loaded

video:pause ​

Playback has been paused

video:play ​

Playback has started

video:playing ​

Playback is ready to start following a pause or delay due to lack of data

video:progress ​

Periodically triggered while the browser is loading resources

video:ratechange ​

The playback rate has changed

video:seeked ​

A seek (frame skipping) operation has completed

video:seeking ​

A seek (frame skipping) operation has started

video:stalled ​

The user agent is trying to fetch media data, but the data unexpectedly has not appeared

video:suspend ​

Media data loading has been suspended

video:timeupdate ​

The time specified by the currentTime attribute has changed

video:volumechange ​

Volume changed

video:waiting ​

Playback has stopped due to temporarily missing data

- + \ No newline at end of file diff --git a/docs/document/en/advanced/global.html b/docs/document/en/advanced/global.html index 552fb57d3..fe9ca19d6 100644 --- a/docs/document/en/advanced/global.html +++ b/docs/document/en/advanced/global.html @@ -245,7 +245,7 @@ url: '/assets/sample/video.mp4', miniProgressBar: true, }); - + \ No newline at end of file diff --git a/docs/document/en/advanced/plugin.html b/docs/document/en/advanced/plugin.html index 37047f609..227978850 100644 --- a/docs/document/en/advanced/plugin.html +++ b/docs/document/en/advanced/plugin.html @@ -122,7 +122,7 @@ }) ], }); - + \ No newline at end of file diff --git a/docs/document/en/advanced/property.html b/docs/document/en/advanced/property.html index de2bcc3b6..05ee7dd98 100644 --- a/docs/document/en/advanced/property.html +++ b/docs/document/en/advanced/property.html @@ -428,7 +428,7 @@ art.on('ready', () => { art.subtitleOffset = 1; }); - + \ No newline at end of file diff --git a/docs/document/en/component/contextmenu.html b/docs/document/en/component/contextmenu.html index 79b1e7469..c665fdb1d 100644 --- a/docs/document/en/component/contextmenu.html +++ b/docs/document/en/component/contextmenu.html @@ -106,7 +106,7 @@ }) }, 3000); }); - + \ No newline at end of file diff --git a/docs/document/en/component/controls.html b/docs/document/en/component/controls.html index 18bfda1e3..3f4abd226 100644 --- a/docs/document/en/component/controls.html +++ b/docs/document/en/component/controls.html @@ -153,7 +153,7 @@ }); }, 3000); }); - + \ No newline at end of file diff --git a/docs/document/en/component/layers.html b/docs/document/en/component/layers.html index 12d308d05..1dc426e73 100644 --- a/docs/document/en/component/layers.html +++ b/docs/document/en/component/layers.html @@ -125,7 +125,7 @@ }); }, 3000); }); - + \ No newline at end of file diff --git a/docs/document/en/component/setting.html b/docs/document/en/component/setting.html index 0ecf751b1..48cb13a20 100644 --- a/docs/document/en/component/setting.html +++ b/docs/document/en/component/setting.html @@ -245,7 +245,7 @@ }); }, 3000); }); - + \ No newline at end of file diff --git a/docs/document/en/index.html b/docs/document/en/index.html index a7f487a0e..a2ed6e504 100644 --- a/docs/document/en/index.html +++ b/docs/document/en/index.html @@ -13,7 +13,7 @@ - + @@ -23,7 +23,7 @@ -
Skip to content

Installation and Usage ​

Installation ​

bash
npm install artplayer
bash
yarn add artplayer
bash
pnpm add artplayer
html
<script src="path/to/artplayer.js"></script>

CDN ​

bash
https://cdn.jsdelivr.net/npm/artplayer/dist/artplayer.js
bash
https://unpkg.com/artplayer/dist/artplayer.js

Usage ​

html
<html>
+    
Skip to content

Installation and Usage ​

Installation ​

bash
npm install artplayer
bash
yarn add artplayer
bash
pnpm add artplayer
html
<script src="path/to/artplayer.js"></script>

CDN ​

bash
https://cdn.jsdelivr.net/npm/artplayer/dist/artplayer.js
bash
https://unpkg.com/artplayer/dist/artplayer.js

Usage ​

html
<html>
     <head>
         <title>ArtPlayer Demo</title>
         <meta charset="UTF-8" />
@@ -44,7 +44,7 @@
           });
         </script>
     </body>
-</html>

Warning

The player's size depends on the size of the container container, so your container container must have a size.

You can find more usage examples at the link below

/packages/artplayer-template

Vue.js ​

vue
<template>
+</html>

Warning

The player's size depends on the size of the container container, so your container container must have a size.

You can find more usage examples at the link below

/packages/artplayer-template

Vue.js ​

vue
<template>
   <div ref="artRef"></div>
 </template>
 
@@ -108,7 +108,7 @@
     },
   },
 };
-</script>

Artplayer Not Responsive:

Modifying option directly in Vue.js will not change the player

React.js ​

jsx
import { useEffect, useRef } from 'react';
+</script>

Artplayer Not Responsive:

Modifying option directly in Vue.js will not change the player

React.js ​

jsx
import { useEffect, useRef } from 'react';
 import Artplayer from 'artplayer';
 
 export default function Player({ option, getInstance, ...rest }) {
@@ -196,7 +196,7 @@
 
 option.volume = 0.5;
 
-const art8 = new Artplayer(option);

Ancient Browsers ​

The production build of artplayer.js is only compatible with the latest major version of Chrome: last 1 Chrome version

For ancient browsers, you can use the artplayer.legacy.js file, which is compatible up to: IE 11

js
import Artplayer from 'artplayer/dist/artplayer.legacy.js';
bash
https://cdn.jsdelivr.net/npm/artplayer/dist/artplayer.legacy.js
bash
https://unpkg.com/artplayer/dist/artplayer.legacy.js

If you need to support even older browsers, please modify the following configuration and then build it yourself:

Build configuration: scripts/build.js

Refer to documentation: browserslist

ECMAScript Module ​

Starting from 5.2.4, artplayer and all plugins will also provide an ESM version of js, such as:

  • artplayer/dist/artplayer.esm.js
  • artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.esm.js
html
<!DOCTYPE html>
+const art8 = new Artplayer(option);

Ancient Browsers ​

The production build of artplayer.js is only compatible with the latest major version of Chrome: last 1 Chrome version

For ancient browsers, you can use the artplayer.legacy.js file, which is compatible up to: IE 11

js
import Artplayer from 'artplayer/dist/artplayer.legacy.js';
bash
https://cdn.jsdelivr.net/npm/artplayer/dist/artplayer.legacy.js
bash
https://unpkg.com/artplayer/dist/artplayer.legacy.js

If you need to support even older browsers, please modify the following configuration and then build it yourself:

Build configuration: scripts/build.js

Refer to documentation: browserslist

ECMAScript Module ​

Starting from 5.2.4, artplayer and all plugins will also provide an ESM version of js, such as:

  • artplayer/dist/artplayer.esm.js
  • artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.esm.js
html
<!DOCTYPE html>
 <html lang="en">
 
 <head>
@@ -254,7 +254,7 @@
         </script>
     </body>
 </html>

Warning

You need to modify it before import the Artplayer for it to take effect

- + \ No newline at end of file diff --git a/docs/document/en/start/i18n.html b/docs/document/en/start/i18n.html index ec9941db3..dd496ac12 100644 --- a/docs/document/en/start/i18n.html +++ b/docs/document/en/start/i18n.html @@ -13,7 +13,7 @@ - + @@ -27,7 +27,7 @@ container: '.artplayer-app', url: '/assets/sample/video.mp4', lang: 'zh-cn', // or 'en' -});

Importing Languages ​

Language files before packaging are located in: artplayer/src/i18n/*.js. You are welcome to add your language. Packaged language files are located at: artplayer/dist/i18n/*.js

js
import id from 'artplayer/dist/i18n/id.js';
+});

Importing Languages ​

Language files before packaging are located in: artplayer/src/i18n/*.js. You are welcome to add your language. Packaged language files are located at: artplayer/dist/i18n/*.js

js
import id from 'artplayer/dist/i18n/id.js';
 import zhTw from 'artplayer/dist/i18n/zh-tw.js';
 
 var art = new Artplayer({
@@ -75,7 +75,7 @@
         },
     },
 });
- + \ No newline at end of file diff --git a/docs/document/en/start/option.html b/docs/document/en/start/option.html index 13a8ec9e2..d8953ad4b 100644 --- a/docs/document/en/start/option.html +++ b/docs/document/en/start/option.html @@ -411,7 +411,7 @@ url: '/assets/sample/video.mp4', proxy: () => document.createElement('video') }); - + \ No newline at end of file diff --git a/docs/document/hashmap.json b/docs/document/hashmap.json index b3dfac521..e30d61271 100644 --- a/docs/document/hashmap.json +++ b/docs/document/hashmap.json @@ -1 +1 @@ -{"advanced_built-in.md":"B5ccy6gK","advanced_class.md":"Da3aE0pP","advanced_event.md":"mrsB0MsK","advanced_global.md":"C-56tmUD","advanced_plugin.md":"B3Pobmcq","advanced_property.md":"D59FnDH1","component_contextmenu.md":"ClKmcIKr","component_controls.md":"Cl62yW1F","component_layers.md":"Cys52VMi","component_setting.md":"BP5674ir","en_advanced_built-in.md":"CY71IZlq","en_advanced_class.md":"C3V-LDO3","en_advanced_event.md":"D5Yv5LYW","en_advanced_global.md":"BbhNIAMt","en_advanced_plugin.md":"hspsx5uD","en_advanced_property.md":"COS94_z7","en_component_contextmenu.md":"DgD64wIy","en_component_controls.md":"Bj2oItzY","en_component_layers.md":"BNGRBNoB","en_component_setting.md":"Dqvlpr4j","en_index.md":"CofAV5RQ","en_start_i18n.md":"r8QyjGkb","en_start_option.md":"6JX4hU8Q","index.md":"CY_kSBzI","plugin_danmuku.md":"U_aTqgT5","start_i18n.md":"C2GGh_gj","start_option.md":"B5CHO-We"} +{"advanced_built-in.md":"B5ccy6gK","advanced_class.md":"Da3aE0pP","advanced_event.md":"mrsB0MsK","advanced_global.md":"C-56tmUD","advanced_plugin.md":"B3Pobmcq","advanced_property.md":"D59FnDH1","component_contextmenu.md":"ClKmcIKr","component_controls.md":"Cl62yW1F","component_layers.md":"Cys52VMi","component_setting.md":"BP5674ir","en_advanced_built-in.md":"CY71IZlq","en_advanced_class.md":"C3V-LDO3","en_advanced_event.md":"D5Yv5LYW","en_advanced_global.md":"BbhNIAMt","en_advanced_plugin.md":"hspsx5uD","en_advanced_property.md":"COS94_z7","en_component_contextmenu.md":"DgD64wIy","en_component_controls.md":"Bj2oItzY","en_component_layers.md":"BNGRBNoB","en_component_setting.md":"Dqvlpr4j","en_index.md":"CMmxHsOC","en_start_i18n.md":"zsx96Hk5","en_start_option.md":"6JX4hU8Q","index.md":"8qqrK4z3","plugin_danmuku.md":"DNoeLsr7","start_i18n.md":"m1IFl0Jd","start_option.md":"B5CHO-We"} diff --git a/docs/document/index.html b/docs/document/index.html index ab4b54112..74ae64e86 100644 --- a/docs/document/index.html +++ b/docs/document/index.html @@ -13,7 +13,7 @@ - + @@ -23,7 +23,7 @@ -
Skip to content

安装使用 ​

安装 ​

bash
npm install artplayer
bash
yarn add artplayer
bash
pnpm add artplayer
html
<script src="path/to/artplayer.js"></script>

CDN ​

bash
https://cdn.jsdelivr.net/npm/artplayer/dist/artplayer.js
bash
https://unpkg.com/artplayer/dist/artplayer.js

使用 ​

html
<html>
+    
Skip to content

安装使用 ​

安装 ​

bash
npm install artplayer
bash
yarn add artplayer
bash
pnpm add artplayer
html
<script src="path/to/artplayer.js"></script>

CDN ​

bash
https://cdn.jsdelivr.net/npm/artplayer/dist/artplayer.js
bash
https://unpkg.com/artplayer/dist/artplayer.js

使用 ​

html
<html>
     <head>
         <title>ArtPlayer Demo</title>
         <meta charset="UTF-8" />
@@ -44,7 +44,7 @@
           });
         </script>
     </body>
-</html>

提示

播放器的尺寸依赖于容器 container 的尺寸,所以你的容器 container 必须是有尺寸的

以下链接可以看到更多的使用例子

/packages/artplayer-template

Vue.js ​

vue
<template>
+</html>

提示

播放器的尺寸依赖于容器 container 的尺寸,所以你的容器 container 必须是有尺寸的

以下链接可以看到更多的使用例子

/packages/artplayer-template

Vue.js ​

vue
<template>
   <div ref="artRef"></div>
 </template>
 
@@ -108,7 +108,7 @@
     },
   },
 };
-</script>

Artplayer 非响应式:

在 Vue.js 里直接修改 option 是不会改变播放器的

React.js ​

jsx
import { useEffect, useRef } from 'react';
+</script>

Artplayer 非响应式:

在 Vue.js 里直接修改 option 是不会改变播放器的

React.js ​

jsx
import { useEffect, useRef } from 'react';
 import Artplayer from 'artplayer';
 
 export default function Player({ option, getInstance, ...rest }) {
@@ -196,7 +196,7 @@
 
 option.volume = 0.5;
 
-const art8 = new Artplayer(option);

古老的浏览器 ​

生产构建的 artplayer.js 只兼容最新一个主版本的 Chrome:last 1 Chrome version

对于古老的浏览器,可以使用 artplayer.legacy.js 文件,可以兼容到:IE 11

js
import Artplayer from 'artplayer/dist/artplayer.legacy.js';
bash
https://cdn.jsdelivr.net/npm/artplayer/dist/artplayer.legacy.js
bash
https://unpkg.com/artplayer/dist/artplayer.legacy.js

假如你要兼容更古老的浏览器时,请修改以下配置然后自行构建:

构建配置:scripts/build.js

参考文档:browserslist

ECMAScript Module ​

从 5.2.4 开始,artplayer和所有插件还会提供一个ESM版本的js,如:

  • artplayer/dist/artplayer.esm.js
  • artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.esm.js
html
<!DOCTYPE html>
+const art8 = new Artplayer(option);

古老的浏览器 ​

生产构建的 artplayer.js 只兼容最新一个主版本的 Chrome:last 1 Chrome version

对于古老的浏览器,可以使用 artplayer.legacy.js 文件,可以兼容到:IE 11

js
import Artplayer from 'artplayer/dist/artplayer.legacy.js';
bash
https://cdn.jsdelivr.net/npm/artplayer/dist/artplayer.legacy.js
bash
https://unpkg.com/artplayer/dist/artplayer.legacy.js

假如你要兼容更古老的浏览器时,请修改以下配置然后自行构建:

构建配置:scripts/build.js

参考文档:browserslist

ECMAScript Module ​

从 5.2.4 开始,artplayer和所有插件还会提供一个ESM版本的js,如:

  • artplayer/dist/artplayer.esm.js
  • artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.esm.js
html
<!DOCTYPE html>
 <html lang="en">
 
 <head>
@@ -254,7 +254,7 @@
         </script>
     </body>
 </html>

提示

你需要在引入 Artplayer 依赖前来修改它才会生效

- + \ No newline at end of file diff --git a/docs/document/plugin/danmuku.html b/docs/document/plugin/danmuku.html index 82515c129..f257d7527 100644 --- a/docs/document/plugin/danmuku.html +++ b/docs/document/plugin/danmuku.html @@ -13,7 +13,7 @@ - + @@ -23,7 +23,7 @@ -
Skip to content

弹幕库 ​

演示 ​

👉 查看完整演示

安装 ​

bash
npm install artplayer-plugin-danmuku
bash
yarn add artplayer-plugin-danmuku
bash
pnpm add artplayer-plugin-danmuku
html
<script src="path/to/artplayer-plugin-danmuku.js"></script>

CDN ​

bash
https://cdn.jsdelivr.net/npm/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.js
bash
https://unpkg.com/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.js

弹幕结构 ​

每一个弹幕是一个对象,多个弹幕组成的数组就是弹幕库,通常只需要text就可以发送一个弹幕,其余都是非必要参数

js
{
+    
Skip to content

弹幕库 ​

演示 ​

👉 查看完整演示

安装 ​

bash
npm install artplayer-plugin-danmuku
bash
yarn add artplayer-plugin-danmuku
bash
pnpm add artplayer-plugin-danmuku
html
<script src="path/to/artplayer-plugin-danmuku.js"></script>

CDN ​

bash
https://cdn.jsdelivr.net/npm/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.js
bash
https://unpkg.com/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.js

弹幕结构 ​

每一个弹幕是一个对象,多个弹幕组成的数组就是弹幕库,通常只需要text就可以发送一个弹幕,其余都是非必要参数

js
{
     text: '', // 弹幕文本
     time: 10, // 弹幕时间, 默认为当前播放器时间
     mode: 0, // 弹幕模式: 0: 滚动(默认),1: 顶部,2: 底部
@@ -367,7 +367,7 @@
 art.on('artplayerPluginDanmuku:destroy', () => {
     console.info('弹幕销毁');
 });
- + \ No newline at end of file diff --git a/docs/document/start/i18n.html b/docs/document/start/i18n.html index 7030922e5..37ddee838 100644 --- a/docs/document/start/i18n.html +++ b/docs/document/start/i18n.html @@ -13,7 +13,7 @@ - + @@ -27,7 +27,7 @@ container: '.artplayer-app', url: '/assets/sample/video.mp4', lang: 'zh-cn', // or 'en' -});

导入语言 ​

打包前的语言文件存放于: artplayer/src/i18n/*.js, 欢迎来添加你的语言

打包后的语言文件存放于: artplayer/dist/i18n/*.js

js
import id from 'artplayer/dist/i18n/id.js';
+});

导入语言 ​

打包前的语言文件存放于: artplayer/src/i18n/*.js, 欢迎来添加你的语言

打包后的语言文件存放于: artplayer/dist/i18n/*.js

js
import id from 'artplayer/dist/i18n/id.js';
 import zhTw from 'artplayer/dist/i18n/zh-tw.js';
 
 var art = new Artplayer({
@@ -75,7 +75,7 @@
         },
     },
 });
- + \ No newline at end of file diff --git a/docs/document/start/option.html b/docs/document/start/option.html index 877881d3c..ddb68cb04 100644 --- a/docs/document/start/option.html +++ b/docs/document/start/option.html @@ -411,7 +411,7 @@ url: '/assets/sample/video.mp4', proxy: () => document.createElement('video') });
- + \ No newline at end of file diff --git a/docs/uncompiled/artplayer/index.js b/docs/uncompiled/artplayer/index.js index 4fcb04487..d89f4f4c2 100644 --- a/docs/uncompiled/artplayer/index.js +++ b/docs/uncompiled/artplayer/index.js @@ -571,7 +571,7 @@ module.exports = ".art-video-player {\n --art-theme: red;\n --art-font-color: }); },{}],"3r4tp":[function(require,module,exports,__globalThis) { -module.exports = JSON.parse("{\"license\":\"MIT\",\"name\":\"artplayer\",\"version\":\"5.2.5\",\"main\":\"dist/artplayer.js\",\"legacy\":\"dist/artplayer.legacy.js\",\"types\":\"types/artplayer.d.ts\",\"homepage\":\"https://artplayer.org\",\"author\":\"Harvey Zack \",\"browserslist\":\"last 1 Chrome version\",\"description\":\"ArtPlayer.js is a modern and full featured HTML5 video player\",\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/zhw2590582/ArtPlayer.git\"},\"bugs\":{\"url\":\"https://github.com/zhw2590582/ArtPlayer/issues\"},\"keywords\":[\"html5\",\"video\",\"player\"],\"dependencies\":{\"option-validator\":\"^2.0.6\"}}"); +module.exports = JSON.parse("{\"name\":\"artplayer\",\"version\":\"5.2.5\",\"description\":\"ArtPlayer.js is a modern and full featured HTML5 video player\",\"author\":\"Harvey Zack \",\"license\":\"MIT\",\"homepage\":\"https://artplayer.org\",\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/zhw2590582/ArtPlayer.git\"},\"bugs\":{\"url\":\"https://github.com/zhw2590582/ArtPlayer/issues\"},\"keywords\":[\"html5\",\"video\",\"player\"],\"main\":\"dist/artplayer.js\",\"legacy\":\"dist/artplayer.legacy.js\",\"types\":\"types/artplayer.d.ts\",\"browserslist\":\"last 1 Chrome version\",\"dependencies\":{\"option-validator\":\"^2.0.6\"}}"); },{}],"1dlGA":[function(require,module,exports,__globalThis) { var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); diff --git a/docs/uncompiled/artplayer/index.js.map b/docs/uncompiled/artplayer/index.js.map index d769b3f2b..84b4fcbf7 100644 --- a/docs/uncompiled/artplayer/index.js.map +++ b/docs/uncompiled/artplayer/index.js.map @@ -1 +1 @@ -{"mappings":"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","sources":["packages/artplayer/src/index.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-1a83ba7b78f9fbad.js","node_modules/option-validator/dist/option-validator.js","packages/artplayer/package.json","packages/artplayer/src/config/index.js","node_modules/@parcel/transformer-js/src/esmodule-helpers.js","packages/artplayer/src/contextmenu/index.js","packages/artplayer/src/utils/index.js","packages/artplayer/src/utils/compatibility.js","packages/artplayer/src/utils/dom.js","packages/artplayer/src/utils/error.js","packages/artplayer/src/utils/file.js","packages/artplayer/src/utils/format.js","packages/artplayer/src/utils/property.js","packages/artplayer/src/utils/subtitle.js","packages/artplayer/src/utils/time.js","packages/artplayer/src/utils/component.js","packages/artplayer/src/scheme/index.js","packages/artplayer/src/contextmenu/aspectRatio.js","packages/artplayer/src/contextmenu/close.js","packages/artplayer/src/contextmenu/flip.js","packages/artplayer/src/contextmenu/info.js","packages/artplayer/src/contextmenu/playbackRate.js","packages/artplayer/src/contextmenu/version.js","packages/artplayer/src/control/index.js","packages/artplayer/src/control/airplay.js","packages/artplayer/src/control/fullscreen.js","packages/artplayer/src/control/fullscreenWeb.js","packages/artplayer/src/control/pip.js","packages/artplayer/src/control/playAndPause.js","packages/artplayer/src/control/progress.js","packages/artplayer/src/control/screenshot.js","packages/artplayer/src/control/setting.js","packages/artplayer/src/control/time.js","packages/artplayer/src/control/volume.js","packages/artplayer/src/events/index.js","packages/artplayer/src/events/clickInit.js","packages/artplayer/src/events/documentInit.js","packages/artplayer/src/events/gestureInit.js","packages/artplayer/src/events/hoverInit.js","packages/artplayer/src/events/moveInit.js","packages/artplayer/src/events/resizeInit.js","packages/artplayer/src/events/updateInit.js","packages/artplayer/src/events/viewInit.js","packages/artplayer/src/hotkey.js","packages/artplayer/src/i18n/index.js","packages/artplayer/src/i18n/zh-cn.js","packages/artplayer/src/icons/index.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-b09787399762439a.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-59d8a32ff494cf26.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-fc0e8ba14b0a205e.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-b6afaee63da94390.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-8306aa2d43f8f518.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-e79e019b9bea702c.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-6e4bd76b89220063.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-11f6581ae841b62a.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-a9b9362d1cb1ddd7.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-d20ee4405f81c2fb.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-e61dc575158bf45c.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-853939c76577d052.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-ed21bae52505e995.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-20be5e3eca70ea32.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-c577d5b2fce8a593.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-ed2c6405abc18237.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-d269c22a6d246bc3.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-9e6243eba3e2ee25.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-8fd0b0f874dbf51e.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-e2d98041510dcc81.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-0b69a45deda02972.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-c89477eca9760866.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-dbc4095e84eeca13.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-3cf7eba38b86f798.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-766dea468868d543.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-ce7336f6ee750446.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-296845b4b0ef3af0.js","packages/artplayer/src/info.js","packages/artplayer/src/layer.js","packages/artplayer/src/loading.js","packages/artplayer/src/mask.js","packages/artplayer/src/notice.js","packages/artplayer/src/player/index.js","packages/artplayer/src/player/airplayMix.js","packages/artplayer/src/player/aspectRatioMix.js","packages/artplayer/src/player/attrMix.js","packages/artplayer/src/player/autoHeightMix.js","packages/artplayer/src/player/autoSizeMix.js","packages/artplayer/src/player/cssVarMix.js","packages/artplayer/src/player/currentTimeMix.js","packages/artplayer/src/player/durationMix.js","packages/artplayer/src/player/eventInit.js","packages/artplayer/src/player/flipMix.js","packages/artplayer/src/player/fullscreenMix.js","packages/artplayer/src/libs/screenfull.js","packages/artplayer/src/player/fullscreenWebMix.js","packages/artplayer/src/player/loadedMix.js","packages/artplayer/src/player/miniMix.js","packages/artplayer/src/player/optionInit.js","packages/artplayer/src/player/pauseMix.js","packages/artplayer/src/player/pipMix.js","packages/artplayer/src/player/playbackRateMix.js","packages/artplayer/src/player/playedMix.js","packages/artplayer/src/player/playingMix.js","packages/artplayer/src/player/playMix.js","packages/artplayer/src/player/posterMix.js","packages/artplayer/src/player/qualityMix.js","packages/artplayer/src/player/rectMix.js","packages/artplayer/src/player/screenshotMix.js","packages/artplayer/src/player/seekMix.js","packages/artplayer/src/player/stateMix.js","packages/artplayer/src/player/subtitleOffsetMix.js","packages/artplayer/src/player/switchMix.js","packages/artplayer/src/player/themeMix.js","packages/artplayer/src/player/thumbnailsMix.js","packages/artplayer/src/player/toggleMix.js","packages/artplayer/src/player/typeMix.js","packages/artplayer/src/player/urlMix.js","packages/artplayer/src/player/volumeMix.js","packages/artplayer/src/plugins/index.js","packages/artplayer/src/plugins/autoOrientation.js","packages/artplayer/src/plugins/autoPlayback.js","packages/artplayer/src/plugins/fastForward.js","packages/artplayer/src/plugins/lock.js","packages/artplayer/src/plugins/miniProgressBar.js","packages/artplayer/src/setting/index.js","packages/artplayer/src/setting/aspectRatio.js","packages/artplayer/src/setting/flip.js","packages/artplayer/src/setting/playbackRate.js","packages/artplayer/src/setting/subtitleOffset.js","packages/artplayer/src/storage.js","packages/artplayer/src/subtitle.js","packages/artplayer/src/template.js","packages/artplayer/src/utils/emitter.js"],"sourcesContent":["import style from 'bundle-text:./style/index.less'\nimport validator from 'option-validator'\nimport { version } from '../package.json'\nimport config from './config'\nimport Contextmenu from './contextmenu'\nimport Control from './control'\nimport Events from './events'\nimport Hotkey from './hotkey'\nimport I18n from './i18n'\nimport Icons from './icons'\nimport Info from './info'\nimport Layer from './layer'\nimport Loading from './loading'\nimport Mask from './mask'\nimport Notice from './notice'\nimport Player from './player'\nimport Plugins from './plugins'\nimport scheme from './scheme'\nimport Setting from './setting'\nimport Storage from './storage'\nimport Subtitle from './subtitle'\nimport Template from './template'\nimport * as utils from './utils'\nimport Emitter from './utils/emitter'\n\nlet id = 0\nconst instances = []\nexport default class Artplayer extends Emitter {\n constructor(option, readyCallback) {\n super()\n\n this.id = ++id\n\n const mergeOption = utils.mergeDeep(Artplayer.option, option)\n mergeOption.container = option.container\n\n this.option = validator(mergeOption, scheme)\n\n this.isLock = false\n this.isReady = false\n this.isFocus = false\n this.isInput = false\n this.isRotate = false\n this.isDestroy = false\n\n this.template = new Template(this)\n this.events = new Events(this)\n this.storage = new Storage(this)\n this.icons = new Icons(this)\n this.i18n = new I18n(this)\n this.notice = new Notice(this)\n this.player = new Player(this)\n this.layers = new Layer(this)\n this.controls = new Control(this)\n this.contextmenu = new Contextmenu(this)\n this.subtitle = new Subtitle(this)\n this.info = new Info(this)\n this.loading = new Loading(this)\n this.hotkey = new Hotkey(this)\n this.mask = new Mask(this)\n this.setting = new Setting(this)\n this.plugins = new Plugins(this)\n\n if (typeof readyCallback === 'function') {\n this.on('ready', () => readyCallback.call(this, this))\n }\n\n if (Artplayer.DEBUG) {\n // eslint-disable-next-line no-console\n const log = msg => console.log(`[ART.${this.id}] -> ${msg}`)\n log(`Version@${Artplayer.version}`)\n for (let index = 0; index < config.events.length; index++) {\n this.on(`video:${config.events[index]}`, event => log(`Event@${event.type}`))\n }\n }\n\n instances.push(this)\n }\n\n static get instances() {\n return instances\n }\n\n static get version() {\n return version\n }\n\n static get config() {\n return config\n }\n\n static get utils() {\n return utils\n }\n\n static get scheme() {\n return scheme\n }\n\n static get Emitter() {\n return Emitter\n }\n\n static get validator() {\n return validator\n }\n\n static get kindOf() {\n return validator.kindOf\n }\n\n static get html() {\n return Template.html\n }\n\n static get option() {\n return {\n id: '',\n container: '#artplayer',\n url: '',\n poster: '',\n type: '',\n theme: '#f00',\n volume: 0.7,\n isLive: false,\n muted: false,\n autoplay: false,\n autoSize: false,\n autoMini: false,\n loop: false,\n flip: false,\n playbackRate: false,\n aspectRatio: false,\n screenshot: false,\n setting: false,\n hotkey: true,\n pip: false,\n mutex: true,\n backdrop: true,\n fullscreen: false,\n fullscreenWeb: false,\n subtitleOffset: false,\n miniProgressBar: false,\n useSSR: false,\n playsInline: true,\n lock: false,\n gesture: true,\n fastForward: false,\n autoPlayback: false,\n autoOrientation: false,\n airplay: false,\n proxy: undefined,\n layers: [],\n contextmenu: [],\n controls: [],\n settings: [],\n quality: [],\n highlight: [],\n plugins: [],\n thumbnails: {\n url: '',\n number: 60,\n column: 10,\n width: 0,\n height: 0,\n scale: 1,\n },\n subtitle: {\n url: '',\n type: '',\n style: {},\n name: '',\n escape: true,\n encoding: 'utf-8',\n onVttLoad: vtt => vtt,\n },\n moreVideoAttr: {\n controls: false,\n preload: utils.isSafari ? 'auto' : 'metadata',\n },\n i18n: {},\n icons: {},\n cssVar: {},\n customType: {},\n lang: navigator?.language.toLowerCase(),\n }\n }\n\n get proxy() {\n return this.events.proxy\n }\n\n get query() {\n return this.template.query\n }\n\n get video() {\n return this.template.$video\n }\n\n destroy(removeHtml = true) {\n this.events.destroy()\n this.template.destroy(removeHtml)\n instances.splice(instances.indexOf(this), 1)\n this.isDestroy = true\n this.emit('destroy')\n }\n}\n\nArtplayer.STYLE = style\nArtplayer.DEBUG = false\nArtplayer.CONTEXTMENU = true\nArtplayer.NOTICE_TIME = 2000\nArtplayer.SETTING_WIDTH = 250\nArtplayer.SETTING_ITEM_WIDTH = 200\nArtplayer.SETTING_ITEM_HEIGHT = 35\nArtplayer.RESIZE_TIME = 200\nArtplayer.SCROLL_TIME = 200\nArtplayer.SCROLL_GAP = 50\nArtplayer.AUTO_PLAYBACK_MAX = 10\nArtplayer.AUTO_PLAYBACK_MIN = 5\nArtplayer.AUTO_PLAYBACK_TIMEOUT = 3000\nArtplayer.RECONNECT_TIME_MAX = 5\nArtplayer.RECONNECT_SLEEP_TIME = 1000\nArtplayer.CONTROL_HIDE_TIME = 3000\nArtplayer.DBCLICK_TIME = 300\nArtplayer.DBCLICK_FULLSCREEN = true\nArtplayer.MOBILE_DBCLICK_PLAY = true\nArtplayer.MOBILE_CLICK_PLAY = false\nArtplayer.AUTO_ORIENTATION_TIME = 200\nArtplayer.INFO_LOOP_TIME = 1000\nArtplayer.FAST_FORWARD_VALUE = 3\nArtplayer.FAST_FORWARD_TIME = 1000\nArtplayer.TOUCH_MOVE_RATIO = 0.5\nArtplayer.VOLUME_STEP = 0.1\nArtplayer.SEEK_STEP = 5\nArtplayer.PLAYBACK_RATE = [0.5, 0.75, 1, 1.25, 1.5, 2]\nArtplayer.ASPECT_RATIO = ['default', '4:3', '16:9']\nArtplayer.FLIP = ['normal', 'horizontal', 'vertical']\nArtplayer.FULLSCREEN_WEB_IN_BODY = false\nArtplayer.LOG_VERSION = true\nArtplayer.USE_RAF = false\n\nif (utils.isBrowser) {\n window.Artplayer = Artplayer\n\n utils.setStyleText('artplayer-style', style)\n\n setTimeout(() => {\n if (Artplayer.LOG_VERSION) {\n // eslint-disable-next-line no-console\n console.log(\n `%c ArtPlayer %c ${Artplayer.version} %c https://artplayer.org`,\n 'color: #fff; background: #5f5f5f',\n 'color: #fff; background: #4bc729',\n '',\n )\n }\n }, 100)\n}\n","module.exports = \"8df583d394494873\";","!function(r,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):r.optionValidator=t()}(this,function(){\"use strict\";function e(r){return(e=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(r){return typeof r}:function(r){return r&&\"function\"==typeof Symbol&&r.constructor===Symbol&&r!==Symbol.prototype?\"symbol\":typeof r})(r)}var n=Object.prototype.toString,c=function(r){if(void 0===r)return\"undefined\";if(null===r)return\"null\";var t=e(r);if(\"boolean\"===t)return\"boolean\";if(\"string\"===t)return\"string\";if(\"number\"===t)return\"number\";if(\"symbol\"===t)return\"symbol\";if(\"function\"===t)return function(r){return\"GeneratorFunction\"===o(r)}(r)?\"generatorfunction\":\"function\";if(function(r){return Array.isArray?Array.isArray(r):r instanceof Array}(r))return\"array\";if(function(r){if(r.constructor&&\"function\"==typeof r.constructor.isBuffer)return r.constructor.isBuffer(r);return!1}(r))return\"buffer\";if(function(r){try{if(\"number\"==typeof r.length&&\"function\"==typeof r.callee)return!0}catch(r){if(-1!==r.message.indexOf(\"callee\"))return!0}return!1}(r))return\"arguments\";if(function(r){return r instanceof Date||\"function\"==typeof r.toDateString&&\"function\"==typeof r.getDate&&\"function\"==typeof r.setDate}(r))return\"date\";if(function(r){return r instanceof Error||\"string\"==typeof r.message&&r.constructor&&\"number\"==typeof r.constructor.stackTraceLimit}(r))return\"error\";if(function(r){return r instanceof RegExp||\"string\"==typeof r.flags&&\"boolean\"==typeof r.ignoreCase&&\"boolean\"==typeof r.multiline&&\"boolean\"==typeof r.global}(r))return\"regexp\";switch(o(r)){case\"Symbol\":return\"symbol\";case\"Promise\":return\"promise\";case\"WeakMap\":return\"weakmap\";case\"WeakSet\":return\"weakset\";case\"Map\":return\"map\";case\"Set\":return\"set\";case\"Int8Array\":return\"int8array\";case\"Uint8Array\":return\"uint8array\";case\"Uint8ClampedArray\":return\"uint8clampedarray\";case\"Int16Array\":return\"int16array\";case\"Uint16Array\":return\"uint16array\";case\"Int32Array\":return\"int32array\";case\"Uint32Array\":return\"uint32array\";case\"Float32Array\":return\"float32array\";case\"Float64Array\":return\"float64array\"}if(function(r){return\"function\"==typeof r.throw&&\"function\"==typeof r.return&&\"function\"==typeof r.next}(r))return\"generator\";switch(t=n.call(r)){case\"[object Object]\":return\"object\";case\"[object Map Iterator]\":return\"mapiterator\";case\"[object Set Iterator]\":return\"setiterator\";case\"[object String Iterator]\":return\"stringiterator\";case\"[object Array Iterator]\":return\"arrayiterator\"}return t.slice(8,-1).toLowerCase().replace(/\\s/g,\"\")};function o(r){return r.constructor?r.constructor.name:null}function f(r,t){var e=2\",\n \"browserslist\": \"last 1 Chrome version\",\n \"description\": \"ArtPlayer.js is a modern and full featured HTML5 video player\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/zhw2590582/ArtPlayer.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/zhw2590582/ArtPlayer/issues\"\n },\n \"keywords\": [\n \"html5\",\n \"video\",\n \"player\"\n ],\n \"dependencies\": {\n \"option-validator\": \"^2.0.6\"\n }\n}\n","export default {\n properties: [\n 'audioTracks',\n 'autoplay',\n 'buffered',\n 'controller',\n 'controls',\n 'crossOrigin',\n 'currentSrc',\n 'currentTime',\n 'defaultMuted',\n 'defaultPlaybackRate',\n 'duration',\n 'ended',\n 'error',\n 'loop',\n 'mediaGroup',\n 'muted',\n 'networkState',\n 'paused',\n 'playbackRate',\n 'played',\n 'preload',\n 'readyState',\n 'seekable',\n 'seeking',\n 'src',\n 'startDate',\n 'textTracks',\n 'videoTracks',\n 'volume',\n ],\n methods: ['addTextTrack', 'canPlayType', 'load', 'play', 'pause'],\n events: [\n 'abort',\n 'canplay',\n 'canplaythrough',\n 'durationchange',\n 'emptied',\n 'ended',\n 'error',\n 'loadeddata',\n 'loadedmetadata',\n 'loadstart',\n 'pause',\n 'play',\n 'playing',\n 'progress',\n 'ratechange',\n 'seeked',\n 'seeking',\n 'stalled',\n 'suspend',\n 'timeupdate',\n 'volumechange',\n 'waiting',\n ],\n prototypes: [\n 'width',\n 'height',\n 'videoWidth',\n 'videoHeight',\n 'poster',\n 'webkitDecodedFrameCount',\n 'webkitDroppedFrameCount',\n 'playsInline',\n 'webkitSupportsFullscreen',\n 'webkitDisplayingFullscreen',\n 'onenterpictureinpicture',\n 'onleavepictureinpicture',\n 'disablePictureInPicture',\n 'cancelVideoFrameCallback',\n 'requestVideoFrameCallback',\n 'getVideoPlaybackQuality',\n 'requestPictureInPicture',\n 'webkitEnterFullScreen',\n 'webkitEnterFullscreen',\n 'webkitExitFullScreen',\n 'webkitExitFullscreen',\n ],\n}\n","exports.interopDefault = function (a) {\n return a && a.__esModule ? a : {default: a};\n};\n\nexports.defineInteropFlag = function (a) {\n Object.defineProperty(a, '__esModule', {value: true});\n};\n\nexports.exportAll = function (source, dest) {\n Object.keys(source).forEach(function (key) {\n if (\n key === 'default' ||\n key === '__esModule' ||\n Object.prototype.hasOwnProperty.call(dest, key)\n ) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function () {\n return source[key];\n },\n });\n });\n\n return dest;\n};\n\nexports.export = function (dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get,\n });\n};\n","import { getRect, includeFromEvent, isMobile, setStyles } from '../utils'\nimport Component from '../utils/component'\nimport aspectRatio from './aspectRatio'\nimport close from './close'\nimport flip from './flip'\nimport info from './info'\nimport playbackRate from './playbackRate'\nimport version from './version'\n\nexport default class Contextmenu extends Component {\n constructor(art) {\n super(art)\n\n this.name = 'contextmenu'\n this.$parent = art.template.$contextmenu\n\n if (!isMobile) {\n this.init()\n }\n }\n\n init() {\n const {\n option,\n proxy,\n template: { $player, $contextmenu },\n } = this.art\n\n if (option.playbackRate) {\n this.add(\n playbackRate({\n name: 'playbackRate',\n index: 10,\n }),\n )\n }\n\n if (option.aspectRatio) {\n this.add(\n aspectRatio({\n name: 'aspectRatio',\n index: 20,\n }),\n )\n }\n\n if (option.flip) {\n this.add(\n flip({\n name: 'flip',\n index: 30,\n }),\n )\n }\n\n this.add(\n info({\n name: 'info',\n index: 40,\n }),\n )\n\n this.add(\n version({\n name: 'version',\n index: 50,\n }),\n )\n\n this.add(\n close({\n name: 'close',\n index: 60,\n }),\n )\n\n for (let index = 0; index < option.contextmenu.length; index++) {\n this.add(option.contextmenu[index])\n }\n\n proxy($player, 'contextmenu', (event) => {\n if (!this.art.constructor.CONTEXTMENU)\n return\n event.preventDefault()\n\n this.show = true\n\n const mouseX = event.clientX\n const mouseY = event.clientY\n const { height: cHeight, width: cWidth, left: cLeft, top: cTop } = getRect($player)\n const { height: mHeight, width: mWidth } = getRect($contextmenu)\n let menuLeft = mouseX - cLeft\n let menuTop = mouseY - cTop\n\n if (mouseX + mWidth > cLeft + cWidth) {\n menuLeft = cWidth - mWidth\n }\n\n if (mouseY + mHeight > cTop + cHeight) {\n menuTop = cHeight - mHeight\n }\n\n setStyles($contextmenu, {\n top: `${menuTop}px`,\n left: `${menuLeft}px`,\n })\n })\n\n proxy($player, 'click', (event) => {\n if (!includeFromEvent(event, $contextmenu)) {\n this.show = false\n }\n })\n\n this.art.on('blur', () => {\n this.show = false\n })\n }\n}\n","export * from './compatibility'\nexport * from './dom'\nexport * from './error'\nexport * from './file'\nexport * from './format'\nexport * from './property'\nexport * from './subtitle'\nexport * from './time'\n","export const userAgent = globalThis?.CUSTOM_USER_AGENT ?? (typeof navigator !== 'undefined' ? navigator.userAgent : '')\nexport const isSafari = /^(?:(?!chrome|android).)*safari/i.test(userAgent)\nexport const isWechat = /MicroMessenger/i.test(userAgent)\nexport const isIE = /MSIE|Trident/i.test(userAgent)\nexport const isAndroid = /android/i.test(userAgent)\nexport const isIOS = /iPad|iPhone|iPod/i.test(userAgent) && !window.MSStream\nexport const isIOS13 = isIOS || (userAgent.includes('Macintosh') && navigator.maxTouchPoints >= 1)\nexport const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent) || isIOS13\nexport const isBrowser = typeof window !== 'undefined'\n","import { isMobile } from './compatibility'\n\nexport function query(selector, parent = document) {\n return parent.querySelector(selector)\n}\n\nexport function queryAll(selector, parent = document) {\n return Array.from(parent.querySelectorAll(selector))\n}\n\nexport function addClass(target, className) {\n return target.classList.add(className)\n}\n\nexport function removeClass(target, className) {\n return target.classList.remove(className)\n}\n\nexport function hasClass(target, className) {\n return target.classList.contains(className)\n}\n\nexport function append(parent, child) {\n if (child instanceof Element) {\n parent.appendChild(child)\n }\n else {\n parent.insertAdjacentHTML('beforeend', String(child))\n }\n return parent.lastElementChild || parent.lastChild\n}\n\nexport function remove(child) {\n return child.parentNode.removeChild(child)\n}\n\nexport function setStyle(element, key, value) {\n element.style[key] = value\n return element\n}\n\nexport function setStyles(element, styles) {\n for (const key in styles) {\n setStyle(element, key, styles[key])\n }\n return element\n}\n\nexport function getStyle(element, key, numberType = true) {\n const value = window.getComputedStyle(element, null).getPropertyValue(key)\n return numberType ? Number.parseFloat(value) : value\n}\n\nexport function siblings(target) {\n return Array.from(target.parentElement.children).filter(item => item !== target)\n}\n\nexport function inverseClass(target, className) {\n siblings(target).forEach(item => removeClass(item, className))\n addClass(target, className)\n}\n\nexport function tooltip(target, msg, pos = 'top') {\n if (isMobile)\n return\n target.setAttribute('aria-label', msg)\n addClass(target, 'hint--rounded')\n addClass(target, `hint--${pos}`)\n}\n\nexport function isInViewport(el, offset = 0) {\n const rect = el.getBoundingClientRect()\n const windowHeight = window.innerHeight || document.documentElement.clientHeight\n const windowWidth = window.innerWidth || document.documentElement.clientWidth\n const vertInView = rect.top - offset <= windowHeight && rect.top + rect.height + offset >= 0\n const horInView = rect.left - offset <= windowWidth + offset && rect.left + rect.width + offset >= 0\n return vertInView && horInView\n}\n\nexport function includeFromEvent(event, target) {\n return getComposedPath(event).includes(target)\n}\n\nexport function replaceElement(newChild, oldChild) {\n oldChild.parentNode.replaceChild(newChild, oldChild)\n return newChild\n}\n\nexport function createElement(tag) {\n return document.createElement(tag)\n}\n\nexport function getIcon(key = '', html = '') {\n const icon = createElement('i')\n addClass(icon, 'art-icon')\n addClass(icon, `art-icon-${key}`)\n append(icon, html)\n return icon\n}\n\nexport function setStyleText(id, style) {\n let $style = document.getElementById(id)\n if (!$style) {\n $style = document.createElement('style')\n $style.id = id\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => {\n document.head.appendChild($style)\n })\n }\n else {\n (document.head || document.documentElement).appendChild($style)\n }\n }\n $style.textContent = style\n}\n\nexport function supportsFlex() {\n const div = document.createElement('div')\n div.style.display = 'flex'\n return div.style.display === 'flex'\n}\n\nexport function getRect(el) {\n return el.getBoundingClientRect()\n}\n\nexport function loadImg(url, scale) {\n return new Promise((resolve, reject) => {\n const img = new Image()\n\n img.onload = function () {\n if (!scale || scale === 1) {\n resolve(img)\n }\n else {\n const canvas = document.createElement('canvas')\n const ctx = canvas.getContext('2d')\n canvas.width = img.width * scale\n canvas.height = img.height * scale\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height)\n\n canvas.toBlob((blob) => {\n const blobUrl = URL.createObjectURL(blob)\n const scaledImg = new Image()\n\n scaledImg.onload = function () {\n resolve(scaledImg)\n }\n\n scaledImg.onerror = function () {\n URL.revokeObjectURL(blobUrl)\n reject(new Error(`Image load failed: ${url}`))\n }\n\n scaledImg.src = blobUrl\n })\n }\n }\n\n img.onerror = function () {\n reject(new Error(`Image load failed: ${url}`))\n }\n\n img.src = url\n })\n}\n\nexport function getComposedPath(event) {\n if (event.composedPath)\n return event.composedPath()\n const path = []\n let node = event.target\n while (node) {\n path.push(node)\n node = node.parentNode\n }\n if (!path.includes(window) && window !== undefined) {\n path.push(window)\n }\n return path\n}\n","export class ArtPlayerError extends Error {\n constructor(message, context) {\n super(message)\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, context || this.constructor)\n }\n this.name = 'ArtPlayerError'\n }\n}\n\nexport function errorHandle(condition, msg) {\n if (!condition) {\n throw new ArtPlayerError(msg)\n }\n return condition\n}\n","export function getExt(url) {\n if (url.includes('?')) {\n return getExt(url.split('?')[0])\n }\n\n if (url.includes('#')) {\n return getExt(url.split('#')[0])\n }\n\n return url.trim().toLowerCase().split('.').pop()\n}\n\nexport function download(url, name) {\n const elink = document.createElement('a')\n elink.style.display = 'none'\n elink.href = url\n elink.download = name\n document.body.appendChild(elink)\n elink.click()\n document.body.removeChild(elink)\n}\n","export function clamp(num, a, b) {\n return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b))\n}\n\nexport function capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n\nexport function secondToTime(second) {\n if (!second)\n return '00:00'\n const add0 = num => (num < 10 ? `0${num}` : String(num))\n const hour = Math.floor(second / 3600)\n const min = Math.floor((second - hour * 3600) / 60)\n const sec = Math.floor(second - hour * 3600 - min * 60)\n return (hour > 0 ? [hour, min, sec] : [min, sec]).map(add0).join(':')\n}\n\nexport function escape(str) {\n return str.replace(\n /[&<>'\"]/g,\n tag =>\n ({\n '&': '&',\n '<': '<',\n '>': '>',\n '\\'': ''',\n '\"': '"',\n })[tag] || tag,\n )\n}\n\nexport function unescape(str) {\n const map = {\n '&': '&',\n '<': '<',\n '>': '>',\n ''': '\\'',\n '"': '\"',\n }\n const reg = new RegExp(`(${Object.keys(map).join('|')})`, 'g')\n return str.replace(reg, tag => map[tag] || tag)\n}\n","export const def = Object.defineProperty\n\nconst { hasOwnProperty } = Object.prototype\nexport function has(obj, name) {\n return hasOwnProperty.call(obj, name)\n}\n\nexport function get(obj, name) {\n return Object.getOwnPropertyDescriptor(obj, name)\n}\n\nexport function mergeDeep(...objects) {\n const isObject = item => item && typeof item === 'object' && !Array.isArray(item)\n return objects.reduce((prev, obj) => {\n Object.keys(obj).forEach((key) => {\n const pVal = prev[key]\n const oVal = obj[key]\n if (Array.isArray(pVal) && Array.isArray(oVal)) {\n prev[key] = pVal.concat(...oVal)\n }\n else if (isObject(pVal) && isObject(oVal)) {\n prev[key] = mergeDeep(pVal, oVal)\n }\n else {\n prev[key] = oVal\n }\n })\n return prev\n }, {})\n}\n","function fixSrt(srt) {\n return srt.replace(/(\\d\\d:\\d\\d:\\d\\d)[,.](\\d+)/g, (_, $1, $2) => {\n let ms = $2.slice(0, 3)\n if ($2.length === 1) {\n ms = `${$2}00`\n }\n if ($2.length === 2) {\n ms = `${$2}0`\n }\n return `${$1},${ms}`\n })\n}\n\nexport function srtToVtt(srtText) {\n return 'WEBVTT \\r\\n\\r\\n'.concat(\n fixSrt(srtText)\n .replace(/\\{\\\\([ibu])\\}/g, '')\n .replace(/\\{\\\\([ibu])1\\}/g, '<$1>')\n .replace(/\\{([ibu])\\}/g, '<$1>')\n .replace(/\\{\\/([ibu])\\}/g, '')\n .replace(/(\\d\\d:\\d\\d:\\d\\d),(\\d\\d\\d)/g, '$1.$2')\n .replace(/\\{[\\s\\S]*?\\}/g, '')\n .concat('\\r\\n\\r\\n'),\n )\n}\n\nexport function vttToBlob(vttText) {\n return URL.createObjectURL(\n new Blob([vttText], {\n type: 'text/vtt',\n }),\n )\n}\n\nexport function assToVtt(ass) {\n const reAss = new RegExp(\n 'Dialogue:\\\\s\\\\d,'\n + '(\\\\d+:\\\\d\\\\d:\\\\d\\\\d.\\\\d\\\\d),'\n + '(\\\\d+:\\\\d\\\\d:\\\\d\\\\d.\\\\d\\\\d),'\n + '([^,]*),'\n + '([^,]*),'\n + '(?:[^,]*,){4}'\n + '([\\\\s\\\\S]*)$',\n 'i',\n )\n\n function fixTime(time = '') {\n return time\n .split(/[:.]/)\n .map((item, index, arr) => {\n if (index === arr.length - 1) {\n if (item.length === 1) {\n return `.${item}00`\n }\n\n if (item.length === 2) {\n return `.${item}0`\n }\n }\n else if (item.length === 1) {\n return (index === 0 ? '0' : ':0') + item\n }\n\n return index === 0 ? item : index === arr.length - 1 ? `.${item}` : `:${item}`\n })\n .join('')\n }\n\n return (\n `WEBVTT`\n + `\\n`\n + `\\n${\n ass\n .split(/\\r?\\n/)\n .map((line) => {\n const m = line.match(reAss)\n if (!m)\n return null\n return {\n start: fixTime(m[1].trim()),\n end: fixTime(m[2].trim()),\n text: m[5]\n .replace(/\\{[\\s\\S]*?\\}/g, '')\n .replace(/(\\\\N)/g, '\\n')\n .trim()\n .split(/\\r?\\n/)\n .map(item => item.trim())\n .join('\\n'),\n }\n })\n .filter(line => line)\n .map((line, index) => {\n if (line) {\n return `${index + 1}\\n` + `${line.start} --> ${line.end}` + `\\n` + `${line.text}`\n }\n return ''\n })\n .filter(line => line.trim())\n .join('\\n\\n')}`\n )\n}\n","export function sleep(ms = 0) {\n return new Promise(resolve => setTimeout(resolve, ms))\n}\n\nexport function debounce(func, duration) {\n let timeout\n\n return function (...args) {\n const effect = () => {\n timeout = null\n return func.apply(this, args)\n }\n\n clearTimeout(timeout)\n timeout = setTimeout(effect, duration)\n }\n}\n\nexport function throttle(func, duration) {\n let shouldWait = false\n\n return function (...args) {\n if (!shouldWait) {\n func.apply(this, args)\n shouldWait = true\n\n setTimeout(() => {\n shouldWait = false\n }, duration)\n }\n }\n}\n","import validator from 'option-validator'\nimport { ComponentOption } from '../scheme'\nimport { addClass, append, createElement, hasClass, remove, removeClass, setStyles, tooltip } from './dom'\nimport { errorHandle } from './error'\n\nexport default class Component {\n constructor(art) {\n this.id = 0\n this.art = art\n this.cache = new Map()\n this.add = this.add.bind(this)\n this.remove = this.remove.bind(this)\n this.update = this.update.bind(this)\n }\n\n get show() {\n return hasClass(this.art.template.$player, `art-${this.name}-show`)\n }\n\n set show(value) {\n const { $player } = this.art.template\n const className = `art-${this.name}-show`\n if (value) {\n addClass($player, className)\n }\n else {\n removeClass($player, className)\n }\n this.art.emit(this.name, value)\n }\n\n toggle() {\n this.show = !this.show\n }\n\n add(getOption) {\n const option = typeof getOption === 'function' ? getOption(this.art) : getOption\n option.html = option.html || ''\n validator(option, ComponentOption)\n if (!this.$parent || !this.name || option.disable)\n return\n const name = option.name || `${this.name}${this.id}`\n const item = this.cache.get(name)\n errorHandle(!item, `Can't add an existing [${name}] to the [${this.name}]`)\n\n this.id += 1\n const $ref = createElement('div')\n addClass($ref, `art-${this.name}`)\n addClass($ref, `art-${this.name}-${name}`)\n\n const childs = Array.from(this.$parent.children)\n $ref.dataset.index = option.index || this.id\n const nextChild = childs.find(item => Number(item.dataset.index) >= Number($ref.dataset.index))\n if (nextChild) {\n nextChild.insertAdjacentElement('beforebegin', $ref)\n }\n else {\n append(this.$parent, $ref)\n }\n\n if (option.html) {\n append($ref, option.html)\n }\n\n if (option.style) {\n setStyles($ref, option.style)\n }\n\n if (option.tooltip) {\n tooltip($ref, option.tooltip)\n }\n\n const events = []\n if (option.click) {\n const destroyEvent = this.art.events.proxy($ref, 'click', (event) => {\n event.preventDefault()\n option.click.call(this.art, this, event)\n })\n events.push(destroyEvent)\n }\n\n if (option.selector && ['left', 'right'].includes(option.position)) {\n this.selector(option, $ref, events)\n }\n\n this[name] = $ref\n this.cache.set(name, { $ref, events, option })\n\n if (option.mounted) {\n option.mounted.call(this.art, $ref)\n }\n\n return $ref\n }\n\n remove(name) {\n const item = this.cache.get(name)\n errorHandle(item, `Can't find [${name}] from the [${this.name}]`)\n\n if (item.option.beforeUnmount) {\n item.option.beforeUnmount.call(this.art, item.$ref)\n }\n\n for (let index = 0; index < item.events.length; index++) {\n this.art.events.remove(item.events[index])\n }\n\n this.cache.delete(name)\n delete this[name]\n remove(item.$ref)\n }\n\n update(option) {\n const item = this.cache.get(option.name)\n if (item) {\n option = Object.assign(item.option, option)\n this.remove(option.name)\n }\n return this.add(option)\n }\n}\n","import { errorHandle } from '../utils'\n\nconst a = 'array'\nconst b = 'boolean'\nconst s = 'string'\nconst n = 'number'\nconst o = 'object'\nconst f = 'function'\n\nfunction validElement(value, type, paths) {\n return errorHandle(\n type === s || type === n || value instanceof Element,\n `${paths.join('.')} require '${s}' or 'Element' type`,\n )\n}\n\nexport const ComponentOption = {\n html: validElement,\n disable: `?${b}`,\n name: `?${s}`,\n index: `?${n}`,\n style: `?${o}`,\n click: `?${f}`,\n mounted: `?${f}`,\n tooltip: `?${s}|${n}`,\n width: `?${n}`,\n selector: `?${a}`,\n onSelect: `?${f}`,\n switch: `?${b}`,\n onSwitch: `?${f}`,\n range: `?${a}`,\n onRange: `?${f}`,\n onChange: `?${f}`,\n}\n\nexport default {\n id: s,\n container: validElement,\n url: s,\n poster: s,\n type: s,\n theme: s,\n lang: s,\n volume: n,\n isLive: b,\n muted: b,\n autoplay: b,\n autoSize: b,\n autoMini: b,\n loop: b,\n flip: b,\n playbackRate: b,\n aspectRatio: b,\n screenshot: b,\n setting: b,\n hotkey: b,\n pip: b,\n mutex: b,\n backdrop: b,\n fullscreen: b,\n fullscreenWeb: b,\n subtitleOffset: b,\n miniProgressBar: b,\n useSSR: b,\n playsInline: b,\n lock: b,\n gesture: b,\n fastForward: b,\n autoPlayback: b,\n autoOrientation: b,\n airplay: b,\n proxy: `?${f}`,\n plugins: [f],\n layers: [ComponentOption],\n contextmenu: [ComponentOption],\n settings: [ComponentOption],\n controls: [\n {\n ...ComponentOption,\n position: (value, _, paths) => {\n const position = ['top', 'left', 'right']\n return errorHandle(\n position.includes(value),\n `${paths.join('.')} only accept ${position.toString()} as parameters`,\n )\n },\n },\n ],\n quality: [\n {\n default: `?${b}`,\n html: s,\n url: s,\n },\n ],\n highlight: [\n {\n time: n,\n text: s,\n },\n ],\n thumbnails: {\n url: s,\n number: n,\n column: n,\n width: n,\n height: n,\n scale: n,\n },\n subtitle: {\n url: s,\n name: s,\n type: s,\n style: o,\n escape: b,\n encoding: s,\n onVttLoad: f,\n },\n moreVideoAttr: o,\n i18n: o,\n icons: o,\n cssVar: o,\n customType: o,\n}\n","import { inverseClass, query, queryAll } from '../utils'\n\nexport default function aspectRatio(option) {\n return (art) => {\n const {\n i18n,\n constructor: { ASPECT_RATIO },\n } = art\n\n const html = ASPECT_RATIO.map(\n item => `${item === 'default' ? i18n.get('Default') : item}`,\n ).join('')\n\n return {\n ...option,\n html: `${i18n.get('Aspect Ratio')}: ${html}`,\n click: (contextmenu, event) => {\n const { value } = event.target.dataset\n if (value) {\n art.aspectRatio = value\n contextmenu.show = false\n }\n },\n mounted: ($panel) => {\n const $default = query('[data-value=\"default\"]', $panel)\n if ($default) {\n inverseClass($default, 'art-current')\n }\n art.on('aspectRatio', (value) => {\n const $current = queryAll('span', $panel).find(item => item.dataset.value === value)\n if ($current) {\n inverseClass($current, 'art-current')\n }\n })\n },\n }\n }\n}\n","export default function close(option) {\n return art => ({\n ...option,\n html: art.i18n.get('Close'),\n click: (contextmenu) => {\n contextmenu.show = false\n },\n })\n}\n","import { capitalize, inverseClass, query, queryAll } from '../utils'\n\nexport default function flip(option) {\n return (art) => {\n const {\n i18n,\n constructor: { FLIP },\n } = art\n\n const html = FLIP.map(item => `${i18n.get(capitalize(item))}`).join('')\n\n return {\n ...option,\n html: `${i18n.get('Video Flip')}: ${html}`,\n click: (contextmenu, event) => {\n const { value } = event.target.dataset\n if (value) {\n art.flip = value.toLowerCase()\n contextmenu.show = false\n }\n },\n mounted: ($panel) => {\n const $default = query('[data-value=\"normal\"]', $panel)\n if ($default) {\n inverseClass($default, 'art-current')\n }\n art.on('flip', (value) => {\n const $current = queryAll('span', $panel).find(item => item.dataset.value === value)\n if ($current) {\n inverseClass($current, 'art-current')\n }\n })\n },\n }\n }\n}\n","export default function info(option) {\n return art => ({\n ...option,\n html: art.i18n.get('Video Info'),\n click: (contextmenu) => {\n art.info.show = true\n contextmenu.show = false\n },\n })\n}\n","import { inverseClass, query, queryAll } from '../utils'\n\nexport default function playbackRate(option) {\n return (art) => {\n const {\n i18n,\n constructor: { PLAYBACK_RATE },\n } = art\n\n const html = PLAYBACK_RATE.map(\n item => `${item === 1 ? i18n.get('Normal') : item.toFixed(1)}`,\n ).join('')\n\n return {\n ...option,\n html: `${i18n.get('Play Speed')}: ${html}`,\n click: (contextmenu, event) => {\n const { value } = event.target.dataset\n if (value) {\n art.playbackRate = Number(value)\n contextmenu.show = false\n }\n },\n mounted: ($panel) => {\n const $default = query('[data-value=\"1\"]', $panel)\n if ($default)\n inverseClass($default, 'art-current')\n art.on('video:ratechange', () => {\n const $current = queryAll('span', $panel).find(\n item => Number(item.dataset.value) === art.playbackRate,\n )\n if ($current) {\n inverseClass($current, 'art-current')\n }\n })\n },\n }\n }\n}\n","import { version } from '../../package.json'\n\nexport default function (option) {\n return {\n ...option,\n html: `ArtPlayer ${version}`,\n }\n}\n","import {\n addClass,\n append,\n createElement,\n def,\n errorHandle,\n getComposedPath,\n includeFromEvent,\n inverseClass,\n isMobile,\n removeClass,\n sleep,\n} from '../utils'\nimport Component from '../utils/component'\nimport airplay from './airplay'\nimport fullscreen from './fullscreen'\nimport fullscreenWeb from './fullscreenWeb'\nimport pip from './pip'\nimport playAndPause from './playAndPause'\nimport progress from './progress'\nimport screenshot from './screenshot'\nimport setting from './setting'\nimport time from './time'\nimport volume from './volume'\n\nexport default class Control extends Component {\n constructor(art) {\n super(art)\n\n this.isHover = false\n this.name = 'control'\n this.timer = Date.now()\n\n const { constructor } = art\n const { $player, $bottom } = this.art.template\n\n art.on('mousemove', () => {\n if (!isMobile) {\n this.show = true\n }\n })\n\n art.on('click', () => {\n if (isMobile) {\n this.toggle()\n }\n else {\n this.show = true\n }\n })\n\n art.on('document:mousemove', (event) => {\n this.isHover = includeFromEvent(event, $bottom)\n })\n\n art.on('video:timeupdate', () => {\n if (\n !art.setting.show\n && !this.isHover\n && !art.isInput\n && art.playing\n && this.show\n && Date.now() - this.timer >= constructor.CONTROL_HIDE_TIME\n ) {\n this.show = false\n }\n })\n\n art.on('control', (state) => {\n if (state) {\n removeClass($player, 'art-hide-cursor')\n addClass($player, 'art-hover')\n this.timer = Date.now()\n }\n else {\n addClass($player, 'art-hide-cursor')\n removeClass($player, 'art-hover')\n }\n })\n\n this.init()\n }\n\n init() {\n const { option } = this.art\n\n if (!option.isLive) {\n this.add(\n progress({\n name: 'progress',\n position: 'top',\n index: 10,\n }),\n )\n }\n\n this.add({\n name: 'thumbnails',\n position: 'top',\n index: 20,\n })\n\n this.add(\n playAndPause({\n name: 'playAndPause',\n position: 'left',\n index: 10,\n }),\n )\n\n this.add(\n volume({\n name: 'volume',\n position: 'left',\n index: 20,\n }),\n )\n\n if (!option.isLive) {\n this.add(\n time({\n name: 'time',\n position: 'left',\n index: 30,\n }),\n )\n }\n\n if (option.quality.length) {\n sleep().then(() => {\n this.art.quality = option.quality\n })\n }\n\n if (option.screenshot && !isMobile) {\n this.add(\n screenshot({\n name: 'screenshot',\n position: 'right',\n index: 20,\n }),\n )\n }\n\n if (option.setting) {\n this.add(\n setting({\n name: 'setting',\n position: 'right',\n index: 30,\n }),\n )\n }\n\n if (option.pip) {\n this.add(\n pip({\n name: 'pip',\n position: 'right',\n index: 40,\n }),\n )\n }\n\n if (option.airplay && window.WebKitPlaybackTargetAvailabilityEvent) {\n this.add(\n airplay({\n name: 'airplay',\n position: 'right',\n index: 50,\n }),\n )\n }\n\n if (option.fullscreenWeb) {\n this.add(\n fullscreenWeb({\n name: 'fullscreenWeb',\n position: 'right',\n index: 60,\n }),\n )\n }\n\n if (option.fullscreen) {\n this.add(\n fullscreen({\n name: 'fullscreen',\n position: 'right',\n index: 70,\n }),\n )\n }\n\n for (let index = 0; index < option.controls.length; index++) {\n this.add(option.controls[index])\n }\n }\n\n add(getOption) {\n const option = typeof getOption === 'function' ? getOption(this.art) : getOption\n const { $progress, $controlsLeft, $controlsRight } = this.art.template\n\n switch (option.position) {\n case 'top':\n this.$parent = $progress\n break\n case 'left':\n this.$parent = $controlsLeft\n break\n case 'right':\n this.$parent = $controlsRight\n break\n default:\n errorHandle(false, `Control option.position must one of 'top', 'left', 'right'`)\n break\n }\n\n super.add(option)\n }\n\n check(target) {\n target.$control_value.innerHTML = target.html\n for (let index = 0; index < target.$control_option.length; index++) {\n const item = target.$control_option[index]\n item.default = item === target\n if (item.default) {\n inverseClass(item.$control_item, 'art-current')\n }\n }\n }\n\n selector(option, $ref, events) {\n const { proxy } = this.art.events\n\n addClass($ref, 'art-control-selector')\n const $value = createElement('div')\n addClass($value, 'art-selector-value')\n append($value, option.html)\n $ref.textContent = ''\n append($ref, $value)\n\n const $list = createElement('div')\n addClass($list, 'art-selector-list')\n append($ref, $list)\n\n for (let index = 0; index < option.selector.length; index++) {\n const item = option.selector[index]\n const $item = createElement('div')\n addClass($item, 'art-selector-item')\n if (item.default)\n addClass($item, 'art-current')\n $item.dataset.index = index\n $item.dataset.value = item.value\n $item.innerHTML = item.html\n append($list, $item)\n\n def(item, '$control_option', {\n get: () => option.selector,\n })\n\n def(item, '$control_item', {\n get: () => $item,\n })\n\n def(item, '$control_value', {\n get: () => $value,\n })\n }\n\n const event = proxy($list, 'click', async (event) => {\n const path = getComposedPath(event)\n const item = option.selector.find(\n item => item.$control_item === path.find($item => item.$control_item === $item),\n )\n this.check(item)\n if (option.onSelect) {\n $value.innerHTML = await option.onSelect.call(this.art, item, item.$control_item, event)\n }\n })\n\n events.push(event)\n }\n}\n","import { append } from '../utils'\n\nexport default function airplay(option) {\n return art => ({\n ...option,\n tooltip: art.i18n.get('AirPlay'),\n mounted: ($control) => {\n const { proxy, icons } = art\n append($control, icons.airplay)\n proxy($control, 'click', () => art.airplay())\n },\n })\n}\n","import { append, setStyle, tooltip } from '../utils'\n\nexport default function fullscreen(option) {\n return art => ({\n ...option,\n tooltip: art.i18n.get('Fullscreen'),\n mounted: ($control) => {\n const { proxy, icons, i18n } = art\n\n const $fullscreenOn = append($control, icons.fullscreenOn)\n const $fullscreenOff = append($control, icons.fullscreenOff)\n setStyle($fullscreenOff, 'display', 'none')\n\n proxy($control, 'click', () => {\n art.fullscreen = !art.fullscreen\n })\n\n art.on('fullscreen', (state) => {\n if (state) {\n tooltip($control, i18n.get('Exit Fullscreen'))\n setStyle($fullscreenOn, 'display', 'none')\n setStyle($fullscreenOff, 'display', 'inline-flex')\n }\n else {\n tooltip($control, i18n.get('Fullscreen'))\n setStyle($fullscreenOn, 'display', 'inline-flex')\n setStyle($fullscreenOff, 'display', 'none')\n }\n })\n },\n })\n}\n","import { append, setStyle, tooltip } from '../utils'\n\nexport default function fullscreenWeb(option) {\n return art => ({\n ...option,\n tooltip: art.i18n.get('Web Fullscreen'),\n mounted: ($control) => {\n const { proxy, icons, i18n } = art\n\n const $fullscreenWebOn = append($control, icons.fullscreenWebOn)\n const $fullscreenWebOff = append($control, icons.fullscreenWebOff)\n setStyle($fullscreenWebOff, 'display', 'none')\n\n proxy($control, 'click', () => {\n art.fullscreenWeb = !art.fullscreenWeb\n })\n\n art.on('fullscreenWeb', (value) => {\n if (value) {\n tooltip($control, i18n.get('Exit Web Fullscreen'))\n setStyle($fullscreenWebOn, 'display', 'none')\n setStyle($fullscreenWebOff, 'display', 'inline-flex')\n }\n else {\n tooltip($control, i18n.get('Web Fullscreen'))\n setStyle($fullscreenWebOn, 'display', 'inline-flex')\n setStyle($fullscreenWebOff, 'display', 'none')\n }\n })\n },\n })\n}\n","import { append, tooltip } from '../utils'\n\nexport default function pip(option) {\n return art => ({\n ...option,\n tooltip: art.i18n.get('PIP Mode'),\n mounted: ($control) => {\n const { proxy, icons, i18n } = art\n\n append($control, icons.pip)\n\n proxy($control, 'click', () => {\n art.pip = !art.pip\n })\n\n art.on('pip', (value) => {\n tooltip($control, i18n.get(value ? 'Exit PIP Mode' : 'PIP Mode'))\n })\n },\n })\n}\n","import { append, setStyle, tooltip } from '../utils'\n\nexport default function playAndPause(option) {\n return art => ({\n ...option,\n mounted: ($control) => {\n const { proxy, icons, i18n } = art\n\n const $play = append($control, icons.play)\n const $pause = append($control, icons.pause)\n tooltip($play, i18n.get('Play'))\n tooltip($pause, i18n.get('Pause'))\n\n proxy($play, 'click', () => {\n art.play()\n })\n\n proxy($pause, 'click', () => {\n art.pause()\n })\n\n function showPlay() {\n setStyle($play, 'display', 'flex')\n setStyle($pause, 'display', 'none')\n }\n\n function showPause() {\n setStyle($play, 'display', 'none')\n setStyle($pause, 'display', 'flex')\n }\n\n if (art.playing) {\n showPause()\n }\n else {\n showPlay()\n }\n\n art.on('video:playing', () => {\n showPause()\n })\n\n art.on('video:pause', () => {\n showPlay()\n })\n },\n })\n}\n","import { append, clamp, getRect, includeFromEvent, isMobile, query, secondToTime, setStyle } from '../utils'\n\nexport function getPosFromEvent(art, event) {\n const { $progress } = art.template\n const { left } = getRect($progress)\n const eventLeft = isMobile ? event.touches[0].clientX : event.clientX\n const width = clamp(eventLeft - left, 0, $progress.clientWidth)\n const second = (width / $progress.clientWidth) * art.duration\n const time = secondToTime(second)\n const percentage = clamp(width / $progress.clientWidth, 0, 1)\n return { second, time, width, percentage }\n}\n\nexport function setCurrentTime(art, event) {\n if (art.isRotate) {\n const percentage = event.touches[0].clientY / art.height\n const second = percentage * art.duration\n art.emit('setBar', 'played', percentage, event)\n art.seek = second\n }\n else {\n const { second, percentage } = getPosFromEvent(art, event)\n art.emit('setBar', 'played', percentage, event)\n art.seek = second\n }\n}\n\nexport default function progress(options) {\n return (art) => {\n const { icons, option, proxy } = art\n\n return {\n ...options,\n html: `\n
\n
\n
\n
\n
\n
\n
\n
\n `,\n mounted: ($control) => {\n let tipTimer = null\n let isDragging = false\n\n const $hover = query('.art-progress-hover', $control)\n const $loaded = query('.art-progress-loaded', $control)\n const $played = query('.art-progress-played', $control)\n const $highlight = query('.art-progress-highlight', $control)\n const $indicator = query('.art-progress-indicator', $control)\n const $tip = query('.art-progress-tip', $control)\n\n if (icons.indicator) {\n append($indicator, icons.indicator)\n }\n else {\n setStyle($indicator, 'backgroundColor', 'var(--art-theme)')\n }\n\n function showHighlight(event) {\n const { width } = getPosFromEvent(art, event)\n const { text } = event.target.dataset\n $tip.textContent = text\n const tipWidth = $tip.clientWidth\n if (width <= tipWidth / 2) {\n setStyle($tip, 'left', 0)\n }\n else if (width > $control.clientWidth - tipWidth / 2) {\n setStyle($tip, 'left', `${$control.clientWidth - tipWidth}px`)\n }\n else {\n setStyle($tip, 'left', `${width - tipWidth / 2}px`)\n }\n }\n\n function showTime(event, touch) {\n const { width, time } = touch || getPosFromEvent(art, event)\n $tip.textContent = time\n const tipWidth = $tip.clientWidth\n if (width <= tipWidth / 2) {\n setStyle($tip, 'left', 0)\n }\n else if (width > $control.clientWidth - tipWidth / 2) {\n setStyle($tip, 'left', `${$control.clientWidth - tipWidth}px`)\n }\n else {\n setStyle($tip, 'left', `${width - tipWidth / 2}px`)\n }\n }\n\n function updateHighlight() {\n $highlight.textContent = ''\n for (let index = 0; index < option.highlight.length; index++) {\n const item = option.highlight[index]\n const left = (clamp(item.time, 0, art.duration) / art.duration) * 100\n const html = ``\n append($highlight, html)\n }\n }\n\n function setBar(type, percentage, event) {\n const isMobileDragging = type === 'played' && event && isMobile\n\n if (type === 'loaded') {\n setStyle($loaded, 'width', `${percentage * 100}%`)\n }\n\n if (type === 'hover') {\n setStyle($hover, 'width', `${percentage * 100}%`)\n }\n\n if (type === 'played') {\n setStyle($played, 'width', `${percentage * 100}%`)\n setStyle($indicator, 'left', `${percentage * 100}%`)\n }\n\n if (isMobileDragging) {\n setStyle($tip, 'display', 'flex')\n const width = $control.clientWidth * percentage\n const time = secondToTime(percentage * art.duration)\n showTime(event, { width, time })\n clearTimeout(tipTimer)\n tipTimer = setTimeout(() => {\n setStyle($tip, 'display', 'none')\n }, 500)\n }\n }\n\n art.on('setBar', setBar)\n art.on('video:loadedmetadata', updateHighlight)\n\n if (art.constructor.USE_RAF) {\n art.on('raf', () => {\n art.emit('setBar', 'played', art.played)\n art.emit('setBar', 'loaded', art.loaded)\n })\n }\n else {\n art.on('video:timeupdate', () => {\n art.emit('setBar', 'played', art.played)\n })\n\n art.on('video:progress', () => {\n art.emit('setBar', 'loaded', art.loaded)\n })\n\n art.on('video:ended', () => {\n art.emit('setBar', 'played', 1)\n })\n }\n\n art.emit('setBar', 'loaded', art.loaded || 0)\n\n if (!isMobile) {\n proxy($control, 'click', (event) => {\n if (event.target !== $indicator) {\n setCurrentTime(art, event)\n }\n })\n\n proxy($control, 'mousemove', (event) => {\n const { percentage } = getPosFromEvent(art, event)\n art.emit('setBar', 'hover', percentage, event)\n setStyle($tip, 'display', 'flex')\n if (includeFromEvent(event, $highlight)) {\n showHighlight(event)\n }\n else {\n showTime(event)\n }\n })\n\n proxy($control, 'mouseleave', (event) => {\n setStyle($tip, 'display', 'none')\n art.emit('setBar', 'hover', 0, event)\n })\n\n proxy($control, 'mousedown', (event) => {\n isDragging = event.button === 0\n })\n\n art.on('document:mousemove', (event) => {\n if (isDragging) {\n const { second, percentage } = getPosFromEvent(art, event)\n art.emit('setBar', 'played', percentage, event)\n art.seek = second\n }\n })\n\n art.on('document:mouseup', () => {\n if (isDragging) {\n isDragging = false\n }\n })\n }\n },\n }\n }\n}\n","import { append } from '../utils'\n\nexport default function screenshot(option) {\n return art => ({\n ...option,\n tooltip: art.i18n.get('Screenshot'),\n mounted: ($control) => {\n const { proxy, icons } = art\n\n append($control, icons.screenshot)\n proxy($control, 'click', () => {\n art.screenshot()\n })\n },\n })\n}\n","import { append, tooltip } from '../utils'\n\nexport default function setting(option) {\n return art => ({\n ...option,\n tooltip: art.i18n.get('Show Setting'),\n mounted: ($control) => {\n const { proxy, icons, i18n } = art\n\n append($control, icons.setting)\n\n proxy($control, 'click', () => {\n art.setting.toggle()\n art.setting.resize()\n })\n\n art.on('setting', (value) => {\n tooltip($control, i18n.get(value ? 'Hide Setting' : 'Show Setting'))\n })\n },\n })\n}\n","import { isMobile, secondToTime } from '../utils'\n\nexport default function time(option) {\n return art => ({\n ...option,\n style: isMobile\n ? {\n fontSize: '12px',\n padding: '0 5px',\n }\n : {\n cursor: 'auto',\n padding: '0 10px',\n },\n mounted: ($control) => {\n function getTime() {\n const newTime = `${secondToTime(art.currentTime)} / ${secondToTime(art.duration)}`\n if (newTime !== $control.textContent) {\n $control.textContent = newTime\n }\n }\n\n getTime()\n\n const events = ['video:loadedmetadata', 'video:timeupdate', 'video:progress']\n for (let index = 0; index < events.length; index++) {\n art.on(events[index], getTime)\n }\n },\n })\n}\n","import { append, getRect, isMobile, setStyle } from '../utils'\n\nexport default function volume(option) {\n return art => ({\n ...option,\n mounted: ($control) => {\n const { proxy, icons } = art\n\n const $volume = append($control, icons.volume)\n const $close = append($control, icons.volumeClose)\n const $panel = append($control, '
')\n const $inner = append($panel, '
')\n const $value = append($inner, `
`)\n const $slider = append($inner, `
`)\n const $handle = append($slider, `
`)\n const $loaded = append($handle, `
`)\n const $indicator = append($slider, `
`)\n\n function getVolumeFromEvent(event) {\n const { top, height } = getRect($slider)\n return 1 - (event.clientY - top) / height\n }\n\n function update() {\n if (art.muted || art.volume === 0) {\n setStyle($volume, 'display', 'none')\n setStyle($close, 'display', 'flex')\n setStyle($indicator, 'top', '100%')\n setStyle($loaded, 'top', '100%')\n $value.textContent = 0\n }\n else {\n const percentage = art.volume * 100\n setStyle($volume, 'display', 'flex')\n setStyle($close, 'display', 'none')\n setStyle($indicator, 'top', `${100 - percentage}%`)\n setStyle($loaded, 'top', `${100 - percentage}%`)\n $value.textContent = Math.floor(percentage)\n }\n }\n\n update()\n art.on('video:volumechange', update)\n\n proxy($volume, 'click', () => {\n art.muted = true\n })\n\n proxy($close, 'click', () => {\n art.muted = false\n })\n\n if (isMobile) {\n setStyle($panel, 'display', 'none')\n }\n else {\n let isDragging = false\n\n proxy($slider, 'mousedown', (event) => {\n isDragging = event.button === 0\n art.volume = getVolumeFromEvent(event)\n })\n\n art.on('document:mousemove', (event) => {\n if (isDragging) {\n art.muted = false\n art.volume = getVolumeFromEvent(event)\n }\n })\n\n art.on('document:mouseup', () => {\n if (isDragging) {\n isDragging = false\n }\n })\n }\n },\n })\n}\n","import clickInit from './clickInit'\nimport documentInit from './documentInit'\nimport gestureInit from './gestureInit'\nimport hoverInit from './hoverInit'\nimport moveInit from './moveInit'\nimport resizeInit from './resizeInit'\nimport updateInit from './updateInit'\nimport viewInit from './viewInit'\n\nexport default class Events {\n constructor(art) {\n this.destroyEvents = []\n this.proxy = this.proxy.bind(this)\n this.hover = this.hover.bind(this)\n\n clickInit(art, this)\n hoverInit(art, this)\n moveInit(art, this)\n resizeInit(art, this)\n gestureInit(art, this)\n viewInit(art, this)\n documentInit(art, this)\n updateInit(art, this)\n }\n\n proxy(target, name, callback, option = {}) {\n if (Array.isArray(name)) {\n return name.map(item => this.proxy(target, item, callback, option))\n }\n\n target.addEventListener(name, callback, option)\n const destroy = () => target.removeEventListener(name, callback, option)\n this.destroyEvents.push(destroy)\n return destroy\n }\n\n hover(target, mouseenter, mouseleave) {\n if (mouseenter) {\n this.proxy(target, 'mouseenter', mouseenter)\n }\n if (mouseleave) {\n this.proxy(target, 'mouseleave', mouseleave)\n }\n }\n\n remove(destroyEvent) {\n const index = this.destroyEvents.indexOf(destroyEvent)\n if (index > -1) {\n destroyEvent()\n this.destroyEvents.splice(index, 1)\n }\n }\n\n destroy() {\n for (let index = 0; index < this.destroyEvents.length; index++) {\n this.destroyEvents[index]()\n }\n }\n}\n","import { includeFromEvent, isMobile } from '../utils'\n\nexport default function clickInit(art, events) {\n const {\n constructor,\n template: { $player, $video },\n } = art\n\n events.proxy(document, ['click', 'contextmenu'], (event) => {\n if (includeFromEvent(event, $player)) {\n art.isInput = event.target.tagName === 'INPUT'\n art.isFocus = true\n art.emit('focus', event)\n }\n else {\n art.isInput = false\n art.isFocus = false\n art.emit('blur', event)\n }\n })\n\n let clickTimes = []\n events.proxy($video, 'click', (event) => {\n const now = Date.now()\n clickTimes.push(now)\n const { MOBILE_CLICK_PLAY, DBCLICK_TIME, MOBILE_DBCLICK_PLAY, DBCLICK_FULLSCREEN } = constructor\n\n const clicks = clickTimes.filter(t => now - t <= DBCLICK_TIME)\n switch (clicks.length) {\n case 1:\n art.emit('click', event)\n\n if (isMobile) {\n if (!art.isLock && MOBILE_CLICK_PLAY) {\n art.toggle()\n }\n }\n else {\n art.toggle()\n }\n clickTimes = clicks\n break\n case 2:\n art.emit('dblclick', event)\n\n if (isMobile) {\n if (!art.isLock && MOBILE_DBCLICK_PLAY) {\n art.toggle()\n }\n }\n else {\n if (DBCLICK_FULLSCREEN) {\n art.fullscreen = !art.fullscreen\n }\n }\n clickTimes = []\n break\n default:\n clickTimes = []\n }\n })\n}\n","export default function documentInit(art, events) {\n events.proxy(document, 'mousemove', (event) => {\n art.emit('document:mousemove', event)\n })\n\n events.proxy(document, 'mouseup', (event) => {\n art.emit('document:mouseup', event)\n })\n}\n","import { setCurrentTime } from '../control/progress'\nimport { clamp, isMobile, secondToTime } from '../utils'\n\nfunction GetSlideAngle(dx, dy) {\n return (Math.atan2(dy, dx) * 180) / Math.PI\n}\n\nfunction GetSlideDirection(startX, startY, endX, endY) {\n const dy = startY - endY\n const dx = endX - startX\n let result = 0\n\n if (Math.abs(dx) < 2 && Math.abs(dy) < 2) {\n return result\n }\n\n const angle = GetSlideAngle(dx, dy)\n if (angle >= -45 && angle < 45) {\n result = 4\n }\n else if (angle >= 45 && angle < 135) {\n result = 1\n }\n else if (angle >= -135 && angle < -45) {\n result = 2\n }\n else if ((angle >= 135 && angle <= 180) || (angle >= -180 && angle < -135)) {\n result = 3\n }\n\n return result\n}\n\nexport default function gestureInit(art, events) {\n if (isMobile && !art.option.isLive) {\n const { $video, $progress } = art.template\n\n let touchTarget = null\n let isDragging = false\n let startX = 0\n let startY = 0\n let startTime = 0\n\n const onTouchStart = (event) => {\n if (event.touches.length === 1 && !art.isLock) {\n if (touchTarget === $progress) {\n setCurrentTime(art, event)\n }\n\n isDragging = true\n const { pageX, pageY } = event.touches[0]\n startX = pageX\n startY = pageY\n startTime = art.currentTime\n }\n }\n\n const onTouchMove = (event) => {\n if (event.touches.length === 1 && isDragging && art.duration) {\n const { pageX, pageY } = event.touches[0]\n const direction = GetSlideDirection(startX, startY, pageX, pageY)\n const isHorizontal = [3, 4].includes(direction)\n const isVertical = [1, 2].includes(direction)\n const isLegal = (isHorizontal && !art.isRotate) || (isVertical && art.isRotate)\n if (isLegal) {\n const ratioX = clamp((pageX - startX) / art.width, -1, 1)\n const ratioY = clamp((pageY - startY) / art.height, -1, 1)\n const ratio = art.isRotate ? ratioY : ratioX\n const TOUCH_MOVE_RATIO = touchTarget === $video ? art.constructor.TOUCH_MOVE_RATIO : 1\n const currentTime = clamp(startTime + art.duration * ratio * TOUCH_MOVE_RATIO, 0, art.duration)\n art.seek = currentTime\n art.emit('setBar', 'played', clamp(currentTime / art.duration, 0, 1), event)\n art.notice.show = `${secondToTime(currentTime)} / ${secondToTime(art.duration)}`\n }\n }\n }\n\n const onTouchEnd = () => {\n if (isDragging) {\n startX = 0\n startY = 0\n startTime = 0\n isDragging = false\n touchTarget = null\n }\n }\n\n if (art.option.gesture) {\n events.proxy($video, 'touchstart', (event) => {\n touchTarget = $video\n onTouchStart(event)\n })\n events.proxy($video, 'touchmove', onTouchMove)\n }\n\n events.proxy($progress, 'touchstart', (event) => {\n touchTarget = $progress\n onTouchStart(event)\n })\n\n events.proxy($progress, 'touchmove', onTouchMove)\n events.proxy(document, 'touchend', onTouchEnd)\n }\n}\n","import { addClass, removeClass } from '../utils'\n\nexport default function hoverInit(art, events) {\n const { $player } = art.template\n\n events.hover(\n $player,\n (event) => {\n addClass($player, 'art-hover')\n art.emit('hover', true, event)\n },\n (event) => {\n removeClass($player, 'art-hover')\n art.emit('hover', false, event)\n },\n )\n}\n","export default function moveInit(art, events) {\n const { $player } = art.template\n\n events.proxy($player, 'mousemove', (event) => {\n art.emit('mousemove', event)\n })\n}\n","import { debounce } from '../utils'\n\nexport default function resizeInit(art, events) {\n const { option, constructor } = art\n\n art.on('resize', () => {\n const { aspectRatio, notice } = art\n if (art.state === 'standard' && option.autoSize) {\n art.autoSize()\n }\n art.aspectRatio = aspectRatio\n notice.show = ''\n })\n\n const resizeFn = debounce(() => art.emit('resize'), constructor.RESIZE_TIME)\n events.proxy(window, ['orientationchange', 'resize'], () => resizeFn())\n if (screen && screen.orientation && screen.orientation.onchange) {\n events.proxy(screen.orientation, 'change', () => resizeFn())\n }\n}\n","export default function updateInit(art) {\n if (art.constructor.USE_RAF) {\n let timer = null;\n\n (function update() {\n if (art.playing) {\n art.emit('raf')\n }\n\n if (!art.isDestroy) {\n timer = requestAnimationFrame(update)\n }\n })()\n\n art.on('destroy', () => {\n cancelAnimationFrame(timer)\n })\n }\n}\n","import { isInViewport, throttle } from '../utils'\n\nexport default function viewInit(art, events) {\n const {\n option,\n constructor,\n template: { $container },\n } = art\n\n const scrollFn = throttle(() => {\n art.emit('view', isInViewport($container, constructor.SCROLL_GAP))\n }, constructor.SCROLL_TIME)\n\n events.proxy(window, 'scroll', () => scrollFn())\n\n art.on('view', (state) => {\n if (option.autoMini) {\n art.mini = !state\n }\n })\n}\n","import { isMobile } from './utils'\n\nexport default class Hotkey {\n constructor(art) {\n this.art = art\n this.keys = {}\n\n if (art.option.hotkey && !isMobile) {\n this.init()\n }\n }\n\n init() {\n const { proxy, constructor } = this.art\n\n this.add('Escape', () => {\n if (this.art.fullscreenWeb) {\n this.art.fullscreenWeb = false\n }\n })\n\n this.add('Space', () => {\n this.art.toggle()\n })\n\n this.add('ArrowLeft', () => {\n this.art.backward = constructor.SEEK_STEP\n })\n\n this.add('ArrowUp', () => {\n this.art.volume += constructor.VOLUME_STEP\n })\n\n this.add('ArrowRight', () => {\n this.art.forward = constructor.SEEK_STEP\n })\n\n this.add('ArrowDown', () => {\n this.art.volume -= constructor.VOLUME_STEP\n })\n\n proxy(document, 'keydown', (event) => {\n if (this.art.isFocus) {\n const tag = document.activeElement.tagName.toUpperCase()\n const editable = document.activeElement.getAttribute('contenteditable')\n if (\n tag !== 'INPUT'\n && tag !== 'TEXTAREA'\n && editable !== ''\n && editable !== 'true'\n && !event.altKey\n && !event.ctrlKey\n && !event.metaKey\n && !event.shiftKey\n ) {\n const events = this.keys[event.code]\n if (events) {\n event.preventDefault()\n for (let index = 0; index < events.length; index++) {\n events[index].call(this.art, event)\n }\n this.art.emit('hotkey', event)\n }\n }\n }\n this.art.emit('keydown', event)\n })\n }\n\n add(key, event) {\n if (this.keys[key]) {\n this.keys[key].push(event)\n }\n else {\n this.keys[key] = [event]\n }\n return this\n }\n\n remove(key, event) {\n if (this.keys[key]) {\n const index = this.keys[key].indexOf(event)\n if (index !== -1) {\n this.keys[key].splice(index, 1)\n }\n }\n return this\n }\n}\n","import { mergeDeep } from '../utils'\nimport zhCn from './zh-cn'\n\nexport default class I18n {\n constructor(art) {\n this.art = art\n\n this.languages = {\n 'zh-cn': zhCn,\n }\n\n this.language = {}\n\n this.update(art.option.i18n)\n }\n\n init() {\n const lang = this.art.option.lang.toLowerCase()\n this.language = this.languages[lang] || {}\n }\n\n get(key) {\n return this.language[key] || key\n }\n\n update(value) {\n this.languages = mergeDeep(this.languages, value)\n this.init()\n }\n}\n","const zhCn = {\n 'Video Info': '统计信息',\n 'Close': '关闭',\n 'Video Load Failed': '加载失败',\n 'Volume': '音量',\n 'Play': '播放',\n 'Pause': '暂停',\n 'Rate': '速度',\n 'Mute': '静音',\n 'Video Flip': '画面翻转',\n 'Horizontal': '水平',\n 'Vertical': '垂直',\n 'Reconnect': '重新连接',\n 'Show Setting': '显示设置',\n 'Hide Setting': '隐藏设置',\n 'Screenshot': '截图',\n 'Play Speed': '播放速度',\n 'Aspect Ratio': '画面比例',\n 'Default': '默认',\n 'Normal': '正常',\n 'Open': '打开',\n 'Switch Video': '切换',\n 'Switch Subtitle': '切换字幕',\n 'Fullscreen': '全屏',\n 'Exit Fullscreen': '退出全屏',\n 'Web Fullscreen': '网页全屏',\n 'Exit Web Fullscreen': '退出网页全屏',\n 'Mini Player': '迷你播放器',\n 'PIP Mode': '开启画中画',\n 'Exit PIP Mode': '退出画中画',\n 'PIP Not Supported': '不支持画中画',\n 'Fullscreen Not Supported': '不支持全屏',\n 'Subtitle Offset': '字幕偏移',\n 'Last Seen': '上次看到',\n 'Jump Play': '跳转播放',\n 'AirPlay': '隔空播放',\n 'AirPlay Not Available': '隔空播放不可用',\n}\n\nexport default zhCn\n\nif (typeof window !== 'undefined') {\n window['artplayer-i18n-zh-cn'] = zhCn\n}\n","import airplay from 'bundle-text:./airplay.svg'\nimport arrowLeft from 'bundle-text:./arrow-left.svg'\nimport arrowRight from 'bundle-text:./arrow-right.svg'\nimport aspectRatio from 'bundle-text:./aspect-ratio.svg'\nimport check from 'bundle-text:./check.svg'\nimport close from 'bundle-text:./close.svg'\nimport config from 'bundle-text:./config.svg'\nimport error from 'bundle-text:./error.svg'\nimport flip from 'bundle-text:./flip.svg'\nimport fullscreenOff from 'bundle-text:./fullscreen-off.svg'\nimport fullscreenOn from 'bundle-text:./fullscreen-on.svg'\nimport fullscreenWebOff from 'bundle-text:./fullscreen-web-off.svg'\nimport fullscreenWebOn from 'bundle-text:./fullscreen-web-on.svg'\nimport loading from 'bundle-text:./loading.svg'\nimport lock from 'bundle-text:./lock.svg'\nimport pause from 'bundle-text:./pause.svg'\nimport pip from 'bundle-text:./pip.svg'\nimport play from 'bundle-text:./play.svg'\nimport playbackRate from 'bundle-text:./playback-rate.svg'\nimport screenshot from 'bundle-text:./screenshot.svg'\nimport setting from 'bundle-text:./setting.svg'\nimport state from 'bundle-text:./state.svg'\nimport switchOff from 'bundle-text:./switch-off.svg'\nimport switchOn from 'bundle-text:./switch-on.svg'\nimport unlock from 'bundle-text:./unlock.svg'\nimport volumeClose from 'bundle-text:./volume-close.svg'\nimport volume from 'bundle-text:./volume.svg'\nimport { def, getIcon } from '../utils'\n\nexport default class Icons {\n constructor(art) {\n const icons = {\n loading,\n state,\n play,\n pause,\n check,\n volume,\n volumeClose,\n screenshot,\n setting,\n pip,\n arrowLeft,\n arrowRight,\n playbackRate,\n aspectRatio,\n config,\n lock,\n flip,\n unlock,\n fullscreenOff,\n fullscreenOn,\n fullscreenWebOff,\n fullscreenWebOn,\n switchOn,\n switchOff,\n error,\n close,\n airplay,\n ...art.option.icons,\n }\n\n for (const key in icons) {\n def(this, key, {\n get: () => getIcon(key, icons[key]),\n })\n }\n }\n}\n","module.exports = \"9e11ac5830b69238\";","module.exports = \"ea3f9694841ef258\";","module.exports = \"b67cac358913d514\";","module.exports = \"65c783bf793215eb\";","module.exports = \"6e9bb7fa28118e05\";","module.exports = \"ece62effeeaea8b9\";","module.exports = \"3fa24efddec6bcbd\";","module.exports = \"d3353905d0ec07f0\";","module.exports = \"9b95a2cd859b7b0b\";","module.exports = \"a76d6978226feea3\";","module.exports = \"fe487e5ddec5d380\";","module.exports = \"3f492d6cd9c76858\";","module.exports = \"46c741c838cae528\";","module.exports = \"75a057509707bc87\";","module.exports = \"358c932d8356421e\";","module.exports = \"b491c01323e26afb\";","module.exports = \"0d8559370ca5b4ef\";","module.exports = \"4838679ac81bbe80\";","module.exports = \"46895f0cf70aca10\";","module.exports = \"e4ecf862ed860d42\";","module.exports = \"a391299de3225f80\";","module.exports = \"820f454e33d34914\";","module.exports = \"03b02c181a6fb9ce\";","module.exports = \"ca0154888ac784ab\";","module.exports = \"7cf671d989be8873\";","module.exports = \"1499cf92f6f33dd9\";","module.exports = \"95ec2167c54ce911\";","import { isMobile, queryAll } from './utils'\nimport Component from './utils/component'\n\nexport default class Info extends Component {\n constructor(art) {\n super(art)\n this.name = 'info'\n\n if (!isMobile) {\n this.init()\n }\n }\n\n init() {\n const {\n proxy,\n constructor,\n template: { $infoPanel, $infoClose, $video },\n } = this.art\n\n proxy($infoClose, 'click', () => {\n this.show = false\n })\n\n let timer = null\n const $types = queryAll('[data-video]', $infoPanel) || []\n this.art.on('destroy', () => clearTimeout(timer))\n\n function loop() {\n for (let index = 0; index < $types.length; index++) {\n const item = $types[index]\n const value = $video[item.dataset.video]\n const textContent = typeof value === 'number' ? value.toFixed(2) : value\n if (item.textContent !== textContent) {\n item.textContent = textContent\n }\n }\n timer = setTimeout(loop, constructor.INFO_LOOP_TIME)\n }\n\n loop()\n }\n}\n","import Component from './utils/component'\n\nexport default class Layer extends Component {\n constructor(art) {\n super(art)\n\n const {\n option,\n template: { $layer },\n } = art\n\n this.name = 'layer'\n this.$parent = $layer\n\n for (let index = 0; index < option.layers.length; index++) {\n this.add(option.layers[index])\n }\n }\n}\n","import { append } from './utils'\nimport Component from './utils/component'\n\nexport default class Loading extends Component {\n constructor(art) {\n super(art)\n this.name = 'loading'\n append(art.template.$loading, art.icons.loading)\n }\n}\n","import { append, setStyle } from './utils'\nimport Component from './utils/component'\n\nexport default class Mask extends Component {\n constructor(art) {\n super(art)\n\n this.name = 'mask'\n const { template, icons, events } = art\n\n const $state = append(template.$state, icons.state)\n const $error = append(template.$state, icons.error)\n\n setStyle($error, 'display', 'none')\n\n art.on('destroy', () => {\n setStyle($state, 'display', 'none')\n setStyle($error, 'display', null)\n })\n\n events.proxy(template.$state, 'click', () => art.play())\n }\n}\n","import { addClass, removeClass } from './utils'\n\nexport default class Notice {\n constructor(art) {\n this.art = art\n this.timer = null\n }\n\n set show(msg) {\n const {\n constructor,\n template: { $player, $noticeInner },\n } = this.art\n\n if (msg) {\n $noticeInner.textContent = msg instanceof Error ? msg.message.trim() : msg\n addClass($player, 'art-notice-show')\n clearTimeout(this.timer)\n this.timer = setTimeout(() => {\n $noticeInner.textContent = ''\n removeClass($player, 'art-notice-show')\n }, constructor.NOTICE_TIME)\n }\n else {\n removeClass($player, 'art-notice-show')\n }\n }\n\n get show() {\n const {\n template: { $player },\n } = this.art\n return $player.classList.contains('art-notice-show')\n }\n}\n","import airplayMix from './airplayMix'\nimport aspectRatioMix from './aspectRatioMix'\nimport attrMix from './attrMix'\nimport autoHeightMix from './autoHeightMix'\nimport autoSizeMix from './autoSizeMix'\nimport cssVarMix from './cssVarMix'\nimport currentTimeMix from './currentTimeMix'\nimport durationMix from './durationMix'\nimport eventInit from './eventInit'\nimport flipMix from './flipMix'\nimport fullscreenMix from './fullscreenMix'\nimport fullscreenWebMix from './fullscreenWebMix'\nimport loadedMix from './loadedMix'\nimport miniMix from './miniMix'\nimport optionInit from './optionInit'\nimport pauseMix from './pauseMix'\nimport pipMix from './pipMix'\nimport playbackRateMix from './playbackRateMix'\nimport playedMix from './playedMix'\nimport playingMix from './playingMix'\nimport playMix from './playMix'\nimport posterMix from './posterMix'\nimport qualityMix from './qualityMix'\nimport rectMix from './rectMix'\nimport screenshotMix from './screenshotMix'\nimport seekMix from './seekMix'\nimport stateMix from './stateMix'\nimport subtitleOffsetMix from './subtitleOffsetMix'\nimport switchMix from './switchMix'\nimport themeMix from './themeMix'\nimport thumbnailsMix from './thumbnailsMix'\nimport toggleMix from './toggleMix'\nimport typeMix from './typeMix'\nimport urlMix from './urlMix'\nimport volumeMix from './volumeMix'\n\nexport default class Player {\n constructor(art) {\n urlMix(art)\n attrMix(art)\n playMix(art)\n pauseMix(art)\n toggleMix(art)\n seekMix(art)\n volumeMix(art)\n currentTimeMix(art)\n durationMix(art)\n switchMix(art)\n playbackRateMix(art)\n aspectRatioMix(art)\n screenshotMix(art)\n fullscreenMix(art)\n fullscreenWebMix(art)\n pipMix(art)\n loadedMix(art)\n playedMix(art)\n playingMix(art)\n autoSizeMix(art)\n rectMix(art)\n flipMix(art)\n miniMix(art)\n posterMix(art)\n autoHeightMix(art)\n cssVarMix(art)\n themeMix(art)\n typeMix(art)\n stateMix(art)\n subtitleOffsetMix(art)\n airplayMix(art)\n qualityMix(art)\n thumbnailsMix(art)\n eventInit(art)\n optionInit(art)\n }\n}\n","import { def } from '../utils'\n\nexport default function airplayMix(art) {\n const {\n i18n,\n notice,\n proxy,\n template: { $video },\n } = art\n\n let available = true\n\n if (window.WebKitPlaybackTargetAvailabilityEvent && $video.webkitShowPlaybackTargetPicker) {\n proxy($video, 'webkitplaybacktargetavailabilitychanged', (event) => {\n switch (event.availability) {\n case 'available':\n available = true\n break\n case 'not-available':\n available = false\n break\n }\n })\n }\n else {\n available = false\n }\n\n def(art, 'airplay', {\n value() {\n if (available) {\n $video.webkitShowPlaybackTargetPicker()\n art.emit('airplay')\n }\n else {\n notice.show = i18n.get('AirPlay Not Available')\n }\n },\n })\n}\n","import { def, setStyle } from '../utils'\n\nexport default function aspectRatioMix(art) {\n const {\n i18n,\n notice,\n template: { $video, $player },\n } = art\n\n def(art, 'aspectRatio', {\n get() {\n return $player.dataset.aspectRatio || 'default'\n },\n set(ratio) {\n if (!ratio)\n ratio = 'default'\n if (ratio === 'default') {\n setStyle($video, 'width', null)\n setStyle($video, 'height', null)\n setStyle($video, 'margin', null)\n delete $player.dataset.aspectRatio\n }\n else {\n const ratioArray = ratio.split(':').map(Number)\n const { clientWidth, clientHeight } = $player\n const playerRatio = clientWidth / clientHeight\n const setupRatio = ratioArray[0] / ratioArray[1]\n\n if (playerRatio > setupRatio) {\n setStyle($video, 'width', `${setupRatio * clientHeight}px`)\n setStyle($video, 'height', '100%')\n setStyle($video, 'margin', '0 auto')\n }\n else {\n setStyle($video, 'width', '100%')\n setStyle($video, 'height', `${clientWidth / setupRatio}px`)\n setStyle($video, 'margin', 'auto 0')\n }\n\n $player.dataset.aspectRatio = ratio\n }\n\n notice.show = `${i18n.get('Aspect Ratio')}: ${ratio === 'default' ? i18n.get('Default') : ratio}`\n art.emit('aspectRatio', ratio)\n },\n })\n}\n","import { def } from '../utils'\n\nexport default function attrMix(art) {\n const {\n template: { $video },\n } = art\n\n def(art, 'attr', {\n value(key, value) {\n if (value === undefined)\n return $video[key]\n $video[key] = value\n },\n })\n}\n","import { def, setStyle } from '../utils'\n\nexport default function autoHeightMix(art) {\n const {\n template: { $container, $video },\n } = art\n\n def(art, 'autoHeight', {\n value() {\n const { clientWidth } = $container\n const { videoHeight, videoWidth } = $video\n const height = videoHeight * (clientWidth / videoWidth)\n setStyle($container, 'height', `${height}px`)\n art.emit('autoHeight', height)\n },\n })\n}\n","import { def, getRect, setStyle } from '../utils'\n\nexport default function autoSizeMix(art) {\n const { $container, $player, $video } = art.template\n\n def(art, 'autoSize', {\n value() {\n const { videoWidth, videoHeight } = $video\n const { width, height } = getRect($container)\n const videoRatio = videoWidth / videoHeight\n const containerRatio = width / height\n if (containerRatio > videoRatio) {\n const percentage = ((height * videoRatio) / width) * 100\n setStyle($player, 'width', `${percentage}%`)\n setStyle($player, 'height', '100%')\n }\n else {\n const percentage = (width / videoRatio / height) * 100\n setStyle($player, 'width', '100%')\n setStyle($player, 'height', `${percentage}%`)\n }\n art.emit('autoSize', {\n width: art.width,\n height: art.height,\n })\n },\n })\n}\n","import { def } from '../utils'\n\nexport default function cssVarMix(art) {\n const { $player } = art.template\n\n def(art, 'cssVar', {\n value(key, value) {\n if (value) {\n return $player.style.setProperty(key, value)\n }\n else {\n return getComputedStyle($player).getPropertyValue(key)\n }\n },\n })\n}\n","import { clamp, def } from '../utils'\n\nexport default function currentTimeMix(art) {\n const { $video } = art.template\n\n def(art, 'currentTime', {\n get: () => $video.currentTime || 0,\n set: (time) => {\n time = Number.parseFloat(time)\n if (Number.isNaN(time))\n return\n $video.currentTime = clamp(time, 0, art.duration)\n },\n })\n}\n","import { def } from '../utils'\n\nexport default function durationMix(art) {\n def(art, 'duration', {\n get: () => {\n const { duration } = art.template.$video\n if (duration === Infinity)\n return 0\n return duration || 0\n },\n })\n}\n","import config from '../config'\nimport { addClass, isMobile, setStyle, sleep } from '../utils'\n\nexport default function eventInit(art) {\n const {\n i18n,\n notice,\n option,\n constructor,\n proxy,\n template: { $player, $video, $poster },\n } = art\n\n let reconnectTime = 0\n\n for (let index = 0; index < config.events.length; index++) {\n proxy($video, config.events[index], (event) => {\n art.emit(`video:${event.type}`, event)\n })\n }\n\n // art.on('video:abort', () => {\n\n // });\n\n art.on('video:canplay', () => {\n reconnectTime = 0\n art.loading.show = false\n })\n\n art.once('video:canplay', () => {\n art.loading.show = false\n art.controls.show = true\n art.mask.show = true\n art.isReady = true\n art.emit('ready')\n })\n\n // art.on('video:canplaythrough', () => {\n\n // });\n\n // art.on('video:durationchange', () => {\n\n // });\n\n // art.on('video:emptied', () => {\n\n // });\n\n art.on('video:ended', () => {\n if (option.loop) {\n art.seek = 0\n art.play()\n art.controls.show = false\n art.mask.show = false\n }\n else {\n art.controls.show = true\n art.mask.show = true\n }\n })\n\n art.on('video:error', async (error) => {\n if (reconnectTime < constructor.RECONNECT_TIME_MAX) {\n await sleep(constructor.RECONNECT_SLEEP_TIME)\n reconnectTime += 1\n art.url = option.url\n notice.show = `${i18n.get('Reconnect')}: ${reconnectTime}`\n art.emit('error', error, reconnectTime)\n }\n else {\n art.mask.show = true\n art.loading.show = false\n art.controls.show = true\n addClass($player, 'art-error')\n await sleep(constructor.RECONNECT_SLEEP_TIME)\n notice.show = i18n.get('Video Load Failed')\n }\n })\n\n // art.on('video:loadeddata', () => {\n\n // });\n\n art.on('video:loadedmetadata', () => {\n art.emit('resize')\n if (isMobile) {\n art.loading.show = false\n art.controls.show = true\n art.mask.show = true\n }\n })\n\n art.on('video:loadstart', () => {\n art.loading.show = true\n art.mask.show = false\n art.controls.show = true\n })\n\n art.on('video:pause', () => {\n art.controls.show = true\n art.mask.show = true\n })\n\n art.on('video:play', () => {\n art.mask.show = false\n setStyle($poster, 'display', 'none')\n })\n\n art.on('video:playing', () => {\n art.mask.show = false\n })\n\n art.on('video:progress', () => {\n if (art.playing) {\n art.loading.show = false\n }\n })\n\n // art.on('video:ratechange', () => {\n\n // });\n\n art.on('video:seeked', () => {\n art.loading.show = false\n art.mask.show = true\n })\n\n art.on('video:seeking', () => {\n art.loading.show = true\n art.mask.show = false\n })\n\n // art.on('video:stalled', () => {\n\n // });\n\n // art.on('video:suspend', () => {\n\n // });\n\n art.on('video:timeupdate', () => {\n art.mask.show = false\n })\n\n // art.on('video:volumechange', () => {\n\n // });\n\n art.on('video:waiting', () => {\n art.loading.show = true\n art.mask.show = false\n })\n}\n","import { capitalize, def } from '../utils'\n\nexport default function flipMix(art) {\n const {\n template: { $player },\n i18n,\n notice,\n } = art\n\n def(art, 'flip', {\n get() {\n return $player.dataset.flip || 'normal'\n },\n set(flip) {\n if (!flip)\n flip = 'normal'\n if (flip === 'normal') {\n delete $player.dataset.flip\n }\n else {\n $player.dataset.flip = flip\n }\n\n notice.show = `${i18n.get('Video Flip')}: ${i18n.get(capitalize(flip))}`\n art.emit('flip', flip)\n },\n })\n}\n","import screenfull from '../libs/screenfull'\nimport { addClass, def, get, removeClass } from '../utils'\n\nexport default function fullscreenMix(art) {\n const {\n i18n,\n notice,\n template: { $video, $player },\n } = art\n\n const nativeScreenfull = (art) => {\n screenfull.on('change', () => {\n art.emit('fullscreen', screenfull.isFullscreen)\n\n if (screenfull.isFullscreen) {\n art.state = 'fullscreen'\n addClass($player, 'art-fullscreen')\n }\n else {\n removeClass($player, 'art-fullscreen')\n }\n\n art.emit('resize')\n })\n\n screenfull.on('error', (event) => {\n art.emit('fullscreenError', event)\n })\n\n def(art, 'fullscreen', {\n get() {\n return screenfull.isFullscreen\n },\n async set(value) {\n if (value) {\n await screenfull.request($player)\n }\n else {\n await screenfull.exit()\n }\n },\n })\n }\n\n const webkitScreenfull = (art) => {\n art.proxy(document, 'webkitfullscreenchange', () => {\n art.emit('fullscreen', art.fullscreen)\n art.emit('resize')\n })\n\n def(art, 'fullscreen', {\n get() {\n return document.fullscreenElement === $video\n },\n set(value) {\n if (value) {\n art.state = 'fullscreen'\n $video.webkitEnterFullscreen()\n }\n else {\n $video.webkitExitFullscreen()\n }\n },\n })\n }\n\n art.once('video:loadedmetadata', () => {\n if (screenfull.isEnabled) {\n nativeScreenfull(art)\n }\n else if ($video.webkitSupportsFullscreen) {\n webkitScreenfull(art)\n }\n else {\n def(art, 'fullscreen', {\n get() {\n return false\n },\n set() {\n notice.show = i18n.get('Fullscreen Not Supported')\n },\n })\n }\n\n // Asynchronous setting\n def(art, 'fullscreen', get(art, 'fullscreen'))\n })\n}\n","const methodMap = [\n [\n 'requestFullscreen',\n 'exitFullscreen',\n 'fullscreenElement',\n 'fullscreenEnabled',\n 'fullscreenchange',\n 'fullscreenerror',\n ],\n // New WebKit\n [\n 'webkitRequestFullscreen',\n 'webkitExitFullscreen',\n 'webkitFullscreenElement',\n 'webkitFullscreenEnabled',\n 'webkitfullscreenchange',\n 'webkitfullscreenerror',\n ],\n // Old WebKit\n [\n 'webkitRequestFullScreen',\n 'webkitCancelFullScreen',\n 'webkitCurrentFullScreenElement',\n 'webkitCancelFullScreen',\n 'webkitfullscreenchange',\n 'webkitfullscreenerror',\n ],\n [\n 'mozRequestFullScreen',\n 'mozCancelFullScreen',\n 'mozFullScreenElement',\n 'mozFullScreenEnabled',\n 'mozfullscreenchange',\n 'mozfullscreenerror',\n ],\n [\n 'msRequestFullscreen',\n 'msExitFullscreen',\n 'msFullscreenElement',\n 'msFullscreenEnabled',\n 'MSFullscreenChange',\n 'MSFullscreenError',\n ],\n]\n\nconst nativeAPI = (() => {\n if (typeof document === 'undefined') {\n return false\n }\n\n const unprefixedMethods = methodMap[0]\n const returnValue = {}\n\n for (const methodList of methodMap) {\n const exitFullscreenMethod = methodList[1]\n if (exitFullscreenMethod in document) {\n for (const [index, method] of methodList.entries()) {\n returnValue[unprefixedMethods[index]] = method\n }\n\n return returnValue\n }\n }\n\n return false\n})()\n\nconst eventNameMap = {\n change: nativeAPI.fullscreenchange,\n error: nativeAPI.fullscreenerror,\n}\n\nconst screenfull = {\n request(element = document.documentElement, options) {\n return new Promise((resolve, reject) => {\n const onFullScreenEntered = () => {\n screenfull.off('change', onFullScreenEntered)\n resolve()\n }\n\n screenfull.on('change', onFullScreenEntered)\n\n const returnPromise = element[nativeAPI.requestFullscreen](options)\n\n if (returnPromise instanceof Promise) {\n returnPromise.then(onFullScreenEntered).catch(reject)\n }\n })\n },\n exit() {\n return new Promise((resolve, reject) => {\n if (!screenfull.isFullscreen) {\n resolve()\n return\n }\n\n const onFullScreenExit = () => {\n screenfull.off('change', onFullScreenExit)\n resolve()\n }\n\n screenfull.on('change', onFullScreenExit)\n\n const returnPromise = document[nativeAPI.exitFullscreen]()\n\n if (returnPromise instanceof Promise) {\n returnPromise.then(onFullScreenExit).catch(reject)\n }\n })\n },\n toggle(element, options) {\n return screenfull.isFullscreen ? screenfull.exit() : screenfull.request(element, options)\n },\n onchange(callback) {\n screenfull.on('change', callback)\n },\n onerror(callback) {\n screenfull.on('error', callback)\n },\n on(event, callback) {\n const eventName = eventNameMap[event]\n if (eventName) {\n document.addEventListener(eventName, callback, false)\n }\n },\n off(event, callback) {\n const eventName = eventNameMap[event]\n if (eventName) {\n document.removeEventListener(eventName, callback, false)\n }\n },\n raw: nativeAPI,\n}\n\nObject.defineProperties(screenfull, {\n isFullscreen: {\n get: () => Boolean(document[nativeAPI.fullscreenElement]),\n },\n element: {\n enumerable: true,\n get: () => document[nativeAPI.fullscreenElement],\n },\n isEnabled: {\n enumerable: true,\n get: () => Boolean(document[nativeAPI.fullscreenEnabled]),\n },\n})\n\nif (!nativeAPI) {\n screenfull.isEnabled = false\n}\n\nexport default screenfull\n","import { addClass, append, def, hasClass, removeClass, setStyle } from '../utils'\n\nexport default function fullscreenWebMix(art) {\n const {\n constructor,\n template: { $container, $player },\n } = art\n\n let cssText = ''\n def(art, 'fullscreenWeb', {\n get() {\n return hasClass($player, 'art-fullscreen-web')\n },\n set(value) {\n if (value) {\n cssText = $player.style.cssText\n if (constructor.FULLSCREEN_WEB_IN_BODY) {\n append(document.body, $player)\n }\n art.state = 'fullscreenWeb'\n setStyle($player, 'width', '100%')\n setStyle($player, 'height', '100%')\n addClass($player, 'art-fullscreen-web')\n art.emit('fullscreenWeb', true)\n }\n else {\n if (constructor.FULLSCREEN_WEB_IN_BODY) {\n append($container, $player)\n }\n if (cssText) {\n $player.style.cssText = cssText\n cssText = ''\n }\n removeClass($player, 'art-fullscreen-web')\n art.emit('fullscreenWeb', false)\n }\n\n art.emit('resize')\n },\n })\n}\n","import { def } from '../utils'\n\nexport default function loadedMix(art) {\n const { $video } = art.template\n\n def(art, 'loaded', {\n get: () => art.loadedTime / $video.duration,\n })\n\n def(art, 'loadedTime', {\n get: () => {\n return $video.buffered.length ? $video.buffered.end($video.buffered.length - 1) : 0\n },\n })\n}\n","import { addClass, append, createElement, def, getRect, hasClass, isInViewport, removeClass, setStyle } from '../utils'\n\nexport default function miniMix(art) {\n const {\n icons,\n proxy,\n storage,\n template: { $player, $video },\n } = art\n\n let isDragging = false\n let lastPageX = 0\n let lastPageY = 0\n\n function hideMini() {\n const { $mini } = art.template\n if ($mini) {\n removeClass($player, 'art-mini')\n setStyle($mini, 'display', 'none')\n $player.prepend($video)\n art.emit('mini', false)\n }\n }\n\n function initState($play, $pause) {\n if (art.playing) {\n setStyle($play, 'display', `none`)\n setStyle($pause, 'display', `flex`)\n }\n else {\n setStyle($play, 'display', `flex`)\n setStyle($pause, 'display', `none`)\n }\n }\n\n function createMini() {\n const { $mini } = art.template\n if ($mini) {\n append($mini, $video)\n return setStyle($mini, 'display', 'flex')\n }\n else {\n const $mini = createElement('div')\n addClass($mini, 'art-mini-popup')\n append(document.body, $mini)\n art.template.$mini = $mini\n append($mini, $video)\n\n const $close = append($mini, `
`)\n append($close, icons.close)\n proxy($close, 'click', hideMini)\n\n const $state = append($mini, `
`)\n const $play = append($state, icons.play)\n const $pause = append($state, icons.pause)\n proxy($play, 'click', () => art.play())\n proxy($pause, 'click', () => art.pause())\n initState($play, $pause)\n art.on('video:playing', () => initState($play, $pause))\n art.on('video:pause', () => initState($play, $pause))\n art.on('video:timeupdate', () => initState($play, $pause))\n\n proxy($mini, 'mousedown', (event) => {\n isDragging = event.button === 0\n lastPageX = event.pageX\n lastPageY = event.pageY\n })\n\n art.on('document:mousemove', (event) => {\n if (isDragging) {\n addClass($mini, 'art-mini-dragging')\n const x = event.pageX - lastPageX\n const y = event.pageY - lastPageY\n setStyle($mini, 'transform', `translate(${x}px, ${y}px)`)\n }\n })\n\n art.on('document:mouseup', () => {\n if (isDragging) {\n isDragging = false\n removeClass($mini, 'art-mini-dragging')\n const rect = getRect($mini)\n storage.set('left', rect.left)\n storage.set('top', rect.top)\n setStyle($mini, 'left', `${rect.left}px`)\n setStyle($mini, 'top', `${rect.top}px`)\n setStyle($mini, 'transform', null)\n }\n })\n\n return $mini\n }\n }\n\n function initMini() {\n const { $mini } = art.template\n const rect = getRect($mini)\n const top = window.innerHeight - rect.height - 50\n const left = window.innerWidth - rect.width - 50\n storage.set('top', top)\n storage.set('left', left)\n setStyle($mini, 'top', `${top}px`)\n setStyle($mini, 'left', `${left}px`)\n }\n\n def(art, 'mini', {\n get() {\n return hasClass($player, 'art-mini')\n },\n set(value) {\n if (value) {\n art.state = 'mini'\n addClass($player, 'art-mini')\n const $mini = createMini()\n const top = storage.get('top')\n const left = storage.get('left')\n if (typeof top === 'number' && typeof left === 'number') {\n setStyle($mini, 'top', `${top}px`)\n setStyle($mini, 'left', `${left}px`)\n if (!isInViewport($mini)) {\n initMini()\n }\n }\n else {\n initMini()\n }\n art.emit('mini', true)\n }\n else {\n hideMini()\n }\n },\n })\n}\n","import { clamp, setStyle } from '../utils'\n\nexport default function optionInit(art) {\n const {\n option,\n storage,\n template: { $video, $poster },\n } = art\n\n for (const key in option.moreVideoAttr) {\n art.attr(key, option.moreVideoAttr[key])\n }\n\n if (option.muted) {\n art.muted = option.muted\n }\n\n if (option.volume) {\n $video.volume = clamp(option.volume, 0, 1)\n }\n\n const volumeStorage = storage.get('volume')\n if (typeof volumeStorage === 'number') {\n $video.volume = clamp(volumeStorage, 0, 1)\n }\n\n if (option.poster) {\n setStyle($poster, 'backgroundImage', `url(${option.poster})`)\n }\n\n if (option.autoplay) {\n $video.autoplay = option.autoplay\n }\n\n if (option.playsInline) {\n $video.playsInline = true\n $video['webkit-playsinline'] = true\n }\n\n if (option.theme) {\n option.cssVar['--art-theme'] = option.theme\n }\n\n for (const key in option.cssVar) {\n art.cssVar(key, option.cssVar[key])\n }\n\n art.url = option.url\n}\n","import { def } from '../utils'\n\nexport default function pauseMix(art) {\n const {\n template: { $video },\n i18n,\n notice,\n } = art\n\n def(art, 'pause', {\n value() {\n const result = $video.pause()\n notice.show = i18n.get('Pause')\n art.emit('pause')\n return result\n },\n })\n}\n","import { def } from '../utils'\n\nfunction nativePip(art) {\n const {\n template: { $video },\n proxy,\n notice,\n } = art\n\n $video.disablePictureInPicture = false\n\n def(art, 'pip', {\n get() {\n return document.pictureInPictureElement\n },\n set(value) {\n if (value) {\n art.state = 'pip'\n $video.requestPictureInPicture().catch((err) => {\n notice.show = err\n throw err\n })\n }\n else {\n document.exitPictureInPicture().catch((err) => {\n notice.show = err\n throw err\n })\n }\n },\n })\n\n proxy($video, 'enterpictureinpicture', () => {\n art.emit('pip', true)\n })\n\n proxy($video, 'leavepictureinpicture', () => {\n art.emit('pip', false)\n })\n}\n\nfunction webkitPip(art) {\n const { $video } = art.template\n\n $video.webkitSetPresentationMode('inline')\n\n def(art, 'pip', {\n get() {\n return $video.webkitPresentationMode === 'picture-in-picture'\n },\n set(value) {\n if (value) {\n art.state = 'pip'\n $video.webkitSetPresentationMode('picture-in-picture')\n art.emit('pip', true)\n }\n else {\n $video.webkitSetPresentationMode('inline')\n art.emit('pip', false)\n }\n },\n })\n}\n\nexport default function pipMix(art) {\n const {\n i18n,\n notice,\n template: { $video },\n } = art\n if (document.pictureInPictureEnabled) {\n nativePip(art)\n }\n else if ($video.webkitSupportsPresentationMode) {\n webkitPip(art)\n }\n else {\n def(art, 'pip', {\n get() {\n return false\n },\n set() {\n notice.show = i18n.get('PIP Not Supported')\n },\n })\n }\n}\n","import { def } from '../utils'\n\nexport default function playbackRateMix(art) {\n const {\n template: { $video },\n i18n,\n notice,\n } = art\n\n def(art, 'playbackRate', {\n get() {\n return $video.playbackRate\n },\n set(rate) {\n if (rate) {\n if (rate === $video.playbackRate)\n return\n $video.playbackRate = rate\n notice.show = `${i18n.get('Rate')}: ${rate === 1.0 ? i18n.get('Normal') : `${rate}x`}`\n }\n else {\n art.playbackRate = 1\n }\n },\n })\n}\n","import { def } from '../utils'\n\nexport default function playedMix(art) {\n def(art, 'played', {\n get: () => art.currentTime / art.duration,\n })\n}\n","import { def } from '../utils'\n\nexport default function playingMix(art) {\n const { $video } = art.template\n def(art, 'playing', {\n get: () => {\n if (typeof $video.playing === 'boolean')\n return $video.playing\n return !!($video.currentTime > 0 && !$video.paused && !$video.ended && $video.readyState > 2)\n },\n })\n}\n","import { def } from '../utils'\n\nexport default function playMix(art) {\n const {\n i18n,\n notice,\n option,\n constructor: { instances },\n template: { $video },\n } = art\n\n def(art, 'play', {\n async value() {\n const result = await $video.play()\n notice.show = i18n.get('Play')\n art.emit('play')\n\n if (option.mutex) {\n for (let index = 0; index < instances.length; index++) {\n const instance = instances[index]\n if (instance !== art) {\n instance.pause()\n }\n }\n }\n\n return result\n },\n })\n}\n","import { def, setStyle } from '../utils'\n\nexport default function posterMix(art) {\n const {\n template: { $poster },\n } = art\n\n def(art, 'poster', {\n get: () => {\n try {\n return $poster.style.backgroundImage.match(/\"(.*)\"/)[1]\n }\n catch {\n return ''\n }\n },\n set(url) {\n setStyle($poster, 'backgroundImage', `url(${url})`)\n },\n })\n}\n","import { def } from '../utils'\n\nexport default function qualityMix(art) {\n def(art, 'quality', {\n set(quality) {\n const { controls, notice, i18n } = art\n const qualityDefault = quality.find(item => item.default) || quality[0]\n controls.update({\n name: 'quality',\n position: 'right',\n index: 10,\n style: {\n marginRight: '10px',\n },\n html: qualityDefault?.html || '',\n selector: quality,\n async onSelect(item) {\n await art.switchQuality(item.url)\n notice.show = `${i18n.get('Switch Video')}: ${item.html}`\n return item.html\n },\n })\n },\n })\n}\n","import { def, getRect } from '../utils'\n\nexport default function rectMix(art) {\n def(art, 'rect', {\n get: () => {\n return getRect(art.template.$player)\n },\n })\n\n const keys = ['bottom', 'height', 'left', 'right', 'top', 'width']\n for (let index = 0; index < keys.length; index++) {\n const key = keys[index]\n def(art, key, {\n get: () => {\n return art.rect[key]\n },\n })\n }\n\n def(art, 'x', {\n get: () => {\n return art.left + window.pageXOffset\n },\n })\n\n def(art, 'y', {\n get: () => {\n return art.top + window.pageYOffset\n },\n })\n}\n","import { createElement, def, download, secondToTime } from '../utils'\n\nexport default function screenshotMix(art) {\n const {\n notice,\n template: { $video },\n } = art\n\n const $canvas = createElement('canvas')\n\n def(art, 'getDataURL', {\n value: () =>\n new Promise((resolve, reject) => {\n try {\n $canvas.width = $video.videoWidth\n $canvas.height = $video.videoHeight\n $canvas.getContext('2d').drawImage($video, 0, 0)\n resolve($canvas.toDataURL('image/png'))\n }\n catch (err) {\n notice.show = err\n reject(err)\n }\n }),\n })\n\n def(art, 'getBlobUrl', {\n value: () =>\n new Promise((resolve, reject) => {\n try {\n $canvas.width = $video.videoWidth\n $canvas.height = $video.videoHeight\n $canvas.getContext('2d').drawImage($video, 0, 0)\n $canvas.toBlob((blob) => {\n resolve(URL.createObjectURL(blob))\n })\n }\n catch (err) {\n notice.show = err\n reject(err)\n }\n }),\n })\n\n def(art, 'screenshot', {\n value: async (name) => {\n const dataUri = await art.getDataURL()\n const fileName = name || `artplayer_${secondToTime($video.currentTime)}`\n download(dataUri, `${fileName}.png`)\n art.emit('screenshot', dataUri)\n return dataUri\n },\n })\n}\n","import { def, secondToTime } from '../utils'\n\nexport default function seekMix(art) {\n const { notice } = art\n\n def(art, 'seek', {\n set(time) {\n art.currentTime = time\n if (art.duration) {\n notice.show = `${secondToTime(art.currentTime)} / ${secondToTime(art.duration)}`\n }\n art.emit('seek', art.currentTime)\n },\n })\n\n def(art, 'forward', {\n set(time) {\n art.seek = art.currentTime + time\n },\n })\n\n def(art, 'backward', {\n set(time) {\n art.seek = art.currentTime - time\n },\n })\n}\n","import { def } from '../utils'\n\nexport default function stateMix(art) {\n const states = ['mini', 'pip', 'fullscreen', 'fullscreenWeb']\n def(art, 'state', {\n get: () => states.find(name => art[name]) || 'standard',\n set(name) {\n for (let index = 0; index < states.length; index++) {\n const prop = states[index]\n if (prop !== name && art[prop]) {\n art[prop] = false\n }\n }\n },\n })\n}\n","import { clamp, def } from '../utils'\n\nexport default function subtitleOffsetMix(art) {\n const { notice, i18n, template } = art\n\n def(art, 'subtitleOffset', {\n get() {\n return template.$track?.offset || 0\n },\n set(value) {\n const { cues } = art.subtitle\n if (!template.$track || cues.length === 0)\n return\n const offset = clamp(value, -10, 10)\n template.$track.offset = offset\n for (let index = 0; index < cues.length; index++) {\n const cue = cues[index]\n cue.originalStartTime = cue.originalStartTime ?? cue.startTime\n cue.originalEndTime = cue.originalEndTime ?? cue.endTime\n cue.startTime = clamp(cue.originalStartTime + offset, 0, art.duration)\n cue.endTime = clamp(cue.originalEndTime + offset, 0, art.duration)\n }\n art.subtitle.update()\n notice.show = `${i18n.get('Subtitle Offset')}: ${value}s`\n art.emit('subtitleOffset', value)\n },\n })\n}\n","import { def } from '../utils'\n\nexport default function switchMix(art) {\n function switchUrl(url, currentTime) {\n return new Promise((resolve, reject) => {\n if (url === art.url)\n return\n const { playing, aspectRatio, playbackRate } = art\n\n art.pause()\n art.url = url\n art.notice.show = ''\n\n art.once('video:error', reject)\n\n art.once('video:loadedmetadata', () => {\n art.currentTime = currentTime\n })\n\n art.once('video:canplay', async () => {\n art.playbackRate = playbackRate\n art.aspectRatio = aspectRatio\n\n if (playing) {\n await art.play()\n }\n\n art.notice.show = ''\n\n resolve()\n })\n })\n }\n\n def(art, 'switchQuality', {\n value: (url) => {\n return switchUrl(url, art.currentTime)\n },\n })\n\n def(art, 'switchUrl', {\n value: (url) => {\n return switchUrl(url, 0)\n },\n })\n\n def(art, 'switch', {\n set: art.switchUrl,\n })\n}\n","import { def } from '../utils'\n\nexport default function themeMix(art) {\n def(art, 'theme', {\n get() {\n return art.cssVar('--art-theme')\n },\n set(theme) {\n art.cssVar('--art-theme', theme)\n },\n })\n}\n","import { def, isMobile, loadImg, setStyle } from '../utils'\n\nexport default function thumbnailsMix(art) {\n const {\n events,\n option,\n template: { $progress, $video },\n } = art\n\n let timer = null\n let image = null\n let loading = false\n let isLoad = false\n let isHover = false\n\n function reset() {\n clearTimeout(timer)\n timer = null\n image = null\n loading = false\n isLoad = false\n }\n\n function showThumbnails(posWidth) {\n const $thumbnails = art.controls?.thumbnails\n if (!$thumbnails)\n return\n\n const { number, column, width, height, scale } = option.thumbnails\n const width2 = width * scale || image.naturalWidth / column\n const height2 = height * scale || width2 / ($video.videoWidth / $video.videoHeight)\n const perWidth = $progress.clientWidth / number\n const perIndex = Math.floor(posWidth / perWidth)\n const yIndex = Math.ceil(perIndex / column) - 1\n const xIndex = perIndex % column || column - 1\n setStyle($thumbnails, 'backgroundImage', `url(${image.src})`)\n setStyle($thumbnails, 'height', `${height2}px`)\n setStyle($thumbnails, 'width', `${width2}px`)\n setStyle($thumbnails, 'backgroundPosition', `-${xIndex * width2}px -${yIndex * height2}px`)\n if (posWidth <= width2 / 2) {\n setStyle($thumbnails, 'left', 0)\n }\n else if (posWidth > $progress.clientWidth - width2 / 2) {\n setStyle($thumbnails, 'left', `${$progress.clientWidth - width2}px`)\n }\n else {\n setStyle($thumbnails, 'left', `${posWidth - width2 / 2}px`)\n }\n }\n\n events.hover(\n $progress,\n () => {\n isHover = true\n },\n () => {\n isHover = false\n },\n )\n\n art.on('setBar', async (type, percentage, event) => {\n const $thumbnails = art.controls?.thumbnails\n const { url, scale } = option.thumbnails\n if (!$thumbnails || !url)\n return\n\n const isMobileDragging = type === 'played' && event && isMobile\n\n if (type === 'hover' || isMobileDragging) {\n if (!loading) {\n loading = true\n image = await loadImg(url, scale)\n isLoad = true\n }\n\n if (!isLoad || !isHover)\n return\n\n const width = $progress.clientWidth * percentage\n setStyle($thumbnails, 'display', 'flex')\n\n if (width > 0 && width < $progress.clientWidth) {\n showThumbnails(width)\n }\n else {\n if (!isMobile) {\n setStyle($thumbnails, 'display', 'none')\n }\n }\n\n if (isMobileDragging) {\n clearTimeout(timer)\n timer = setTimeout(() => {\n setStyle($thumbnails, 'display', 'none')\n }, 500)\n }\n }\n })\n\n def(art, 'thumbnails', {\n get() {\n return art.option.thumbnails\n },\n set(thumbnails) {\n if (thumbnails.url && !art.option.isLive) {\n art.option.thumbnails = thumbnails\n reset()\n }\n },\n })\n}\n","import { def } from '../utils'\n\nexport default function toggleMix(art) {\n def(art, 'toggle', {\n value() {\n if (art.playing) {\n return art.pause()\n }\n else {\n return art.play()\n }\n },\n })\n}\n","import { def } from '../utils'\n\nexport default function typeMix(art) {\n def(art, 'type', {\n get() {\n return art.option.type\n },\n set(type) {\n art.option.type = type\n },\n })\n}\n","import { def, getExt, sleep } from '../utils'\n\nexport default function urlMix(art) {\n const {\n option,\n template: { $video },\n } = art\n\n def(art, 'url', {\n get() {\n return $video.src\n },\n async set(newUrl) {\n if (newUrl) {\n const oldUrl = art.url\n const typeName = option.type || getExt(newUrl)\n const typeCallback = option.customType[typeName]\n\n if (typeName && typeCallback) {\n await sleep()\n art.loading.show = true\n typeCallback.call(art, $video, newUrl, art)\n }\n else {\n URL.revokeObjectURL(oldUrl)\n $video.src = newUrl\n }\n\n if (oldUrl !== art.url) {\n art.option.url = newUrl\n if (art.isReady && oldUrl) {\n art.once('video:canplay', () => {\n art.emit('restart', newUrl)\n })\n }\n }\n }\n else {\n await sleep()\n art.loading.show = true\n }\n },\n })\n}\n","import { clamp, def } from '../utils'\n\nexport default function volumeMix(art) {\n const {\n template: { $video },\n i18n,\n notice,\n storage,\n } = art\n\n def(art, 'volume', {\n get: () => $video.volume || 0,\n set: (percentage) => {\n $video.volume = clamp(percentage, 0, 1)\n notice.show = `${i18n.get('Volume')}: ${Number.parseInt($video.volume * 100, 10)}`\n if ($video.volume !== 0) {\n storage.set('volume', $video.volume)\n }\n },\n })\n\n def(art, 'muted', {\n get: () => $video.muted,\n set: (muted) => {\n $video.muted = muted\n art.emit('muted', muted)\n },\n })\n}\n","import { def, errorHandle, has, isMobile } from '../utils'\nimport autoOrientation from './autoOrientation'\nimport autoPlayback from './autoPlayback'\nimport fastForward from './fastForward'\nimport lock from './lock'\nimport miniProgressBar from './miniProgressBar'\n\nexport default class Plugins {\n constructor(art) {\n this.art = art\n this.id = 0\n\n const { option } = art\n\n if (option.miniProgressBar && !option.isLive) {\n this.add(miniProgressBar)\n }\n\n if (option.lock && isMobile) {\n this.add(lock)\n }\n\n if (option.autoPlayback && !option.isLive) {\n this.add(autoPlayback)\n }\n\n if (option.autoOrientation && isMobile) {\n this.add(autoOrientation)\n }\n\n if (option.fastForward && isMobile && !option.isLive) {\n this.add(fastForward)\n }\n\n for (let index = 0; index < option.plugins.length; index++) {\n this.add(option.plugins[index])\n }\n }\n\n add(plugin) {\n this.id += 1\n const result = plugin.call(this.art, this.art)\n if (result instanceof Promise) {\n return result.then(res => this.next(plugin, res))\n }\n else {\n return this.next(plugin, result)\n }\n }\n\n next(plugin, result) {\n const pluginName = (result && result.name) || plugin.name || `plugin${this.id}`\n errorHandle(!has(this, pluginName), `Cannot add a plugin that already has the same name: ${pluginName}`)\n def(this, pluginName, {\n value: result,\n })\n return this\n }\n}\n","import { addClass, hasClass, removeClass, setStyle } from '../utils'\n\nexport default function autoOrientation(art) {\n const {\n constructor,\n template: { $player, $video },\n } = art\n\n art.on('fullscreenWeb', (state) => {\n if (state) {\n const { videoWidth, videoHeight } = $video\n const { clientWidth: viewWidth, clientHeight: viewHeight } = document.documentElement\n if (\n (videoWidth > videoHeight && viewWidth < viewHeight)\n || (videoWidth < videoHeight && viewWidth > viewHeight)\n ) {\n // There is a conflict with the fullscreen event, and it is changed to asynchronous execution\n setTimeout(() => {\n setStyle($player, 'width', `${viewHeight}px`)\n setStyle($player, 'height', `${viewWidth}px`)\n setStyle($player, 'transform-origin', '0 0')\n setStyle($player, 'transform', `rotate(90deg) translate(0, -${viewWidth}px)`)\n addClass($player, 'art-auto-orientation')\n art.isRotate = true\n art.emit('resize')\n }, constructor.AUTO_ORIENTATION_TIME)\n }\n }\n else {\n if (hasClass($player, 'art-auto-orientation')) {\n removeClass($player, 'art-auto-orientation')\n art.isRotate = false\n art.emit('resize')\n }\n }\n })\n\n art.on('fullscreen', async (state) => {\n if (!screen?.orientation?.lock)\n return\n\n const lastOrientation = screen.orientation.type\n if (state) {\n const { videoWidth, videoHeight } = $video\n const { clientWidth: viewWidth, clientHeight: viewHeight } = document.documentElement\n if (\n (videoWidth > videoHeight && viewWidth < viewHeight)\n || (videoWidth < videoHeight && viewWidth > viewHeight)\n ) {\n const oppositeOrientation = lastOrientation.startsWith('portrait') ? 'landscape' : 'portrait'\n await screen.orientation.lock(oppositeOrientation)\n addClass($player, 'art-auto-orientation-fullscreen')\n }\n }\n else {\n if (hasClass($player, 'art-auto-orientation-fullscreen')) {\n await screen.orientation.lock(lastOrientation)\n removeClass($player, 'art-auto-orientation-fullscreen')\n }\n }\n })\n\n return {\n name: 'autoOrientation',\n get state() {\n return hasClass($player, 'art-auto-orientation')\n },\n }\n}\n","import { append, query, secondToTime, setStyle } from '../utils'\n\nexport default function autoPlayback(art) {\n const {\n i18n,\n icons,\n storage,\n constructor,\n proxy,\n template: { $poster },\n } = art\n\n const $autoPlayback = art.layers.add({\n name: 'auto-playback',\n html: `\n
\n
\n
\n `,\n })\n\n const $last = query('.art-auto-playback-last', $autoPlayback)\n const $jump = query('.art-auto-playback-jump', $autoPlayback)\n const $close = query('.art-auto-playback-close', $autoPlayback)\n append($close, icons.close)\n\n let timer = null\n\n art.on('video:timeupdate', () => {\n if (art.playing) {\n const times = storage.get('times') || {}\n const keys = Object.keys(times)\n if (keys.length > constructor.AUTO_PLAYBACK_MAX) {\n delete times[keys[0]]\n }\n times[art.option.id || art.option.url] = art.currentTime\n storage.set('times', times)\n }\n })\n\n function init() {\n const times = storage.get('times') || {}\n const currentTime = times[art.option.id || art.option.url]\n\n clearTimeout(timer)\n setStyle($autoPlayback, 'display', 'none')\n\n if (currentTime && currentTime >= constructor.AUTO_PLAYBACK_MIN) {\n setStyle($autoPlayback, 'display', 'flex')\n\n $last.textContent = `${i18n.get('Last Seen')} ${secondToTime(currentTime)}`\n $jump.textContent = i18n.get('Jump Play')\n\n proxy($close, 'click', () => {\n setStyle($autoPlayback, 'display', 'none')\n })\n\n proxy($jump, 'click', () => {\n art.seek = currentTime\n art.play()\n setStyle($poster, 'display', 'none')\n setStyle($autoPlayback, 'display', 'none')\n })\n\n art.once('video:timeupdate', () => {\n timer = setTimeout(() => {\n setStyle($autoPlayback, 'display', 'none')\n }, constructor.AUTO_PLAYBACK_TIMEOUT)\n })\n }\n }\n\n art.on('ready', init)\n art.on('restart', init)\n\n return {\n name: 'auto-playback',\n get times() {\n return storage.get('times') || {}\n },\n clear() {\n return storage.del('times')\n },\n delete(id) {\n const times = storage.get('times') || {}\n delete times[id]\n storage.set('times', times)\n return times\n },\n }\n}\n","import { addClass, hasClass, removeClass } from '../utils'\n\nexport default function fastForward(art) {\n const {\n constructor,\n proxy,\n template: { $player, $video },\n } = art\n\n let timer = null\n let isPress = false\n let lastPlaybackRate = 1\n\n const onStart = (event) => {\n if (event.touches.length === 1 && art.playing && !art.isLock) {\n timer = setTimeout(() => {\n isPress = true\n lastPlaybackRate = art.playbackRate\n art.playbackRate = constructor.FAST_FORWARD_VALUE\n addClass($player, 'art-fast-forward')\n }, constructor.FAST_FORWARD_TIME)\n }\n }\n\n const onStop = () => {\n clearTimeout(timer)\n if (isPress) {\n isPress = false\n art.playbackRate = lastPlaybackRate\n removeClass($player, 'art-fast-forward')\n }\n }\n\n proxy($video, 'touchstart', onStart)\n proxy(document, 'touchmove', onStop)\n proxy(document, 'touchend', onStop)\n\n return {\n name: 'fastForward',\n get state() {\n return hasClass($player, 'art-fast-forward')\n },\n }\n}\n","import { addClass, append, hasClass, removeClass, setStyle } from '../utils'\n\nexport default function lock(art) {\n const {\n layers,\n icons,\n template: { $player },\n } = art\n\n function getState() {\n return hasClass($player, 'art-lock')\n }\n\n function setLock() {\n addClass($player, 'art-lock')\n art.isLock = true\n art.emit('lock', true)\n }\n\n function setUnlock() {\n removeClass($player, 'art-lock')\n art.isLock = false\n art.emit('lock', false)\n }\n\n layers.add({\n name: 'lock',\n mounted($el) {\n const $lock = append($el, icons.lock)\n const $unlock = append($el, icons.unlock)\n setStyle($lock, 'display', 'none')\n\n art.on('lock', (state) => {\n if (state) {\n setStyle($lock, 'display', 'inline-flex')\n setStyle($unlock, 'display', 'none')\n }\n else {\n setStyle($lock, 'display', 'none')\n setStyle($unlock, 'display', 'inline-flex')\n }\n })\n },\n click() {\n if (getState()) {\n setUnlock()\n }\n else {\n setLock()\n }\n },\n })\n\n return {\n name: 'lock',\n get state() {\n return getState()\n },\n set state(value) {\n if (value) {\n setLock()\n }\n else {\n setUnlock()\n }\n },\n }\n}\n","import { addClass, removeClass } from '../utils'\n\nexport default function miniProgressBar(art) {\n art.on('control', (state) => {\n if (state) {\n removeClass(art.template.$player, 'art-mini-progress-bar')\n }\n else {\n addClass(art.template.$player, 'art-mini-progress-bar')\n }\n })\n\n return { name: 'mini-progress-bar' }\n}\n","import {\n addClass,\n append,\n createElement,\n def,\n errorHandle,\n getRect,\n has,\n includeFromEvent,\n inverseClass,\n isMobile,\n remove,\n replaceElement,\n setStyle,\n} from '../utils'\nimport Component from '../utils/component'\nimport aspectRatio from './aspectRatio'\nimport flip from './flip'\nimport playbackRate from './playbackRate'\nimport subtitleOffset from './subtitleOffset'\n\nexport default class Setting extends Component {\n constructor(art) {\n super(art)\n\n const {\n option,\n controls,\n template: { $setting },\n } = art\n\n this.name = 'setting'\n this.$parent = $setting\n\n this.id = 0\n this.active = null\n this.cache = new Map()\n this.option = [...this.builtin, ...option.settings]\n\n if (option.setting) {\n this.format()\n this.render()\n\n art.on('blur', () => {\n if (this.show) {\n this.show = false\n this.render()\n }\n })\n\n art.on('focus', (event) => {\n const isControl = includeFromEvent(event, controls.setting)\n const isSetting = includeFromEvent(event, this.$parent)\n if (this.show && !isControl && !isSetting) {\n this.show = false\n this.render()\n }\n })\n\n art.on('resize', () => this.resize())\n }\n }\n\n get builtin() {\n const result = []\n const { option } = this.art\n\n if (option.playbackRate) {\n result.push(playbackRate(this.art))\n }\n\n if (option.aspectRatio) {\n result.push(aspectRatio(this.art))\n }\n\n if (option.flip) {\n result.push(flip(this.art))\n }\n\n if (option.subtitleOffset) {\n result.push(subtitleOffset(this.art))\n }\n\n return result\n }\n\n traverse(callback, option = this.option) {\n for (let index = 0; index < option.length; index++) {\n const item = option[index]\n callback(item)\n if (item.selector?.length) {\n this.traverse(callback, item.selector)\n }\n }\n }\n\n check(target) {\n target.$parent.tooltip = target.html\n this.traverse((item) => {\n item.default = item === target\n if (item.default && item.$item) {\n inverseClass(item.$item, 'art-current')\n }\n }, target.$option)\n this.render(target.$parents)\n }\n\n format(option = this.option, parent, parents, names = []) {\n for (let index = 0; index < option.length; index++) {\n const item = option[index]\n\n if (item?.name) {\n errorHandle(!names.includes(item.name), `The [${item.name}] already exists in [setting]`)\n names.push(item.name)\n }\n else {\n item.name = `setting-${this.id++}`\n }\n\n if (!item.$formatted) {\n def(item, '$parent', {\n get: () => parent,\n })\n\n def(item, '$parents', {\n get: () => parents,\n })\n\n def(item, '$option', {\n get: () => option,\n })\n\n const $events = []\n def(item, '$events', {\n get: () => $events,\n })\n\n def(item, '$formatted', {\n get: () => true,\n })\n }\n\n this.format(item.selector || [], item, option, names)\n }\n\n this.option = option\n }\n\n find(name = '') {\n let result = null\n this.traverse((item) => {\n if (item.name === name) {\n result = item\n }\n })\n return result\n }\n\n resize() {\n const {\n controls,\n constructor: { SETTING_WIDTH, SETTING_ITEM_HEIGHT },\n template: { $player, $setting },\n } = this.art\n\n if (controls.setting && this.show) {\n const settingWidth = this.active[0]?.$parent?.width || SETTING_WIDTH\n const { left: controlLeft, width: controlWidth } = getRect(controls.setting)\n const { left: playerLeft, width: playerWidth } = getRect($player)\n const settingLeft = controlLeft - playerLeft + controlWidth / 2 - settingWidth / 2\n\n const settingHeight\n = this.active === this.option\n ? this.active.length * SETTING_ITEM_HEIGHT\n : (this.active.length + 1) * SETTING_ITEM_HEIGHT\n\n setStyle($setting, 'height', `${settingHeight}px`)\n setStyle($setting, 'width', `${settingWidth}px`)\n\n if (this.art.isRotate || isMobile)\n return\n\n if (settingLeft + settingWidth > playerWidth) {\n setStyle($setting, 'left', null)\n setStyle($setting, 'right', null)\n }\n else {\n setStyle($setting, 'left', `${settingLeft}px`)\n setStyle($setting, 'right', 'auto')\n }\n }\n }\n\n inactivate(item) {\n for (let index = 0; index < item.$events.length; index++) {\n this.art.events.remove(item.$events[index])\n }\n item.$events.length = 0\n }\n\n remove(name) {\n const item = this.find(name)\n errorHandle(item, `Can't find [${name}] in the [setting]`)\n const index = item.$option.indexOf(item)\n item.$option.splice(index, 1)\n this.inactivate(item)\n if (item.$item)\n remove(item.$item)\n this.render()\n }\n\n update(target) {\n const item = this.find(target.name)\n\n if (item) {\n this.inactivate(item)\n Object.assign(item, target)\n this.format()\n this.createItem(item, true)\n this.render()\n return item\n }\n else {\n return this.add(target)\n }\n }\n\n add(item, option = this.option) {\n option.push(item)\n this.format()\n this.createItem(item)\n this.render()\n return item\n }\n\n createHeader(item) {\n if (!this.cache.has(item.$option))\n return\n const $panel = this.cache.get(item.$option)\n\n const {\n proxy,\n icons: { arrowLeft },\n constructor: { SETTING_ITEM_HEIGHT },\n } = this.art\n\n const $item = createElement('div')\n setStyle($item, 'height', `${SETTING_ITEM_HEIGHT}px`)\n addClass($item, 'art-setting-item')\n addClass($item, 'art-setting-item-back')\n const $left = append($item, '
')\n const $icon = createElement('div')\n addClass($icon, 'art-setting-item-left-icon')\n append($icon, arrowLeft)\n append($left, $icon)\n append($left, item.$parent.html)\n const event = proxy($item, 'click', () => this.render(item.$parents))\n item.$parent.$events.push(event)\n append($panel, $item)\n }\n\n createItem(item, isUpdate = false) {\n if (!this.cache.has(item.$option))\n return\n const $panel = this.cache.get(item.$option)\n const oldItem = item.$item\n\n let type = 'selector'\n\n if (has(item, 'switch')) {\n type = 'switch'\n }\n\n if (has(item, 'range')) {\n type = 'range'\n }\n\n if (has(item, 'onClick')) {\n type = 'button'\n }\n\n const { icons, proxy, constructor } = this.art\n\n const $item = createElement('div')\n addClass($item, 'art-setting-item')\n setStyle($item, 'height', `${constructor.SETTING_ITEM_HEIGHT}px`)\n\n $item.dataset.name = item.name || ''\n $item.dataset.value = item.value || ''\n\n const $left = append($item, '
')\n const $right = append($item, '
')\n\n const $icon = createElement('div')\n addClass($icon, 'art-setting-item-left-icon')\n\n switch (type) {\n case 'button':\n case 'switch':\n case 'range':\n append($icon, item.icon || icons.config)\n break\n case 'selector':\n if (item.selector?.length) {\n append($icon, item.icon || icons.config)\n }\n else {\n append($icon, icons.check)\n }\n break\n default:\n break\n }\n\n append($left, $icon)\n\n def(item, '$icon', {\n configurable: true,\n get: () => $icon,\n })\n\n def(item, 'icon', {\n configurable: true,\n get() {\n return $icon.innerHTML\n },\n set(value) {\n $icon.innerHTML = ''\n append($icon, value)\n },\n })\n\n const $html = createElement('div')\n addClass($html, 'art-setting-item-left-text')\n append($html, item.html || '')\n append($left, $html)\n\n def(item, '$html', {\n configurable: true,\n get: () => $html,\n })\n\n def(item, 'html', {\n configurable: true,\n get() {\n return $html.innerHTML\n },\n set(value) {\n $html.innerHTML = ''\n append($html, value)\n },\n })\n\n const $tooltip = createElement('div')\n addClass($tooltip, 'art-setting-item-right-tooltip')\n append($tooltip, item.tooltip || '')\n append($right, $tooltip)\n\n def(item, '$tooltip', {\n configurable: true,\n get: () => $tooltip,\n })\n\n def(item, 'tooltip', {\n configurable: true,\n get() {\n return $tooltip.innerHTML\n },\n set(value) {\n $tooltip.innerHTML = ''\n append($tooltip, value)\n },\n })\n\n switch (type) {\n case 'switch': {\n const $switch = createElement('div')\n addClass($switch, 'art-setting-item-right-icon')\n const $switchOn = append($switch, icons.switchOn)\n const $switchOff = append($switch, icons.switchOff)\n setStyle(item.switch ? $switchOff : $switchOn, 'display', 'none')\n append($right, $switch)\n\n def(item, '$switch', {\n configurable: true,\n get: () => $switch,\n })\n\n let $switchValue = item.switch\n def(item, 'switch', {\n configurable: true,\n get: () => $switchValue,\n set(value) {\n $switchValue = value\n if (value) {\n setStyle($switchOff, 'display', 'none')\n setStyle($switchOn, 'display', null)\n }\n else {\n setStyle($switchOff, 'display', null)\n setStyle($switchOn, 'display', 'none')\n }\n },\n })\n break\n }\n case 'range':\n {\n const $state = createElement('div')\n addClass($state, 'art-setting-item-right-icon')\n const $range = append($state, '')\n $range.value = item.range[0]\n $range.min = item.range[1]\n $range.max = item.range[2]\n $range.step = item.range[3]\n addClass($range, 'art-setting-range')\n append($right, $state)\n\n def(item, '$range', {\n configurable: true,\n get: () => $range,\n })\n\n let $rangeValue = [...item.range]\n def(item, 'range', {\n configurable: true,\n get: () => $rangeValue,\n set(value) {\n $rangeValue = [...value]\n $range.value = value[0]\n $range.min = value[1]\n $range.max = value[2]\n $range.step = value[3]\n },\n })\n }\n break\n case 'selector':\n if (item.selector?.length) {\n const $state = createElement('div')\n addClass($state, 'art-setting-item-right-icon')\n append($state, icons.arrowRight)\n append($right, $state)\n }\n break\n default:\n break\n }\n\n switch (type) {\n case 'switch': {\n if (item.onSwitch) {\n const event = proxy($item, 'click', async (event) => {\n item.switch = await item.onSwitch.call(this.art, item, $item, event)\n })\n item.$events.push(event)\n }\n break\n }\n case 'range': {\n if (item.$range) {\n if (item.onRange) {\n const event = proxy(item.$range, 'change', async (event) => {\n item.range[0] = item.$range.valueAsNumber\n item.tooltip = await item.onRange.call(this.art, item, $item, event)\n })\n item.$events.push(event)\n }\n\n if (item.onChange) {\n const event = proxy(item.$range, 'input', async (event) => {\n item.range[0] = item.$range.valueAsNumber\n item.tooltip = await item.onChange.call(this.art, item, $item, event)\n })\n item.$events.push(event)\n }\n }\n break\n }\n case 'selector':\n {\n const event = proxy($item, 'click', async (event) => {\n if (item.selector?.length) {\n this.render(item.selector)\n }\n else {\n this.check(item)\n if (item.$parent.onSelect) {\n item.$parent.tooltip = await item.$parent.onSelect.call(this.art, item, $item, event)\n }\n }\n })\n\n item.$events.push(event)\n\n if (item.default) {\n addClass($item, 'art-current')\n }\n }\n break\n case 'button':\n if (item.onClick) {\n const event = proxy($item, 'click', async (event) => {\n item.tooltip = await item.onClick.call(this.art, item, $item, event)\n })\n item.$events.push(event)\n }\n break\n default:\n break\n }\n\n def(item, '$item', {\n configurable: true,\n get: () => $item,\n })\n\n if (isUpdate) {\n replaceElement($item, oldItem)\n }\n else {\n append($panel, $item)\n }\n\n if (item.mounted) {\n setTimeout(() => item.mounted.call(this.art, item.$item, item), 0)\n }\n }\n\n render(option = this.option) {\n this.active = option\n if (this.cache.has(option)) {\n const $panel = this.cache.get(option)\n inverseClass($panel, 'art-current')\n }\n else {\n const $panel = createElement('div')\n this.cache.set(option, $panel)\n addClass($panel, 'art-setting-panel')\n append(this.$parent, $panel)\n inverseClass($panel, 'art-current')\n\n if (option[0]?.$parent) {\n this.createHeader(option[0])\n }\n\n for (let index = 0; index < option.length; index++) {\n this.createItem(option[index])\n }\n }\n this.resize()\n }\n}\n","export default function aspectRatio(art) {\n const {\n i18n,\n icons,\n constructor: { SETTING_ITEM_WIDTH, ASPECT_RATIO },\n } = art\n\n function getI18n(value) {\n return value === 'default' ? i18n.get('Default') : value\n }\n\n function update() {\n const target = art.setting.find(`aspect-ratio-${art.aspectRatio}`)\n art.setting.check(target)\n }\n\n return {\n width: SETTING_ITEM_WIDTH,\n name: 'aspect-ratio',\n html: i18n.get('Aspect Ratio'),\n icon: icons.aspectRatio,\n tooltip: getI18n(art.aspectRatio),\n selector: ASPECT_RATIO.map((item) => {\n return {\n value: item,\n name: `aspect-ratio-${item}`,\n default: item === art.aspectRatio,\n html: getI18n(item),\n }\n }),\n onSelect(item) {\n art.aspectRatio = item.value\n return item.html\n },\n mounted: () => {\n update()\n art.on('aspectRatio', () => update())\n },\n }\n}\n","import { capitalize } from '../utils'\n\nexport default function flip(art) {\n const {\n i18n,\n icons,\n constructor: { SETTING_ITEM_WIDTH, FLIP },\n } = art\n\n function getI18n(value) {\n return i18n.get(capitalize(value))\n }\n\n function update() {\n const target = art.setting.find(`flip-${art.flip}`)\n art.setting.check(target)\n }\n\n return {\n width: SETTING_ITEM_WIDTH,\n name: 'flip',\n html: i18n.get('Video Flip'),\n tooltip: getI18n(art.flip),\n icon: icons.flip,\n selector: FLIP.map((item) => {\n return {\n value: item,\n name: `flip-${item}`,\n default: item === art.flip,\n html: getI18n(item),\n }\n }),\n onSelect(item) {\n art.flip = item.value\n return item.html\n },\n mounted: () => {\n update()\n art.on('flip', () => update())\n },\n }\n}\n","export default function playbackRate(art) {\n const {\n i18n,\n icons,\n constructor: { SETTING_ITEM_WIDTH, PLAYBACK_RATE },\n } = art\n\n function getI18n(value) {\n return value === 1.0 ? i18n.get('Normal') : value.toFixed(1)\n }\n\n function update() {\n const target = art.setting.find(`playback-rate-${art.playbackRate}`)\n art.setting.check(target)\n }\n\n return {\n width: SETTING_ITEM_WIDTH,\n name: 'playback-rate',\n html: i18n.get('Play Speed'),\n tooltip: getI18n(art.playbackRate),\n icon: icons.playbackRate,\n selector: PLAYBACK_RATE.map((item) => {\n return {\n value: item,\n name: `playback-rate-${item}`,\n default: item === art.playbackRate,\n html: getI18n(item),\n }\n }),\n onSelect(item) {\n art.playbackRate = item.value\n return item.html\n },\n mounted: () => {\n update()\n art.on('video:ratechange', () => update())\n },\n }\n}\n","export default function subtitleOffset(art) {\n const { i18n, icons, constructor } = art\n\n return {\n width: constructor.SETTING_ITEM_WIDTH,\n name: 'subtitle-offset',\n html: i18n.get('Subtitle Offset'),\n icon: icons.subtitle,\n tooltip: '0s',\n range: [0, -10, 10, 0.1],\n onChange(item) {\n art.subtitleOffset = item.range[0]\n return `${item.range[0]}s`\n },\n mounted: (_, item) => {\n art.on('subtitleOffset', (value) => {\n item.$range.value = value\n item.tooltip = `${value}s`\n })\n },\n }\n}\n","export default class Storage {\n constructor() {\n this.name = 'artplayer_settings'\n this.settings = {}\n }\n\n get(key) {\n try {\n const storage = JSON.parse(window.localStorage.getItem(this.name)) || {}\n return key ? storage[key] : storage\n }\n catch {\n return key ? this.settings[key] : this.settings\n }\n }\n\n set(key, value) {\n try {\n const storage = Object.assign({}, this.get(), {\n [key]: value,\n })\n window.localStorage.setItem(this.name, JSON.stringify(storage))\n }\n catch {\n this.settings[key] = value\n }\n }\n\n del(key) {\n try {\n const storage = this.get()\n delete storage[key]\n window.localStorage.setItem(this.name, JSON.stringify(storage))\n }\n catch {\n delete this.settings[key]\n }\n }\n\n clear() {\n try {\n window.localStorage.removeItem(this.name)\n }\n catch {\n this.settings = {}\n }\n }\n}\n","import validator from 'option-validator'\nimport scheme from './scheme'\nimport {\n append,\n assToVtt,\n createElement,\n escape,\n getExt,\n remove,\n setStyle,\n setStyles,\n srtToVtt,\n vttToBlob,\n} from './utils'\nimport Component from './utils/component'\n\nexport default class Subtitle extends Component {\n constructor(art) {\n super(art)\n this.name = 'subtitle'\n this.option = null\n this.destroyEvent = () => null\n this.init(art.option.subtitle)\n\n let lastState = false\n art.on('video:timeupdate', () => {\n if (!this.url)\n return\n const state = this.art.template.$video.webkitDisplayingFullscreen\n if (typeof state !== 'boolean')\n return\n if (state !== lastState) {\n lastState = state\n this.createTrack(state ? 'subtitles' : 'metadata', this.url)\n }\n })\n }\n\n get url() {\n return this.art.template.$track.src\n }\n\n set url(url) {\n this.switch(url)\n }\n\n get textTrack() {\n return this.art.template.$video?.textTracks?.[0]\n }\n\n get activeCues() {\n if (!this.textTrack)\n return []\n return Array.from(this.textTrack.activeCues)\n }\n\n get cues() {\n if (!this.textTrack)\n return []\n return Array.from(this.textTrack.cues)\n }\n\n style(key, value) {\n const { $subtitle } = this.art.template\n if (typeof key === 'object') {\n return setStyles($subtitle, key)\n }\n return setStyle($subtitle, key, value)\n }\n\n update() {\n const {\n option: { subtitle },\n template: { $subtitle },\n } = this.art\n\n $subtitle.innerHTML = ''\n if (!this.activeCues.length)\n return\n\n this.art.emit('subtitleBeforeUpdate', this.activeCues)\n $subtitle.innerHTML = this.activeCues\n .map((cue, index) =>\n cue.text\n .split(/\\r?\\n/)\n .filter(line => line.trim())\n .map(\n line =>\n `
\n ${subtitle.escape ? escape(line) : line}\n
`,\n )\n .join(''),\n )\n .join('')\n this.art.emit('subtitleAfterUpdate', this.activeCues)\n }\n\n async switch(url, newOption = {}) {\n const { i18n, notice, option } = this.art\n const subtitleOption = { ...option.subtitle, ...newOption, url }\n const subUrl = await this.init(subtitleOption)\n if (newOption.name) {\n notice.show = `${i18n.get('Switch Subtitle')}: ${newOption.name}`\n }\n return subUrl\n }\n\n createTrack(kind, url) {\n const { template, proxy, option } = this.art\n const { $video, $track } = template\n\n const $newTrack = createElement('track')\n $newTrack.default = true\n $newTrack.kind = kind\n $newTrack.src = url\n $newTrack.label = option.subtitle.name || 'Artplayer'\n $newTrack.track.mode = 'hidden'\n $newTrack.onload = () => {\n this.art.emit('subtitleLoad', this.cues, this.option)\n }\n\n this.art.events.remove(this.destroyEvent)\n $track.onload = null\n remove($track)\n append($video, $newTrack)\n template.$track = $newTrack\n this.destroyEvent = proxy(this.textTrack, 'cuechange', () => this.update())\n }\n\n async init(subtitleOption) {\n const {\n notice,\n template: { $subtitle },\n } = this.art\n\n if (!this.textTrack)\n return null\n validator(subtitleOption, scheme.subtitle)\n if (!subtitleOption.url)\n return\n this.option = subtitleOption\n this.style(subtitleOption.style)\n\n return fetch(subtitleOption.url)\n .then(response => response.arrayBuffer())\n .then((buffer) => {\n const decoder = new TextDecoder(subtitleOption.encoding)\n const text = decoder.decode(buffer)\n switch (subtitleOption.type || getExt(subtitleOption.url)) {\n case 'srt': {\n const vtt = srtToVtt(text)\n const vttNew = subtitleOption.onVttLoad(vtt)\n return vttToBlob(vttNew)\n }\n case 'ass': {\n const vtt = assToVtt(text)\n const vttNew = subtitleOption.onVttLoad(vtt)\n return vttToBlob(vttNew)\n }\n case 'vtt': {\n const vttNew = subtitleOption.onVttLoad(text)\n return vttToBlob(vttNew)\n }\n default:\n return subtitleOption.url\n }\n })\n .then((subUrl) => {\n $subtitle.innerHTML = ''\n if (this.url === subUrl)\n return subUrl\n URL.revokeObjectURL(this.url)\n this.createTrack('metadata', subUrl)\n return subUrl\n })\n .catch((err) => {\n $subtitle.innerHTML = ''\n notice.show = err\n throw err\n })\n }\n}\n","import { version } from '../package.json'\nimport { addClass, errorHandle, isMobile, query, replaceElement, supportsFlex } from './utils'\n\nexport default class Template {\n constructor(art) {\n this.art = art\n const { option, constructor } = art\n\n if (option.container instanceof Element) {\n this.$container = option.container\n }\n else {\n this.$container = query(option.container)\n errorHandle(this.$container, `No container element found by ${option.container}`)\n }\n\n errorHandle(supportsFlex(), 'The current browser does not support flex layout')\n\n const type = this.$container.tagName.toLowerCase()\n errorHandle(type === 'div', `Unsupported container element type, only support 'div' but got '${type}'`)\n\n errorHandle(\n constructor.instances.every(ins => ins.template.$container !== this.$container),\n 'Cannot mount multiple instances on the same dom element',\n )\n\n this.query = this.query.bind(this)\n this.$container.dataset.artId = art.id\n this.init()\n }\n\n static get html() {\n return `\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Player version:
\n
${version}
\n
\n
\n
Video url:
\n
\n
\n
\n
Video volume:
\n
\n
\n
\n
Video time:
\n
\n
\n
\n
Video duration:
\n
\n
\n
\n
Video resolution:
\n
\n x \n
\n
\n
\n
[x]
\n
\n
\n
\n `\n }\n\n query(className) {\n return query(className, this.$container)\n }\n\n init() {\n const { option } = this.art\n\n if (!option.useSSR) {\n this.$container.innerHTML = Template.html\n }\n\n this.$player = this.query('.art-video-player')\n this.$video = this.query('.art-video')\n this.$track = this.query('track')\n this.$poster = this.query('.art-poster')\n this.$subtitle = this.query('.art-subtitle')\n this.$danmuku = this.query('.art-danmuku')\n this.$bottom = this.query('.art-bottom')\n this.$progress = this.query('.art-progress')\n this.$controls = this.query('.art-controls')\n this.$controlsLeft = this.query('.art-controls-left')\n this.$controlsCenter = this.query('.art-controls-center')\n this.$controlsRight = this.query('.art-controls-right')\n this.$layer = this.query('.art-layers')\n this.$loading = this.query('.art-loading')\n this.$notice = this.query('.art-notice')\n this.$noticeInner = this.query('.art-notice-inner')\n this.$mask = this.query('.art-mask')\n this.$state = this.query('.art-state')\n this.$setting = this.query('.art-settings')\n this.$info = this.query('.art-info')\n this.$infoPanel = this.query('.art-info-panel')\n this.$infoClose = this.query('.art-info-close')\n this.$contextmenu = this.query('.art-contextmenus')\n\n if (option.proxy) {\n const video = option.proxy.call(this.art, this.art)\n errorHandle(\n video instanceof HTMLVideoElement || video instanceof HTMLCanvasElement,\n `Function 'option.proxy' needs to return 'HTMLVideoElement' or 'HTMLCanvasElement'`,\n )\n replaceElement(video, this.$video)\n video.className = 'art-video'\n this.$video = video\n }\n\n if (option.backdrop) {\n addClass(this.$player, 'art-backdrop')\n }\n\n if (isMobile) {\n addClass(this.$player, 'art-mobile')\n }\n }\n\n destroy(removeHtml) {\n this.$video.src = ''\n if (removeHtml) {\n this.$container.innerHTML = ''\n }\n else {\n addClass(this.$player, 'art-destroy')\n }\n }\n}\n","export default class Emitter {\n on(name, fn, ctx) {\n const e = this.e || (this.e = {});\n (e[name] || (e[name] = [])).push({ fn, ctx })\n return this\n }\n\n once(name, fn, ctx) {\n const self = this\n function listener(...args) {\n self.off(name, listener)\n fn.apply(ctx, args)\n }\n listener._ = fn\n return this.on(name, listener, ctx)\n }\n\n emit(name, ...data) {\n const evtArr = ((this.e || (this.e = {}))[name] || []).slice()\n for (let i = 0; i < evtArr.length; i += 1) {\n evtArr[i].fn.apply(evtArr[i].ctx, data)\n }\n return this\n }\n\n off(name, callback) {\n const e = this.e || (this.e = {})\n const evts = e[name]\n const liveEvents = []\n if (evts && callback) {\n for (let i = 0, len = evts.length; i < len; i += 1) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i])\n }\n }\n if (liveEvents.length) {\n e[name] = liveEvents\n }\n else {\n delete e[name]\n }\n return this\n }\n}\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../../"} \ No newline at end of file +{"mappings":"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","sources":["packages/artplayer/src/index.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-1a83ba7b78f9fbad.js","node_modules/option-validator/dist/option-validator.js","packages/artplayer/package.json","packages/artplayer/src/config/index.js","node_modules/@parcel/transformer-js/src/esmodule-helpers.js","packages/artplayer/src/contextmenu/index.js","packages/artplayer/src/utils/index.js","packages/artplayer/src/utils/compatibility.js","packages/artplayer/src/utils/dom.js","packages/artplayer/src/utils/error.js","packages/artplayer/src/utils/file.js","packages/artplayer/src/utils/format.js","packages/artplayer/src/utils/property.js","packages/artplayer/src/utils/subtitle.js","packages/artplayer/src/utils/time.js","packages/artplayer/src/utils/component.js","packages/artplayer/src/scheme/index.js","packages/artplayer/src/contextmenu/aspectRatio.js","packages/artplayer/src/contextmenu/close.js","packages/artplayer/src/contextmenu/flip.js","packages/artplayer/src/contextmenu/info.js","packages/artplayer/src/contextmenu/playbackRate.js","packages/artplayer/src/contextmenu/version.js","packages/artplayer/src/control/index.js","packages/artplayer/src/control/airplay.js","packages/artplayer/src/control/fullscreen.js","packages/artplayer/src/control/fullscreenWeb.js","packages/artplayer/src/control/pip.js","packages/artplayer/src/control/playAndPause.js","packages/artplayer/src/control/progress.js","packages/artplayer/src/control/screenshot.js","packages/artplayer/src/control/setting.js","packages/artplayer/src/control/time.js","packages/artplayer/src/control/volume.js","packages/artplayer/src/events/index.js","packages/artplayer/src/events/clickInit.js","packages/artplayer/src/events/documentInit.js","packages/artplayer/src/events/gestureInit.js","packages/artplayer/src/events/hoverInit.js","packages/artplayer/src/events/moveInit.js","packages/artplayer/src/events/resizeInit.js","packages/artplayer/src/events/updateInit.js","packages/artplayer/src/events/viewInit.js","packages/artplayer/src/hotkey.js","packages/artplayer/src/i18n/index.js","packages/artplayer/src/i18n/zh-cn.js","packages/artplayer/src/icons/index.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-b09787399762439a.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-59d8a32ff494cf26.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-fc0e8ba14b0a205e.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-b6afaee63da94390.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-8306aa2d43f8f518.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-e79e019b9bea702c.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-6e4bd76b89220063.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-11f6581ae841b62a.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-a9b9362d1cb1ddd7.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-d20ee4405f81c2fb.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-e61dc575158bf45c.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-853939c76577d052.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-ed21bae52505e995.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-20be5e3eca70ea32.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-c577d5b2fce8a593.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-ed2c6405abc18237.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-d269c22a6d246bc3.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-9e6243eba3e2ee25.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-8fd0b0f874dbf51e.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-e2d98041510dcc81.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-0b69a45deda02972.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-c89477eca9760866.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-dbc4095e84eeca13.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-3cf7eba38b86f798.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-766dea468868d543.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-ce7336f6ee750446.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-296845b4b0ef3af0.js","packages/artplayer/src/info.js","packages/artplayer/src/layer.js","packages/artplayer/src/loading.js","packages/artplayer/src/mask.js","packages/artplayer/src/notice.js","packages/artplayer/src/player/index.js","packages/artplayer/src/player/airplayMix.js","packages/artplayer/src/player/aspectRatioMix.js","packages/artplayer/src/player/attrMix.js","packages/artplayer/src/player/autoHeightMix.js","packages/artplayer/src/player/autoSizeMix.js","packages/artplayer/src/player/cssVarMix.js","packages/artplayer/src/player/currentTimeMix.js","packages/artplayer/src/player/durationMix.js","packages/artplayer/src/player/eventInit.js","packages/artplayer/src/player/flipMix.js","packages/artplayer/src/player/fullscreenMix.js","packages/artplayer/src/libs/screenfull.js","packages/artplayer/src/player/fullscreenWebMix.js","packages/artplayer/src/player/loadedMix.js","packages/artplayer/src/player/miniMix.js","packages/artplayer/src/player/optionInit.js","packages/artplayer/src/player/pauseMix.js","packages/artplayer/src/player/pipMix.js","packages/artplayer/src/player/playbackRateMix.js","packages/artplayer/src/player/playedMix.js","packages/artplayer/src/player/playingMix.js","packages/artplayer/src/player/playMix.js","packages/artplayer/src/player/posterMix.js","packages/artplayer/src/player/qualityMix.js","packages/artplayer/src/player/rectMix.js","packages/artplayer/src/player/screenshotMix.js","packages/artplayer/src/player/seekMix.js","packages/artplayer/src/player/stateMix.js","packages/artplayer/src/player/subtitleOffsetMix.js","packages/artplayer/src/player/switchMix.js","packages/artplayer/src/player/themeMix.js","packages/artplayer/src/player/thumbnailsMix.js","packages/artplayer/src/player/toggleMix.js","packages/artplayer/src/player/typeMix.js","packages/artplayer/src/player/urlMix.js","packages/artplayer/src/player/volumeMix.js","packages/artplayer/src/plugins/index.js","packages/artplayer/src/plugins/autoOrientation.js","packages/artplayer/src/plugins/autoPlayback.js","packages/artplayer/src/plugins/fastForward.js","packages/artplayer/src/plugins/lock.js","packages/artplayer/src/plugins/miniProgressBar.js","packages/artplayer/src/setting/index.js","packages/artplayer/src/setting/aspectRatio.js","packages/artplayer/src/setting/flip.js","packages/artplayer/src/setting/playbackRate.js","packages/artplayer/src/setting/subtitleOffset.js","packages/artplayer/src/storage.js","packages/artplayer/src/subtitle.js","packages/artplayer/src/template.js","packages/artplayer/src/utils/emitter.js"],"sourcesContent":["import style from 'bundle-text:./style/index.less'\nimport validator from 'option-validator'\nimport { version } from '../package.json'\nimport config from './config'\nimport Contextmenu from './contextmenu'\nimport Control from './control'\nimport Events from './events'\nimport Hotkey from './hotkey'\nimport I18n from './i18n'\nimport Icons from './icons'\nimport Info from './info'\nimport Layer from './layer'\nimport Loading from './loading'\nimport Mask from './mask'\nimport Notice from './notice'\nimport Player from './player'\nimport Plugins from './plugins'\nimport scheme from './scheme'\nimport Setting from './setting'\nimport Storage from './storage'\nimport Subtitle from './subtitle'\nimport Template from './template'\nimport * as utils from './utils'\nimport Emitter from './utils/emitter'\n\nlet id = 0\nconst instances = []\nexport default class Artplayer extends Emitter {\n constructor(option, readyCallback) {\n super()\n\n this.id = ++id\n\n const mergeOption = utils.mergeDeep(Artplayer.option, option)\n mergeOption.container = option.container\n\n this.option = validator(mergeOption, scheme)\n\n this.isLock = false\n this.isReady = false\n this.isFocus = false\n this.isInput = false\n this.isRotate = false\n this.isDestroy = false\n\n this.template = new Template(this)\n this.events = new Events(this)\n this.storage = new Storage(this)\n this.icons = new Icons(this)\n this.i18n = new I18n(this)\n this.notice = new Notice(this)\n this.player = new Player(this)\n this.layers = new Layer(this)\n this.controls = new Control(this)\n this.contextmenu = new Contextmenu(this)\n this.subtitle = new Subtitle(this)\n this.info = new Info(this)\n this.loading = new Loading(this)\n this.hotkey = new Hotkey(this)\n this.mask = new Mask(this)\n this.setting = new Setting(this)\n this.plugins = new Plugins(this)\n\n if (typeof readyCallback === 'function') {\n this.on('ready', () => readyCallback.call(this, this))\n }\n\n if (Artplayer.DEBUG) {\n // eslint-disable-next-line no-console\n const log = msg => console.log(`[ART.${this.id}] -> ${msg}`)\n log(`Version@${Artplayer.version}`)\n for (let index = 0; index < config.events.length; index++) {\n this.on(`video:${config.events[index]}`, event => log(`Event@${event.type}`))\n }\n }\n\n instances.push(this)\n }\n\n static get instances() {\n return instances\n }\n\n static get version() {\n return version\n }\n\n static get config() {\n return config\n }\n\n static get utils() {\n return utils\n }\n\n static get scheme() {\n return scheme\n }\n\n static get Emitter() {\n return Emitter\n }\n\n static get validator() {\n return validator\n }\n\n static get kindOf() {\n return validator.kindOf\n }\n\n static get html() {\n return Template.html\n }\n\n static get option() {\n return {\n id: '',\n container: '#artplayer',\n url: '',\n poster: '',\n type: '',\n theme: '#f00',\n volume: 0.7,\n isLive: false,\n muted: false,\n autoplay: false,\n autoSize: false,\n autoMini: false,\n loop: false,\n flip: false,\n playbackRate: false,\n aspectRatio: false,\n screenshot: false,\n setting: false,\n hotkey: true,\n pip: false,\n mutex: true,\n backdrop: true,\n fullscreen: false,\n fullscreenWeb: false,\n subtitleOffset: false,\n miniProgressBar: false,\n useSSR: false,\n playsInline: true,\n lock: false,\n gesture: true,\n fastForward: false,\n autoPlayback: false,\n autoOrientation: false,\n airplay: false,\n proxy: undefined,\n layers: [],\n contextmenu: [],\n controls: [],\n settings: [],\n quality: [],\n highlight: [],\n plugins: [],\n thumbnails: {\n url: '',\n number: 60,\n column: 10,\n width: 0,\n height: 0,\n scale: 1,\n },\n subtitle: {\n url: '',\n type: '',\n style: {},\n name: '',\n escape: true,\n encoding: 'utf-8',\n onVttLoad: vtt => vtt,\n },\n moreVideoAttr: {\n controls: false,\n preload: utils.isSafari ? 'auto' : 'metadata',\n },\n i18n: {},\n icons: {},\n cssVar: {},\n customType: {},\n lang: navigator?.language.toLowerCase(),\n }\n }\n\n get proxy() {\n return this.events.proxy\n }\n\n get query() {\n return this.template.query\n }\n\n get video() {\n return this.template.$video\n }\n\n destroy(removeHtml = true) {\n this.events.destroy()\n this.template.destroy(removeHtml)\n instances.splice(instances.indexOf(this), 1)\n this.isDestroy = true\n this.emit('destroy')\n }\n}\n\nArtplayer.STYLE = style\nArtplayer.DEBUG = false\nArtplayer.CONTEXTMENU = true\nArtplayer.NOTICE_TIME = 2000\nArtplayer.SETTING_WIDTH = 250\nArtplayer.SETTING_ITEM_WIDTH = 200\nArtplayer.SETTING_ITEM_HEIGHT = 35\nArtplayer.RESIZE_TIME = 200\nArtplayer.SCROLL_TIME = 200\nArtplayer.SCROLL_GAP = 50\nArtplayer.AUTO_PLAYBACK_MAX = 10\nArtplayer.AUTO_PLAYBACK_MIN = 5\nArtplayer.AUTO_PLAYBACK_TIMEOUT = 3000\nArtplayer.RECONNECT_TIME_MAX = 5\nArtplayer.RECONNECT_SLEEP_TIME = 1000\nArtplayer.CONTROL_HIDE_TIME = 3000\nArtplayer.DBCLICK_TIME = 300\nArtplayer.DBCLICK_FULLSCREEN = true\nArtplayer.MOBILE_DBCLICK_PLAY = true\nArtplayer.MOBILE_CLICK_PLAY = false\nArtplayer.AUTO_ORIENTATION_TIME = 200\nArtplayer.INFO_LOOP_TIME = 1000\nArtplayer.FAST_FORWARD_VALUE = 3\nArtplayer.FAST_FORWARD_TIME = 1000\nArtplayer.TOUCH_MOVE_RATIO = 0.5\nArtplayer.VOLUME_STEP = 0.1\nArtplayer.SEEK_STEP = 5\nArtplayer.PLAYBACK_RATE = [0.5, 0.75, 1, 1.25, 1.5, 2]\nArtplayer.ASPECT_RATIO = ['default', '4:3', '16:9']\nArtplayer.FLIP = ['normal', 'horizontal', 'vertical']\nArtplayer.FULLSCREEN_WEB_IN_BODY = false\nArtplayer.LOG_VERSION = true\nArtplayer.USE_RAF = false\n\nif (utils.isBrowser) {\n window.Artplayer = Artplayer\n\n utils.setStyleText('artplayer-style', style)\n\n setTimeout(() => {\n if (Artplayer.LOG_VERSION) {\n // eslint-disable-next-line no-console\n console.log(\n `%c ArtPlayer %c ${Artplayer.version} %c https://artplayer.org`,\n 'color: #fff; background: #5f5f5f',\n 'color: #fff; background: #4bc729',\n '',\n )\n }\n }, 100)\n}\n","module.exports = \"8df583d394494873\";","!function(r,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):r.optionValidator=t()}(this,function(){\"use strict\";function e(r){return(e=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(r){return typeof r}:function(r){return r&&\"function\"==typeof Symbol&&r.constructor===Symbol&&r!==Symbol.prototype?\"symbol\":typeof r})(r)}var n=Object.prototype.toString,c=function(r){if(void 0===r)return\"undefined\";if(null===r)return\"null\";var t=e(r);if(\"boolean\"===t)return\"boolean\";if(\"string\"===t)return\"string\";if(\"number\"===t)return\"number\";if(\"symbol\"===t)return\"symbol\";if(\"function\"===t)return function(r){return\"GeneratorFunction\"===o(r)}(r)?\"generatorfunction\":\"function\";if(function(r){return Array.isArray?Array.isArray(r):r instanceof Array}(r))return\"array\";if(function(r){if(r.constructor&&\"function\"==typeof r.constructor.isBuffer)return r.constructor.isBuffer(r);return!1}(r))return\"buffer\";if(function(r){try{if(\"number\"==typeof r.length&&\"function\"==typeof r.callee)return!0}catch(r){if(-1!==r.message.indexOf(\"callee\"))return!0}return!1}(r))return\"arguments\";if(function(r){return r instanceof Date||\"function\"==typeof r.toDateString&&\"function\"==typeof r.getDate&&\"function\"==typeof r.setDate}(r))return\"date\";if(function(r){return r instanceof Error||\"string\"==typeof r.message&&r.constructor&&\"number\"==typeof r.constructor.stackTraceLimit}(r))return\"error\";if(function(r){return r instanceof RegExp||\"string\"==typeof r.flags&&\"boolean\"==typeof r.ignoreCase&&\"boolean\"==typeof r.multiline&&\"boolean\"==typeof r.global}(r))return\"regexp\";switch(o(r)){case\"Symbol\":return\"symbol\";case\"Promise\":return\"promise\";case\"WeakMap\":return\"weakmap\";case\"WeakSet\":return\"weakset\";case\"Map\":return\"map\";case\"Set\":return\"set\";case\"Int8Array\":return\"int8array\";case\"Uint8Array\":return\"uint8array\";case\"Uint8ClampedArray\":return\"uint8clampedarray\";case\"Int16Array\":return\"int16array\";case\"Uint16Array\":return\"uint16array\";case\"Int32Array\":return\"int32array\";case\"Uint32Array\":return\"uint32array\";case\"Float32Array\":return\"float32array\";case\"Float64Array\":return\"float64array\"}if(function(r){return\"function\"==typeof r.throw&&\"function\"==typeof r.return&&\"function\"==typeof r.next}(r))return\"generator\";switch(t=n.call(r)){case\"[object Object]\":return\"object\";case\"[object Map Iterator]\":return\"mapiterator\";case\"[object Set Iterator]\":return\"setiterator\";case\"[object String Iterator]\":return\"stringiterator\";case\"[object Array Iterator]\":return\"arrayiterator\"}return t.slice(8,-1).toLowerCase().replace(/\\s/g,\"\")};function o(r){return r.constructor?r.constructor.name:null}function f(r,t){var e=2\",\n \"license\": \"MIT\",\n \"homepage\": \"https://artplayer.org\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/zhw2590582/ArtPlayer.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/zhw2590582/ArtPlayer/issues\"\n },\n \"keywords\": [\n \"html5\",\n \"video\",\n \"player\"\n ],\n \"main\": \"dist/artplayer.js\",\n \"legacy\": \"dist/artplayer.legacy.js\",\n \"types\": \"types/artplayer.d.ts\",\n \"browserslist\": \"last 1 Chrome version\",\n \"dependencies\": {\n \"option-validator\": \"^2.0.6\"\n }\n}\n","export default {\n properties: [\n 'audioTracks',\n 'autoplay',\n 'buffered',\n 'controller',\n 'controls',\n 'crossOrigin',\n 'currentSrc',\n 'currentTime',\n 'defaultMuted',\n 'defaultPlaybackRate',\n 'duration',\n 'ended',\n 'error',\n 'loop',\n 'mediaGroup',\n 'muted',\n 'networkState',\n 'paused',\n 'playbackRate',\n 'played',\n 'preload',\n 'readyState',\n 'seekable',\n 'seeking',\n 'src',\n 'startDate',\n 'textTracks',\n 'videoTracks',\n 'volume',\n ],\n methods: ['addTextTrack', 'canPlayType', 'load', 'play', 'pause'],\n events: [\n 'abort',\n 'canplay',\n 'canplaythrough',\n 'durationchange',\n 'emptied',\n 'ended',\n 'error',\n 'loadeddata',\n 'loadedmetadata',\n 'loadstart',\n 'pause',\n 'play',\n 'playing',\n 'progress',\n 'ratechange',\n 'seeked',\n 'seeking',\n 'stalled',\n 'suspend',\n 'timeupdate',\n 'volumechange',\n 'waiting',\n ],\n prototypes: [\n 'width',\n 'height',\n 'videoWidth',\n 'videoHeight',\n 'poster',\n 'webkitDecodedFrameCount',\n 'webkitDroppedFrameCount',\n 'playsInline',\n 'webkitSupportsFullscreen',\n 'webkitDisplayingFullscreen',\n 'onenterpictureinpicture',\n 'onleavepictureinpicture',\n 'disablePictureInPicture',\n 'cancelVideoFrameCallback',\n 'requestVideoFrameCallback',\n 'getVideoPlaybackQuality',\n 'requestPictureInPicture',\n 'webkitEnterFullScreen',\n 'webkitEnterFullscreen',\n 'webkitExitFullScreen',\n 'webkitExitFullscreen',\n ],\n}\n","exports.interopDefault = function (a) {\n return a && a.__esModule ? a : {default: a};\n};\n\nexports.defineInteropFlag = function (a) {\n Object.defineProperty(a, '__esModule', {value: true});\n};\n\nexports.exportAll = function (source, dest) {\n Object.keys(source).forEach(function (key) {\n if (\n key === 'default' ||\n key === '__esModule' ||\n Object.prototype.hasOwnProperty.call(dest, key)\n ) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function () {\n return source[key];\n },\n });\n });\n\n return dest;\n};\n\nexports.export = function (dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get,\n });\n};\n","import { getRect, includeFromEvent, isMobile, setStyles } from '../utils'\nimport Component from '../utils/component'\nimport aspectRatio from './aspectRatio'\nimport close from './close'\nimport flip from './flip'\nimport info from './info'\nimport playbackRate from './playbackRate'\nimport version from './version'\n\nexport default class Contextmenu extends Component {\n constructor(art) {\n super(art)\n\n this.name = 'contextmenu'\n this.$parent = art.template.$contextmenu\n\n if (!isMobile) {\n this.init()\n }\n }\n\n init() {\n const {\n option,\n proxy,\n template: { $player, $contextmenu },\n } = this.art\n\n if (option.playbackRate) {\n this.add(\n playbackRate({\n name: 'playbackRate',\n index: 10,\n }),\n )\n }\n\n if (option.aspectRatio) {\n this.add(\n aspectRatio({\n name: 'aspectRatio',\n index: 20,\n }),\n )\n }\n\n if (option.flip) {\n this.add(\n flip({\n name: 'flip',\n index: 30,\n }),\n )\n }\n\n this.add(\n info({\n name: 'info',\n index: 40,\n }),\n )\n\n this.add(\n version({\n name: 'version',\n index: 50,\n }),\n )\n\n this.add(\n close({\n name: 'close',\n index: 60,\n }),\n )\n\n for (let index = 0; index < option.contextmenu.length; index++) {\n this.add(option.contextmenu[index])\n }\n\n proxy($player, 'contextmenu', (event) => {\n if (!this.art.constructor.CONTEXTMENU)\n return\n event.preventDefault()\n\n this.show = true\n\n const mouseX = event.clientX\n const mouseY = event.clientY\n const { height: cHeight, width: cWidth, left: cLeft, top: cTop } = getRect($player)\n const { height: mHeight, width: mWidth } = getRect($contextmenu)\n let menuLeft = mouseX - cLeft\n let menuTop = mouseY - cTop\n\n if (mouseX + mWidth > cLeft + cWidth) {\n menuLeft = cWidth - mWidth\n }\n\n if (mouseY + mHeight > cTop + cHeight) {\n menuTop = cHeight - mHeight\n }\n\n setStyles($contextmenu, {\n top: `${menuTop}px`,\n left: `${menuLeft}px`,\n })\n })\n\n proxy($player, 'click', (event) => {\n if (!includeFromEvent(event, $contextmenu)) {\n this.show = false\n }\n })\n\n this.art.on('blur', () => {\n this.show = false\n })\n }\n}\n","export * from './compatibility'\nexport * from './dom'\nexport * from './error'\nexport * from './file'\nexport * from './format'\nexport * from './property'\nexport * from './subtitle'\nexport * from './time'\n","export const userAgent = globalThis?.CUSTOM_USER_AGENT ?? (typeof navigator !== 'undefined' ? navigator.userAgent : '')\nexport const isSafari = /^(?:(?!chrome|android).)*safari/i.test(userAgent)\nexport const isWechat = /MicroMessenger/i.test(userAgent)\nexport const isIE = /MSIE|Trident/i.test(userAgent)\nexport const isAndroid = /android/i.test(userAgent)\nexport const isIOS = /iPad|iPhone|iPod/i.test(userAgent) && !window.MSStream\nexport const isIOS13 = isIOS || (userAgent.includes('Macintosh') && navigator.maxTouchPoints >= 1)\nexport const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent) || isIOS13\nexport const isBrowser = typeof window !== 'undefined'\n","import { isMobile } from './compatibility'\n\nexport function query(selector, parent = document) {\n return parent.querySelector(selector)\n}\n\nexport function queryAll(selector, parent = document) {\n return Array.from(parent.querySelectorAll(selector))\n}\n\nexport function addClass(target, className) {\n return target.classList.add(className)\n}\n\nexport function removeClass(target, className) {\n return target.classList.remove(className)\n}\n\nexport function hasClass(target, className) {\n return target.classList.contains(className)\n}\n\nexport function append(parent, child) {\n if (child instanceof Element) {\n parent.appendChild(child)\n }\n else {\n parent.insertAdjacentHTML('beforeend', String(child))\n }\n return parent.lastElementChild || parent.lastChild\n}\n\nexport function remove(child) {\n return child.parentNode.removeChild(child)\n}\n\nexport function setStyle(element, key, value) {\n element.style[key] = value\n return element\n}\n\nexport function setStyles(element, styles) {\n for (const key in styles) {\n setStyle(element, key, styles[key])\n }\n return element\n}\n\nexport function getStyle(element, key, numberType = true) {\n const value = window.getComputedStyle(element, null).getPropertyValue(key)\n return numberType ? Number.parseFloat(value) : value\n}\n\nexport function siblings(target) {\n return Array.from(target.parentElement.children).filter(item => item !== target)\n}\n\nexport function inverseClass(target, className) {\n siblings(target).forEach(item => removeClass(item, className))\n addClass(target, className)\n}\n\nexport function tooltip(target, msg, pos = 'top') {\n if (isMobile)\n return\n target.setAttribute('aria-label', msg)\n addClass(target, 'hint--rounded')\n addClass(target, `hint--${pos}`)\n}\n\nexport function isInViewport(el, offset = 0) {\n const rect = el.getBoundingClientRect()\n const windowHeight = window.innerHeight || document.documentElement.clientHeight\n const windowWidth = window.innerWidth || document.documentElement.clientWidth\n const vertInView = rect.top - offset <= windowHeight && rect.top + rect.height + offset >= 0\n const horInView = rect.left - offset <= windowWidth + offset && rect.left + rect.width + offset >= 0\n return vertInView && horInView\n}\n\nexport function includeFromEvent(event, target) {\n return getComposedPath(event).includes(target)\n}\n\nexport function replaceElement(newChild, oldChild) {\n oldChild.parentNode.replaceChild(newChild, oldChild)\n return newChild\n}\n\nexport function createElement(tag) {\n return document.createElement(tag)\n}\n\nexport function getIcon(key = '', html = '') {\n const icon = createElement('i')\n addClass(icon, 'art-icon')\n addClass(icon, `art-icon-${key}`)\n append(icon, html)\n return icon\n}\n\nexport function setStyleText(id, style) {\n let $style = document.getElementById(id)\n if (!$style) {\n $style = document.createElement('style')\n $style.id = id\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => {\n document.head.appendChild($style)\n })\n }\n else {\n (document.head || document.documentElement).appendChild($style)\n }\n }\n $style.textContent = style\n}\n\nexport function supportsFlex() {\n const div = document.createElement('div')\n div.style.display = 'flex'\n return div.style.display === 'flex'\n}\n\nexport function getRect(el) {\n return el.getBoundingClientRect()\n}\n\nexport function loadImg(url, scale) {\n return new Promise((resolve, reject) => {\n const img = new Image()\n\n img.onload = function () {\n if (!scale || scale === 1) {\n resolve(img)\n }\n else {\n const canvas = document.createElement('canvas')\n const ctx = canvas.getContext('2d')\n canvas.width = img.width * scale\n canvas.height = img.height * scale\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height)\n\n canvas.toBlob((blob) => {\n const blobUrl = URL.createObjectURL(blob)\n const scaledImg = new Image()\n\n scaledImg.onload = function () {\n resolve(scaledImg)\n }\n\n scaledImg.onerror = function () {\n URL.revokeObjectURL(blobUrl)\n reject(new Error(`Image load failed: ${url}`))\n }\n\n scaledImg.src = blobUrl\n })\n }\n }\n\n img.onerror = function () {\n reject(new Error(`Image load failed: ${url}`))\n }\n\n img.src = url\n })\n}\n\nexport function getComposedPath(event) {\n if (event.composedPath)\n return event.composedPath()\n const path = []\n let node = event.target\n while (node) {\n path.push(node)\n node = node.parentNode\n }\n if (!path.includes(window) && window !== undefined) {\n path.push(window)\n }\n return path\n}\n","export class ArtPlayerError extends Error {\n constructor(message, context) {\n super(message)\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, context || this.constructor)\n }\n this.name = 'ArtPlayerError'\n }\n}\n\nexport function errorHandle(condition, msg) {\n if (!condition) {\n throw new ArtPlayerError(msg)\n }\n return condition\n}\n","export function getExt(url) {\n if (url.includes('?')) {\n return getExt(url.split('?')[0])\n }\n\n if (url.includes('#')) {\n return getExt(url.split('#')[0])\n }\n\n return url.trim().toLowerCase().split('.').pop()\n}\n\nexport function download(url, name) {\n const elink = document.createElement('a')\n elink.style.display = 'none'\n elink.href = url\n elink.download = name\n document.body.appendChild(elink)\n elink.click()\n document.body.removeChild(elink)\n}\n","export function clamp(num, a, b) {\n return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b))\n}\n\nexport function capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n\nexport function secondToTime(second) {\n if (!second)\n return '00:00'\n const add0 = num => (num < 10 ? `0${num}` : String(num))\n const hour = Math.floor(second / 3600)\n const min = Math.floor((second - hour * 3600) / 60)\n const sec = Math.floor(second - hour * 3600 - min * 60)\n return (hour > 0 ? [hour, min, sec] : [min, sec]).map(add0).join(':')\n}\n\nexport function escape(str) {\n return str.replace(\n /[&<>'\"]/g,\n tag =>\n ({\n '&': '&',\n '<': '<',\n '>': '>',\n '\\'': ''',\n '\"': '"',\n })[tag] || tag,\n )\n}\n\nexport function unescape(str) {\n const map = {\n '&': '&',\n '<': '<',\n '>': '>',\n ''': '\\'',\n '"': '\"',\n }\n const reg = new RegExp(`(${Object.keys(map).join('|')})`, 'g')\n return str.replace(reg, tag => map[tag] || tag)\n}\n","export const def = Object.defineProperty\n\nconst { hasOwnProperty } = Object.prototype\nexport function has(obj, name) {\n return hasOwnProperty.call(obj, name)\n}\n\nexport function get(obj, name) {\n return Object.getOwnPropertyDescriptor(obj, name)\n}\n\nexport function mergeDeep(...objects) {\n const isObject = item => item && typeof item === 'object' && !Array.isArray(item)\n return objects.reduce((prev, obj) => {\n Object.keys(obj).forEach((key) => {\n const pVal = prev[key]\n const oVal = obj[key]\n if (Array.isArray(pVal) && Array.isArray(oVal)) {\n prev[key] = pVal.concat(...oVal)\n }\n else if (isObject(pVal) && isObject(oVal)) {\n prev[key] = mergeDeep(pVal, oVal)\n }\n else {\n prev[key] = oVal\n }\n })\n return prev\n }, {})\n}\n","function fixSrt(srt) {\n return srt.replace(/(\\d\\d:\\d\\d:\\d\\d)[,.](\\d+)/g, (_, $1, $2) => {\n let ms = $2.slice(0, 3)\n if ($2.length === 1) {\n ms = `${$2}00`\n }\n if ($2.length === 2) {\n ms = `${$2}0`\n }\n return `${$1},${ms}`\n })\n}\n\nexport function srtToVtt(srtText) {\n return 'WEBVTT \\r\\n\\r\\n'.concat(\n fixSrt(srtText)\n .replace(/\\{\\\\([ibu])\\}/g, '')\n .replace(/\\{\\\\([ibu])1\\}/g, '<$1>')\n .replace(/\\{([ibu])\\}/g, '<$1>')\n .replace(/\\{\\/([ibu])\\}/g, '')\n .replace(/(\\d\\d:\\d\\d:\\d\\d),(\\d\\d\\d)/g, '$1.$2')\n .replace(/\\{[\\s\\S]*?\\}/g, '')\n .concat('\\r\\n\\r\\n'),\n )\n}\n\nexport function vttToBlob(vttText) {\n return URL.createObjectURL(\n new Blob([vttText], {\n type: 'text/vtt',\n }),\n )\n}\n\nexport function assToVtt(ass) {\n const reAss = new RegExp(\n 'Dialogue:\\\\s\\\\d,'\n + '(\\\\d+:\\\\d\\\\d:\\\\d\\\\d.\\\\d\\\\d),'\n + '(\\\\d+:\\\\d\\\\d:\\\\d\\\\d.\\\\d\\\\d),'\n + '([^,]*),'\n + '([^,]*),'\n + '(?:[^,]*,){4}'\n + '([\\\\s\\\\S]*)$',\n 'i',\n )\n\n function fixTime(time = '') {\n return time\n .split(/[:.]/)\n .map((item, index, arr) => {\n if (index === arr.length - 1) {\n if (item.length === 1) {\n return `.${item}00`\n }\n\n if (item.length === 2) {\n return `.${item}0`\n }\n }\n else if (item.length === 1) {\n return (index === 0 ? '0' : ':0') + item\n }\n\n return index === 0 ? item : index === arr.length - 1 ? `.${item}` : `:${item}`\n })\n .join('')\n }\n\n return (\n `WEBVTT`\n + `\\n`\n + `\\n${\n ass\n .split(/\\r?\\n/)\n .map((line) => {\n const m = line.match(reAss)\n if (!m)\n return null\n return {\n start: fixTime(m[1].trim()),\n end: fixTime(m[2].trim()),\n text: m[5]\n .replace(/\\{[\\s\\S]*?\\}/g, '')\n .replace(/(\\\\N)/g, '\\n')\n .trim()\n .split(/\\r?\\n/)\n .map(item => item.trim())\n .join('\\n'),\n }\n })\n .filter(line => line)\n .map((line, index) => {\n if (line) {\n return `${index + 1}\\n` + `${line.start} --> ${line.end}` + `\\n` + `${line.text}`\n }\n return ''\n })\n .filter(line => line.trim())\n .join('\\n\\n')}`\n )\n}\n","export function sleep(ms = 0) {\n return new Promise(resolve => setTimeout(resolve, ms))\n}\n\nexport function debounce(func, duration) {\n let timeout\n\n return function (...args) {\n const effect = () => {\n timeout = null\n return func.apply(this, args)\n }\n\n clearTimeout(timeout)\n timeout = setTimeout(effect, duration)\n }\n}\n\nexport function throttle(func, duration) {\n let shouldWait = false\n\n return function (...args) {\n if (!shouldWait) {\n func.apply(this, args)\n shouldWait = true\n\n setTimeout(() => {\n shouldWait = false\n }, duration)\n }\n }\n}\n","import validator from 'option-validator'\nimport { ComponentOption } from '../scheme'\nimport { addClass, append, createElement, hasClass, remove, removeClass, setStyles, tooltip } from './dom'\nimport { errorHandle } from './error'\n\nexport default class Component {\n constructor(art) {\n this.id = 0\n this.art = art\n this.cache = new Map()\n this.add = this.add.bind(this)\n this.remove = this.remove.bind(this)\n this.update = this.update.bind(this)\n }\n\n get show() {\n return hasClass(this.art.template.$player, `art-${this.name}-show`)\n }\n\n set show(value) {\n const { $player } = this.art.template\n const className = `art-${this.name}-show`\n if (value) {\n addClass($player, className)\n }\n else {\n removeClass($player, className)\n }\n this.art.emit(this.name, value)\n }\n\n toggle() {\n this.show = !this.show\n }\n\n add(getOption) {\n const option = typeof getOption === 'function' ? getOption(this.art) : getOption\n option.html = option.html || ''\n validator(option, ComponentOption)\n if (!this.$parent || !this.name || option.disable)\n return\n const name = option.name || `${this.name}${this.id}`\n const item = this.cache.get(name)\n errorHandle(!item, `Can't add an existing [${name}] to the [${this.name}]`)\n\n this.id += 1\n const $ref = createElement('div')\n addClass($ref, `art-${this.name}`)\n addClass($ref, `art-${this.name}-${name}`)\n\n const childs = Array.from(this.$parent.children)\n $ref.dataset.index = option.index || this.id\n const nextChild = childs.find(item => Number(item.dataset.index) >= Number($ref.dataset.index))\n if (nextChild) {\n nextChild.insertAdjacentElement('beforebegin', $ref)\n }\n else {\n append(this.$parent, $ref)\n }\n\n if (option.html) {\n append($ref, option.html)\n }\n\n if (option.style) {\n setStyles($ref, option.style)\n }\n\n if (option.tooltip) {\n tooltip($ref, option.tooltip)\n }\n\n const events = []\n if (option.click) {\n const destroyEvent = this.art.events.proxy($ref, 'click', (event) => {\n event.preventDefault()\n option.click.call(this.art, this, event)\n })\n events.push(destroyEvent)\n }\n\n if (option.selector && ['left', 'right'].includes(option.position)) {\n this.selector(option, $ref, events)\n }\n\n this[name] = $ref\n this.cache.set(name, { $ref, events, option })\n\n if (option.mounted) {\n option.mounted.call(this.art, $ref)\n }\n\n return $ref\n }\n\n remove(name) {\n const item = this.cache.get(name)\n errorHandle(item, `Can't find [${name}] from the [${this.name}]`)\n\n if (item.option.beforeUnmount) {\n item.option.beforeUnmount.call(this.art, item.$ref)\n }\n\n for (let index = 0; index < item.events.length; index++) {\n this.art.events.remove(item.events[index])\n }\n\n this.cache.delete(name)\n delete this[name]\n remove(item.$ref)\n }\n\n update(option) {\n const item = this.cache.get(option.name)\n if (item) {\n option = Object.assign(item.option, option)\n this.remove(option.name)\n }\n return this.add(option)\n }\n}\n","import { errorHandle } from '../utils'\n\nconst a = 'array'\nconst b = 'boolean'\nconst s = 'string'\nconst n = 'number'\nconst o = 'object'\nconst f = 'function'\n\nfunction validElement(value, type, paths) {\n return errorHandle(\n type === s || type === n || value instanceof Element,\n `${paths.join('.')} require '${s}' or 'Element' type`,\n )\n}\n\nexport const ComponentOption = {\n html: validElement,\n disable: `?${b}`,\n name: `?${s}`,\n index: `?${n}`,\n style: `?${o}`,\n click: `?${f}`,\n mounted: `?${f}`,\n tooltip: `?${s}|${n}`,\n width: `?${n}`,\n selector: `?${a}`,\n onSelect: `?${f}`,\n switch: `?${b}`,\n onSwitch: `?${f}`,\n range: `?${a}`,\n onRange: `?${f}`,\n onChange: `?${f}`,\n}\n\nexport default {\n id: s,\n container: validElement,\n url: s,\n poster: s,\n type: s,\n theme: s,\n lang: s,\n volume: n,\n isLive: b,\n muted: b,\n autoplay: b,\n autoSize: b,\n autoMini: b,\n loop: b,\n flip: b,\n playbackRate: b,\n aspectRatio: b,\n screenshot: b,\n setting: b,\n hotkey: b,\n pip: b,\n mutex: b,\n backdrop: b,\n fullscreen: b,\n fullscreenWeb: b,\n subtitleOffset: b,\n miniProgressBar: b,\n useSSR: b,\n playsInline: b,\n lock: b,\n gesture: b,\n fastForward: b,\n autoPlayback: b,\n autoOrientation: b,\n airplay: b,\n proxy: `?${f}`,\n plugins: [f],\n layers: [ComponentOption],\n contextmenu: [ComponentOption],\n settings: [ComponentOption],\n controls: [\n {\n ...ComponentOption,\n position: (value, _, paths) => {\n const position = ['top', 'left', 'right']\n return errorHandle(\n position.includes(value),\n `${paths.join('.')} only accept ${position.toString()} as parameters`,\n )\n },\n },\n ],\n quality: [\n {\n default: `?${b}`,\n html: s,\n url: s,\n },\n ],\n highlight: [\n {\n time: n,\n text: s,\n },\n ],\n thumbnails: {\n url: s,\n number: n,\n column: n,\n width: n,\n height: n,\n scale: n,\n },\n subtitle: {\n url: s,\n name: s,\n type: s,\n style: o,\n escape: b,\n encoding: s,\n onVttLoad: f,\n },\n moreVideoAttr: o,\n i18n: o,\n icons: o,\n cssVar: o,\n customType: o,\n}\n","import { inverseClass, query, queryAll } from '../utils'\n\nexport default function aspectRatio(option) {\n return (art) => {\n const {\n i18n,\n constructor: { ASPECT_RATIO },\n } = art\n\n const html = ASPECT_RATIO.map(\n item => `${item === 'default' ? i18n.get('Default') : item}`,\n ).join('')\n\n return {\n ...option,\n html: `${i18n.get('Aspect Ratio')}: ${html}`,\n click: (contextmenu, event) => {\n const { value } = event.target.dataset\n if (value) {\n art.aspectRatio = value\n contextmenu.show = false\n }\n },\n mounted: ($panel) => {\n const $default = query('[data-value=\"default\"]', $panel)\n if ($default) {\n inverseClass($default, 'art-current')\n }\n art.on('aspectRatio', (value) => {\n const $current = queryAll('span', $panel).find(item => item.dataset.value === value)\n if ($current) {\n inverseClass($current, 'art-current')\n }\n })\n },\n }\n }\n}\n","export default function close(option) {\n return art => ({\n ...option,\n html: art.i18n.get('Close'),\n click: (contextmenu) => {\n contextmenu.show = false\n },\n })\n}\n","import { capitalize, inverseClass, query, queryAll } from '../utils'\n\nexport default function flip(option) {\n return (art) => {\n const {\n i18n,\n constructor: { FLIP },\n } = art\n\n const html = FLIP.map(item => `${i18n.get(capitalize(item))}`).join('')\n\n return {\n ...option,\n html: `${i18n.get('Video Flip')}: ${html}`,\n click: (contextmenu, event) => {\n const { value } = event.target.dataset\n if (value) {\n art.flip = value.toLowerCase()\n contextmenu.show = false\n }\n },\n mounted: ($panel) => {\n const $default = query('[data-value=\"normal\"]', $panel)\n if ($default) {\n inverseClass($default, 'art-current')\n }\n art.on('flip', (value) => {\n const $current = queryAll('span', $panel).find(item => item.dataset.value === value)\n if ($current) {\n inverseClass($current, 'art-current')\n }\n })\n },\n }\n }\n}\n","export default function info(option) {\n return art => ({\n ...option,\n html: art.i18n.get('Video Info'),\n click: (contextmenu) => {\n art.info.show = true\n contextmenu.show = false\n },\n })\n}\n","import { inverseClass, query, queryAll } from '../utils'\n\nexport default function playbackRate(option) {\n return (art) => {\n const {\n i18n,\n constructor: { PLAYBACK_RATE },\n } = art\n\n const html = PLAYBACK_RATE.map(\n item => `${item === 1 ? i18n.get('Normal') : item.toFixed(1)}`,\n ).join('')\n\n return {\n ...option,\n html: `${i18n.get('Play Speed')}: ${html}`,\n click: (contextmenu, event) => {\n const { value } = event.target.dataset\n if (value) {\n art.playbackRate = Number(value)\n contextmenu.show = false\n }\n },\n mounted: ($panel) => {\n const $default = query('[data-value=\"1\"]', $panel)\n if ($default)\n inverseClass($default, 'art-current')\n art.on('video:ratechange', () => {\n const $current = queryAll('span', $panel).find(\n item => Number(item.dataset.value) === art.playbackRate,\n )\n if ($current) {\n inverseClass($current, 'art-current')\n }\n })\n },\n }\n }\n}\n","import { version } from '../../package.json'\n\nexport default function (option) {\n return {\n ...option,\n html: `ArtPlayer ${version}`,\n }\n}\n","import {\n addClass,\n append,\n createElement,\n def,\n errorHandle,\n getComposedPath,\n includeFromEvent,\n inverseClass,\n isMobile,\n removeClass,\n sleep,\n} from '../utils'\nimport Component from '../utils/component'\nimport airplay from './airplay'\nimport fullscreen from './fullscreen'\nimport fullscreenWeb from './fullscreenWeb'\nimport pip from './pip'\nimport playAndPause from './playAndPause'\nimport progress from './progress'\nimport screenshot from './screenshot'\nimport setting from './setting'\nimport time from './time'\nimport volume from './volume'\n\nexport default class Control extends Component {\n constructor(art) {\n super(art)\n\n this.isHover = false\n this.name = 'control'\n this.timer = Date.now()\n\n const { constructor } = art\n const { $player, $bottom } = this.art.template\n\n art.on('mousemove', () => {\n if (!isMobile) {\n this.show = true\n }\n })\n\n art.on('click', () => {\n if (isMobile) {\n this.toggle()\n }\n else {\n this.show = true\n }\n })\n\n art.on('document:mousemove', (event) => {\n this.isHover = includeFromEvent(event, $bottom)\n })\n\n art.on('video:timeupdate', () => {\n if (\n !art.setting.show\n && !this.isHover\n && !art.isInput\n && art.playing\n && this.show\n && Date.now() - this.timer >= constructor.CONTROL_HIDE_TIME\n ) {\n this.show = false\n }\n })\n\n art.on('control', (state) => {\n if (state) {\n removeClass($player, 'art-hide-cursor')\n addClass($player, 'art-hover')\n this.timer = Date.now()\n }\n else {\n addClass($player, 'art-hide-cursor')\n removeClass($player, 'art-hover')\n }\n })\n\n this.init()\n }\n\n init() {\n const { option } = this.art\n\n if (!option.isLive) {\n this.add(\n progress({\n name: 'progress',\n position: 'top',\n index: 10,\n }),\n )\n }\n\n this.add({\n name: 'thumbnails',\n position: 'top',\n index: 20,\n })\n\n this.add(\n playAndPause({\n name: 'playAndPause',\n position: 'left',\n index: 10,\n }),\n )\n\n this.add(\n volume({\n name: 'volume',\n position: 'left',\n index: 20,\n }),\n )\n\n if (!option.isLive) {\n this.add(\n time({\n name: 'time',\n position: 'left',\n index: 30,\n }),\n )\n }\n\n if (option.quality.length) {\n sleep().then(() => {\n this.art.quality = option.quality\n })\n }\n\n if (option.screenshot && !isMobile) {\n this.add(\n screenshot({\n name: 'screenshot',\n position: 'right',\n index: 20,\n }),\n )\n }\n\n if (option.setting) {\n this.add(\n setting({\n name: 'setting',\n position: 'right',\n index: 30,\n }),\n )\n }\n\n if (option.pip) {\n this.add(\n pip({\n name: 'pip',\n position: 'right',\n index: 40,\n }),\n )\n }\n\n if (option.airplay && window.WebKitPlaybackTargetAvailabilityEvent) {\n this.add(\n airplay({\n name: 'airplay',\n position: 'right',\n index: 50,\n }),\n )\n }\n\n if (option.fullscreenWeb) {\n this.add(\n fullscreenWeb({\n name: 'fullscreenWeb',\n position: 'right',\n index: 60,\n }),\n )\n }\n\n if (option.fullscreen) {\n this.add(\n fullscreen({\n name: 'fullscreen',\n position: 'right',\n index: 70,\n }),\n )\n }\n\n for (let index = 0; index < option.controls.length; index++) {\n this.add(option.controls[index])\n }\n }\n\n add(getOption) {\n const option = typeof getOption === 'function' ? getOption(this.art) : getOption\n const { $progress, $controlsLeft, $controlsRight } = this.art.template\n\n switch (option.position) {\n case 'top':\n this.$parent = $progress\n break\n case 'left':\n this.$parent = $controlsLeft\n break\n case 'right':\n this.$parent = $controlsRight\n break\n default:\n errorHandle(false, `Control option.position must one of 'top', 'left', 'right'`)\n break\n }\n\n super.add(option)\n }\n\n check(target) {\n target.$control_value.innerHTML = target.html\n for (let index = 0; index < target.$control_option.length; index++) {\n const item = target.$control_option[index]\n item.default = item === target\n if (item.default) {\n inverseClass(item.$control_item, 'art-current')\n }\n }\n }\n\n selector(option, $ref, events) {\n const { proxy } = this.art.events\n\n addClass($ref, 'art-control-selector')\n const $value = createElement('div')\n addClass($value, 'art-selector-value')\n append($value, option.html)\n $ref.textContent = ''\n append($ref, $value)\n\n const $list = createElement('div')\n addClass($list, 'art-selector-list')\n append($ref, $list)\n\n for (let index = 0; index < option.selector.length; index++) {\n const item = option.selector[index]\n const $item = createElement('div')\n addClass($item, 'art-selector-item')\n if (item.default)\n addClass($item, 'art-current')\n $item.dataset.index = index\n $item.dataset.value = item.value\n $item.innerHTML = item.html\n append($list, $item)\n\n def(item, '$control_option', {\n get: () => option.selector,\n })\n\n def(item, '$control_item', {\n get: () => $item,\n })\n\n def(item, '$control_value', {\n get: () => $value,\n })\n }\n\n const event = proxy($list, 'click', async (event) => {\n const path = getComposedPath(event)\n const item = option.selector.find(\n item => item.$control_item === path.find($item => item.$control_item === $item),\n )\n this.check(item)\n if (option.onSelect) {\n $value.innerHTML = await option.onSelect.call(this.art, item, item.$control_item, event)\n }\n })\n\n events.push(event)\n }\n}\n","import { append } from '../utils'\n\nexport default function airplay(option) {\n return art => ({\n ...option,\n tooltip: art.i18n.get('AirPlay'),\n mounted: ($control) => {\n const { proxy, icons } = art\n append($control, icons.airplay)\n proxy($control, 'click', () => art.airplay())\n },\n })\n}\n","import { append, setStyle, tooltip } from '../utils'\n\nexport default function fullscreen(option) {\n return art => ({\n ...option,\n tooltip: art.i18n.get('Fullscreen'),\n mounted: ($control) => {\n const { proxy, icons, i18n } = art\n\n const $fullscreenOn = append($control, icons.fullscreenOn)\n const $fullscreenOff = append($control, icons.fullscreenOff)\n setStyle($fullscreenOff, 'display', 'none')\n\n proxy($control, 'click', () => {\n art.fullscreen = !art.fullscreen\n })\n\n art.on('fullscreen', (state) => {\n if (state) {\n tooltip($control, i18n.get('Exit Fullscreen'))\n setStyle($fullscreenOn, 'display', 'none')\n setStyle($fullscreenOff, 'display', 'inline-flex')\n }\n else {\n tooltip($control, i18n.get('Fullscreen'))\n setStyle($fullscreenOn, 'display', 'inline-flex')\n setStyle($fullscreenOff, 'display', 'none')\n }\n })\n },\n })\n}\n","import { append, setStyle, tooltip } from '../utils'\n\nexport default function fullscreenWeb(option) {\n return art => ({\n ...option,\n tooltip: art.i18n.get('Web Fullscreen'),\n mounted: ($control) => {\n const { proxy, icons, i18n } = art\n\n const $fullscreenWebOn = append($control, icons.fullscreenWebOn)\n const $fullscreenWebOff = append($control, icons.fullscreenWebOff)\n setStyle($fullscreenWebOff, 'display', 'none')\n\n proxy($control, 'click', () => {\n art.fullscreenWeb = !art.fullscreenWeb\n })\n\n art.on('fullscreenWeb', (value) => {\n if (value) {\n tooltip($control, i18n.get('Exit Web Fullscreen'))\n setStyle($fullscreenWebOn, 'display', 'none')\n setStyle($fullscreenWebOff, 'display', 'inline-flex')\n }\n else {\n tooltip($control, i18n.get('Web Fullscreen'))\n setStyle($fullscreenWebOn, 'display', 'inline-flex')\n setStyle($fullscreenWebOff, 'display', 'none')\n }\n })\n },\n })\n}\n","import { append, tooltip } from '../utils'\n\nexport default function pip(option) {\n return art => ({\n ...option,\n tooltip: art.i18n.get('PIP Mode'),\n mounted: ($control) => {\n const { proxy, icons, i18n } = art\n\n append($control, icons.pip)\n\n proxy($control, 'click', () => {\n art.pip = !art.pip\n })\n\n art.on('pip', (value) => {\n tooltip($control, i18n.get(value ? 'Exit PIP Mode' : 'PIP Mode'))\n })\n },\n })\n}\n","import { append, setStyle, tooltip } from '../utils'\n\nexport default function playAndPause(option) {\n return art => ({\n ...option,\n mounted: ($control) => {\n const { proxy, icons, i18n } = art\n\n const $play = append($control, icons.play)\n const $pause = append($control, icons.pause)\n tooltip($play, i18n.get('Play'))\n tooltip($pause, i18n.get('Pause'))\n\n proxy($play, 'click', () => {\n art.play()\n })\n\n proxy($pause, 'click', () => {\n art.pause()\n })\n\n function showPlay() {\n setStyle($play, 'display', 'flex')\n setStyle($pause, 'display', 'none')\n }\n\n function showPause() {\n setStyle($play, 'display', 'none')\n setStyle($pause, 'display', 'flex')\n }\n\n if (art.playing) {\n showPause()\n }\n else {\n showPlay()\n }\n\n art.on('video:playing', () => {\n showPause()\n })\n\n art.on('video:pause', () => {\n showPlay()\n })\n },\n })\n}\n","import { append, clamp, getRect, includeFromEvent, isMobile, query, secondToTime, setStyle } from '../utils'\n\nexport function getPosFromEvent(art, event) {\n const { $progress } = art.template\n const { left } = getRect($progress)\n const eventLeft = isMobile ? event.touches[0].clientX : event.clientX\n const width = clamp(eventLeft - left, 0, $progress.clientWidth)\n const second = (width / $progress.clientWidth) * art.duration\n const time = secondToTime(second)\n const percentage = clamp(width / $progress.clientWidth, 0, 1)\n return { second, time, width, percentage }\n}\n\nexport function setCurrentTime(art, event) {\n if (art.isRotate) {\n const percentage = event.touches[0].clientY / art.height\n const second = percentage * art.duration\n art.emit('setBar', 'played', percentage, event)\n art.seek = second\n }\n else {\n const { second, percentage } = getPosFromEvent(art, event)\n art.emit('setBar', 'played', percentage, event)\n art.seek = second\n }\n}\n\nexport default function progress(options) {\n return (art) => {\n const { icons, option, proxy } = art\n\n return {\n ...options,\n html: `\n
\n
\n
\n
\n
\n
\n
\n
\n `,\n mounted: ($control) => {\n let tipTimer = null\n let isDragging = false\n\n const $hover = query('.art-progress-hover', $control)\n const $loaded = query('.art-progress-loaded', $control)\n const $played = query('.art-progress-played', $control)\n const $highlight = query('.art-progress-highlight', $control)\n const $indicator = query('.art-progress-indicator', $control)\n const $tip = query('.art-progress-tip', $control)\n\n if (icons.indicator) {\n append($indicator, icons.indicator)\n }\n else {\n setStyle($indicator, 'backgroundColor', 'var(--art-theme)')\n }\n\n function showHighlight(event) {\n const { width } = getPosFromEvent(art, event)\n const { text } = event.target.dataset\n $tip.textContent = text\n const tipWidth = $tip.clientWidth\n if (width <= tipWidth / 2) {\n setStyle($tip, 'left', 0)\n }\n else if (width > $control.clientWidth - tipWidth / 2) {\n setStyle($tip, 'left', `${$control.clientWidth - tipWidth}px`)\n }\n else {\n setStyle($tip, 'left', `${width - tipWidth / 2}px`)\n }\n }\n\n function showTime(event, touch) {\n const { width, time } = touch || getPosFromEvent(art, event)\n $tip.textContent = time\n const tipWidth = $tip.clientWidth\n if (width <= tipWidth / 2) {\n setStyle($tip, 'left', 0)\n }\n else if (width > $control.clientWidth - tipWidth / 2) {\n setStyle($tip, 'left', `${$control.clientWidth - tipWidth}px`)\n }\n else {\n setStyle($tip, 'left', `${width - tipWidth / 2}px`)\n }\n }\n\n function updateHighlight() {\n $highlight.textContent = ''\n for (let index = 0; index < option.highlight.length; index++) {\n const item = option.highlight[index]\n const left = (clamp(item.time, 0, art.duration) / art.duration) * 100\n const html = ``\n append($highlight, html)\n }\n }\n\n function setBar(type, percentage, event) {\n const isMobileDragging = type === 'played' && event && isMobile\n\n if (type === 'loaded') {\n setStyle($loaded, 'width', `${percentage * 100}%`)\n }\n\n if (type === 'hover') {\n setStyle($hover, 'width', `${percentage * 100}%`)\n }\n\n if (type === 'played') {\n setStyle($played, 'width', `${percentage * 100}%`)\n setStyle($indicator, 'left', `${percentage * 100}%`)\n }\n\n if (isMobileDragging) {\n setStyle($tip, 'display', 'flex')\n const width = $control.clientWidth * percentage\n const time = secondToTime(percentage * art.duration)\n showTime(event, { width, time })\n clearTimeout(tipTimer)\n tipTimer = setTimeout(() => {\n setStyle($tip, 'display', 'none')\n }, 500)\n }\n }\n\n art.on('setBar', setBar)\n art.on('video:loadedmetadata', updateHighlight)\n\n if (art.constructor.USE_RAF) {\n art.on('raf', () => {\n art.emit('setBar', 'played', art.played)\n art.emit('setBar', 'loaded', art.loaded)\n })\n }\n else {\n art.on('video:timeupdate', () => {\n art.emit('setBar', 'played', art.played)\n })\n\n art.on('video:progress', () => {\n art.emit('setBar', 'loaded', art.loaded)\n })\n\n art.on('video:ended', () => {\n art.emit('setBar', 'played', 1)\n })\n }\n\n art.emit('setBar', 'loaded', art.loaded || 0)\n\n if (!isMobile) {\n proxy($control, 'click', (event) => {\n if (event.target !== $indicator) {\n setCurrentTime(art, event)\n }\n })\n\n proxy($control, 'mousemove', (event) => {\n const { percentage } = getPosFromEvent(art, event)\n art.emit('setBar', 'hover', percentage, event)\n setStyle($tip, 'display', 'flex')\n if (includeFromEvent(event, $highlight)) {\n showHighlight(event)\n }\n else {\n showTime(event)\n }\n })\n\n proxy($control, 'mouseleave', (event) => {\n setStyle($tip, 'display', 'none')\n art.emit('setBar', 'hover', 0, event)\n })\n\n proxy($control, 'mousedown', (event) => {\n isDragging = event.button === 0\n })\n\n art.on('document:mousemove', (event) => {\n if (isDragging) {\n const { second, percentage } = getPosFromEvent(art, event)\n art.emit('setBar', 'played', percentage, event)\n art.seek = second\n }\n })\n\n art.on('document:mouseup', () => {\n if (isDragging) {\n isDragging = false\n }\n })\n }\n },\n }\n }\n}\n","import { append } from '../utils'\n\nexport default function screenshot(option) {\n return art => ({\n ...option,\n tooltip: art.i18n.get('Screenshot'),\n mounted: ($control) => {\n const { proxy, icons } = art\n\n append($control, icons.screenshot)\n proxy($control, 'click', () => {\n art.screenshot()\n })\n },\n })\n}\n","import { append, tooltip } from '../utils'\n\nexport default function setting(option) {\n return art => ({\n ...option,\n tooltip: art.i18n.get('Show Setting'),\n mounted: ($control) => {\n const { proxy, icons, i18n } = art\n\n append($control, icons.setting)\n\n proxy($control, 'click', () => {\n art.setting.toggle()\n art.setting.resize()\n })\n\n art.on('setting', (value) => {\n tooltip($control, i18n.get(value ? 'Hide Setting' : 'Show Setting'))\n })\n },\n })\n}\n","import { isMobile, secondToTime } from '../utils'\n\nexport default function time(option) {\n return art => ({\n ...option,\n style: isMobile\n ? {\n fontSize: '12px',\n padding: '0 5px',\n }\n : {\n cursor: 'auto',\n padding: '0 10px',\n },\n mounted: ($control) => {\n function getTime() {\n const newTime = `${secondToTime(art.currentTime)} / ${secondToTime(art.duration)}`\n if (newTime !== $control.textContent) {\n $control.textContent = newTime\n }\n }\n\n getTime()\n\n const events = ['video:loadedmetadata', 'video:timeupdate', 'video:progress']\n for (let index = 0; index < events.length; index++) {\n art.on(events[index], getTime)\n }\n },\n })\n}\n","import { append, getRect, isMobile, setStyle } from '../utils'\n\nexport default function volume(option) {\n return art => ({\n ...option,\n mounted: ($control) => {\n const { proxy, icons } = art\n\n const $volume = append($control, icons.volume)\n const $close = append($control, icons.volumeClose)\n const $panel = append($control, '
')\n const $inner = append($panel, '
')\n const $value = append($inner, `
`)\n const $slider = append($inner, `
`)\n const $handle = append($slider, `
`)\n const $loaded = append($handle, `
`)\n const $indicator = append($slider, `
`)\n\n function getVolumeFromEvent(event) {\n const { top, height } = getRect($slider)\n return 1 - (event.clientY - top) / height\n }\n\n function update() {\n if (art.muted || art.volume === 0) {\n setStyle($volume, 'display', 'none')\n setStyle($close, 'display', 'flex')\n setStyle($indicator, 'top', '100%')\n setStyle($loaded, 'top', '100%')\n $value.textContent = 0\n }\n else {\n const percentage = art.volume * 100\n setStyle($volume, 'display', 'flex')\n setStyle($close, 'display', 'none')\n setStyle($indicator, 'top', `${100 - percentage}%`)\n setStyle($loaded, 'top', `${100 - percentage}%`)\n $value.textContent = Math.floor(percentage)\n }\n }\n\n update()\n art.on('video:volumechange', update)\n\n proxy($volume, 'click', () => {\n art.muted = true\n })\n\n proxy($close, 'click', () => {\n art.muted = false\n })\n\n if (isMobile) {\n setStyle($panel, 'display', 'none')\n }\n else {\n let isDragging = false\n\n proxy($slider, 'mousedown', (event) => {\n isDragging = event.button === 0\n art.volume = getVolumeFromEvent(event)\n })\n\n art.on('document:mousemove', (event) => {\n if (isDragging) {\n art.muted = false\n art.volume = getVolumeFromEvent(event)\n }\n })\n\n art.on('document:mouseup', () => {\n if (isDragging) {\n isDragging = false\n }\n })\n }\n },\n })\n}\n","import clickInit from './clickInit'\nimport documentInit from './documentInit'\nimport gestureInit from './gestureInit'\nimport hoverInit from './hoverInit'\nimport moveInit from './moveInit'\nimport resizeInit from './resizeInit'\nimport updateInit from './updateInit'\nimport viewInit from './viewInit'\n\nexport default class Events {\n constructor(art) {\n this.destroyEvents = []\n this.proxy = this.proxy.bind(this)\n this.hover = this.hover.bind(this)\n\n clickInit(art, this)\n hoverInit(art, this)\n moveInit(art, this)\n resizeInit(art, this)\n gestureInit(art, this)\n viewInit(art, this)\n documentInit(art, this)\n updateInit(art, this)\n }\n\n proxy(target, name, callback, option = {}) {\n if (Array.isArray(name)) {\n return name.map(item => this.proxy(target, item, callback, option))\n }\n\n target.addEventListener(name, callback, option)\n const destroy = () => target.removeEventListener(name, callback, option)\n this.destroyEvents.push(destroy)\n return destroy\n }\n\n hover(target, mouseenter, mouseleave) {\n if (mouseenter) {\n this.proxy(target, 'mouseenter', mouseenter)\n }\n if (mouseleave) {\n this.proxy(target, 'mouseleave', mouseleave)\n }\n }\n\n remove(destroyEvent) {\n const index = this.destroyEvents.indexOf(destroyEvent)\n if (index > -1) {\n destroyEvent()\n this.destroyEvents.splice(index, 1)\n }\n }\n\n destroy() {\n for (let index = 0; index < this.destroyEvents.length; index++) {\n this.destroyEvents[index]()\n }\n }\n}\n","import { includeFromEvent, isMobile } from '../utils'\n\nexport default function clickInit(art, events) {\n const {\n constructor,\n template: { $player, $video },\n } = art\n\n events.proxy(document, ['click', 'contextmenu'], (event) => {\n if (includeFromEvent(event, $player)) {\n art.isInput = event.target.tagName === 'INPUT'\n art.isFocus = true\n art.emit('focus', event)\n }\n else {\n art.isInput = false\n art.isFocus = false\n art.emit('blur', event)\n }\n })\n\n let clickTimes = []\n events.proxy($video, 'click', (event) => {\n const now = Date.now()\n clickTimes.push(now)\n const { MOBILE_CLICK_PLAY, DBCLICK_TIME, MOBILE_DBCLICK_PLAY, DBCLICK_FULLSCREEN } = constructor\n\n const clicks = clickTimes.filter(t => now - t <= DBCLICK_TIME)\n switch (clicks.length) {\n case 1:\n art.emit('click', event)\n\n if (isMobile) {\n if (!art.isLock && MOBILE_CLICK_PLAY) {\n art.toggle()\n }\n }\n else {\n art.toggle()\n }\n clickTimes = clicks\n break\n case 2:\n art.emit('dblclick', event)\n\n if (isMobile) {\n if (!art.isLock && MOBILE_DBCLICK_PLAY) {\n art.toggle()\n }\n }\n else {\n if (DBCLICK_FULLSCREEN) {\n art.fullscreen = !art.fullscreen\n }\n }\n clickTimes = []\n break\n default:\n clickTimes = []\n }\n })\n}\n","export default function documentInit(art, events) {\n events.proxy(document, 'mousemove', (event) => {\n art.emit('document:mousemove', event)\n })\n\n events.proxy(document, 'mouseup', (event) => {\n art.emit('document:mouseup', event)\n })\n}\n","import { setCurrentTime } from '../control/progress'\nimport { clamp, isMobile, secondToTime } from '../utils'\n\nfunction GetSlideAngle(dx, dy) {\n return (Math.atan2(dy, dx) * 180) / Math.PI\n}\n\nfunction GetSlideDirection(startX, startY, endX, endY) {\n const dy = startY - endY\n const dx = endX - startX\n let result = 0\n\n if (Math.abs(dx) < 2 && Math.abs(dy) < 2) {\n return result\n }\n\n const angle = GetSlideAngle(dx, dy)\n if (angle >= -45 && angle < 45) {\n result = 4\n }\n else if (angle >= 45 && angle < 135) {\n result = 1\n }\n else if (angle >= -135 && angle < -45) {\n result = 2\n }\n else if ((angle >= 135 && angle <= 180) || (angle >= -180 && angle < -135)) {\n result = 3\n }\n\n return result\n}\n\nexport default function gestureInit(art, events) {\n if (isMobile && !art.option.isLive) {\n const { $video, $progress } = art.template\n\n let touchTarget = null\n let isDragging = false\n let startX = 0\n let startY = 0\n let startTime = 0\n\n const onTouchStart = (event) => {\n if (event.touches.length === 1 && !art.isLock) {\n if (touchTarget === $progress) {\n setCurrentTime(art, event)\n }\n\n isDragging = true\n const { pageX, pageY } = event.touches[0]\n startX = pageX\n startY = pageY\n startTime = art.currentTime\n }\n }\n\n const onTouchMove = (event) => {\n if (event.touches.length === 1 && isDragging && art.duration) {\n const { pageX, pageY } = event.touches[0]\n const direction = GetSlideDirection(startX, startY, pageX, pageY)\n const isHorizontal = [3, 4].includes(direction)\n const isVertical = [1, 2].includes(direction)\n const isLegal = (isHorizontal && !art.isRotate) || (isVertical && art.isRotate)\n if (isLegal) {\n const ratioX = clamp((pageX - startX) / art.width, -1, 1)\n const ratioY = clamp((pageY - startY) / art.height, -1, 1)\n const ratio = art.isRotate ? ratioY : ratioX\n const TOUCH_MOVE_RATIO = touchTarget === $video ? art.constructor.TOUCH_MOVE_RATIO : 1\n const currentTime = clamp(startTime + art.duration * ratio * TOUCH_MOVE_RATIO, 0, art.duration)\n art.seek = currentTime\n art.emit('setBar', 'played', clamp(currentTime / art.duration, 0, 1), event)\n art.notice.show = `${secondToTime(currentTime)} / ${secondToTime(art.duration)}`\n }\n }\n }\n\n const onTouchEnd = () => {\n if (isDragging) {\n startX = 0\n startY = 0\n startTime = 0\n isDragging = false\n touchTarget = null\n }\n }\n\n if (art.option.gesture) {\n events.proxy($video, 'touchstart', (event) => {\n touchTarget = $video\n onTouchStart(event)\n })\n events.proxy($video, 'touchmove', onTouchMove)\n }\n\n events.proxy($progress, 'touchstart', (event) => {\n touchTarget = $progress\n onTouchStart(event)\n })\n\n events.proxy($progress, 'touchmove', onTouchMove)\n events.proxy(document, 'touchend', onTouchEnd)\n }\n}\n","import { addClass, removeClass } from '../utils'\n\nexport default function hoverInit(art, events) {\n const { $player } = art.template\n\n events.hover(\n $player,\n (event) => {\n addClass($player, 'art-hover')\n art.emit('hover', true, event)\n },\n (event) => {\n removeClass($player, 'art-hover')\n art.emit('hover', false, event)\n },\n )\n}\n","export default function moveInit(art, events) {\n const { $player } = art.template\n\n events.proxy($player, 'mousemove', (event) => {\n art.emit('mousemove', event)\n })\n}\n","import { debounce } from '../utils'\n\nexport default function resizeInit(art, events) {\n const { option, constructor } = art\n\n art.on('resize', () => {\n const { aspectRatio, notice } = art\n if (art.state === 'standard' && option.autoSize) {\n art.autoSize()\n }\n art.aspectRatio = aspectRatio\n notice.show = ''\n })\n\n const resizeFn = debounce(() => art.emit('resize'), constructor.RESIZE_TIME)\n events.proxy(window, ['orientationchange', 'resize'], () => resizeFn())\n if (screen && screen.orientation && screen.orientation.onchange) {\n events.proxy(screen.orientation, 'change', () => resizeFn())\n }\n}\n","export default function updateInit(art) {\n if (art.constructor.USE_RAF) {\n let timer = null;\n\n (function update() {\n if (art.playing) {\n art.emit('raf')\n }\n\n if (!art.isDestroy) {\n timer = requestAnimationFrame(update)\n }\n })()\n\n art.on('destroy', () => {\n cancelAnimationFrame(timer)\n })\n }\n}\n","import { isInViewport, throttle } from '../utils'\n\nexport default function viewInit(art, events) {\n const {\n option,\n constructor,\n template: { $container },\n } = art\n\n const scrollFn = throttle(() => {\n art.emit('view', isInViewport($container, constructor.SCROLL_GAP))\n }, constructor.SCROLL_TIME)\n\n events.proxy(window, 'scroll', () => scrollFn())\n\n art.on('view', (state) => {\n if (option.autoMini) {\n art.mini = !state\n }\n })\n}\n","import { isMobile } from './utils'\n\nexport default class Hotkey {\n constructor(art) {\n this.art = art\n this.keys = {}\n\n if (art.option.hotkey && !isMobile) {\n this.init()\n }\n }\n\n init() {\n const { proxy, constructor } = this.art\n\n this.add('Escape', () => {\n if (this.art.fullscreenWeb) {\n this.art.fullscreenWeb = false\n }\n })\n\n this.add('Space', () => {\n this.art.toggle()\n })\n\n this.add('ArrowLeft', () => {\n this.art.backward = constructor.SEEK_STEP\n })\n\n this.add('ArrowUp', () => {\n this.art.volume += constructor.VOLUME_STEP\n })\n\n this.add('ArrowRight', () => {\n this.art.forward = constructor.SEEK_STEP\n })\n\n this.add('ArrowDown', () => {\n this.art.volume -= constructor.VOLUME_STEP\n })\n\n proxy(document, 'keydown', (event) => {\n if (this.art.isFocus) {\n const tag = document.activeElement.tagName.toUpperCase()\n const editable = document.activeElement.getAttribute('contenteditable')\n if (\n tag !== 'INPUT'\n && tag !== 'TEXTAREA'\n && editable !== ''\n && editable !== 'true'\n && !event.altKey\n && !event.ctrlKey\n && !event.metaKey\n && !event.shiftKey\n ) {\n const events = this.keys[event.code]\n if (events) {\n event.preventDefault()\n for (let index = 0; index < events.length; index++) {\n events[index].call(this.art, event)\n }\n this.art.emit('hotkey', event)\n }\n }\n }\n this.art.emit('keydown', event)\n })\n }\n\n add(key, event) {\n if (this.keys[key]) {\n this.keys[key].push(event)\n }\n else {\n this.keys[key] = [event]\n }\n return this\n }\n\n remove(key, event) {\n if (this.keys[key]) {\n const index = this.keys[key].indexOf(event)\n if (index !== -1) {\n this.keys[key].splice(index, 1)\n }\n }\n return this\n }\n}\n","import { mergeDeep } from '../utils'\nimport zhCn from './zh-cn'\n\nexport default class I18n {\n constructor(art) {\n this.art = art\n\n this.languages = {\n 'zh-cn': zhCn,\n }\n\n this.language = {}\n\n this.update(art.option.i18n)\n }\n\n init() {\n const lang = this.art.option.lang.toLowerCase()\n this.language = this.languages[lang] || {}\n }\n\n get(key) {\n return this.language[key] || key\n }\n\n update(value) {\n this.languages = mergeDeep(this.languages, value)\n this.init()\n }\n}\n","const zhCn = {\n 'Video Info': '统计信息',\n 'Close': '关闭',\n 'Video Load Failed': '加载失败',\n 'Volume': '音量',\n 'Play': '播放',\n 'Pause': '暂停',\n 'Rate': '速度',\n 'Mute': '静音',\n 'Video Flip': '画面翻转',\n 'Horizontal': '水平',\n 'Vertical': '垂直',\n 'Reconnect': '重新连接',\n 'Show Setting': '显示设置',\n 'Hide Setting': '隐藏设置',\n 'Screenshot': '截图',\n 'Play Speed': '播放速度',\n 'Aspect Ratio': '画面比例',\n 'Default': '默认',\n 'Normal': '正常',\n 'Open': '打开',\n 'Switch Video': '切换',\n 'Switch Subtitle': '切换字幕',\n 'Fullscreen': '全屏',\n 'Exit Fullscreen': '退出全屏',\n 'Web Fullscreen': '网页全屏',\n 'Exit Web Fullscreen': '退出网页全屏',\n 'Mini Player': '迷你播放器',\n 'PIP Mode': '开启画中画',\n 'Exit PIP Mode': '退出画中画',\n 'PIP Not Supported': '不支持画中画',\n 'Fullscreen Not Supported': '不支持全屏',\n 'Subtitle Offset': '字幕偏移',\n 'Last Seen': '上次看到',\n 'Jump Play': '跳转播放',\n 'AirPlay': '隔空播放',\n 'AirPlay Not Available': '隔空播放不可用',\n}\n\nexport default zhCn\n\nif (typeof window !== 'undefined') {\n window['artplayer-i18n-zh-cn'] = zhCn\n}\n","import airplay from 'bundle-text:./airplay.svg'\nimport arrowLeft from 'bundle-text:./arrow-left.svg'\nimport arrowRight from 'bundle-text:./arrow-right.svg'\nimport aspectRatio from 'bundle-text:./aspect-ratio.svg'\nimport check from 'bundle-text:./check.svg'\nimport close from 'bundle-text:./close.svg'\nimport config from 'bundle-text:./config.svg'\nimport error from 'bundle-text:./error.svg'\nimport flip from 'bundle-text:./flip.svg'\nimport fullscreenOff from 'bundle-text:./fullscreen-off.svg'\nimport fullscreenOn from 'bundle-text:./fullscreen-on.svg'\nimport fullscreenWebOff from 'bundle-text:./fullscreen-web-off.svg'\nimport fullscreenWebOn from 'bundle-text:./fullscreen-web-on.svg'\nimport loading from 'bundle-text:./loading.svg'\nimport lock from 'bundle-text:./lock.svg'\nimport pause from 'bundle-text:./pause.svg'\nimport pip from 'bundle-text:./pip.svg'\nimport play from 'bundle-text:./play.svg'\nimport playbackRate from 'bundle-text:./playback-rate.svg'\nimport screenshot from 'bundle-text:./screenshot.svg'\nimport setting from 'bundle-text:./setting.svg'\nimport state from 'bundle-text:./state.svg'\nimport switchOff from 'bundle-text:./switch-off.svg'\nimport switchOn from 'bundle-text:./switch-on.svg'\nimport unlock from 'bundle-text:./unlock.svg'\nimport volumeClose from 'bundle-text:./volume-close.svg'\nimport volume from 'bundle-text:./volume.svg'\nimport { def, getIcon } from '../utils'\n\nexport default class Icons {\n constructor(art) {\n const icons = {\n loading,\n state,\n play,\n pause,\n check,\n volume,\n volumeClose,\n screenshot,\n setting,\n pip,\n arrowLeft,\n arrowRight,\n playbackRate,\n aspectRatio,\n config,\n lock,\n flip,\n unlock,\n fullscreenOff,\n fullscreenOn,\n fullscreenWebOff,\n fullscreenWebOn,\n switchOn,\n switchOff,\n error,\n close,\n airplay,\n ...art.option.icons,\n }\n\n for (const key in icons) {\n def(this, key, {\n get: () => getIcon(key, icons[key]),\n })\n }\n }\n}\n","module.exports = \"9e11ac5830b69238\";","module.exports = \"ea3f9694841ef258\";","module.exports = \"b67cac358913d514\";","module.exports = \"65c783bf793215eb\";","module.exports = \"6e9bb7fa28118e05\";","module.exports = \"ece62effeeaea8b9\";","module.exports = \"3fa24efddec6bcbd\";","module.exports = \"d3353905d0ec07f0\";","module.exports = \"9b95a2cd859b7b0b\";","module.exports = \"a76d6978226feea3\";","module.exports = \"fe487e5ddec5d380\";","module.exports = \"3f492d6cd9c76858\";","module.exports = \"46c741c838cae528\";","module.exports = \"75a057509707bc87\";","module.exports = \"358c932d8356421e\";","module.exports = \"b491c01323e26afb\";","module.exports = \"0d8559370ca5b4ef\";","module.exports = \"4838679ac81bbe80\";","module.exports = \"46895f0cf70aca10\";","module.exports = \"e4ecf862ed860d42\";","module.exports = \"a391299de3225f80\";","module.exports = \"820f454e33d34914\";","module.exports = \"03b02c181a6fb9ce\";","module.exports = \"ca0154888ac784ab\";","module.exports = \"7cf671d989be8873\";","module.exports = \"1499cf92f6f33dd9\";","module.exports = \"95ec2167c54ce911\";","import { isMobile, queryAll } from './utils'\nimport Component from './utils/component'\n\nexport default class Info extends Component {\n constructor(art) {\n super(art)\n this.name = 'info'\n\n if (!isMobile) {\n this.init()\n }\n }\n\n init() {\n const {\n proxy,\n constructor,\n template: { $infoPanel, $infoClose, $video },\n } = this.art\n\n proxy($infoClose, 'click', () => {\n this.show = false\n })\n\n let timer = null\n const $types = queryAll('[data-video]', $infoPanel) || []\n this.art.on('destroy', () => clearTimeout(timer))\n\n function loop() {\n for (let index = 0; index < $types.length; index++) {\n const item = $types[index]\n const value = $video[item.dataset.video]\n const textContent = typeof value === 'number' ? value.toFixed(2) : value\n if (item.textContent !== textContent) {\n item.textContent = textContent\n }\n }\n timer = setTimeout(loop, constructor.INFO_LOOP_TIME)\n }\n\n loop()\n }\n}\n","import Component from './utils/component'\n\nexport default class Layer extends Component {\n constructor(art) {\n super(art)\n\n const {\n option,\n template: { $layer },\n } = art\n\n this.name = 'layer'\n this.$parent = $layer\n\n for (let index = 0; index < option.layers.length; index++) {\n this.add(option.layers[index])\n }\n }\n}\n","import { append } from './utils'\nimport Component from './utils/component'\n\nexport default class Loading extends Component {\n constructor(art) {\n super(art)\n this.name = 'loading'\n append(art.template.$loading, art.icons.loading)\n }\n}\n","import { append, setStyle } from './utils'\nimport Component from './utils/component'\n\nexport default class Mask extends Component {\n constructor(art) {\n super(art)\n\n this.name = 'mask'\n const { template, icons, events } = art\n\n const $state = append(template.$state, icons.state)\n const $error = append(template.$state, icons.error)\n\n setStyle($error, 'display', 'none')\n\n art.on('destroy', () => {\n setStyle($state, 'display', 'none')\n setStyle($error, 'display', null)\n })\n\n events.proxy(template.$state, 'click', () => art.play())\n }\n}\n","import { addClass, removeClass } from './utils'\n\nexport default class Notice {\n constructor(art) {\n this.art = art\n this.timer = null\n }\n\n set show(msg) {\n const {\n constructor,\n template: { $player, $noticeInner },\n } = this.art\n\n if (msg) {\n $noticeInner.textContent = msg instanceof Error ? msg.message.trim() : msg\n addClass($player, 'art-notice-show')\n clearTimeout(this.timer)\n this.timer = setTimeout(() => {\n $noticeInner.textContent = ''\n removeClass($player, 'art-notice-show')\n }, constructor.NOTICE_TIME)\n }\n else {\n removeClass($player, 'art-notice-show')\n }\n }\n\n get show() {\n const {\n template: { $player },\n } = this.art\n return $player.classList.contains('art-notice-show')\n }\n}\n","import airplayMix from './airplayMix'\nimport aspectRatioMix from './aspectRatioMix'\nimport attrMix from './attrMix'\nimport autoHeightMix from './autoHeightMix'\nimport autoSizeMix from './autoSizeMix'\nimport cssVarMix from './cssVarMix'\nimport currentTimeMix from './currentTimeMix'\nimport durationMix from './durationMix'\nimport eventInit from './eventInit'\nimport flipMix from './flipMix'\nimport fullscreenMix from './fullscreenMix'\nimport fullscreenWebMix from './fullscreenWebMix'\nimport loadedMix from './loadedMix'\nimport miniMix from './miniMix'\nimport optionInit from './optionInit'\nimport pauseMix from './pauseMix'\nimport pipMix from './pipMix'\nimport playbackRateMix from './playbackRateMix'\nimport playedMix from './playedMix'\nimport playingMix from './playingMix'\nimport playMix from './playMix'\nimport posterMix from './posterMix'\nimport qualityMix from './qualityMix'\nimport rectMix from './rectMix'\nimport screenshotMix from './screenshotMix'\nimport seekMix from './seekMix'\nimport stateMix from './stateMix'\nimport subtitleOffsetMix from './subtitleOffsetMix'\nimport switchMix from './switchMix'\nimport themeMix from './themeMix'\nimport thumbnailsMix from './thumbnailsMix'\nimport toggleMix from './toggleMix'\nimport typeMix from './typeMix'\nimport urlMix from './urlMix'\nimport volumeMix from './volumeMix'\n\nexport default class Player {\n constructor(art) {\n urlMix(art)\n attrMix(art)\n playMix(art)\n pauseMix(art)\n toggleMix(art)\n seekMix(art)\n volumeMix(art)\n currentTimeMix(art)\n durationMix(art)\n switchMix(art)\n playbackRateMix(art)\n aspectRatioMix(art)\n screenshotMix(art)\n fullscreenMix(art)\n fullscreenWebMix(art)\n pipMix(art)\n loadedMix(art)\n playedMix(art)\n playingMix(art)\n autoSizeMix(art)\n rectMix(art)\n flipMix(art)\n miniMix(art)\n posterMix(art)\n autoHeightMix(art)\n cssVarMix(art)\n themeMix(art)\n typeMix(art)\n stateMix(art)\n subtitleOffsetMix(art)\n airplayMix(art)\n qualityMix(art)\n thumbnailsMix(art)\n eventInit(art)\n optionInit(art)\n }\n}\n","import { def } from '../utils'\n\nexport default function airplayMix(art) {\n const {\n i18n,\n notice,\n proxy,\n template: { $video },\n } = art\n\n let available = true\n\n if (window.WebKitPlaybackTargetAvailabilityEvent && $video.webkitShowPlaybackTargetPicker) {\n proxy($video, 'webkitplaybacktargetavailabilitychanged', (event) => {\n switch (event.availability) {\n case 'available':\n available = true\n break\n case 'not-available':\n available = false\n break\n }\n })\n }\n else {\n available = false\n }\n\n def(art, 'airplay', {\n value() {\n if (available) {\n $video.webkitShowPlaybackTargetPicker()\n art.emit('airplay')\n }\n else {\n notice.show = i18n.get('AirPlay Not Available')\n }\n },\n })\n}\n","import { def, setStyle } from '../utils'\n\nexport default function aspectRatioMix(art) {\n const {\n i18n,\n notice,\n template: { $video, $player },\n } = art\n\n def(art, 'aspectRatio', {\n get() {\n return $player.dataset.aspectRatio || 'default'\n },\n set(ratio) {\n if (!ratio)\n ratio = 'default'\n if (ratio === 'default') {\n setStyle($video, 'width', null)\n setStyle($video, 'height', null)\n setStyle($video, 'margin', null)\n delete $player.dataset.aspectRatio\n }\n else {\n const ratioArray = ratio.split(':').map(Number)\n const { clientWidth, clientHeight } = $player\n const playerRatio = clientWidth / clientHeight\n const setupRatio = ratioArray[0] / ratioArray[1]\n\n if (playerRatio > setupRatio) {\n setStyle($video, 'width', `${setupRatio * clientHeight}px`)\n setStyle($video, 'height', '100%')\n setStyle($video, 'margin', '0 auto')\n }\n else {\n setStyle($video, 'width', '100%')\n setStyle($video, 'height', `${clientWidth / setupRatio}px`)\n setStyle($video, 'margin', 'auto 0')\n }\n\n $player.dataset.aspectRatio = ratio\n }\n\n notice.show = `${i18n.get('Aspect Ratio')}: ${ratio === 'default' ? i18n.get('Default') : ratio}`\n art.emit('aspectRatio', ratio)\n },\n })\n}\n","import { def } from '../utils'\n\nexport default function attrMix(art) {\n const {\n template: { $video },\n } = art\n\n def(art, 'attr', {\n value(key, value) {\n if (value === undefined)\n return $video[key]\n $video[key] = value\n },\n })\n}\n","import { def, setStyle } from '../utils'\n\nexport default function autoHeightMix(art) {\n const {\n template: { $container, $video },\n } = art\n\n def(art, 'autoHeight', {\n value() {\n const { clientWidth } = $container\n const { videoHeight, videoWidth } = $video\n const height = videoHeight * (clientWidth / videoWidth)\n setStyle($container, 'height', `${height}px`)\n art.emit('autoHeight', height)\n },\n })\n}\n","import { def, getRect, setStyle } from '../utils'\n\nexport default function autoSizeMix(art) {\n const { $container, $player, $video } = art.template\n\n def(art, 'autoSize', {\n value() {\n const { videoWidth, videoHeight } = $video\n const { width, height } = getRect($container)\n const videoRatio = videoWidth / videoHeight\n const containerRatio = width / height\n if (containerRatio > videoRatio) {\n const percentage = ((height * videoRatio) / width) * 100\n setStyle($player, 'width', `${percentage}%`)\n setStyle($player, 'height', '100%')\n }\n else {\n const percentage = (width / videoRatio / height) * 100\n setStyle($player, 'width', '100%')\n setStyle($player, 'height', `${percentage}%`)\n }\n art.emit('autoSize', {\n width: art.width,\n height: art.height,\n })\n },\n })\n}\n","import { def } from '../utils'\n\nexport default function cssVarMix(art) {\n const { $player } = art.template\n\n def(art, 'cssVar', {\n value(key, value) {\n if (value) {\n return $player.style.setProperty(key, value)\n }\n else {\n return getComputedStyle($player).getPropertyValue(key)\n }\n },\n })\n}\n","import { clamp, def } from '../utils'\n\nexport default function currentTimeMix(art) {\n const { $video } = art.template\n\n def(art, 'currentTime', {\n get: () => $video.currentTime || 0,\n set: (time) => {\n time = Number.parseFloat(time)\n if (Number.isNaN(time))\n return\n $video.currentTime = clamp(time, 0, art.duration)\n },\n })\n}\n","import { def } from '../utils'\n\nexport default function durationMix(art) {\n def(art, 'duration', {\n get: () => {\n const { duration } = art.template.$video\n if (duration === Infinity)\n return 0\n return duration || 0\n },\n })\n}\n","import config from '../config'\nimport { addClass, isMobile, setStyle, sleep } from '../utils'\n\nexport default function eventInit(art) {\n const {\n i18n,\n notice,\n option,\n constructor,\n proxy,\n template: { $player, $video, $poster },\n } = art\n\n let reconnectTime = 0\n\n for (let index = 0; index < config.events.length; index++) {\n proxy($video, config.events[index], (event) => {\n art.emit(`video:${event.type}`, event)\n })\n }\n\n // art.on('video:abort', () => {\n\n // });\n\n art.on('video:canplay', () => {\n reconnectTime = 0\n art.loading.show = false\n })\n\n art.once('video:canplay', () => {\n art.loading.show = false\n art.controls.show = true\n art.mask.show = true\n art.isReady = true\n art.emit('ready')\n })\n\n // art.on('video:canplaythrough', () => {\n\n // });\n\n // art.on('video:durationchange', () => {\n\n // });\n\n // art.on('video:emptied', () => {\n\n // });\n\n art.on('video:ended', () => {\n if (option.loop) {\n art.seek = 0\n art.play()\n art.controls.show = false\n art.mask.show = false\n }\n else {\n art.controls.show = true\n art.mask.show = true\n }\n })\n\n art.on('video:error', async (error) => {\n if (reconnectTime < constructor.RECONNECT_TIME_MAX) {\n await sleep(constructor.RECONNECT_SLEEP_TIME)\n reconnectTime += 1\n art.url = option.url\n notice.show = `${i18n.get('Reconnect')}: ${reconnectTime}`\n art.emit('error', error, reconnectTime)\n }\n else {\n art.mask.show = true\n art.loading.show = false\n art.controls.show = true\n addClass($player, 'art-error')\n await sleep(constructor.RECONNECT_SLEEP_TIME)\n notice.show = i18n.get('Video Load Failed')\n }\n })\n\n // art.on('video:loadeddata', () => {\n\n // });\n\n art.on('video:loadedmetadata', () => {\n art.emit('resize')\n if (isMobile) {\n art.loading.show = false\n art.controls.show = true\n art.mask.show = true\n }\n })\n\n art.on('video:loadstart', () => {\n art.loading.show = true\n art.mask.show = false\n art.controls.show = true\n })\n\n art.on('video:pause', () => {\n art.controls.show = true\n art.mask.show = true\n })\n\n art.on('video:play', () => {\n art.mask.show = false\n setStyle($poster, 'display', 'none')\n })\n\n art.on('video:playing', () => {\n art.mask.show = false\n })\n\n art.on('video:progress', () => {\n if (art.playing) {\n art.loading.show = false\n }\n })\n\n // art.on('video:ratechange', () => {\n\n // });\n\n art.on('video:seeked', () => {\n art.loading.show = false\n art.mask.show = true\n })\n\n art.on('video:seeking', () => {\n art.loading.show = true\n art.mask.show = false\n })\n\n // art.on('video:stalled', () => {\n\n // });\n\n // art.on('video:suspend', () => {\n\n // });\n\n art.on('video:timeupdate', () => {\n art.mask.show = false\n })\n\n // art.on('video:volumechange', () => {\n\n // });\n\n art.on('video:waiting', () => {\n art.loading.show = true\n art.mask.show = false\n })\n}\n","import { capitalize, def } from '../utils'\n\nexport default function flipMix(art) {\n const {\n template: { $player },\n i18n,\n notice,\n } = art\n\n def(art, 'flip', {\n get() {\n return $player.dataset.flip || 'normal'\n },\n set(flip) {\n if (!flip)\n flip = 'normal'\n if (flip === 'normal') {\n delete $player.dataset.flip\n }\n else {\n $player.dataset.flip = flip\n }\n\n notice.show = `${i18n.get('Video Flip')}: ${i18n.get(capitalize(flip))}`\n art.emit('flip', flip)\n },\n })\n}\n","import screenfull from '../libs/screenfull'\nimport { addClass, def, get, removeClass } from '../utils'\n\nexport default function fullscreenMix(art) {\n const {\n i18n,\n notice,\n template: { $video, $player },\n } = art\n\n const nativeScreenfull = (art) => {\n screenfull.on('change', () => {\n art.emit('fullscreen', screenfull.isFullscreen)\n\n if (screenfull.isFullscreen) {\n art.state = 'fullscreen'\n addClass($player, 'art-fullscreen')\n }\n else {\n removeClass($player, 'art-fullscreen')\n }\n\n art.emit('resize')\n })\n\n screenfull.on('error', (event) => {\n art.emit('fullscreenError', event)\n })\n\n def(art, 'fullscreen', {\n get() {\n return screenfull.isFullscreen\n },\n async set(value) {\n if (value) {\n await screenfull.request($player)\n }\n else {\n await screenfull.exit()\n }\n },\n })\n }\n\n const webkitScreenfull = (art) => {\n art.proxy(document, 'webkitfullscreenchange', () => {\n art.emit('fullscreen', art.fullscreen)\n art.emit('resize')\n })\n\n def(art, 'fullscreen', {\n get() {\n return document.fullscreenElement === $video\n },\n set(value) {\n if (value) {\n art.state = 'fullscreen'\n $video.webkitEnterFullscreen()\n }\n else {\n $video.webkitExitFullscreen()\n }\n },\n })\n }\n\n art.once('video:loadedmetadata', () => {\n if (screenfull.isEnabled) {\n nativeScreenfull(art)\n }\n else if ($video.webkitSupportsFullscreen) {\n webkitScreenfull(art)\n }\n else {\n def(art, 'fullscreen', {\n get() {\n return false\n },\n set() {\n notice.show = i18n.get('Fullscreen Not Supported')\n },\n })\n }\n\n // Asynchronous setting\n def(art, 'fullscreen', get(art, 'fullscreen'))\n })\n}\n","const methodMap = [\n [\n 'requestFullscreen',\n 'exitFullscreen',\n 'fullscreenElement',\n 'fullscreenEnabled',\n 'fullscreenchange',\n 'fullscreenerror',\n ],\n // New WebKit\n [\n 'webkitRequestFullscreen',\n 'webkitExitFullscreen',\n 'webkitFullscreenElement',\n 'webkitFullscreenEnabled',\n 'webkitfullscreenchange',\n 'webkitfullscreenerror',\n ],\n // Old WebKit\n [\n 'webkitRequestFullScreen',\n 'webkitCancelFullScreen',\n 'webkitCurrentFullScreenElement',\n 'webkitCancelFullScreen',\n 'webkitfullscreenchange',\n 'webkitfullscreenerror',\n ],\n [\n 'mozRequestFullScreen',\n 'mozCancelFullScreen',\n 'mozFullScreenElement',\n 'mozFullScreenEnabled',\n 'mozfullscreenchange',\n 'mozfullscreenerror',\n ],\n [\n 'msRequestFullscreen',\n 'msExitFullscreen',\n 'msFullscreenElement',\n 'msFullscreenEnabled',\n 'MSFullscreenChange',\n 'MSFullscreenError',\n ],\n]\n\nconst nativeAPI = (() => {\n if (typeof document === 'undefined') {\n return false\n }\n\n const unprefixedMethods = methodMap[0]\n const returnValue = {}\n\n for (const methodList of methodMap) {\n const exitFullscreenMethod = methodList[1]\n if (exitFullscreenMethod in document) {\n for (const [index, method] of methodList.entries()) {\n returnValue[unprefixedMethods[index]] = method\n }\n\n return returnValue\n }\n }\n\n return false\n})()\n\nconst eventNameMap = {\n change: nativeAPI.fullscreenchange,\n error: nativeAPI.fullscreenerror,\n}\n\nconst screenfull = {\n request(element = document.documentElement, options) {\n return new Promise((resolve, reject) => {\n const onFullScreenEntered = () => {\n screenfull.off('change', onFullScreenEntered)\n resolve()\n }\n\n screenfull.on('change', onFullScreenEntered)\n\n const returnPromise = element[nativeAPI.requestFullscreen](options)\n\n if (returnPromise instanceof Promise) {\n returnPromise.then(onFullScreenEntered).catch(reject)\n }\n })\n },\n exit() {\n return new Promise((resolve, reject) => {\n if (!screenfull.isFullscreen) {\n resolve()\n return\n }\n\n const onFullScreenExit = () => {\n screenfull.off('change', onFullScreenExit)\n resolve()\n }\n\n screenfull.on('change', onFullScreenExit)\n\n const returnPromise = document[nativeAPI.exitFullscreen]()\n\n if (returnPromise instanceof Promise) {\n returnPromise.then(onFullScreenExit).catch(reject)\n }\n })\n },\n toggle(element, options) {\n return screenfull.isFullscreen ? screenfull.exit() : screenfull.request(element, options)\n },\n onchange(callback) {\n screenfull.on('change', callback)\n },\n onerror(callback) {\n screenfull.on('error', callback)\n },\n on(event, callback) {\n const eventName = eventNameMap[event]\n if (eventName) {\n document.addEventListener(eventName, callback, false)\n }\n },\n off(event, callback) {\n const eventName = eventNameMap[event]\n if (eventName) {\n document.removeEventListener(eventName, callback, false)\n }\n },\n raw: nativeAPI,\n}\n\nObject.defineProperties(screenfull, {\n isFullscreen: {\n get: () => Boolean(document[nativeAPI.fullscreenElement]),\n },\n element: {\n enumerable: true,\n get: () => document[nativeAPI.fullscreenElement],\n },\n isEnabled: {\n enumerable: true,\n get: () => Boolean(document[nativeAPI.fullscreenEnabled]),\n },\n})\n\nif (!nativeAPI) {\n screenfull.isEnabled = false\n}\n\nexport default screenfull\n","import { addClass, append, def, hasClass, removeClass, setStyle } from '../utils'\n\nexport default function fullscreenWebMix(art) {\n const {\n constructor,\n template: { $container, $player },\n } = art\n\n let cssText = ''\n def(art, 'fullscreenWeb', {\n get() {\n return hasClass($player, 'art-fullscreen-web')\n },\n set(value) {\n if (value) {\n cssText = $player.style.cssText\n if (constructor.FULLSCREEN_WEB_IN_BODY) {\n append(document.body, $player)\n }\n art.state = 'fullscreenWeb'\n setStyle($player, 'width', '100%')\n setStyle($player, 'height', '100%')\n addClass($player, 'art-fullscreen-web')\n art.emit('fullscreenWeb', true)\n }\n else {\n if (constructor.FULLSCREEN_WEB_IN_BODY) {\n append($container, $player)\n }\n if (cssText) {\n $player.style.cssText = cssText\n cssText = ''\n }\n removeClass($player, 'art-fullscreen-web')\n art.emit('fullscreenWeb', false)\n }\n\n art.emit('resize')\n },\n })\n}\n","import { def } from '../utils'\n\nexport default function loadedMix(art) {\n const { $video } = art.template\n\n def(art, 'loaded', {\n get: () => art.loadedTime / $video.duration,\n })\n\n def(art, 'loadedTime', {\n get: () => {\n return $video.buffered.length ? $video.buffered.end($video.buffered.length - 1) : 0\n },\n })\n}\n","import { addClass, append, createElement, def, getRect, hasClass, isInViewport, removeClass, setStyle } from '../utils'\n\nexport default function miniMix(art) {\n const {\n icons,\n proxy,\n storage,\n template: { $player, $video },\n } = art\n\n let isDragging = false\n let lastPageX = 0\n let lastPageY = 0\n\n function hideMini() {\n const { $mini } = art.template\n if ($mini) {\n removeClass($player, 'art-mini')\n setStyle($mini, 'display', 'none')\n $player.prepend($video)\n art.emit('mini', false)\n }\n }\n\n function initState($play, $pause) {\n if (art.playing) {\n setStyle($play, 'display', `none`)\n setStyle($pause, 'display', `flex`)\n }\n else {\n setStyle($play, 'display', `flex`)\n setStyle($pause, 'display', `none`)\n }\n }\n\n function createMini() {\n const { $mini } = art.template\n if ($mini) {\n append($mini, $video)\n return setStyle($mini, 'display', 'flex')\n }\n else {\n const $mini = createElement('div')\n addClass($mini, 'art-mini-popup')\n append(document.body, $mini)\n art.template.$mini = $mini\n append($mini, $video)\n\n const $close = append($mini, `
`)\n append($close, icons.close)\n proxy($close, 'click', hideMini)\n\n const $state = append($mini, `
`)\n const $play = append($state, icons.play)\n const $pause = append($state, icons.pause)\n proxy($play, 'click', () => art.play())\n proxy($pause, 'click', () => art.pause())\n initState($play, $pause)\n art.on('video:playing', () => initState($play, $pause))\n art.on('video:pause', () => initState($play, $pause))\n art.on('video:timeupdate', () => initState($play, $pause))\n\n proxy($mini, 'mousedown', (event) => {\n isDragging = event.button === 0\n lastPageX = event.pageX\n lastPageY = event.pageY\n })\n\n art.on('document:mousemove', (event) => {\n if (isDragging) {\n addClass($mini, 'art-mini-dragging')\n const x = event.pageX - lastPageX\n const y = event.pageY - lastPageY\n setStyle($mini, 'transform', `translate(${x}px, ${y}px)`)\n }\n })\n\n art.on('document:mouseup', () => {\n if (isDragging) {\n isDragging = false\n removeClass($mini, 'art-mini-dragging')\n const rect = getRect($mini)\n storage.set('left', rect.left)\n storage.set('top', rect.top)\n setStyle($mini, 'left', `${rect.left}px`)\n setStyle($mini, 'top', `${rect.top}px`)\n setStyle($mini, 'transform', null)\n }\n })\n\n return $mini\n }\n }\n\n function initMini() {\n const { $mini } = art.template\n const rect = getRect($mini)\n const top = window.innerHeight - rect.height - 50\n const left = window.innerWidth - rect.width - 50\n storage.set('top', top)\n storage.set('left', left)\n setStyle($mini, 'top', `${top}px`)\n setStyle($mini, 'left', `${left}px`)\n }\n\n def(art, 'mini', {\n get() {\n return hasClass($player, 'art-mini')\n },\n set(value) {\n if (value) {\n art.state = 'mini'\n addClass($player, 'art-mini')\n const $mini = createMini()\n const top = storage.get('top')\n const left = storage.get('left')\n if (typeof top === 'number' && typeof left === 'number') {\n setStyle($mini, 'top', `${top}px`)\n setStyle($mini, 'left', `${left}px`)\n if (!isInViewport($mini)) {\n initMini()\n }\n }\n else {\n initMini()\n }\n art.emit('mini', true)\n }\n else {\n hideMini()\n }\n },\n })\n}\n","import { clamp, setStyle } from '../utils'\n\nexport default function optionInit(art) {\n const {\n option,\n storage,\n template: { $video, $poster },\n } = art\n\n for (const key in option.moreVideoAttr) {\n art.attr(key, option.moreVideoAttr[key])\n }\n\n if (option.muted) {\n art.muted = option.muted\n }\n\n if (option.volume) {\n $video.volume = clamp(option.volume, 0, 1)\n }\n\n const volumeStorage = storage.get('volume')\n if (typeof volumeStorage === 'number') {\n $video.volume = clamp(volumeStorage, 0, 1)\n }\n\n if (option.poster) {\n setStyle($poster, 'backgroundImage', `url(${option.poster})`)\n }\n\n if (option.autoplay) {\n $video.autoplay = option.autoplay\n }\n\n if (option.playsInline) {\n $video.playsInline = true\n $video['webkit-playsinline'] = true\n }\n\n if (option.theme) {\n option.cssVar['--art-theme'] = option.theme\n }\n\n for (const key in option.cssVar) {\n art.cssVar(key, option.cssVar[key])\n }\n\n art.url = option.url\n}\n","import { def } from '../utils'\n\nexport default function pauseMix(art) {\n const {\n template: { $video },\n i18n,\n notice,\n } = art\n\n def(art, 'pause', {\n value() {\n const result = $video.pause()\n notice.show = i18n.get('Pause')\n art.emit('pause')\n return result\n },\n })\n}\n","import { def } from '../utils'\n\nfunction nativePip(art) {\n const {\n template: { $video },\n proxy,\n notice,\n } = art\n\n $video.disablePictureInPicture = false\n\n def(art, 'pip', {\n get() {\n return document.pictureInPictureElement\n },\n set(value) {\n if (value) {\n art.state = 'pip'\n $video.requestPictureInPicture().catch((err) => {\n notice.show = err\n throw err\n })\n }\n else {\n document.exitPictureInPicture().catch((err) => {\n notice.show = err\n throw err\n })\n }\n },\n })\n\n proxy($video, 'enterpictureinpicture', () => {\n art.emit('pip', true)\n })\n\n proxy($video, 'leavepictureinpicture', () => {\n art.emit('pip', false)\n })\n}\n\nfunction webkitPip(art) {\n const { $video } = art.template\n\n $video.webkitSetPresentationMode('inline')\n\n def(art, 'pip', {\n get() {\n return $video.webkitPresentationMode === 'picture-in-picture'\n },\n set(value) {\n if (value) {\n art.state = 'pip'\n $video.webkitSetPresentationMode('picture-in-picture')\n art.emit('pip', true)\n }\n else {\n $video.webkitSetPresentationMode('inline')\n art.emit('pip', false)\n }\n },\n })\n}\n\nexport default function pipMix(art) {\n const {\n i18n,\n notice,\n template: { $video },\n } = art\n if (document.pictureInPictureEnabled) {\n nativePip(art)\n }\n else if ($video.webkitSupportsPresentationMode) {\n webkitPip(art)\n }\n else {\n def(art, 'pip', {\n get() {\n return false\n },\n set() {\n notice.show = i18n.get('PIP Not Supported')\n },\n })\n }\n}\n","import { def } from '../utils'\n\nexport default function playbackRateMix(art) {\n const {\n template: { $video },\n i18n,\n notice,\n } = art\n\n def(art, 'playbackRate', {\n get() {\n return $video.playbackRate\n },\n set(rate) {\n if (rate) {\n if (rate === $video.playbackRate)\n return\n $video.playbackRate = rate\n notice.show = `${i18n.get('Rate')}: ${rate === 1.0 ? i18n.get('Normal') : `${rate}x`}`\n }\n else {\n art.playbackRate = 1\n }\n },\n })\n}\n","import { def } from '../utils'\n\nexport default function playedMix(art) {\n def(art, 'played', {\n get: () => art.currentTime / art.duration,\n })\n}\n","import { def } from '../utils'\n\nexport default function playingMix(art) {\n const { $video } = art.template\n def(art, 'playing', {\n get: () => {\n if (typeof $video.playing === 'boolean')\n return $video.playing\n return !!($video.currentTime > 0 && !$video.paused && !$video.ended && $video.readyState > 2)\n },\n })\n}\n","import { def } from '../utils'\n\nexport default function playMix(art) {\n const {\n i18n,\n notice,\n option,\n constructor: { instances },\n template: { $video },\n } = art\n\n def(art, 'play', {\n async value() {\n const result = await $video.play()\n notice.show = i18n.get('Play')\n art.emit('play')\n\n if (option.mutex) {\n for (let index = 0; index < instances.length; index++) {\n const instance = instances[index]\n if (instance !== art) {\n instance.pause()\n }\n }\n }\n\n return result\n },\n })\n}\n","import { def, setStyle } from '../utils'\n\nexport default function posterMix(art) {\n const {\n template: { $poster },\n } = art\n\n def(art, 'poster', {\n get: () => {\n try {\n return $poster.style.backgroundImage.match(/\"(.*)\"/)[1]\n }\n catch {\n return ''\n }\n },\n set(url) {\n setStyle($poster, 'backgroundImage', `url(${url})`)\n },\n })\n}\n","import { def } from '../utils'\n\nexport default function qualityMix(art) {\n def(art, 'quality', {\n set(quality) {\n const { controls, notice, i18n } = art\n const qualityDefault = quality.find(item => item.default) || quality[0]\n controls.update({\n name: 'quality',\n position: 'right',\n index: 10,\n style: {\n marginRight: '10px',\n },\n html: qualityDefault?.html || '',\n selector: quality,\n async onSelect(item) {\n await art.switchQuality(item.url)\n notice.show = `${i18n.get('Switch Video')}: ${item.html}`\n return item.html\n },\n })\n },\n })\n}\n","import { def, getRect } from '../utils'\n\nexport default function rectMix(art) {\n def(art, 'rect', {\n get: () => {\n return getRect(art.template.$player)\n },\n })\n\n const keys = ['bottom', 'height', 'left', 'right', 'top', 'width']\n for (let index = 0; index < keys.length; index++) {\n const key = keys[index]\n def(art, key, {\n get: () => {\n return art.rect[key]\n },\n })\n }\n\n def(art, 'x', {\n get: () => {\n return art.left + window.pageXOffset\n },\n })\n\n def(art, 'y', {\n get: () => {\n return art.top + window.pageYOffset\n },\n })\n}\n","import { createElement, def, download, secondToTime } from '../utils'\n\nexport default function screenshotMix(art) {\n const {\n notice,\n template: { $video },\n } = art\n\n const $canvas = createElement('canvas')\n\n def(art, 'getDataURL', {\n value: () =>\n new Promise((resolve, reject) => {\n try {\n $canvas.width = $video.videoWidth\n $canvas.height = $video.videoHeight\n $canvas.getContext('2d').drawImage($video, 0, 0)\n resolve($canvas.toDataURL('image/png'))\n }\n catch (err) {\n notice.show = err\n reject(err)\n }\n }),\n })\n\n def(art, 'getBlobUrl', {\n value: () =>\n new Promise((resolve, reject) => {\n try {\n $canvas.width = $video.videoWidth\n $canvas.height = $video.videoHeight\n $canvas.getContext('2d').drawImage($video, 0, 0)\n $canvas.toBlob((blob) => {\n resolve(URL.createObjectURL(blob))\n })\n }\n catch (err) {\n notice.show = err\n reject(err)\n }\n }),\n })\n\n def(art, 'screenshot', {\n value: async (name) => {\n const dataUri = await art.getDataURL()\n const fileName = name || `artplayer_${secondToTime($video.currentTime)}`\n download(dataUri, `${fileName}.png`)\n art.emit('screenshot', dataUri)\n return dataUri\n },\n })\n}\n","import { def, secondToTime } from '../utils'\n\nexport default function seekMix(art) {\n const { notice } = art\n\n def(art, 'seek', {\n set(time) {\n art.currentTime = time\n if (art.duration) {\n notice.show = `${secondToTime(art.currentTime)} / ${secondToTime(art.duration)}`\n }\n art.emit('seek', art.currentTime)\n },\n })\n\n def(art, 'forward', {\n set(time) {\n art.seek = art.currentTime + time\n },\n })\n\n def(art, 'backward', {\n set(time) {\n art.seek = art.currentTime - time\n },\n })\n}\n","import { def } from '../utils'\n\nexport default function stateMix(art) {\n const states = ['mini', 'pip', 'fullscreen', 'fullscreenWeb']\n def(art, 'state', {\n get: () => states.find(name => art[name]) || 'standard',\n set(name) {\n for (let index = 0; index < states.length; index++) {\n const prop = states[index]\n if (prop !== name && art[prop]) {\n art[prop] = false\n }\n }\n },\n })\n}\n","import { clamp, def } from '../utils'\n\nexport default function subtitleOffsetMix(art) {\n const { notice, i18n, template } = art\n\n def(art, 'subtitleOffset', {\n get() {\n return template.$track?.offset || 0\n },\n set(value) {\n const { cues } = art.subtitle\n if (!template.$track || cues.length === 0)\n return\n const offset = clamp(value, -10, 10)\n template.$track.offset = offset\n for (let index = 0; index < cues.length; index++) {\n const cue = cues[index]\n cue.originalStartTime = cue.originalStartTime ?? cue.startTime\n cue.originalEndTime = cue.originalEndTime ?? cue.endTime\n cue.startTime = clamp(cue.originalStartTime + offset, 0, art.duration)\n cue.endTime = clamp(cue.originalEndTime + offset, 0, art.duration)\n }\n art.subtitle.update()\n notice.show = `${i18n.get('Subtitle Offset')}: ${value}s`\n art.emit('subtitleOffset', value)\n },\n })\n}\n","import { def } from '../utils'\n\nexport default function switchMix(art) {\n function switchUrl(url, currentTime) {\n return new Promise((resolve, reject) => {\n if (url === art.url)\n return\n const { playing, aspectRatio, playbackRate } = art\n\n art.pause()\n art.url = url\n art.notice.show = ''\n\n art.once('video:error', reject)\n\n art.once('video:loadedmetadata', () => {\n art.currentTime = currentTime\n })\n\n art.once('video:canplay', async () => {\n art.playbackRate = playbackRate\n art.aspectRatio = aspectRatio\n\n if (playing) {\n await art.play()\n }\n\n art.notice.show = ''\n\n resolve()\n })\n })\n }\n\n def(art, 'switchQuality', {\n value: (url) => {\n return switchUrl(url, art.currentTime)\n },\n })\n\n def(art, 'switchUrl', {\n value: (url) => {\n return switchUrl(url, 0)\n },\n })\n\n def(art, 'switch', {\n set: art.switchUrl,\n })\n}\n","import { def } from '../utils'\n\nexport default function themeMix(art) {\n def(art, 'theme', {\n get() {\n return art.cssVar('--art-theme')\n },\n set(theme) {\n art.cssVar('--art-theme', theme)\n },\n })\n}\n","import { def, isMobile, loadImg, setStyle } from '../utils'\n\nexport default function thumbnailsMix(art) {\n const {\n events,\n option,\n template: { $progress, $video },\n } = art\n\n let timer = null\n let image = null\n let loading = false\n let isLoad = false\n let isHover = false\n\n function reset() {\n clearTimeout(timer)\n timer = null\n image = null\n loading = false\n isLoad = false\n }\n\n function showThumbnails(posWidth) {\n const $thumbnails = art.controls?.thumbnails\n if (!$thumbnails)\n return\n\n const { number, column, width, height, scale } = option.thumbnails\n const width2 = width * scale || image.naturalWidth / column\n const height2 = height * scale || width2 / ($video.videoWidth / $video.videoHeight)\n const perWidth = $progress.clientWidth / number\n const perIndex = Math.floor(posWidth / perWidth)\n const yIndex = Math.ceil(perIndex / column) - 1\n const xIndex = perIndex % column || column - 1\n setStyle($thumbnails, 'backgroundImage', `url(${image.src})`)\n setStyle($thumbnails, 'height', `${height2}px`)\n setStyle($thumbnails, 'width', `${width2}px`)\n setStyle($thumbnails, 'backgroundPosition', `-${xIndex * width2}px -${yIndex * height2}px`)\n if (posWidth <= width2 / 2) {\n setStyle($thumbnails, 'left', 0)\n }\n else if (posWidth > $progress.clientWidth - width2 / 2) {\n setStyle($thumbnails, 'left', `${$progress.clientWidth - width2}px`)\n }\n else {\n setStyle($thumbnails, 'left', `${posWidth - width2 / 2}px`)\n }\n }\n\n events.hover(\n $progress,\n () => {\n isHover = true\n },\n () => {\n isHover = false\n },\n )\n\n art.on('setBar', async (type, percentage, event) => {\n const $thumbnails = art.controls?.thumbnails\n const { url, scale } = option.thumbnails\n if (!$thumbnails || !url)\n return\n\n const isMobileDragging = type === 'played' && event && isMobile\n\n if (type === 'hover' || isMobileDragging) {\n if (!loading) {\n loading = true\n image = await loadImg(url, scale)\n isLoad = true\n }\n\n if (!isLoad || !isHover)\n return\n\n const width = $progress.clientWidth * percentage\n setStyle($thumbnails, 'display', 'flex')\n\n if (width > 0 && width < $progress.clientWidth) {\n showThumbnails(width)\n }\n else {\n if (!isMobile) {\n setStyle($thumbnails, 'display', 'none')\n }\n }\n\n if (isMobileDragging) {\n clearTimeout(timer)\n timer = setTimeout(() => {\n setStyle($thumbnails, 'display', 'none')\n }, 500)\n }\n }\n })\n\n def(art, 'thumbnails', {\n get() {\n return art.option.thumbnails\n },\n set(thumbnails) {\n if (thumbnails.url && !art.option.isLive) {\n art.option.thumbnails = thumbnails\n reset()\n }\n },\n })\n}\n","import { def } from '../utils'\n\nexport default function toggleMix(art) {\n def(art, 'toggle', {\n value() {\n if (art.playing) {\n return art.pause()\n }\n else {\n return art.play()\n }\n },\n })\n}\n","import { def } from '../utils'\n\nexport default function typeMix(art) {\n def(art, 'type', {\n get() {\n return art.option.type\n },\n set(type) {\n art.option.type = type\n },\n })\n}\n","import { def, getExt, sleep } from '../utils'\n\nexport default function urlMix(art) {\n const {\n option,\n template: { $video },\n } = art\n\n def(art, 'url', {\n get() {\n return $video.src\n },\n async set(newUrl) {\n if (newUrl) {\n const oldUrl = art.url\n const typeName = option.type || getExt(newUrl)\n const typeCallback = option.customType[typeName]\n\n if (typeName && typeCallback) {\n await sleep()\n art.loading.show = true\n typeCallback.call(art, $video, newUrl, art)\n }\n else {\n URL.revokeObjectURL(oldUrl)\n $video.src = newUrl\n }\n\n if (oldUrl !== art.url) {\n art.option.url = newUrl\n if (art.isReady && oldUrl) {\n art.once('video:canplay', () => {\n art.emit('restart', newUrl)\n })\n }\n }\n }\n else {\n await sleep()\n art.loading.show = true\n }\n },\n })\n}\n","import { clamp, def } from '../utils'\n\nexport default function volumeMix(art) {\n const {\n template: { $video },\n i18n,\n notice,\n storage,\n } = art\n\n def(art, 'volume', {\n get: () => $video.volume || 0,\n set: (percentage) => {\n $video.volume = clamp(percentage, 0, 1)\n notice.show = `${i18n.get('Volume')}: ${Number.parseInt($video.volume * 100, 10)}`\n if ($video.volume !== 0) {\n storage.set('volume', $video.volume)\n }\n },\n })\n\n def(art, 'muted', {\n get: () => $video.muted,\n set: (muted) => {\n $video.muted = muted\n art.emit('muted', muted)\n },\n })\n}\n","import { def, errorHandle, has, isMobile } from '../utils'\nimport autoOrientation from './autoOrientation'\nimport autoPlayback from './autoPlayback'\nimport fastForward from './fastForward'\nimport lock from './lock'\nimport miniProgressBar from './miniProgressBar'\n\nexport default class Plugins {\n constructor(art) {\n this.art = art\n this.id = 0\n\n const { option } = art\n\n if (option.miniProgressBar && !option.isLive) {\n this.add(miniProgressBar)\n }\n\n if (option.lock && isMobile) {\n this.add(lock)\n }\n\n if (option.autoPlayback && !option.isLive) {\n this.add(autoPlayback)\n }\n\n if (option.autoOrientation && isMobile) {\n this.add(autoOrientation)\n }\n\n if (option.fastForward && isMobile && !option.isLive) {\n this.add(fastForward)\n }\n\n for (let index = 0; index < option.plugins.length; index++) {\n this.add(option.plugins[index])\n }\n }\n\n add(plugin) {\n this.id += 1\n const result = plugin.call(this.art, this.art)\n if (result instanceof Promise) {\n return result.then(res => this.next(plugin, res))\n }\n else {\n return this.next(plugin, result)\n }\n }\n\n next(plugin, result) {\n const pluginName = (result && result.name) || plugin.name || `plugin${this.id}`\n errorHandle(!has(this, pluginName), `Cannot add a plugin that already has the same name: ${pluginName}`)\n def(this, pluginName, {\n value: result,\n })\n return this\n }\n}\n","import { addClass, hasClass, removeClass, setStyle } from '../utils'\n\nexport default function autoOrientation(art) {\n const {\n constructor,\n template: { $player, $video },\n } = art\n\n art.on('fullscreenWeb', (state) => {\n if (state) {\n const { videoWidth, videoHeight } = $video\n const { clientWidth: viewWidth, clientHeight: viewHeight } = document.documentElement\n if (\n (videoWidth > videoHeight && viewWidth < viewHeight)\n || (videoWidth < videoHeight && viewWidth > viewHeight)\n ) {\n // There is a conflict with the fullscreen event, and it is changed to asynchronous execution\n setTimeout(() => {\n setStyle($player, 'width', `${viewHeight}px`)\n setStyle($player, 'height', `${viewWidth}px`)\n setStyle($player, 'transform-origin', '0 0')\n setStyle($player, 'transform', `rotate(90deg) translate(0, -${viewWidth}px)`)\n addClass($player, 'art-auto-orientation')\n art.isRotate = true\n art.emit('resize')\n }, constructor.AUTO_ORIENTATION_TIME)\n }\n }\n else {\n if (hasClass($player, 'art-auto-orientation')) {\n removeClass($player, 'art-auto-orientation')\n art.isRotate = false\n art.emit('resize')\n }\n }\n })\n\n art.on('fullscreen', async (state) => {\n if (!screen?.orientation?.lock)\n return\n\n const lastOrientation = screen.orientation.type\n if (state) {\n const { videoWidth, videoHeight } = $video\n const { clientWidth: viewWidth, clientHeight: viewHeight } = document.documentElement\n if (\n (videoWidth > videoHeight && viewWidth < viewHeight)\n || (videoWidth < videoHeight && viewWidth > viewHeight)\n ) {\n const oppositeOrientation = lastOrientation.startsWith('portrait') ? 'landscape' : 'portrait'\n await screen.orientation.lock(oppositeOrientation)\n addClass($player, 'art-auto-orientation-fullscreen')\n }\n }\n else {\n if (hasClass($player, 'art-auto-orientation-fullscreen')) {\n await screen.orientation.lock(lastOrientation)\n removeClass($player, 'art-auto-orientation-fullscreen')\n }\n }\n })\n\n return {\n name: 'autoOrientation',\n get state() {\n return hasClass($player, 'art-auto-orientation')\n },\n }\n}\n","import { append, query, secondToTime, setStyle } from '../utils'\n\nexport default function autoPlayback(art) {\n const {\n i18n,\n icons,\n storage,\n constructor,\n proxy,\n template: { $poster },\n } = art\n\n const $autoPlayback = art.layers.add({\n name: 'auto-playback',\n html: `\n
\n
\n
\n `,\n })\n\n const $last = query('.art-auto-playback-last', $autoPlayback)\n const $jump = query('.art-auto-playback-jump', $autoPlayback)\n const $close = query('.art-auto-playback-close', $autoPlayback)\n append($close, icons.close)\n\n let timer = null\n\n art.on('video:timeupdate', () => {\n if (art.playing) {\n const times = storage.get('times') || {}\n const keys = Object.keys(times)\n if (keys.length > constructor.AUTO_PLAYBACK_MAX) {\n delete times[keys[0]]\n }\n times[art.option.id || art.option.url] = art.currentTime\n storage.set('times', times)\n }\n })\n\n function init() {\n const times = storage.get('times') || {}\n const currentTime = times[art.option.id || art.option.url]\n\n clearTimeout(timer)\n setStyle($autoPlayback, 'display', 'none')\n\n if (currentTime && currentTime >= constructor.AUTO_PLAYBACK_MIN) {\n setStyle($autoPlayback, 'display', 'flex')\n\n $last.textContent = `${i18n.get('Last Seen')} ${secondToTime(currentTime)}`\n $jump.textContent = i18n.get('Jump Play')\n\n proxy($close, 'click', () => {\n setStyle($autoPlayback, 'display', 'none')\n })\n\n proxy($jump, 'click', () => {\n art.seek = currentTime\n art.play()\n setStyle($poster, 'display', 'none')\n setStyle($autoPlayback, 'display', 'none')\n })\n\n art.once('video:timeupdate', () => {\n timer = setTimeout(() => {\n setStyle($autoPlayback, 'display', 'none')\n }, constructor.AUTO_PLAYBACK_TIMEOUT)\n })\n }\n }\n\n art.on('ready', init)\n art.on('restart', init)\n\n return {\n name: 'auto-playback',\n get times() {\n return storage.get('times') || {}\n },\n clear() {\n return storage.del('times')\n },\n delete(id) {\n const times = storage.get('times') || {}\n delete times[id]\n storage.set('times', times)\n return times\n },\n }\n}\n","import { addClass, hasClass, removeClass } from '../utils'\n\nexport default function fastForward(art) {\n const {\n constructor,\n proxy,\n template: { $player, $video },\n } = art\n\n let timer = null\n let isPress = false\n let lastPlaybackRate = 1\n\n const onStart = (event) => {\n if (event.touches.length === 1 && art.playing && !art.isLock) {\n timer = setTimeout(() => {\n isPress = true\n lastPlaybackRate = art.playbackRate\n art.playbackRate = constructor.FAST_FORWARD_VALUE\n addClass($player, 'art-fast-forward')\n }, constructor.FAST_FORWARD_TIME)\n }\n }\n\n const onStop = () => {\n clearTimeout(timer)\n if (isPress) {\n isPress = false\n art.playbackRate = lastPlaybackRate\n removeClass($player, 'art-fast-forward')\n }\n }\n\n proxy($video, 'touchstart', onStart)\n proxy(document, 'touchmove', onStop)\n proxy(document, 'touchend', onStop)\n\n return {\n name: 'fastForward',\n get state() {\n return hasClass($player, 'art-fast-forward')\n },\n }\n}\n","import { addClass, append, hasClass, removeClass, setStyle } from '../utils'\n\nexport default function lock(art) {\n const {\n layers,\n icons,\n template: { $player },\n } = art\n\n function getState() {\n return hasClass($player, 'art-lock')\n }\n\n function setLock() {\n addClass($player, 'art-lock')\n art.isLock = true\n art.emit('lock', true)\n }\n\n function setUnlock() {\n removeClass($player, 'art-lock')\n art.isLock = false\n art.emit('lock', false)\n }\n\n layers.add({\n name: 'lock',\n mounted($el) {\n const $lock = append($el, icons.lock)\n const $unlock = append($el, icons.unlock)\n setStyle($lock, 'display', 'none')\n\n art.on('lock', (state) => {\n if (state) {\n setStyle($lock, 'display', 'inline-flex')\n setStyle($unlock, 'display', 'none')\n }\n else {\n setStyle($lock, 'display', 'none')\n setStyle($unlock, 'display', 'inline-flex')\n }\n })\n },\n click() {\n if (getState()) {\n setUnlock()\n }\n else {\n setLock()\n }\n },\n })\n\n return {\n name: 'lock',\n get state() {\n return getState()\n },\n set state(value) {\n if (value) {\n setLock()\n }\n else {\n setUnlock()\n }\n },\n }\n}\n","import { addClass, removeClass } from '../utils'\n\nexport default function miniProgressBar(art) {\n art.on('control', (state) => {\n if (state) {\n removeClass(art.template.$player, 'art-mini-progress-bar')\n }\n else {\n addClass(art.template.$player, 'art-mini-progress-bar')\n }\n })\n\n return { name: 'mini-progress-bar' }\n}\n","import {\n addClass,\n append,\n createElement,\n def,\n errorHandle,\n getRect,\n has,\n includeFromEvent,\n inverseClass,\n isMobile,\n remove,\n replaceElement,\n setStyle,\n} from '../utils'\nimport Component from '../utils/component'\nimport aspectRatio from './aspectRatio'\nimport flip from './flip'\nimport playbackRate from './playbackRate'\nimport subtitleOffset from './subtitleOffset'\n\nexport default class Setting extends Component {\n constructor(art) {\n super(art)\n\n const {\n option,\n controls,\n template: { $setting },\n } = art\n\n this.name = 'setting'\n this.$parent = $setting\n\n this.id = 0\n this.active = null\n this.cache = new Map()\n this.option = [...this.builtin, ...option.settings]\n\n if (option.setting) {\n this.format()\n this.render()\n\n art.on('blur', () => {\n if (this.show) {\n this.show = false\n this.render()\n }\n })\n\n art.on('focus', (event) => {\n const isControl = includeFromEvent(event, controls.setting)\n const isSetting = includeFromEvent(event, this.$parent)\n if (this.show && !isControl && !isSetting) {\n this.show = false\n this.render()\n }\n })\n\n art.on('resize', () => this.resize())\n }\n }\n\n get builtin() {\n const result = []\n const { option } = this.art\n\n if (option.playbackRate) {\n result.push(playbackRate(this.art))\n }\n\n if (option.aspectRatio) {\n result.push(aspectRatio(this.art))\n }\n\n if (option.flip) {\n result.push(flip(this.art))\n }\n\n if (option.subtitleOffset) {\n result.push(subtitleOffset(this.art))\n }\n\n return result\n }\n\n traverse(callback, option = this.option) {\n for (let index = 0; index < option.length; index++) {\n const item = option[index]\n callback(item)\n if (item.selector?.length) {\n this.traverse(callback, item.selector)\n }\n }\n }\n\n check(target) {\n target.$parent.tooltip = target.html\n this.traverse((item) => {\n item.default = item === target\n if (item.default && item.$item) {\n inverseClass(item.$item, 'art-current')\n }\n }, target.$option)\n this.render(target.$parents)\n }\n\n format(option = this.option, parent, parents, names = []) {\n for (let index = 0; index < option.length; index++) {\n const item = option[index]\n\n if (item?.name) {\n errorHandle(!names.includes(item.name), `The [${item.name}] already exists in [setting]`)\n names.push(item.name)\n }\n else {\n item.name = `setting-${this.id++}`\n }\n\n if (!item.$formatted) {\n def(item, '$parent', {\n get: () => parent,\n })\n\n def(item, '$parents', {\n get: () => parents,\n })\n\n def(item, '$option', {\n get: () => option,\n })\n\n const $events = []\n def(item, '$events', {\n get: () => $events,\n })\n\n def(item, '$formatted', {\n get: () => true,\n })\n }\n\n this.format(item.selector || [], item, option, names)\n }\n\n this.option = option\n }\n\n find(name = '') {\n let result = null\n this.traverse((item) => {\n if (item.name === name) {\n result = item\n }\n })\n return result\n }\n\n resize() {\n const {\n controls,\n constructor: { SETTING_WIDTH, SETTING_ITEM_HEIGHT },\n template: { $player, $setting },\n } = this.art\n\n if (controls.setting && this.show) {\n const settingWidth = this.active[0]?.$parent?.width || SETTING_WIDTH\n const { left: controlLeft, width: controlWidth } = getRect(controls.setting)\n const { left: playerLeft, width: playerWidth } = getRect($player)\n const settingLeft = controlLeft - playerLeft + controlWidth / 2 - settingWidth / 2\n\n const settingHeight\n = this.active === this.option\n ? this.active.length * SETTING_ITEM_HEIGHT\n : (this.active.length + 1) * SETTING_ITEM_HEIGHT\n\n setStyle($setting, 'height', `${settingHeight}px`)\n setStyle($setting, 'width', `${settingWidth}px`)\n\n if (this.art.isRotate || isMobile)\n return\n\n if (settingLeft + settingWidth > playerWidth) {\n setStyle($setting, 'left', null)\n setStyle($setting, 'right', null)\n }\n else {\n setStyle($setting, 'left', `${settingLeft}px`)\n setStyle($setting, 'right', 'auto')\n }\n }\n }\n\n inactivate(item) {\n for (let index = 0; index < item.$events.length; index++) {\n this.art.events.remove(item.$events[index])\n }\n item.$events.length = 0\n }\n\n remove(name) {\n const item = this.find(name)\n errorHandle(item, `Can't find [${name}] in the [setting]`)\n const index = item.$option.indexOf(item)\n item.$option.splice(index, 1)\n this.inactivate(item)\n if (item.$item)\n remove(item.$item)\n this.render()\n }\n\n update(target) {\n const item = this.find(target.name)\n\n if (item) {\n this.inactivate(item)\n Object.assign(item, target)\n this.format()\n this.createItem(item, true)\n this.render()\n return item\n }\n else {\n return this.add(target)\n }\n }\n\n add(item, option = this.option) {\n option.push(item)\n this.format()\n this.createItem(item)\n this.render()\n return item\n }\n\n createHeader(item) {\n if (!this.cache.has(item.$option))\n return\n const $panel = this.cache.get(item.$option)\n\n const {\n proxy,\n icons: { arrowLeft },\n constructor: { SETTING_ITEM_HEIGHT },\n } = this.art\n\n const $item = createElement('div')\n setStyle($item, 'height', `${SETTING_ITEM_HEIGHT}px`)\n addClass($item, 'art-setting-item')\n addClass($item, 'art-setting-item-back')\n const $left = append($item, '
')\n const $icon = createElement('div')\n addClass($icon, 'art-setting-item-left-icon')\n append($icon, arrowLeft)\n append($left, $icon)\n append($left, item.$parent.html)\n const event = proxy($item, 'click', () => this.render(item.$parents))\n item.$parent.$events.push(event)\n append($panel, $item)\n }\n\n createItem(item, isUpdate = false) {\n if (!this.cache.has(item.$option))\n return\n const $panel = this.cache.get(item.$option)\n const oldItem = item.$item\n\n let type = 'selector'\n\n if (has(item, 'switch')) {\n type = 'switch'\n }\n\n if (has(item, 'range')) {\n type = 'range'\n }\n\n if (has(item, 'onClick')) {\n type = 'button'\n }\n\n const { icons, proxy, constructor } = this.art\n\n const $item = createElement('div')\n addClass($item, 'art-setting-item')\n setStyle($item, 'height', `${constructor.SETTING_ITEM_HEIGHT}px`)\n\n $item.dataset.name = item.name || ''\n $item.dataset.value = item.value || ''\n\n const $left = append($item, '
')\n const $right = append($item, '
')\n\n const $icon = createElement('div')\n addClass($icon, 'art-setting-item-left-icon')\n\n switch (type) {\n case 'button':\n case 'switch':\n case 'range':\n append($icon, item.icon || icons.config)\n break\n case 'selector':\n if (item.selector?.length) {\n append($icon, item.icon || icons.config)\n }\n else {\n append($icon, icons.check)\n }\n break\n default:\n break\n }\n\n append($left, $icon)\n\n def(item, '$icon', {\n configurable: true,\n get: () => $icon,\n })\n\n def(item, 'icon', {\n configurable: true,\n get() {\n return $icon.innerHTML\n },\n set(value) {\n $icon.innerHTML = ''\n append($icon, value)\n },\n })\n\n const $html = createElement('div')\n addClass($html, 'art-setting-item-left-text')\n append($html, item.html || '')\n append($left, $html)\n\n def(item, '$html', {\n configurable: true,\n get: () => $html,\n })\n\n def(item, 'html', {\n configurable: true,\n get() {\n return $html.innerHTML\n },\n set(value) {\n $html.innerHTML = ''\n append($html, value)\n },\n })\n\n const $tooltip = createElement('div')\n addClass($tooltip, 'art-setting-item-right-tooltip')\n append($tooltip, item.tooltip || '')\n append($right, $tooltip)\n\n def(item, '$tooltip', {\n configurable: true,\n get: () => $tooltip,\n })\n\n def(item, 'tooltip', {\n configurable: true,\n get() {\n return $tooltip.innerHTML\n },\n set(value) {\n $tooltip.innerHTML = ''\n append($tooltip, value)\n },\n })\n\n switch (type) {\n case 'switch': {\n const $switch = createElement('div')\n addClass($switch, 'art-setting-item-right-icon')\n const $switchOn = append($switch, icons.switchOn)\n const $switchOff = append($switch, icons.switchOff)\n setStyle(item.switch ? $switchOff : $switchOn, 'display', 'none')\n append($right, $switch)\n\n def(item, '$switch', {\n configurable: true,\n get: () => $switch,\n })\n\n let $switchValue = item.switch\n def(item, 'switch', {\n configurable: true,\n get: () => $switchValue,\n set(value) {\n $switchValue = value\n if (value) {\n setStyle($switchOff, 'display', 'none')\n setStyle($switchOn, 'display', null)\n }\n else {\n setStyle($switchOff, 'display', null)\n setStyle($switchOn, 'display', 'none')\n }\n },\n })\n break\n }\n case 'range':\n {\n const $state = createElement('div')\n addClass($state, 'art-setting-item-right-icon')\n const $range = append($state, '')\n $range.value = item.range[0]\n $range.min = item.range[1]\n $range.max = item.range[2]\n $range.step = item.range[3]\n addClass($range, 'art-setting-range')\n append($right, $state)\n\n def(item, '$range', {\n configurable: true,\n get: () => $range,\n })\n\n let $rangeValue = [...item.range]\n def(item, 'range', {\n configurable: true,\n get: () => $rangeValue,\n set(value) {\n $rangeValue = [...value]\n $range.value = value[0]\n $range.min = value[1]\n $range.max = value[2]\n $range.step = value[3]\n },\n })\n }\n break\n case 'selector':\n if (item.selector?.length) {\n const $state = createElement('div')\n addClass($state, 'art-setting-item-right-icon')\n append($state, icons.arrowRight)\n append($right, $state)\n }\n break\n default:\n break\n }\n\n switch (type) {\n case 'switch': {\n if (item.onSwitch) {\n const event = proxy($item, 'click', async (event) => {\n item.switch = await item.onSwitch.call(this.art, item, $item, event)\n })\n item.$events.push(event)\n }\n break\n }\n case 'range': {\n if (item.$range) {\n if (item.onRange) {\n const event = proxy(item.$range, 'change', async (event) => {\n item.range[0] = item.$range.valueAsNumber\n item.tooltip = await item.onRange.call(this.art, item, $item, event)\n })\n item.$events.push(event)\n }\n\n if (item.onChange) {\n const event = proxy(item.$range, 'input', async (event) => {\n item.range[0] = item.$range.valueAsNumber\n item.tooltip = await item.onChange.call(this.art, item, $item, event)\n })\n item.$events.push(event)\n }\n }\n break\n }\n case 'selector':\n {\n const event = proxy($item, 'click', async (event) => {\n if (item.selector?.length) {\n this.render(item.selector)\n }\n else {\n this.check(item)\n if (item.$parent.onSelect) {\n item.$parent.tooltip = await item.$parent.onSelect.call(this.art, item, $item, event)\n }\n }\n })\n\n item.$events.push(event)\n\n if (item.default) {\n addClass($item, 'art-current')\n }\n }\n break\n case 'button':\n if (item.onClick) {\n const event = proxy($item, 'click', async (event) => {\n item.tooltip = await item.onClick.call(this.art, item, $item, event)\n })\n item.$events.push(event)\n }\n break\n default:\n break\n }\n\n def(item, '$item', {\n configurable: true,\n get: () => $item,\n })\n\n if (isUpdate) {\n replaceElement($item, oldItem)\n }\n else {\n append($panel, $item)\n }\n\n if (item.mounted) {\n setTimeout(() => item.mounted.call(this.art, item.$item, item), 0)\n }\n }\n\n render(option = this.option) {\n this.active = option\n if (this.cache.has(option)) {\n const $panel = this.cache.get(option)\n inverseClass($panel, 'art-current')\n }\n else {\n const $panel = createElement('div')\n this.cache.set(option, $panel)\n addClass($panel, 'art-setting-panel')\n append(this.$parent, $panel)\n inverseClass($panel, 'art-current')\n\n if (option[0]?.$parent) {\n this.createHeader(option[0])\n }\n\n for (let index = 0; index < option.length; index++) {\n this.createItem(option[index])\n }\n }\n this.resize()\n }\n}\n","export default function aspectRatio(art) {\n const {\n i18n,\n icons,\n constructor: { SETTING_ITEM_WIDTH, ASPECT_RATIO },\n } = art\n\n function getI18n(value) {\n return value === 'default' ? i18n.get('Default') : value\n }\n\n function update() {\n const target = art.setting.find(`aspect-ratio-${art.aspectRatio}`)\n art.setting.check(target)\n }\n\n return {\n width: SETTING_ITEM_WIDTH,\n name: 'aspect-ratio',\n html: i18n.get('Aspect Ratio'),\n icon: icons.aspectRatio,\n tooltip: getI18n(art.aspectRatio),\n selector: ASPECT_RATIO.map((item) => {\n return {\n value: item,\n name: `aspect-ratio-${item}`,\n default: item === art.aspectRatio,\n html: getI18n(item),\n }\n }),\n onSelect(item) {\n art.aspectRatio = item.value\n return item.html\n },\n mounted: () => {\n update()\n art.on('aspectRatio', () => update())\n },\n }\n}\n","import { capitalize } from '../utils'\n\nexport default function flip(art) {\n const {\n i18n,\n icons,\n constructor: { SETTING_ITEM_WIDTH, FLIP },\n } = art\n\n function getI18n(value) {\n return i18n.get(capitalize(value))\n }\n\n function update() {\n const target = art.setting.find(`flip-${art.flip}`)\n art.setting.check(target)\n }\n\n return {\n width: SETTING_ITEM_WIDTH,\n name: 'flip',\n html: i18n.get('Video Flip'),\n tooltip: getI18n(art.flip),\n icon: icons.flip,\n selector: FLIP.map((item) => {\n return {\n value: item,\n name: `flip-${item}`,\n default: item === art.flip,\n html: getI18n(item),\n }\n }),\n onSelect(item) {\n art.flip = item.value\n return item.html\n },\n mounted: () => {\n update()\n art.on('flip', () => update())\n },\n }\n}\n","export default function playbackRate(art) {\n const {\n i18n,\n icons,\n constructor: { SETTING_ITEM_WIDTH, PLAYBACK_RATE },\n } = art\n\n function getI18n(value) {\n return value === 1.0 ? i18n.get('Normal') : value.toFixed(1)\n }\n\n function update() {\n const target = art.setting.find(`playback-rate-${art.playbackRate}`)\n art.setting.check(target)\n }\n\n return {\n width: SETTING_ITEM_WIDTH,\n name: 'playback-rate',\n html: i18n.get('Play Speed'),\n tooltip: getI18n(art.playbackRate),\n icon: icons.playbackRate,\n selector: PLAYBACK_RATE.map((item) => {\n return {\n value: item,\n name: `playback-rate-${item}`,\n default: item === art.playbackRate,\n html: getI18n(item),\n }\n }),\n onSelect(item) {\n art.playbackRate = item.value\n return item.html\n },\n mounted: () => {\n update()\n art.on('video:ratechange', () => update())\n },\n }\n}\n","export default function subtitleOffset(art) {\n const { i18n, icons, constructor } = art\n\n return {\n width: constructor.SETTING_ITEM_WIDTH,\n name: 'subtitle-offset',\n html: i18n.get('Subtitle Offset'),\n icon: icons.subtitle,\n tooltip: '0s',\n range: [0, -10, 10, 0.1],\n onChange(item) {\n art.subtitleOffset = item.range[0]\n return `${item.range[0]}s`\n },\n mounted: (_, item) => {\n art.on('subtitleOffset', (value) => {\n item.$range.value = value\n item.tooltip = `${value}s`\n })\n },\n }\n}\n","export default class Storage {\n constructor() {\n this.name = 'artplayer_settings'\n this.settings = {}\n }\n\n get(key) {\n try {\n const storage = JSON.parse(window.localStorage.getItem(this.name)) || {}\n return key ? storage[key] : storage\n }\n catch {\n return key ? this.settings[key] : this.settings\n }\n }\n\n set(key, value) {\n try {\n const storage = Object.assign({}, this.get(), {\n [key]: value,\n })\n window.localStorage.setItem(this.name, JSON.stringify(storage))\n }\n catch {\n this.settings[key] = value\n }\n }\n\n del(key) {\n try {\n const storage = this.get()\n delete storage[key]\n window.localStorage.setItem(this.name, JSON.stringify(storage))\n }\n catch {\n delete this.settings[key]\n }\n }\n\n clear() {\n try {\n window.localStorage.removeItem(this.name)\n }\n catch {\n this.settings = {}\n }\n }\n}\n","import validator from 'option-validator'\nimport scheme from './scheme'\nimport {\n append,\n assToVtt,\n createElement,\n escape,\n getExt,\n remove,\n setStyle,\n setStyles,\n srtToVtt,\n vttToBlob,\n} from './utils'\nimport Component from './utils/component'\n\nexport default class Subtitle extends Component {\n constructor(art) {\n super(art)\n this.name = 'subtitle'\n this.option = null\n this.destroyEvent = () => null\n this.init(art.option.subtitle)\n\n let lastState = false\n art.on('video:timeupdate', () => {\n if (!this.url)\n return\n const state = this.art.template.$video.webkitDisplayingFullscreen\n if (typeof state !== 'boolean')\n return\n if (state !== lastState) {\n lastState = state\n this.createTrack(state ? 'subtitles' : 'metadata', this.url)\n }\n })\n }\n\n get url() {\n return this.art.template.$track.src\n }\n\n set url(url) {\n this.switch(url)\n }\n\n get textTrack() {\n return this.art.template.$video?.textTracks?.[0]\n }\n\n get activeCues() {\n if (!this.textTrack)\n return []\n return Array.from(this.textTrack.activeCues)\n }\n\n get cues() {\n if (!this.textTrack)\n return []\n return Array.from(this.textTrack.cues)\n }\n\n style(key, value) {\n const { $subtitle } = this.art.template\n if (typeof key === 'object') {\n return setStyles($subtitle, key)\n }\n return setStyle($subtitle, key, value)\n }\n\n update() {\n const {\n option: { subtitle },\n template: { $subtitle },\n } = this.art\n\n $subtitle.innerHTML = ''\n if (!this.activeCues.length)\n return\n\n this.art.emit('subtitleBeforeUpdate', this.activeCues)\n $subtitle.innerHTML = this.activeCues\n .map((cue, index) =>\n cue.text\n .split(/\\r?\\n/)\n .filter(line => line.trim())\n .map(\n line =>\n `
\n ${subtitle.escape ? escape(line) : line}\n
`,\n )\n .join(''),\n )\n .join('')\n this.art.emit('subtitleAfterUpdate', this.activeCues)\n }\n\n async switch(url, newOption = {}) {\n const { i18n, notice, option } = this.art\n const subtitleOption = { ...option.subtitle, ...newOption, url }\n const subUrl = await this.init(subtitleOption)\n if (newOption.name) {\n notice.show = `${i18n.get('Switch Subtitle')}: ${newOption.name}`\n }\n return subUrl\n }\n\n createTrack(kind, url) {\n const { template, proxy, option } = this.art\n const { $video, $track } = template\n\n const $newTrack = createElement('track')\n $newTrack.default = true\n $newTrack.kind = kind\n $newTrack.src = url\n $newTrack.label = option.subtitle.name || 'Artplayer'\n $newTrack.track.mode = 'hidden'\n $newTrack.onload = () => {\n this.art.emit('subtitleLoad', this.cues, this.option)\n }\n\n this.art.events.remove(this.destroyEvent)\n $track.onload = null\n remove($track)\n append($video, $newTrack)\n template.$track = $newTrack\n this.destroyEvent = proxy(this.textTrack, 'cuechange', () => this.update())\n }\n\n async init(subtitleOption) {\n const {\n notice,\n template: { $subtitle },\n } = this.art\n\n if (!this.textTrack)\n return null\n validator(subtitleOption, scheme.subtitle)\n if (!subtitleOption.url)\n return\n this.option = subtitleOption\n this.style(subtitleOption.style)\n\n return fetch(subtitleOption.url)\n .then(response => response.arrayBuffer())\n .then((buffer) => {\n const decoder = new TextDecoder(subtitleOption.encoding)\n const text = decoder.decode(buffer)\n switch (subtitleOption.type || getExt(subtitleOption.url)) {\n case 'srt': {\n const vtt = srtToVtt(text)\n const vttNew = subtitleOption.onVttLoad(vtt)\n return vttToBlob(vttNew)\n }\n case 'ass': {\n const vtt = assToVtt(text)\n const vttNew = subtitleOption.onVttLoad(vtt)\n return vttToBlob(vttNew)\n }\n case 'vtt': {\n const vttNew = subtitleOption.onVttLoad(text)\n return vttToBlob(vttNew)\n }\n default:\n return subtitleOption.url\n }\n })\n .then((subUrl) => {\n $subtitle.innerHTML = ''\n if (this.url === subUrl)\n return subUrl\n URL.revokeObjectURL(this.url)\n this.createTrack('metadata', subUrl)\n return subUrl\n })\n .catch((err) => {\n $subtitle.innerHTML = ''\n notice.show = err\n throw err\n })\n }\n}\n","import { version } from '../package.json'\nimport { addClass, errorHandle, isMobile, query, replaceElement, supportsFlex } from './utils'\n\nexport default class Template {\n constructor(art) {\n this.art = art\n const { option, constructor } = art\n\n if (option.container instanceof Element) {\n this.$container = option.container\n }\n else {\n this.$container = query(option.container)\n errorHandle(this.$container, `No container element found by ${option.container}`)\n }\n\n errorHandle(supportsFlex(), 'The current browser does not support flex layout')\n\n const type = this.$container.tagName.toLowerCase()\n errorHandle(type === 'div', `Unsupported container element type, only support 'div' but got '${type}'`)\n\n errorHandle(\n constructor.instances.every(ins => ins.template.$container !== this.$container),\n 'Cannot mount multiple instances on the same dom element',\n )\n\n this.query = this.query.bind(this)\n this.$container.dataset.artId = art.id\n this.init()\n }\n\n static get html() {\n return `\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Player version:
\n
${version}
\n
\n
\n
Video url:
\n
\n
\n
\n
Video volume:
\n
\n
\n
\n
Video time:
\n
\n
\n
\n
Video duration:
\n
\n
\n
\n
Video resolution:
\n
\n x \n
\n
\n
\n
[x]
\n
\n
\n
\n `\n }\n\n query(className) {\n return query(className, this.$container)\n }\n\n init() {\n const { option } = this.art\n\n if (!option.useSSR) {\n this.$container.innerHTML = Template.html\n }\n\n this.$player = this.query('.art-video-player')\n this.$video = this.query('.art-video')\n this.$track = this.query('track')\n this.$poster = this.query('.art-poster')\n this.$subtitle = this.query('.art-subtitle')\n this.$danmuku = this.query('.art-danmuku')\n this.$bottom = this.query('.art-bottom')\n this.$progress = this.query('.art-progress')\n this.$controls = this.query('.art-controls')\n this.$controlsLeft = this.query('.art-controls-left')\n this.$controlsCenter = this.query('.art-controls-center')\n this.$controlsRight = this.query('.art-controls-right')\n this.$layer = this.query('.art-layers')\n this.$loading = this.query('.art-loading')\n this.$notice = this.query('.art-notice')\n this.$noticeInner = this.query('.art-notice-inner')\n this.$mask = this.query('.art-mask')\n this.$state = this.query('.art-state')\n this.$setting = this.query('.art-settings')\n this.$info = this.query('.art-info')\n this.$infoPanel = this.query('.art-info-panel')\n this.$infoClose = this.query('.art-info-close')\n this.$contextmenu = this.query('.art-contextmenus')\n\n if (option.proxy) {\n const video = option.proxy.call(this.art, this.art)\n errorHandle(\n video instanceof HTMLVideoElement || video instanceof HTMLCanvasElement,\n `Function 'option.proxy' needs to return 'HTMLVideoElement' or 'HTMLCanvasElement'`,\n )\n replaceElement(video, this.$video)\n video.className = 'art-video'\n this.$video = video\n }\n\n if (option.backdrop) {\n addClass(this.$player, 'art-backdrop')\n }\n\n if (isMobile) {\n addClass(this.$player, 'art-mobile')\n }\n }\n\n destroy(removeHtml) {\n this.$video.src = ''\n if (removeHtml) {\n this.$container.innerHTML = ''\n }\n else {\n addClass(this.$player, 'art-destroy')\n }\n }\n}\n","export default class Emitter {\n on(name, fn, ctx) {\n const e = this.e || (this.e = {});\n (e[name] || (e[name] = [])).push({ fn, ctx })\n return this\n }\n\n once(name, fn, ctx) {\n const self = this\n function listener(...args) {\n self.off(name, listener)\n fn.apply(ctx, args)\n }\n listener._ = fn\n return this.on(name, listener, ctx)\n }\n\n emit(name, ...data) {\n const evtArr = ((this.e || (this.e = {}))[name] || []).slice()\n for (let i = 0; i < evtArr.length; i += 1) {\n evtArr[i].fn.apply(evtArr[i].ctx, data)\n }\n return this\n }\n\n off(name, callback) {\n const e = this.e || (this.e = {})\n const evts = e[name]\n const liveEvents = []\n if (evts && callback) {\n for (let i = 0, len = evts.length; i < len; i += 1) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i])\n }\n }\n if (liveEvents.length) {\n e[name] = liveEvents\n }\n else {\n delete e[name]\n }\n return this\n }\n}\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../../"} \ No newline at end of file diff --git a/packages/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.esm.js b/packages/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.esm.js index 4b86f6440..92e83677e 100644 --- a/packages/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.esm.js +++ b/packages/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.esm.js @@ -5,5 +5,5 @@ * (c) 2017-2025 Harvey Zack * Released under the MIT License. */ -!function(t,e,i,a,n,o,s,r){var l="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},d="function"==typeof l[a]&&l[a],p=d.i||{},u=d.cache||{},h="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function m(e,i){if(!u[e]){if(!t[e]){if(n[e])return n[e];var o="function"==typeof l[a]&&l[a];if(!i&&o)return o(e,!0);if(d)return d(e,!0);if(h&&"string"==typeof e)return h(e);var s=Error("Cannot find module '"+e+"'");throw s.code="MODULE_NOT_FOUND",s}p.resolve=function(i){var a=t[e][1][i];return null!=a?a:i},p.cache={};var r=u[e]=new m.Module(e);t[e][0].call(r.exports,p,r,r.exports,l)}return u[e].exports;function p(t){var e=p.resolve(t);return!1===e?{}:m(e)}}m.isParcelRequire=!0,m.Module=function(t){this.id=t,this.bundle=m,this.require=h,this.exports={}},m.modules=t,m.cache=u,m.parent=d,m.distDir=void 0,m.publicUrl=void 0,m.devServer=void 0,m.i=p,m.register=function(e,i){t[e]=[function(t,e){e.exports=i},{}]},Object.defineProperty(m,"root",{get:function(){return l[a]}}),l[a]=m;for(var c=0;cu);var o=t("./danmuku"),s=n.interopDefault(o),r=t("./heatmap"),l=n.interopDefault(r),d=t("./setting"),p=n.interopDefault(d);function u(t){return e=>{let i=new(0,s.default)(e,t),a=new(0,p.default)(e,i);return i.option.heatmap&&(0,l.default)(e,i,i.option.heatmap),{name:"artplayerPluginDanmuku",emit:i.emit.bind(i),load:i.load.bind(i),config:i.config.bind(i),hide:i.hide.bind(i),show:i.show.bind(i),reset:i.reset.bind(i),mount:a.mount.bind(a),get option(){return i.option},get isHide(){return i.isHide},get isStop(){return i.isStop}}}}u.icons=p.default.icons,"undefined"!=typeof window&&(window.artplayerPluginDanmuku=u)},{"./danmuku":"6C7g0","./heatmap":"h2ayY","./setting":"90QKZ","@parcel/transformer-js/src/esmodule-helpers.js":"5lQoW"}],"6C7g0":[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i);var o=t("bundle-text:./worker"),s=n.interopDefault(o),r=t("./bilibili");class l{constructor(t,e){let{constructor:i,template:a}=t;this.utils=i.utils,this.validator=i.validator,this.$danmuku=a.$danmuku,this.$player=a.$player,this.art=t,this.queue=[],this.$refs=[],this.isStop=!1,this.isHide=!1,this.timer=null,this.index=0,this.option=l.option,this.states={wait:[],ready:[],emit:[],stop:[]},this.config(e,!0);let n=new Blob([s.default.replace("export{e as default};","")],{type:"application/javascript"});this.worker=new Worker(URL.createObjectURL(n)),this.start=this.start.bind(this),this.stop=this.stop.bind(this),this.reset=this.reset.bind(this),this.resize=this.resize.bind(this),this.destroy=this.destroy.bind(this),t.on("video:play",this.start),t.on("video:playing",this.start),t.on("video:pause",this.stop),t.on("video:waiting",this.stop),t.on("destroy",this.destroy),t.on("resize",this.resize),this.load()}static get option(){return{danmuku:[],speed:5,margin:[10,"25%"],opacity:1,color:"#FFFFFF",mode:0,modes:[0,1,2],fontSize:25,antiOverlap:!0,synchronousPlayback:!1,mount:void 0,heatmap:!1,width:512,points:[],filter:()=>!0,beforeEmit:()=>!0,beforeVisible:()=>!0,visible:!0,emitter:!0,maxLength:200,lockTime:5,theme:"dark",OPACITY:{},FONT_SIZE:{},MARGIN:{},SPEED:{},COLOR:[]}}static get scheme(){return{danmuku:"array|function|string",speed:"number",margin:"array",opacity:"number",color:"string",mode:"number",modes:"array",fontSize:"number|string",antiOverlap:"boolean",synchronousPlayback:"boolean",mount:"?htmldivelement|string",heatmap:"object|boolean",width:"number",points:"array",filter:"function",beforeEmit:"function",beforeVisible:"function",visible:"boolean",emitter:"boolean",maxLength:"number",lockTime:"number",theme:"string",OPACITY:"object",FONT_SIZE:"object",MARGIN:"object",SPEED:"object",COLOR:"array"}}static get cssText(){return` user-select: none; position: absolute; white-space: pre; pointer-events: none; perspective: 500px; display: inline-block; will-change: transform; font-weight: normal; line-height: 1.125; visibility: hidden; font-family: SimHei, "Microsoft JhengHei", Arial, Helvetica, sans-serif; text-shadow: rgb(0, 0, 0) 1px 0px 1px, rgb(0, 0, 0) 0px 1px 1px, rgb(0, 0, 0) 0px -1px 1px, rgb(0, 0, 0) -1px 0px 1px; `}get isRotate(){return this.art.plugins?.autoOrientation?.state}get marginTop(){let{clamp:t}=this.utils,e=this.option.margin[0],{clientHeight:i}=this.$player;return"number"==typeof e?t(e,0,i):"string"==typeof e&&e.endsWith("%")?t(i*(Number.parseFloat(e)/100),0,i):l.option.margin[0]}get marginBottom(){let{clamp:t}=this.utils,e=this.option.margin[1],{clientHeight:i}=this.$player;return"number"==typeof e?t(e,0,i):"string"==typeof e&&e.endsWith("%")?t(i*(Number.parseFloat(e)/100),0,i):l.option.margin[1]}get fontSize(){let{clamp:t}=this.utils,{clientHeight:e}=this.$player,i=this.option.fontSize;return"number"==typeof i?Math.round(t(i,12,e)):"string"==typeof i&&i.endsWith("%")?Math.round(t(e*(Number.parseFloat(i)/100),12,e)):l.option.fontSize}get $ref(){let t=this.$refs.pop()||document.createElement("div");return t.style.cssText=l.cssText,t.dataset.mode="",t.className="",t}get readys(){let{currentTime:t}=this.art,e=[];return this.filter("ready",t=>e.push(t)),this.filter("wait",i=>{t+.1>=i.time&&i.time>=t-.1&&e.push(i)}),e}get visibles(){let t=[],{clientWidth:e}=this.$player,i=this.getLeft(this.$player);return this.filter("emit",a=>{let n=a.$ref.offsetTop,o=this.getLeft(a.$ref)-i,s=a.$ref.clientHeight,r=a.$ref.clientWidth,l=o+r,d=l/a.$restTime,p={};p.top=n,p.left=o,p.height=s,p.width=r,p.right=e-l,p.speed=d,p.distance=l,p.time=a.$restTime,p.mode=a.mode,t.push(p)}),t}get speed(){return this.option.synchronousPlayback&&this.art.playbackRate?this.option.speed/Number(this.art.playbackRate):this.option.speed}async load(t){let{errorHandle:e}=this.utils,i=[],a=t||this.option.danmuku;try{"function"==typeof a?i=await a():a instanceof Promise?i=await a:"string"==typeof a?i=await (0,r.bilibiliDanmuParseFromUrl)(a):Array.isArray(a)&&(i=a),e(Array.isArray(i),"Danmuku need return an array as result"),void 0===t&&(this.reset(),this.queue=[],this.states={wait:[],ready:[],emit:[],stop:[]},this.$refs=[],this.$danmuku.textContent="");for(let t=0;tJSON.stringify(this.option[e])!==JSON.stringify(t[e]))||e)&&(this.option=Object.assign({},l.option,this.option,t),this.validator(this.option,l.scheme),this.option.mode=i(this.option.mode,0,2),this.option.speed=i(this.option.speed,1,10),this.option.opacity=i(this.option.opacity,0,1),this.option.lockTime=i(this.option.lockTime,1,60),this.option.maxLength=i(this.option.maxLength,1,1e3),this.option.mount=this.option.mount||a,t.fontSize&&this.reset(),this.option.visible?this.show():this.hide(),this.art.emit("artplayerPluginDanmuku:config",this.option)),this}getLeft(t){let e=t.getBoundingClientRect();return this.isRotate?e.top:e.left}postMessage(t={}){return new Promise(e=>{t.id=Date.now(),this.worker.postMessage(t),this.worker.onmessage=i=>{let{data:a}=i;a.id===t.id&&e(a)}})}filter(t,e){let i=this.states[t]||[];for(let t=0;te!==t),t.$state=e,t.$ref&&(t.$ref.dataset.state=e),this.states[e].push(t)}makeWait(t){this.setState(t,"wait"),t.$ref&&(t.$ref.style.cssText=l.cssText,t.$ref.style.visibility="hidden",t.$ref.style.marginLeft="0px",t.$ref.style.transform="translateX(0px)",t.$ref.style.transition="transform 0s linear 0s",this.$refs.push(t.$ref),t.$ref=null)}update(){let{setStyles:t}=this.utils;return this.timer=window.requestAnimationFrame(async()=>{if(this.art.playing&&!this.isHide){this.filter("emit",t=>{let e=(Date.now()-t.$lastStartTime)/1e3;t.$restTime-=e,t.$lastStartTime=Date.now(),t.$restTime<=0&&this.makeWait(t)});let e=this.readys;for(let i=0;i{0===e.mode&&(e.$ref.style.left=`${t}px`)}),this.filter("emit",e=>{if(e.$lastStartTime=Date.now(),0===e.mode){let i=t+e.$ref.clientWidth;e.$ref.style.left=`${t}px`,e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition=`transform ${e.$restTime}s linear 0s`}})}continue(){let{clientWidth:t}=this.$player;return this.filter("stop",e=>{if(this.setState(e,"emit"),e.$lastStartTime=Date.now(),0===e.mode){let i=t+e.$ref.clientWidth;e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition=`transform ${e.$restTime}s linear 0s`}}),this}suspend(){let{clientWidth:t}=this.$player;return this.filter("emit",e=>{if(this.setState(e,"stop"),0===e.mode){let i=t-(this.getLeft(e.$ref)-this.getLeft(this.$player));e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition="transform 0s linear 0s"}}),this}stop(){return this.isStop=!0,this.suspend(),window.cancelAnimationFrame(this.timer),this.art.emit("artplayerPluginDanmuku:stop"),this}start(){return this.isStop=!1,this.continue(),this.update(),this.art.emit("artplayerPluginDanmuku:start"),this}reset(){return this.queue.forEach(t=>this.makeWait(t)),this.art.emit("artplayerPluginDanmuku:reset"),this}show(){return this.isHide=!1,this.$danmuku.style.opacity=1,this.option.visible=!0,this.art.emit("artplayerPluginDanmuku:show"),this}hide(){return this.isHide=!0,this.$danmuku.style.opacity=0,this.option.visible=!1,this.art.emit("artplayerPluginDanmuku:hide"),this}destroy(){this.stop(),this.worker.terminate(),this.art.off("video:play",this.start),this.art.off("video:playing",this.start),this.art.off("video:pause",this.stop),this.art.off("video:waiting",this.stop),this.art.off("resize",this.reset),this.art.off("destroy",this.destroy),this.art.emit("artplayerPluginDanmuku:destroy")}}i.default=l},{"bundle-text:./worker":"8UAYg","./bilibili":"8WBpY","@parcel/transformer-js/src/esmodule-helpers.js":"5lQoW"}],"8UAYg":[function(t,e,i,a){e.exports='!function(e,t,i,o,r,n,l,d){var u="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},f="function"==typeof u[o]&&u[o],p=f.i||{},s=f.cache||{},h="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function a(t,i){if(!s[t]){if(!e[t]){if(r[t])return r[t];var n="function"==typeof u[o]&&u[o];if(!i&&n)return n(t,!0);if(f)return f(t,!0);if(h&&"string"==typeof t)return h(t);var l=Error("Cannot find module \'"+t+"\'");throw l.code="MODULE_NOT_FOUND",l}p.resolve=function(i){var o=e[t][1][i];return null!=o?o:i},p.cache={};var d=s[t]=new a.Module(t);e[t][0].call(d.exports,p,d,d.exports,u)}return s[t].exports;function p(e){var t=p.resolve(e);return!1===t?{}:a(t)}}a.isParcelRequire=!0,a.Module=function(e){this.id=e,this.bundle=a,this.require=h,this.exports={}},a.modules=e,a.cache=s,a.parent=f,a.distDir=void 0,a.publicUrl=void 0,a.devServer=void 0,a.i=p,a.register=function(t,i){e[t]=[function(e,t){t.exports=i},{}]},Object.defineProperty(a,"root",{get:function(){return u[o]}}),u[o]=a;for(var c=0;ct.mode===e.mode&&t.top<=d).sort((e,t)=>e.top-t.top);if(0===u.length)if(2===e.mode)return d-e.height;else return n;if(u.unshift({type:"top",top:0,left:0,right:0,height:n,width:i,speed:0,distance:i}),u.push({type:"bottom",top:d,left:0,right:0,height:r,width:i,speed:0,distance:i}),2===e.mode)for(let t=u.length-2;t>=0;t-=1){let i=u[t],o=u[t+1],r=i.top+i.height;if(o.top-r>=e.height)return o.top-e.height}else for(let t=1;t=e.height)return r}let f=[];for(let e=1;et.every(t=>!(it.time))));return t&&t[0]?t[0].top:void 0}case 1:case 2:return}else{switch(e.mode){case 0:f.sort((e,t)=>{let i=Math.min(...t.map(e=>e.right)),o=Math.min(...e.map(e=>e.right));return i*t.length-o*e.length});break;case 1:case 2:f.sort((e,t)=>{let i=Math.max(...t.map(e=>e.width));return Math.max(...e.map(e=>e.width))*e.length-i*t.length})}return f[0][0].top}}onmessage=e=>{let{data:t}=e;t.id&&t.type&&globalThis.postMessage({result:(0,({getDanmuTop:r})[t.type])(t),id:t.id})}},{}]},["4KwZ6"],"4KwZ6","parcelRequire4dc0",{});let{"*":e}=parcelRequire4dc0("4KwZ6");export{e as default};'},{}],"8WBpY":[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");function o(t){switch(t){case 1:case 2:case 3:default:return 0;case 4:return 2;case 5:return 1}}function s(t){return"string"!=typeof t?[]:Array.from(t.matchAll(/]*?p="(?

[^"]+)"[^>]*>(?.*?)<\/d>/gs)).map(t=>{let e=t.groups.p.split(",");return e.length>=8?{text:t.groups.text.trim().replaceAll(""",'"').replaceAll("'","'").replaceAll("<","<").replaceAll(">",">").replaceAll("&","&"),time:Number(e[0]),mode:o(Number(e[1])),fontSize:Number(e[2]),color:`#${Number(e[3]).toString(16)}`,timestamp:Number(e[4]),pool:Number(e[5]),userID:e[6],rowID:Number(e[7])}:null}).filter(Boolean)}function r({data:t}){let{xml:e,id:i}=t;i&&e&&globalThis.postMessage({danmus:s(e),id:i})}function l(t){return new Promise(async e=>{let i=await fetch(t),a=await i.text();try{let t=function(){let t=new Blob([` ${o.toString()} ${s.toString()} onmessage = ${r.toString()} `],{type:"application/javascript"});return new Worker(URL.createObjectURL(t))}();t.onmessage=i=>{let{danmus:a,id:n}=i.data;n&&a&&(e(a),t.terminate())},t.postMessage({xml:a,id:Date.now()})}catch(t){console.error("Error parsing Bilibili Danmu:",t),e(s(a))}})}n.defineInteropFlag(i),n.export(i,"bilibiliDanmuParseFromUrl",()=>l)},{"@parcel/transformer-js/src/esmodule-helpers.js":"5lQoW"}],"5lQoW":[function(t,e,i,a){i.interopDefault=function(t){return t&&t.__esModule?t:{default:t}},i.defineInteropFlag=function(t){Object.defineProperty(t,"__esModule",{value:!0})},i.exportAll=function(t,e){return Object.keys(t).forEach(function(i){"default"===i||"__esModule"===i||Object.prototype.hasOwnProperty.call(e,i)||Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[i]}})}),e},i.export=function(t,e,i){Object.defineProperty(t,e,{enumerable:!0,get:i})}},{}],h2ayY:[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i),n.export(i,"default",()=>s);let o={map:(t,e,i,a,n)=>(t-e)*(n-a)/(i-e)+a,range(t,e,i){let a=Math.round(t/i)*i;return Array.from({length:Math.floor((e-t)/i)},(t,e)=>e*i+a)}};function s(t,e,i){let{query:a}=t.constructor.utils;t.controls.add({name:"heatmap",position:"top",html:"",style:{position:"absolute",top:"-100px",left:"0px",right:"0px",height:"100px",width:"100%",pointerEvents:"none"},mounted(n){let s=null,r=null;function l(d=[]){if(s=null,r=null,n.innerHTML="",!t.duration||t.option.isLive)return;let p={w:n.offsetWidth,h:n.offsetHeight},u={xMin:0,xMax:p.w,yMin:0,yMax:128,scale:.25,opacity:.2,minHeight:Math.floor(.05*p.h),sampling:Math.floor(p.w/100),smoothing:.2,flattening:.2};"object"==typeof i&&Object.assign(u,i);let h=[];if(Array.isArray(d)&&d.length)h=[...d];else{let i=t.duration/p.w;for(let t=0;t<=p.w;t+=u.sampling){let a=e.queue.filter(({time:e})=>e>t*i&&e<=(t+u.sampling)*i).length;h.push([t,a])}}if(0===h.length)return;let m=h[h.length-1],c=m[0],f=m[1];c!==p.w&&h.push([p.w,f]);let g=h.map(t=>t[1]),y=(Math.min(...g)+Math.max(...g))/2;for(let t=0;ty?1+u.scale:1-u.scale)+u.minHeight}let v=(t,e,i,a)=>{let n=function(t,e){let i=e[0]-t[0],a=e[1]-t[1];return{length:Math.sqrt(i**2+a**2),angle:Math.atan2(a,i)}}(e||t,i||t),s=o.map(Math.cos(n.angle)*u.flattening,0,1,1,0),r=n.angle*s+(a?Math.PI:0),l=n.length*u.smoothing;return[t[0]+Math.cos(r)*l,t[1]+Math.sin(r)*l]},x=h.map(t=>[o.map(t[0],u.xMin,u.xMax,0,p.w),o.map(t[1],u.yMin,u.yMax,p.h,0)]).reduce((t,e,i,a)=>0===i?`M ${a[a.length-1][0]},${p.h} L ${e[0]},${p.h} L ${e[0]},${e[1]}`:`${t} ${((t,e,i)=>{let a=v(i[e-1],i[e-2],t),n=v(t,i[e-1],i[e+1],!0),o=e===i.length-1?" z":"";return`C ${a[0]},${a[1]} ${n[0]},${n[1]} ${t[0]},${t[1]}${o}`})(e,i,a)}`,"");n.innerHTML=``,s=a("#heatmap-start",n),r=a("#heatmap-stop",n),s.setAttribute("offset",`${100*t.played}%`),r.setAttribute("offset",`${100*t.played}%`)}t.on("video:timeupdate",()=>{s&&r&&(s.setAttribute("offset",`${100*t.played}%`),r.setAttribute("offset",`${100*t.played}%`))}),t.on("setBar",(t,e)=>{s&&r&&"played"===t&&(s.setAttribute("offset",`${100*e}%`),r.setAttribute("offset",`${100*e}%`))}),t.on("ready",()=>l()),t.on("resize",()=>l()),t.on("artplayerPluginDanmuku:loaded",()=>l()),t.on("artplayerPluginDanmuku:points",t=>l(t))}})}},{"@parcel/transformer-js/src/esmodule-helpers.js":"5lQoW"}],"90QKZ":[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i);var o=t("bundle-text:./img/check_off.svg"),s=n.interopDefault(o),r=t("bundle-text:./img/check_on.svg"),l=n.interopDefault(r),d=t("bundle-text:./img/config.svg"),p=n.interopDefault(d),u=t("bundle-text:./img/mode_0_off.svg"),h=n.interopDefault(u),m=t("bundle-text:./img/mode_0_on.svg"),c=n.interopDefault(m),f=t("bundle-text:./img/mode_1_off.svg"),g=n.interopDefault(f),y=t("bundle-text:./img/mode_1_on.svg"),v=n.interopDefault(y),x=t("bundle-text:./img/mode_2_off.svg"),k=n.interopDefault(x),b=t("bundle-text:./img/mode_2_on.svg"),$=n.interopDefault(b),w=t("bundle-text:./img/off.svg"),M=n.interopDefault(w),D=t("bundle-text:./img/on.svg"),S=n.interopDefault(D),E=t("bundle-text:./img/style.svg"),A=n.interopDefault(E),q=t("bundle-text:./style.less"),T=n.interopDefault(q);if(i.default=class{constructor(t,e){this.art=t,this.danmuku=e,this.utils=t.constructor.utils;let{setStyle:i}=this.utils,{$controlsCenter:a}=t.template;i(a,"display","flex"),this.template={$controlsCenter:a,$mount:a,$danmuku:null,$toggle:null,$config:null,$configPanel:null,$configModes:null,$style:null,$stylePanel:null,$styleModes:null,$colors:null,$opacitySlider:null,$opacityValue:null,$marginSlider:null,$marginValue:null,$fontSizeSlider:null,$fontSizeValue:null,$speedSlider:null,$speedValue:null,$input:null,$send:null},this.slider={opacity:null,margin:null,fontSize:null,speed:null},this.emitting=!1,this.isLock=!1,this.timer=null,this.createTemplate(),this.createSliders(),this.createEvents(),this.mount(this.option.mount),t.on("resize",()=>this.resize()),t.on("fullscreen",t=>this.onFullscreen(t)),t.on("fullscreenWeb",t=>this.onFullscreen(t)),t.proxy(this.template.$config,"mouseenter",()=>{this.onMouseEnter({$control:this.template.$config,$panel:this.template.$configPanel})}),t.proxy(this.template.$style,"mouseenter",()=>{this.onMouseEnter({$control:this.template.$style,$panel:this.template.$stylePanel})})}static get icons(){return{$on:S.default,$off:M.default,$config:p.default,$style:A.default,$mode_0_off:h.default,$mode_0_on:c.default,$mode_1_off:g.default,$mode_1_on:v.default,$mode_2_off:k.default,$mode_2_on:$.default,$check_on:l.default,$check_off:s.default}}get option(){return this.danmuku.option}get outside(){return this.template.$mount!==this.template.$controlsCenter}get TEMPLATE(){let{option:t}=this;return`

${S.default}${M.default}
${p.default}
\u{6309}\u{7C7B}\u{578B}\u{5C4F}\u{853D}
${h.default}${c.default}
\u{6EDA}\u{52A8}
${g.default}${v.default}
\u{9876}\u{90E8}
${k.default}${$.default}
\u{5E95}\u{90E8}
${l.default}${s.default} \u{9632}\u{6B62}\u{5F39}\u{5E55}\u{91CD}\u{53E0}
${l.default}${s.default} \u{540C}\u{6B65}\u{89C6}\u{9891}\u{901F}\u{5EA6}
\u{4E0D}\u{900F}\u{660E}\u{5EA6}
\u{672A}\u{77E5}
\u{663E}\u{793A}\u{533A}\u{57DF}
\u{672A}\u{77E5}
\u{5F39}\u{5E55}\u{5B57}\u{53F7}
\u{672A}\u{77E5}
\u{5F39}\u{5E55}\u{901F}\u{5EA6}
\u{672A}\u{77E5}
${A.default}
\u{6A21}\u{5F0F}
${c.default}
\u{6EDA}\u{52A8}
${v.default}
\u{9876}\u{90E8}
${$.default}
\u{5E95}\u{90E8}
\u{989C}\u{8272}
${this.COLOR.map(t=>`
`).join("")}
\u{53D1}\u{9001}
`}get OPACITY(){return{min:0,max:100,steps:[],...this.option.OPACITY}}get FONT_SIZE(){return{min:12,max:120,steps:[],...this.option.FONT_SIZE}}get MARGIN(){return{min:0,max:3,steps:[{name:"1/4",value:[10,"75%"]},{name:"半屏",value:[10,"50%"]},{name:"3/4",value:[10,"25%"]},{name:"满屏",value:[10,10]}],...this.option.MARGIN}}get SPEED(){return{min:0,max:4,steps:[{name:"极慢",value:10},{name:"较慢",value:7.5,hide:!0},{name:"适中",value:5},{name:"较快",value:2.5,hide:!0},{name:"极快",value:1}],...this.option.SPEED}}get COLOR(){return this.option.COLOR.length?this.option.COLOR:["#FE0302","#FF7204","#FFAA02","#FFD302","#FFFF00","#A0EE00","#00CD00","#019899","#4266BE","#89D5FF","#CC0273","#222222","#9B9B9B","#FFFFFF"]}query(t){let{query:e}=this.utils,{$danmuku:i}=this.template;return e(t,i)}append(t,e){let{append:i}=this.utils;[...t.children].includes(e)||i(t,e)}setData(t,e){let{$player:i}=this.art.template,{$mount:a}=this.template;i.dataset[t]=e,this.outside&&(a.dataset[t]=e)}createTemplate(){let{createElement:t,tooltip:e}=this.utils,i=t("div");i.className="artplayer-plugin-danmuku",i.innerHTML=this.TEMPLATE,this.template.$danmuku=i,this.template.$toggle=this.query(".apd-toggle"),this.template.$config=this.query(".apd-config"),this.template.$configPanel=this.query(".apd-config-panel"),this.template.$configModes=this.query(".apd-config-mode .apd-modes"),this.template.$style=this.query(".apd-style"),this.template.$stylePanel=this.query(".apd-style-panel"),this.template.$styleModes=this.query(".apd-style-mode .apd-modes"),this.template.$colors=this.query(".apd-colors"),this.template.$antiOverlap=this.query(".apd-anti-overlap"),this.template.$syncVideo=this.query(".apd-sync-video"),this.template.$opacitySlider=this.query(".apd-config-opacity .apd-slider"),this.template.$opacityValue=this.query(".apd-config-opacity .apd-value"),this.template.$marginSlider=this.query(".apd-config-margin .apd-slider"),this.template.$marginValue=this.query(".apd-config-margin .apd-value"),this.template.$fontSizeSlider=this.query(".apd-config-fontSize .apd-slider"),this.template.$fontSizeValue=this.query(".apd-config-fontSize .apd-value"),this.template.$speedSlider=this.query(".apd-config-speed .apd-slider"),this.template.$speedValue=this.query(".apd-config-speed .apd-value"),this.template.$input=this.query(".apd-input"),this.template.$send=this.query(".apd-send");let{$toggle:a}=this.template;this.art.on("artplayerPluginDanmuku:show",()=>{e(a,"关闭弹幕")}),this.art.on("artplayerPluginDanmuku:hide",()=>{e(a,"打开弹幕")})}createEvents(){let{$toggle:t,$configModes:e,$styleModes:i,$colors:a,$antiOverlap:n,$syncVideo:o,$send:s,$input:r}=this.template;this.art.proxy(t,"click",()=>{this.danmuku.config({visible:!this.option.visible}),this.reset()}),this.art.proxy(e,"click",t=>{let e=t.target.closest(".apd-mode");if(!e)return;let i=Number(e.dataset.mode);this.option.modes.includes(i)?this.danmuku.config({modes:this.option.modes.filter(t=>t!==i)}):this.danmuku.config({modes:[...this.option.modes,i]}),this.reset()}),this.art.proxy(n,"click",()=>{this.danmuku.config({antiOverlap:!this.option.antiOverlap}),this.reset()}),this.art.proxy(o,"click",()=>{this.danmuku.config({synchronousPlayback:!this.option.synchronousPlayback}),this.reset()}),this.art.proxy(i,"click",t=>{let e=t.target.closest(".apd-mode");if(!e)return;let i=Number(e.dataset.mode);this.danmuku.config({mode:i}),this.reset()}),this.art.proxy(a,"click",t=>{let e=t.target.closest(".apd-color");e&&(this.danmuku.config({color:e.dataset.color}),this.reset())}),this.art.proxy(s,"click",()=>this.emit()),this.art.proxy(r,"keypress",t=>{"Enter"===t.key&&(t.preventDefault(),this.emit())})}createSliders(){this.slider.opacity=this.createSlider({...this.OPACITY,container:this.template.$opacitySlider,findIndex:()=>Math.round(100*this.option.opacity),onChange:t=>{let{$opacityValue:e}=this.template;e.textContent=`${t}%`,this.danmuku.config({opacity:t/100})}}),this.slider.margin=this.createSlider({...this.MARGIN,container:this.template.$marginSlider,findIndex:()=>this.MARGIN.steps.findIndex(t=>t.value[0]===this.option.margin[0]&&t.value[1]===this.option.margin[1]),onChange:t=>{let e=this.MARGIN.steps[t];if(!e)return;let{$marginValue:i}=this.template;i.textContent=e.name,this.danmuku.config({margin:e.value})}}),this.slider.fontSize=this.createSlider({...this.FONT_SIZE,container:this.template.$fontSizeSlider,findIndex:()=>this.danmuku.fontSize,onChange:t=>{let{$fontSizeValue:e}=this.template;e.textContent=`${t}px`,t!==this.danmuku.fontSize&&this.danmuku.config({fontSize:t})}}),this.slider.speed=this.createSlider({...this.SPEED,container:this.template.$speedSlider,findIndex:()=>this.SPEED.steps.findIndex(t=>t.value===this.option.speed),onChange:t=>{let e=this.SPEED.steps[t];if(!e)return;let{$speedValue:i}=this.template;i.textContent=e.name,this.danmuku.config({speed:e.value})}})}createSlider({min:t,max:e,container:i,findIndex:a,onChange:n,steps:o=[]}){let{query:s,clamp:r,setStyle:l}=this.utils;l(i,"touch-action","none"),i.innerHTML=`
${o.map(()=>'
').join("")}
${o.map(t=>t.hide?"":`
${t.name}
`).join("")}
`;let d=s(".apd-slider-dot",i),p=s(".apd-slider-progress",i),u=!1;function h(i=a()){if(ie)return;let s=(i-t)/(e-t);d.style.left=`${100*s}%`,0===o.length&&(p.style.width=d.style.left),n(i)}function m(a){let{top:n,height:o,left:s,width:l}=i.getBoundingClientRect();this.art.isRotate?h(Math.round(r(a.clientY-n,0,o)/o*(e-t)+t)):h(Math.round(r(a.clientX-s,0,l)/l*(e-t)+t))}return this.art.proxy(i,"click",t=>{m.call(this,t)}),this.art.proxy(i,"pointerdown",t=>{u=0===t.button}),this.art.proxy(document,"pointermove",t=>{u&&m.call(this,t)}),this.art.proxy(document,"pointerup",t=>{u&&(u=!1,m.call(this,t))}),{reset:h}}onFullscreen(t){let{$danmuku:e,$controlsCenter:i,$mount:a}=this.template;this.outside?t?this.append(i,e):this.append(a,e):this.append(i,e)}onMouseEnter({$control:t,$panel:e}){let{$player:i}=this.art.template,a=t.getBoundingClientRect(),n=e.getBoundingClientRect(),o=i.getBoundingClientRect(),s=n.width/2-a.width/2,r=o.left-(a.left-s),l=a.right+s-o.right;r>0?e.style.left=`${-s+r}px`:l>0?e.style.left=`${-s-l}px`:e.style.left=`${-s}px`}async emit(){let{$input:t}=this.template,e=t.value.trim();if(!e.length||this.isLock||this.emitting)return;let i={text:e,mode:this.option.mode,color:this.option.color,time:this.art.currentTime};try{this.emitting=!0;let e=await this.option.beforeEmit(i);if(this.emitting=!1,!0!==e)return;i.border=!0,delete i.time,this.danmuku.emit(i),t.value="",this.lock()}catch(t){console.error("Error emitting danmuku:",t),this.emitting=!1}}lock(){let{addClass:t}=this.utils,{$send:e}=this.template;this.isLock=!0;let i=this.option.lockTime;e.textContent=i,t(e,"apd-lock");let a=()=>{this.timer=setTimeout(()=>{0===i?this.unlock():(e.textContent=i-=1,a())},1e3)};a()}unlock(){let{removeClass:t}=this.utils,{$send:e}=this.template;clearTimeout(this.timer),this.isLock=!1,e.textContent="发送",t(e,"apd-lock")}resize(){if(this.outside||this.art.fullscreen||this.art.fullscreenWeb)return;let{$player:t,$controlsCenter:e}=this.art.template,{$danmuku:i}=this.template;this.art.widtht.dataset.color===this.option.color.toUpperCase());n&&t(n,"apd-active"),e(i,this.option.visible?"关闭弹幕":"打开弹幕"),this.resize()}mount(t){let{errorHandle:e}=this.utils,i="string"==typeof t?document.querySelector(t):t;e(i,`Can not find the mount point: ${t}`),this.append(i,this.template.$danmuku),this.template.$mount=i,this.reset()}},"undefined"!=typeof document){let t="artplayer-plugin-danmuku",e=document.getElementById(t);e||((e=document.createElement("style")).id=t,"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{document.head.appendChild(e)}):(document.head||document.documentElement).appendChild(e)),e.textContent=T.default}},{"bundle-text:./img/check_off.svg":"4tC1X","bundle-text:./img/check_on.svg":"iQql8","bundle-text:./img/config.svg":"DK7bp","bundle-text:./img/mode_0_off.svg":"fp5qd","bundle-text:./img/mode_0_on.svg":"fYNQe","bundle-text:./img/mode_1_off.svg":"gQMgY","bundle-text:./img/mode_1_on.svg":"5E8Hg","bundle-text:./img/mode_2_off.svg":"89iSb","bundle-text:./img/mode_2_on.svg":"2YEb0","bundle-text:./img/off.svg":"3WiJz","bundle-text:./img/on.svg":"5XkVj","bundle-text:./img/style.svg":"h2xX3","bundle-text:./style.less":"dHTK8","@parcel/transformer-js/src/esmodule-helpers.js":"5lQoW"}],"4tC1X":[function(t,e,i,a){e.exports=''},{}],iQql8:[function(t,e,i,a){e.exports=''},{}],DK7bp:[function(t,e,i,a){e.exports=''},{}],fp5qd:[function(t,e,i,a){e.exports=''},{}],fYNQe:[function(t,e,i,a){e.exports=''},{}],gQMgY:[function(t,e,i,a){e.exports=''},{}],"5E8Hg":[function(t,e,i,a){e.exports=''},{}],"89iSb":[function(t,e,i,a){e.exports=''},{}],"2YEb0":[function(t,e,i,a){e.exports=''},{}],"3WiJz":[function(t,e,i,a){e.exports=''},{}],"5XkVj":[function(t,e,i,a){e.exports=''},{}],h2xX3:[function(t,e,i,a){e.exports=''},{}],dHTK8:[function(t,e,i,a){e.exports='.artplayer-plugin-danmuku{z-index:99;color:#fff;flex-shrink:0;justify-content:center;align-items:center;gap:10px;width:100%;height:32px;font-size:12px;font-weight:300;display:flex;position:relative}.artplayer-plugin-danmuku .apd-icon{cursor:pointer;opacity:.75;fill:#fff;transition:all .2s}.artplayer-plugin-danmuku .apd-icon:hover{opacity:1}.artplayer-plugin-danmuku .apd-config{display:flex;position:relative}.artplayer-plugin-danmuku .apd-config .apd-config-panel{opacity:0;pointer-events:none;width:320px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-config .apd-config-panel .apd-config-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-config:hover .apd-config-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-config-mode,.artplayer-plugin-danmuku .apd-config-slider,.artplayer-plugin-danmuku .apd-config-other,.artplayer-plugin-danmuku .apd-style-mode{margin-bottom:15px}.artplayer-plugin-danmuku .apd-modes{align-items:center;gap:20px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-modes .apd-mode{cursor:pointer;text-align:center}.artplayer-plugin-danmuku .apd-modes .apd-mode:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-config-slider{align-items:center;gap:12px;display:flex}.artplayer-plugin-danmuku .apd-config-slider .apd-value{text-align:right;width:32px}.artplayer-plugin-danmuku .apd-slider{cursor:pointer;flex:1;justify-content:center;align-items:center;height:20px;display:flex;position:relative}.artplayer-plugin-danmuku .apd-slider .apd-slider-line{background-color:#ffffff40;border-radius:3px;width:100%;height:2px;position:relative;overflow:hidden}.artplayer-plugin-danmuku .apd-slider .apd-slider-points{justify-content:space-between;align-items:center;display:flex;position:absolute;inset:0}.artplayer-plugin-danmuku .apd-slider .apd-slider-points .apd-slider-point{background-color:#ffffff80;border-radius:50%;width:2px;height:2px}.artplayer-plugin-danmuku .apd-slider .apd-slider-progress{background-color:#00a1d6;width:0%;height:100%}.artplayer-plugin-danmuku .apd-slider .apd-slider-dot{background-color:#00a1d6;border-radius:50%;width:12px;height:12px;position:absolute;left:0%;transform:translate(-6px)}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps{color:#777;justify-content:space-between;align-items:center;width:calc(100% + 32px);display:flex;position:absolute;bottom:-12px}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps .apd-slider-step{text-align:center;flex-shrink:0;width:36px;scale:.95}.artplayer-plugin-danmuku .apd-config-other{align-items:center;gap:20px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-check-off,.artplayer-plugin-danmuku .apd-config-other .apd-check-on{width:16px;height:16px}.artplayer-plugin-danmuku .apd-config-other .apd-other{cursor:pointer;align-items:center;gap:2px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-other:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-emitter{background-color:#ffffff40;border-radius:5px;flex:1;align-items:center;height:100%;display:flex}.artplayer-plugin-danmuku .apd-style{justify-content:center;align-items:center;display:flex;position:relative}.artplayer-plugin-danmuku .apd-style .apd-style-panel{opacity:0;pointer-events:none;width:200px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-style .apd-style-panel .apd-style-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-style:hover .apd-style-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-colors{flex-wrap:wrap;gap:8px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-colors .apd-color{cursor:pointer;border-radius:2px;width:16px;height:16px}.artplayer-plugin-danmuku .apd-colors .apd-color.apd-active{border:1px solid #000;box-shadow:0 0 0 1px #fff}.artplayer-plugin-danmuku .apd-input{color:#fff;background-color:#0000;border:none;outline:none;flex:1;width:auto;min-width:0;height:100%;line-height:1}.artplayer-plugin-danmuku .apd-input::placeholder{color:#ffffff80}.artplayer-plugin-danmuku .apd-send{cursor:pointer;width:60px;height:100%;text-shadow:none;background-color:#00a1d6;border-top-right-radius:5px;border-bottom-right-radius:5px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.artplayer-plugin-danmuku .apd-send.apd-lock{cursor:not-allowed;color:#666;background-color:#e7e7e7}.art-controls-center .apd-emitter{flex:none;width:260px}.art-fullscreen .artplayer-plugin-danmuku,.art-fullscreen-web .artplayer-plugin-danmuku{gap:16px;height:38px}.art-fullscreen .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen-web .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-on,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-on{width:28px;height:28px}.art-fullscreen .artplayer-plugin-danmuku .apd-emitter,.art-fullscreen-web .artplayer-plugin-danmuku .apd-emitter{flex:none;width:400px}.art-video-player>.artplayer-plugin-danmuku{padding:0 10px;position:absolute;bottom:-40px;left:0;right:0}.art-video-player:has(>.artplayer-plugin-danmuku){margin-bottom:40px}[data-danmuku-emitter=false] .apd-emitter{display:none!important}[data-danmuku-emitter=false] .art-controls-center .artplayer-plugin-danmuku{justify-content:flex-end;gap:18px}[data-danmuku-emitter=false].art-fullscreen .art-controls-center .artplayer-plugin-danmuku,[data-danmuku-emitter=false].art-fullscreen-web .art-controls-center .artplayer-plugin-danmuku{gap:24px}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-icon{fill:#333}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-emitter{background-color:#f1f2f3}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input{color:#000}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input::placeholder{color:#0000004d}[data-danmuku-visible=false] .apd-toggle-off{display:block}[data-danmuku-visible=false] .apd-toggle-on,[data-danmuku-visible=true] .apd-toggle-off{display:none}[data-danmuku-visible=true] .apd-toggle-on{display:block}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-on{display:none}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-off,[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-on{display:block}[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-off,[data-danmuku-sync-video=false] .apd-sync-video .apd-check-on{display:none}[data-danmuku-sync-video=false] .apd-sync-video .apd-check-off,[data-danmuku-sync-video=true] .apd-sync-video .apd-check-on{display:block}[data-danmuku-sync-video=true] .apd-sync-video .apd-check-off{display:none}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-off{display:block}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-on{display:none}[data-danmuku-mode0=false] .art-danmuku [data-mode="0"]{opacity:0!important}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-off{display:none}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-on{display:block}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"]{color:#00a1d6}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"] path{fill:#00a1d6}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-off{display:block}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-on{display:none}[data-danmuku-mode1=false] .art-danmuku [data-mode="1"]{opacity:0!important}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-off{display:none}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-on{display:block}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"]{color:#00a1d6}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"] path{fill:#00a1d6}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-off{display:block}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-on{display:none}[data-danmuku-mode2=false] .art-danmuku [data-mode="2"]{opacity:0!important}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-off{display:none}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-on{display:block}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"]{color:#00a1d6}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"] path{fill:#00a1d6}'},{}]},["6ZbtA"],"6ZbtA","parcelRequire4dc0",{});let{default:t}=parcelRequire4dc0("6ZbtA");export{t as default}; +!function(t,e,i,a,n,o,s,r){var l="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},d="function"==typeof l[a]&&l[a],p=d.i||{},u=d.cache||{},h="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function m(e,i){if(!u[e]){if(!t[e]){if(n[e])return n[e];var o="function"==typeof l[a]&&l[a];if(!i&&o)return o(e,!0);if(d)return d(e,!0);if(h&&"string"==typeof e)return h(e);var s=Error("Cannot find module '"+e+"'");throw s.code="MODULE_NOT_FOUND",s}p.resolve=function(i){var a=t[e][1][i];return null!=a?a:i},p.cache={};var r=u[e]=new m.Module(e);t[e][0].call(r.exports,p,r,r.exports,l)}return u[e].exports;function p(t){var e=p.resolve(t);return!1===e?{}:m(e)}}m.isParcelRequire=!0,m.Module=function(t){this.id=t,this.bundle=m,this.require=h,this.exports={}},m.modules=t,m.cache=u,m.parent=d,m.distDir=void 0,m.publicUrl=void 0,m.devServer=void 0,m.i=p,m.register=function(e,i){t[e]=[function(t,e){e.exports=i},{}]},Object.defineProperty(m,"root",{get:function(){return l[a]}}),l[a]=m;for(var c=0;cu);var o=t("./danmuku"),s=n.interopDefault(o),r=t("./heatmap"),l=n.interopDefault(r),d=t("./setting"),p=n.interopDefault(d);function u(t){return e=>{let i=new(0,s.default)(e,t),a=new(0,p.default)(e,i);return i.option.heatmap&&(0,l.default)(e,i,i.option.heatmap),{name:"artplayerPluginDanmuku",emit:i.emit.bind(i),load:i.load.bind(i),config:i.config.bind(i),hide:i.hide.bind(i),show:i.show.bind(i),reset:i.reset.bind(i),mount:a.mount.bind(a),get option(){return i.option},get isHide(){return i.isHide},get isStop(){return i.isStop}}}}u.icons=p.default.icons,"undefined"!=typeof window&&(window.artplayerPluginDanmuku=u)},{"./danmuku":"6C7g0","./heatmap":"h2ayY","./setting":"90QKZ","@parcel/transformer-js/src/esmodule-helpers.js":"5lQoW"}],"6C7g0":[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i);var o=t("bundle-text:./worker"),s=n.interopDefault(o),r=t("./bilibili");class l{constructor(t,e){let{constructor:i,template:a}=t;this.utils=i.utils,this.validator=i.validator,this.$danmuku=a.$danmuku,this.$player=a.$player,this.art=t,this.queue=[],this.$refs=[],this.isStop=!1,this.isHide=!1,this.timer=null,this.index=0,this.option=l.option,this.states={wait:[],ready:[],emit:[],stop:[]},this.config(e,!0);let n=new Blob([s.default.replace("export{e as default};","")],{type:"application/javascript"});this.worker=new Worker(URL.createObjectURL(n)),this.start=this.start.bind(this),this.stop=this.stop.bind(this),this.reset=this.reset.bind(this),this.resize=this.resize.bind(this),this.destroy=this.destroy.bind(this),t.on("video:play",this.start),t.on("video:playing",this.start),t.on("video:pause",this.stop),t.on("video:waiting",this.stop),t.on("destroy",this.destroy),t.on("resize",this.resize),this.load()}static get option(){return{danmuku:[],speed:5,margin:[10,"25%"],opacity:1,color:"#FFFFFF",mode:0,modes:[0,1,2],fontSize:25,antiOverlap:!0,synchronousPlayback:!1,mount:void 0,heatmap:!1,width:512,points:[],filter:()=>!0,beforeEmit:()=>!0,beforeVisible:()=>!0,visible:!0,emitter:!0,maxLength:200,lockTime:5,theme:"dark",OPACITY:{},FONT_SIZE:{},MARGIN:{},SPEED:{},COLOR:[]}}static get scheme(){return{danmuku:"array|function|string",speed:"number",margin:"array",opacity:"number",color:"string",mode:"number",modes:"array",fontSize:"number|string",antiOverlap:"boolean",synchronousPlayback:"boolean",mount:"?htmldivelement|string",heatmap:"object|boolean",width:"number",points:"array",filter:"function",beforeEmit:"function",beforeVisible:"function",visible:"boolean",emitter:"boolean",maxLength:"number",lockTime:"number",theme:"string",OPACITY:"object",FONT_SIZE:"object",MARGIN:"object",SPEED:"object",COLOR:"array"}}static get cssText(){return` user-select: none; position: absolute; white-space: pre; pointer-events: none; perspective: 500px; display: inline-block; will-change: transform; font-weight: normal; line-height: 1.125; visibility: hidden; font-family: SimHei, "Microsoft JhengHei", Arial, Helvetica, sans-serif; text-shadow: rgb(0, 0, 0) 1px 0px 1px, rgb(0, 0, 0) 0px 1px 1px, rgb(0, 0, 0) 0px -1px 1px, rgb(0, 0, 0) -1px 0px 1px; `}get isRotate(){return this.art.plugins?.autoOrientation?.state}get marginTop(){let{clamp:t}=this.utils,e=this.option.margin[0],{clientHeight:i}=this.$player;return"number"==typeof e?t(e,0,i):"string"==typeof e&&e.endsWith("%")?t(i*(Number.parseFloat(e)/100),0,i):l.option.margin[0]}get marginBottom(){let{clamp:t}=this.utils,e=this.option.margin[1],{clientHeight:i}=this.$player;return"number"==typeof e?t(e,0,i):"string"==typeof e&&e.endsWith("%")?t(i*(Number.parseFloat(e)/100),0,i):l.option.margin[1]}get fontSize(){let{clamp:t}=this.utils,{clientHeight:e}=this.$player,i=this.option.fontSize;return"number"==typeof i?Math.round(t(i,12,e)):"string"==typeof i&&i.endsWith("%")?Math.round(t(e*(Number.parseFloat(i)/100),12,e)):l.option.fontSize}get $ref(){let t=this.$refs.pop()||document.createElement("div");return t.style.cssText=l.cssText,t.dataset.mode="",t.dataset.id="",t.className="",t}get readys(){let{currentTime:t}=this.art,e=[];return this.filter("ready",t=>e.push(t)),this.filter("wait",i=>{t+.1>=i.time&&i.time>=t-.1&&e.push(i)}),e}get visibles(){let t=[],{clientWidth:e}=this.$player,i=this.getLeft(this.$player);return this.filter("emit",a=>{let n=a.$ref.offsetTop,o=this.getLeft(a.$ref)-i,s=a.$ref.clientHeight,r=a.$ref.clientWidth,l=o+r,d=l/a.$restTime,p={};p.top=n,p.left=o,p.height=s,p.width=r,p.right=e-l,p.speed=d,p.distance=l,p.time=a.$restTime,p.mode=a.mode,t.push(p)}),t}get speed(){return this.option.synchronousPlayback&&this.art.playbackRate?this.option.speed/Number(this.art.playbackRate):this.option.speed}async load(t){let{errorHandle:e}=this.utils,i=[],a=t||this.option.danmuku;try{"function"==typeof a?i=await a():a instanceof Promise?i=await a:"string"==typeof a?i=await (0,r.bilibiliDanmuParseFromUrl)(a):Array.isArray(a)&&(i=a),e(Array.isArray(i),"Danmuku need return an array as result"),void 0===t&&(this.reset(),this.queue=[],this.states={wait:[],ready:[],emit:[],stop:[]},this.$refs=[],this.$danmuku.textContent="");for(let t=0;tJSON.stringify(this.option[e])!==JSON.stringify(t[e]))||e)&&(this.option=Object.assign({},l.option,this.option,t),this.validator(this.option,l.scheme),this.option.mode=i(this.option.mode,0,2),this.option.speed=i(this.option.speed,1,10),this.option.opacity=i(this.option.opacity,0,1),this.option.lockTime=i(this.option.lockTime,1,60),this.option.maxLength=i(this.option.maxLength,1,1e3),this.option.mount=this.option.mount||a,t.fontSize&&this.reset(),this.option.visible?this.show():this.hide(),this.art.emit("artplayerPluginDanmuku:config",this.option)),this}getLeft(t){let e=t.getBoundingClientRect();return this.isRotate?e.top:e.left}postMessage(t={}){return new Promise(e=>{t.id=Date.now(),this.worker.postMessage(t),this.worker.onmessage=i=>{let{data:a}=i;a.id===t.id&&e(a)}})}filter(t,e){let i=this.states[t]||[];for(let t=0;te!==t),t.$state=e,t.$ref&&(t.$ref.dataset.state=e),this.states[e].push(t)}makeWait(t){this.setState(t,"wait"),t.$ref&&(t.$ref.style.cssText=l.cssText,t.$ref.style.visibility="hidden",t.$ref.style.marginLeft="0px",t.$ref.style.transform="translateX(0px)",t.$ref.style.transition="transform 0s linear 0s",this.$refs.push(t.$ref),t.$ref=null)}update(){let{setStyles:t}=this.utils;return this.timer=window.requestAnimationFrame(async()=>{if(this.art.playing&&!this.isHide){this.filter("emit",t=>{let e=(Date.now()-t.$lastStartTime)/1e3;t.$restTime-=e,t.$lastStartTime=Date.now(),t.$restTime<=0&&this.makeWait(t)});let e=this.readys;for(let i=0;i{0===e.mode&&(e.$ref.style.left=`${t}px`)}),this.filter("emit",e=>{if(e.$lastStartTime=Date.now(),0===e.mode){let i=t+e.$ref.clientWidth;e.$ref.style.left=`${t}px`,e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition=`transform ${e.$restTime}s linear 0s`}})}continue(){let{clientWidth:t}=this.$player;return this.filter("stop",e=>{if(this.setState(e,"emit"),e.$lastStartTime=Date.now(),0===e.mode){let i=t+e.$ref.clientWidth;e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition=`transform ${e.$restTime}s linear 0s`}}),this}suspend(){let{clientWidth:t}=this.$player;return this.filter("emit",e=>{if(this.setState(e,"stop"),0===e.mode){let i=t-(this.getLeft(e.$ref)-this.getLeft(this.$player));e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition="transform 0s linear 0s"}}),this}stop(){return this.isStop=!0,this.suspend(),window.cancelAnimationFrame(this.timer),this.art.emit("artplayerPluginDanmuku:stop"),this}start(){return this.isStop=!1,this.continue(),this.update(),this.art.emit("artplayerPluginDanmuku:start"),this}reset(){return this.queue.forEach(t=>this.makeWait(t)),this.art.emit("artplayerPluginDanmuku:reset"),this}show(){return this.isHide=!1,this.$danmuku.style.opacity=1,this.option.visible=!0,this.art.emit("artplayerPluginDanmuku:show"),this}hide(){return this.isHide=!0,this.$danmuku.style.opacity=0,this.option.visible=!1,this.art.emit("artplayerPluginDanmuku:hide"),this}destroy(){this.stop(),this.worker.terminate(),this.art.off("video:play",this.start),this.art.off("video:playing",this.start),this.art.off("video:pause",this.stop),this.art.off("video:waiting",this.stop),this.art.off("resize",this.reset),this.art.off("destroy",this.destroy),this.art.emit("artplayerPluginDanmuku:destroy")}}i.default=l},{"bundle-text:./worker":"8UAYg","./bilibili":"8WBpY","@parcel/transformer-js/src/esmodule-helpers.js":"5lQoW"}],"8UAYg":[function(t,e,i,a){e.exports='!function(e,t,i,o,r,n,l,d){var u="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},f="function"==typeof u[o]&&u[o],p=f.i||{},s=f.cache||{},h="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function a(t,i){if(!s[t]){if(!e[t]){if(r[t])return r[t];var n="function"==typeof u[o]&&u[o];if(!i&&n)return n(t,!0);if(f)return f(t,!0);if(h&&"string"==typeof t)return h(t);var l=Error("Cannot find module \'"+t+"\'");throw l.code="MODULE_NOT_FOUND",l}p.resolve=function(i){var o=e[t][1][i];return null!=o?o:i},p.cache={};var d=s[t]=new a.Module(t);e[t][0].call(d.exports,p,d,d.exports,u)}return s[t].exports;function p(e){var t=p.resolve(e);return!1===t?{}:a(t)}}a.isParcelRequire=!0,a.Module=function(e){this.id=e,this.bundle=a,this.require=h,this.exports={}},a.modules=e,a.cache=s,a.parent=f,a.distDir=void 0,a.publicUrl=void 0,a.devServer=void 0,a.i=p,a.register=function(t,i){e[t]=[function(e,t){t.exports=i},{}]},Object.defineProperty(a,"root",{get:function(){return u[o]}}),u[o]=a;for(var c=0;ct.mode===e.mode&&t.top<=d).sort((e,t)=>e.top-t.top);if(0===u.length)if(2===e.mode)return d-e.height;else return n;if(u.unshift({type:"top",top:0,left:0,right:0,height:n,width:i,speed:0,distance:i}),u.push({type:"bottom",top:d,left:0,right:0,height:r,width:i,speed:0,distance:i}),2===e.mode)for(let t=u.length-2;t>=0;t-=1){let i=u[t],o=u[t+1],r=i.top+i.height;if(o.top-r>=e.height)return o.top-e.height}else for(let t=1;t=e.height)return r}let f=[];for(let e=1;et.every(t=>!(it.time))));return t&&t[0]?t[0].top:void 0}case 1:case 2:return}else{switch(e.mode){case 0:f.sort((e,t)=>{let i=Math.min(...t.map(e=>e.right)),o=Math.min(...e.map(e=>e.right));return i*t.length-o*e.length});break;case 1:case 2:f.sort((e,t)=>{let i=Math.max(...t.map(e=>e.width));return Math.max(...e.map(e=>e.width))*e.length-i*t.length})}return f[0][0].top}}onmessage=e=>{let{data:t}=e;t.id&&t.type&&globalThis.postMessage({result:(0,({getDanmuTop:r})[t.type])(t),id:t.id})}},{}]},["4KwZ6"],"4KwZ6","parcelRequire4dc0",{});let{"*":e}=parcelRequire4dc0("4KwZ6");export{e as default};'},{}],"8WBpY":[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");function o(t){switch(t){case 1:case 2:case 3:default:return 0;case 4:return 2;case 5:return 1}}function s(t){return"string"!=typeof t?[]:Array.from(t.matchAll(/]*?p="(?

[^"]+)"[^>]*>(?.*?)<\/d>/gs)).map(t=>{let e=t.groups.p.split(",");return e.length>=8?{text:t.groups.text.trim().replaceAll(""",'"').replaceAll("'","'").replaceAll("<","<").replaceAll(">",">").replaceAll("&","&"),time:Number(e[0]),mode:o(Number(e[1])),fontSize:Number(e[2]),color:`#${Number(e[3]).toString(16)}`,timestamp:Number(e[4]),pool:Number(e[5]),userID:e[6],rowID:Number(e[7])}:null}).filter(Boolean)}function r({data:t}){let{xml:e,id:i}=t;i&&e&&globalThis.postMessage({danmus:s(e),id:i})}function l(t){return new Promise(async e=>{let i=await fetch(t),a=await i.text();try{let t=function(){let t=new Blob([` ${o.toString()} ${s.toString()} onmessage = ${r.toString()} `],{type:"application/javascript"});return new Worker(URL.createObjectURL(t))}();t.onmessage=i=>{let{danmus:a,id:n}=i.data;n&&a&&(e(a),t.terminate())},t.postMessage({xml:a,id:Date.now()})}catch(t){console.error("Error parsing Bilibili Danmu:",t),e(s(a))}})}n.defineInteropFlag(i),n.export(i,"bilibiliDanmuParseFromUrl",()=>l)},{"@parcel/transformer-js/src/esmodule-helpers.js":"5lQoW"}],"5lQoW":[function(t,e,i,a){i.interopDefault=function(t){return t&&t.__esModule?t:{default:t}},i.defineInteropFlag=function(t){Object.defineProperty(t,"__esModule",{value:!0})},i.exportAll=function(t,e){return Object.keys(t).forEach(function(i){"default"===i||"__esModule"===i||Object.prototype.hasOwnProperty.call(e,i)||Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[i]}})}),e},i.export=function(t,e,i){Object.defineProperty(t,e,{enumerable:!0,get:i})}},{}],h2ayY:[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i),n.export(i,"default",()=>s);let o={map:(t,e,i,a,n)=>(t-e)*(n-a)/(i-e)+a,range(t,e,i){let a=Math.round(t/i)*i;return Array.from({length:Math.floor((e-t)/i)},(t,e)=>e*i+a)}};function s(t,e,i){let{query:a}=t.constructor.utils;t.controls.add({name:"heatmap",position:"top",html:"",style:{position:"absolute",top:"-100px",left:"0px",right:"0px",height:"100px",width:"100%",pointerEvents:"none"},mounted(n){let s=null,r=null;function l(d=[]){if(s=null,r=null,n.innerHTML="",!t.duration||t.option.isLive)return;let p={w:n.offsetWidth,h:n.offsetHeight},u={xMin:0,xMax:p.w,yMin:0,yMax:128,scale:.25,opacity:.2,minHeight:Math.floor(.05*p.h),sampling:Math.floor(p.w/100),smoothing:.2,flattening:.2};"object"==typeof i&&Object.assign(u,i);let h=[];if(Array.isArray(d)&&d.length)h=[...d];else{let i=t.duration/p.w;for(let t=0;t<=p.w;t+=u.sampling){let a=e.queue.filter(({time:e})=>e>t*i&&e<=(t+u.sampling)*i).length;h.push([t,a])}}if(0===h.length)return;let m=h[h.length-1],c=m[0],f=m[1];c!==p.w&&h.push([p.w,f]);let g=h.map(t=>t[1]),y=(Math.min(...g)+Math.max(...g))/2;for(let t=0;ty?1+u.scale:1-u.scale)+u.minHeight}let v=(t,e,i,a)=>{let n=function(t,e){let i=e[0]-t[0],a=e[1]-t[1];return{length:Math.sqrt(i**2+a**2),angle:Math.atan2(a,i)}}(e||t,i||t),s=o.map(Math.cos(n.angle)*u.flattening,0,1,1,0),r=n.angle*s+(a?Math.PI:0),l=n.length*u.smoothing;return[t[0]+Math.cos(r)*l,t[1]+Math.sin(r)*l]},x=h.map(t=>[o.map(t[0],u.xMin,u.xMax,0,p.w),o.map(t[1],u.yMin,u.yMax,p.h,0)]).reduce((t,e,i,a)=>0===i?`M ${a[a.length-1][0]},${p.h} L ${e[0]},${p.h} L ${e[0]},${e[1]}`:`${t} ${((t,e,i)=>{let a=v(i[e-1],i[e-2],t),n=v(t,i[e-1],i[e+1],!0),o=e===i.length-1?" z":"";return`C ${a[0]},${a[1]} ${n[0]},${n[1]} ${t[0]},${t[1]}${o}`})(e,i,a)}`,"");n.innerHTML=``,s=a("#heatmap-start",n),r=a("#heatmap-stop",n),s.setAttribute("offset",`${100*t.played}%`),r.setAttribute("offset",`${100*t.played}%`)}t.on("video:timeupdate",()=>{s&&r&&(s.setAttribute("offset",`${100*t.played}%`),r.setAttribute("offset",`${100*t.played}%`))}),t.on("setBar",(t,e)=>{s&&r&&"played"===t&&(s.setAttribute("offset",`${100*e}%`),r.setAttribute("offset",`${100*e}%`))}),t.on("ready",()=>l()),t.on("resize",()=>l()),t.on("artplayerPluginDanmuku:loaded",()=>l()),t.on("artplayerPluginDanmuku:points",t=>l(t))}})}},{"@parcel/transformer-js/src/esmodule-helpers.js":"5lQoW"}],"90QKZ":[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i);var o=t("bundle-text:./img/check_off.svg"),s=n.interopDefault(o),r=t("bundle-text:./img/check_on.svg"),l=n.interopDefault(r),d=t("bundle-text:./img/config.svg"),p=n.interopDefault(d),u=t("bundle-text:./img/mode_0_off.svg"),h=n.interopDefault(u),m=t("bundle-text:./img/mode_0_on.svg"),c=n.interopDefault(m),f=t("bundle-text:./img/mode_1_off.svg"),g=n.interopDefault(f),y=t("bundle-text:./img/mode_1_on.svg"),v=n.interopDefault(y),x=t("bundle-text:./img/mode_2_off.svg"),k=n.interopDefault(x),b=t("bundle-text:./img/mode_2_on.svg"),$=n.interopDefault(b),w=t("bundle-text:./img/off.svg"),M=n.interopDefault(w),D=t("bundle-text:./img/on.svg"),S=n.interopDefault(D),E=t("bundle-text:./img/style.svg"),A=n.interopDefault(E),q=t("bundle-text:./style.less"),T=n.interopDefault(q);if(i.default=class{constructor(t,e){this.art=t,this.danmuku=e,this.utils=t.constructor.utils;let{setStyle:i}=this.utils,{$controlsCenter:a}=t.template;i(a,"display","flex"),this.template={$controlsCenter:a,$mount:a,$danmuku:null,$toggle:null,$config:null,$configPanel:null,$configModes:null,$style:null,$stylePanel:null,$styleModes:null,$colors:null,$opacitySlider:null,$opacityValue:null,$marginSlider:null,$marginValue:null,$fontSizeSlider:null,$fontSizeValue:null,$speedSlider:null,$speedValue:null,$input:null,$send:null},this.slider={opacity:null,margin:null,fontSize:null,speed:null},this.emitting=!1,this.isLock=!1,this.timer=null,this.createTemplate(),this.createSliders(),this.createEvents(),this.mount(this.option.mount),t.on("resize",()=>this.resize()),t.on("fullscreen",t=>this.onFullscreen(t)),t.on("fullscreenWeb",t=>this.onFullscreen(t)),t.proxy(this.template.$config,"mouseenter",()=>{this.onMouseEnter({$control:this.template.$config,$panel:this.template.$configPanel})}),t.proxy(this.template.$style,"mouseenter",()=>{this.onMouseEnter({$control:this.template.$style,$panel:this.template.$stylePanel})})}static get icons(){return{$on:S.default,$off:M.default,$config:p.default,$style:A.default,$mode_0_off:h.default,$mode_0_on:c.default,$mode_1_off:g.default,$mode_1_on:v.default,$mode_2_off:k.default,$mode_2_on:$.default,$check_on:l.default,$check_off:s.default}}get option(){return this.danmuku.option}get outside(){return this.template.$mount!==this.template.$controlsCenter}get TEMPLATE(){let{option:t}=this;return`

${S.default}${M.default}
${p.default}
\u{6309}\u{7C7B}\u{578B}\u{5C4F}\u{853D}
${h.default}${c.default}
\u{6EDA}\u{52A8}
${g.default}${v.default}
\u{9876}\u{90E8}
${k.default}${$.default}
\u{5E95}\u{90E8}
${l.default}${s.default} \u{9632}\u{6B62}\u{5F39}\u{5E55}\u{91CD}\u{53E0}
${l.default}${s.default} \u{540C}\u{6B65}\u{89C6}\u{9891}\u{901F}\u{5EA6}
\u{4E0D}\u{900F}\u{660E}\u{5EA6}
\u{672A}\u{77E5}
\u{663E}\u{793A}\u{533A}\u{57DF}
\u{672A}\u{77E5}
\u{5F39}\u{5E55}\u{5B57}\u{53F7}
\u{672A}\u{77E5}
\u{5F39}\u{5E55}\u{901F}\u{5EA6}
\u{672A}\u{77E5}
${A.default}
\u{6A21}\u{5F0F}
${c.default}
\u{6EDA}\u{52A8}
${v.default}
\u{9876}\u{90E8}
${$.default}
\u{5E95}\u{90E8}
\u{989C}\u{8272}
${this.COLOR.map(t=>`
`).join("")}
\u{53D1}\u{9001}
`}get OPACITY(){return{min:0,max:100,steps:[],...this.option.OPACITY}}get FONT_SIZE(){return{min:12,max:120,steps:[],...this.option.FONT_SIZE}}get MARGIN(){return{min:0,max:3,steps:[{name:"1/4",value:[10,"75%"]},{name:"半屏",value:[10,"50%"]},{name:"3/4",value:[10,"25%"]},{name:"满屏",value:[10,10]}],...this.option.MARGIN}}get SPEED(){return{min:0,max:4,steps:[{name:"极慢",value:10},{name:"较慢",value:7.5,hide:!0},{name:"适中",value:5},{name:"较快",value:2.5,hide:!0},{name:"极快",value:1}],...this.option.SPEED}}get COLOR(){return this.option.COLOR.length?this.option.COLOR:["#FE0302","#FF7204","#FFAA02","#FFD302","#FFFF00","#A0EE00","#00CD00","#019899","#4266BE","#89D5FF","#CC0273","#222222","#9B9B9B","#FFFFFF"]}query(t){let{query:e}=this.utils,{$danmuku:i}=this.template;return e(t,i)}append(t,e){let{append:i}=this.utils;[...t.children].includes(e)||i(t,e)}setData(t,e){let{$player:i}=this.art.template,{$mount:a}=this.template;i.dataset[t]=e,this.outside&&(a.dataset[t]=e)}createTemplate(){let{createElement:t,tooltip:e}=this.utils,i=t("div");i.className="artplayer-plugin-danmuku",i.innerHTML=this.TEMPLATE,this.template.$danmuku=i,this.template.$toggle=this.query(".apd-toggle"),this.template.$config=this.query(".apd-config"),this.template.$configPanel=this.query(".apd-config-panel"),this.template.$configModes=this.query(".apd-config-mode .apd-modes"),this.template.$style=this.query(".apd-style"),this.template.$stylePanel=this.query(".apd-style-panel"),this.template.$styleModes=this.query(".apd-style-mode .apd-modes"),this.template.$colors=this.query(".apd-colors"),this.template.$antiOverlap=this.query(".apd-anti-overlap"),this.template.$syncVideo=this.query(".apd-sync-video"),this.template.$opacitySlider=this.query(".apd-config-opacity .apd-slider"),this.template.$opacityValue=this.query(".apd-config-opacity .apd-value"),this.template.$marginSlider=this.query(".apd-config-margin .apd-slider"),this.template.$marginValue=this.query(".apd-config-margin .apd-value"),this.template.$fontSizeSlider=this.query(".apd-config-fontSize .apd-slider"),this.template.$fontSizeValue=this.query(".apd-config-fontSize .apd-value"),this.template.$speedSlider=this.query(".apd-config-speed .apd-slider"),this.template.$speedValue=this.query(".apd-config-speed .apd-value"),this.template.$input=this.query(".apd-input"),this.template.$send=this.query(".apd-send");let{$toggle:a}=this.template;this.art.on("artplayerPluginDanmuku:show",()=>{e(a,"关闭弹幕")}),this.art.on("artplayerPluginDanmuku:hide",()=>{e(a,"打开弹幕")})}createEvents(){let{$toggle:t,$configModes:e,$styleModes:i,$colors:a,$antiOverlap:n,$syncVideo:o,$send:s,$input:r}=this.template;this.art.proxy(t,"click",()=>{this.danmuku.config({visible:!this.option.visible}),this.reset()}),this.art.proxy(e,"click",t=>{let e=t.target.closest(".apd-mode");if(!e)return;let i=Number(e.dataset.mode);this.option.modes.includes(i)?this.danmuku.config({modes:this.option.modes.filter(t=>t!==i)}):this.danmuku.config({modes:[...this.option.modes,i]}),this.reset()}),this.art.proxy(n,"click",()=>{this.danmuku.config({antiOverlap:!this.option.antiOverlap}),this.reset()}),this.art.proxy(o,"click",()=>{this.danmuku.config({synchronousPlayback:!this.option.synchronousPlayback}),this.reset()}),this.art.proxy(i,"click",t=>{let e=t.target.closest(".apd-mode");if(!e)return;let i=Number(e.dataset.mode);this.danmuku.config({mode:i}),this.reset()}),this.art.proxy(a,"click",t=>{let e=t.target.closest(".apd-color");e&&(this.danmuku.config({color:e.dataset.color}),this.reset())}),this.art.proxy(s,"click",()=>this.emit()),this.art.proxy(r,"keypress",t=>{"Enter"===t.key&&(t.preventDefault(),this.emit())})}createSliders(){this.slider.opacity=this.createSlider({...this.OPACITY,container:this.template.$opacitySlider,findIndex:()=>Math.round(100*this.option.opacity),onChange:t=>{let{$opacityValue:e}=this.template;e.textContent=`${t}%`,this.danmuku.config({opacity:t/100})}}),this.slider.margin=this.createSlider({...this.MARGIN,container:this.template.$marginSlider,findIndex:()=>this.MARGIN.steps.findIndex(t=>t.value[0]===this.option.margin[0]&&t.value[1]===this.option.margin[1]),onChange:t=>{let e=this.MARGIN.steps[t];if(!e)return;let{$marginValue:i}=this.template;i.textContent=e.name,this.danmuku.config({margin:e.value})}}),this.slider.fontSize=this.createSlider({...this.FONT_SIZE,container:this.template.$fontSizeSlider,findIndex:()=>this.danmuku.fontSize,onChange:t=>{let{$fontSizeValue:e}=this.template;e.textContent=`${t}px`,t!==this.danmuku.fontSize&&this.danmuku.config({fontSize:t})}}),this.slider.speed=this.createSlider({...this.SPEED,container:this.template.$speedSlider,findIndex:()=>this.SPEED.steps.findIndex(t=>t.value===this.option.speed),onChange:t=>{let e=this.SPEED.steps[t];if(!e)return;let{$speedValue:i}=this.template;i.textContent=e.name,this.danmuku.config({speed:e.value})}})}createSlider({min:t,max:e,container:i,findIndex:a,onChange:n,steps:o=[]}){let{query:s,clamp:r,setStyle:l}=this.utils;l(i,"touch-action","none"),i.innerHTML=`
${o.map(()=>'
').join("")}
${o.map(t=>t.hide?"":`
${t.name}
`).join("")}
`;let d=s(".apd-slider-dot",i),p=s(".apd-slider-progress",i),u=!1;function h(i=a()){if(ie)return;let s=(i-t)/(e-t);d.style.left=`${100*s}%`,0===o.length&&(p.style.width=d.style.left),n(i)}function m(a){let{top:n,height:o,left:s,width:l}=i.getBoundingClientRect();this.art.isRotate?h(Math.round(r(a.clientY-n,0,o)/o*(e-t)+t)):h(Math.round(r(a.clientX-s,0,l)/l*(e-t)+t))}return this.art.proxy(i,"click",t=>{m.call(this,t)}),this.art.proxy(i,"pointerdown",t=>{u=0===t.button}),this.art.proxy(document,"pointermove",t=>{u&&m.call(this,t)}),this.art.proxy(document,"pointerup",t=>{u&&(u=!1,m.call(this,t))}),{reset:h}}onFullscreen(t){let{$danmuku:e,$controlsCenter:i,$mount:a}=this.template;this.outside?t?this.append(i,e):this.append(a,e):this.append(i,e)}onMouseEnter({$control:t,$panel:e}){let{$player:i}=this.art.template,a=t.getBoundingClientRect(),n=e.getBoundingClientRect(),o=i.getBoundingClientRect(),s=n.width/2-a.width/2,r=o.left-(a.left-s),l=a.right+s-o.right;r>0?e.style.left=`${-s+r}px`:l>0?e.style.left=`${-s-l}px`:e.style.left=`${-s}px`}async emit(){let{$input:t}=this.template,e=t.value.trim();if(!e.length||this.isLock||this.emitting)return;let i={text:e,mode:this.option.mode,color:this.option.color,time:this.art.currentTime};try{this.emitting=!0;let e=await this.option.beforeEmit(i);if(this.emitting=!1,!0!==e)return;i.border=!0,delete i.time,this.danmuku.emit(i),t.value="",this.lock()}catch(t){console.error("Error emitting danmuku:",t),this.emitting=!1}}lock(){let{addClass:t}=this.utils,{$send:e}=this.template;this.isLock=!0;let i=this.option.lockTime;e.textContent=i,t(e,"apd-lock");let a=()=>{this.timer=setTimeout(()=>{0===i?this.unlock():(e.textContent=i-=1,a())},1e3)};a()}unlock(){let{removeClass:t}=this.utils,{$send:e}=this.template;clearTimeout(this.timer),this.isLock=!1,e.textContent="发送",t(e,"apd-lock")}resize(){if(this.outside||this.art.fullscreen||this.art.fullscreenWeb)return;let{$player:t,$controlsCenter:e}=this.art.template,{$danmuku:i}=this.template;this.art.widtht.dataset.color===this.option.color.toUpperCase());n&&t(n,"apd-active"),e(i,this.option.visible?"关闭弹幕":"打开弹幕"),this.resize()}mount(t){let{errorHandle:e}=this.utils,i="string"==typeof t?document.querySelector(t):t;e(i,`Can not find the mount point: ${t}`),this.append(i,this.template.$danmuku),this.template.$mount=i,this.reset()}},"undefined"!=typeof document){let t="artplayer-plugin-danmuku",e=document.getElementById(t);e||((e=document.createElement("style")).id=t,"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{document.head.appendChild(e)}):(document.head||document.documentElement).appendChild(e)),e.textContent=T.default}},{"bundle-text:./img/check_off.svg":"4tC1X","bundle-text:./img/check_on.svg":"iQql8","bundle-text:./img/config.svg":"DK7bp","bundle-text:./img/mode_0_off.svg":"fp5qd","bundle-text:./img/mode_0_on.svg":"fYNQe","bundle-text:./img/mode_1_off.svg":"gQMgY","bundle-text:./img/mode_1_on.svg":"5E8Hg","bundle-text:./img/mode_2_off.svg":"89iSb","bundle-text:./img/mode_2_on.svg":"2YEb0","bundle-text:./img/off.svg":"3WiJz","bundle-text:./img/on.svg":"5XkVj","bundle-text:./img/style.svg":"h2xX3","bundle-text:./style.less":"dHTK8","@parcel/transformer-js/src/esmodule-helpers.js":"5lQoW"}],"4tC1X":[function(t,e,i,a){e.exports=''},{}],iQql8:[function(t,e,i,a){e.exports=''},{}],DK7bp:[function(t,e,i,a){e.exports=''},{}],fp5qd:[function(t,e,i,a){e.exports=''},{}],fYNQe:[function(t,e,i,a){e.exports=''},{}],gQMgY:[function(t,e,i,a){e.exports=''},{}],"5E8Hg":[function(t,e,i,a){e.exports=''},{}],"89iSb":[function(t,e,i,a){e.exports=''},{}],"2YEb0":[function(t,e,i,a){e.exports=''},{}],"3WiJz":[function(t,e,i,a){e.exports=''},{}],"5XkVj":[function(t,e,i,a){e.exports=''},{}],h2xX3:[function(t,e,i,a){e.exports=''},{}],dHTK8:[function(t,e,i,a){e.exports='.artplayer-plugin-danmuku{z-index:99;color:#fff;flex-shrink:0;justify-content:center;align-items:center;gap:10px;width:100%;height:32px;font-size:12px;font-weight:300;display:flex;position:relative}.artplayer-plugin-danmuku .apd-icon{cursor:pointer;opacity:.75;fill:#fff;transition:all .2s}.artplayer-plugin-danmuku .apd-icon:hover{opacity:1}.artplayer-plugin-danmuku .apd-config{display:flex;position:relative}.artplayer-plugin-danmuku .apd-config .apd-config-panel{opacity:0;pointer-events:none;width:320px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-config .apd-config-panel .apd-config-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-config:hover .apd-config-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-config-mode,.artplayer-plugin-danmuku .apd-config-slider,.artplayer-plugin-danmuku .apd-config-other,.artplayer-plugin-danmuku .apd-style-mode{margin-bottom:15px}.artplayer-plugin-danmuku .apd-modes{align-items:center;gap:20px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-modes .apd-mode{cursor:pointer;text-align:center}.artplayer-plugin-danmuku .apd-modes .apd-mode:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-config-slider{align-items:center;gap:12px;display:flex}.artplayer-plugin-danmuku .apd-config-slider .apd-value{text-align:right;width:32px}.artplayer-plugin-danmuku .apd-slider{cursor:pointer;flex:1;justify-content:center;align-items:center;height:20px;display:flex;position:relative}.artplayer-plugin-danmuku .apd-slider .apd-slider-line{background-color:#ffffff40;border-radius:3px;width:100%;height:2px;position:relative;overflow:hidden}.artplayer-plugin-danmuku .apd-slider .apd-slider-points{justify-content:space-between;align-items:center;display:flex;position:absolute;inset:0}.artplayer-plugin-danmuku .apd-slider .apd-slider-points .apd-slider-point{background-color:#ffffff80;border-radius:50%;width:2px;height:2px}.artplayer-plugin-danmuku .apd-slider .apd-slider-progress{background-color:#00a1d6;width:0%;height:100%}.artplayer-plugin-danmuku .apd-slider .apd-slider-dot{background-color:#00a1d6;border-radius:50%;width:12px;height:12px;position:absolute;left:0%;transform:translate(-6px)}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps{color:#777;justify-content:space-between;align-items:center;width:calc(100% + 32px);display:flex;position:absolute;bottom:-12px}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps .apd-slider-step{text-align:center;flex-shrink:0;width:36px;scale:.95}.artplayer-plugin-danmuku .apd-config-other{align-items:center;gap:20px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-check-off,.artplayer-plugin-danmuku .apd-config-other .apd-check-on{width:16px;height:16px}.artplayer-plugin-danmuku .apd-config-other .apd-other{cursor:pointer;align-items:center;gap:2px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-other:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-emitter{background-color:#ffffff40;border-radius:5px;flex:1;align-items:center;height:100%;display:flex}.artplayer-plugin-danmuku .apd-style{justify-content:center;align-items:center;display:flex;position:relative}.artplayer-plugin-danmuku .apd-style .apd-style-panel{opacity:0;pointer-events:none;width:200px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-style .apd-style-panel .apd-style-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-style:hover .apd-style-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-colors{flex-wrap:wrap;gap:8px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-colors .apd-color{cursor:pointer;border-radius:2px;width:16px;height:16px}.artplayer-plugin-danmuku .apd-colors .apd-color.apd-active{border:1px solid #000;box-shadow:0 0 0 1px #fff}.artplayer-plugin-danmuku .apd-input{color:#fff;background-color:#0000;border:none;outline:none;flex:1;width:auto;min-width:0;height:100%;line-height:1}.artplayer-plugin-danmuku .apd-input::placeholder{color:#ffffff80}.artplayer-plugin-danmuku .apd-send{cursor:pointer;width:60px;height:100%;text-shadow:none;background-color:#00a1d6;border-top-right-radius:5px;border-bottom-right-radius:5px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.artplayer-plugin-danmuku .apd-send.apd-lock{cursor:not-allowed;color:#666;background-color:#e7e7e7}.art-controls-center .apd-emitter{flex:none;width:260px}.art-fullscreen .artplayer-plugin-danmuku,.art-fullscreen-web .artplayer-plugin-danmuku{gap:16px;height:38px}.art-fullscreen .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen-web .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-on,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-on{width:28px;height:28px}.art-fullscreen .artplayer-plugin-danmuku .apd-emitter,.art-fullscreen-web .artplayer-plugin-danmuku .apd-emitter{flex:none;width:400px}.art-video-player>.artplayer-plugin-danmuku{padding:0 10px;position:absolute;bottom:-40px;left:0;right:0}.art-video-player:has(>.artplayer-plugin-danmuku){margin-bottom:40px}[data-danmuku-emitter=false] .apd-emitter{display:none!important}[data-danmuku-emitter=false] .art-controls-center .artplayer-plugin-danmuku{justify-content:flex-end;gap:18px}[data-danmuku-emitter=false].art-fullscreen .art-controls-center .artplayer-plugin-danmuku,[data-danmuku-emitter=false].art-fullscreen-web .art-controls-center .artplayer-plugin-danmuku{gap:24px}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-icon{fill:#333}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-emitter{background-color:#f1f2f3}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input{color:#000}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input::placeholder{color:#0000004d}[data-danmuku-visible=false] .apd-toggle-off{display:block}[data-danmuku-visible=false] .apd-toggle-on,[data-danmuku-visible=true] .apd-toggle-off{display:none}[data-danmuku-visible=true] .apd-toggle-on{display:block}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-on{display:none}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-off,[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-on{display:block}[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-off,[data-danmuku-sync-video=false] .apd-sync-video .apd-check-on{display:none}[data-danmuku-sync-video=false] .apd-sync-video .apd-check-off,[data-danmuku-sync-video=true] .apd-sync-video .apd-check-on{display:block}[data-danmuku-sync-video=true] .apd-sync-video .apd-check-off{display:none}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-off{display:block}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-on{display:none}[data-danmuku-mode0=false] .art-danmuku [data-mode="0"]{opacity:0!important}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-off{display:none}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-on{display:block}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"]{color:#00a1d6}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"] path{fill:#00a1d6}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-off{display:block}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-on{display:none}[data-danmuku-mode1=false] .art-danmuku [data-mode="1"]{opacity:0!important}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-off{display:none}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-on{display:block}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"]{color:#00a1d6}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"] path{fill:#00a1d6}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-off{display:block}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-on{display:none}[data-danmuku-mode2=false] .art-danmuku [data-mode="2"]{opacity:0!important}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-off{display:none}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-on{display:block}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"]{color:#00a1d6}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"] path{fill:#00a1d6}'},{}]},["6ZbtA"],"6ZbtA","parcelRequire4dc0",{});let{default:t}=parcelRequire4dc0("6ZbtA");export{t as default}; //# sourceMappingURL=artplayer-plugin-danmuku.esm.js.map \ No newline at end of file diff --git a/packages/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.esm.js.map b/packages/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.esm.js.map index 045897d8f..08a5035ab 100644 --- a/packages/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.esm.js.map +++ b/packages/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.esm.js.map @@ -1 +1 @@ -{"mappings":"C,A,S,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,E,I,E,A,a,O,W,W,A,a,O,K,K,A,a,O,O,O,A,a,O,O,O,C,E,E,A,Y,O,C,C,E,E,C,C,E,C,E,E,C,E,C,E,E,E,K,E,C,E,E,A,a,O,Q,A,Y,O,O,O,E,O,O,C,I,C,Q,S,E,C,C,C,E,G,C,C,C,E,C,C,G,C,C,C,E,C,C,G,C,C,E,C,O,C,C,E,C,I,E,A,Y,O,C,C,E,E,C,C,E,C,G,C,G,E,O,E,E,C,G,G,E,O,E,E,C,G,G,G,A,U,O,E,O,E,G,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,O,C,S,C,E,I,E,C,C,E,C,E,C,E,C,O,A,M,E,E,C,E,E,K,C,C,E,I,E,C,C,E,C,I,E,M,C,G,C,C,E,C,E,C,I,C,E,O,C,E,E,E,O,C,E,C,O,C,C,E,C,O,C,S,E,C,E,I,E,E,O,C,G,M,A,C,I,E,C,E,E,E,C,C,E,e,C,C,E,E,M,C,S,C,E,I,C,E,C,E,I,C,M,C,E,I,C,O,C,E,I,C,O,C,C,C,E,E,O,C,E,E,K,C,E,E,M,C,E,E,O,C,K,E,E,S,C,K,E,E,S,C,K,E,E,C,C,E,E,Q,C,S,C,C,C,E,C,C,E,C,C,S,C,C,C,E,E,O,C,C,E,C,E,A,E,O,c,C,E,O,C,I,W,O,C,C,E,A,C,G,C,C,E,C,E,I,I,E,E,E,E,M,C,I,E,C,C,E,E,G,E,C,I,E,E,E,A,C,U,O,S,A,a,O,O,O,O,C,E,A,Y,O,Q,O,G,E,O,W,O,C,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,E,I,E,E,kD,E,iB,C,GCIwB,EAAA,MAAA,CAAA,EAAA,UAAA,IAAA,GAJxB,IAAA,EAAA,EAAA,a,E,E,c,C,GACA,EAAA,EAAA,a,E,E,c,C,GACA,EAAA,EAAA,a,E,E,c,C,GAEe,SAAS,EAAuB,CAAM,EACnD,OAAO,AAAC,IACN,IAAM,EAAU,GAAI,CAAA,EAAA,EAAA,OAAM,AAAN,EAAQ,EAAK,GAC3B,EAAU,GAAI,CAAA,EAAA,EAAA,OAAM,AAAN,EAAQ,EAAK,GAMjC,OAJI,EAAQ,MAAM,CAAC,OAAO,EACxB,AAAA,CAAA,EAAA,EAAA,OAAO,AAAP,EAAQ,EAAK,E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Q,CAAC,QAAQ,EACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAG,EACvB,IAAI,CAAC,KAAK,EACZ,CACF,EAEI,AAAoB,aAApB,OAAO,SAA0B,CACnC,IAAM,EAAK,2BACP,EAAS,SAAS,cAAc,CAAC,GAChC,IAEH,AADA,CAAA,EAAS,SAAS,aAAa,CAAC,QAAhC,EACO,EAAE,CAAG,EACR,AAAwB,YAAxB,SAAS,UAAU,CACrB,SAAS,gBAAgB,CAAC,mBAAoB,KAC5C,SAAS,IAAI,CAAC,WAAW,CAAC,EAC5B,GAGC,AAAA,CAAA,SAAS,IAAI,EAAI,SAAS,eAAc,AAAd,EAAiB,WAAW,CAAC,IAG5D,EAAO,WAAW,CAAG,EAAA,OAAK,AAC5B,C,E,C,kC,Q,iC,Q,+B,Q,mC,Q,kC,Q,mC,Q,kC,Q,mC,Q,kC,Q,4B,Q,2B,Q,8B,Q,2B,Q,iD,O,E,C,Q,C,S,C,C,C,C,C,C,C,EC5vBA,EAAO,OAAO,CAAG,kU,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,+Z,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,omE,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,onB,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,sW,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,kjB,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,iT,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,4hB,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,sT,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,+rD,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,y0D,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,ib,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,grQ,E,C,E,E,C,Q,C,Q,oB,C,G,G,C,Q,C,C,C,kB,gB,K,O","sources":["","packages/artplayer-plugin-danmuku/src/index.js","packages/artplayer-plugin-danmuku/src/danmuku.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-d75e4ef33e90ad74.js","packages/artplayer-plugin-danmuku/src/bilibili.js","node_modules/@parcel/transformer-js/src/esmodule-helpers.js","packages/artplayer-plugin-danmuku/src/heatmap.js","packages/artplayer-plugin-danmuku/src/setting.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-b1f4705e590c7693.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-75df9b67e4ad9f34.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-966493d38fa25693.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-e438774eb5592ca2.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-f628b445d36caf1f.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-df73f5e9e2ab004b.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-1de8ba84e2efbede.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-9ccdc626e87ba3ee.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-9a7360dad8cdbe5b.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-2eccf06bbefc75d0.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-3f382cbac81656d4.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-17da0f3cb542825d.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-d4507e9bfc00ded0.js"],"sourcesContent":["// modules are defined as an array\n// [ module function, map of requires ]\n//\n// map of requires is short require name -> numeric require\n//\n// anything defined in a previous bundle is accessed via the\n// orig method which is the require for previous bundles\n\n(function (\n modules,\n entry,\n mainEntry,\n parcelRequireName,\n externals,\n distDir,\n publicUrl,\n devServer\n) {\n /* eslint-disable no-undef */\n var globalObject =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\n /* eslint-enable no-undef */\n\n // Save the require from previous bundle to this closure if any\n var previousRequire =\n typeof globalObject[parcelRequireName] === 'function' &&\n globalObject[parcelRequireName];\n\n var importMap = previousRequire.i || {};\n var cache = previousRequire.cache || {};\n // Do not use `require` to prevent Webpack from trying to bundle this call\n var nodeRequire =\n typeof module !== 'undefined' &&\n typeof module.require === 'function' &&\n module.require.bind(module);\n\n function newRequire(name, jumped) {\n if (!cache[name]) {\n if (!modules[name]) {\n if (externals[name]) {\n return externals[name];\n }\n // if we cannot find the module within our internal map or\n // cache jump to the current global require ie. the last bundle\n // that was added to the page.\n var currentRequire =\n typeof globalObject[parcelRequireName] === 'function' &&\n globalObject[parcelRequireName];\n if (!jumped && currentRequire) {\n return currentRequire(name, true);\n }\n\n // If there are other bundles on this page the require from the\n // previous one is saved to 'previousRequire'. Repeat this as\n // many times as there are bundles until the module is found or\n // we exhaust the require chain.\n if (previousRequire) {\n return previousRequire(name, true);\n }\n\n // Try the node require function if it exists.\n if (nodeRequire && typeof name === 'string') {\n return nodeRequire(name);\n }\n\n var err = new Error(\"Cannot find module '\" + name + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n }\n\n localRequire.resolve = resolve;\n localRequire.cache = {};\n\n var module = (cache[name] = new newRequire.Module(name));\n\n modules[name][0].call(\n module.exports,\n localRequire,\n module,\n module.exports,\n globalObject\n );\n }\n\n return cache[name].exports;\n\n function localRequire(x) {\n var res = localRequire.resolve(x);\n return res === false ? {} : newRequire(res);\n }\n\n function resolve(x) {\n var id = modules[name][1][x];\n return id != null ? id : x;\n }\n }\n\n function Module(moduleName) {\n this.id = moduleName;\n this.bundle = newRequire;\n this.require = nodeRequire;\n this.exports = {};\n }\n\n newRequire.isParcelRequire = true;\n newRequire.Module = Module;\n newRequire.modules = modules;\n newRequire.cache = cache;\n newRequire.parent = previousRequire;\n newRequire.distDir = distDir;\n newRequire.publicUrl = publicUrl;\n newRequire.devServer = devServer;\n newRequire.i = importMap;\n newRequire.register = function (id, exports) {\n modules[id] = [\n function (require, module) {\n module.exports = exports;\n },\n {},\n ];\n };\n\n // Only insert newRequire.load when it is actually used.\n // The code in this file is linted against ES5, so dynamic import is not allowed.\n // INSERT_LOAD_HERE\n\n Object.defineProperty(newRequire, 'root', {\n get: function () {\n return globalObject[parcelRequireName];\n },\n });\n\n globalObject[parcelRequireName] = newRequire;\n\n for (var i = 0; i < entry.length; i++) {\n newRequire(entry[i]);\n }\n\n if (mainEntry) {\n // Expose entry point to Node, AMD or browser globals\n // Based on https://github.com/ForbesLindesay/umd/blob/master/template.js\n var mainExports = newRequire(mainEntry);\n\n // CommonJS\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n module.exports = mainExports;\n\n // RequireJS\n } else if (typeof define === 'function' && define.amd) {\n define(function () {\n return mainExports;\n });\n }\n }\n})({\"6ZbtA\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nparcelHelpers.export(exports, \"default\", ()=>artplayerPluginDanmuku);\nvar _danmuku = require(\"./danmuku\");\nvar _danmukuDefault = parcelHelpers.interopDefault(_danmuku);\nvar _heatmap = require(\"./heatmap\");\nvar _heatmapDefault = parcelHelpers.interopDefault(_heatmap);\nvar _setting = require(\"./setting\");\nvar _settingDefault = parcelHelpers.interopDefault(_setting);\nfunction artplayerPluginDanmuku(option) {\n return (art)=>{\n const danmuku = new (0, _danmukuDefault.default)(art, option);\n const setting = new (0, _settingDefault.default)(art, danmuku);\n if (danmuku.option.heatmap) (0, _heatmapDefault.default)(art, danmuku, danmuku.option.heatmap);\n return {\n name: 'artplayerPluginDanmuku',\n emit: danmuku.emit.bind(danmuku),\n load: danmuku.load.bind(danmuku),\n config: danmuku.config.bind(danmuku),\n hide: danmuku.hide.bind(danmuku),\n show: danmuku.show.bind(danmuku),\n reset: danmuku.reset.bind(danmuku),\n mount: setting.mount.bind(setting),\n get option () {\n return danmuku.option;\n },\n get isHide () {\n return danmuku.isHide;\n },\n get isStop () {\n return danmuku.isStop;\n }\n };\n };\n}\nartplayerPluginDanmuku.icons = (0, _settingDefault.default).icons;\nif (typeof window !== 'undefined') window.artplayerPluginDanmuku = artplayerPluginDanmuku;\n\n},{\"./danmuku\":\"6C7g0\",\"./heatmap\":\"h2ayY\",\"./setting\":\"90QKZ\",\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}],\"6C7g0\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nvar _worker = require(\"bundle-text:./worker\");\nvar _workerDefault = parcelHelpers.interopDefault(_worker);\nvar _bilibili = require(\"./bilibili\");\nclass Danmuku {\n constructor(art, option){\n const { constructor, template } = art;\n this.utils = constructor.utils // 工具库\n ;\n this.validator = constructor.validator // 配置校验器\n ;\n this.$danmuku = template.$danmuku // 弹幕层容器\n ;\n this.$player = template.$player // 播放器容器\n ;\n this.art = art;\n this.queue = [] // 实际弹幕队列\n ;\n this.$refs = [] // 弹幕DOM节点池\n ;\n this.isStop = false // 是否停止\n ;\n this.isHide = false // 是否隐藏\n ;\n this.timer = null // 定时器\n ;\n this.index = 0 // 弹幕索引\n ;\n // 格式化后的配置项\n this.option = Danmuku.option;\n // 弹幕状态池\n this.states = {\n wait: [],\n ready: [],\n emit: [],\n stop: []\n };\n // 初始化配置\n this.config(option, true);\n // 创建 Web Worker, 用于计算弹幕的 top 值\n const workerText2 = (0, _workerDefault.default).replace('export{e as default};', '');\n const blob = new Blob([\n workerText2\n ], {\n type: 'application/javascript'\n });\n this.worker = new Worker(URL.createObjectURL(blob));\n // 绑定公用事件\n this.start = this.start.bind(this);\n this.stop = this.stop.bind(this);\n this.reset = this.reset.bind(this);\n this.resize = this.resize.bind(this);\n this.destroy = this.destroy.bind(this);\n // 监听事件\n art.on('video:play', this.start);\n art.on('video:playing', this.start);\n art.on('video:pause', this.stop);\n art.on('video:waiting', this.stop);\n art.on('destroy', this.destroy);\n art.on('resize', this.resize);\n // 开始加载弹幕\n this.load();\n }\n // 默认配置\n static get option() {\n return {\n danmuku: [],\n speed: 5,\n margin: [\n 10,\n '25%'\n ],\n opacity: 1,\n color: '#FFFFFF',\n mode: 0,\n modes: [\n 0,\n 1,\n 2\n ],\n fontSize: 25,\n antiOverlap: true,\n synchronousPlayback: false,\n mount: undefined,\n heatmap: false,\n width: 512,\n points: [],\n filter: ()=>true,\n beforeEmit: ()=>true,\n beforeVisible: ()=>true,\n visible: true,\n emitter: true,\n maxLength: 200,\n lockTime: 5,\n theme: 'dark',\n OPACITY: {},\n FONT_SIZE: {},\n MARGIN: {},\n SPEED: {},\n COLOR: []\n };\n }\n // 配置校验\n static get scheme() {\n return {\n danmuku: 'array|function|string',\n speed: 'number',\n margin: 'array',\n opacity: 'number',\n color: 'string',\n mode: 'number',\n modes: 'array',\n fontSize: 'number|string',\n antiOverlap: 'boolean',\n synchronousPlayback: 'boolean',\n mount: '?htmldivelement|string',\n heatmap: 'object|boolean',\n width: 'number',\n points: 'array',\n filter: 'function',\n beforeEmit: 'function',\n beforeVisible: 'function',\n visible: 'boolean',\n emitter: 'boolean',\n maxLength: 'number',\n lockTime: 'number',\n theme: 'string',\n OPACITY: 'object',\n FONT_SIZE: 'object',\n MARGIN: 'object',\n SPEED: 'object',\n COLOR: 'array'\n };\n }\n // 初始弹幕样式\n static get cssText() {\n return `\n user-select: none;\n position: absolute;\n white-space: pre;\n pointer-events: none;\n perspective: 500px;\n display: inline-block;\n will-change: transform;\n font-weight: normal;\n line-height: 1.125;\n visibility: hidden;\n font-family: SimHei, \"Microsoft JhengHei\", Arial, Helvetica, sans-serif;\n text-shadow: rgb(0, 0, 0) 1px 0px 1px, rgb(0, 0, 0) 0px 1px 1px, rgb(0, 0, 0) 0px -1px 1px, rgb(0, 0, 0) -1px 0px 1px;\n `;\n }\n // 是否在移动端使用了自动旋屏,会影响弹幕的left和top值\n get isRotate() {\n return this.art.plugins?.autoOrientation?.state;\n }\n // 计算上空白边距\n get marginTop() {\n const { clamp } = this.utils;\n const value = this.option.margin[0];\n const { clientHeight } = this.$player;\n if (typeof value === 'number') return clamp(value, 0, clientHeight);\n if (typeof value === 'string' && value.endsWith('%')) {\n const ratio = Number.parseFloat(value) / 100;\n return clamp(clientHeight * ratio, 0, clientHeight);\n }\n return Danmuku.option.margin[0];\n }\n // 计算下空白边距\n get marginBottom() {\n const { clamp } = this.utils;\n const value = this.option.margin[1];\n const { clientHeight } = this.$player;\n if (typeof value === 'number') return clamp(value, 0, clientHeight);\n if (typeof value === 'string' && value.endsWith('%')) {\n const ratio = Number.parseFloat(value) / 100;\n return clamp(clientHeight * ratio, 0, clientHeight);\n }\n return Danmuku.option.margin[1];\n }\n // 计算弹幕字体大小\n get fontSize() {\n const { clamp } = this.utils;\n const { clientHeight } = this.$player;\n const fontSize = this.option.fontSize;\n if (typeof fontSize === 'number') return Math.round(clamp(fontSize, 12, clientHeight));\n if (typeof fontSize === 'string' && fontSize.endsWith('%')) {\n const ratio = Number.parseFloat(fontSize) / 100;\n return Math.round(clamp(clientHeight * ratio, 12, clientHeight));\n }\n return Danmuku.option.fontSize;\n }\n // 获取弹幕DOM节点\n get $ref() {\n const $ref = this.$refs.pop() || document.createElement('div');\n $ref.style.cssText = Danmuku.cssText;\n $ref.dataset.mode = '';\n $ref.className = '';\n return $ref;\n }\n // 获取准备好发送的弹幕\n get readys() {\n const { currentTime } = this.art;\n const result = [];\n // 有的是ready状态:之前因为弹幕太多而暂停发送的弹幕\n this.filter('ready', (danmu)=>result.push(danmu));\n // 有的是wait状态:符合时间范围的弹幕\n this.filter('wait', (danmu)=>{\n if (currentTime + 0.1 >= danmu.time && danmu.time >= currentTime - 0.1) result.push(danmu);\n });\n return result;\n }\n // 可见的弹幕的数据,用于计算下一个弹幕的top值\n get visibles() {\n const result = [];\n const { clientWidth } = this.$player;\n const clientLeft = this.getLeft(this.$player);\n this.filter('emit', (danmu)=>{\n const top = danmu.$ref.offsetTop;\n const left = this.getLeft(danmu.$ref) - clientLeft;\n const height = danmu.$ref.clientHeight;\n const width = danmu.$ref.clientWidth;\n const distance = left + width;\n const right = clientWidth - distance;\n const speed = distance / danmu.$restTime;\n const emit = {};\n emit.top = top;\n emit.left = left;\n emit.height = height;\n emit.width = width;\n emit.right = right;\n emit.speed = speed;\n emit.distance = distance;\n emit.time = danmu.$restTime;\n emit.mode = danmu.mode;\n result.push(emit);\n });\n return result;\n }\n // 计算弹幕速度\n get speed() {\n return this.option.synchronousPlayback && this.art.playbackRate ? this.option.speed / Number(this.art.playbackRate) : this.option.speed;\n }\n // 加载弹幕\n async load(danmuku) {\n const { errorHandle } = this.utils;\n let danmus = [];\n const target = danmuku || this.option.danmuku;\n try {\n if (typeof target === 'function') danmus = await target() // 异步函数获取\n ;\n else if (target instanceof Promise) danmus = await target // 从 Promise 对象获取\n ;\n else if (typeof target === 'string') danmus = await (0, _bilibili.bilibiliDanmuParseFromUrl)(target) // 从B站xml链接解析\n ;\n else if (Array.isArray(target)) danmus = target // 直接传入数组\n ;\n errorHandle(Array.isArray(danmus), 'Danmuku need return an array as result');\n // 假如没有传入弹幕参数,则清空弹幕,否则追加弹幕\n if (danmuku === undefined) {\n this.reset() // 重置弹幕\n ;\n this.queue = [] // 清空弹幕队列\n ;\n this.states = {\n wait: [],\n ready: [],\n emit: [],\n stop: []\n } // 清空弹幕状态池\n ;\n this.$refs = [] // 清空弹幕DOM节点池\n ;\n this.$danmuku.textContent = '' // 清空弹幕层\n ;\n }\n // 逐个验证原始弹幕并转换到弹幕队列\n for(let index = 0; index < danmus.length; index++){\n const danmu = danmus[index];\n await this.emit(danmu);\n }\n this.art.emit('artplayerPluginDanmuku:loaded', this.queue);\n } catch (error) {\n this.art.emit('artplayerPluginDanmuku:error', error);\n throw error;\n }\n return this;\n }\n // 把原始弹幕转换到弹幕队列\n async emit(danmu) {\n const { clamp } = this.utils;\n this.validator(danmu, {\n text: 'string',\n mode: '?number',\n color: '?string',\n time: '?number',\n border: '?boolean',\n style: '?object'\n });\n // 弹幕文本为空则直接忽略\n if (!danmu.text.trim()) return this;\n // 设置弹幕时间,如果没有则默认为当前时间加 0.5 秒\n if (danmu.time) danmu.time = clamp(danmu.time, 0, Infinity);\n else danmu.time = this.art.currentTime + 0.5;\n // 设置弹幕模式,如果没有则默认为全局配置\n if (danmu.mode === undefined) danmu.mode = this.option.mode;\n // 设置弹幕单独样式,如果没有则默认为空对象\n if (danmu.style === undefined) danmu.style = {};\n // 设置弹幕颜色,如果没有则默认为全局配置\n if (danmu.color === undefined) danmu.color = this.option.color;\n // 弹幕模式只能是 0, 1, 2\n if (![\n 0,\n 1,\n 2\n ].includes(danmu.mode)) return this;\n // 自定义弹幕过滤函数\n if (!this.option.filter(danmu)) return this;\n // 添加自定义属性\n const item = {\n ...danmu,\n $state: 'wait',\n $id: this.index++,\n $ref: null,\n $restTime: 0,\n $lastStartTime: 0\n };\n // 转换为wait状态\n this.setState(item, 'wait');\n // 添加到实际弹幕队列\n this.queue.push(item);\n // 弹幕有四个状态:\n // - wait: 弹幕还未开始显示,没有被添加到 DOM 中\n // - ready: 弹幕准备好显示,没有被添加到 DOM 中\n // - emit: 弹幕正在显示,已经被添加到 DOM 中\n // - stop: 弹幕正在停止显示,已经被添加到 DOM 中\n return this;\n }\n // 动态配置\n config(option, isInit = false) {\n const { clamp } = this.utils;\n const { $controlsCenter } = this.art.template;\n // 判断配置项是否有变化\n const changed = Object.keys(option).some((key)=>JSON.stringify(this.option[key]) !== JSON.stringify(option[key]));\n // 没有变化则直接返回\n if (!changed && !isInit) return this;\n // 更新配置项\n this.option = Object.assign({}, Danmuku.option, this.option, option);\n this.validator(this.option, Danmuku.scheme);\n this.option.mode = clamp(this.option.mode, 0, 2);\n this.option.speed = clamp(this.option.speed, 1, 10);\n this.option.opacity = clamp(this.option.opacity, 0, 1);\n this.option.lockTime = clamp(this.option.lockTime, 1, 60);\n this.option.maxLength = clamp(this.option.maxLength, 1, 1000);\n this.option.mount = this.option.mount || $controlsCenter;\n // 动态配置有字体大小,需要重新渲染\n if (option.fontSize) this.reset();\n // 通过配置项控制弹幕的显示和隐藏\n if (this.option.visible) this.show();\n else this.hide();\n this.art.emit('artplayerPluginDanmuku:config', this.option);\n return this;\n }\n // 计算DOM的left值,受到旋屏影响\n getLeft($ref) {\n const rect = $ref.getBoundingClientRect();\n return this.isRotate ? rect.top : rect.left;\n }\n // 复杂运算交给 Web Worker 处理\n postMessage(message = {}) {\n return new Promise((resolve)=>{\n message.id = Date.now() // 生成唯一标识\n ;\n this.worker.postMessage(message);\n this.worker.onmessage = (event)=>{\n const { data } = event;\n // 判断是否是当前的消息\n if (data.id === message.id) resolve(data);\n };\n });\n }\n // 根据状态获取弹幕\n filter(state, callback) {\n const danmus = this.states[state] || [];\n for(let index = 0; index < danmus.length; index++)callback(danmus[index]);\n return danmus;\n }\n // 设置弹幕状态\n setState(danmu, state) {\n // 从原状态池中删除\n this.states[danmu.$state] = this.states[danmu.$state].filter((item)=>item !== danmu);\n // 设置新状态\n danmu.$state = state;\n // 设置DOM节点状态\n if (danmu.$ref) danmu.$ref.dataset.state = state;\n // 添加到新状态池中\n this.states[state].push(danmu);\n }\n // 重置弹幕到wait状态,回收弹幕DOM节点\n makeWait(danmu) {\n this.setState(danmu, 'wait');\n if (danmu.$ref) {\n danmu.$ref.style.cssText = Danmuku.cssText;\n danmu.$ref.style.visibility = 'hidden';\n danmu.$ref.style.marginLeft = '0px';\n danmu.$ref.style.transform = 'translateX(0px)';\n danmu.$ref.style.transition = 'transform 0s linear 0s';\n this.$refs.push(danmu.$ref);\n danmu.$ref = null;\n }\n }\n // 实时更新弹幕\n update() {\n const { setStyles } = this.utils;\n this.timer = window.requestAnimationFrame(async ()=>{\n if (this.art.playing && !this.isHide) {\n // 实时计算弹幕的剩余显示时间\n this.filter('emit', (danmu)=>{\n const emitTime = (Date.now() - danmu.$lastStartTime) / 1000;\n danmu.$restTime -= emitTime;\n danmu.$lastStartTime = Date.now();\n // 超过时间即重置弹幕\n if (danmu.$restTime <= 0) this.makeWait(danmu);\n });\n // 获取准备好发送的弹幕,可能包含ready和wait状态的弹幕\n const readys = this.readys;\n for(let index = 0; index < readys.length; index++){\n const danmu = readys[index];\n // 弹幕发送前的过滤器\n const state = await this.option.beforeVisible(danmu);\n if (state) {\n const { clientWidth, clientHeight } = this.$player;\n danmu.$ref = this.$ref // 获取弹幕DOM节点\n ;\n danmu.$ref.textContent = danmu.text // 设置弹幕文本\n ;\n // 提前添加到弹幕层中,用于计算top值\n this.$danmuku.appendChild(danmu.$ref);\n // 设置初始弹幕样式\n danmu.$ref.style.opacity = this.option.opacity;\n danmu.$ref.style.fontSize = `${this.fontSize}px`;\n danmu.$ref.style.color = danmu.color;\n danmu.$ref.style.border = danmu.border ? `1px solid ${danmu.color}` : null;\n danmu.$ref.style.backgroundColor = danmu.border ? 'rgb(0 0 0 / 50%)' : null;\n // 设置单独弹幕样式\n setStyles(danmu.$ref, danmu.style);\n // 记录弹幕时间戳\n danmu.$lastStartTime = Date.now();\n // 计算弹幕剩余时间\n danmu.$restTime = this.speed;\n // 计算弹幕滚动的距离\n const distance = clientWidth + danmu.$ref.clientWidth;\n // 计算弹幕的top值\n const { result: top } = await this.postMessage({\n type: 'getDanmuTop',\n target: {\n mode: danmu.mode,\n height: danmu.$ref.clientHeight,\n speed: distance / danmu.$restTime\n },\n visibles: this.visibles,\n antiOverlap: this.option.antiOverlap,\n clientWidth,\n clientHeight,\n marginBottom: this.marginBottom,\n marginTop: this.marginTop\n });\n if (danmu.$ref) {\n if (!this.isStop && top !== undefined) {\n this.setState(danmu, 'emit') // 转换为emit状态\n ;\n danmu.$ref.style.top = `${top}px`;\n danmu.$ref.style.visibility = 'visible';\n danmu.$ref.dataset.mode = danmu.mode // CSS控制模式的显示和隐藏\n ;\n switch(danmu.mode){\n // 滚动的弹幕\n case 0:\n danmu.$ref.style.left = `${clientWidth}px`;\n danmu.$ref.style.marginLeft = '0px';\n danmu.$ref.style.transform = `translateX(${-distance}px)`;\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`;\n break;\n case 1:\n // falls through\n case 2:\n danmu.$ref.style.left = '50%';\n danmu.$ref.style.marginLeft = `-${danmu.$ref.clientWidth / 2}px`;\n break;\n default:\n break;\n }\n this.art.emit('artplayerPluginDanmuku:visible', danmu);\n } else {\n // 假如弹幕已经停止或者没有 top 值,则重置弹幕为ready状态,回收弹幕DOM节点,等待下次发送\n this.setState(danmu, 'ready');\n this.$refs.push(danmu.$ref);\n danmu.$ref = null;\n }\n }\n }\n }\n }\n // 递归调用\n if (!this.isStop) this.update();\n });\n return this;\n }\n // 重置正在显示的弹幕: stop/emit 状态的弹幕\n resize() {\n const { clientWidth } = this.$player;\n this.filter('stop', (danmu)=>{\n switch(danmu.mode){\n // 滚动的弹幕\n case 0:\n danmu.$ref.style.left = `${clientWidth}px`;\n break;\n default:\n break;\n }\n });\n this.filter('emit', (danmu)=>{\n danmu.$lastStartTime = Date.now();\n switch(danmu.mode){\n // 滚动的弹幕\n case 0:\n {\n const distance = clientWidth + danmu.$ref.clientWidth;\n danmu.$ref.style.left = `${clientWidth}px`;\n danmu.$ref.style.transform = `translateX(${-distance}px)`;\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`;\n break;\n }\n default:\n break;\n }\n });\n }\n // 继续弹幕\n continue() {\n const { clientWidth } = this.$player;\n this.filter('stop', (danmu)=>{\n this.setState(danmu, 'emit') // 转换为emit状态\n ;\n danmu.$lastStartTime = Date.now();\n switch(danmu.mode){\n // 继续滚动的弹幕\n case 0:\n {\n const distance = clientWidth + danmu.$ref.clientWidth;\n danmu.$ref.style.transform = `translateX(${-distance}px)`;\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`;\n break;\n }\n default:\n break;\n }\n });\n return this;\n }\n // 暂停弹幕\n suspend() {\n const { clientWidth } = this.$player;\n this.filter('emit', (danmu)=>{\n this.setState(danmu, 'stop') // 转换为stop状态\n ;\n switch(danmu.mode){\n // 停止滚动的弹幕\n case 0:\n {\n const translateX = clientWidth - (this.getLeft(danmu.$ref) - this.getLeft(this.$player));\n danmu.$ref.style.transform = `translateX(${-translateX}px)`;\n danmu.$ref.style.transition = 'transform 0s linear 0s';\n break;\n }\n default:\n break;\n }\n });\n return this;\n }\n stop() {\n this.isStop = true;\n this.suspend();\n window.cancelAnimationFrame(this.timer);\n this.art.emit('artplayerPluginDanmuku:stop');\n return this;\n }\n start() {\n this.isStop = false;\n this.continue();\n this.update();\n this.art.emit('artplayerPluginDanmuku:start');\n return this;\n }\n reset() {\n this.queue.forEach((danmu)=>this.makeWait(danmu));\n this.art.emit('artplayerPluginDanmuku:reset');\n return this;\n }\n show() {\n this.isHide = false;\n this.$danmuku.style.opacity = 1;\n this.option.visible = true;\n this.art.emit('artplayerPluginDanmuku:show');\n return this;\n }\n hide() {\n this.isHide = true;\n this.$danmuku.style.opacity = 0;\n this.option.visible = false;\n this.art.emit('artplayerPluginDanmuku:hide');\n return this;\n }\n destroy() {\n this.stop();\n this.worker.terminate();\n this.art.off('video:play', this.start);\n this.art.off('video:playing', this.start);\n this.art.off('video:pause', this.stop);\n this.art.off('video:waiting', this.stop);\n this.art.off('resize', this.reset);\n this.art.off('destroy', this.destroy);\n this.art.emit('artplayerPluginDanmuku:destroy');\n }\n}\nexports.default = Danmuku;\n\n},{\"bundle-text:./worker\":\"8UAYg\",\"./bilibili\":\"8WBpY\",\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}],\"8UAYg\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"!function(e,t,i,o,r,n,l,d){var u=\\\"undefined\\\"!=typeof globalThis?globalThis:\\\"undefined\\\"!=typeof self?self:\\\"undefined\\\"!=typeof window?window:\\\"undefined\\\"!=typeof global?global:{},f=\\\"function\\\"==typeof u[o]&&u[o],p=f.i||{},s=f.cache||{},h=\\\"undefined\\\"!=typeof module&&\\\"function\\\"==typeof module.require&&module.require.bind(module);function a(t,i){if(!s[t]){if(!e[t]){if(r[t])return r[t];var n=\\\"function\\\"==typeof u[o]&&u[o];if(!i&&n)return n(t,!0);if(f)return f(t,!0);if(h&&\\\"string\\\"==typeof t)return h(t);var l=Error(\\\"Cannot find module '\\\"+t+\\\"'\\\");throw l.code=\\\"MODULE_NOT_FOUND\\\",l}p.resolve=function(i){var o=e[t][1][i];return null!=o?o:i},p.cache={};var d=s[t]=new a.Module(t);e[t][0].call(d.exports,p,d,d.exports,u)}return s[t].exports;function p(e){var t=p.resolve(e);return!1===t?{}:a(t)}}a.isParcelRequire=!0,a.Module=function(e){this.id=e,this.bundle=a,this.require=h,this.exports={}},a.modules=e,a.cache=s,a.parent=f,a.distDir=void 0,a.publicUrl=void 0,a.devServer=void 0,a.i=p,a.register=function(t,i){e[t]=[function(e,t){t.exports=i},{}]},Object.defineProperty(a,\\\"root\\\",{get:function(){return u[o]}}),u[o]=a;for(var c=0;ct.mode===e.mode&&t.top<=d).sort((e,t)=>e.top-t.top);if(0===u.length)if(2===e.mode)return d-e.height;else return n;if(u.unshift({type:\\\"top\\\",top:0,left:0,right:0,height:n,width:i,speed:0,distance:i}),u.push({type:\\\"bottom\\\",top:d,left:0,right:0,height:r,width:i,speed:0,distance:i}),2===e.mode)for(let t=u.length-2;t>=0;t-=1){let i=u[t],o=u[t+1],r=i.top+i.height;if(o.top-r>=e.height)return o.top-e.height}else for(let t=1;t=e.height)return r}let f=[];for(let e=1;et.every(t=>!(it.time))));return t&&t[0]?t[0].top:void 0}case 1:case 2:return}else{switch(e.mode){case 0:f.sort((e,t)=>{let i=Math.min(...t.map(e=>e.right)),o=Math.min(...e.map(e=>e.right));return i*t.length-o*e.length});break;case 1:case 2:f.sort((e,t)=>{let i=Math.max(...t.map(e=>e.width));return Math.max(...e.map(e=>e.width))*e.length-i*t.length})}return f[0][0].top}}onmessage=e=>{let{data:t}=e;t.id&&t.type&&globalThis.postMessage({result:(0,({getDanmuTop:r})[t.type])(t),id:t.id})}},{}]},[\\\"4KwZ6\\\"],\\\"4KwZ6\\\",\\\"parcelRequire4dc0\\\",{});let{\\\"*\\\":e}=parcelRequire4dc0(\\\"4KwZ6\\\");export{e as default};\";\n\n},{}],\"8WBpY\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nparcelHelpers.export(exports, \"bilibiliDanmuParseFromUrl\", ()=>bilibiliDanmuParseFromUrl);\nfunction getMode(key) {\n switch(key){\n case 1:\n case 2:\n case 3:\n return 0;\n case 4:\n return 2;\n case 5:\n return 1;\n default:\n return 0;\n }\n}\nfunction bilibiliDanmuParseFromXml(xmlString) {\n if (typeof xmlString !== 'string') return [];\n const reg = /]*?p=\"(?

[^\"]+)\"[^>]*>(?.*?)<\\/d>/gs;\n const matches = xmlString.matchAll(reg);\n return Array.from(matches).map((match)=>{\n const attr = match.groups.p.split(',');\n if (attr.length >= 8) {\n const text = match.groups.text.trim().replaceAll('"', '\"').replaceAll(''', '\\'').replaceAll('<', '<').replaceAll('>', '>').replaceAll('&', '&');\n return {\n text,\n time: Number(attr[0]),\n mode: getMode(Number(attr[1])),\n fontSize: Number(attr[2]),\n color: `#${Number(attr[3]).toString(16)}`,\n timestamp: Number(attr[4]),\n pool: Number(attr[5]),\n userID: attr[6],\n rowID: Number(attr[7])\n };\n } else return null;\n }).filter(Boolean);\n}\nfunction onmessage({ data }) {\n const { xml, id } = data;\n if (!id || !xml) return;\n const danmus = bilibiliDanmuParseFromXml(xml);\n globalThis.postMessage({\n danmus,\n id\n });\n}\nfunction createWorker() {\n const workerText = `\n ${getMode.toString()}\n ${bilibiliDanmuParseFromXml.toString()}\n onmessage = ${onmessage.toString()}\n `;\n const blob = new Blob([\n workerText\n ], {\n type: 'application/javascript'\n });\n return new Worker(URL.createObjectURL(blob));\n}\nfunction bilibiliDanmuParseFromUrl(url) {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve)=>{\n const res = await fetch(url);\n const xml = await res.text();\n try {\n const worker = createWorker();\n worker.onmessage = (event)=>{\n const { danmus, id } = event.data;\n if (!id || !danmus) return;\n resolve(danmus);\n worker.terminate();\n };\n worker.postMessage({\n xml,\n id: Date.now()\n });\n } catch (error) {\n console.error('Error parsing Bilibili Danmu:', error);\n const danmus = bilibiliDanmuParseFromXml(xml);\n resolve(danmus);\n }\n });\n}\n\n},{\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}],\"5lQoW\":[function(require,module,exports,__globalThis) {\nexports.interopDefault = function(a) {\n return a && a.__esModule ? a : {\n default: a\n };\n};\nexports.defineInteropFlag = function(a) {\n Object.defineProperty(a, '__esModule', {\n value: true\n });\n};\nexports.exportAll = function(source, dest) {\n Object.keys(source).forEach(function(key) {\n if (key === 'default' || key === '__esModule' || Object.prototype.hasOwnProperty.call(dest, key)) return;\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function() {\n return source[key];\n }\n });\n });\n return dest;\n};\nexports.export = function(dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get\n });\n};\n\n},{}],\"h2ayY\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nparcelHelpers.export(exports, \"default\", ()=>heatmap);\nconst lib = {\n map (value, inMin, inMax, outMin, outMax) {\n return (value - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;\n },\n range (start, end, tick) {\n const s = Math.round(start / tick) * tick;\n return Array.from({\n length: Math.floor((end - start) / tick)\n }, (v, k)=>{\n return k * tick + s;\n });\n }\n};\nfunction line(pointA, pointB) {\n const lengthX = pointB[0] - pointA[0];\n const lengthY = pointB[1] - pointA[1];\n return {\n length: Math.sqrt(lengthX ** 2 + lengthY ** 2),\n angle: Math.atan2(lengthY, lengthX)\n };\n}\nfunction heatmap(art, danmuku, option) {\n const { query } = art.constructor.utils;\n art.controls.add({\n name: 'heatmap',\n position: 'top',\n html: '',\n style: {\n position: 'absolute',\n top: '-100px',\n left: '0px',\n right: '0px',\n height: '100px',\n width: '100%',\n pointerEvents: 'none'\n },\n mounted ($heatmap) {\n let $start = null;\n let $stop = null;\n function update(arg = []) {\n $start = null;\n $stop = null;\n $heatmap.innerHTML = '';\n if (!art.duration || art.option.isLive) return;\n const svg = {\n w: $heatmap.offsetWidth,\n h: $heatmap.offsetHeight\n };\n const options = {\n xMin: 0,\n xMax: svg.w,\n yMin: 0,\n yMax: 128,\n scale: 0.25,\n opacity: 0.2,\n minHeight: Math.floor(svg.h * 0.05),\n sampling: Math.floor(svg.w / 100),\n smoothing: 0.2,\n flattening: 0.2\n };\n if (typeof option === 'object') Object.assign(options, option);\n let points = [];\n if (Array.isArray(arg) && arg.length) points = [\n ...arg\n ];\n else {\n const gap = art.duration / svg.w;\n for(let x = 0; x <= svg.w; x += options.sampling){\n const y = danmuku.queue.filter(({ time })=>time > x * gap && time <= (x + options.sampling) * gap).length;\n points.push([\n x,\n y\n ]);\n }\n }\n if (points.length === 0) return;\n const lastPoint = points[points.length - 1];\n const lastX = lastPoint[0];\n const lastY = lastPoint[1];\n if (lastX !== svg.w) points.push([\n svg.w,\n lastY\n ]);\n const yPoints = points.map((point)=>point[1]);\n const yMin = Math.min(...yPoints);\n const yMax = Math.max(...yPoints);\n const yMid = (yMin + yMax) / 2;\n for(let i = 0; i < points.length; i++){\n const point = points[i];\n const y = point[1];\n point[1] = y * (y > yMid ? 1 + options.scale : 1 - options.scale) + options.minHeight;\n }\n const controlPoint = (current, previous, next, reverse)=>{\n const p = previous || current;\n const n = next || current;\n const o = line(p, n);\n const flat = lib.map(Math.cos(o.angle) * options.flattening, 0, 1, 1, 0);\n const angle = o.angle * flat + (reverse ? Math.PI : 0);\n const length = o.length * options.smoothing;\n const x = current[0] + Math.cos(angle) * length;\n const y = current[1] + Math.sin(angle) * length;\n return [\n x,\n y\n ];\n };\n const bezierCommand = (point, i, a)=>{\n const cps = controlPoint(a[i - 1], a[i - 2], point);\n const cpe = controlPoint(point, a[i - 1], a[i + 1], true);\n const close = i === a.length - 1 ? ' z' : '';\n return `C ${cps[0]},${cps[1]} ${cpe[0]},${cpe[1]} ${point[0]},${point[1]}${close}`;\n };\n const pointsPositions = points.map((e)=>{\n const x = lib.map(e[0], options.xMin, options.xMax, 0, svg.w);\n const y = lib.map(e[1], options.yMin, options.yMax, svg.h, 0);\n return [\n x,\n y\n ];\n });\n const pathD = pointsPositions.reduce((acc, e, i, a)=>i === 0 ? `M ${a[a.length - 1][0]},${svg.h} L ${e[0]},${svg.h} L ${e[0]},${e[1]}` : `${acc} ${bezierCommand(e, i, a)}`, '');\n $heatmap.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n `;\n $start = query('#heatmap-start', $heatmap);\n $stop = query('#heatmap-stop', $heatmap);\n $start.setAttribute('offset', `${art.played * 100}%`);\n $stop.setAttribute('offset', `${art.played * 100}%`);\n }\n art.on('video:timeupdate', ()=>{\n if ($start && $stop) {\n $start.setAttribute('offset', `${art.played * 100}%`);\n $stop.setAttribute('offset', `${art.played * 100}%`);\n }\n });\n art.on('setBar', (type, percentage)=>{\n if ($start && $stop && type === 'played') {\n $start.setAttribute('offset', `${percentage * 100}%`);\n $stop.setAttribute('offset', `${percentage * 100}%`);\n }\n });\n art.on('ready', ()=>update());\n art.on('resize', ()=>update());\n art.on('artplayerPluginDanmuku:loaded', ()=>update());\n art.on('artplayerPluginDanmuku:points', (points)=>update(points));\n }\n });\n}\n\n},{\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}],\"90QKZ\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nvar _checkOffSvg = require(\"bundle-text:./img/check_off.svg\");\nvar _checkOffSvgDefault = parcelHelpers.interopDefault(_checkOffSvg);\nvar _checkOnSvg = require(\"bundle-text:./img/check_on.svg\");\nvar _checkOnSvgDefault = parcelHelpers.interopDefault(_checkOnSvg);\nvar _configSvg = require(\"bundle-text:./img/config.svg\");\nvar _configSvgDefault = parcelHelpers.interopDefault(_configSvg);\nvar _mode0OffSvg = require(\"bundle-text:./img/mode_0_off.svg\");\nvar _mode0OffSvgDefault = parcelHelpers.interopDefault(_mode0OffSvg);\nvar _mode0OnSvg = require(\"bundle-text:./img/mode_0_on.svg\");\nvar _mode0OnSvgDefault = parcelHelpers.interopDefault(_mode0OnSvg);\nvar _mode1OffSvg = require(\"bundle-text:./img/mode_1_off.svg\");\nvar _mode1OffSvgDefault = parcelHelpers.interopDefault(_mode1OffSvg);\nvar _mode1OnSvg = require(\"bundle-text:./img/mode_1_on.svg\");\nvar _mode1OnSvgDefault = parcelHelpers.interopDefault(_mode1OnSvg);\nvar _mode2OffSvg = require(\"bundle-text:./img/mode_2_off.svg\");\nvar _mode2OffSvgDefault = parcelHelpers.interopDefault(_mode2OffSvg);\nvar _mode2OnSvg = require(\"bundle-text:./img/mode_2_on.svg\");\nvar _mode2OnSvgDefault = parcelHelpers.interopDefault(_mode2OnSvg);\nvar _offSvg = require(\"bundle-text:./img/off.svg\");\nvar _offSvgDefault = parcelHelpers.interopDefault(_offSvg);\nvar _onSvg = require(\"bundle-text:./img/on.svg\");\nvar _onSvgDefault = parcelHelpers.interopDefault(_onSvg);\nvar _styleSvg = require(\"bundle-text:./img/style.svg\");\nvar _styleSvgDefault = parcelHelpers.interopDefault(_styleSvg);\nvar _styleLess = require(\"bundle-text:./style.less\");\nvar _styleLessDefault = parcelHelpers.interopDefault(_styleLess);\nclass Setting {\n constructor(art, danmuku){\n this.art = art;\n this.danmuku = danmuku;\n this.utils = art.constructor.utils;\n const { setStyle } = this.utils;\n const { $controlsCenter } = art.template;\n setStyle($controlsCenter, 'display', 'flex');\n this.template = {\n $controlsCenter,\n $mount: $controlsCenter,\n $danmuku: null,\n $toggle: null,\n $config: null,\n $configPanel: null,\n $configModes: null,\n $style: null,\n $stylePanel: null,\n $styleModes: null,\n $colors: null,\n $opacitySlider: null,\n $opacityValue: null,\n $marginSlider: null,\n $marginValue: null,\n $fontSizeSlider: null,\n $fontSizeValue: null,\n $speedSlider: null,\n $speedValue: null,\n $input: null,\n $send: null\n };\n this.slider = {\n opacity: null,\n margin: null,\n fontSize: null,\n speed: null\n };\n this.emitting = false;\n this.isLock = false;\n this.timer = null;\n this.createTemplate();\n this.createSliders();\n this.createEvents();\n this.mount(this.option.mount);\n art.on('resize', ()=>this.resize());\n art.on('fullscreen', (state)=>this.onFullscreen(state));\n art.on('fullscreenWeb', (state)=>this.onFullscreen(state));\n art.proxy(this.template.$config, 'mouseenter', ()=>{\n this.onMouseEnter({\n $control: this.template.$config,\n $panel: this.template.$configPanel\n });\n });\n art.proxy(this.template.$style, 'mouseenter', ()=>{\n this.onMouseEnter({\n $control: this.template.$style,\n $panel: this.template.$stylePanel\n });\n });\n }\n static get icons() {\n return {\n $on: (0, _onSvgDefault.default),\n $off: (0, _offSvgDefault.default),\n $config: (0, _configSvgDefault.default),\n $style: (0, _styleSvgDefault.default),\n $mode_0_off: (0, _mode0OffSvgDefault.default),\n $mode_0_on: (0, _mode0OnSvgDefault.default),\n $mode_1_off: (0, _mode1OffSvgDefault.default),\n $mode_1_on: (0, _mode1OnSvgDefault.default),\n $mode_2_off: (0, _mode2OffSvgDefault.default),\n $mode_2_on: (0, _mode2OnSvgDefault.default),\n $check_on: (0, _checkOnSvgDefault.default),\n $check_off: (0, _checkOffSvgDefault.default)\n };\n }\n get option() {\n return this.danmuku.option;\n }\n get outside() {\n return this.template.$mount !== this.template.$controlsCenter;\n }\n get TEMPLATE() {\n const { option } = this;\n return `\n

\n ${0, _onSvgDefault.default}${0, _offSvgDefault.default}\n
\n
\n ${0, _configSvgDefault.default}\n
\n
\n
\n \\u{6309}\\u{7C7B}\\u{578B}\\u{5C4F}\\u{853D}\n
\n
\n ${0, _mode0OffSvgDefault.default}${0, _mode0OnSvgDefault.default}\n
\\u{6EDA}\\u{52A8}
\n
\n
\n ${0, _mode1OffSvgDefault.default}${0, _mode1OnSvgDefault.default}\n
\\u{9876}\\u{90E8}
\n
\n
\n ${0, _mode2OffSvgDefault.default}${0, _mode2OnSvgDefault.default}\n
\\u{5E95}\\u{90E8}
\n
\n
\n
\n
\n
\n ${0, _checkOnSvgDefault.default}${0, _checkOffSvgDefault.default}\n \\u{9632}\\u{6B62}\\u{5F39}\\u{5E55}\\u{91CD}\\u{53E0}\n
\n
\n ${0, _checkOnSvgDefault.default}${0, _checkOffSvgDefault.default}\n \\u{540C}\\u{6B65}\\u{89C6}\\u{9891}\\u{901F}\\u{5EA6}\n
\n
\n
\n \\u{4E0D}\\u{900F}\\u{660E}\\u{5EA6}\n
\n
\\u{672A}\\u{77E5}
\n
\n
\n \\u{663E}\\u{793A}\\u{533A}\\u{57DF}\n
\n
\\u{672A}\\u{77E5}
\n
\n
\n \\u{5F39}\\u{5E55}\\u{5B57}\\u{53F7}\n
\n
\\u{672A}\\u{77E5}
\n
\n
\n \\u{5F39}\\u{5E55}\\u{901F}\\u{5EA6}\n
\n
\\u{672A}\\u{77E5}
\n
\n
\n
\n
\n
\n
\n ${0, _styleSvgDefault.default}\n
\n
\n
\n \\u{6A21}\\u{5F0F}\n
\n
\n ${0, _mode0OnSvgDefault.default}\n
\\u{6EDA}\\u{52A8}
\n
\n
\n ${0, _mode1OnSvgDefault.default}\n
\\u{9876}\\u{90E8}
\n
\n
\n ${0, _mode2OnSvgDefault.default}\n
\\u{5E95}\\u{90E8}
\n
\n
\n
\n
\n \\u{989C}\\u{8272}\n
\n ${this.COLOR.map((color)=>`
`).join('')}\n
\n
\n
\n
\n
\n \n
\\u{53D1}\\u{9001}
\n
\n `;\n }\n get OPACITY() {\n return {\n min: 0,\n max: 100,\n steps: [],\n ...this.option.OPACITY\n };\n }\n get FONT_SIZE() {\n return {\n min: 12,\n max: 120,\n steps: [],\n ...this.option.FONT_SIZE\n };\n }\n get MARGIN() {\n return {\n min: 0,\n max: 3,\n steps: [\n {\n name: '1/4',\n value: [\n 10,\n '75%'\n ]\n },\n {\n name: \"\\u534A\\u5C4F\",\n value: [\n 10,\n '50%'\n ]\n },\n {\n name: '3/4',\n value: [\n 10,\n '25%'\n ]\n },\n {\n name: \"\\u6EE1\\u5C4F\",\n value: [\n 10,\n 10\n ]\n }\n ],\n ...this.option.MARGIN\n };\n }\n get SPEED() {\n return {\n min: 0,\n max: 4,\n steps: [\n {\n name: \"\\u6781\\u6162\",\n value: 10\n },\n {\n name: \"\\u8F83\\u6162\",\n value: 7.5,\n hide: true\n },\n {\n name: \"\\u9002\\u4E2D\",\n value: 5\n },\n {\n name: \"\\u8F83\\u5FEB\",\n value: 2.5,\n hide: true\n },\n {\n name: \"\\u6781\\u5FEB\",\n value: 1\n }\n ],\n ...this.option.SPEED\n };\n }\n get COLOR() {\n return this.option.COLOR.length ? this.option.COLOR : [\n '#FE0302',\n '#FF7204',\n '#FFAA02',\n '#FFD302',\n '#FFFF00',\n '#A0EE00',\n '#00CD00',\n '#019899',\n '#4266BE',\n '#89D5FF',\n '#CC0273',\n '#222222',\n '#9B9B9B',\n '#FFFFFF'\n ];\n }\n query(selector) {\n const { query } = this.utils;\n const { $danmuku } = this.template;\n return query(selector, $danmuku);\n }\n append(el, target) {\n const { append } = this.utils;\n const children = [\n ...el.children\n ];\n if (children.includes(target)) return;\n append(el, target);\n }\n setData(key, value) {\n const { $player } = this.art.template;\n const { $mount } = this.template;\n $player.dataset[key] = value;\n if (this.outside) $mount.dataset[key] = value;\n }\n createTemplate() {\n const { createElement, tooltip } = this.utils;\n const $danmuku = createElement('div');\n $danmuku.className = 'artplayer-plugin-danmuku';\n $danmuku.innerHTML = this.TEMPLATE;\n this.template.$danmuku = $danmuku;\n this.template.$toggle = this.query('.apd-toggle');\n this.template.$config = this.query('.apd-config');\n this.template.$configPanel = this.query('.apd-config-panel');\n this.template.$configModes = this.query('.apd-config-mode .apd-modes');\n this.template.$style = this.query('.apd-style');\n this.template.$stylePanel = this.query('.apd-style-panel');\n this.template.$styleModes = this.query('.apd-style-mode .apd-modes');\n this.template.$colors = this.query('.apd-colors');\n this.template.$antiOverlap = this.query('.apd-anti-overlap');\n this.template.$syncVideo = this.query('.apd-sync-video');\n this.template.$opacitySlider = this.query('.apd-config-opacity .apd-slider');\n this.template.$opacityValue = this.query('.apd-config-opacity .apd-value');\n this.template.$marginSlider = this.query('.apd-config-margin .apd-slider');\n this.template.$marginValue = this.query('.apd-config-margin .apd-value');\n this.template.$fontSizeSlider = this.query('.apd-config-fontSize .apd-slider');\n this.template.$fontSizeValue = this.query('.apd-config-fontSize .apd-value');\n this.template.$speedSlider = this.query('.apd-config-speed .apd-slider');\n this.template.$speedValue = this.query('.apd-config-speed .apd-value');\n this.template.$input = this.query('.apd-input');\n this.template.$send = this.query('.apd-send');\n const { $toggle } = this.template;\n this.art.on('artplayerPluginDanmuku:show', ()=>{\n tooltip($toggle, \"\\u5173\\u95ED\\u5F39\\u5E55\");\n });\n this.art.on('artplayerPluginDanmuku:hide', ()=>{\n tooltip($toggle, \"\\u6253\\u5F00\\u5F39\\u5E55\");\n });\n }\n createEvents() {\n const { $toggle, $configModes, $styleModes, $colors, $antiOverlap, $syncVideo, $send, $input } = this.template;\n this.art.proxy($toggle, 'click', ()=>{\n this.danmuku.config({\n visible: !this.option.visible\n });\n this.reset();\n });\n this.art.proxy($configModes, 'click', (event)=>{\n const $mode = event.target.closest('.apd-mode');\n if (!$mode) return;\n const mode = Number($mode.dataset.mode);\n if (this.option.modes.includes(mode)) this.danmuku.config({\n modes: this.option.modes.filter((m)=>m !== mode)\n });\n else this.danmuku.config({\n modes: [\n ...this.option.modes,\n mode\n ]\n });\n this.reset();\n });\n this.art.proxy($antiOverlap, 'click', ()=>{\n this.danmuku.config({\n antiOverlap: !this.option.antiOverlap\n });\n this.reset();\n });\n this.art.proxy($syncVideo, 'click', ()=>{\n this.danmuku.config({\n synchronousPlayback: !this.option.synchronousPlayback\n });\n this.reset();\n });\n this.art.proxy($styleModes, 'click', (event)=>{\n const $mode = event.target.closest('.apd-mode');\n if (!$mode) return;\n const mode = Number($mode.dataset.mode);\n this.danmuku.config({\n mode\n });\n this.reset();\n });\n this.art.proxy($colors, 'click', (event)=>{\n const $color = event.target.closest('.apd-color');\n if (!$color) return;\n this.danmuku.config({\n color: $color.dataset.color\n });\n this.reset();\n });\n this.art.proxy($send, 'click', ()=>this.emit());\n this.art.proxy($input, 'keypress', (event)=>{\n if (event.key === 'Enter') {\n event.preventDefault();\n this.emit();\n }\n });\n }\n createSliders() {\n this.slider.opacity = this.createSlider({\n ...this.OPACITY,\n container: this.template.$opacitySlider,\n findIndex: ()=>{\n return Math.round(this.option.opacity * 100);\n },\n onChange: (index)=>{\n const { $opacityValue } = this.template;\n $opacityValue.textContent = `${index}%`;\n this.danmuku.config({\n opacity: index / 100\n });\n }\n });\n this.slider.margin = this.createSlider({\n ...this.MARGIN,\n container: this.template.$marginSlider,\n findIndex: ()=>{\n return this.MARGIN.steps.findIndex((item)=>item.value[0] === this.option.margin[0] && item.value[1] === this.option.margin[1]);\n },\n onChange: (index)=>{\n const margin = this.MARGIN.steps[index];\n if (!margin) return;\n const { $marginValue } = this.template;\n $marginValue.textContent = margin.name;\n this.danmuku.config({\n margin: margin.value\n });\n }\n });\n this.slider.fontSize = this.createSlider({\n ...this.FONT_SIZE,\n container: this.template.$fontSizeSlider,\n findIndex: ()=>{\n return this.danmuku.fontSize;\n },\n onChange: (index)=>{\n const { $fontSizeValue } = this.template;\n $fontSizeValue.textContent = `${index}px`;\n if (index === this.danmuku.fontSize) return;\n this.danmuku.config({\n fontSize: index\n });\n }\n });\n this.slider.speed = this.createSlider({\n ...this.SPEED,\n container: this.template.$speedSlider,\n findIndex: ()=>{\n return this.SPEED.steps.findIndex((item)=>item.value === this.option.speed);\n },\n onChange: (index)=>{\n const speed = this.SPEED.steps[index];\n if (!speed) return;\n const { $speedValue } = this.template;\n $speedValue.textContent = speed.name;\n this.danmuku.config({\n speed: speed.value\n });\n }\n });\n }\n createSlider({ min, max, container, findIndex, onChange, steps = [] }) {\n const { query, clamp, setStyle } = this.utils;\n setStyle(container, 'touch-action', 'none');\n container.innerHTML = `\n
\n
\n ${steps.map(()=>`
`).join('')}\n
\n
\n
\n
\n
\n ${steps.map((step)=>step.hide ? '' : `
${step.name}
`).join('')}\n
\n `;\n const $dot = query('.apd-slider-dot', container);\n const $progress = query('.apd-slider-progress', container);\n let isDroging = false;\n function reset(index = findIndex()) {\n if (index < min || index > max) return;\n const percentage = (index - min) / (max - min);\n $dot.style.left = `${percentage * 100}%`;\n if (steps.length === 0) $progress.style.width = $dot.style.left;\n onChange(index);\n }\n function updateLeft(event) {\n const { top, height, left, width } = container.getBoundingClientRect();\n if (this.art.isRotate) {\n const value = clamp(event.clientY - top, 0, height);\n const index = Math.round(value / height * (max - min) + min);\n reset(index);\n } else {\n const value = clamp(event.clientX - left, 0, width);\n const index = Math.round(value / width * (max - min) + min);\n reset(index);\n }\n }\n this.art.proxy(container, 'click', (event)=>{\n updateLeft.call(this, event);\n });\n this.art.proxy(container, 'pointerdown', (event)=>{\n isDroging = event.button === 0;\n });\n this.art.proxy(document, 'pointermove', (event)=>{\n if (isDroging) updateLeft.call(this, event);\n });\n this.art.proxy(document, 'pointerup', (event)=>{\n if (isDroging) {\n isDroging = false;\n updateLeft.call(this, event);\n }\n });\n return {\n reset\n };\n }\n onFullscreen(state) {\n const { $danmuku, $controlsCenter, $mount } = this.template;\n if (this.outside) {\n if (state) this.append($controlsCenter, $danmuku);\n else this.append($mount, $danmuku);\n } else this.append($controlsCenter, $danmuku);\n }\n onMouseEnter({ $control, $panel }) {\n const { $player } = this.art.template;\n const controlRect = $control.getBoundingClientRect();\n const panelRect = $panel.getBoundingClientRect();\n const playerRect = $player.getBoundingClientRect();\n const half = panelRect.width / 2 - controlRect.width / 2;\n const left = playerRect.left - (controlRect.left - half);\n const right = controlRect.right + half - playerRect.right;\n if (left > 0) $panel.style.left = `${-half + left}px`;\n else if (right > 0) $panel.style.left = `${-half - right}px`;\n else $panel.style.left = `${-half}px`;\n }\n async emit() {\n const { $input } = this.template;\n const text = $input.value.trim();\n if (!text.length) return;\n if (this.isLock) return;\n if (this.emitting) return;\n const danmu = {\n text,\n mode: this.option.mode,\n color: this.option.color,\n time: this.art.currentTime\n };\n try {\n this.emitting = true;\n const state = await this.option.beforeEmit(danmu);\n this.emitting = false;\n if (state !== true) return;\n danmu.border = true;\n delete danmu.time;\n this.danmuku.emit(danmu);\n $input.value = '';\n this.lock();\n } catch (error) {\n console.error('Error emitting danmuku:', error);\n this.emitting = false;\n }\n }\n lock() {\n const { addClass } = this.utils;\n const { $send } = this.template;\n this.isLock = true;\n let time = this.option.lockTime;\n $send.textContent = time;\n addClass($send, 'apd-lock');\n const loop = ()=>{\n this.timer = setTimeout(()=>{\n if (time === 0) this.unlock();\n else {\n time -= 1;\n $send.textContent = time;\n loop();\n }\n }, 1000);\n };\n loop();\n }\n unlock() {\n const { removeClass } = this.utils;\n const { $send } = this.template;\n clearTimeout(this.timer);\n this.isLock = false;\n $send.textContent = \"\\u53D1\\u9001\";\n removeClass($send, 'apd-lock');\n }\n resize() {\n if (this.outside) return;\n if (this.art.fullscreen) return;\n if (this.art.fullscreenWeb) return;\n const { $player, $controlsCenter } = this.art.template;\n const { $danmuku } = this.template;\n if (this.art.width < this.option.width) this.append($player, $danmuku);\n else this.append($controlsCenter, $danmuku);\n }\n reset() {\n const { inverseClass, tooltip } = this.utils;\n const { $toggle, $colors } = this.template;\n this.slider.opacity.reset();\n this.slider.margin.reset();\n this.slider.fontSize.reset();\n this.slider.speed.reset();\n this.setData('danmukuVisible', this.option.visible);\n this.setData('danmukuMode', this.option.mode);\n this.setData('danmukuColor', this.option.color);\n this.setData('danmukuMode0', this.option.modes.includes(0));\n this.setData('danmukuMode1', this.option.modes.includes(1));\n this.setData('danmukuMode2', this.option.modes.includes(2));\n this.setData('danmukuAntiOverlap', this.option.antiOverlap);\n this.setData('danmukuSyncVideo', this.option.synchronousPlayback);\n this.setData('danmukuTheme', this.option.theme);\n this.setData('danmukuEmitter', this.option.emitter);\n const colors = $colors.children;\n const $color = Array.from(colors).find((item)=>item.dataset.color === this.option.color.toUpperCase());\n $color && inverseClass($color, 'apd-active');\n tooltip($toggle, this.option.visible ? \"\\u5173\\u95ED\\u5F39\\u5E55\" : \"\\u6253\\u5F00\\u5F39\\u5E55\");\n this.resize();\n }\n mount(target) {\n const { errorHandle } = this.utils;\n const $el = typeof target === 'string' ? document.querySelector(target) : target;\n errorHandle($el, `Can not find the mount point: ${target}`);\n this.append($el, this.template.$danmuku);\n this.template.$mount = $el;\n this.reset();\n }\n}\nexports.default = Setting;\nif (typeof document !== 'undefined') {\n const id = 'artplayer-plugin-danmuku';\n let $style = document.getElementById(id);\n if (!$style) {\n $style = document.createElement('style');\n $style.id = id;\n if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', ()=>{\n document.head.appendChild($style);\n });\n else (document.head || document.documentElement).appendChild($style);\n }\n $style.textContent = (0, _styleLessDefault.default);\n}\n\n},{\"bundle-text:./img/check_off.svg\":\"4tC1X\",\"bundle-text:./img/check_on.svg\":\"iQql8\",\"bundle-text:./img/config.svg\":\"DK7bp\",\"bundle-text:./img/mode_0_off.svg\":\"fp5qd\",\"bundle-text:./img/mode_0_on.svg\":\"fYNQe\",\"bundle-text:./img/mode_1_off.svg\":\"gQMgY\",\"bundle-text:./img/mode_1_on.svg\":\"5E8Hg\",\"bundle-text:./img/mode_2_off.svg\":\"89iSb\",\"bundle-text:./img/mode_2_on.svg\":\"2YEb0\",\"bundle-text:./img/off.svg\":\"3WiJz\",\"bundle-text:./img/on.svg\":\"5XkVj\",\"bundle-text:./img/style.svg\":\"h2xX3\",\"bundle-text:./style.less\":\"dHTK8\",\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}],\"4tC1X\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"iQql8\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"DK7bp\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"fp5qd\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"fYNQe\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"gQMgY\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"5E8Hg\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"89iSb\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"2YEb0\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"3WiJz\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"5XkVj\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"h2xX3\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"dHTK8\":[function(require,module,exports,__globalThis) {\nmodule.exports = \".artplayer-plugin-danmuku{z-index:99;color:#fff;flex-shrink:0;justify-content:center;align-items:center;gap:10px;width:100%;height:32px;font-size:12px;font-weight:300;display:flex;position:relative}.artplayer-plugin-danmuku .apd-icon{cursor:pointer;opacity:.75;fill:#fff;transition:all .2s}.artplayer-plugin-danmuku .apd-icon:hover{opacity:1}.artplayer-plugin-danmuku .apd-config{display:flex;position:relative}.artplayer-plugin-danmuku .apd-config .apd-config-panel{opacity:0;pointer-events:none;width:320px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-config .apd-config-panel .apd-config-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-config:hover .apd-config-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-config-mode,.artplayer-plugin-danmuku .apd-config-slider,.artplayer-plugin-danmuku .apd-config-other,.artplayer-plugin-danmuku .apd-style-mode{margin-bottom:15px}.artplayer-plugin-danmuku .apd-modes{align-items:center;gap:20px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-modes .apd-mode{cursor:pointer;text-align:center}.artplayer-plugin-danmuku .apd-modes .apd-mode:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-config-slider{align-items:center;gap:12px;display:flex}.artplayer-plugin-danmuku .apd-config-slider .apd-value{text-align:right;width:32px}.artplayer-plugin-danmuku .apd-slider{cursor:pointer;flex:1;justify-content:center;align-items:center;height:20px;display:flex;position:relative}.artplayer-plugin-danmuku .apd-slider .apd-slider-line{background-color:#ffffff40;border-radius:3px;width:100%;height:2px;position:relative;overflow:hidden}.artplayer-plugin-danmuku .apd-slider .apd-slider-points{justify-content:space-between;align-items:center;display:flex;position:absolute;inset:0}.artplayer-plugin-danmuku .apd-slider .apd-slider-points .apd-slider-point{background-color:#ffffff80;border-radius:50%;width:2px;height:2px}.artplayer-plugin-danmuku .apd-slider .apd-slider-progress{background-color:#00a1d6;width:0%;height:100%}.artplayer-plugin-danmuku .apd-slider .apd-slider-dot{background-color:#00a1d6;border-radius:50%;width:12px;height:12px;position:absolute;left:0%;transform:translate(-6px)}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps{color:#777;justify-content:space-between;align-items:center;width:calc(100% + 32px);display:flex;position:absolute;bottom:-12px}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps .apd-slider-step{text-align:center;flex-shrink:0;width:36px;scale:.95}.artplayer-plugin-danmuku .apd-config-other{align-items:center;gap:20px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-check-off,.artplayer-plugin-danmuku .apd-config-other .apd-check-on{width:16px;height:16px}.artplayer-plugin-danmuku .apd-config-other .apd-other{cursor:pointer;align-items:center;gap:2px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-other:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-emitter{background-color:#ffffff40;border-radius:5px;flex:1;align-items:center;height:100%;display:flex}.artplayer-plugin-danmuku .apd-style{justify-content:center;align-items:center;display:flex;position:relative}.artplayer-plugin-danmuku .apd-style .apd-style-panel{opacity:0;pointer-events:none;width:200px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-style .apd-style-panel .apd-style-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-style:hover .apd-style-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-colors{flex-wrap:wrap;gap:8px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-colors .apd-color{cursor:pointer;border-radius:2px;width:16px;height:16px}.artplayer-plugin-danmuku .apd-colors .apd-color.apd-active{border:1px solid #000;box-shadow:0 0 0 1px #fff}.artplayer-plugin-danmuku .apd-input{color:#fff;background-color:#0000;border:none;outline:none;flex:1;width:auto;min-width:0;height:100%;line-height:1}.artplayer-plugin-danmuku .apd-input::placeholder{color:#ffffff80}.artplayer-plugin-danmuku .apd-send{cursor:pointer;width:60px;height:100%;text-shadow:none;background-color:#00a1d6;border-top-right-radius:5px;border-bottom-right-radius:5px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.artplayer-plugin-danmuku .apd-send.apd-lock{cursor:not-allowed;color:#666;background-color:#e7e7e7}.art-controls-center .apd-emitter{flex:none;width:260px}.art-fullscreen .artplayer-plugin-danmuku,.art-fullscreen-web .artplayer-plugin-danmuku{gap:16px;height:38px}.art-fullscreen .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen-web .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-on,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-on{width:28px;height:28px}.art-fullscreen .artplayer-plugin-danmuku .apd-emitter,.art-fullscreen-web .artplayer-plugin-danmuku .apd-emitter{flex:none;width:400px}.art-video-player>.artplayer-plugin-danmuku{padding:0 10px;position:absolute;bottom:-40px;left:0;right:0}.art-video-player:has(>.artplayer-plugin-danmuku){margin-bottom:40px}[data-danmuku-emitter=false] .apd-emitter{display:none!important}[data-danmuku-emitter=false] .art-controls-center .artplayer-plugin-danmuku{justify-content:flex-end;gap:18px}[data-danmuku-emitter=false].art-fullscreen .art-controls-center .artplayer-plugin-danmuku,[data-danmuku-emitter=false].art-fullscreen-web .art-controls-center .artplayer-plugin-danmuku{gap:24px}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-icon{fill:#333}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-emitter{background-color:#f1f2f3}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input{color:#000}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input::placeholder{color:#0000004d}[data-danmuku-visible=false] .apd-toggle-off{display:block}[data-danmuku-visible=false] .apd-toggle-on,[data-danmuku-visible=true] .apd-toggle-off{display:none}[data-danmuku-visible=true] .apd-toggle-on{display:block}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-on{display:none}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-off,[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-on{display:block}[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-off,[data-danmuku-sync-video=false] .apd-sync-video .apd-check-on{display:none}[data-danmuku-sync-video=false] .apd-sync-video .apd-check-off,[data-danmuku-sync-video=true] .apd-sync-video .apd-check-on{display:block}[data-danmuku-sync-video=true] .apd-sync-video .apd-check-off{display:none}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-off{display:block}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-on{display:none}[data-danmuku-mode0=false] .art-danmuku [data-mode=\\\"0\\\"]{opacity:0!important}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-off{display:none}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-on{display:block}[data-danmuku-mode=\\\"0\\\"] .apd-style-mode [data-mode=\\\"0\\\"]{color:#00a1d6}[data-danmuku-mode=\\\"0\\\"] .apd-style-mode [data-mode=\\\"0\\\"] path{fill:#00a1d6}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-off{display:block}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-on{display:none}[data-danmuku-mode1=false] .art-danmuku [data-mode=\\\"1\\\"]{opacity:0!important}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-off{display:none}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-on{display:block}[data-danmuku-mode=\\\"1\\\"] .apd-style-mode [data-mode=\\\"1\\\"]{color:#00a1d6}[data-danmuku-mode=\\\"1\\\"] .apd-style-mode [data-mode=\\\"1\\\"] path{fill:#00a1d6}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-off{display:block}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-on{display:none}[data-danmuku-mode2=false] .art-danmuku [data-mode=\\\"2\\\"]{opacity:0!important}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-off{display:none}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-on{display:block}[data-danmuku-mode=\\\"2\\\"] .apd-style-mode [data-mode=\\\"2\\\"]{color:#00a1d6}[data-danmuku-mode=\\\"2\\\"] .apd-style-mode [data-mode=\\\"2\\\"] path{fill:#00a1d6}\";\n\n},{}]},[\"6ZbtA\"], \"6ZbtA\", \"parcelRequire4dc0\", {})\nlet {default: _default, } = parcelRequire4dc0(\"6ZbtA\");\nexport {_default as default, };\n\n//# sourceMappingURL=index.js.map\n","import Danmuku from './danmuku'\nimport heatmap from './heatmap'\nimport Setting from './setting'\n\nexport default function artplayerPluginDanmuku(option) {\n return (art) => {\n const danmuku = new Danmuku(art, option)\n const setting = new Setting(art, danmuku)\n\n if (danmuku.option.heatmap) {\n heatmap(art, danmuku, danmuku.option.heatmap)\n }\n\n return {\n name: 'artplayerPluginDanmuku',\n emit: danmuku.emit.bind(danmuku),\n load: danmuku.load.bind(danmuku),\n config: danmuku.config.bind(danmuku),\n hide: danmuku.hide.bind(danmuku),\n show: danmuku.show.bind(danmuku),\n reset: danmuku.reset.bind(danmuku),\n mount: setting.mount.bind(setting),\n get option() {\n return danmuku.option\n },\n get isHide() {\n return danmuku.isHide\n },\n get isStop() {\n return danmuku.isStop\n },\n }\n }\n}\n\nartplayerPluginDanmuku.icons = Setting.icons\n\nif (typeof window !== 'undefined') {\n window.artplayerPluginDanmuku = artplayerPluginDanmuku\n}\n","import workerText from 'bundle-text:./worker'\nimport { bilibiliDanmuParseFromUrl } from './bilibili'\n\nexport default class Danmuku {\n constructor(art, option) {\n const { constructor, template } = art\n\n this.utils = constructor.utils // 工具库\n this.validator = constructor.validator // 配置校验器\n this.$danmuku = template.$danmuku // 弹幕层容器\n this.$player = template.$player // 播放器容器\n\n this.art = art\n this.queue = [] // 实际弹幕队列\n this.$refs = [] // 弹幕DOM节点池\n this.isStop = false // 是否停止\n this.isHide = false // 是否隐藏\n this.timer = null // 定时器\n this.index = 0 // 弹幕索引\n\n // 格式化后的配置项\n this.option = Danmuku.option\n\n // 弹幕状态池\n this.states = { wait: [], ready: [], emit: [], stop: [] }\n\n // 初始化配置\n this.config(option, true)\n\n // 创建 Web Worker, 用于计算弹幕的 top 值\n const workerText2 = workerText.replace('export{e as default};', '')\n const blob = new Blob([workerText2], { type: 'application/javascript' })\n this.worker = new Worker(URL.createObjectURL(blob))\n\n // 绑定公用事件\n this.start = this.start.bind(this)\n this.stop = this.stop.bind(this)\n this.reset = this.reset.bind(this)\n this.resize = this.resize.bind(this)\n this.destroy = this.destroy.bind(this)\n\n // 监听事件\n art.on('video:play', this.start)\n art.on('video:playing', this.start)\n art.on('video:pause', this.stop)\n art.on('video:waiting', this.stop)\n art.on('destroy', this.destroy)\n art.on('resize', this.resize)\n\n // 开始加载弹幕\n this.load()\n }\n\n // 默认配置\n static get option() {\n return {\n danmuku: [], // 弹幕数据\n speed: 5, // 弹幕持续时间,范围在[1 ~ 10]\n margin: [10, '25%'], // 弹幕上下边距,支持像素数字和百分比\n opacity: 1, // 弹幕透明度,范围在[0 ~ 1]\n color: '#FFFFFF', // 默认弹幕颜色,可以被单独弹幕项覆盖\n mode: 0, // 默认弹幕模式: 0: 滚动,1: 顶部,2: 底部\n modes: [0, 1, 2], // 弹幕可见的模式\n fontSize: 25, // 弹幕字体大小,支持像素数字和百分比\n antiOverlap: true, // 弹幕是否防重叠\n synchronousPlayback: false, // 是否同步播放速度\n mount: undefined, // 弹幕发射器挂载点, 默认为播放器控制栏中部\n heatmap: false, // 是否开启热力图\n width: 512, // 当播放器宽度小于此值时,弹幕发射器置于播放器底部\n points: [], // 热力图数据\n filter: () => true, // 弹幕载入前的过滤器,只支持返回布尔值\n beforeEmit: () => true, // 弹幕发送前的过滤器,支持返回 Promise\n beforeVisible: () => true, // 弹幕显示前的过滤器,支持返回 Promise\n visible: true, // 弹幕层是否可见\n emitter: true, // 是否开启弹幕发射器\n maxLength: 200, // 弹幕输入框最大长度, 范围在[1 ~ 1000]\n lockTime: 5, // 输入框锁定时间,范围在[1 ~ 60]\n theme: 'dark', // 弹幕主题,支持 dark 和 light,只在自定义挂载时生效\n OPACITY: {}, // 不透明度配置项\n FONT_SIZE: {}, // 弹幕字号配置项\n MARGIN: {}, // 显示区域配置项\n SPEED: {}, // 弹幕速度配置项\n COLOR: [], // 颜色列表配置项\n }\n }\n\n // 配置校验\n static get scheme() {\n return {\n danmuku: 'array|function|string',\n speed: 'number',\n margin: 'array',\n opacity: 'number',\n color: 'string',\n mode: 'number',\n modes: 'array',\n fontSize: 'number|string',\n antiOverlap: 'boolean',\n synchronousPlayback: 'boolean',\n mount: '?htmldivelement|string',\n heatmap: 'object|boolean',\n width: 'number',\n points: 'array',\n filter: 'function',\n beforeEmit: 'function',\n beforeVisible: 'function',\n visible: 'boolean',\n emitter: 'boolean',\n maxLength: 'number',\n lockTime: 'number',\n theme: 'string',\n OPACITY: 'object',\n FONT_SIZE: 'object',\n MARGIN: 'object',\n SPEED: 'object',\n COLOR: 'array',\n }\n }\n\n // 初始弹幕样式\n static get cssText() {\n return `\n user-select: none;\n position: absolute;\n white-space: pre;\n pointer-events: none;\n perspective: 500px;\n display: inline-block;\n will-change: transform;\n font-weight: normal;\n line-height: 1.125;\n visibility: hidden;\n font-family: SimHei, \"Microsoft JhengHei\", Arial, Helvetica, sans-serif;\n text-shadow: rgb(0, 0, 0) 1px 0px 1px, rgb(0, 0, 0) 0px 1px 1px, rgb(0, 0, 0) 0px -1px 1px, rgb(0, 0, 0) -1px 0px 1px;\n `\n }\n\n // 是否在移动端使用了自动旋屏,会影响弹幕的left和top值\n get isRotate() {\n return this.art.plugins?.autoOrientation?.state\n }\n\n // 计算上空白边距\n get marginTop() {\n const { clamp } = this.utils\n const value = this.option.margin[0]\n const { clientHeight } = this.$player\n\n if (typeof value === 'number') {\n return clamp(value, 0, clientHeight)\n }\n\n if (typeof value === 'string' && value.endsWith('%')) {\n const ratio = Number.parseFloat(value) / 100\n return clamp(clientHeight * ratio, 0, clientHeight)\n }\n\n return Danmuku.option.margin[0]\n }\n\n // 计算下空白边距\n get marginBottom() {\n const { clamp } = this.utils\n const value = this.option.margin[1]\n const { clientHeight } = this.$player\n\n if (typeof value === 'number') {\n return clamp(value, 0, clientHeight)\n }\n\n if (typeof value === 'string' && value.endsWith('%')) {\n const ratio = Number.parseFloat(value) / 100\n return clamp(clientHeight * ratio, 0, clientHeight)\n }\n\n return Danmuku.option.margin[1]\n }\n\n // 计算弹幕字体大小\n get fontSize() {\n const { clamp } = this.utils\n const { clientHeight } = this.$player\n\n const fontSize = this.option.fontSize\n\n if (typeof fontSize === 'number') {\n return Math.round(clamp(fontSize, 12, clientHeight))\n }\n\n if (typeof fontSize === 'string' && fontSize.endsWith('%')) {\n const ratio = Number.parseFloat(fontSize) / 100\n return Math.round(clamp(clientHeight * ratio, 12, clientHeight))\n }\n\n return Danmuku.option.fontSize\n }\n\n // 获取弹幕DOM节点\n get $ref() {\n const $ref = this.$refs.pop() || document.createElement('div')\n $ref.style.cssText = Danmuku.cssText\n $ref.dataset.mode = ''\n $ref.className = ''\n return $ref\n }\n\n // 获取准备好发送的弹幕\n get readys() {\n const { currentTime } = this.art\n\n const result = []\n\n // 有的是ready状态:之前因为弹幕太多而暂停发送的弹幕\n this.filter('ready', danmu => result.push(danmu))\n\n // 有的是wait状态:符合时间范围的弹幕\n this.filter('wait', (danmu) => {\n if (currentTime + 0.1 >= danmu.time && danmu.time >= currentTime - 0.1) {\n result.push(danmu)\n }\n })\n\n return result\n }\n\n // 可见的弹幕的数据,用于计算下一个弹幕的top值\n get visibles() {\n const result = []\n const { clientWidth } = this.$player\n const clientLeft = this.getLeft(this.$player)\n\n this.filter('emit', (danmu) => {\n const top = danmu.$ref.offsetTop\n const left = this.getLeft(danmu.$ref) - clientLeft\n const height = danmu.$ref.clientHeight\n const width = danmu.$ref.clientWidth\n const distance = left + width\n const right = clientWidth - distance\n const speed = distance / danmu.$restTime\n\n const emit = {}\n emit.top = top\n emit.left = left\n emit.height = height\n emit.width = width\n emit.right = right\n emit.speed = speed\n emit.distance = distance\n emit.time = danmu.$restTime\n emit.mode = danmu.mode\n\n result.push(emit)\n })\n\n return result\n }\n\n // 计算弹幕速度\n get speed() {\n return this.option.synchronousPlayback && this.art.playbackRate\n ? this.option.speed / Number(this.art.playbackRate)\n : this.option.speed\n }\n\n // 加载弹幕\n async load(danmuku) {\n const { errorHandle } = this.utils\n\n let danmus = []\n const target = danmuku || this.option.danmuku\n\n try {\n if (typeof target === 'function') {\n danmus = await target() // 异步函数获取\n }\n else if (target instanceof Promise) {\n danmus = await target // 从 Promise 对象获取\n }\n else if (typeof target === 'string') {\n danmus = await bilibiliDanmuParseFromUrl(target) // 从B站xml链接解析\n }\n else if (Array.isArray(target)) {\n danmus = target // 直接传入数组\n }\n\n errorHandle(Array.isArray(danmus), 'Danmuku need return an array as result')\n\n // 假如没有传入弹幕参数,则清空弹幕,否则追加弹幕\n if (danmuku === undefined) {\n this.reset() // 重置弹幕\n this.queue = [] // 清空弹幕队列\n this.states = { wait: [], ready: [], emit: [], stop: [] } // 清空弹幕状态池\n this.$refs = [] // 清空弹幕DOM节点池\n this.$danmuku.textContent = '' // 清空弹幕层\n }\n\n // 逐个验证原始弹幕并转换到弹幕队列\n for (let index = 0; index < danmus.length; index++) {\n const danmu = danmus[index]\n await this.emit(danmu)\n }\n\n this.art.emit('artplayerPluginDanmuku:loaded', this.queue)\n }\n catch (error) {\n this.art.emit('artplayerPluginDanmuku:error', error)\n throw error\n }\n\n return this\n }\n\n // 把原始弹幕转换到弹幕队列\n async emit(danmu) {\n const { clamp } = this.utils\n\n this.validator(danmu, {\n text: 'string', // 弹幕文本\n mode: '?number', // 弹幕模式: 0: 滚动,1: 顶部,2: 底部\n color: '?string', // 弹幕颜色\n time: '?number', // 弹幕时间\n border: '?boolean', // 弹幕是否有边框\n style: '?object', // 弹幕额外样式\n })\n\n // 弹幕文本为空则直接忽略\n if (!danmu.text.trim())\n return this\n\n // 设置弹幕时间,如果没有则默认为当前时间加 0.5 秒\n if (danmu.time) {\n danmu.time = clamp(danmu.time, 0, Infinity)\n }\n else {\n danmu.time = this.art.currentTime + 0.5\n }\n\n // 设置弹幕模式,如果没有则默认为全局配置\n if (danmu.mode === undefined) {\n danmu.mode = this.option.mode\n }\n\n // 设置弹幕单独样式,如果没有则默认为空对象\n if (danmu.style === undefined) {\n danmu.style = {}\n }\n\n // 设置弹幕颜色,如果没有则默认为全局配置\n if (danmu.color === undefined) {\n danmu.color = this.option.color\n }\n\n // 弹幕模式只能是 0, 1, 2\n if (![0, 1, 2].includes(danmu.mode))\n return this\n\n // 自定义弹幕过滤函数\n if (!this.option.filter(danmu))\n return this\n\n // 添加自定义属性\n const item = {\n ...danmu,\n $state: 'wait', // 弹幕初始状态\n $id: this.index++, // 弹幕唯一标识\n $ref: null, // 弹幕 DOM 节点\n $restTime: 0, // 弹幕剩余时间\n $lastStartTime: 0, // 弹幕上次开始时间\n }\n\n // 转换为wait状态\n this.setState(item, 'wait')\n\n // 添加到实际弹幕队列\n this.queue.push(item)\n\n // 弹幕有四个状态:\n // - wait: 弹幕还未开始显示,没有被添加到 DOM 中\n // - ready: 弹幕准备好显示,没有被添加到 DOM 中\n // - emit: 弹幕正在显示,已经被添加到 DOM 中\n // - stop: 弹幕正在停止显示,已经被添加到 DOM 中\n\n return this\n }\n\n // 动态配置\n config(option, isInit = false) {\n const { clamp } = this.utils\n const { $controlsCenter } = this.art.template\n\n // 判断配置项是否有变化\n const changed = Object.keys(option).some(\n key => JSON.stringify(this.option[key]) !== JSON.stringify(option[key]),\n )\n\n // 没有变化则直接返回\n if (!changed && !isInit)\n return this\n\n // 更新配置项\n this.option = Object.assign({}, Danmuku.option, this.option, option)\n this.validator(this.option, Danmuku.scheme)\n\n this.option.mode = clamp(this.option.mode, 0, 2)\n this.option.speed = clamp(this.option.speed, 1, 10)\n this.option.opacity = clamp(this.option.opacity, 0, 1)\n this.option.lockTime = clamp(this.option.lockTime, 1, 60)\n this.option.maxLength = clamp(this.option.maxLength, 1, 1000)\n this.option.mount = this.option.mount || $controlsCenter\n\n // 动态配置有字体大小,需要重新渲染\n if (option.fontSize) {\n this.reset()\n }\n\n // 通过配置项控制弹幕的显示和隐藏\n if (this.option.visible) {\n this.show()\n }\n else {\n this.hide()\n }\n\n this.art.emit('artplayerPluginDanmuku:config', this.option)\n\n return this\n }\n\n // 计算DOM的left值,受到旋屏影响\n getLeft($ref) {\n const rect = $ref.getBoundingClientRect()\n return this.isRotate ? rect.top : rect.left\n }\n\n // 复杂运算交给 Web Worker 处理\n postMessage(message = {}) {\n return new Promise((resolve) => {\n message.id = Date.now() // 生成唯一标识\n this.worker.postMessage(message)\n this.worker.onmessage = (event) => {\n const { data } = event\n // 判断是否是当前的消息\n if (data.id === message.id) {\n resolve(data)\n }\n }\n })\n }\n\n // 根据状态获取弹幕\n filter(state, callback) {\n const danmus = this.states[state] || []\n for (let index = 0; index < danmus.length; index++) {\n callback(danmus[index])\n }\n return danmus\n }\n\n // 设置弹幕状态\n setState(danmu, state) {\n // 从原状态池中删除\n this.states[danmu.$state] = this.states[danmu.$state].filter(item => item !== danmu)\n\n // 设置新状态\n danmu.$state = state\n\n // 设置DOM节点状态\n if (danmu.$ref) {\n danmu.$ref.dataset.state = state\n }\n\n // 添加到新状态池中\n this.states[state].push(danmu)\n }\n\n // 重置弹幕到wait状态,回收弹幕DOM节点\n makeWait(danmu) {\n this.setState(danmu, 'wait')\n if (danmu.$ref) {\n danmu.$ref.style.cssText = Danmuku.cssText\n danmu.$ref.style.visibility = 'hidden'\n danmu.$ref.style.marginLeft = '0px'\n danmu.$ref.style.transform = 'translateX(0px)'\n danmu.$ref.style.transition = 'transform 0s linear 0s'\n this.$refs.push(danmu.$ref)\n danmu.$ref = null\n }\n }\n\n // 实时更新弹幕\n update() {\n const { setStyles } = this.utils\n\n this.timer = window.requestAnimationFrame(async () => {\n if (this.art.playing && !this.isHide) {\n // 实时计算弹幕的剩余显示时间\n this.filter('emit', (danmu) => {\n const emitTime = (Date.now() - danmu.$lastStartTime) / 1000\n danmu.$restTime -= emitTime\n danmu.$lastStartTime = Date.now()\n // 超过时间即重置弹幕\n if (danmu.$restTime <= 0) {\n this.makeWait(danmu)\n }\n })\n\n // 获取准备好发送的弹幕,可能包含ready和wait状态的弹幕\n const readys = this.readys\n\n for (let index = 0; index < readys.length; index++) {\n const danmu = readys[index]\n\n // 弹幕发送前的过滤器\n const state = await this.option.beforeVisible(danmu)\n\n if (state) {\n const { clientWidth, clientHeight } = this.$player\n danmu.$ref = this.$ref // 获取弹幕DOM节点\n danmu.$ref.textContent = danmu.text // 设置弹幕文本\n\n // 提前添加到弹幕层中,用于计算top值\n this.$danmuku.appendChild(danmu.$ref)\n\n // 设置初始弹幕样式\n danmu.$ref.style.opacity = this.option.opacity\n danmu.$ref.style.fontSize = `${this.fontSize}px`\n danmu.$ref.style.color = danmu.color\n danmu.$ref.style.border = danmu.border ? `1px solid ${danmu.color}` : null\n danmu.$ref.style.backgroundColor = danmu.border ? 'rgb(0 0 0 / 50%)' : null\n\n // 设置单独弹幕样式\n setStyles(danmu.$ref, danmu.style)\n\n // 记录弹幕时间戳\n danmu.$lastStartTime = Date.now()\n\n // 计算弹幕剩余时间\n danmu.$restTime = this.speed\n\n // 计算弹幕滚动的距离\n const distance = clientWidth + danmu.$ref.clientWidth\n\n // 计算弹幕的top值\n const { result: top } = await this.postMessage({\n type: 'getDanmuTop',\n target: {\n mode: danmu.mode,\n height: danmu.$ref.clientHeight,\n speed: distance / danmu.$restTime,\n }, // 当前弹幕信息\n visibles: this.visibles, // 可见的弹幕的数据\n antiOverlap: this.option.antiOverlap,\n clientWidth,\n clientHeight,\n marginBottom: this.marginBottom,\n marginTop: this.marginTop,\n })\n\n if (danmu.$ref) {\n if (!this.isStop && top !== undefined) {\n this.setState(danmu, 'emit') // 转换为emit状态\n danmu.$ref.style.top = `${top}px`\n danmu.$ref.style.visibility = 'visible'\n danmu.$ref.dataset.mode = danmu.mode // CSS控制模式的显示和隐藏\n\n switch (danmu.mode) {\n // 滚动的弹幕\n case 0: {\n danmu.$ref.style.left = `${clientWidth}px`\n danmu.$ref.style.marginLeft = '0px'\n danmu.$ref.style.transform = `translateX(${-distance}px)`\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`\n break\n }\n case 1:\n // falls through\n case 2:\n danmu.$ref.style.left = '50%'\n danmu.$ref.style.marginLeft = `-${danmu.$ref.clientWidth / 2}px`\n break\n default:\n break\n }\n\n this.art.emit('artplayerPluginDanmuku:visible', danmu)\n }\n else {\n // 假如弹幕已经停止或者没有 top 值,则重置弹幕为ready状态,回收弹幕DOM节点,等待下次发送\n this.setState(danmu, 'ready')\n this.$refs.push(danmu.$ref)\n danmu.$ref = null\n }\n }\n }\n }\n }\n\n // 递归调用\n if (!this.isStop) {\n this.update()\n }\n })\n return this\n }\n\n // 重置正在显示的弹幕: stop/emit 状态的弹幕\n resize() {\n const { clientWidth } = this.$player\n\n this.filter('stop', (danmu) => {\n switch (danmu.mode) {\n // 滚动的弹幕\n case 0:\n danmu.$ref.style.left = `${clientWidth}px`\n break\n default:\n break\n }\n })\n\n this.filter('emit', (danmu) => {\n danmu.$lastStartTime = Date.now()\n switch (danmu.mode) {\n // 滚动的弹幕\n case 0: {\n const distance = clientWidth + danmu.$ref.clientWidth\n danmu.$ref.style.left = `${clientWidth}px`\n danmu.$ref.style.transform = `translateX(${-distance}px)`\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`\n break\n }\n default:\n break\n }\n })\n }\n\n // 继续弹幕\n continue() {\n const { clientWidth } = this.$player\n this.filter('stop', (danmu) => {\n this.setState(danmu, 'emit') // 转换为emit状态\n danmu.$lastStartTime = Date.now()\n switch (danmu.mode) {\n // 继续滚动的弹幕\n case 0: {\n const distance = clientWidth + danmu.$ref.clientWidth\n danmu.$ref.style.transform = `translateX(${-distance}px)`\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`\n break\n }\n default:\n break\n }\n })\n\n return this\n }\n\n // 暂停弹幕\n suspend() {\n const { clientWidth } = this.$player\n this.filter('emit', (danmu) => {\n this.setState(danmu, 'stop') // 转换为stop状态\n switch (danmu.mode) {\n // 停止滚动的弹幕\n case 0: {\n const translateX = clientWidth - (this.getLeft(danmu.$ref) - this.getLeft(this.$player))\n danmu.$ref.style.transform = `translateX(${-translateX}px)`\n danmu.$ref.style.transition = 'transform 0s linear 0s'\n break\n }\n default:\n break\n }\n })\n\n return this\n }\n\n stop() {\n this.isStop = true\n this.suspend()\n window.cancelAnimationFrame(this.timer)\n this.art.emit('artplayerPluginDanmuku:stop')\n return this\n }\n\n start() {\n this.isStop = false\n this.continue()\n this.update()\n this.art.emit('artplayerPluginDanmuku:start')\n return this\n }\n\n reset() {\n this.queue.forEach(danmu => this.makeWait(danmu))\n this.art.emit('artplayerPluginDanmuku:reset')\n return this\n }\n\n show() {\n this.isHide = false\n this.$danmuku.style.opacity = 1\n this.option.visible = true\n this.art.emit('artplayerPluginDanmuku:show')\n return this\n }\n\n hide() {\n this.isHide = true\n this.$danmuku.style.opacity = 0\n this.option.visible = false\n this.art.emit('artplayerPluginDanmuku:hide')\n return this\n }\n\n destroy() {\n this.stop()\n this.worker.terminate()\n this.art.off('video:play', this.start)\n this.art.off('video:playing', this.start)\n this.art.off('video:pause', this.stop)\n this.art.off('video:waiting', this.stop)\n this.art.off('resize', this.reset)\n this.art.off('destroy', this.destroy)\n this.art.emit('artplayerPluginDanmuku:destroy')\n }\n}\n","module.exports = \"dd7efcb5fd87c1c0\";","function getMode(key) {\n switch (key) {\n case 1:\n case 2:\n case 3:\n return 0\n case 4:\n return 2\n case 5:\n return 1\n default:\n return 0\n }\n}\n\nfunction bilibiliDanmuParseFromXml(xmlString) {\n if (typeof xmlString !== 'string')\n return []\n const reg = /]*?p=\"(?

[^\"]+)\"[^>]*>(?.*?)<\\/d>/gs\n const matches = xmlString.matchAll(reg)\n return Array.from(matches)\n .map((match) => {\n const attr = match.groups.p.split(',')\n if (attr.length >= 8) {\n const text = match.groups.text\n .trim()\n .replaceAll('"', '\"')\n .replaceAll(''', '\\'')\n .replaceAll('<', '<')\n .replaceAll('>', '>')\n .replaceAll('&', '&')\n\n return {\n text,\n time: Number(attr[0]),\n mode: getMode(Number(attr[1])),\n fontSize: Number(attr[2]),\n color: `#${Number(attr[3]).toString(16)}`,\n timestamp: Number(attr[4]),\n pool: Number(attr[5]),\n userID: attr[6],\n rowID: Number(attr[7]),\n }\n }\n else {\n return null\n }\n })\n .filter(Boolean)\n}\n\nfunction onmessage({ data }) {\n const { xml, id } = data\n if (!id || !xml)\n return\n const danmus = bilibiliDanmuParseFromXml(xml)\n globalThis.postMessage({ danmus, id })\n}\n\nfunction createWorker() {\n const workerText = `\n ${getMode.toString()}\n ${bilibiliDanmuParseFromXml.toString()}\n onmessage = ${onmessage.toString()}\n `\n const blob = new Blob([workerText], { type: 'application/javascript' })\n return new Worker(URL.createObjectURL(blob))\n}\n\nexport function bilibiliDanmuParseFromUrl(url) {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve) => {\n const res = await fetch(url)\n const xml = await res.text()\n\n try {\n const worker = createWorker()\n worker.onmessage = (event) => {\n const { danmus, id } = event.data\n if (!id || !danmus)\n return\n resolve(danmus)\n worker.terminate()\n }\n worker.postMessage({ xml, id: Date.now() })\n }\n catch (error) {\n console.error('Error parsing Bilibili Danmu:', error)\n const danmus = bilibiliDanmuParseFromXml(xml)\n resolve(danmus)\n }\n })\n}\n","exports.interopDefault = function (a) {\n return a && a.__esModule ? a : {default: a};\n};\n\nexports.defineInteropFlag = function (a) {\n Object.defineProperty(a, '__esModule', {value: true});\n};\n\nexports.exportAll = function (source, dest) {\n Object.keys(source).forEach(function (key) {\n if (\n key === 'default' ||\n key === '__esModule' ||\n Object.prototype.hasOwnProperty.call(dest, key)\n ) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function () {\n return source[key];\n },\n });\n });\n\n return dest;\n};\n\nexports.export = function (dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get,\n });\n};\n","const lib = {\n map(value, inMin, inMax, outMin, outMax) {\n return ((value - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin\n },\n range(start, end, tick) {\n const s = Math.round(start / tick) * tick\n return Array.from(\n {\n length: Math.floor((end - start) / tick),\n },\n (v, k) => {\n return k * tick + s\n },\n )\n },\n}\n\nfunction line(pointA, pointB) {\n const lengthX = pointB[0] - pointA[0]\n const lengthY = pointB[1] - pointA[1]\n return {\n length: Math.sqrt(lengthX ** 2 + lengthY ** 2),\n angle: Math.atan2(lengthY, lengthX),\n }\n}\n\nexport default function heatmap(art, danmuku, option) {\n const { query } = art.constructor.utils\n\n art.controls.add({\n name: 'heatmap',\n position: 'top',\n html: '',\n style: {\n position: 'absolute',\n top: '-100px',\n left: '0px',\n right: '0px',\n height: '100px',\n width: '100%',\n pointerEvents: 'none',\n },\n mounted($heatmap) {\n let $start = null\n let $stop = null\n\n function update(arg = []) {\n $start = null\n $stop = null\n $heatmap.innerHTML = ''\n\n if (!art.duration || art.option.isLive)\n return\n\n const svg = {\n w: $heatmap.offsetWidth,\n h: $heatmap.offsetHeight,\n }\n\n const options = {\n xMin: 0,\n xMax: svg.w,\n yMin: 0,\n yMax: 128,\n scale: 0.25,\n opacity: 0.2,\n minHeight: Math.floor(svg.h * 0.05),\n sampling: Math.floor(svg.w / 100),\n smoothing: 0.2,\n flattening: 0.2,\n }\n\n if (typeof option === 'object') {\n Object.assign(options, option)\n }\n\n let points = []\n\n if (Array.isArray(arg) && arg.length) {\n points = [...arg]\n }\n else {\n const gap = art.duration / svg.w\n for (let x = 0; x <= svg.w; x += options.sampling) {\n const y = danmuku.queue.filter(\n ({ time }) => time > x * gap && time <= (x + options.sampling) * gap,\n ).length\n points.push([x, y])\n }\n }\n\n if (points.length === 0)\n return\n\n const lastPoint = points[points.length - 1]\n const lastX = lastPoint[0]\n const lastY = lastPoint[1]\n if (lastX !== svg.w) {\n points.push([svg.w, lastY])\n }\n\n const yPoints = points.map(point => point[1])\n const yMin = Math.min(...yPoints)\n const yMax = Math.max(...yPoints)\n const yMid = (yMin + yMax) / 2\n\n for (let i = 0; i < points.length; i++) {\n const point = points[i]\n const y = point[1]\n point[1] = y * (y > yMid ? 1 + options.scale : 1 - options.scale) + options.minHeight\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n const o = line(p, n)\n const flat = lib.map(Math.cos(o.angle) * options.flattening, 0, 1, 1, 0)\n const angle = o.angle * flat + (reverse ? Math.PI : 0)\n const length = o.length * options.smoothing\n const x = current[0] + Math.cos(angle) * length\n const y = current[1] + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const cps = controlPoint(a[i - 1], a[i - 2], point)\n const cpe = controlPoint(point, a[i - 1], a[i + 1], true)\n const close = i === a.length - 1 ? ' z' : ''\n return `C ${cps[0]},${cps[1]} ${cpe[0]},${cpe[1]} ${point[0]},${point[1]}${close}`\n }\n\n const pointsPositions = points.map((e) => {\n const x = lib.map(e[0], options.xMin, options.xMax, 0, svg.w)\n const y = lib.map(e[1], options.yMin, options.yMax, svg.h, 0)\n return [x, y]\n })\n\n const pathD = pointsPositions.reduce(\n (acc, e, i, a) =>\n i === 0\n ? `M ${a[a.length - 1][0]},${svg.h} L ${e[0]},${svg.h} L ${e[0]},${e[1]}`\n : `${acc} ${bezierCommand(e, i, a)}`,\n '',\n )\n\n $heatmap.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n `\n\n $start = query('#heatmap-start', $heatmap)\n $stop = query('#heatmap-stop', $heatmap)\n $start.setAttribute('offset', `${art.played * 100}%`)\n $stop.setAttribute('offset', `${art.played * 100}%`)\n }\n\n art.on('video:timeupdate', () => {\n if ($start && $stop) {\n $start.setAttribute('offset', `${art.played * 100}%`)\n $stop.setAttribute('offset', `${art.played * 100}%`)\n }\n })\n\n art.on('setBar', (type, percentage) => {\n if ($start && $stop && type === 'played') {\n $start.setAttribute('offset', `${percentage * 100}%`)\n $stop.setAttribute('offset', `${percentage * 100}%`)\n }\n })\n\n art.on('ready', () => update())\n art.on('resize', () => update())\n art.on('artplayerPluginDanmuku:loaded', () => update())\n art.on('artplayerPluginDanmuku:points', points => update(points))\n },\n })\n}\n","import $check_off from 'bundle-text:./img/check_off.svg'\nimport $check_on from 'bundle-text:./img/check_on.svg'\nimport $config from 'bundle-text:./img/config.svg'\nimport $mode_0_off from 'bundle-text:./img/mode_0_off.svg'\nimport $mode_0_on from 'bundle-text:./img/mode_0_on.svg'\nimport $mode_1_off from 'bundle-text:./img/mode_1_off.svg'\nimport $mode_1_on from 'bundle-text:./img/mode_1_on.svg'\nimport $mode_2_off from 'bundle-text:./img/mode_2_off.svg'\nimport $mode_2_on from 'bundle-text:./img/mode_2_on.svg'\nimport $off from 'bundle-text:./img/off.svg'\nimport $on from 'bundle-text:./img/on.svg'\nimport $style from 'bundle-text:./img/style.svg'\nimport style from 'bundle-text:./style.less'\n\nexport default class Setting {\n constructor(art, danmuku) {\n this.art = art\n this.danmuku = danmuku\n this.utils = art.constructor.utils\n\n const { setStyle } = this.utils\n const { $controlsCenter } = art.template\n setStyle($controlsCenter, 'display', 'flex')\n\n this.template = {\n $controlsCenter,\n $mount: $controlsCenter,\n $danmuku: null,\n $toggle: null,\n $config: null,\n $configPanel: null,\n $configModes: null,\n $style: null,\n $stylePanel: null,\n $styleModes: null,\n $colors: null,\n $opacitySlider: null,\n $opacityValue: null,\n $marginSlider: null,\n $marginValue: null,\n $fontSizeSlider: null,\n $fontSizeValue: null,\n $speedSlider: null,\n $speedValue: null,\n $input: null,\n $send: null,\n }\n\n this.slider = {\n opacity: null,\n margin: null,\n fontSize: null,\n speed: null,\n }\n\n this.emitting = false\n this.isLock = false\n this.timer = null\n\n this.createTemplate()\n this.createSliders()\n this.createEvents()\n\n this.mount(this.option.mount)\n\n art.on('resize', () => this.resize())\n art.on('fullscreen', state => this.onFullscreen(state))\n art.on('fullscreenWeb', state => this.onFullscreen(state))\n\n art.proxy(this.template.$config, 'mouseenter', () => {\n this.onMouseEnter({\n $control: this.template.$config,\n $panel: this.template.$configPanel,\n })\n })\n\n art.proxy(this.template.$style, 'mouseenter', () => {\n this.onMouseEnter({\n $control: this.template.$style,\n $panel: this.template.$stylePanel,\n })\n })\n }\n\n static get icons() {\n return {\n $on,\n $off,\n $config,\n $style,\n $mode_0_off,\n $mode_0_on,\n $mode_1_off,\n $mode_1_on,\n $mode_2_off,\n $mode_2_on,\n $check_on,\n $check_off,\n }\n }\n\n get option() {\n return this.danmuku.option\n }\n\n get outside() {\n return this.template.$mount !== this.template.$controlsCenter\n }\n\n get TEMPLATE() {\n const { option } = this\n return `\n

\n ${$on}${$off}\n
\n
\n ${$config}\n
\n
\n
\n 按类型屏蔽\n
\n
\n ${$mode_0_off}${$mode_0_on}\n
滚动
\n
\n
\n ${$mode_1_off}${$mode_1_on}\n
顶部
\n
\n
\n ${$mode_2_off}${$mode_2_on}\n
底部
\n
\n
\n
\n
\n
\n ${$check_on}${$check_off}\n 防止弹幕重叠\n
\n
\n ${$check_on}${$check_off}\n 同步视频速度\n
\n
\n
\n 不透明度\n
\n
未知
\n
\n
\n 显示区域\n
\n
未知
\n
\n
\n 弹幕字号\n
\n
未知
\n
\n
\n 弹幕速度\n
\n
未知
\n
\n
\n
\n
\n
\n
\n ${$style}\n
\n
\n
\n 模式\n
\n
\n ${$mode_0_on}\n
滚动
\n
\n
\n ${$mode_1_on}\n
顶部
\n
\n
\n ${$mode_2_on}\n
底部
\n
\n
\n
\n
\n 颜色\n
\n ${this.COLOR.map(color => `
`).join('')}\n
\n
\n
\n
\n
\n \n
发送
\n
\n `\n }\n\n get OPACITY() {\n return {\n min: 0,\n max: 100,\n steps: [],\n ...this.option.OPACITY,\n }\n }\n\n get FONT_SIZE() {\n return {\n min: 12,\n max: 120,\n steps: [],\n ...this.option.FONT_SIZE,\n }\n }\n\n get MARGIN() {\n return {\n min: 0,\n max: 3,\n steps: [\n {\n name: '1/4',\n value: [10, '75%'],\n },\n {\n name: '半屏',\n value: [10, '50%'],\n },\n {\n name: '3/4',\n value: [10, '25%'],\n },\n {\n name: '满屏',\n value: [10, 10],\n },\n ],\n ...this.option.MARGIN,\n }\n }\n\n get SPEED() {\n return {\n min: 0,\n max: 4,\n steps: [\n {\n name: '极慢',\n value: 10,\n },\n {\n name: '较慢',\n value: 7.5,\n hide: true,\n },\n {\n name: '适中',\n value: 5,\n },\n {\n name: '较快',\n value: 2.5,\n hide: true,\n },\n {\n name: '极快',\n value: 1,\n },\n ],\n ...this.option.SPEED,\n }\n }\n\n get COLOR() {\n return this.option.COLOR.length\n ? this.option.COLOR\n : [\n '#FE0302',\n '#FF7204',\n '#FFAA02',\n '#FFD302',\n '#FFFF00',\n '#A0EE00',\n '#00CD00',\n '#019899',\n '#4266BE',\n '#89D5FF',\n '#CC0273',\n '#222222',\n '#9B9B9B',\n '#FFFFFF',\n ]\n }\n\n query(selector) {\n const { query } = this.utils\n const { $danmuku } = this.template\n return query(selector, $danmuku)\n }\n\n append(el, target) {\n const { append } = this.utils\n const children = [...el.children]\n if (children.includes(target))\n return\n append(el, target)\n }\n\n setData(key, value) {\n const { $player } = this.art.template\n const { $mount } = this.template\n $player.dataset[key] = value\n if (this.outside) {\n $mount.dataset[key] = value\n }\n }\n\n createTemplate() {\n const { createElement, tooltip } = this.utils\n\n const $danmuku = createElement('div')\n $danmuku.className = 'artplayer-plugin-danmuku'\n $danmuku.innerHTML = this.TEMPLATE\n\n this.template.$danmuku = $danmuku\n this.template.$toggle = this.query('.apd-toggle')\n this.template.$config = this.query('.apd-config')\n this.template.$configPanel = this.query('.apd-config-panel')\n this.template.$configModes = this.query('.apd-config-mode .apd-modes')\n this.template.$style = this.query('.apd-style')\n this.template.$stylePanel = this.query('.apd-style-panel')\n this.template.$styleModes = this.query('.apd-style-mode .apd-modes')\n this.template.$colors = this.query('.apd-colors')\n this.template.$antiOverlap = this.query('.apd-anti-overlap')\n this.template.$syncVideo = this.query('.apd-sync-video')\n this.template.$opacitySlider = this.query('.apd-config-opacity .apd-slider')\n this.template.$opacityValue = this.query('.apd-config-opacity .apd-value')\n this.template.$marginSlider = this.query('.apd-config-margin .apd-slider')\n this.template.$marginValue = this.query('.apd-config-margin .apd-value')\n this.template.$fontSizeSlider = this.query('.apd-config-fontSize .apd-slider')\n this.template.$fontSizeValue = this.query('.apd-config-fontSize .apd-value')\n this.template.$speedSlider = this.query('.apd-config-speed .apd-slider')\n this.template.$speedValue = this.query('.apd-config-speed .apd-value')\n this.template.$input = this.query('.apd-input')\n this.template.$send = this.query('.apd-send')\n\n const { $toggle } = this.template\n\n this.art.on('artplayerPluginDanmuku:show', () => {\n tooltip($toggle, '关闭弹幕')\n })\n\n this.art.on('artplayerPluginDanmuku:hide', () => {\n tooltip($toggle, '打开弹幕')\n })\n }\n\n createEvents() {\n const { $toggle, $configModes, $styleModes, $colors, $antiOverlap, $syncVideo, $send, $input } = this.template\n\n this.art.proxy($toggle, 'click', () => {\n this.danmuku.config({\n visible: !this.option.visible,\n })\n this.reset()\n })\n\n this.art.proxy($configModes, 'click', (event) => {\n const $mode = event.target.closest('.apd-mode')\n if (!$mode)\n return\n const mode = Number($mode.dataset.mode)\n if (this.option.modes.includes(mode)) {\n this.danmuku.config({\n modes: this.option.modes.filter(m => m !== mode),\n })\n }\n else {\n this.danmuku.config({\n modes: [...this.option.modes, mode],\n })\n }\n this.reset()\n })\n\n this.art.proxy($antiOverlap, 'click', () => {\n this.danmuku.config({\n antiOverlap: !this.option.antiOverlap,\n })\n this.reset()\n })\n\n this.art.proxy($syncVideo, 'click', () => {\n this.danmuku.config({\n synchronousPlayback: !this.option.synchronousPlayback,\n })\n this.reset()\n })\n\n this.art.proxy($styleModes, 'click', (event) => {\n const $mode = event.target.closest('.apd-mode')\n if (!$mode)\n return\n const mode = Number($mode.dataset.mode)\n this.danmuku.config({\n mode,\n })\n this.reset()\n })\n\n this.art.proxy($colors, 'click', (event) => {\n const $color = event.target.closest('.apd-color')\n if (!$color)\n return\n this.danmuku.config({\n color: $color.dataset.color,\n })\n this.reset()\n })\n\n this.art.proxy($send, 'click', () => this.emit())\n\n this.art.proxy($input, 'keypress', (event) => {\n if (event.key === 'Enter') {\n event.preventDefault()\n this.emit()\n }\n })\n }\n\n createSliders() {\n this.slider.opacity = this.createSlider({\n ...this.OPACITY,\n container: this.template.$opacitySlider,\n findIndex: () => {\n return Math.round(this.option.opacity * 100)\n },\n onChange: (index) => {\n const { $opacityValue } = this.template\n $opacityValue.textContent = `${index}%`\n this.danmuku.config({\n opacity: index / 100,\n })\n },\n })\n\n this.slider.margin = this.createSlider({\n ...this.MARGIN,\n container: this.template.$marginSlider,\n findIndex: () => {\n return this.MARGIN.steps.findIndex(\n item => item.value[0] === this.option.margin[0] && item.value[1] === this.option.margin[1],\n )\n },\n onChange: (index) => {\n const margin = this.MARGIN.steps[index]\n if (!margin)\n return\n const { $marginValue } = this.template\n $marginValue.textContent = margin.name\n this.danmuku.config({\n margin: margin.value,\n })\n },\n })\n\n this.slider.fontSize = this.createSlider({\n ...this.FONT_SIZE,\n container: this.template.$fontSizeSlider,\n findIndex: () => {\n return this.danmuku.fontSize\n },\n onChange: (index) => {\n const { $fontSizeValue } = this.template\n $fontSizeValue.textContent = `${index}px`\n if (index === this.danmuku.fontSize)\n return\n this.danmuku.config({\n fontSize: index,\n })\n },\n })\n\n this.slider.speed = this.createSlider({\n ...this.SPEED,\n container: this.template.$speedSlider,\n findIndex: () => {\n return this.SPEED.steps.findIndex(item => item.value === this.option.speed)\n },\n onChange: (index) => {\n const speed = this.SPEED.steps[index]\n if (!speed)\n return\n const { $speedValue } = this.template\n $speedValue.textContent = speed.name\n this.danmuku.config({\n speed: speed.value,\n })\n },\n })\n }\n\n createSlider({ min, max, container, findIndex, onChange, steps = [] }) {\n const { query, clamp, setStyle } = this.utils\n\n setStyle(container, 'touch-action', 'none')\n\n container.innerHTML = `\n
\n
\n ${steps.map(() => `
`).join('')}\n
\n
\n
\n
\n
\n ${steps.map(step => (step.hide ? '' : `
${step.name}
`)).join('')}\n
\n `\n\n const $dot = query('.apd-slider-dot', container)\n const $progress = query('.apd-slider-progress', container)\n\n let isDroging = false\n\n function reset(index = findIndex()) {\n if (index < min || index > max)\n return\n const percentage = (index - min) / (max - min)\n $dot.style.left = `${percentage * 100}%`\n if (steps.length === 0) {\n $progress.style.width = $dot.style.left\n }\n onChange(index)\n }\n\n function updateLeft(event) {\n const { top, height, left, width } = container.getBoundingClientRect()\n if (this.art.isRotate) {\n const value = clamp(event.clientY - top, 0, height)\n const index = Math.round((value / height) * (max - min) + min)\n reset(index)\n }\n else {\n const value = clamp(event.clientX - left, 0, width)\n const index = Math.round((value / width) * (max - min) + min)\n reset(index)\n }\n }\n\n this.art.proxy(container, 'click', (event) => {\n updateLeft.call(this, event)\n })\n\n this.art.proxy(container, 'pointerdown', (event) => {\n isDroging = event.button === 0\n })\n\n this.art.proxy(document, 'pointermove', (event) => {\n if (isDroging) {\n updateLeft.call(this, event)\n }\n })\n\n this.art.proxy(document, 'pointerup', (event) => {\n if (isDroging) {\n isDroging = false\n updateLeft.call(this, event)\n }\n })\n\n return { reset }\n }\n\n onFullscreen(state) {\n const { $danmuku, $controlsCenter, $mount } = this.template\n if (this.outside) {\n if (state) {\n this.append($controlsCenter, $danmuku)\n }\n else {\n this.append($mount, $danmuku)\n }\n }\n else {\n this.append($controlsCenter, $danmuku)\n }\n }\n\n onMouseEnter({ $control, $panel }) {\n const { $player } = this.art.template\n const controlRect = $control.getBoundingClientRect()\n const panelRect = $panel.getBoundingClientRect()\n const playerRect = $player.getBoundingClientRect()\n\n const half = panelRect.width / 2 - controlRect.width / 2\n const left = playerRect.left - (controlRect.left - half)\n const right = controlRect.right + half - playerRect.right\n\n if (left > 0) {\n $panel.style.left = `${-half + left}px`\n }\n else if (right > 0) {\n $panel.style.left = `${-half - right}px`\n }\n else {\n $panel.style.left = `${-half}px`\n }\n }\n\n async emit() {\n const { $input } = this.template\n\n const text = $input.value.trim()\n if (!text.length)\n return\n if (this.isLock)\n return\n if (this.emitting)\n return\n\n const danmu = {\n text,\n mode: this.option.mode,\n color: this.option.color,\n time: this.art.currentTime,\n }\n\n try {\n this.emitting = true\n const state = await this.option.beforeEmit(danmu)\n this.emitting = false\n\n if (state !== true)\n return\n\n danmu.border = true\n delete danmu.time\n this.danmuku.emit(danmu)\n $input.value = ''\n\n this.lock()\n }\n catch (error) {\n console.error('Error emitting danmuku:', error)\n this.emitting = false\n }\n }\n\n lock() {\n const { addClass } = this.utils\n const { $send } = this.template\n\n this.isLock = true\n let time = this.option.lockTime\n $send.textContent = time\n addClass($send, 'apd-lock')\n\n const loop = () => {\n this.timer = setTimeout(() => {\n if (time === 0) {\n this.unlock()\n }\n else {\n time -= 1\n $send.textContent = time\n loop()\n }\n }, 1000)\n }\n\n loop()\n }\n\n unlock() {\n const { removeClass } = this.utils\n const { $send } = this.template\n clearTimeout(this.timer)\n this.isLock = false\n $send.textContent = '发送'\n removeClass($send, 'apd-lock')\n }\n\n resize() {\n if (this.outside)\n return\n if (this.art.fullscreen)\n return\n if (this.art.fullscreenWeb)\n return\n const { $player, $controlsCenter } = this.art.template\n const { $danmuku } = this.template\n if (this.art.width < this.option.width) {\n this.append($player, $danmuku)\n }\n else {\n this.append($controlsCenter, $danmuku)\n }\n }\n\n reset() {\n const { inverseClass, tooltip } = this.utils\n const { $toggle, $colors } = this.template\n\n this.slider.opacity.reset()\n this.slider.margin.reset()\n this.slider.fontSize.reset()\n this.slider.speed.reset()\n\n this.setData('danmukuVisible', this.option.visible)\n this.setData('danmukuMode', this.option.mode)\n this.setData('danmukuColor', this.option.color)\n this.setData('danmukuMode0', this.option.modes.includes(0))\n this.setData('danmukuMode1', this.option.modes.includes(1))\n this.setData('danmukuMode2', this.option.modes.includes(2))\n this.setData('danmukuAntiOverlap', this.option.antiOverlap)\n this.setData('danmukuSyncVideo', this.option.synchronousPlayback)\n this.setData('danmukuTheme', this.option.theme)\n this.setData('danmukuEmitter', this.option.emitter)\n\n const colors = $colors.children\n const $color = Array.from(colors).find(item => item.dataset.color === this.option.color.toUpperCase())\n $color && inverseClass($color, 'apd-active')\n\n tooltip($toggle, this.option.visible ? '关闭弹幕' : '打开弹幕')\n\n this.resize()\n }\n\n mount(target) {\n const { errorHandle } = this.utils\n const $el = typeof target === 'string' ? document.querySelector(target) : target\n errorHandle($el, `Can not find the mount point: ${target}`)\n this.append($el, this.template.$danmuku)\n this.template.$mount = $el\n this.reset()\n }\n}\n\nif (typeof document !== 'undefined') {\n const id = 'artplayer-plugin-danmuku'\n let $style = document.getElementById(id)\n if (!$style) {\n $style = document.createElement('style')\n $style.id = id\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => {\n document.head.appendChild($style)\n })\n }\n else {\n (document.head || document.documentElement).appendChild($style)\n }\n }\n $style.textContent = style\n}\n","module.exports = \"0616b3f5e6434b38\";","module.exports = \"8e2849d281974e34\";","module.exports = \"49c14b4dbf213408\";","module.exports = \"a0f690bca27acdee\";","module.exports = \"70b07d4e4796c39f\";","module.exports = \"bffb346eb331a03f\";","module.exports = \"ade441db0e7be833\";","module.exports = \"8acc265c0fe9e947\";","module.exports = \"d374f135d6d7b8db\";","module.exports = \"4e92064d88d9e604\";","module.exports = \"c6881a3522f2fe2a\";","module.exports = \"5050154cc04e750f\";","module.exports = \"95fd45dd2fe5c5a5\";"],"names":["modules","entry","mainEntry","parcelRequireName","externals","distDir","publicUrl","devServer","globalObject","globalThis","self","window","global","previousRequire","importMap","i","cache","nodeRequire","module","require","bind","newRequire","name","jumped","currentRequire","err","Error","code","localRequire","resolve","x","id","Module","call","exports","res","isParcelRequire","moduleName","bundle","parent","register","Object","defineProperty","get","length","mainExports","define","amd","__globalThis","parcelHelpers","defineInteropFlag","export","artplayerPluginDanmuku","_danmuku","_danmukuDefault","interopDefault","_heatmap","_heatmapDefault","_setting","_settingDefault","option","art","danmuku","default","setting","heatmap","emit","load","config","hide","show","reset","mount","isHide","isStop","icons","_worker","_workerDefault","_bilibili","Danmuku","constructor","template","utils","validator","$danmuku","$player","queue","$refs","timer","index","states","wait","ready","stop","blob","Blob","replace","type","worker","Worker","URL","createObjectURL","start","resize","destroy","on","speed","margin","opacity","color","mode","modes","fontSize","antiOverlap","synchronousPlayback","undefined","width","points","filter","beforeEmit","beforeVisible","visible","emitter","maxLength","lockTime","theme","OPACITY","FONT_SIZE","MARGIN","SPEED","COLOR","scheme","cssText","isRotate","plugins","autoOrientation","state","marginTop","clamp","value","clientHeight","endsWith","Number","parseFloat","marginBottom","Math","round","$ref","pop","document","createElement","style","dataset","className","readys","currentTime","result","danmu","push","time","visibles","clientWidth","clientLeft","getLeft","top","offsetTop","left","height","distance","$restTime","right","playbackRate","errorHandle","danmus","target","Promise","bilibiliDanmuParseFromUrl","Array","isArray","textContent","error","text","border","trim","Infinity","includes","item","$state","$id","$lastStartTime","setState","isInit","$controlsCenter","keys","some","key","JSON","stringify","assign","rect","getBoundingClientRect","postMessage","message","Date","now","onmessage","event","data","callback","makeWait","visibility","marginLeft","transform","transition","update","setStyles","requestAnimationFrame","playing","emitTime","appendChild","backgroundColor","continue","suspend","translateX","cancelAnimationFrame","forEach","terminate","off","getMode","bilibiliDanmuParseFromXml","xmlString","from","matchAll","map","match","attr","groups","p","split","replaceAll","toString","timestamp","pool","userID","rowID","Boolean","xml","url","fetch","createWorker","console","a","__esModule","exportAll","source","dest","prototype","hasOwnProperty","enumerable","destName","lib","inMin","inMax","outMin","outMax","range","end","tick","s","floor","v","k","query","controls","add","position","html","pointerEvents","mounted","$heatmap","$start","$stop","arg","innerHTML","duration","isLive","svg","w","offsetWidth","h","offsetHeight","options","xMin","xMax","yMin","yMax","scale","minHeight","sampling","smoothing","flattening","gap","y","lastPoint","lastX","lastY","yPoints","point","yMid","min","max","controlPoint","current","previous","next","reverse","o","line","pointA","pointB","lengthX","lengthY","sqrt","angle","atan2","flat","cos","PI","sin","pathD","pointsPositions","e","reduce","acc","bezierCommand","cps","cpe","close","setAttribute","played","percentage","_checkOffSvg","_checkOffSvgDefault","_checkOnSvg","_checkOnSvgDefault","_configSvg","_configSvgDefault","_mode0OffSvg","_mode0OffSvgDefault","_mode0OnSvg","_mode0OnSvgDefault","_mode1OffSvg","_mode1OffSvgDefault","_mode1OnSvg","_mode1OnSvgDefault","_mode2OffSvg","_mode2OffSvgDefault","_mode2OnSvg","_mode2OnSvgDefault","_offSvg","_offSvgDefault","_onSvg","_onSvgDefault","_styleSvg","_styleSvgDefault","_styleLess","_styleLessDefault","setStyle","$mount","$toggle","$config","$configPanel","$configModes","$style","$stylePanel","$styleModes","$colors","$opacitySlider","$opacityValue","$marginSlider","$marginValue","$fontSizeSlider","$fontSizeValue","$speedSlider","$speedValue","$input","$send","slider","emitting","isLock","createTemplate","createSliders","createEvents","onFullscreen","proxy","onMouseEnter","$control","$panel","$on","$off","$mode_0_off","$mode_0_on","$mode_1_off","$mode_1_on","$mode_2_off","$mode_2_on","$check_on","$check_off","outside","TEMPLATE","join","steps","selector","append","el","children","setData","tooltip","$antiOverlap","$syncVideo","$mode","closest","m","$color","preventDefault","createSlider","container","findIndex","onChange","step","$dot","$progress","isDroging","updateLeft","clientY","clientX","button","controlRect","panelRect","playerRect","half","lock","addClass","loop","setTimeout","unlock","removeClass","clearTimeout","fullscreen","fullscreenWeb","inverseClass","find","toUpperCase","$el","querySelector","getElementById","readyState","addEventListener","head","documentElement","_default","parcelRequire4dc0"],"version":3,"file":"index.js.map"} \ No newline at end of file +{"mappings":"C,A,S,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,E,I,E,A,a,O,W,W,A,a,O,K,K,A,a,O,O,O,A,a,O,O,O,C,E,E,A,Y,O,C,C,E,E,C,C,E,C,E,E,C,E,C,E,E,E,K,E,C,E,E,A,a,O,Q,A,Y,O,O,O,E,O,O,C,I,C,Q,S,E,C,C,C,E,G,C,C,C,E,C,C,G,C,C,C,E,C,C,G,C,C,E,C,O,C,C,E,C,I,E,A,Y,O,C,C,E,E,C,C,E,C,G,C,G,E,O,E,E,C,G,G,E,O,E,E,C,G,G,G,A,U,O,E,O,E,G,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,O,C,S,C,E,I,E,C,C,E,C,E,C,E,C,O,A,M,E,E,C,E,E,K,C,C,E,I,E,C,C,E,C,I,E,M,C,G,C,C,E,C,E,C,I,C,E,O,C,E,E,E,O,C,E,C,O,C,C,E,C,O,C,S,E,C,E,I,E,E,O,C,G,M,A,C,I,E,C,E,E,E,C,C,E,e,C,C,E,E,M,C,S,C,E,I,C,E,C,E,I,C,M,C,E,I,C,O,C,E,I,C,O,C,C,C,E,E,O,C,E,E,K,C,E,E,M,C,E,E,O,C,K,E,E,S,C,K,E,E,S,C,K,E,E,C,C,E,E,Q,C,S,C,C,C,E,C,C,E,C,C,S,C,C,C,E,E,O,C,C,E,C,E,A,E,O,c,C,E,O,C,I,W,O,C,C,E,A,C,G,C,C,E,C,E,I,I,E,E,E,E,M,C,I,E,C,C,E,E,G,E,C,I,E,E,E,A,C,U,O,S,A,a,O,O,O,O,C,E,A,Y,O,Q,O,G,E,O,W,O,C,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,E,I,E,E,kD,E,iB,C,GCIwB,EAAA,MAAA,CAAA,EAAA,UAAA,IAAA,GAJxB,IAAA,EAAA,EAAA,a,E,E,c,C,GACA,EAAA,EAAA,a,E,E,c,C,GACA,EAAA,EAAA,a,E,E,c,C,GAEe,SAAS,EAAuB,CAAM,EACnD,OAAO,AAAC,IACN,IAAM,EAAU,GAAI,CAAA,EAAA,EAAA,OAAM,AAAN,EAAQ,EAAK,GAC3B,EAAU,GAAI,CAAA,EAAA,EAAA,OAAM,AAAN,EAAQ,EAAK,GAMjC,OAJI,EAAQ,MAAM,CAAC,OAAO,EACxB,AAAA,CAAA,EAAA,EAAA,OAAO,AAAP,EAAQ,EAAK,E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,CAAC,GAAU,EAC1E,EAAY,EAAK,CAAC,8BAA8B,EAAE,EAAA,CAAQ,EAC1D,IAAI,CAAC,MAAM,CAAC,EAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,EACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAG,EACvB,IAAI,CAAC,KAAK,EACZ,CACF,EAEI,AAAoB,aAApB,OAAO,SAA0B,CACnC,IAAM,EAAK,2BACP,EAAS,SAAS,cAAc,CAAC,GAChC,IAEH,AADA,CAAA,EAAS,SAAS,aAAa,CAAC,QAAhC,EACO,EAAE,CAAG,EACR,AAAwB,YAAxB,SAAS,UAAU,CACrB,SAAS,gBAAgB,CAAC,mBAAoB,KAC5C,SAAS,IAAI,CAAC,WAAW,CAAC,EAC5B,GAGC,AAAA,CAAA,SAAS,IAAI,EAAI,SAAS,eAAc,AAAd,EAAiB,WAAW,CAAC,IAG5D,EAAO,WAAW,CAAG,EAAA,OAAK,AAC5B,C,E,C,kC,Q,iC,Q,+B,Q,mC,Q,kC,Q,mC,Q,kC,Q,mC,Q,kC,Q,4B,Q,2B,Q,8B,Q,2B,Q,iD,O,E,C,Q,C,S,C,C,C,C,C,C,C,EC5vBA,EAAO,OAAO,CAAG,kU,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,+Z,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,omE,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,onB,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,sW,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,kjB,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,iT,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,4hB,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,sT,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,+rD,E,C,E,C,Q,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,y0D,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,ib,E,C,E,C,M,C,S,C,C,C,C,C,C,C,ECAjB,EAAO,OAAO,CAAG,grQ,E,C,E,E,C,Q,C,Q,oB,C,G,G,C,Q,C,C,C,kB,gB,K,O","sources":["","packages/artplayer-plugin-danmuku/src/index.js","packages/artplayer-plugin-danmuku/src/danmuku.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-d75e4ef33e90ad74.js","packages/artplayer-plugin-danmuku/src/bilibili.js","node_modules/@parcel/transformer-js/src/esmodule-helpers.js","packages/artplayer-plugin-danmuku/src/heatmap.js","packages/artplayer-plugin-danmuku/src/setting.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-b1f4705e590c7693.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-75df9b67e4ad9f34.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-966493d38fa25693.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-e438774eb5592ca2.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-f628b445d36caf1f.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-df73f5e9e2ab004b.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-1de8ba84e2efbede.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-9ccdc626e87ba3ee.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-9a7360dad8cdbe5b.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-2eccf06bbefc75d0.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-3f382cbac81656d4.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-17da0f3cb542825d.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-d4507e9bfc00ded0.js"],"sourcesContent":["// modules are defined as an array\n// [ module function, map of requires ]\n//\n// map of requires is short require name -> numeric require\n//\n// anything defined in a previous bundle is accessed via the\n// orig method which is the require for previous bundles\n\n(function (\n modules,\n entry,\n mainEntry,\n parcelRequireName,\n externals,\n distDir,\n publicUrl,\n devServer\n) {\n /* eslint-disable no-undef */\n var globalObject =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\n /* eslint-enable no-undef */\n\n // Save the require from previous bundle to this closure if any\n var previousRequire =\n typeof globalObject[parcelRequireName] === 'function' &&\n globalObject[parcelRequireName];\n\n var importMap = previousRequire.i || {};\n var cache = previousRequire.cache || {};\n // Do not use `require` to prevent Webpack from trying to bundle this call\n var nodeRequire =\n typeof module !== 'undefined' &&\n typeof module.require === 'function' &&\n module.require.bind(module);\n\n function newRequire(name, jumped) {\n if (!cache[name]) {\n if (!modules[name]) {\n if (externals[name]) {\n return externals[name];\n }\n // if we cannot find the module within our internal map or\n // cache jump to the current global require ie. the last bundle\n // that was added to the page.\n var currentRequire =\n typeof globalObject[parcelRequireName] === 'function' &&\n globalObject[parcelRequireName];\n if (!jumped && currentRequire) {\n return currentRequire(name, true);\n }\n\n // If there are other bundles on this page the require from the\n // previous one is saved to 'previousRequire'. Repeat this as\n // many times as there are bundles until the module is found or\n // we exhaust the require chain.\n if (previousRequire) {\n return previousRequire(name, true);\n }\n\n // Try the node require function if it exists.\n if (nodeRequire && typeof name === 'string') {\n return nodeRequire(name);\n }\n\n var err = new Error(\"Cannot find module '\" + name + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n }\n\n localRequire.resolve = resolve;\n localRequire.cache = {};\n\n var module = (cache[name] = new newRequire.Module(name));\n\n modules[name][0].call(\n module.exports,\n localRequire,\n module,\n module.exports,\n globalObject\n );\n }\n\n return cache[name].exports;\n\n function localRequire(x) {\n var res = localRequire.resolve(x);\n return res === false ? {} : newRequire(res);\n }\n\n function resolve(x) {\n var id = modules[name][1][x];\n return id != null ? id : x;\n }\n }\n\n function Module(moduleName) {\n this.id = moduleName;\n this.bundle = newRequire;\n this.require = nodeRequire;\n this.exports = {};\n }\n\n newRequire.isParcelRequire = true;\n newRequire.Module = Module;\n newRequire.modules = modules;\n newRequire.cache = cache;\n newRequire.parent = previousRequire;\n newRequire.distDir = distDir;\n newRequire.publicUrl = publicUrl;\n newRequire.devServer = devServer;\n newRequire.i = importMap;\n newRequire.register = function (id, exports) {\n modules[id] = [\n function (require, module) {\n module.exports = exports;\n },\n {},\n ];\n };\n\n // Only insert newRequire.load when it is actually used.\n // The code in this file is linted against ES5, so dynamic import is not allowed.\n // INSERT_LOAD_HERE\n\n Object.defineProperty(newRequire, 'root', {\n get: function () {\n return globalObject[parcelRequireName];\n },\n });\n\n globalObject[parcelRequireName] = newRequire;\n\n for (var i = 0; i < entry.length; i++) {\n newRequire(entry[i]);\n }\n\n if (mainEntry) {\n // Expose entry point to Node, AMD or browser globals\n // Based on https://github.com/ForbesLindesay/umd/blob/master/template.js\n var mainExports = newRequire(mainEntry);\n\n // CommonJS\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n module.exports = mainExports;\n\n // RequireJS\n } else if (typeof define === 'function' && define.amd) {\n define(function () {\n return mainExports;\n });\n }\n }\n})({\"6ZbtA\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nparcelHelpers.export(exports, \"default\", ()=>artplayerPluginDanmuku);\nvar _danmuku = require(\"./danmuku\");\nvar _danmukuDefault = parcelHelpers.interopDefault(_danmuku);\nvar _heatmap = require(\"./heatmap\");\nvar _heatmapDefault = parcelHelpers.interopDefault(_heatmap);\nvar _setting = require(\"./setting\");\nvar _settingDefault = parcelHelpers.interopDefault(_setting);\nfunction artplayerPluginDanmuku(option) {\n return (art)=>{\n const danmuku = new (0, _danmukuDefault.default)(art, option);\n const setting = new (0, _settingDefault.default)(art, danmuku);\n if (danmuku.option.heatmap) (0, _heatmapDefault.default)(art, danmuku, danmuku.option.heatmap);\n return {\n name: 'artplayerPluginDanmuku',\n emit: danmuku.emit.bind(danmuku),\n load: danmuku.load.bind(danmuku),\n config: danmuku.config.bind(danmuku),\n hide: danmuku.hide.bind(danmuku),\n show: danmuku.show.bind(danmuku),\n reset: danmuku.reset.bind(danmuku),\n mount: setting.mount.bind(setting),\n get option () {\n return danmuku.option;\n },\n get isHide () {\n return danmuku.isHide;\n },\n get isStop () {\n return danmuku.isStop;\n }\n };\n };\n}\nartplayerPluginDanmuku.icons = (0, _settingDefault.default).icons;\nif (typeof window !== 'undefined') window.artplayerPluginDanmuku = artplayerPluginDanmuku;\n\n},{\"./danmuku\":\"6C7g0\",\"./heatmap\":\"h2ayY\",\"./setting\":\"90QKZ\",\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}],\"6C7g0\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nvar _worker = require(\"bundle-text:./worker\");\nvar _workerDefault = parcelHelpers.interopDefault(_worker);\nvar _bilibili = require(\"./bilibili\");\nclass Danmuku {\n constructor(art, option){\n const { constructor, template } = art;\n this.utils = constructor.utils // 工具库\n ;\n this.validator = constructor.validator // 配置校验器\n ;\n this.$danmuku = template.$danmuku // 弹幕层容器\n ;\n this.$player = template.$player // 播放器容器\n ;\n this.art = art;\n this.queue = [] // 实际弹幕队列\n ;\n this.$refs = [] // 弹幕DOM节点池\n ;\n this.isStop = false // 是否停止\n ;\n this.isHide = false // 是否隐藏\n ;\n this.timer = null // 定时器\n ;\n this.index = 0 // 弹幕索引\n ;\n // 格式化后的配置项\n this.option = Danmuku.option;\n // 弹幕状态池\n this.states = {\n wait: [],\n ready: [],\n emit: [],\n stop: []\n };\n // 初始化配置\n this.config(option, true);\n // 创建 Web Worker, 用于计算弹幕的 top 值\n const workerText2 = (0, _workerDefault.default).replace('export{e as default};', '');\n const blob = new Blob([\n workerText2\n ], {\n type: 'application/javascript'\n });\n this.worker = new Worker(URL.createObjectURL(blob));\n // 绑定公用事件\n this.start = this.start.bind(this);\n this.stop = this.stop.bind(this);\n this.reset = this.reset.bind(this);\n this.resize = this.resize.bind(this);\n this.destroy = this.destroy.bind(this);\n // 监听事件\n art.on('video:play', this.start);\n art.on('video:playing', this.start);\n art.on('video:pause', this.stop);\n art.on('video:waiting', this.stop);\n art.on('destroy', this.destroy);\n art.on('resize', this.resize);\n // 开始加载弹幕\n this.load();\n }\n // 默认配置\n static get option() {\n return {\n danmuku: [],\n speed: 5,\n margin: [\n 10,\n '25%'\n ],\n opacity: 1,\n color: '#FFFFFF',\n mode: 0,\n modes: [\n 0,\n 1,\n 2\n ],\n fontSize: 25,\n antiOverlap: true,\n synchronousPlayback: false,\n mount: undefined,\n heatmap: false,\n width: 512,\n points: [],\n filter: ()=>true,\n beforeEmit: ()=>true,\n beforeVisible: ()=>true,\n visible: true,\n emitter: true,\n maxLength: 200,\n lockTime: 5,\n theme: 'dark',\n OPACITY: {},\n FONT_SIZE: {},\n MARGIN: {},\n SPEED: {},\n COLOR: []\n };\n }\n // 配置校验\n static get scheme() {\n return {\n danmuku: 'array|function|string',\n speed: 'number',\n margin: 'array',\n opacity: 'number',\n color: 'string',\n mode: 'number',\n modes: 'array',\n fontSize: 'number|string',\n antiOverlap: 'boolean',\n synchronousPlayback: 'boolean',\n mount: '?htmldivelement|string',\n heatmap: 'object|boolean',\n width: 'number',\n points: 'array',\n filter: 'function',\n beforeEmit: 'function',\n beforeVisible: 'function',\n visible: 'boolean',\n emitter: 'boolean',\n maxLength: 'number',\n lockTime: 'number',\n theme: 'string',\n OPACITY: 'object',\n FONT_SIZE: 'object',\n MARGIN: 'object',\n SPEED: 'object',\n COLOR: 'array'\n };\n }\n // 初始弹幕样式\n static get cssText() {\n return `\n user-select: none;\n position: absolute;\n white-space: pre;\n pointer-events: none;\n perspective: 500px;\n display: inline-block;\n will-change: transform;\n font-weight: normal;\n line-height: 1.125;\n visibility: hidden;\n font-family: SimHei, \"Microsoft JhengHei\", Arial, Helvetica, sans-serif;\n text-shadow: rgb(0, 0, 0) 1px 0px 1px, rgb(0, 0, 0) 0px 1px 1px, rgb(0, 0, 0) 0px -1px 1px, rgb(0, 0, 0) -1px 0px 1px;\n `;\n }\n // 是否在移动端使用了自动旋屏,会影响弹幕的left和top值\n get isRotate() {\n return this.art.plugins?.autoOrientation?.state;\n }\n // 计算上空白边距\n get marginTop() {\n const { clamp } = this.utils;\n const value = this.option.margin[0];\n const { clientHeight } = this.$player;\n if (typeof value === 'number') return clamp(value, 0, clientHeight);\n if (typeof value === 'string' && value.endsWith('%')) {\n const ratio = Number.parseFloat(value) / 100;\n return clamp(clientHeight * ratio, 0, clientHeight);\n }\n return Danmuku.option.margin[0];\n }\n // 计算下空白边距\n get marginBottom() {\n const { clamp } = this.utils;\n const value = this.option.margin[1];\n const { clientHeight } = this.$player;\n if (typeof value === 'number') return clamp(value, 0, clientHeight);\n if (typeof value === 'string' && value.endsWith('%')) {\n const ratio = Number.parseFloat(value) / 100;\n return clamp(clientHeight * ratio, 0, clientHeight);\n }\n return Danmuku.option.margin[1];\n }\n // 计算弹幕字体大小\n get fontSize() {\n const { clamp } = this.utils;\n const { clientHeight } = this.$player;\n const fontSize = this.option.fontSize;\n if (typeof fontSize === 'number') return Math.round(clamp(fontSize, 12, clientHeight));\n if (typeof fontSize === 'string' && fontSize.endsWith('%')) {\n const ratio = Number.parseFloat(fontSize) / 100;\n return Math.round(clamp(clientHeight * ratio, 12, clientHeight));\n }\n return Danmuku.option.fontSize;\n }\n // 获取弹幕DOM节点\n get $ref() {\n const $ref = this.$refs.pop() || document.createElement('div');\n $ref.style.cssText = Danmuku.cssText;\n $ref.dataset.mode = '';\n $ref.dataset.id = '';\n $ref.className = '';\n return $ref;\n }\n // 获取准备好发送的弹幕\n get readys() {\n const { currentTime } = this.art;\n const result = [];\n // 有的是ready状态:之前因为弹幕太多而暂停发送的弹幕\n this.filter('ready', (danmu)=>result.push(danmu));\n // 有的是wait状态:符合时间范围的弹幕\n this.filter('wait', (danmu)=>{\n if (currentTime + 0.1 >= danmu.time && danmu.time >= currentTime - 0.1) result.push(danmu);\n });\n return result;\n }\n // 可见的弹幕的数据,用于计算下一个弹幕的top值\n get visibles() {\n const result = [];\n const { clientWidth } = this.$player;\n const clientLeft = this.getLeft(this.$player);\n this.filter('emit', (danmu)=>{\n const top = danmu.$ref.offsetTop;\n const left = this.getLeft(danmu.$ref) - clientLeft;\n const height = danmu.$ref.clientHeight;\n const width = danmu.$ref.clientWidth;\n const distance = left + width;\n const right = clientWidth - distance;\n const speed = distance / danmu.$restTime;\n const emit = {};\n emit.top = top;\n emit.left = left;\n emit.height = height;\n emit.width = width;\n emit.right = right;\n emit.speed = speed;\n emit.distance = distance;\n emit.time = danmu.$restTime;\n emit.mode = danmu.mode;\n result.push(emit);\n });\n return result;\n }\n // 计算弹幕速度\n get speed() {\n return this.option.synchronousPlayback && this.art.playbackRate ? this.option.speed / Number(this.art.playbackRate) : this.option.speed;\n }\n // 加载弹幕\n async load(danmuku) {\n const { errorHandle } = this.utils;\n let danmus = [];\n const target = danmuku || this.option.danmuku;\n try {\n if (typeof target === 'function') danmus = await target() // 异步函数获取\n ;\n else if (target instanceof Promise) danmus = await target // 从 Promise 对象获取\n ;\n else if (typeof target === 'string') danmus = await (0, _bilibili.bilibiliDanmuParseFromUrl)(target) // 从B站xml链接解析\n ;\n else if (Array.isArray(target)) danmus = target // 直接传入数组\n ;\n errorHandle(Array.isArray(danmus), 'Danmuku need return an array as result');\n // 假如没有传入弹幕参数,则清空弹幕,否则追加弹幕\n if (danmuku === undefined) {\n this.reset() // 重置弹幕\n ;\n this.queue = [] // 清空弹幕队列\n ;\n this.states = {\n wait: [],\n ready: [],\n emit: [],\n stop: []\n } // 清空弹幕状态池\n ;\n this.$refs = [] // 清空弹幕DOM节点池\n ;\n this.$danmuku.textContent = '' // 清空弹幕层\n ;\n }\n // 逐个验证原始弹幕并转换到弹幕队列\n for(let index = 0; index < danmus.length; index++){\n const danmu = danmus[index];\n await this.emit(danmu);\n }\n this.art.emit('artplayerPluginDanmuku:loaded', this.queue);\n } catch (error) {\n this.art.emit('artplayerPluginDanmuku:error', error);\n throw error;\n }\n return this;\n }\n // 把原始弹幕转换到弹幕队列\n async emit(danmu) {\n const { clamp } = this.utils;\n this.validator(danmu, {\n id: '?string',\n text: 'string',\n mode: '?number',\n color: '?string',\n time: '?number',\n border: '?boolean',\n style: '?object'\n });\n // 弹幕文本为空则直接忽略\n if (!danmu.text.trim()) return this;\n // 设置弹幕时间,如果没有则默认为当前时间加 0.5 秒\n if (danmu.time) danmu.time = clamp(danmu.time, 0, Infinity);\n else danmu.time = this.art.currentTime + 0.5;\n // 设置弹幕模式,如果没有则默认为全局配置\n if (danmu.mode === undefined) danmu.mode = this.option.mode;\n // 设置弹幕单独样式,如果没有则默认为空对象\n if (danmu.style === undefined) danmu.style = {};\n // 设置弹幕颜色,如果没有则默认为全局配置\n if (danmu.color === undefined) danmu.color = this.option.color;\n // 弹幕模式只能是 0, 1, 2\n if (![\n 0,\n 1,\n 2\n ].includes(danmu.mode)) return this;\n // 自定义弹幕过滤函数\n if (!this.option.filter(danmu)) return this;\n // 添加自定义属性\n const item = {\n ...danmu,\n $state: 'wait',\n $index: this.index++,\n $ref: null,\n $restTime: 0,\n $lastStartTime: 0\n };\n // 转换为wait状态\n this.setState(item, 'wait');\n // 添加到实际弹幕队列\n this.queue.push(item);\n // 弹幕有四个状态:\n // - wait: 弹幕还未开始显示,没有被添加到 DOM 中\n // - ready: 弹幕准备好显示,没有被添加到 DOM 中\n // - emit: 弹幕正在显示,已经被添加到 DOM 中\n // - stop: 弹幕正在停止显示,已经被添加到 DOM 中\n return this;\n }\n // 动态配置\n config(option, isInit = false) {\n const { clamp } = this.utils;\n const { $controlsCenter } = this.art.template;\n // 判断配置项是否有变化\n const changed = Object.keys(option).some((key)=>JSON.stringify(this.option[key]) !== JSON.stringify(option[key]));\n // 没有变化则直接返回\n if (!changed && !isInit) return this;\n // 更新配置项\n this.option = Object.assign({}, Danmuku.option, this.option, option);\n this.validator(this.option, Danmuku.scheme);\n this.option.mode = clamp(this.option.mode, 0, 2);\n this.option.speed = clamp(this.option.speed, 1, 10);\n this.option.opacity = clamp(this.option.opacity, 0, 1);\n this.option.lockTime = clamp(this.option.lockTime, 1, 60);\n this.option.maxLength = clamp(this.option.maxLength, 1, 1000);\n this.option.mount = this.option.mount || $controlsCenter;\n // 动态配置有字体大小,需要重新渲染\n if (option.fontSize) this.reset();\n // 通过配置项控制弹幕的显示和隐藏\n if (this.option.visible) this.show();\n else this.hide();\n this.art.emit('artplayerPluginDanmuku:config', this.option);\n return this;\n }\n // 计算DOM的left值,受到旋屏影响\n getLeft($ref) {\n const rect = $ref.getBoundingClientRect();\n return this.isRotate ? rect.top : rect.left;\n }\n // 复杂运算交给 Web Worker 处理\n postMessage(message = {}) {\n return new Promise((resolve)=>{\n message.id = Date.now() // 生成唯一标识\n ;\n this.worker.postMessage(message);\n this.worker.onmessage = (event)=>{\n const { data } = event;\n // 判断是否是当前的消息\n if (data.id === message.id) resolve(data);\n };\n });\n }\n // 根据状态获取弹幕\n filter(state, callback) {\n const danmus = this.states[state] || [];\n for(let index = 0; index < danmus.length; index++)callback(danmus[index]);\n return danmus;\n }\n // 设置弹幕状态\n setState(danmu, state) {\n // 从原状态池中删除\n this.states[danmu.$state] = this.states[danmu.$state].filter((item)=>item !== danmu);\n // 设置新状态\n danmu.$state = state;\n // 设置DOM节点状态\n if (danmu.$ref) danmu.$ref.dataset.state = state;\n // 添加到新状态池中\n this.states[state].push(danmu);\n }\n // 重置弹幕到wait状态,回收弹幕DOM节点\n makeWait(danmu) {\n this.setState(danmu, 'wait');\n if (danmu.$ref) {\n danmu.$ref.style.cssText = Danmuku.cssText;\n danmu.$ref.style.visibility = 'hidden';\n danmu.$ref.style.marginLeft = '0px';\n danmu.$ref.style.transform = 'translateX(0px)';\n danmu.$ref.style.transition = 'transform 0s linear 0s';\n this.$refs.push(danmu.$ref);\n danmu.$ref = null;\n }\n }\n // 实时更新弹幕\n update() {\n const { setStyles } = this.utils;\n this.timer = window.requestAnimationFrame(async ()=>{\n if (this.art.playing && !this.isHide) {\n // 实时计算弹幕的剩余显示时间\n this.filter('emit', (danmu)=>{\n const emitTime = (Date.now() - danmu.$lastStartTime) / 1000;\n danmu.$restTime -= emitTime;\n danmu.$lastStartTime = Date.now();\n // 超过时间即重置弹幕\n if (danmu.$restTime <= 0) this.makeWait(danmu);\n });\n // 获取准备好发送的弹幕,可能包含ready和wait状态的弹幕\n const readys = this.readys;\n for(let index = 0; index < readys.length; index++){\n const danmu = readys[index];\n // 弹幕发送前的过滤器\n const state = await this.option.beforeVisible(danmu);\n if (state) {\n const { clientWidth, clientHeight } = this.$player;\n danmu.$ref = this.$ref // 获取弹幕DOM节点\n ;\n danmu.$ref.textContent = danmu.text // 设置弹幕文本\n ;\n // 提前添加到弹幕层中,用于计算top值\n this.$danmuku.appendChild(danmu.$ref);\n // 设置初始弹幕样式\n danmu.$ref.style.opacity = this.option.opacity;\n danmu.$ref.style.fontSize = `${this.fontSize}px`;\n danmu.$ref.style.color = danmu.color;\n danmu.$ref.style.border = danmu.border ? `1px solid ${danmu.color}` : null;\n danmu.$ref.style.backgroundColor = danmu.border ? 'rgb(0 0 0 / 50%)' : null;\n // 设置单独弹幕样式\n setStyles(danmu.$ref, danmu.style);\n // 记录弹幕时间戳\n danmu.$lastStartTime = Date.now();\n // 计算弹幕剩余时间\n danmu.$restTime = this.speed;\n // 计算弹幕滚动的距离\n const distance = clientWidth + danmu.$ref.clientWidth;\n // 计算弹幕的top值\n const { result: top } = await this.postMessage({\n type: 'getDanmuTop',\n target: {\n mode: danmu.mode,\n height: danmu.$ref.clientHeight,\n speed: distance / danmu.$restTime\n },\n visibles: this.visibles,\n antiOverlap: this.option.antiOverlap,\n clientWidth,\n clientHeight,\n marginBottom: this.marginBottom,\n marginTop: this.marginTop\n });\n if (danmu.$ref) {\n if (!this.isStop && top !== undefined) {\n this.setState(danmu, 'emit') // 转换为emit状态\n ;\n danmu.$ref.style.top = `${top}px`;\n danmu.$ref.style.visibility = 'visible';\n danmu.$ref.dataset.mode = danmu.mode // CSS控制模式的显示和隐藏\n ;\n danmu.$ref.dataset.id = danmu.id || '' // 用于悬停的唯一标识\n ;\n switch(danmu.mode){\n // 滚动的弹幕\n case 0:\n danmu.$ref.style.left = `${clientWidth}px`;\n danmu.$ref.style.marginLeft = '0px';\n danmu.$ref.style.transform = `translateX(${-distance}px)`;\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`;\n break;\n case 1:\n // falls through\n case 2:\n danmu.$ref.style.left = '50%';\n danmu.$ref.style.marginLeft = `-${danmu.$ref.clientWidth / 2}px`;\n break;\n default:\n break;\n }\n this.art.emit('artplayerPluginDanmuku:visible', danmu);\n } else {\n // 假如弹幕已经停止或者没有 top 值,则重置弹幕为ready状态,回收弹幕DOM节点,等待下次发送\n this.setState(danmu, 'ready');\n this.$refs.push(danmu.$ref);\n danmu.$ref = null;\n }\n }\n }\n }\n }\n // 递归调用\n if (!this.isStop) this.update();\n });\n return this;\n }\n // 重置正在显示的弹幕: stop/emit 状态的弹幕\n resize() {\n const { clientWidth } = this.$player;\n this.filter('stop', (danmu)=>{\n switch(danmu.mode){\n // 滚动的弹幕\n case 0:\n danmu.$ref.style.left = `${clientWidth}px`;\n break;\n default:\n break;\n }\n });\n this.filter('emit', (danmu)=>{\n danmu.$lastStartTime = Date.now();\n switch(danmu.mode){\n // 滚动的弹幕\n case 0:\n {\n const distance = clientWidth + danmu.$ref.clientWidth;\n danmu.$ref.style.left = `${clientWidth}px`;\n danmu.$ref.style.transform = `translateX(${-distance}px)`;\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`;\n break;\n }\n default:\n break;\n }\n });\n }\n // 继续弹幕\n continue() {\n const { clientWidth } = this.$player;\n this.filter('stop', (danmu)=>{\n this.setState(danmu, 'emit') // 转换为emit状态\n ;\n danmu.$lastStartTime = Date.now();\n switch(danmu.mode){\n // 继续滚动的弹幕\n case 0:\n {\n const distance = clientWidth + danmu.$ref.clientWidth;\n danmu.$ref.style.transform = `translateX(${-distance}px)`;\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`;\n break;\n }\n default:\n break;\n }\n });\n return this;\n }\n // 暂停弹幕\n suspend() {\n const { clientWidth } = this.$player;\n this.filter('emit', (danmu)=>{\n this.setState(danmu, 'stop') // 转换为stop状态\n ;\n switch(danmu.mode){\n // 停止滚动的弹幕\n case 0:\n {\n const translateX = clientWidth - (this.getLeft(danmu.$ref) - this.getLeft(this.$player));\n danmu.$ref.style.transform = `translateX(${-translateX}px)`;\n danmu.$ref.style.transition = 'transform 0s linear 0s';\n break;\n }\n default:\n break;\n }\n });\n return this;\n }\n stop() {\n this.isStop = true;\n this.suspend();\n window.cancelAnimationFrame(this.timer);\n this.art.emit('artplayerPluginDanmuku:stop');\n return this;\n }\n start() {\n this.isStop = false;\n this.continue();\n this.update();\n this.art.emit('artplayerPluginDanmuku:start');\n return this;\n }\n reset() {\n this.queue.forEach((danmu)=>this.makeWait(danmu));\n this.art.emit('artplayerPluginDanmuku:reset');\n return this;\n }\n show() {\n this.isHide = false;\n this.$danmuku.style.opacity = 1;\n this.option.visible = true;\n this.art.emit('artplayerPluginDanmuku:show');\n return this;\n }\n hide() {\n this.isHide = true;\n this.$danmuku.style.opacity = 0;\n this.option.visible = false;\n this.art.emit('artplayerPluginDanmuku:hide');\n return this;\n }\n destroy() {\n this.stop();\n this.worker.terminate();\n this.art.off('video:play', this.start);\n this.art.off('video:playing', this.start);\n this.art.off('video:pause', this.stop);\n this.art.off('video:waiting', this.stop);\n this.art.off('resize', this.reset);\n this.art.off('destroy', this.destroy);\n this.art.emit('artplayerPluginDanmuku:destroy');\n }\n}\nexports.default = Danmuku;\n\n},{\"bundle-text:./worker\":\"8UAYg\",\"./bilibili\":\"8WBpY\",\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}],\"8UAYg\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"!function(e,t,i,o,r,n,l,d){var u=\\\"undefined\\\"!=typeof globalThis?globalThis:\\\"undefined\\\"!=typeof self?self:\\\"undefined\\\"!=typeof window?window:\\\"undefined\\\"!=typeof global?global:{},f=\\\"function\\\"==typeof u[o]&&u[o],p=f.i||{},s=f.cache||{},h=\\\"undefined\\\"!=typeof module&&\\\"function\\\"==typeof module.require&&module.require.bind(module);function a(t,i){if(!s[t]){if(!e[t]){if(r[t])return r[t];var n=\\\"function\\\"==typeof u[o]&&u[o];if(!i&&n)return n(t,!0);if(f)return f(t,!0);if(h&&\\\"string\\\"==typeof t)return h(t);var l=Error(\\\"Cannot find module '\\\"+t+\\\"'\\\");throw l.code=\\\"MODULE_NOT_FOUND\\\",l}p.resolve=function(i){var o=e[t][1][i];return null!=o?o:i},p.cache={};var d=s[t]=new a.Module(t);e[t][0].call(d.exports,p,d,d.exports,u)}return s[t].exports;function p(e){var t=p.resolve(e);return!1===t?{}:a(t)}}a.isParcelRequire=!0,a.Module=function(e){this.id=e,this.bundle=a,this.require=h,this.exports={}},a.modules=e,a.cache=s,a.parent=f,a.distDir=void 0,a.publicUrl=void 0,a.devServer=void 0,a.i=p,a.register=function(t,i){e[t]=[function(e,t){t.exports=i},{}]},Object.defineProperty(a,\\\"root\\\",{get:function(){return u[o]}}),u[o]=a;for(var c=0;ct.mode===e.mode&&t.top<=d).sort((e,t)=>e.top-t.top);if(0===u.length)if(2===e.mode)return d-e.height;else return n;if(u.unshift({type:\\\"top\\\",top:0,left:0,right:0,height:n,width:i,speed:0,distance:i}),u.push({type:\\\"bottom\\\",top:d,left:0,right:0,height:r,width:i,speed:0,distance:i}),2===e.mode)for(let t=u.length-2;t>=0;t-=1){let i=u[t],o=u[t+1],r=i.top+i.height;if(o.top-r>=e.height)return o.top-e.height}else for(let t=1;t=e.height)return r}let f=[];for(let e=1;et.every(t=>!(it.time))));return t&&t[0]?t[0].top:void 0}case 1:case 2:return}else{switch(e.mode){case 0:f.sort((e,t)=>{let i=Math.min(...t.map(e=>e.right)),o=Math.min(...e.map(e=>e.right));return i*t.length-o*e.length});break;case 1:case 2:f.sort((e,t)=>{let i=Math.max(...t.map(e=>e.width));return Math.max(...e.map(e=>e.width))*e.length-i*t.length})}return f[0][0].top}}onmessage=e=>{let{data:t}=e;t.id&&t.type&&globalThis.postMessage({result:(0,({getDanmuTop:r})[t.type])(t),id:t.id})}},{}]},[\\\"4KwZ6\\\"],\\\"4KwZ6\\\",\\\"parcelRequire4dc0\\\",{});let{\\\"*\\\":e}=parcelRequire4dc0(\\\"4KwZ6\\\");export{e as default};\";\n\n},{}],\"8WBpY\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nparcelHelpers.export(exports, \"bilibiliDanmuParseFromUrl\", ()=>bilibiliDanmuParseFromUrl);\nfunction getMode(key) {\n switch(key){\n case 1:\n case 2:\n case 3:\n return 0;\n case 4:\n return 2;\n case 5:\n return 1;\n default:\n return 0;\n }\n}\nfunction bilibiliDanmuParseFromXml(xmlString) {\n if (typeof xmlString !== 'string') return [];\n const reg = /]*?p=\"(?

[^\"]+)\"[^>]*>(?.*?)<\\/d>/gs;\n const matches = xmlString.matchAll(reg);\n return Array.from(matches).map((match)=>{\n const attr = match.groups.p.split(',');\n if (attr.length >= 8) {\n const text = match.groups.text.trim().replaceAll('"', '\"').replaceAll(''', '\\'').replaceAll('<', '<').replaceAll('>', '>').replaceAll('&', '&');\n return {\n text,\n time: Number(attr[0]),\n mode: getMode(Number(attr[1])),\n fontSize: Number(attr[2]),\n color: `#${Number(attr[3]).toString(16)}`,\n timestamp: Number(attr[4]),\n pool: Number(attr[5]),\n userID: attr[6],\n rowID: Number(attr[7])\n };\n } else return null;\n }).filter(Boolean);\n}\nfunction onmessage({ data }) {\n const { xml, id } = data;\n if (!id || !xml) return;\n const danmus = bilibiliDanmuParseFromXml(xml);\n globalThis.postMessage({\n danmus,\n id\n });\n}\nfunction createWorker() {\n const workerText = `\n ${getMode.toString()}\n ${bilibiliDanmuParseFromXml.toString()}\n onmessage = ${onmessage.toString()}\n `;\n const blob = new Blob([\n workerText\n ], {\n type: 'application/javascript'\n });\n return new Worker(URL.createObjectURL(blob));\n}\nfunction bilibiliDanmuParseFromUrl(url) {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve)=>{\n const res = await fetch(url);\n const xml = await res.text();\n try {\n const worker = createWorker();\n worker.onmessage = (event)=>{\n const { danmus, id } = event.data;\n if (!id || !danmus) return;\n resolve(danmus);\n worker.terminate();\n };\n worker.postMessage({\n xml,\n id: Date.now()\n });\n } catch (error) {\n console.error('Error parsing Bilibili Danmu:', error);\n const danmus = bilibiliDanmuParseFromXml(xml);\n resolve(danmus);\n }\n });\n}\n\n},{\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}],\"5lQoW\":[function(require,module,exports,__globalThis) {\nexports.interopDefault = function(a) {\n return a && a.__esModule ? a : {\n default: a\n };\n};\nexports.defineInteropFlag = function(a) {\n Object.defineProperty(a, '__esModule', {\n value: true\n });\n};\nexports.exportAll = function(source, dest) {\n Object.keys(source).forEach(function(key) {\n if (key === 'default' || key === '__esModule' || Object.prototype.hasOwnProperty.call(dest, key)) return;\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function() {\n return source[key];\n }\n });\n });\n return dest;\n};\nexports.export = function(dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get\n });\n};\n\n},{}],\"h2ayY\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nparcelHelpers.export(exports, \"default\", ()=>heatmap);\nconst lib = {\n map (value, inMin, inMax, outMin, outMax) {\n return (value - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;\n },\n range (start, end, tick) {\n const s = Math.round(start / tick) * tick;\n return Array.from({\n length: Math.floor((end - start) / tick)\n }, (v, k)=>{\n return k * tick + s;\n });\n }\n};\nfunction line(pointA, pointB) {\n const lengthX = pointB[0] - pointA[0];\n const lengthY = pointB[1] - pointA[1];\n return {\n length: Math.sqrt(lengthX ** 2 + lengthY ** 2),\n angle: Math.atan2(lengthY, lengthX)\n };\n}\nfunction heatmap(art, danmuku, option) {\n const { query } = art.constructor.utils;\n art.controls.add({\n name: 'heatmap',\n position: 'top',\n html: '',\n style: {\n position: 'absolute',\n top: '-100px',\n left: '0px',\n right: '0px',\n height: '100px',\n width: '100%',\n pointerEvents: 'none'\n },\n mounted ($heatmap) {\n let $start = null;\n let $stop = null;\n function update(arg = []) {\n $start = null;\n $stop = null;\n $heatmap.innerHTML = '';\n if (!art.duration || art.option.isLive) return;\n const svg = {\n w: $heatmap.offsetWidth,\n h: $heatmap.offsetHeight\n };\n const options = {\n xMin: 0,\n xMax: svg.w,\n yMin: 0,\n yMax: 128,\n scale: 0.25,\n opacity: 0.2,\n minHeight: Math.floor(svg.h * 0.05),\n sampling: Math.floor(svg.w / 100),\n smoothing: 0.2,\n flattening: 0.2\n };\n if (typeof option === 'object') Object.assign(options, option);\n let points = [];\n if (Array.isArray(arg) && arg.length) points = [\n ...arg\n ];\n else {\n const gap = art.duration / svg.w;\n for(let x = 0; x <= svg.w; x += options.sampling){\n const y = danmuku.queue.filter(({ time })=>time > x * gap && time <= (x + options.sampling) * gap).length;\n points.push([\n x,\n y\n ]);\n }\n }\n if (points.length === 0) return;\n const lastPoint = points[points.length - 1];\n const lastX = lastPoint[0];\n const lastY = lastPoint[1];\n if (lastX !== svg.w) points.push([\n svg.w,\n lastY\n ]);\n const yPoints = points.map((point)=>point[1]);\n const yMin = Math.min(...yPoints);\n const yMax = Math.max(...yPoints);\n const yMid = (yMin + yMax) / 2;\n for(let i = 0; i < points.length; i++){\n const point = points[i];\n const y = point[1];\n point[1] = y * (y > yMid ? 1 + options.scale : 1 - options.scale) + options.minHeight;\n }\n const controlPoint = (current, previous, next, reverse)=>{\n const p = previous || current;\n const n = next || current;\n const o = line(p, n);\n const flat = lib.map(Math.cos(o.angle) * options.flattening, 0, 1, 1, 0);\n const angle = o.angle * flat + (reverse ? Math.PI : 0);\n const length = o.length * options.smoothing;\n const x = current[0] + Math.cos(angle) * length;\n const y = current[1] + Math.sin(angle) * length;\n return [\n x,\n y\n ];\n };\n const bezierCommand = (point, i, a)=>{\n const cps = controlPoint(a[i - 1], a[i - 2], point);\n const cpe = controlPoint(point, a[i - 1], a[i + 1], true);\n const close = i === a.length - 1 ? ' z' : '';\n return `C ${cps[0]},${cps[1]} ${cpe[0]},${cpe[1]} ${point[0]},${point[1]}${close}`;\n };\n const pointsPositions = points.map((e)=>{\n const x = lib.map(e[0], options.xMin, options.xMax, 0, svg.w);\n const y = lib.map(e[1], options.yMin, options.yMax, svg.h, 0);\n return [\n x,\n y\n ];\n });\n const pathD = pointsPositions.reduce((acc, e, i, a)=>i === 0 ? `M ${a[a.length - 1][0]},${svg.h} L ${e[0]},${svg.h} L ${e[0]},${e[1]}` : `${acc} ${bezierCommand(e, i, a)}`, '');\n $heatmap.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n `;\n $start = query('#heatmap-start', $heatmap);\n $stop = query('#heatmap-stop', $heatmap);\n $start.setAttribute('offset', `${art.played * 100}%`);\n $stop.setAttribute('offset', `${art.played * 100}%`);\n }\n art.on('video:timeupdate', ()=>{\n if ($start && $stop) {\n $start.setAttribute('offset', `${art.played * 100}%`);\n $stop.setAttribute('offset', `${art.played * 100}%`);\n }\n });\n art.on('setBar', (type, percentage)=>{\n if ($start && $stop && type === 'played') {\n $start.setAttribute('offset', `${percentage * 100}%`);\n $stop.setAttribute('offset', `${percentage * 100}%`);\n }\n });\n art.on('ready', ()=>update());\n art.on('resize', ()=>update());\n art.on('artplayerPluginDanmuku:loaded', ()=>update());\n art.on('artplayerPluginDanmuku:points', (points)=>update(points));\n }\n });\n}\n\n},{\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}],\"90QKZ\":[function(require,module,exports,__globalThis) {\nvar parcelHelpers = require(\"@parcel/transformer-js/src/esmodule-helpers.js\");\nparcelHelpers.defineInteropFlag(exports);\nvar _checkOffSvg = require(\"bundle-text:./img/check_off.svg\");\nvar _checkOffSvgDefault = parcelHelpers.interopDefault(_checkOffSvg);\nvar _checkOnSvg = require(\"bundle-text:./img/check_on.svg\");\nvar _checkOnSvgDefault = parcelHelpers.interopDefault(_checkOnSvg);\nvar _configSvg = require(\"bundle-text:./img/config.svg\");\nvar _configSvgDefault = parcelHelpers.interopDefault(_configSvg);\nvar _mode0OffSvg = require(\"bundle-text:./img/mode_0_off.svg\");\nvar _mode0OffSvgDefault = parcelHelpers.interopDefault(_mode0OffSvg);\nvar _mode0OnSvg = require(\"bundle-text:./img/mode_0_on.svg\");\nvar _mode0OnSvgDefault = parcelHelpers.interopDefault(_mode0OnSvg);\nvar _mode1OffSvg = require(\"bundle-text:./img/mode_1_off.svg\");\nvar _mode1OffSvgDefault = parcelHelpers.interopDefault(_mode1OffSvg);\nvar _mode1OnSvg = require(\"bundle-text:./img/mode_1_on.svg\");\nvar _mode1OnSvgDefault = parcelHelpers.interopDefault(_mode1OnSvg);\nvar _mode2OffSvg = require(\"bundle-text:./img/mode_2_off.svg\");\nvar _mode2OffSvgDefault = parcelHelpers.interopDefault(_mode2OffSvg);\nvar _mode2OnSvg = require(\"bundle-text:./img/mode_2_on.svg\");\nvar _mode2OnSvgDefault = parcelHelpers.interopDefault(_mode2OnSvg);\nvar _offSvg = require(\"bundle-text:./img/off.svg\");\nvar _offSvgDefault = parcelHelpers.interopDefault(_offSvg);\nvar _onSvg = require(\"bundle-text:./img/on.svg\");\nvar _onSvgDefault = parcelHelpers.interopDefault(_onSvg);\nvar _styleSvg = require(\"bundle-text:./img/style.svg\");\nvar _styleSvgDefault = parcelHelpers.interopDefault(_styleSvg);\nvar _styleLess = require(\"bundle-text:./style.less\");\nvar _styleLessDefault = parcelHelpers.interopDefault(_styleLess);\nclass Setting {\n constructor(art, danmuku){\n this.art = art;\n this.danmuku = danmuku;\n this.utils = art.constructor.utils;\n const { setStyle } = this.utils;\n const { $controlsCenter } = art.template;\n setStyle($controlsCenter, 'display', 'flex');\n this.template = {\n $controlsCenter,\n $mount: $controlsCenter,\n $danmuku: null,\n $toggle: null,\n $config: null,\n $configPanel: null,\n $configModes: null,\n $style: null,\n $stylePanel: null,\n $styleModes: null,\n $colors: null,\n $opacitySlider: null,\n $opacityValue: null,\n $marginSlider: null,\n $marginValue: null,\n $fontSizeSlider: null,\n $fontSizeValue: null,\n $speedSlider: null,\n $speedValue: null,\n $input: null,\n $send: null\n };\n this.slider = {\n opacity: null,\n margin: null,\n fontSize: null,\n speed: null\n };\n this.emitting = false;\n this.isLock = false;\n this.timer = null;\n this.createTemplate();\n this.createSliders();\n this.createEvents();\n this.mount(this.option.mount);\n art.on('resize', ()=>this.resize());\n art.on('fullscreen', (state)=>this.onFullscreen(state));\n art.on('fullscreenWeb', (state)=>this.onFullscreen(state));\n art.proxy(this.template.$config, 'mouseenter', ()=>{\n this.onMouseEnter({\n $control: this.template.$config,\n $panel: this.template.$configPanel\n });\n });\n art.proxy(this.template.$style, 'mouseenter', ()=>{\n this.onMouseEnter({\n $control: this.template.$style,\n $panel: this.template.$stylePanel\n });\n });\n }\n static get icons() {\n return {\n $on: (0, _onSvgDefault.default),\n $off: (0, _offSvgDefault.default),\n $config: (0, _configSvgDefault.default),\n $style: (0, _styleSvgDefault.default),\n $mode_0_off: (0, _mode0OffSvgDefault.default),\n $mode_0_on: (0, _mode0OnSvgDefault.default),\n $mode_1_off: (0, _mode1OffSvgDefault.default),\n $mode_1_on: (0, _mode1OnSvgDefault.default),\n $mode_2_off: (0, _mode2OffSvgDefault.default),\n $mode_2_on: (0, _mode2OnSvgDefault.default),\n $check_on: (0, _checkOnSvgDefault.default),\n $check_off: (0, _checkOffSvgDefault.default)\n };\n }\n get option() {\n return this.danmuku.option;\n }\n get outside() {\n return this.template.$mount !== this.template.$controlsCenter;\n }\n get TEMPLATE() {\n const { option } = this;\n return `\n

\n ${0, _onSvgDefault.default}${0, _offSvgDefault.default}\n
\n
\n ${0, _configSvgDefault.default}\n
\n
\n
\n \\u{6309}\\u{7C7B}\\u{578B}\\u{5C4F}\\u{853D}\n
\n
\n ${0, _mode0OffSvgDefault.default}${0, _mode0OnSvgDefault.default}\n
\\u{6EDA}\\u{52A8}
\n
\n
\n ${0, _mode1OffSvgDefault.default}${0, _mode1OnSvgDefault.default}\n
\\u{9876}\\u{90E8}
\n
\n
\n ${0, _mode2OffSvgDefault.default}${0, _mode2OnSvgDefault.default}\n
\\u{5E95}\\u{90E8}
\n
\n
\n
\n
\n
\n ${0, _checkOnSvgDefault.default}${0, _checkOffSvgDefault.default}\n \\u{9632}\\u{6B62}\\u{5F39}\\u{5E55}\\u{91CD}\\u{53E0}\n
\n
\n ${0, _checkOnSvgDefault.default}${0, _checkOffSvgDefault.default}\n \\u{540C}\\u{6B65}\\u{89C6}\\u{9891}\\u{901F}\\u{5EA6}\n
\n
\n
\n \\u{4E0D}\\u{900F}\\u{660E}\\u{5EA6}\n
\n
\\u{672A}\\u{77E5}
\n
\n
\n \\u{663E}\\u{793A}\\u{533A}\\u{57DF}\n
\n
\\u{672A}\\u{77E5}
\n
\n
\n \\u{5F39}\\u{5E55}\\u{5B57}\\u{53F7}\n
\n
\\u{672A}\\u{77E5}
\n
\n
\n \\u{5F39}\\u{5E55}\\u{901F}\\u{5EA6}\n
\n
\\u{672A}\\u{77E5}
\n
\n
\n
\n
\n
\n
\n ${0, _styleSvgDefault.default}\n
\n
\n
\n \\u{6A21}\\u{5F0F}\n
\n
\n ${0, _mode0OnSvgDefault.default}\n
\\u{6EDA}\\u{52A8}
\n
\n
\n ${0, _mode1OnSvgDefault.default}\n
\\u{9876}\\u{90E8}
\n
\n
\n ${0, _mode2OnSvgDefault.default}\n
\\u{5E95}\\u{90E8}
\n
\n
\n
\n
\n \\u{989C}\\u{8272}\n
\n ${this.COLOR.map((color)=>`
`).join('')}\n
\n
\n
\n
\n
\n \n
\\u{53D1}\\u{9001}
\n
\n `;\n }\n get OPACITY() {\n return {\n min: 0,\n max: 100,\n steps: [],\n ...this.option.OPACITY\n };\n }\n get FONT_SIZE() {\n return {\n min: 12,\n max: 120,\n steps: [],\n ...this.option.FONT_SIZE\n };\n }\n get MARGIN() {\n return {\n min: 0,\n max: 3,\n steps: [\n {\n name: '1/4',\n value: [\n 10,\n '75%'\n ]\n },\n {\n name: \"\\u534A\\u5C4F\",\n value: [\n 10,\n '50%'\n ]\n },\n {\n name: '3/4',\n value: [\n 10,\n '25%'\n ]\n },\n {\n name: \"\\u6EE1\\u5C4F\",\n value: [\n 10,\n 10\n ]\n }\n ],\n ...this.option.MARGIN\n };\n }\n get SPEED() {\n return {\n min: 0,\n max: 4,\n steps: [\n {\n name: \"\\u6781\\u6162\",\n value: 10\n },\n {\n name: \"\\u8F83\\u6162\",\n value: 7.5,\n hide: true\n },\n {\n name: \"\\u9002\\u4E2D\",\n value: 5\n },\n {\n name: \"\\u8F83\\u5FEB\",\n value: 2.5,\n hide: true\n },\n {\n name: \"\\u6781\\u5FEB\",\n value: 1\n }\n ],\n ...this.option.SPEED\n };\n }\n get COLOR() {\n return this.option.COLOR.length ? this.option.COLOR : [\n '#FE0302',\n '#FF7204',\n '#FFAA02',\n '#FFD302',\n '#FFFF00',\n '#A0EE00',\n '#00CD00',\n '#019899',\n '#4266BE',\n '#89D5FF',\n '#CC0273',\n '#222222',\n '#9B9B9B',\n '#FFFFFF'\n ];\n }\n query(selector) {\n const { query } = this.utils;\n const { $danmuku } = this.template;\n return query(selector, $danmuku);\n }\n append(el, target) {\n const { append } = this.utils;\n const children = [\n ...el.children\n ];\n if (children.includes(target)) return;\n append(el, target);\n }\n setData(key, value) {\n const { $player } = this.art.template;\n const { $mount } = this.template;\n $player.dataset[key] = value;\n if (this.outside) $mount.dataset[key] = value;\n }\n createTemplate() {\n const { createElement, tooltip } = this.utils;\n const $danmuku = createElement('div');\n $danmuku.className = 'artplayer-plugin-danmuku';\n $danmuku.innerHTML = this.TEMPLATE;\n this.template.$danmuku = $danmuku;\n this.template.$toggle = this.query('.apd-toggle');\n this.template.$config = this.query('.apd-config');\n this.template.$configPanel = this.query('.apd-config-panel');\n this.template.$configModes = this.query('.apd-config-mode .apd-modes');\n this.template.$style = this.query('.apd-style');\n this.template.$stylePanel = this.query('.apd-style-panel');\n this.template.$styleModes = this.query('.apd-style-mode .apd-modes');\n this.template.$colors = this.query('.apd-colors');\n this.template.$antiOverlap = this.query('.apd-anti-overlap');\n this.template.$syncVideo = this.query('.apd-sync-video');\n this.template.$opacitySlider = this.query('.apd-config-opacity .apd-slider');\n this.template.$opacityValue = this.query('.apd-config-opacity .apd-value');\n this.template.$marginSlider = this.query('.apd-config-margin .apd-slider');\n this.template.$marginValue = this.query('.apd-config-margin .apd-value');\n this.template.$fontSizeSlider = this.query('.apd-config-fontSize .apd-slider');\n this.template.$fontSizeValue = this.query('.apd-config-fontSize .apd-value');\n this.template.$speedSlider = this.query('.apd-config-speed .apd-slider');\n this.template.$speedValue = this.query('.apd-config-speed .apd-value');\n this.template.$input = this.query('.apd-input');\n this.template.$send = this.query('.apd-send');\n const { $toggle } = this.template;\n this.art.on('artplayerPluginDanmuku:show', ()=>{\n tooltip($toggle, \"\\u5173\\u95ED\\u5F39\\u5E55\");\n });\n this.art.on('artplayerPluginDanmuku:hide', ()=>{\n tooltip($toggle, \"\\u6253\\u5F00\\u5F39\\u5E55\");\n });\n }\n createEvents() {\n const { $toggle, $configModes, $styleModes, $colors, $antiOverlap, $syncVideo, $send, $input } = this.template;\n this.art.proxy($toggle, 'click', ()=>{\n this.danmuku.config({\n visible: !this.option.visible\n });\n this.reset();\n });\n this.art.proxy($configModes, 'click', (event)=>{\n const $mode = event.target.closest('.apd-mode');\n if (!$mode) return;\n const mode = Number($mode.dataset.mode);\n if (this.option.modes.includes(mode)) this.danmuku.config({\n modes: this.option.modes.filter((m)=>m !== mode)\n });\n else this.danmuku.config({\n modes: [\n ...this.option.modes,\n mode\n ]\n });\n this.reset();\n });\n this.art.proxy($antiOverlap, 'click', ()=>{\n this.danmuku.config({\n antiOverlap: !this.option.antiOverlap\n });\n this.reset();\n });\n this.art.proxy($syncVideo, 'click', ()=>{\n this.danmuku.config({\n synchronousPlayback: !this.option.synchronousPlayback\n });\n this.reset();\n });\n this.art.proxy($styleModes, 'click', (event)=>{\n const $mode = event.target.closest('.apd-mode');\n if (!$mode) return;\n const mode = Number($mode.dataset.mode);\n this.danmuku.config({\n mode\n });\n this.reset();\n });\n this.art.proxy($colors, 'click', (event)=>{\n const $color = event.target.closest('.apd-color');\n if (!$color) return;\n this.danmuku.config({\n color: $color.dataset.color\n });\n this.reset();\n });\n this.art.proxy($send, 'click', ()=>this.emit());\n this.art.proxy($input, 'keypress', (event)=>{\n if (event.key === 'Enter') {\n event.preventDefault();\n this.emit();\n }\n });\n }\n createSliders() {\n this.slider.opacity = this.createSlider({\n ...this.OPACITY,\n container: this.template.$opacitySlider,\n findIndex: ()=>{\n return Math.round(this.option.opacity * 100);\n },\n onChange: (index)=>{\n const { $opacityValue } = this.template;\n $opacityValue.textContent = `${index}%`;\n this.danmuku.config({\n opacity: index / 100\n });\n }\n });\n this.slider.margin = this.createSlider({\n ...this.MARGIN,\n container: this.template.$marginSlider,\n findIndex: ()=>{\n return this.MARGIN.steps.findIndex((item)=>item.value[0] === this.option.margin[0] && item.value[1] === this.option.margin[1]);\n },\n onChange: (index)=>{\n const margin = this.MARGIN.steps[index];\n if (!margin) return;\n const { $marginValue } = this.template;\n $marginValue.textContent = margin.name;\n this.danmuku.config({\n margin: margin.value\n });\n }\n });\n this.slider.fontSize = this.createSlider({\n ...this.FONT_SIZE,\n container: this.template.$fontSizeSlider,\n findIndex: ()=>{\n return this.danmuku.fontSize;\n },\n onChange: (index)=>{\n const { $fontSizeValue } = this.template;\n $fontSizeValue.textContent = `${index}px`;\n if (index === this.danmuku.fontSize) return;\n this.danmuku.config({\n fontSize: index\n });\n }\n });\n this.slider.speed = this.createSlider({\n ...this.SPEED,\n container: this.template.$speedSlider,\n findIndex: ()=>{\n return this.SPEED.steps.findIndex((item)=>item.value === this.option.speed);\n },\n onChange: (index)=>{\n const speed = this.SPEED.steps[index];\n if (!speed) return;\n const { $speedValue } = this.template;\n $speedValue.textContent = speed.name;\n this.danmuku.config({\n speed: speed.value\n });\n }\n });\n }\n createSlider({ min, max, container, findIndex, onChange, steps = [] }) {\n const { query, clamp, setStyle } = this.utils;\n setStyle(container, 'touch-action', 'none');\n container.innerHTML = `\n
\n
\n ${steps.map(()=>`
`).join('')}\n
\n
\n
\n
\n
\n ${steps.map((step)=>step.hide ? '' : `
${step.name}
`).join('')}\n
\n `;\n const $dot = query('.apd-slider-dot', container);\n const $progress = query('.apd-slider-progress', container);\n let isDroging = false;\n function reset(index = findIndex()) {\n if (index < min || index > max) return;\n const percentage = (index - min) / (max - min);\n $dot.style.left = `${percentage * 100}%`;\n if (steps.length === 0) $progress.style.width = $dot.style.left;\n onChange(index);\n }\n function updateLeft(event) {\n const { top, height, left, width } = container.getBoundingClientRect();\n if (this.art.isRotate) {\n const value = clamp(event.clientY - top, 0, height);\n const index = Math.round(value / height * (max - min) + min);\n reset(index);\n } else {\n const value = clamp(event.clientX - left, 0, width);\n const index = Math.round(value / width * (max - min) + min);\n reset(index);\n }\n }\n this.art.proxy(container, 'click', (event)=>{\n updateLeft.call(this, event);\n });\n this.art.proxy(container, 'pointerdown', (event)=>{\n isDroging = event.button === 0;\n });\n this.art.proxy(document, 'pointermove', (event)=>{\n if (isDroging) updateLeft.call(this, event);\n });\n this.art.proxy(document, 'pointerup', (event)=>{\n if (isDroging) {\n isDroging = false;\n updateLeft.call(this, event);\n }\n });\n return {\n reset\n };\n }\n onFullscreen(state) {\n const { $danmuku, $controlsCenter, $mount } = this.template;\n if (this.outside) {\n if (state) this.append($controlsCenter, $danmuku);\n else this.append($mount, $danmuku);\n } else this.append($controlsCenter, $danmuku);\n }\n onMouseEnter({ $control, $panel }) {\n const { $player } = this.art.template;\n const controlRect = $control.getBoundingClientRect();\n const panelRect = $panel.getBoundingClientRect();\n const playerRect = $player.getBoundingClientRect();\n const half = panelRect.width / 2 - controlRect.width / 2;\n const left = playerRect.left - (controlRect.left - half);\n const right = controlRect.right + half - playerRect.right;\n if (left > 0) $panel.style.left = `${-half + left}px`;\n else if (right > 0) $panel.style.left = `${-half - right}px`;\n else $panel.style.left = `${-half}px`;\n }\n async emit() {\n const { $input } = this.template;\n const text = $input.value.trim();\n if (!text.length) return;\n if (this.isLock) return;\n if (this.emitting) return;\n const danmu = {\n text,\n mode: this.option.mode,\n color: this.option.color,\n time: this.art.currentTime\n };\n try {\n this.emitting = true;\n const state = await this.option.beforeEmit(danmu);\n this.emitting = false;\n if (state !== true) return;\n danmu.border = true;\n delete danmu.time;\n this.danmuku.emit(danmu);\n $input.value = '';\n this.lock();\n } catch (error) {\n console.error('Error emitting danmuku:', error);\n this.emitting = false;\n }\n }\n lock() {\n const { addClass } = this.utils;\n const { $send } = this.template;\n this.isLock = true;\n let time = this.option.lockTime;\n $send.textContent = time;\n addClass($send, 'apd-lock');\n const loop = ()=>{\n this.timer = setTimeout(()=>{\n if (time === 0) this.unlock();\n else {\n time -= 1;\n $send.textContent = time;\n loop();\n }\n }, 1000);\n };\n loop();\n }\n unlock() {\n const { removeClass } = this.utils;\n const { $send } = this.template;\n clearTimeout(this.timer);\n this.isLock = false;\n $send.textContent = \"\\u53D1\\u9001\";\n removeClass($send, 'apd-lock');\n }\n resize() {\n if (this.outside) return;\n if (this.art.fullscreen) return;\n if (this.art.fullscreenWeb) return;\n const { $player, $controlsCenter } = this.art.template;\n const { $danmuku } = this.template;\n if (this.art.width < this.option.width) this.append($player, $danmuku);\n else this.append($controlsCenter, $danmuku);\n }\n reset() {\n const { inverseClass, tooltip } = this.utils;\n const { $toggle, $colors } = this.template;\n this.slider.opacity.reset();\n this.slider.margin.reset();\n this.slider.fontSize.reset();\n this.slider.speed.reset();\n this.setData('danmukuVisible', this.option.visible);\n this.setData('danmukuMode', this.option.mode);\n this.setData('danmukuColor', this.option.color);\n this.setData('danmukuMode0', this.option.modes.includes(0));\n this.setData('danmukuMode1', this.option.modes.includes(1));\n this.setData('danmukuMode2', this.option.modes.includes(2));\n this.setData('danmukuAntiOverlap', this.option.antiOverlap);\n this.setData('danmukuSyncVideo', this.option.synchronousPlayback);\n this.setData('danmukuTheme', this.option.theme);\n this.setData('danmukuEmitter', this.option.emitter);\n const colors = $colors.children;\n const $color = Array.from(colors).find((item)=>item.dataset.color === this.option.color.toUpperCase());\n $color && inverseClass($color, 'apd-active');\n tooltip($toggle, this.option.visible ? \"\\u5173\\u95ED\\u5F39\\u5E55\" : \"\\u6253\\u5F00\\u5F39\\u5E55\");\n this.resize();\n }\n mount(target) {\n const { errorHandle } = this.utils;\n const $el = typeof target === 'string' ? document.querySelector(target) : target;\n errorHandle($el, `Can not find the mount point: ${target}`);\n this.append($el, this.template.$danmuku);\n this.template.$mount = $el;\n this.reset();\n }\n}\nexports.default = Setting;\nif (typeof document !== 'undefined') {\n const id = 'artplayer-plugin-danmuku';\n let $style = document.getElementById(id);\n if (!$style) {\n $style = document.createElement('style');\n $style.id = id;\n if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', ()=>{\n document.head.appendChild($style);\n });\n else (document.head || document.documentElement).appendChild($style);\n }\n $style.textContent = (0, _styleLessDefault.default);\n}\n\n},{\"bundle-text:./img/check_off.svg\":\"4tC1X\",\"bundle-text:./img/check_on.svg\":\"iQql8\",\"bundle-text:./img/config.svg\":\"DK7bp\",\"bundle-text:./img/mode_0_off.svg\":\"fp5qd\",\"bundle-text:./img/mode_0_on.svg\":\"fYNQe\",\"bundle-text:./img/mode_1_off.svg\":\"gQMgY\",\"bundle-text:./img/mode_1_on.svg\":\"5E8Hg\",\"bundle-text:./img/mode_2_off.svg\":\"89iSb\",\"bundle-text:./img/mode_2_on.svg\":\"2YEb0\",\"bundle-text:./img/off.svg\":\"3WiJz\",\"bundle-text:./img/on.svg\":\"5XkVj\",\"bundle-text:./img/style.svg\":\"h2xX3\",\"bundle-text:./style.less\":\"dHTK8\",\"@parcel/transformer-js/src/esmodule-helpers.js\":\"5lQoW\"}],\"4tC1X\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"iQql8\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"DK7bp\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"fp5qd\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"fYNQe\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"gQMgY\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"5E8Hg\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"89iSb\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"2YEb0\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"3WiJz\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"5XkVj\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"h2xX3\":[function(require,module,exports,__globalThis) {\nmodule.exports = \"\";\n\n},{}],\"dHTK8\":[function(require,module,exports,__globalThis) {\nmodule.exports = \".artplayer-plugin-danmuku{z-index:99;color:#fff;flex-shrink:0;justify-content:center;align-items:center;gap:10px;width:100%;height:32px;font-size:12px;font-weight:300;display:flex;position:relative}.artplayer-plugin-danmuku .apd-icon{cursor:pointer;opacity:.75;fill:#fff;transition:all .2s}.artplayer-plugin-danmuku .apd-icon:hover{opacity:1}.artplayer-plugin-danmuku .apd-config{display:flex;position:relative}.artplayer-plugin-danmuku .apd-config .apd-config-panel{opacity:0;pointer-events:none;width:320px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-config .apd-config-panel .apd-config-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-config:hover .apd-config-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-config-mode,.artplayer-plugin-danmuku .apd-config-slider,.artplayer-plugin-danmuku .apd-config-other,.artplayer-plugin-danmuku .apd-style-mode{margin-bottom:15px}.artplayer-plugin-danmuku .apd-modes{align-items:center;gap:20px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-modes .apd-mode{cursor:pointer;text-align:center}.artplayer-plugin-danmuku .apd-modes .apd-mode:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-config-slider{align-items:center;gap:12px;display:flex}.artplayer-plugin-danmuku .apd-config-slider .apd-value{text-align:right;width:32px}.artplayer-plugin-danmuku .apd-slider{cursor:pointer;flex:1;justify-content:center;align-items:center;height:20px;display:flex;position:relative}.artplayer-plugin-danmuku .apd-slider .apd-slider-line{background-color:#ffffff40;border-radius:3px;width:100%;height:2px;position:relative;overflow:hidden}.artplayer-plugin-danmuku .apd-slider .apd-slider-points{justify-content:space-between;align-items:center;display:flex;position:absolute;inset:0}.artplayer-plugin-danmuku .apd-slider .apd-slider-points .apd-slider-point{background-color:#ffffff80;border-radius:50%;width:2px;height:2px}.artplayer-plugin-danmuku .apd-slider .apd-slider-progress{background-color:#00a1d6;width:0%;height:100%}.artplayer-plugin-danmuku .apd-slider .apd-slider-dot{background-color:#00a1d6;border-radius:50%;width:12px;height:12px;position:absolute;left:0%;transform:translate(-6px)}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps{color:#777;justify-content:space-between;align-items:center;width:calc(100% + 32px);display:flex;position:absolute;bottom:-12px}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps .apd-slider-step{text-align:center;flex-shrink:0;width:36px;scale:.95}.artplayer-plugin-danmuku .apd-config-other{align-items:center;gap:20px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-check-off,.artplayer-plugin-danmuku .apd-config-other .apd-check-on{width:16px;height:16px}.artplayer-plugin-danmuku .apd-config-other .apd-other{cursor:pointer;align-items:center;gap:2px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-other:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-emitter{background-color:#ffffff40;border-radius:5px;flex:1;align-items:center;height:100%;display:flex}.artplayer-plugin-danmuku .apd-style{justify-content:center;align-items:center;display:flex;position:relative}.artplayer-plugin-danmuku .apd-style .apd-style-panel{opacity:0;pointer-events:none;width:200px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-style .apd-style-panel .apd-style-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-style:hover .apd-style-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-colors{flex-wrap:wrap;gap:8px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-colors .apd-color{cursor:pointer;border-radius:2px;width:16px;height:16px}.artplayer-plugin-danmuku .apd-colors .apd-color.apd-active{border:1px solid #000;box-shadow:0 0 0 1px #fff}.artplayer-plugin-danmuku .apd-input{color:#fff;background-color:#0000;border:none;outline:none;flex:1;width:auto;min-width:0;height:100%;line-height:1}.artplayer-plugin-danmuku .apd-input::placeholder{color:#ffffff80}.artplayer-plugin-danmuku .apd-send{cursor:pointer;width:60px;height:100%;text-shadow:none;background-color:#00a1d6;border-top-right-radius:5px;border-bottom-right-radius:5px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.artplayer-plugin-danmuku .apd-send.apd-lock{cursor:not-allowed;color:#666;background-color:#e7e7e7}.art-controls-center .apd-emitter{flex:none;width:260px}.art-fullscreen .artplayer-plugin-danmuku,.art-fullscreen-web .artplayer-plugin-danmuku{gap:16px;height:38px}.art-fullscreen .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen-web .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-on,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-on{width:28px;height:28px}.art-fullscreen .artplayer-plugin-danmuku .apd-emitter,.art-fullscreen-web .artplayer-plugin-danmuku .apd-emitter{flex:none;width:400px}.art-video-player>.artplayer-plugin-danmuku{padding:0 10px;position:absolute;bottom:-40px;left:0;right:0}.art-video-player:has(>.artplayer-plugin-danmuku){margin-bottom:40px}[data-danmuku-emitter=false] .apd-emitter{display:none!important}[data-danmuku-emitter=false] .art-controls-center .artplayer-plugin-danmuku{justify-content:flex-end;gap:18px}[data-danmuku-emitter=false].art-fullscreen .art-controls-center .artplayer-plugin-danmuku,[data-danmuku-emitter=false].art-fullscreen-web .art-controls-center .artplayer-plugin-danmuku{gap:24px}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-icon{fill:#333}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-emitter{background-color:#f1f2f3}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input{color:#000}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input::placeholder{color:#0000004d}[data-danmuku-visible=false] .apd-toggle-off{display:block}[data-danmuku-visible=false] .apd-toggle-on,[data-danmuku-visible=true] .apd-toggle-off{display:none}[data-danmuku-visible=true] .apd-toggle-on{display:block}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-on{display:none}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-off,[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-on{display:block}[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-off,[data-danmuku-sync-video=false] .apd-sync-video .apd-check-on{display:none}[data-danmuku-sync-video=false] .apd-sync-video .apd-check-off,[data-danmuku-sync-video=true] .apd-sync-video .apd-check-on{display:block}[data-danmuku-sync-video=true] .apd-sync-video .apd-check-off{display:none}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-off{display:block}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-on{display:none}[data-danmuku-mode0=false] .art-danmuku [data-mode=\\\"0\\\"]{opacity:0!important}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-off{display:none}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-on{display:block}[data-danmuku-mode=\\\"0\\\"] .apd-style-mode [data-mode=\\\"0\\\"]{color:#00a1d6}[data-danmuku-mode=\\\"0\\\"] .apd-style-mode [data-mode=\\\"0\\\"] path{fill:#00a1d6}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-off{display:block}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-on{display:none}[data-danmuku-mode1=false] .art-danmuku [data-mode=\\\"1\\\"]{opacity:0!important}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-off{display:none}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-on{display:block}[data-danmuku-mode=\\\"1\\\"] .apd-style-mode [data-mode=\\\"1\\\"]{color:#00a1d6}[data-danmuku-mode=\\\"1\\\"] .apd-style-mode [data-mode=\\\"1\\\"] path{fill:#00a1d6}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-off{display:block}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-on{display:none}[data-danmuku-mode2=false] .art-danmuku [data-mode=\\\"2\\\"]{opacity:0!important}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-off{display:none}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-on{display:block}[data-danmuku-mode=\\\"2\\\"] .apd-style-mode [data-mode=\\\"2\\\"]{color:#00a1d6}[data-danmuku-mode=\\\"2\\\"] .apd-style-mode [data-mode=\\\"2\\\"] path{fill:#00a1d6}\";\n\n},{}]},[\"6ZbtA\"], \"6ZbtA\", \"parcelRequire4dc0\", {})\nlet {default: _default, } = parcelRequire4dc0(\"6ZbtA\");\nexport {_default as default, };\n\n//# sourceMappingURL=index.js.map\n","import Danmuku from './danmuku'\nimport heatmap from './heatmap'\nimport Setting from './setting'\n\nexport default function artplayerPluginDanmuku(option) {\n return (art) => {\n const danmuku = new Danmuku(art, option)\n const setting = new Setting(art, danmuku)\n\n if (danmuku.option.heatmap) {\n heatmap(art, danmuku, danmuku.option.heatmap)\n }\n\n return {\n name: 'artplayerPluginDanmuku',\n emit: danmuku.emit.bind(danmuku),\n load: danmuku.load.bind(danmuku),\n config: danmuku.config.bind(danmuku),\n hide: danmuku.hide.bind(danmuku),\n show: danmuku.show.bind(danmuku),\n reset: danmuku.reset.bind(danmuku),\n mount: setting.mount.bind(setting),\n get option() {\n return danmuku.option\n },\n get isHide() {\n return danmuku.isHide\n },\n get isStop() {\n return danmuku.isStop\n },\n }\n }\n}\n\nartplayerPluginDanmuku.icons = Setting.icons\n\nif (typeof window !== 'undefined') {\n window.artplayerPluginDanmuku = artplayerPluginDanmuku\n}\n","import workerText from 'bundle-text:./worker'\nimport { bilibiliDanmuParseFromUrl } from './bilibili'\n\nexport default class Danmuku {\n constructor(art, option) {\n const { constructor, template } = art\n\n this.utils = constructor.utils // 工具库\n this.validator = constructor.validator // 配置校验器\n this.$danmuku = template.$danmuku // 弹幕层容器\n this.$player = template.$player // 播放器容器\n\n this.art = art\n this.queue = [] // 实际弹幕队列\n this.$refs = [] // 弹幕DOM节点池\n this.isStop = false // 是否停止\n this.isHide = false // 是否隐藏\n this.timer = null // 定时器\n this.index = 0 // 弹幕索引\n\n // 格式化后的配置项\n this.option = Danmuku.option\n\n // 弹幕状态池\n this.states = { wait: [], ready: [], emit: [], stop: [] }\n\n // 初始化配置\n this.config(option, true)\n\n // 创建 Web Worker, 用于计算弹幕的 top 值\n const workerText2 = workerText.replace('export{e as default};', '')\n const blob = new Blob([workerText2], { type: 'application/javascript' })\n this.worker = new Worker(URL.createObjectURL(blob))\n\n // 绑定公用事件\n this.start = this.start.bind(this)\n this.stop = this.stop.bind(this)\n this.reset = this.reset.bind(this)\n this.resize = this.resize.bind(this)\n this.destroy = this.destroy.bind(this)\n\n // 监听事件\n art.on('video:play', this.start)\n art.on('video:playing', this.start)\n art.on('video:pause', this.stop)\n art.on('video:waiting', this.stop)\n art.on('destroy', this.destroy)\n art.on('resize', this.resize)\n\n // 开始加载弹幕\n this.load()\n }\n\n // 默认配置\n static get option() {\n return {\n danmuku: [], // 弹幕数据\n speed: 5, // 弹幕持续时间,范围在[1 ~ 10]\n margin: [10, '25%'], // 弹幕上下边距,支持像素数字和百分比\n opacity: 1, // 弹幕透明度,范围在[0 ~ 1]\n color: '#FFFFFF', // 默认弹幕颜色,可以被单独弹幕项覆盖\n mode: 0, // 默认弹幕模式: 0: 滚动,1: 顶部,2: 底部\n modes: [0, 1, 2], // 弹幕可见的模式\n fontSize: 25, // 弹幕字体大小,支持像素数字和百分比\n antiOverlap: true, // 弹幕是否防重叠\n synchronousPlayback: false, // 是否同步播放速度\n mount: undefined, // 弹幕发射器挂载点, 默认为播放器控制栏中部\n heatmap: false, // 是否开启热力图\n width: 512, // 当播放器宽度小于此值时,弹幕发射器置于播放器底部\n points: [], // 热力图数据\n filter: () => true, // 弹幕载入前的过滤器,只支持返回布尔值\n beforeEmit: () => true, // 弹幕发送前的过滤器,支持返回 Promise\n beforeVisible: () => true, // 弹幕显示前的过滤器,支持返回 Promise\n visible: true, // 弹幕层是否可见\n emitter: true, // 是否开启弹幕发射器\n maxLength: 200, // 弹幕输入框最大长度, 范围在[1 ~ 1000]\n lockTime: 5, // 输入框锁定时间,范围在[1 ~ 60]\n theme: 'dark', // 弹幕主题,支持 dark 和 light,只在自定义挂载时生效\n OPACITY: {}, // 不透明度配置项\n FONT_SIZE: {}, // 弹幕字号配置项\n MARGIN: {}, // 显示区域配置项\n SPEED: {}, // 弹幕速度配置项\n COLOR: [], // 颜色列表配置项\n }\n }\n\n // 配置校验\n static get scheme() {\n return {\n danmuku: 'array|function|string',\n speed: 'number',\n margin: 'array',\n opacity: 'number',\n color: 'string',\n mode: 'number',\n modes: 'array',\n fontSize: 'number|string',\n antiOverlap: 'boolean',\n synchronousPlayback: 'boolean',\n mount: '?htmldivelement|string',\n heatmap: 'object|boolean',\n width: 'number',\n points: 'array',\n filter: 'function',\n beforeEmit: 'function',\n beforeVisible: 'function',\n visible: 'boolean',\n emitter: 'boolean',\n maxLength: 'number',\n lockTime: 'number',\n theme: 'string',\n OPACITY: 'object',\n FONT_SIZE: 'object',\n MARGIN: 'object',\n SPEED: 'object',\n COLOR: 'array',\n }\n }\n\n // 初始弹幕样式\n static get cssText() {\n return `\n user-select: none;\n position: absolute;\n white-space: pre;\n pointer-events: none;\n perspective: 500px;\n display: inline-block;\n will-change: transform;\n font-weight: normal;\n line-height: 1.125;\n visibility: hidden;\n font-family: SimHei, \"Microsoft JhengHei\", Arial, Helvetica, sans-serif;\n text-shadow: rgb(0, 0, 0) 1px 0px 1px, rgb(0, 0, 0) 0px 1px 1px, rgb(0, 0, 0) 0px -1px 1px, rgb(0, 0, 0) -1px 0px 1px;\n `\n }\n\n // 是否在移动端使用了自动旋屏,会影响弹幕的left和top值\n get isRotate() {\n return this.art.plugins?.autoOrientation?.state\n }\n\n // 计算上空白边距\n get marginTop() {\n const { clamp } = this.utils\n const value = this.option.margin[0]\n const { clientHeight } = this.$player\n\n if (typeof value === 'number') {\n return clamp(value, 0, clientHeight)\n }\n\n if (typeof value === 'string' && value.endsWith('%')) {\n const ratio = Number.parseFloat(value) / 100\n return clamp(clientHeight * ratio, 0, clientHeight)\n }\n\n return Danmuku.option.margin[0]\n }\n\n // 计算下空白边距\n get marginBottom() {\n const { clamp } = this.utils\n const value = this.option.margin[1]\n const { clientHeight } = this.$player\n\n if (typeof value === 'number') {\n return clamp(value, 0, clientHeight)\n }\n\n if (typeof value === 'string' && value.endsWith('%')) {\n const ratio = Number.parseFloat(value) / 100\n return clamp(clientHeight * ratio, 0, clientHeight)\n }\n\n return Danmuku.option.margin[1]\n }\n\n // 计算弹幕字体大小\n get fontSize() {\n const { clamp } = this.utils\n const { clientHeight } = this.$player\n\n const fontSize = this.option.fontSize\n\n if (typeof fontSize === 'number') {\n return Math.round(clamp(fontSize, 12, clientHeight))\n }\n\n if (typeof fontSize === 'string' && fontSize.endsWith('%')) {\n const ratio = Number.parseFloat(fontSize) / 100\n return Math.round(clamp(clientHeight * ratio, 12, clientHeight))\n }\n\n return Danmuku.option.fontSize\n }\n\n // 获取弹幕DOM节点\n get $ref() {\n const $ref = this.$refs.pop() || document.createElement('div')\n $ref.style.cssText = Danmuku.cssText\n $ref.dataset.mode = ''\n $ref.dataset.id = ''\n $ref.className = ''\n return $ref\n }\n\n // 获取准备好发送的弹幕\n get readys() {\n const { currentTime } = this.art\n\n const result = []\n\n // 有的是ready状态:之前因为弹幕太多而暂停发送的弹幕\n this.filter('ready', danmu => result.push(danmu))\n\n // 有的是wait状态:符合时间范围的弹幕\n this.filter('wait', (danmu) => {\n if (currentTime + 0.1 >= danmu.time && danmu.time >= currentTime - 0.1) {\n result.push(danmu)\n }\n })\n\n return result\n }\n\n // 可见的弹幕的数据,用于计算下一个弹幕的top值\n get visibles() {\n const result = []\n const { clientWidth } = this.$player\n const clientLeft = this.getLeft(this.$player)\n\n this.filter('emit', (danmu) => {\n const top = danmu.$ref.offsetTop\n const left = this.getLeft(danmu.$ref) - clientLeft\n const height = danmu.$ref.clientHeight\n const width = danmu.$ref.clientWidth\n const distance = left + width\n const right = clientWidth - distance\n const speed = distance / danmu.$restTime\n\n const emit = {}\n emit.top = top\n emit.left = left\n emit.height = height\n emit.width = width\n emit.right = right\n emit.speed = speed\n emit.distance = distance\n emit.time = danmu.$restTime\n emit.mode = danmu.mode\n\n result.push(emit)\n })\n\n return result\n }\n\n // 计算弹幕速度\n get speed() {\n return this.option.synchronousPlayback && this.art.playbackRate\n ? this.option.speed / Number(this.art.playbackRate)\n : this.option.speed\n }\n\n // 加载弹幕\n async load(danmuku) {\n const { errorHandle } = this.utils\n\n let danmus = []\n const target = danmuku || this.option.danmuku\n\n try {\n if (typeof target === 'function') {\n danmus = await target() // 异步函数获取\n }\n else if (target instanceof Promise) {\n danmus = await target // 从 Promise 对象获取\n }\n else if (typeof target === 'string') {\n danmus = await bilibiliDanmuParseFromUrl(target) // 从B站xml链接解析\n }\n else if (Array.isArray(target)) {\n danmus = target // 直接传入数组\n }\n\n errorHandle(Array.isArray(danmus), 'Danmuku need return an array as result')\n\n // 假如没有传入弹幕参数,则清空弹幕,否则追加弹幕\n if (danmuku === undefined) {\n this.reset() // 重置弹幕\n this.queue = [] // 清空弹幕队列\n this.states = { wait: [], ready: [], emit: [], stop: [] } // 清空弹幕状态池\n this.$refs = [] // 清空弹幕DOM节点池\n this.$danmuku.textContent = '' // 清空弹幕层\n }\n\n // 逐个验证原始弹幕并转换到弹幕队列\n for (let index = 0; index < danmus.length; index++) {\n const danmu = danmus[index]\n await this.emit(danmu)\n }\n\n this.art.emit('artplayerPluginDanmuku:loaded', this.queue)\n }\n catch (error) {\n this.art.emit('artplayerPluginDanmuku:error', error)\n throw error\n }\n\n return this\n }\n\n // 把原始弹幕转换到弹幕队列\n async emit(danmu) {\n const { clamp } = this.utils\n\n this.validator(danmu, {\n id: '?string', // 弹幕唯一标识\n text: 'string', // 弹幕文本\n mode: '?number', // 弹幕模式: 0: 滚动,1: 顶部,2: 底部\n color: '?string', // 弹幕颜色\n time: '?number', // 弹幕时间\n border: '?boolean', // 弹幕是否有边框\n style: '?object', // 弹幕额外样式\n })\n\n // 弹幕文本为空则直接忽略\n if (!danmu.text.trim())\n return this\n\n // 设置弹幕时间,如果没有则默认为当前时间加 0.5 秒\n if (danmu.time) {\n danmu.time = clamp(danmu.time, 0, Infinity)\n }\n else {\n danmu.time = this.art.currentTime + 0.5\n }\n\n // 设置弹幕模式,如果没有则默认为全局配置\n if (danmu.mode === undefined) {\n danmu.mode = this.option.mode\n }\n\n // 设置弹幕单独样式,如果没有则默认为空对象\n if (danmu.style === undefined) {\n danmu.style = {}\n }\n\n // 设置弹幕颜色,如果没有则默认为全局配置\n if (danmu.color === undefined) {\n danmu.color = this.option.color\n }\n\n // 弹幕模式只能是 0, 1, 2\n if (![0, 1, 2].includes(danmu.mode))\n return this\n\n // 自定义弹幕过滤函数\n if (!this.option.filter(danmu))\n return this\n\n // 添加自定义属性\n const item = {\n ...danmu,\n $state: 'wait', // 弹幕初始状态\n $index: this.index++, // 弹幕索引\n $ref: null, // 弹幕 DOM 节点\n $restTime: 0, // 弹幕剩余时间\n $lastStartTime: 0, // 弹幕上次开始时间\n }\n\n // 转换为wait状态\n this.setState(item, 'wait')\n\n // 添加到实际弹幕队列\n this.queue.push(item)\n\n // 弹幕有四个状态:\n // - wait: 弹幕还未开始显示,没有被添加到 DOM 中\n // - ready: 弹幕准备好显示,没有被添加到 DOM 中\n // - emit: 弹幕正在显示,已经被添加到 DOM 中\n // - stop: 弹幕正在停止显示,已经被添加到 DOM 中\n\n return this\n }\n\n // 动态配置\n config(option, isInit = false) {\n const { clamp } = this.utils\n const { $controlsCenter } = this.art.template\n\n // 判断配置项是否有变化\n const changed = Object.keys(option).some(\n key => JSON.stringify(this.option[key]) !== JSON.stringify(option[key]),\n )\n\n // 没有变化则直接返回\n if (!changed && !isInit)\n return this\n\n // 更新配置项\n this.option = Object.assign({}, Danmuku.option, this.option, option)\n this.validator(this.option, Danmuku.scheme)\n\n this.option.mode = clamp(this.option.mode, 0, 2)\n this.option.speed = clamp(this.option.speed, 1, 10)\n this.option.opacity = clamp(this.option.opacity, 0, 1)\n this.option.lockTime = clamp(this.option.lockTime, 1, 60)\n this.option.maxLength = clamp(this.option.maxLength, 1, 1000)\n this.option.mount = this.option.mount || $controlsCenter\n\n // 动态配置有字体大小,需要重新渲染\n if (option.fontSize) {\n this.reset()\n }\n\n // 通过配置项控制弹幕的显示和隐藏\n if (this.option.visible) {\n this.show()\n }\n else {\n this.hide()\n }\n\n this.art.emit('artplayerPluginDanmuku:config', this.option)\n\n return this\n }\n\n // 计算DOM的left值,受到旋屏影响\n getLeft($ref) {\n const rect = $ref.getBoundingClientRect()\n return this.isRotate ? rect.top : rect.left\n }\n\n // 复杂运算交给 Web Worker 处理\n postMessage(message = {}) {\n return new Promise((resolve) => {\n message.id = Date.now() // 生成唯一标识\n this.worker.postMessage(message)\n this.worker.onmessage = (event) => {\n const { data } = event\n // 判断是否是当前的消息\n if (data.id === message.id) {\n resolve(data)\n }\n }\n })\n }\n\n // 根据状态获取弹幕\n filter(state, callback) {\n const danmus = this.states[state] || []\n for (let index = 0; index < danmus.length; index++) {\n callback(danmus[index])\n }\n return danmus\n }\n\n // 设置弹幕状态\n setState(danmu, state) {\n // 从原状态池中删除\n this.states[danmu.$state] = this.states[danmu.$state].filter(item => item !== danmu)\n\n // 设置新状态\n danmu.$state = state\n\n // 设置DOM节点状态\n if (danmu.$ref) {\n danmu.$ref.dataset.state = state\n }\n\n // 添加到新状态池中\n this.states[state].push(danmu)\n }\n\n // 重置弹幕到wait状态,回收弹幕DOM节点\n makeWait(danmu) {\n this.setState(danmu, 'wait')\n if (danmu.$ref) {\n danmu.$ref.style.cssText = Danmuku.cssText\n danmu.$ref.style.visibility = 'hidden'\n danmu.$ref.style.marginLeft = '0px'\n danmu.$ref.style.transform = 'translateX(0px)'\n danmu.$ref.style.transition = 'transform 0s linear 0s'\n this.$refs.push(danmu.$ref)\n danmu.$ref = null\n }\n }\n\n // 实时更新弹幕\n update() {\n const { setStyles } = this.utils\n\n this.timer = window.requestAnimationFrame(async () => {\n if (this.art.playing && !this.isHide) {\n // 实时计算弹幕的剩余显示时间\n this.filter('emit', (danmu) => {\n const emitTime = (Date.now() - danmu.$lastStartTime) / 1000\n danmu.$restTime -= emitTime\n danmu.$lastStartTime = Date.now()\n // 超过时间即重置弹幕\n if (danmu.$restTime <= 0) {\n this.makeWait(danmu)\n }\n })\n\n // 获取准备好发送的弹幕,可能包含ready和wait状态的弹幕\n const readys = this.readys\n\n for (let index = 0; index < readys.length; index++) {\n const danmu = readys[index]\n\n // 弹幕发送前的过滤器\n const state = await this.option.beforeVisible(danmu)\n\n if (state) {\n const { clientWidth, clientHeight } = this.$player\n danmu.$ref = this.$ref // 获取弹幕DOM节点\n danmu.$ref.textContent = danmu.text // 设置弹幕文本\n\n // 提前添加到弹幕层中,用于计算top值\n this.$danmuku.appendChild(danmu.$ref)\n\n // 设置初始弹幕样式\n danmu.$ref.style.opacity = this.option.opacity\n danmu.$ref.style.fontSize = `${this.fontSize}px`\n danmu.$ref.style.color = danmu.color\n danmu.$ref.style.border = danmu.border ? `1px solid ${danmu.color}` : null\n danmu.$ref.style.backgroundColor = danmu.border ? 'rgb(0 0 0 / 50%)' : null\n\n // 设置单独弹幕样式\n setStyles(danmu.$ref, danmu.style)\n\n // 记录弹幕时间戳\n danmu.$lastStartTime = Date.now()\n\n // 计算弹幕剩余时间\n danmu.$restTime = this.speed\n\n // 计算弹幕滚动的距离\n const distance = clientWidth + danmu.$ref.clientWidth\n\n // 计算弹幕的top值\n const { result: top } = await this.postMessage({\n type: 'getDanmuTop',\n target: {\n mode: danmu.mode,\n height: danmu.$ref.clientHeight,\n speed: distance / danmu.$restTime,\n }, // 当前弹幕信息\n visibles: this.visibles, // 可见的弹幕的数据\n antiOverlap: this.option.antiOverlap,\n clientWidth,\n clientHeight,\n marginBottom: this.marginBottom,\n marginTop: this.marginTop,\n })\n\n if (danmu.$ref) {\n if (!this.isStop && top !== undefined) {\n this.setState(danmu, 'emit') // 转换为emit状态\n danmu.$ref.style.top = `${top}px`\n danmu.$ref.style.visibility = 'visible'\n danmu.$ref.dataset.mode = danmu.mode // CSS控制模式的显示和隐藏\n danmu.$ref.dataset.id = danmu.id || '' // 用于悬停的唯一标识\n\n switch (danmu.mode) {\n // 滚动的弹幕\n case 0: {\n danmu.$ref.style.left = `${clientWidth}px`\n danmu.$ref.style.marginLeft = '0px'\n danmu.$ref.style.transform = `translateX(${-distance}px)`\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`\n break\n }\n case 1:\n // falls through\n case 2:\n danmu.$ref.style.left = '50%'\n danmu.$ref.style.marginLeft = `-${danmu.$ref.clientWidth / 2}px`\n break\n default:\n break\n }\n\n this.art.emit('artplayerPluginDanmuku:visible', danmu)\n }\n else {\n // 假如弹幕已经停止或者没有 top 值,则重置弹幕为ready状态,回收弹幕DOM节点,等待下次发送\n this.setState(danmu, 'ready')\n this.$refs.push(danmu.$ref)\n danmu.$ref = null\n }\n }\n }\n }\n }\n\n // 递归调用\n if (!this.isStop) {\n this.update()\n }\n })\n return this\n }\n\n // 重置正在显示的弹幕: stop/emit 状态的弹幕\n resize() {\n const { clientWidth } = this.$player\n\n this.filter('stop', (danmu) => {\n switch (danmu.mode) {\n // 滚动的弹幕\n case 0:\n danmu.$ref.style.left = `${clientWidth}px`\n break\n default:\n break\n }\n })\n\n this.filter('emit', (danmu) => {\n danmu.$lastStartTime = Date.now()\n switch (danmu.mode) {\n // 滚动的弹幕\n case 0: {\n const distance = clientWidth + danmu.$ref.clientWidth\n danmu.$ref.style.left = `${clientWidth}px`\n danmu.$ref.style.transform = `translateX(${-distance}px)`\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`\n break\n }\n default:\n break\n }\n })\n }\n\n // 继续弹幕\n continue() {\n const { clientWidth } = this.$player\n this.filter('stop', (danmu) => {\n this.setState(danmu, 'emit') // 转换为emit状态\n danmu.$lastStartTime = Date.now()\n switch (danmu.mode) {\n // 继续滚动的弹幕\n case 0: {\n const distance = clientWidth + danmu.$ref.clientWidth\n danmu.$ref.style.transform = `translateX(${-distance}px)`\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`\n break\n }\n default:\n break\n }\n })\n\n return this\n }\n\n // 暂停弹幕\n suspend() {\n const { clientWidth } = this.$player\n this.filter('emit', (danmu) => {\n this.setState(danmu, 'stop') // 转换为stop状态\n switch (danmu.mode) {\n // 停止滚动的弹幕\n case 0: {\n const translateX = clientWidth - (this.getLeft(danmu.$ref) - this.getLeft(this.$player))\n danmu.$ref.style.transform = `translateX(${-translateX}px)`\n danmu.$ref.style.transition = 'transform 0s linear 0s'\n break\n }\n default:\n break\n }\n })\n\n return this\n }\n\n stop() {\n this.isStop = true\n this.suspend()\n window.cancelAnimationFrame(this.timer)\n this.art.emit('artplayerPluginDanmuku:stop')\n return this\n }\n\n start() {\n this.isStop = false\n this.continue()\n this.update()\n this.art.emit('artplayerPluginDanmuku:start')\n return this\n }\n\n reset() {\n this.queue.forEach(danmu => this.makeWait(danmu))\n this.art.emit('artplayerPluginDanmuku:reset')\n return this\n }\n\n show() {\n this.isHide = false\n this.$danmuku.style.opacity = 1\n this.option.visible = true\n this.art.emit('artplayerPluginDanmuku:show')\n return this\n }\n\n hide() {\n this.isHide = true\n this.$danmuku.style.opacity = 0\n this.option.visible = false\n this.art.emit('artplayerPluginDanmuku:hide')\n return this\n }\n\n destroy() {\n this.stop()\n this.worker.terminate()\n this.art.off('video:play', this.start)\n this.art.off('video:playing', this.start)\n this.art.off('video:pause', this.stop)\n this.art.off('video:waiting', this.stop)\n this.art.off('resize', this.reset)\n this.art.off('destroy', this.destroy)\n this.art.emit('artplayerPluginDanmuku:destroy')\n }\n}\n","module.exports = \"dd7efcb5fd87c1c0\";","function getMode(key) {\n switch (key) {\n case 1:\n case 2:\n case 3:\n return 0\n case 4:\n return 2\n case 5:\n return 1\n default:\n return 0\n }\n}\n\nfunction bilibiliDanmuParseFromXml(xmlString) {\n if (typeof xmlString !== 'string')\n return []\n const reg = /]*?p=\"(?

[^\"]+)\"[^>]*>(?.*?)<\\/d>/gs\n const matches = xmlString.matchAll(reg)\n return Array.from(matches)\n .map((match) => {\n const attr = match.groups.p.split(',')\n if (attr.length >= 8) {\n const text = match.groups.text\n .trim()\n .replaceAll('"', '\"')\n .replaceAll(''', '\\'')\n .replaceAll('<', '<')\n .replaceAll('>', '>')\n .replaceAll('&', '&')\n\n return {\n text,\n time: Number(attr[0]),\n mode: getMode(Number(attr[1])),\n fontSize: Number(attr[2]),\n color: `#${Number(attr[3]).toString(16)}`,\n timestamp: Number(attr[4]),\n pool: Number(attr[5]),\n userID: attr[6],\n rowID: Number(attr[7]),\n }\n }\n else {\n return null\n }\n })\n .filter(Boolean)\n}\n\nfunction onmessage({ data }) {\n const { xml, id } = data\n if (!id || !xml)\n return\n const danmus = bilibiliDanmuParseFromXml(xml)\n globalThis.postMessage({ danmus, id })\n}\n\nfunction createWorker() {\n const workerText = `\n ${getMode.toString()}\n ${bilibiliDanmuParseFromXml.toString()}\n onmessage = ${onmessage.toString()}\n `\n const blob = new Blob([workerText], { type: 'application/javascript' })\n return new Worker(URL.createObjectURL(blob))\n}\n\nexport function bilibiliDanmuParseFromUrl(url) {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve) => {\n const res = await fetch(url)\n const xml = await res.text()\n\n try {\n const worker = createWorker()\n worker.onmessage = (event) => {\n const { danmus, id } = event.data\n if (!id || !danmus)\n return\n resolve(danmus)\n worker.terminate()\n }\n worker.postMessage({ xml, id: Date.now() })\n }\n catch (error) {\n console.error('Error parsing Bilibili Danmu:', error)\n const danmus = bilibiliDanmuParseFromXml(xml)\n resolve(danmus)\n }\n })\n}\n","exports.interopDefault = function (a) {\n return a && a.__esModule ? a : {default: a};\n};\n\nexports.defineInteropFlag = function (a) {\n Object.defineProperty(a, '__esModule', {value: true});\n};\n\nexports.exportAll = function (source, dest) {\n Object.keys(source).forEach(function (key) {\n if (\n key === 'default' ||\n key === '__esModule' ||\n Object.prototype.hasOwnProperty.call(dest, key)\n ) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function () {\n return source[key];\n },\n });\n });\n\n return dest;\n};\n\nexports.export = function (dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get,\n });\n};\n","const lib = {\n map(value, inMin, inMax, outMin, outMax) {\n return ((value - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin\n },\n range(start, end, tick) {\n const s = Math.round(start / tick) * tick\n return Array.from(\n {\n length: Math.floor((end - start) / tick),\n },\n (v, k) => {\n return k * tick + s\n },\n )\n },\n}\n\nfunction line(pointA, pointB) {\n const lengthX = pointB[0] - pointA[0]\n const lengthY = pointB[1] - pointA[1]\n return {\n length: Math.sqrt(lengthX ** 2 + lengthY ** 2),\n angle: Math.atan2(lengthY, lengthX),\n }\n}\n\nexport default function heatmap(art, danmuku, option) {\n const { query } = art.constructor.utils\n\n art.controls.add({\n name: 'heatmap',\n position: 'top',\n html: '',\n style: {\n position: 'absolute',\n top: '-100px',\n left: '0px',\n right: '0px',\n height: '100px',\n width: '100%',\n pointerEvents: 'none',\n },\n mounted($heatmap) {\n let $start = null\n let $stop = null\n\n function update(arg = []) {\n $start = null\n $stop = null\n $heatmap.innerHTML = ''\n\n if (!art.duration || art.option.isLive)\n return\n\n const svg = {\n w: $heatmap.offsetWidth,\n h: $heatmap.offsetHeight,\n }\n\n const options = {\n xMin: 0,\n xMax: svg.w,\n yMin: 0,\n yMax: 128,\n scale: 0.25,\n opacity: 0.2,\n minHeight: Math.floor(svg.h * 0.05),\n sampling: Math.floor(svg.w / 100),\n smoothing: 0.2,\n flattening: 0.2,\n }\n\n if (typeof option === 'object') {\n Object.assign(options, option)\n }\n\n let points = []\n\n if (Array.isArray(arg) && arg.length) {\n points = [...arg]\n }\n else {\n const gap = art.duration / svg.w\n for (let x = 0; x <= svg.w; x += options.sampling) {\n const y = danmuku.queue.filter(\n ({ time }) => time > x * gap && time <= (x + options.sampling) * gap,\n ).length\n points.push([x, y])\n }\n }\n\n if (points.length === 0)\n return\n\n const lastPoint = points[points.length - 1]\n const lastX = lastPoint[0]\n const lastY = lastPoint[1]\n if (lastX !== svg.w) {\n points.push([svg.w, lastY])\n }\n\n const yPoints = points.map(point => point[1])\n const yMin = Math.min(...yPoints)\n const yMax = Math.max(...yPoints)\n const yMid = (yMin + yMax) / 2\n\n for (let i = 0; i < points.length; i++) {\n const point = points[i]\n const y = point[1]\n point[1] = y * (y > yMid ? 1 + options.scale : 1 - options.scale) + options.minHeight\n }\n\n const controlPoint = (current, previous, next, reverse) => {\n const p = previous || current\n const n = next || current\n const o = line(p, n)\n const flat = lib.map(Math.cos(o.angle) * options.flattening, 0, 1, 1, 0)\n const angle = o.angle * flat + (reverse ? Math.PI : 0)\n const length = o.length * options.smoothing\n const x = current[0] + Math.cos(angle) * length\n const y = current[1] + Math.sin(angle) * length\n return [x, y]\n }\n\n const bezierCommand = (point, i, a) => {\n const cps = controlPoint(a[i - 1], a[i - 2], point)\n const cpe = controlPoint(point, a[i - 1], a[i + 1], true)\n const close = i === a.length - 1 ? ' z' : ''\n return `C ${cps[0]},${cps[1]} ${cpe[0]},${cpe[1]} ${point[0]},${point[1]}${close}`\n }\n\n const pointsPositions = points.map((e) => {\n const x = lib.map(e[0], options.xMin, options.xMax, 0, svg.w)\n const y = lib.map(e[1], options.yMin, options.yMax, svg.h, 0)\n return [x, y]\n })\n\n const pathD = pointsPositions.reduce(\n (acc, e, i, a) =>\n i === 0\n ? `M ${a[a.length - 1][0]},${svg.h} L ${e[0]},${svg.h} L ${e[0]},${e[1]}`\n : `${acc} ${bezierCommand(e, i, a)}`,\n '',\n )\n\n $heatmap.innerHTML = `\n \n \n \n \n \n \n \n \n \n \n \n `\n\n $start = query('#heatmap-start', $heatmap)\n $stop = query('#heatmap-stop', $heatmap)\n $start.setAttribute('offset', `${art.played * 100}%`)\n $stop.setAttribute('offset', `${art.played * 100}%`)\n }\n\n art.on('video:timeupdate', () => {\n if ($start && $stop) {\n $start.setAttribute('offset', `${art.played * 100}%`)\n $stop.setAttribute('offset', `${art.played * 100}%`)\n }\n })\n\n art.on('setBar', (type, percentage) => {\n if ($start && $stop && type === 'played') {\n $start.setAttribute('offset', `${percentage * 100}%`)\n $stop.setAttribute('offset', `${percentage * 100}%`)\n }\n })\n\n art.on('ready', () => update())\n art.on('resize', () => update())\n art.on('artplayerPluginDanmuku:loaded', () => update())\n art.on('artplayerPluginDanmuku:points', points => update(points))\n },\n })\n}\n","import $check_off from 'bundle-text:./img/check_off.svg'\nimport $check_on from 'bundle-text:./img/check_on.svg'\nimport $config from 'bundle-text:./img/config.svg'\nimport $mode_0_off from 'bundle-text:./img/mode_0_off.svg'\nimport $mode_0_on from 'bundle-text:./img/mode_0_on.svg'\nimport $mode_1_off from 'bundle-text:./img/mode_1_off.svg'\nimport $mode_1_on from 'bundle-text:./img/mode_1_on.svg'\nimport $mode_2_off from 'bundle-text:./img/mode_2_off.svg'\nimport $mode_2_on from 'bundle-text:./img/mode_2_on.svg'\nimport $off from 'bundle-text:./img/off.svg'\nimport $on from 'bundle-text:./img/on.svg'\nimport $style from 'bundle-text:./img/style.svg'\nimport style from 'bundle-text:./style.less'\n\nexport default class Setting {\n constructor(art, danmuku) {\n this.art = art\n this.danmuku = danmuku\n this.utils = art.constructor.utils\n\n const { setStyle } = this.utils\n const { $controlsCenter } = art.template\n setStyle($controlsCenter, 'display', 'flex')\n\n this.template = {\n $controlsCenter,\n $mount: $controlsCenter,\n $danmuku: null,\n $toggle: null,\n $config: null,\n $configPanel: null,\n $configModes: null,\n $style: null,\n $stylePanel: null,\n $styleModes: null,\n $colors: null,\n $opacitySlider: null,\n $opacityValue: null,\n $marginSlider: null,\n $marginValue: null,\n $fontSizeSlider: null,\n $fontSizeValue: null,\n $speedSlider: null,\n $speedValue: null,\n $input: null,\n $send: null,\n }\n\n this.slider = {\n opacity: null,\n margin: null,\n fontSize: null,\n speed: null,\n }\n\n this.emitting = false\n this.isLock = false\n this.timer = null\n\n this.createTemplate()\n this.createSliders()\n this.createEvents()\n\n this.mount(this.option.mount)\n\n art.on('resize', () => this.resize())\n art.on('fullscreen', state => this.onFullscreen(state))\n art.on('fullscreenWeb', state => this.onFullscreen(state))\n\n art.proxy(this.template.$config, 'mouseenter', () => {\n this.onMouseEnter({\n $control: this.template.$config,\n $panel: this.template.$configPanel,\n })\n })\n\n art.proxy(this.template.$style, 'mouseenter', () => {\n this.onMouseEnter({\n $control: this.template.$style,\n $panel: this.template.$stylePanel,\n })\n })\n }\n\n static get icons() {\n return {\n $on,\n $off,\n $config,\n $style,\n $mode_0_off,\n $mode_0_on,\n $mode_1_off,\n $mode_1_on,\n $mode_2_off,\n $mode_2_on,\n $check_on,\n $check_off,\n }\n }\n\n get option() {\n return this.danmuku.option\n }\n\n get outside() {\n return this.template.$mount !== this.template.$controlsCenter\n }\n\n get TEMPLATE() {\n const { option } = this\n return `\n

\n ${$on}${$off}\n
\n
\n ${$config}\n
\n
\n
\n 按类型屏蔽\n
\n
\n ${$mode_0_off}${$mode_0_on}\n
滚动
\n
\n
\n ${$mode_1_off}${$mode_1_on}\n
顶部
\n
\n
\n ${$mode_2_off}${$mode_2_on}\n
底部
\n
\n
\n
\n
\n
\n ${$check_on}${$check_off}\n 防止弹幕重叠\n
\n
\n ${$check_on}${$check_off}\n 同步视频速度\n
\n
\n
\n 不透明度\n
\n
未知
\n
\n
\n 显示区域\n
\n
未知
\n
\n
\n 弹幕字号\n
\n
未知
\n
\n
\n 弹幕速度\n
\n
未知
\n
\n
\n
\n
\n
\n
\n ${$style}\n
\n
\n
\n 模式\n
\n
\n ${$mode_0_on}\n
滚动
\n
\n
\n ${$mode_1_on}\n
顶部
\n
\n
\n ${$mode_2_on}\n
底部
\n
\n
\n
\n
\n 颜色\n
\n ${this.COLOR.map(color => `
`).join('')}\n
\n
\n
\n
\n
\n \n
发送
\n
\n `\n }\n\n get OPACITY() {\n return {\n min: 0,\n max: 100,\n steps: [],\n ...this.option.OPACITY,\n }\n }\n\n get FONT_SIZE() {\n return {\n min: 12,\n max: 120,\n steps: [],\n ...this.option.FONT_SIZE,\n }\n }\n\n get MARGIN() {\n return {\n min: 0,\n max: 3,\n steps: [\n {\n name: '1/4',\n value: [10, '75%'],\n },\n {\n name: '半屏',\n value: [10, '50%'],\n },\n {\n name: '3/4',\n value: [10, '25%'],\n },\n {\n name: '满屏',\n value: [10, 10],\n },\n ],\n ...this.option.MARGIN,\n }\n }\n\n get SPEED() {\n return {\n min: 0,\n max: 4,\n steps: [\n {\n name: '极慢',\n value: 10,\n },\n {\n name: '较慢',\n value: 7.5,\n hide: true,\n },\n {\n name: '适中',\n value: 5,\n },\n {\n name: '较快',\n value: 2.5,\n hide: true,\n },\n {\n name: '极快',\n value: 1,\n },\n ],\n ...this.option.SPEED,\n }\n }\n\n get COLOR() {\n return this.option.COLOR.length\n ? this.option.COLOR\n : [\n '#FE0302',\n '#FF7204',\n '#FFAA02',\n '#FFD302',\n '#FFFF00',\n '#A0EE00',\n '#00CD00',\n '#019899',\n '#4266BE',\n '#89D5FF',\n '#CC0273',\n '#222222',\n '#9B9B9B',\n '#FFFFFF',\n ]\n }\n\n query(selector) {\n const { query } = this.utils\n const { $danmuku } = this.template\n return query(selector, $danmuku)\n }\n\n append(el, target) {\n const { append } = this.utils\n const children = [...el.children]\n if (children.includes(target))\n return\n append(el, target)\n }\n\n setData(key, value) {\n const { $player } = this.art.template\n const { $mount } = this.template\n $player.dataset[key] = value\n if (this.outside) {\n $mount.dataset[key] = value\n }\n }\n\n createTemplate() {\n const { createElement, tooltip } = this.utils\n\n const $danmuku = createElement('div')\n $danmuku.className = 'artplayer-plugin-danmuku'\n $danmuku.innerHTML = this.TEMPLATE\n\n this.template.$danmuku = $danmuku\n this.template.$toggle = this.query('.apd-toggle')\n this.template.$config = this.query('.apd-config')\n this.template.$configPanel = this.query('.apd-config-panel')\n this.template.$configModes = this.query('.apd-config-mode .apd-modes')\n this.template.$style = this.query('.apd-style')\n this.template.$stylePanel = this.query('.apd-style-panel')\n this.template.$styleModes = this.query('.apd-style-mode .apd-modes')\n this.template.$colors = this.query('.apd-colors')\n this.template.$antiOverlap = this.query('.apd-anti-overlap')\n this.template.$syncVideo = this.query('.apd-sync-video')\n this.template.$opacitySlider = this.query('.apd-config-opacity .apd-slider')\n this.template.$opacityValue = this.query('.apd-config-opacity .apd-value')\n this.template.$marginSlider = this.query('.apd-config-margin .apd-slider')\n this.template.$marginValue = this.query('.apd-config-margin .apd-value')\n this.template.$fontSizeSlider = this.query('.apd-config-fontSize .apd-slider')\n this.template.$fontSizeValue = this.query('.apd-config-fontSize .apd-value')\n this.template.$speedSlider = this.query('.apd-config-speed .apd-slider')\n this.template.$speedValue = this.query('.apd-config-speed .apd-value')\n this.template.$input = this.query('.apd-input')\n this.template.$send = this.query('.apd-send')\n\n const { $toggle } = this.template\n\n this.art.on('artplayerPluginDanmuku:show', () => {\n tooltip($toggle, '关闭弹幕')\n })\n\n this.art.on('artplayerPluginDanmuku:hide', () => {\n tooltip($toggle, '打开弹幕')\n })\n }\n\n createEvents() {\n const { $toggle, $configModes, $styleModes, $colors, $antiOverlap, $syncVideo, $send, $input } = this.template\n\n this.art.proxy($toggle, 'click', () => {\n this.danmuku.config({\n visible: !this.option.visible,\n })\n this.reset()\n })\n\n this.art.proxy($configModes, 'click', (event) => {\n const $mode = event.target.closest('.apd-mode')\n if (!$mode)\n return\n const mode = Number($mode.dataset.mode)\n if (this.option.modes.includes(mode)) {\n this.danmuku.config({\n modes: this.option.modes.filter(m => m !== mode),\n })\n }\n else {\n this.danmuku.config({\n modes: [...this.option.modes, mode],\n })\n }\n this.reset()\n })\n\n this.art.proxy($antiOverlap, 'click', () => {\n this.danmuku.config({\n antiOverlap: !this.option.antiOverlap,\n })\n this.reset()\n })\n\n this.art.proxy($syncVideo, 'click', () => {\n this.danmuku.config({\n synchronousPlayback: !this.option.synchronousPlayback,\n })\n this.reset()\n })\n\n this.art.proxy($styleModes, 'click', (event) => {\n const $mode = event.target.closest('.apd-mode')\n if (!$mode)\n return\n const mode = Number($mode.dataset.mode)\n this.danmuku.config({\n mode,\n })\n this.reset()\n })\n\n this.art.proxy($colors, 'click', (event) => {\n const $color = event.target.closest('.apd-color')\n if (!$color)\n return\n this.danmuku.config({\n color: $color.dataset.color,\n })\n this.reset()\n })\n\n this.art.proxy($send, 'click', () => this.emit())\n\n this.art.proxy($input, 'keypress', (event) => {\n if (event.key === 'Enter') {\n event.preventDefault()\n this.emit()\n }\n })\n }\n\n createSliders() {\n this.slider.opacity = this.createSlider({\n ...this.OPACITY,\n container: this.template.$opacitySlider,\n findIndex: () => {\n return Math.round(this.option.opacity * 100)\n },\n onChange: (index) => {\n const { $opacityValue } = this.template\n $opacityValue.textContent = `${index}%`\n this.danmuku.config({\n opacity: index / 100,\n })\n },\n })\n\n this.slider.margin = this.createSlider({\n ...this.MARGIN,\n container: this.template.$marginSlider,\n findIndex: () => {\n return this.MARGIN.steps.findIndex(\n item => item.value[0] === this.option.margin[0] && item.value[1] === this.option.margin[1],\n )\n },\n onChange: (index) => {\n const margin = this.MARGIN.steps[index]\n if (!margin)\n return\n const { $marginValue } = this.template\n $marginValue.textContent = margin.name\n this.danmuku.config({\n margin: margin.value,\n })\n },\n })\n\n this.slider.fontSize = this.createSlider({\n ...this.FONT_SIZE,\n container: this.template.$fontSizeSlider,\n findIndex: () => {\n return this.danmuku.fontSize\n },\n onChange: (index) => {\n const { $fontSizeValue } = this.template\n $fontSizeValue.textContent = `${index}px`\n if (index === this.danmuku.fontSize)\n return\n this.danmuku.config({\n fontSize: index,\n })\n },\n })\n\n this.slider.speed = this.createSlider({\n ...this.SPEED,\n container: this.template.$speedSlider,\n findIndex: () => {\n return this.SPEED.steps.findIndex(item => item.value === this.option.speed)\n },\n onChange: (index) => {\n const speed = this.SPEED.steps[index]\n if (!speed)\n return\n const { $speedValue } = this.template\n $speedValue.textContent = speed.name\n this.danmuku.config({\n speed: speed.value,\n })\n },\n })\n }\n\n createSlider({ min, max, container, findIndex, onChange, steps = [] }) {\n const { query, clamp, setStyle } = this.utils\n\n setStyle(container, 'touch-action', 'none')\n\n container.innerHTML = `\n
\n
\n ${steps.map(() => `
`).join('')}\n
\n
\n
\n
\n
\n ${steps.map(step => (step.hide ? '' : `
${step.name}
`)).join('')}\n
\n `\n\n const $dot = query('.apd-slider-dot', container)\n const $progress = query('.apd-slider-progress', container)\n\n let isDroging = false\n\n function reset(index = findIndex()) {\n if (index < min || index > max)\n return\n const percentage = (index - min) / (max - min)\n $dot.style.left = `${percentage * 100}%`\n if (steps.length === 0) {\n $progress.style.width = $dot.style.left\n }\n onChange(index)\n }\n\n function updateLeft(event) {\n const { top, height, left, width } = container.getBoundingClientRect()\n if (this.art.isRotate) {\n const value = clamp(event.clientY - top, 0, height)\n const index = Math.round((value / height) * (max - min) + min)\n reset(index)\n }\n else {\n const value = clamp(event.clientX - left, 0, width)\n const index = Math.round((value / width) * (max - min) + min)\n reset(index)\n }\n }\n\n this.art.proxy(container, 'click', (event) => {\n updateLeft.call(this, event)\n })\n\n this.art.proxy(container, 'pointerdown', (event) => {\n isDroging = event.button === 0\n })\n\n this.art.proxy(document, 'pointermove', (event) => {\n if (isDroging) {\n updateLeft.call(this, event)\n }\n })\n\n this.art.proxy(document, 'pointerup', (event) => {\n if (isDroging) {\n isDroging = false\n updateLeft.call(this, event)\n }\n })\n\n return { reset }\n }\n\n onFullscreen(state) {\n const { $danmuku, $controlsCenter, $mount } = this.template\n if (this.outside) {\n if (state) {\n this.append($controlsCenter, $danmuku)\n }\n else {\n this.append($mount, $danmuku)\n }\n }\n else {\n this.append($controlsCenter, $danmuku)\n }\n }\n\n onMouseEnter({ $control, $panel }) {\n const { $player } = this.art.template\n const controlRect = $control.getBoundingClientRect()\n const panelRect = $panel.getBoundingClientRect()\n const playerRect = $player.getBoundingClientRect()\n\n const half = panelRect.width / 2 - controlRect.width / 2\n const left = playerRect.left - (controlRect.left - half)\n const right = controlRect.right + half - playerRect.right\n\n if (left > 0) {\n $panel.style.left = `${-half + left}px`\n }\n else if (right > 0) {\n $panel.style.left = `${-half - right}px`\n }\n else {\n $panel.style.left = `${-half}px`\n }\n }\n\n async emit() {\n const { $input } = this.template\n\n const text = $input.value.trim()\n if (!text.length)\n return\n if (this.isLock)\n return\n if (this.emitting)\n return\n\n const danmu = {\n text,\n mode: this.option.mode,\n color: this.option.color,\n time: this.art.currentTime,\n }\n\n try {\n this.emitting = true\n const state = await this.option.beforeEmit(danmu)\n this.emitting = false\n\n if (state !== true)\n return\n\n danmu.border = true\n delete danmu.time\n this.danmuku.emit(danmu)\n $input.value = ''\n\n this.lock()\n }\n catch (error) {\n console.error('Error emitting danmuku:', error)\n this.emitting = false\n }\n }\n\n lock() {\n const { addClass } = this.utils\n const { $send } = this.template\n\n this.isLock = true\n let time = this.option.lockTime\n $send.textContent = time\n addClass($send, 'apd-lock')\n\n const loop = () => {\n this.timer = setTimeout(() => {\n if (time === 0) {\n this.unlock()\n }\n else {\n time -= 1\n $send.textContent = time\n loop()\n }\n }, 1000)\n }\n\n loop()\n }\n\n unlock() {\n const { removeClass } = this.utils\n const { $send } = this.template\n clearTimeout(this.timer)\n this.isLock = false\n $send.textContent = '发送'\n removeClass($send, 'apd-lock')\n }\n\n resize() {\n if (this.outside)\n return\n if (this.art.fullscreen)\n return\n if (this.art.fullscreenWeb)\n return\n const { $player, $controlsCenter } = this.art.template\n const { $danmuku } = this.template\n if (this.art.width < this.option.width) {\n this.append($player, $danmuku)\n }\n else {\n this.append($controlsCenter, $danmuku)\n }\n }\n\n reset() {\n const { inverseClass, tooltip } = this.utils\n const { $toggle, $colors } = this.template\n\n this.slider.opacity.reset()\n this.slider.margin.reset()\n this.slider.fontSize.reset()\n this.slider.speed.reset()\n\n this.setData('danmukuVisible', this.option.visible)\n this.setData('danmukuMode', this.option.mode)\n this.setData('danmukuColor', this.option.color)\n this.setData('danmukuMode0', this.option.modes.includes(0))\n this.setData('danmukuMode1', this.option.modes.includes(1))\n this.setData('danmukuMode2', this.option.modes.includes(2))\n this.setData('danmukuAntiOverlap', this.option.antiOverlap)\n this.setData('danmukuSyncVideo', this.option.synchronousPlayback)\n this.setData('danmukuTheme', this.option.theme)\n this.setData('danmukuEmitter', this.option.emitter)\n\n const colors = $colors.children\n const $color = Array.from(colors).find(item => item.dataset.color === this.option.color.toUpperCase())\n $color && inverseClass($color, 'apd-active')\n\n tooltip($toggle, this.option.visible ? '关闭弹幕' : '打开弹幕')\n\n this.resize()\n }\n\n mount(target) {\n const { errorHandle } = this.utils\n const $el = typeof target === 'string' ? document.querySelector(target) : target\n errorHandle($el, `Can not find the mount point: ${target}`)\n this.append($el, this.template.$danmuku)\n this.template.$mount = $el\n this.reset()\n }\n}\n\nif (typeof document !== 'undefined') {\n const id = 'artplayer-plugin-danmuku'\n let $style = document.getElementById(id)\n if (!$style) {\n $style = document.createElement('style')\n $style.id = id\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => {\n document.head.appendChild($style)\n })\n }\n else {\n (document.head || document.documentElement).appendChild($style)\n }\n }\n $style.textContent = style\n}\n","module.exports = \"0616b3f5e6434b38\";","module.exports = \"8e2849d281974e34\";","module.exports = \"49c14b4dbf213408\";","module.exports = \"a0f690bca27acdee\";","module.exports = \"70b07d4e4796c39f\";","module.exports = \"bffb346eb331a03f\";","module.exports = \"ade441db0e7be833\";","module.exports = \"8acc265c0fe9e947\";","module.exports = \"d374f135d6d7b8db\";","module.exports = \"4e92064d88d9e604\";","module.exports = \"c6881a3522f2fe2a\";","module.exports = \"5050154cc04e750f\";","module.exports = \"95fd45dd2fe5c5a5\";"],"names":["modules","entry","mainEntry","parcelRequireName","externals","distDir","publicUrl","devServer","globalObject","globalThis","self","window","global","previousRequire","importMap","i","cache","nodeRequire","module","require","bind","newRequire","name","jumped","currentRequire","err","Error","code","localRequire","resolve","x","id","Module","call","exports","res","isParcelRequire","moduleName","bundle","parent","register","Object","defineProperty","get","length","mainExports","define","amd","__globalThis","parcelHelpers","defineInteropFlag","export","artplayerPluginDanmuku","_danmuku","_danmukuDefault","interopDefault","_heatmap","_heatmapDefault","_setting","_settingDefault","option","art","danmuku","default","setting","heatmap","emit","load","config","hide","show","reset","mount","isHide","isStop","icons","_worker","_workerDefault","_bilibili","Danmuku","constructor","template","utils","validator","$danmuku","$player","queue","$refs","timer","index","states","wait","ready","stop","blob","Blob","replace","type","worker","Worker","URL","createObjectURL","start","resize","destroy","on","speed","margin","opacity","color","mode","modes","fontSize","antiOverlap","synchronousPlayback","undefined","width","points","filter","beforeEmit","beforeVisible","visible","emitter","maxLength","lockTime","theme","OPACITY","FONT_SIZE","MARGIN","SPEED","COLOR","scheme","cssText","isRotate","plugins","autoOrientation","state","marginTop","clamp","value","clientHeight","endsWith","Number","parseFloat","marginBottom","Math","round","$ref","pop","document","createElement","style","dataset","className","readys","currentTime","result","danmu","push","time","visibles","clientWidth","clientLeft","getLeft","top","offsetTop","left","height","distance","$restTime","right","playbackRate","errorHandle","danmus","target","Promise","bilibiliDanmuParseFromUrl","Array","isArray","textContent","error","text","border","trim","Infinity","includes","item","$state","$index","$lastStartTime","setState","isInit","$controlsCenter","keys","some","key","JSON","stringify","assign","rect","getBoundingClientRect","postMessage","message","Date","now","onmessage","event","data","callback","makeWait","visibility","marginLeft","transform","transition","update","setStyles","requestAnimationFrame","playing","emitTime","appendChild","backgroundColor","continue","suspend","translateX","cancelAnimationFrame","forEach","terminate","off","getMode","bilibiliDanmuParseFromXml","xmlString","from","matchAll","map","match","attr","groups","p","split","replaceAll","toString","timestamp","pool","userID","rowID","Boolean","xml","url","fetch","createWorker","console","a","__esModule","exportAll","source","dest","prototype","hasOwnProperty","enumerable","destName","lib","inMin","inMax","outMin","outMax","range","end","tick","s","floor","v","k","query","controls","add","position","html","pointerEvents","mounted","$heatmap","$start","$stop","arg","innerHTML","duration","isLive","svg","w","offsetWidth","h","offsetHeight","options","xMin","xMax","yMin","yMax","scale","minHeight","sampling","smoothing","flattening","gap","y","lastPoint","lastX","lastY","yPoints","point","yMid","min","max","controlPoint","current","previous","next","reverse","o","line","pointA","pointB","lengthX","lengthY","sqrt","angle","atan2","flat","cos","PI","sin","pathD","pointsPositions","e","reduce","acc","bezierCommand","cps","cpe","close","setAttribute","played","percentage","_checkOffSvg","_checkOffSvgDefault","_checkOnSvg","_checkOnSvgDefault","_configSvg","_configSvgDefault","_mode0OffSvg","_mode0OffSvgDefault","_mode0OnSvg","_mode0OnSvgDefault","_mode1OffSvg","_mode1OffSvgDefault","_mode1OnSvg","_mode1OnSvgDefault","_mode2OffSvg","_mode2OffSvgDefault","_mode2OnSvg","_mode2OnSvgDefault","_offSvg","_offSvgDefault","_onSvg","_onSvgDefault","_styleSvg","_styleSvgDefault","_styleLess","_styleLessDefault","setStyle","$mount","$toggle","$config","$configPanel","$configModes","$style","$stylePanel","$styleModes","$colors","$opacitySlider","$opacityValue","$marginSlider","$marginValue","$fontSizeSlider","$fontSizeValue","$speedSlider","$speedValue","$input","$send","slider","emitting","isLock","createTemplate","createSliders","createEvents","onFullscreen","proxy","onMouseEnter","$control","$panel","$on","$off","$mode_0_off","$mode_0_on","$mode_1_off","$mode_1_on","$mode_2_off","$mode_2_on","$check_on","$check_off","outside","TEMPLATE","join","steps","selector","append","el","children","setData","tooltip","$antiOverlap","$syncVideo","$mode","closest","m","$color","preventDefault","createSlider","container","findIndex","onChange","step","$dot","$progress","isDroging","updateLeft","clientY","clientX","button","controlRect","panelRect","playerRect","half","lock","addClass","loop","setTimeout","unlock","removeClass","clearTimeout","fullscreen","fullscreenWeb","inverseClass","find","toUpperCase","$el","querySelector","getElementById","readyState","addEventListener","head","documentElement","_default","parcelRequire4dc0"],"version":3,"file":"index.js.map"} \ No newline at end of file diff --git a/packages/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.js b/packages/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.js index b2e93b46b..ecebf27f6 100644 --- a/packages/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.js +++ b/packages/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.js @@ -5,4 +5,4 @@ * (c) 2017-2025 Harvey Zack * Released under the MIT License. */ -!function(t,e,i,a,n,o,s,r){var l="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},d="function"==typeof l[a]&&l[a],p=d.i||{},u=d.cache||{},h="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function m(e,i){if(!u[e]){if(!t[e]){if(n[e])return n[e];var o="function"==typeof l[a]&&l[a];if(!i&&o)return o(e,!0);if(d)return d(e,!0);if(h&&"string"==typeof e)return h(e);var s=Error("Cannot find module '"+e+"'");throw s.code="MODULE_NOT_FOUND",s}p.resolve=function(i){var a=t[e][1][i];return null!=a?a:i},p.cache={};var r=u[e]=new m.Module(e);t[e][0].call(r.exports,p,r,r.exports,l)}return u[e].exports;function p(t){var e=p.resolve(t);return!1===e?{}:m(e)}}m.isParcelRequire=!0,m.Module=function(t){this.id=t,this.bundle=m,this.require=h,this.exports={}},m.modules=t,m.cache=u,m.parent=d,m.distDir=void 0,m.publicUrl=void 0,m.devServer=void 0,m.i=p,m.register=function(e,i){t[e]=[function(t,e){e.exports=i},{}]},Object.defineProperty(m,"root",{get:function(){return l[a]}}),l[a]=m;for(var c=0;cu);var o=t("./danmuku"),s=n.interopDefault(o),r=t("./heatmap"),l=n.interopDefault(r),d=t("./setting"),p=n.interopDefault(d);function u(t){return e=>{let i=new(0,s.default)(e,t),a=new(0,p.default)(e,i);return i.option.heatmap&&(0,l.default)(e,i,i.option.heatmap),{name:"artplayerPluginDanmuku",emit:i.emit.bind(i),load:i.load.bind(i),config:i.config.bind(i),hide:i.hide.bind(i),show:i.show.bind(i),reset:i.reset.bind(i),mount:a.mount.bind(a),get option(){return i.option},get isHide(){return i.isHide},get isStop(){return i.isStop}}}}u.icons=p.default.icons,"undefined"!=typeof window&&(window.artplayerPluginDanmuku=u)},{"./danmuku":"g81Wu","./heatmap":"hjtgU","./setting":"ho690","@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],g81Wu:[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i);var o=t("bundle-text:./worker"),s=n.interopDefault(o),r=t("./bilibili");class l{constructor(t,e){let{constructor:i,template:a}=t;this.utils=i.utils,this.validator=i.validator,this.$danmuku=a.$danmuku,this.$player=a.$player,this.art=t,this.queue=[],this.$refs=[],this.isStop=!1,this.isHide=!1,this.timer=null,this.index=0,this.option=l.option,this.states={wait:[],ready:[],emit:[],stop:[]},this.config(e,!0);let n=new Blob([s.default.replace("export{e as default};","")],{type:"application/javascript"});this.worker=new Worker(URL.createObjectURL(n)),this.start=this.start.bind(this),this.stop=this.stop.bind(this),this.reset=this.reset.bind(this),this.resize=this.resize.bind(this),this.destroy=this.destroy.bind(this),t.on("video:play",this.start),t.on("video:playing",this.start),t.on("video:pause",this.stop),t.on("video:waiting",this.stop),t.on("destroy",this.destroy),t.on("resize",this.resize),this.load()}static get option(){return{danmuku:[],speed:5,margin:[10,"25%"],opacity:1,color:"#FFFFFF",mode:0,modes:[0,1,2],fontSize:25,antiOverlap:!0,synchronousPlayback:!1,mount:void 0,heatmap:!1,width:512,points:[],filter:()=>!0,beforeEmit:()=>!0,beforeVisible:()=>!0,visible:!0,emitter:!0,maxLength:200,lockTime:5,theme:"dark",OPACITY:{},FONT_SIZE:{},MARGIN:{},SPEED:{},COLOR:[]}}static get scheme(){return{danmuku:"array|function|string",speed:"number",margin:"array",opacity:"number",color:"string",mode:"number",modes:"array",fontSize:"number|string",antiOverlap:"boolean",synchronousPlayback:"boolean",mount:"?htmldivelement|string",heatmap:"object|boolean",width:"number",points:"array",filter:"function",beforeEmit:"function",beforeVisible:"function",visible:"boolean",emitter:"boolean",maxLength:"number",lockTime:"number",theme:"string",OPACITY:"object",FONT_SIZE:"object",MARGIN:"object",SPEED:"object",COLOR:"array"}}static get cssText(){return` user-select: none; position: absolute; white-space: pre; pointer-events: none; perspective: 500px; display: inline-block; will-change: transform; font-weight: normal; line-height: 1.125; visibility: hidden; font-family: SimHei, "Microsoft JhengHei", Arial, Helvetica, sans-serif; text-shadow: rgb(0, 0, 0) 1px 0px 1px, rgb(0, 0, 0) 0px 1px 1px, rgb(0, 0, 0) 0px -1px 1px, rgb(0, 0, 0) -1px 0px 1px; `}get isRotate(){return this.art.plugins?.autoOrientation?.state}get marginTop(){let{clamp:t}=this.utils,e=this.option.margin[0],{clientHeight:i}=this.$player;return"number"==typeof e?t(e,0,i):"string"==typeof e&&e.endsWith("%")?t(i*(Number.parseFloat(e)/100),0,i):l.option.margin[0]}get marginBottom(){let{clamp:t}=this.utils,e=this.option.margin[1],{clientHeight:i}=this.$player;return"number"==typeof e?t(e,0,i):"string"==typeof e&&e.endsWith("%")?t(i*(Number.parseFloat(e)/100),0,i):l.option.margin[1]}get fontSize(){let{clamp:t}=this.utils,{clientHeight:e}=this.$player,i=this.option.fontSize;return"number"==typeof i?Math.round(t(i,12,e)):"string"==typeof i&&i.endsWith("%")?Math.round(t(e*(Number.parseFloat(i)/100),12,e)):l.option.fontSize}get $ref(){let t=this.$refs.pop()||document.createElement("div");return t.style.cssText=l.cssText,t.dataset.mode="",t.className="",t}get readys(){let{currentTime:t}=this.art,e=[];return this.filter("ready",t=>e.push(t)),this.filter("wait",i=>{t+.1>=i.time&&i.time>=t-.1&&e.push(i)}),e}get visibles(){let t=[],{clientWidth:e}=this.$player,i=this.getLeft(this.$player);return this.filter("emit",a=>{let n=a.$ref.offsetTop,o=this.getLeft(a.$ref)-i,s=a.$ref.clientHeight,r=a.$ref.clientWidth,l=o+r,d=l/a.$restTime,p={};p.top=n,p.left=o,p.height=s,p.width=r,p.right=e-l,p.speed=d,p.distance=l,p.time=a.$restTime,p.mode=a.mode,t.push(p)}),t}get speed(){return this.option.synchronousPlayback&&this.art.playbackRate?this.option.speed/Number(this.art.playbackRate):this.option.speed}async load(t){let{errorHandle:e}=this.utils,i=[],a=t||this.option.danmuku;try{"function"==typeof a?i=await a():a instanceof Promise?i=await a:"string"==typeof a?i=await (0,r.bilibiliDanmuParseFromUrl)(a):Array.isArray(a)&&(i=a),e(Array.isArray(i),"Danmuku need return an array as result"),void 0===t&&(this.reset(),this.queue=[],this.states={wait:[],ready:[],emit:[],stop:[]},this.$refs=[],this.$danmuku.textContent="");for(let t=0;tJSON.stringify(this.option[e])!==JSON.stringify(t[e]))||e)&&(this.option=Object.assign({},l.option,this.option,t),this.validator(this.option,l.scheme),this.option.mode=i(this.option.mode,0,2),this.option.speed=i(this.option.speed,1,10),this.option.opacity=i(this.option.opacity,0,1),this.option.lockTime=i(this.option.lockTime,1,60),this.option.maxLength=i(this.option.maxLength,1,1e3),this.option.mount=this.option.mount||a,t.fontSize&&this.reset(),this.option.visible?this.show():this.hide(),this.art.emit("artplayerPluginDanmuku:config",this.option)),this}getLeft(t){let e=t.getBoundingClientRect();return this.isRotate?e.top:e.left}postMessage(t={}){return new Promise(e=>{t.id=Date.now(),this.worker.postMessage(t),this.worker.onmessage=i=>{let{data:a}=i;a.id===t.id&&e(a)}})}filter(t,e){let i=this.states[t]||[];for(let t=0;te!==t),t.$state=e,t.$ref&&(t.$ref.dataset.state=e),this.states[e].push(t)}makeWait(t){this.setState(t,"wait"),t.$ref&&(t.$ref.style.cssText=l.cssText,t.$ref.style.visibility="hidden",t.$ref.style.marginLeft="0px",t.$ref.style.transform="translateX(0px)",t.$ref.style.transition="transform 0s linear 0s",this.$refs.push(t.$ref),t.$ref=null)}update(){let{setStyles:t}=this.utils;return this.timer=window.requestAnimationFrame(async()=>{if(this.art.playing&&!this.isHide){this.filter("emit",t=>{let e=(Date.now()-t.$lastStartTime)/1e3;t.$restTime-=e,t.$lastStartTime=Date.now(),t.$restTime<=0&&this.makeWait(t)});let e=this.readys;for(let i=0;i{0===e.mode&&(e.$ref.style.left=`${t}px`)}),this.filter("emit",e=>{if(e.$lastStartTime=Date.now(),0===e.mode){let i=t+e.$ref.clientWidth;e.$ref.style.left=`${t}px`,e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition=`transform ${e.$restTime}s linear 0s`}})}continue(){let{clientWidth:t}=this.$player;return this.filter("stop",e=>{if(this.setState(e,"emit"),e.$lastStartTime=Date.now(),0===e.mode){let i=t+e.$ref.clientWidth;e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition=`transform ${e.$restTime}s linear 0s`}}),this}suspend(){let{clientWidth:t}=this.$player;return this.filter("emit",e=>{if(this.setState(e,"stop"),0===e.mode){let i=t-(this.getLeft(e.$ref)-this.getLeft(this.$player));e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition="transform 0s linear 0s"}}),this}stop(){return this.isStop=!0,this.suspend(),window.cancelAnimationFrame(this.timer),this.art.emit("artplayerPluginDanmuku:stop"),this}start(){return this.isStop=!1,this.continue(),this.update(),this.art.emit("artplayerPluginDanmuku:start"),this}reset(){return this.queue.forEach(t=>this.makeWait(t)),this.art.emit("artplayerPluginDanmuku:reset"),this}show(){return this.isHide=!1,this.$danmuku.style.opacity=1,this.option.visible=!0,this.art.emit("artplayerPluginDanmuku:show"),this}hide(){return this.isHide=!0,this.$danmuku.style.opacity=0,this.option.visible=!1,this.art.emit("artplayerPluginDanmuku:hide"),this}destroy(){this.stop(),this.worker.terminate(),this.art.off("video:play",this.start),this.art.off("video:playing",this.start),this.art.off("video:pause",this.stop),this.art.off("video:waiting",this.stop),this.art.off("resize",this.reset),this.art.off("destroy",this.destroy),this.art.emit("artplayerPluginDanmuku:destroy")}}i.default=l},{"bundle-text:./worker":"cK8sH","./bilibili":"jICn4","@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],cK8sH:[function(t,e,i,a){e.exports='!function(e,t,i,o,n,r,f,l){var d="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},u="function"==typeof d[o]&&d[o],p=u.i||{},h=u.cache||{},s="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function a(t,i){if(!h[t]){if(!e[t]){if(n[t])return n[t];var r="function"==typeof d[o]&&d[o];if(!i&&r)return r(t,!0);if(u)return u(t,!0);if(s&&"string"==typeof t)return s(t);var f=Error("Cannot find module \'"+t+"\'");throw f.code="MODULE_NOT_FOUND",f}p.resolve=function(i){var o=e[t][1][i];return null!=o?o:i},p.cache={};var l=h[t]=new a.Module(t);e[t][0].call(l.exports,p,l,l.exports,d)}return h[t].exports;function p(e){var t=p.resolve(e);return!1===t?{}:a(t)}}a.isParcelRequire=!0,a.Module=function(e){this.id=e,this.bundle=a,this.require=s,this.exports={}},a.modules=e,a.cache=h,a.parent=u,a.distDir=void 0,a.publicUrl=void 0,a.devServer=void 0,a.i=p,a.register=function(t,i){e[t]=[function(e,t){t.exports=i},{}]},Object.defineProperty(a,"root",{get:function(){return d[o]}}),d[o]=a;for(var c=0;ct.mode===e.mode&&t.top<=l).sort((e,t)=>e.top-t.top);if(0===d.length)if(2===e.mode)return l-e.height;else return r;if(d.unshift({type:"top",top:0,left:0,right:0,height:r,width:i,speed:0,distance:i}),d.push({type:"bottom",top:l,left:0,right:0,height:n,width:i,speed:0,distance:i}),2===e.mode)for(let t=d.length-2;t>=0;t-=1){let i=d[t],o=d[t+1],n=i.top+i.height;if(o.top-n>=e.height)return o.top-e.height}else for(let t=1;t=e.height)return n}let u=[];for(let e=1;et.every(t=>!(it.time))));return t&&t[0]?t[0].top:void 0}case 1:case 2:return}else{switch(e.mode){case 0:u.sort((e,t)=>{let i=Math.min(...t.map(e=>e.right)),o=Math.min(...e.map(e=>e.right));return i*t.length-o*e.length});break;case 1:case 2:u.sort((e,t)=>{let i=Math.max(...t.map(e=>e.width));return Math.max(...e.map(e=>e.width))*e.length-i*t.length})}return u[0][0].top}}onmessage=e=>{let{data:t}=e;t.id&&t.type&&globalThis.postMessage({result:(0,({getDanmuTop:n})[t.type])(t),id:t.id})}},{}]},["fpBtQ"],"fpBtQ","parcelRequire4dc0",{});'},{}],jICn4:[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");function o(t){switch(t){case 1:case 2:case 3:default:return 0;case 4:return 2;case 5:return 1}}function s(t){return"string"!=typeof t?[]:Array.from(t.matchAll(/]*?p="(?

[^"]+)"[^>]*>(?.*?)<\/d>/gs)).map(t=>{let e=t.groups.p.split(",");return e.length>=8?{text:t.groups.text.trim().replaceAll(""",'"').replaceAll("'","'").replaceAll("<","<").replaceAll(">",">").replaceAll("&","&"),time:Number(e[0]),mode:o(Number(e[1])),fontSize:Number(e[2]),color:`#${Number(e[3]).toString(16)}`,timestamp:Number(e[4]),pool:Number(e[5]),userID:e[6],rowID:Number(e[7])}:null}).filter(Boolean)}function r({data:t}){let{xml:e,id:i}=t;i&&e&&globalThis.postMessage({danmus:s(e),id:i})}function l(t){return new Promise(async e=>{let i=await fetch(t),a=await i.text();try{let t=function(){let t=new Blob([` ${o.toString()} ${s.toString()} onmessage = ${r.toString()} `],{type:"application/javascript"});return new Worker(URL.createObjectURL(t))}();t.onmessage=i=>{let{danmus:a,id:n}=i.data;n&&a&&(e(a),t.terminate())},t.postMessage({xml:a,id:Date.now()})}catch(t){console.error("Error parsing Bilibili Danmu:",t),e(s(a))}})}n.defineInteropFlag(i),n.export(i,"bilibiliDanmuParseFromUrl",()=>l)},{"@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],"6ykb1":[function(t,e,i,a){i.interopDefault=function(t){return t&&t.__esModule?t:{default:t}},i.defineInteropFlag=function(t){Object.defineProperty(t,"__esModule",{value:!0})},i.exportAll=function(t,e){return Object.keys(t).forEach(function(i){"default"===i||"__esModule"===i||Object.prototype.hasOwnProperty.call(e,i)||Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[i]}})}),e},i.export=function(t,e,i){Object.defineProperty(t,e,{enumerable:!0,get:i})}},{}],hjtgU:[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i),n.export(i,"default",()=>s);let o={map:(t,e,i,a,n)=>(t-e)*(n-a)/(i-e)+a,range(t,e,i){let a=Math.round(t/i)*i;return Array.from({length:Math.floor((e-t)/i)},(t,e)=>e*i+a)}};function s(t,e,i){let{query:a}=t.constructor.utils;t.controls.add({name:"heatmap",position:"top",html:"",style:{position:"absolute",top:"-100px",left:"0px",right:"0px",height:"100px",width:"100%",pointerEvents:"none"},mounted(n){let s=null,r=null;function l(d=[]){if(s=null,r=null,n.innerHTML="",!t.duration||t.option.isLive)return;let p={w:n.offsetWidth,h:n.offsetHeight},u={xMin:0,xMax:p.w,yMin:0,yMax:128,scale:.25,opacity:.2,minHeight:Math.floor(.05*p.h),sampling:Math.floor(p.w/100),smoothing:.2,flattening:.2};"object"==typeof i&&Object.assign(u,i);let h=[];if(Array.isArray(d)&&d.length)h=[...d];else{let i=t.duration/p.w;for(let t=0;t<=p.w;t+=u.sampling){let a=e.queue.filter(({time:e})=>e>t*i&&e<=(t+u.sampling)*i).length;h.push([t,a])}}if(0===h.length)return;let m=h[h.length-1],c=m[0],f=m[1];c!==p.w&&h.push([p.w,f]);let g=h.map(t=>t[1]),y=(Math.min(...g)+Math.max(...g))/2;for(let t=0;ty?1+u.scale:1-u.scale)+u.minHeight}let v=(t,e,i,a)=>{let n=function(t,e){let i=e[0]-t[0],a=e[1]-t[1];return{length:Math.sqrt(i**2+a**2),angle:Math.atan2(a,i)}}(e||t,i||t),s=o.map(Math.cos(n.angle)*u.flattening,0,1,1,0),r=n.angle*s+(a?Math.PI:0),l=n.length*u.smoothing;return[t[0]+Math.cos(r)*l,t[1]+Math.sin(r)*l]},x=h.map(t=>[o.map(t[0],u.xMin,u.xMax,0,p.w),o.map(t[1],u.yMin,u.yMax,p.h,0)]).reduce((t,e,i,a)=>0===i?`M ${a[a.length-1][0]},${p.h} L ${e[0]},${p.h} L ${e[0]},${e[1]}`:`${t} ${((t,e,i)=>{let a=v(i[e-1],i[e-2],t),n=v(t,i[e-1],i[e+1],!0),o=e===i.length-1?" z":"";return`C ${a[0]},${a[1]} ${n[0]},${n[1]} ${t[0]},${t[1]}${o}`})(e,i,a)}`,"");n.innerHTML=``,s=a("#heatmap-start",n),r=a("#heatmap-stop",n),s.setAttribute("offset",`${100*t.played}%`),r.setAttribute("offset",`${100*t.played}%`)}t.on("video:timeupdate",()=>{s&&r&&(s.setAttribute("offset",`${100*t.played}%`),r.setAttribute("offset",`${100*t.played}%`))}),t.on("setBar",(t,e)=>{s&&r&&"played"===t&&(s.setAttribute("offset",`${100*e}%`),r.setAttribute("offset",`${100*e}%`))}),t.on("ready",()=>l()),t.on("resize",()=>l()),t.on("artplayerPluginDanmuku:loaded",()=>l()),t.on("artplayerPluginDanmuku:points",t=>l(t))}})}},{"@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],ho690:[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i);var o=t("bundle-text:./img/check_off.svg"),s=n.interopDefault(o),r=t("bundle-text:./img/check_on.svg"),l=n.interopDefault(r),d=t("bundle-text:./img/config.svg"),p=n.interopDefault(d),u=t("bundle-text:./img/mode_0_off.svg"),h=n.interopDefault(u),m=t("bundle-text:./img/mode_0_on.svg"),c=n.interopDefault(m),f=t("bundle-text:./img/mode_1_off.svg"),g=n.interopDefault(f),y=t("bundle-text:./img/mode_1_on.svg"),v=n.interopDefault(y),x=t("bundle-text:./img/mode_2_off.svg"),k=n.interopDefault(x),b=t("bundle-text:./img/mode_2_on.svg"),$=n.interopDefault(b),w=t("bundle-text:./img/off.svg"),M=n.interopDefault(w),D=t("bundle-text:./img/on.svg"),S=n.interopDefault(D),E=t("bundle-text:./img/style.svg"),q=n.interopDefault(E),T=t("bundle-text:./style.less"),A=n.interopDefault(T);if(i.default=class{constructor(t,e){this.art=t,this.danmuku=e,this.utils=t.constructor.utils;let{setStyle:i}=this.utils,{$controlsCenter:a}=t.template;i(a,"display","flex"),this.template={$controlsCenter:a,$mount:a,$danmuku:null,$toggle:null,$config:null,$configPanel:null,$configModes:null,$style:null,$stylePanel:null,$styleModes:null,$colors:null,$opacitySlider:null,$opacityValue:null,$marginSlider:null,$marginValue:null,$fontSizeSlider:null,$fontSizeValue:null,$speedSlider:null,$speedValue:null,$input:null,$send:null},this.slider={opacity:null,margin:null,fontSize:null,speed:null},this.emitting=!1,this.isLock=!1,this.timer=null,this.createTemplate(),this.createSliders(),this.createEvents(),this.mount(this.option.mount),t.on("resize",()=>this.resize()),t.on("fullscreen",t=>this.onFullscreen(t)),t.on("fullscreenWeb",t=>this.onFullscreen(t)),t.proxy(this.template.$config,"mouseenter",()=>{this.onMouseEnter({$control:this.template.$config,$panel:this.template.$configPanel})}),t.proxy(this.template.$style,"mouseenter",()=>{this.onMouseEnter({$control:this.template.$style,$panel:this.template.$stylePanel})})}static get icons(){return{$on:S.default,$off:M.default,$config:p.default,$style:q.default,$mode_0_off:h.default,$mode_0_on:c.default,$mode_1_off:g.default,$mode_1_on:v.default,$mode_2_off:k.default,$mode_2_on:$.default,$check_on:l.default,$check_off:s.default}}get option(){return this.danmuku.option}get outside(){return this.template.$mount!==this.template.$controlsCenter}get TEMPLATE(){let{option:t}=this;return`

${S.default}${M.default}
${p.default}
\u{6309}\u{7C7B}\u{578B}\u{5C4F}\u{853D}
${h.default}${c.default}
\u{6EDA}\u{52A8}
${g.default}${v.default}
\u{9876}\u{90E8}
${k.default}${$.default}
\u{5E95}\u{90E8}
${l.default}${s.default} \u{9632}\u{6B62}\u{5F39}\u{5E55}\u{91CD}\u{53E0}
${l.default}${s.default} \u{540C}\u{6B65}\u{89C6}\u{9891}\u{901F}\u{5EA6}
\u{4E0D}\u{900F}\u{660E}\u{5EA6}
\u{672A}\u{77E5}
\u{663E}\u{793A}\u{533A}\u{57DF}
\u{672A}\u{77E5}
\u{5F39}\u{5E55}\u{5B57}\u{53F7}
\u{672A}\u{77E5}
\u{5F39}\u{5E55}\u{901F}\u{5EA6}
\u{672A}\u{77E5}
${q.default}
\u{6A21}\u{5F0F}
${c.default}
\u{6EDA}\u{52A8}
${v.default}
\u{9876}\u{90E8}
${$.default}
\u{5E95}\u{90E8}
\u{989C}\u{8272}
${this.COLOR.map(t=>`
`).join("")}
\u{53D1}\u{9001}
`}get OPACITY(){return{min:0,max:100,steps:[],...this.option.OPACITY}}get FONT_SIZE(){return{min:12,max:120,steps:[],...this.option.FONT_SIZE}}get MARGIN(){return{min:0,max:3,steps:[{name:"1/4",value:[10,"75%"]},{name:"半屏",value:[10,"50%"]},{name:"3/4",value:[10,"25%"]},{name:"满屏",value:[10,10]}],...this.option.MARGIN}}get SPEED(){return{min:0,max:4,steps:[{name:"极慢",value:10},{name:"较慢",value:7.5,hide:!0},{name:"适中",value:5},{name:"较快",value:2.5,hide:!0},{name:"极快",value:1}],...this.option.SPEED}}get COLOR(){return this.option.COLOR.length?this.option.COLOR:["#FE0302","#FF7204","#FFAA02","#FFD302","#FFFF00","#A0EE00","#00CD00","#019899","#4266BE","#89D5FF","#CC0273","#222222","#9B9B9B","#FFFFFF"]}query(t){let{query:e}=this.utils,{$danmuku:i}=this.template;return e(t,i)}append(t,e){let{append:i}=this.utils;[...t.children].includes(e)||i(t,e)}setData(t,e){let{$player:i}=this.art.template,{$mount:a}=this.template;i.dataset[t]=e,this.outside&&(a.dataset[t]=e)}createTemplate(){let{createElement:t,tooltip:e}=this.utils,i=t("div");i.className="artplayer-plugin-danmuku",i.innerHTML=this.TEMPLATE,this.template.$danmuku=i,this.template.$toggle=this.query(".apd-toggle"),this.template.$config=this.query(".apd-config"),this.template.$configPanel=this.query(".apd-config-panel"),this.template.$configModes=this.query(".apd-config-mode .apd-modes"),this.template.$style=this.query(".apd-style"),this.template.$stylePanel=this.query(".apd-style-panel"),this.template.$styleModes=this.query(".apd-style-mode .apd-modes"),this.template.$colors=this.query(".apd-colors"),this.template.$antiOverlap=this.query(".apd-anti-overlap"),this.template.$syncVideo=this.query(".apd-sync-video"),this.template.$opacitySlider=this.query(".apd-config-opacity .apd-slider"),this.template.$opacityValue=this.query(".apd-config-opacity .apd-value"),this.template.$marginSlider=this.query(".apd-config-margin .apd-slider"),this.template.$marginValue=this.query(".apd-config-margin .apd-value"),this.template.$fontSizeSlider=this.query(".apd-config-fontSize .apd-slider"),this.template.$fontSizeValue=this.query(".apd-config-fontSize .apd-value"),this.template.$speedSlider=this.query(".apd-config-speed .apd-slider"),this.template.$speedValue=this.query(".apd-config-speed .apd-value"),this.template.$input=this.query(".apd-input"),this.template.$send=this.query(".apd-send");let{$toggle:a}=this.template;this.art.on("artplayerPluginDanmuku:show",()=>{e(a,"关闭弹幕")}),this.art.on("artplayerPluginDanmuku:hide",()=>{e(a,"打开弹幕")})}createEvents(){let{$toggle:t,$configModes:e,$styleModes:i,$colors:a,$antiOverlap:n,$syncVideo:o,$send:s,$input:r}=this.template;this.art.proxy(t,"click",()=>{this.danmuku.config({visible:!this.option.visible}),this.reset()}),this.art.proxy(e,"click",t=>{let e=t.target.closest(".apd-mode");if(!e)return;let i=Number(e.dataset.mode);this.option.modes.includes(i)?this.danmuku.config({modes:this.option.modes.filter(t=>t!==i)}):this.danmuku.config({modes:[...this.option.modes,i]}),this.reset()}),this.art.proxy(n,"click",()=>{this.danmuku.config({antiOverlap:!this.option.antiOverlap}),this.reset()}),this.art.proxy(o,"click",()=>{this.danmuku.config({synchronousPlayback:!this.option.synchronousPlayback}),this.reset()}),this.art.proxy(i,"click",t=>{let e=t.target.closest(".apd-mode");if(!e)return;let i=Number(e.dataset.mode);this.danmuku.config({mode:i}),this.reset()}),this.art.proxy(a,"click",t=>{let e=t.target.closest(".apd-color");e&&(this.danmuku.config({color:e.dataset.color}),this.reset())}),this.art.proxy(s,"click",()=>this.emit()),this.art.proxy(r,"keypress",t=>{"Enter"===t.key&&(t.preventDefault(),this.emit())})}createSliders(){this.slider.opacity=this.createSlider({...this.OPACITY,container:this.template.$opacitySlider,findIndex:()=>Math.round(100*this.option.opacity),onChange:t=>{let{$opacityValue:e}=this.template;e.textContent=`${t}%`,this.danmuku.config({opacity:t/100})}}),this.slider.margin=this.createSlider({...this.MARGIN,container:this.template.$marginSlider,findIndex:()=>this.MARGIN.steps.findIndex(t=>t.value[0]===this.option.margin[0]&&t.value[1]===this.option.margin[1]),onChange:t=>{let e=this.MARGIN.steps[t];if(!e)return;let{$marginValue:i}=this.template;i.textContent=e.name,this.danmuku.config({margin:e.value})}}),this.slider.fontSize=this.createSlider({...this.FONT_SIZE,container:this.template.$fontSizeSlider,findIndex:()=>this.danmuku.fontSize,onChange:t=>{let{$fontSizeValue:e}=this.template;e.textContent=`${t}px`,t!==this.danmuku.fontSize&&this.danmuku.config({fontSize:t})}}),this.slider.speed=this.createSlider({...this.SPEED,container:this.template.$speedSlider,findIndex:()=>this.SPEED.steps.findIndex(t=>t.value===this.option.speed),onChange:t=>{let e=this.SPEED.steps[t];if(!e)return;let{$speedValue:i}=this.template;i.textContent=e.name,this.danmuku.config({speed:e.value})}})}createSlider({min:t,max:e,container:i,findIndex:a,onChange:n,steps:o=[]}){let{query:s,clamp:r,setStyle:l}=this.utils;l(i,"touch-action","none"),i.innerHTML=`
${o.map(()=>'
').join("")}
${o.map(t=>t.hide?"":`
${t.name}
`).join("")}
`;let d=s(".apd-slider-dot",i),p=s(".apd-slider-progress",i),u=!1;function h(i=a()){if(ie)return;let s=(i-t)/(e-t);d.style.left=`${100*s}%`,0===o.length&&(p.style.width=d.style.left),n(i)}function m(a){let{top:n,height:o,left:s,width:l}=i.getBoundingClientRect();this.art.isRotate?h(Math.round(r(a.clientY-n,0,o)/o*(e-t)+t)):h(Math.round(r(a.clientX-s,0,l)/l*(e-t)+t))}return this.art.proxy(i,"click",t=>{m.call(this,t)}),this.art.proxy(i,"pointerdown",t=>{u=0===t.button}),this.art.proxy(document,"pointermove",t=>{u&&m.call(this,t)}),this.art.proxy(document,"pointerup",t=>{u&&(u=!1,m.call(this,t))}),{reset:h}}onFullscreen(t){let{$danmuku:e,$controlsCenter:i,$mount:a}=this.template;this.outside?t?this.append(i,e):this.append(a,e):this.append(i,e)}onMouseEnter({$control:t,$panel:e}){let{$player:i}=this.art.template,a=t.getBoundingClientRect(),n=e.getBoundingClientRect(),o=i.getBoundingClientRect(),s=n.width/2-a.width/2,r=o.left-(a.left-s),l=a.right+s-o.right;r>0?e.style.left=`${-s+r}px`:l>0?e.style.left=`${-s-l}px`:e.style.left=`${-s}px`}async emit(){let{$input:t}=this.template,e=t.value.trim();if(!e.length||this.isLock||this.emitting)return;let i={text:e,mode:this.option.mode,color:this.option.color,time:this.art.currentTime};try{this.emitting=!0;let e=await this.option.beforeEmit(i);if(this.emitting=!1,!0!==e)return;i.border=!0,delete i.time,this.danmuku.emit(i),t.value="",this.lock()}catch(t){console.error("Error emitting danmuku:",t),this.emitting=!1}}lock(){let{addClass:t}=this.utils,{$send:e}=this.template;this.isLock=!0;let i=this.option.lockTime;e.textContent=i,t(e,"apd-lock");let a=()=>{this.timer=setTimeout(()=>{0===i?this.unlock():(e.textContent=i-=1,a())},1e3)};a()}unlock(){let{removeClass:t}=this.utils,{$send:e}=this.template;clearTimeout(this.timer),this.isLock=!1,e.textContent="发送",t(e,"apd-lock")}resize(){if(this.outside||this.art.fullscreen||this.art.fullscreenWeb)return;let{$player:t,$controlsCenter:e}=this.art.template,{$danmuku:i}=this.template;this.art.widtht.dataset.color===this.option.color.toUpperCase());n&&t(n,"apd-active"),e(i,this.option.visible?"关闭弹幕":"打开弹幕"),this.resize()}mount(t){let{errorHandle:e}=this.utils,i="string"==typeof t?document.querySelector(t):t;e(i,`Can not find the mount point: ${t}`),this.append(i,this.template.$danmuku),this.template.$mount=i,this.reset()}},"undefined"!=typeof document){let t="artplayer-plugin-danmuku",e=document.getElementById(t);e||((e=document.createElement("style")).id=t,"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{document.head.appendChild(e)}):(document.head||document.documentElement).appendChild(e)),e.textContent=A.default}},{"bundle-text:./img/check_off.svg":"gf3jX","bundle-text:./img/check_on.svg":"9EUUq","bundle-text:./img/config.svg":"jqR46","bundle-text:./img/mode_0_off.svg":"fFoDs","bundle-text:./img/mode_0_on.svg":"hkEt9","bundle-text:./img/mode_1_off.svg":"3n5ax","bundle-text:./img/mode_1_on.svg":"hJjtU","bundle-text:./img/mode_2_off.svg":"dWW5U","bundle-text:./img/mode_2_on.svg":"1QGuJ","bundle-text:./img/off.svg":"bMJJY","bundle-text:./img/on.svg":"2h5UL","bundle-text:./img/style.svg":"9tkqu","bundle-text:./style.less":"e4L1w","@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],gf3jX:[function(t,e,i,a){e.exports=''},{}],"9EUUq":[function(t,e,i,a){e.exports=''},{}],jqR46:[function(t,e,i,a){e.exports=''},{}],fFoDs:[function(t,e,i,a){e.exports=''},{}],hkEt9:[function(t,e,i,a){e.exports=''},{}],"3n5ax":[function(t,e,i,a){e.exports=''},{}],hJjtU:[function(t,e,i,a){e.exports=''},{}],dWW5U:[function(t,e,i,a){e.exports=''},{}],"1QGuJ":[function(t,e,i,a){e.exports=''},{}],bMJJY:[function(t,e,i,a){e.exports=''},{}],"2h5UL":[function(t,e,i,a){e.exports=''},{}],"9tkqu":[function(t,e,i,a){e.exports=''},{}],e4L1w:[function(t,e,i,a){e.exports='.artplayer-plugin-danmuku{z-index:99;color:#fff;flex-shrink:0;justify-content:center;align-items:center;gap:10px;width:100%;height:32px;font-size:12px;font-weight:300;display:flex;position:relative}.artplayer-plugin-danmuku .apd-icon{cursor:pointer;opacity:.75;fill:#fff;transition:all .2s}.artplayer-plugin-danmuku .apd-icon:hover{opacity:1}.artplayer-plugin-danmuku .apd-config{display:flex;position:relative}.artplayer-plugin-danmuku .apd-config .apd-config-panel{opacity:0;pointer-events:none;width:320px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-config .apd-config-panel .apd-config-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-config:hover .apd-config-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-config-mode,.artplayer-plugin-danmuku .apd-config-slider,.artplayer-plugin-danmuku .apd-config-other,.artplayer-plugin-danmuku .apd-style-mode{margin-bottom:15px}.artplayer-plugin-danmuku .apd-modes{align-items:center;gap:20px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-modes .apd-mode{cursor:pointer;text-align:center}.artplayer-plugin-danmuku .apd-modes .apd-mode:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-config-slider{align-items:center;gap:12px;display:flex}.artplayer-plugin-danmuku .apd-config-slider .apd-value{text-align:right;width:32px}.artplayer-plugin-danmuku .apd-slider{cursor:pointer;flex:1;justify-content:center;align-items:center;height:20px;display:flex;position:relative}.artplayer-plugin-danmuku .apd-slider .apd-slider-line{background-color:#ffffff40;border-radius:3px;width:100%;height:2px;position:relative;overflow:hidden}.artplayer-plugin-danmuku .apd-slider .apd-slider-points{justify-content:space-between;align-items:center;display:flex;position:absolute;inset:0}.artplayer-plugin-danmuku .apd-slider .apd-slider-points .apd-slider-point{background-color:#ffffff80;border-radius:50%;width:2px;height:2px}.artplayer-plugin-danmuku .apd-slider .apd-slider-progress{background-color:#00a1d6;width:0%;height:100%}.artplayer-plugin-danmuku .apd-slider .apd-slider-dot{background-color:#00a1d6;border-radius:50%;width:12px;height:12px;position:absolute;left:0%;transform:translate(-6px)}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps{color:#777;justify-content:space-between;align-items:center;width:calc(100% + 32px);display:flex;position:absolute;bottom:-12px}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps .apd-slider-step{text-align:center;flex-shrink:0;width:36px;scale:.95}.artplayer-plugin-danmuku .apd-config-other{align-items:center;gap:20px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-check-off,.artplayer-plugin-danmuku .apd-config-other .apd-check-on{width:16px;height:16px}.artplayer-plugin-danmuku .apd-config-other .apd-other{cursor:pointer;align-items:center;gap:2px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-other:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-emitter{background-color:#ffffff40;border-radius:5px;flex:1;align-items:center;height:100%;display:flex}.artplayer-plugin-danmuku .apd-style{justify-content:center;align-items:center;display:flex;position:relative}.artplayer-plugin-danmuku .apd-style .apd-style-panel{opacity:0;pointer-events:none;width:200px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-style .apd-style-panel .apd-style-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-style:hover .apd-style-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-colors{flex-wrap:wrap;gap:8px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-colors .apd-color{cursor:pointer;border-radius:2px;width:16px;height:16px}.artplayer-plugin-danmuku .apd-colors .apd-color.apd-active{border:1px solid #000;box-shadow:0 0 0 1px #fff}.artplayer-plugin-danmuku .apd-input{color:#fff;background-color:#0000;border:none;outline:none;flex:1;width:auto;min-width:0;height:100%;line-height:1}.artplayer-plugin-danmuku .apd-input::placeholder{color:#ffffff80}.artplayer-plugin-danmuku .apd-send{cursor:pointer;width:60px;height:100%;text-shadow:none;background-color:#00a1d6;border-top-right-radius:5px;border-bottom-right-radius:5px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.artplayer-plugin-danmuku .apd-send.apd-lock{cursor:not-allowed;color:#666;background-color:#e7e7e7}.art-controls-center .apd-emitter{flex:none;width:260px}.art-fullscreen .artplayer-plugin-danmuku,.art-fullscreen-web .artplayer-plugin-danmuku{gap:16px;height:38px}.art-fullscreen .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen-web .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-on,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-on{width:28px;height:28px}.art-fullscreen .artplayer-plugin-danmuku .apd-emitter,.art-fullscreen-web .artplayer-plugin-danmuku .apd-emitter{flex:none;width:400px}.art-video-player>.artplayer-plugin-danmuku{padding:0 10px;position:absolute;bottom:-40px;left:0;right:0}.art-video-player:has(>.artplayer-plugin-danmuku){margin-bottom:40px}[data-danmuku-emitter=false] .apd-emitter{display:none!important}[data-danmuku-emitter=false] .art-controls-center .artplayer-plugin-danmuku{justify-content:flex-end;gap:18px}[data-danmuku-emitter=false].art-fullscreen .art-controls-center .artplayer-plugin-danmuku,[data-danmuku-emitter=false].art-fullscreen-web .art-controls-center .artplayer-plugin-danmuku{gap:24px}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-icon{fill:#333}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-emitter{background-color:#f1f2f3}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input{color:#000}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input::placeholder{color:#0000004d}[data-danmuku-visible=false] .apd-toggle-off{display:block}[data-danmuku-visible=false] .apd-toggle-on,[data-danmuku-visible=true] .apd-toggle-off{display:none}[data-danmuku-visible=true] .apd-toggle-on{display:block}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-on{display:none}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-off,[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-on{display:block}[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-off,[data-danmuku-sync-video=false] .apd-sync-video .apd-check-on{display:none}[data-danmuku-sync-video=false] .apd-sync-video .apd-check-off,[data-danmuku-sync-video=true] .apd-sync-video .apd-check-on{display:block}[data-danmuku-sync-video=true] .apd-sync-video .apd-check-off{display:none}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-off{display:block}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-on{display:none}[data-danmuku-mode0=false] .art-danmuku [data-mode="0"]{opacity:0!important}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-off{display:none}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-on{display:block}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"]{color:#00a1d6}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"] path{fill:#00a1d6}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-off{display:block}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-on{display:none}[data-danmuku-mode1=false] .art-danmuku [data-mode="1"]{opacity:0!important}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-off{display:none}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-on{display:block}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"]{color:#00a1d6}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"] path{fill:#00a1d6}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-off{display:block}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-on{display:none}[data-danmuku-mode2=false] .art-danmuku [data-mode="2"]{opacity:0!important}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-off{display:none}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-on{display:block}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"]{color:#00a1d6}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"] path{fill:#00a1d6}'},{}]},["666Ok"],"666Ok","parcelRequire4dc0",{}); \ No newline at end of file +!function(t,e,i,a,n,o,s,r){var l="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},d="function"==typeof l[a]&&l[a],p=d.i||{},u=d.cache||{},h="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function m(e,i){if(!u[e]){if(!t[e]){if(n[e])return n[e];var o="function"==typeof l[a]&&l[a];if(!i&&o)return o(e,!0);if(d)return d(e,!0);if(h&&"string"==typeof e)return h(e);var s=Error("Cannot find module '"+e+"'");throw s.code="MODULE_NOT_FOUND",s}p.resolve=function(i){var a=t[e][1][i];return null!=a?a:i},p.cache={};var r=u[e]=new m.Module(e);t[e][0].call(r.exports,p,r,r.exports,l)}return u[e].exports;function p(t){var e=p.resolve(t);return!1===e?{}:m(e)}}m.isParcelRequire=!0,m.Module=function(t){this.id=t,this.bundle=m,this.require=h,this.exports={}},m.modules=t,m.cache=u,m.parent=d,m.distDir=void 0,m.publicUrl=void 0,m.devServer=void 0,m.i=p,m.register=function(e,i){t[e]=[function(t,e){e.exports=i},{}]},Object.defineProperty(m,"root",{get:function(){return l[a]}}),l[a]=m;for(var c=0;cu);var o=t("./danmuku"),s=n.interopDefault(o),r=t("./heatmap"),l=n.interopDefault(r),d=t("./setting"),p=n.interopDefault(d);function u(t){return e=>{let i=new(0,s.default)(e,t),a=new(0,p.default)(e,i);return i.option.heatmap&&(0,l.default)(e,i,i.option.heatmap),{name:"artplayerPluginDanmuku",emit:i.emit.bind(i),load:i.load.bind(i),config:i.config.bind(i),hide:i.hide.bind(i),show:i.show.bind(i),reset:i.reset.bind(i),mount:a.mount.bind(a),get option(){return i.option},get isHide(){return i.isHide},get isStop(){return i.isStop}}}}u.icons=p.default.icons,"undefined"!=typeof window&&(window.artplayerPluginDanmuku=u)},{"./danmuku":"g81Wu","./heatmap":"hjtgU","./setting":"ho690","@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],g81Wu:[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i);var o=t("bundle-text:./worker"),s=n.interopDefault(o),r=t("./bilibili");class l{constructor(t,e){let{constructor:i,template:a}=t;this.utils=i.utils,this.validator=i.validator,this.$danmuku=a.$danmuku,this.$player=a.$player,this.art=t,this.queue=[],this.$refs=[],this.isStop=!1,this.isHide=!1,this.timer=null,this.index=0,this.option=l.option,this.states={wait:[],ready:[],emit:[],stop:[]},this.config(e,!0);let n=new Blob([s.default.replace("export{e as default};","")],{type:"application/javascript"});this.worker=new Worker(URL.createObjectURL(n)),this.start=this.start.bind(this),this.stop=this.stop.bind(this),this.reset=this.reset.bind(this),this.resize=this.resize.bind(this),this.destroy=this.destroy.bind(this),t.on("video:play",this.start),t.on("video:playing",this.start),t.on("video:pause",this.stop),t.on("video:waiting",this.stop),t.on("destroy",this.destroy),t.on("resize",this.resize),this.load()}static get option(){return{danmuku:[],speed:5,margin:[10,"25%"],opacity:1,color:"#FFFFFF",mode:0,modes:[0,1,2],fontSize:25,antiOverlap:!0,synchronousPlayback:!1,mount:void 0,heatmap:!1,width:512,points:[],filter:()=>!0,beforeEmit:()=>!0,beforeVisible:()=>!0,visible:!0,emitter:!0,maxLength:200,lockTime:5,theme:"dark",OPACITY:{},FONT_SIZE:{},MARGIN:{},SPEED:{},COLOR:[]}}static get scheme(){return{danmuku:"array|function|string",speed:"number",margin:"array",opacity:"number",color:"string",mode:"number",modes:"array",fontSize:"number|string",antiOverlap:"boolean",synchronousPlayback:"boolean",mount:"?htmldivelement|string",heatmap:"object|boolean",width:"number",points:"array",filter:"function",beforeEmit:"function",beforeVisible:"function",visible:"boolean",emitter:"boolean",maxLength:"number",lockTime:"number",theme:"string",OPACITY:"object",FONT_SIZE:"object",MARGIN:"object",SPEED:"object",COLOR:"array"}}static get cssText(){return` user-select: none; position: absolute; white-space: pre; pointer-events: none; perspective: 500px; display: inline-block; will-change: transform; font-weight: normal; line-height: 1.125; visibility: hidden; font-family: SimHei, "Microsoft JhengHei", Arial, Helvetica, sans-serif; text-shadow: rgb(0, 0, 0) 1px 0px 1px, rgb(0, 0, 0) 0px 1px 1px, rgb(0, 0, 0) 0px -1px 1px, rgb(0, 0, 0) -1px 0px 1px; `}get isRotate(){return this.art.plugins?.autoOrientation?.state}get marginTop(){let{clamp:t}=this.utils,e=this.option.margin[0],{clientHeight:i}=this.$player;return"number"==typeof e?t(e,0,i):"string"==typeof e&&e.endsWith("%")?t(i*(Number.parseFloat(e)/100),0,i):l.option.margin[0]}get marginBottom(){let{clamp:t}=this.utils,e=this.option.margin[1],{clientHeight:i}=this.$player;return"number"==typeof e?t(e,0,i):"string"==typeof e&&e.endsWith("%")?t(i*(Number.parseFloat(e)/100),0,i):l.option.margin[1]}get fontSize(){let{clamp:t}=this.utils,{clientHeight:e}=this.$player,i=this.option.fontSize;return"number"==typeof i?Math.round(t(i,12,e)):"string"==typeof i&&i.endsWith("%")?Math.round(t(e*(Number.parseFloat(i)/100),12,e)):l.option.fontSize}get $ref(){let t=this.$refs.pop()||document.createElement("div");return t.style.cssText=l.cssText,t.dataset.mode="",t.dataset.id="",t.className="",t}get readys(){let{currentTime:t}=this.art,e=[];return this.filter("ready",t=>e.push(t)),this.filter("wait",i=>{t+.1>=i.time&&i.time>=t-.1&&e.push(i)}),e}get visibles(){let t=[],{clientWidth:e}=this.$player,i=this.getLeft(this.$player);return this.filter("emit",a=>{let n=a.$ref.offsetTop,o=this.getLeft(a.$ref)-i,s=a.$ref.clientHeight,r=a.$ref.clientWidth,l=o+r,d=l/a.$restTime,p={};p.top=n,p.left=o,p.height=s,p.width=r,p.right=e-l,p.speed=d,p.distance=l,p.time=a.$restTime,p.mode=a.mode,t.push(p)}),t}get speed(){return this.option.synchronousPlayback&&this.art.playbackRate?this.option.speed/Number(this.art.playbackRate):this.option.speed}async load(t){let{errorHandle:e}=this.utils,i=[],a=t||this.option.danmuku;try{"function"==typeof a?i=await a():a instanceof Promise?i=await a:"string"==typeof a?i=await (0,r.bilibiliDanmuParseFromUrl)(a):Array.isArray(a)&&(i=a),e(Array.isArray(i),"Danmuku need return an array as result"),void 0===t&&(this.reset(),this.queue=[],this.states={wait:[],ready:[],emit:[],stop:[]},this.$refs=[],this.$danmuku.textContent="");for(let t=0;tJSON.stringify(this.option[e])!==JSON.stringify(t[e]))||e)&&(this.option=Object.assign({},l.option,this.option,t),this.validator(this.option,l.scheme),this.option.mode=i(this.option.mode,0,2),this.option.speed=i(this.option.speed,1,10),this.option.opacity=i(this.option.opacity,0,1),this.option.lockTime=i(this.option.lockTime,1,60),this.option.maxLength=i(this.option.maxLength,1,1e3),this.option.mount=this.option.mount||a,t.fontSize&&this.reset(),this.option.visible?this.show():this.hide(),this.art.emit("artplayerPluginDanmuku:config",this.option)),this}getLeft(t){let e=t.getBoundingClientRect();return this.isRotate?e.top:e.left}postMessage(t={}){return new Promise(e=>{t.id=Date.now(),this.worker.postMessage(t),this.worker.onmessage=i=>{let{data:a}=i;a.id===t.id&&e(a)}})}filter(t,e){let i=this.states[t]||[];for(let t=0;te!==t),t.$state=e,t.$ref&&(t.$ref.dataset.state=e),this.states[e].push(t)}makeWait(t){this.setState(t,"wait"),t.$ref&&(t.$ref.style.cssText=l.cssText,t.$ref.style.visibility="hidden",t.$ref.style.marginLeft="0px",t.$ref.style.transform="translateX(0px)",t.$ref.style.transition="transform 0s linear 0s",this.$refs.push(t.$ref),t.$ref=null)}update(){let{setStyles:t}=this.utils;return this.timer=window.requestAnimationFrame(async()=>{if(this.art.playing&&!this.isHide){this.filter("emit",t=>{let e=(Date.now()-t.$lastStartTime)/1e3;t.$restTime-=e,t.$lastStartTime=Date.now(),t.$restTime<=0&&this.makeWait(t)});let e=this.readys;for(let i=0;i{0===e.mode&&(e.$ref.style.left=`${t}px`)}),this.filter("emit",e=>{if(e.$lastStartTime=Date.now(),0===e.mode){let i=t+e.$ref.clientWidth;e.$ref.style.left=`${t}px`,e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition=`transform ${e.$restTime}s linear 0s`}})}continue(){let{clientWidth:t}=this.$player;return this.filter("stop",e=>{if(this.setState(e,"emit"),e.$lastStartTime=Date.now(),0===e.mode){let i=t+e.$ref.clientWidth;e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition=`transform ${e.$restTime}s linear 0s`}}),this}suspend(){let{clientWidth:t}=this.$player;return this.filter("emit",e=>{if(this.setState(e,"stop"),0===e.mode){let i=t-(this.getLeft(e.$ref)-this.getLeft(this.$player));e.$ref.style.transform=`translateX(${-i}px)`,e.$ref.style.transition="transform 0s linear 0s"}}),this}stop(){return this.isStop=!0,this.suspend(),window.cancelAnimationFrame(this.timer),this.art.emit("artplayerPluginDanmuku:stop"),this}start(){return this.isStop=!1,this.continue(),this.update(),this.art.emit("artplayerPluginDanmuku:start"),this}reset(){return this.queue.forEach(t=>this.makeWait(t)),this.art.emit("artplayerPluginDanmuku:reset"),this}show(){return this.isHide=!1,this.$danmuku.style.opacity=1,this.option.visible=!0,this.art.emit("artplayerPluginDanmuku:show"),this}hide(){return this.isHide=!0,this.$danmuku.style.opacity=0,this.option.visible=!1,this.art.emit("artplayerPluginDanmuku:hide"),this}destroy(){this.stop(),this.worker.terminate(),this.art.off("video:play",this.start),this.art.off("video:playing",this.start),this.art.off("video:pause",this.stop),this.art.off("video:waiting",this.stop),this.art.off("resize",this.reset),this.art.off("destroy",this.destroy),this.art.emit("artplayerPluginDanmuku:destroy")}}i.default=l},{"bundle-text:./worker":"cK8sH","./bilibili":"jICn4","@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],cK8sH:[function(t,e,i,a){e.exports='!function(e,t,i,o,n,r,f,l){var d="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},u="function"==typeof d[o]&&d[o],p=u.i||{},h=u.cache||{},s="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function a(t,i){if(!h[t]){if(!e[t]){if(n[t])return n[t];var r="function"==typeof d[o]&&d[o];if(!i&&r)return r(t,!0);if(u)return u(t,!0);if(s&&"string"==typeof t)return s(t);var f=Error("Cannot find module \'"+t+"\'");throw f.code="MODULE_NOT_FOUND",f}p.resolve=function(i){var o=e[t][1][i];return null!=o?o:i},p.cache={};var l=h[t]=new a.Module(t);e[t][0].call(l.exports,p,l,l.exports,d)}return h[t].exports;function p(e){var t=p.resolve(e);return!1===t?{}:a(t)}}a.isParcelRequire=!0,a.Module=function(e){this.id=e,this.bundle=a,this.require=s,this.exports={}},a.modules=e,a.cache=h,a.parent=u,a.distDir=void 0,a.publicUrl=void 0,a.devServer=void 0,a.i=p,a.register=function(t,i){e[t]=[function(e,t){t.exports=i},{}]},Object.defineProperty(a,"root",{get:function(){return d[o]}}),d[o]=a;for(var c=0;ct.mode===e.mode&&t.top<=l).sort((e,t)=>e.top-t.top);if(0===d.length)if(2===e.mode)return l-e.height;else return r;if(d.unshift({type:"top",top:0,left:0,right:0,height:r,width:i,speed:0,distance:i}),d.push({type:"bottom",top:l,left:0,right:0,height:n,width:i,speed:0,distance:i}),2===e.mode)for(let t=d.length-2;t>=0;t-=1){let i=d[t],o=d[t+1],n=i.top+i.height;if(o.top-n>=e.height)return o.top-e.height}else for(let t=1;t=e.height)return n}let u=[];for(let e=1;et.every(t=>!(it.time))));return t&&t[0]?t[0].top:void 0}case 1:case 2:return}else{switch(e.mode){case 0:u.sort((e,t)=>{let i=Math.min(...t.map(e=>e.right)),o=Math.min(...e.map(e=>e.right));return i*t.length-o*e.length});break;case 1:case 2:u.sort((e,t)=>{let i=Math.max(...t.map(e=>e.width));return Math.max(...e.map(e=>e.width))*e.length-i*t.length})}return u[0][0].top}}onmessage=e=>{let{data:t}=e;t.id&&t.type&&globalThis.postMessage({result:(0,({getDanmuTop:n})[t.type])(t),id:t.id})}},{}]},["fpBtQ"],"fpBtQ","parcelRequire4dc0",{});'},{}],jICn4:[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");function o(t){switch(t){case 1:case 2:case 3:default:return 0;case 4:return 2;case 5:return 1}}function s(t){return"string"!=typeof t?[]:Array.from(t.matchAll(/]*?p="(?

[^"]+)"[^>]*>(?.*?)<\/d>/gs)).map(t=>{let e=t.groups.p.split(",");return e.length>=8?{text:t.groups.text.trim().replaceAll(""",'"').replaceAll("'","'").replaceAll("<","<").replaceAll(">",">").replaceAll("&","&"),time:Number(e[0]),mode:o(Number(e[1])),fontSize:Number(e[2]),color:`#${Number(e[3]).toString(16)}`,timestamp:Number(e[4]),pool:Number(e[5]),userID:e[6],rowID:Number(e[7])}:null}).filter(Boolean)}function r({data:t}){let{xml:e,id:i}=t;i&&e&&globalThis.postMessage({danmus:s(e),id:i})}function l(t){return new Promise(async e=>{let i=await fetch(t),a=await i.text();try{let t=function(){let t=new Blob([` ${o.toString()} ${s.toString()} onmessage = ${r.toString()} `],{type:"application/javascript"});return new Worker(URL.createObjectURL(t))}();t.onmessage=i=>{let{danmus:a,id:n}=i.data;n&&a&&(e(a),t.terminate())},t.postMessage({xml:a,id:Date.now()})}catch(t){console.error("Error parsing Bilibili Danmu:",t),e(s(a))}})}n.defineInteropFlag(i),n.export(i,"bilibiliDanmuParseFromUrl",()=>l)},{"@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],"6ykb1":[function(t,e,i,a){i.interopDefault=function(t){return t&&t.__esModule?t:{default:t}},i.defineInteropFlag=function(t){Object.defineProperty(t,"__esModule",{value:!0})},i.exportAll=function(t,e){return Object.keys(t).forEach(function(i){"default"===i||"__esModule"===i||Object.prototype.hasOwnProperty.call(e,i)||Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[i]}})}),e},i.export=function(t,e,i){Object.defineProperty(t,e,{enumerable:!0,get:i})}},{}],hjtgU:[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i),n.export(i,"default",()=>s);let o={map:(t,e,i,a,n)=>(t-e)*(n-a)/(i-e)+a,range(t,e,i){let a=Math.round(t/i)*i;return Array.from({length:Math.floor((e-t)/i)},(t,e)=>e*i+a)}};function s(t,e,i){let{query:a}=t.constructor.utils;t.controls.add({name:"heatmap",position:"top",html:"",style:{position:"absolute",top:"-100px",left:"0px",right:"0px",height:"100px",width:"100%",pointerEvents:"none"},mounted(n){let s=null,r=null;function l(d=[]){if(s=null,r=null,n.innerHTML="",!t.duration||t.option.isLive)return;let p={w:n.offsetWidth,h:n.offsetHeight},u={xMin:0,xMax:p.w,yMin:0,yMax:128,scale:.25,opacity:.2,minHeight:Math.floor(.05*p.h),sampling:Math.floor(p.w/100),smoothing:.2,flattening:.2};"object"==typeof i&&Object.assign(u,i);let h=[];if(Array.isArray(d)&&d.length)h=[...d];else{let i=t.duration/p.w;for(let t=0;t<=p.w;t+=u.sampling){let a=e.queue.filter(({time:e})=>e>t*i&&e<=(t+u.sampling)*i).length;h.push([t,a])}}if(0===h.length)return;let m=h[h.length-1],c=m[0],f=m[1];c!==p.w&&h.push([p.w,f]);let g=h.map(t=>t[1]),y=(Math.min(...g)+Math.max(...g))/2;for(let t=0;ty?1+u.scale:1-u.scale)+u.minHeight}let v=(t,e,i,a)=>{let n=function(t,e){let i=e[0]-t[0],a=e[1]-t[1];return{length:Math.sqrt(i**2+a**2),angle:Math.atan2(a,i)}}(e||t,i||t),s=o.map(Math.cos(n.angle)*u.flattening,0,1,1,0),r=n.angle*s+(a?Math.PI:0),l=n.length*u.smoothing;return[t[0]+Math.cos(r)*l,t[1]+Math.sin(r)*l]},x=h.map(t=>[o.map(t[0],u.xMin,u.xMax,0,p.w),o.map(t[1],u.yMin,u.yMax,p.h,0)]).reduce((t,e,i,a)=>0===i?`M ${a[a.length-1][0]},${p.h} L ${e[0]},${p.h} L ${e[0]},${e[1]}`:`${t} ${((t,e,i)=>{let a=v(i[e-1],i[e-2],t),n=v(t,i[e-1],i[e+1],!0),o=e===i.length-1?" z":"";return`C ${a[0]},${a[1]} ${n[0]},${n[1]} ${t[0]},${t[1]}${o}`})(e,i,a)}`,"");n.innerHTML=``,s=a("#heatmap-start",n),r=a("#heatmap-stop",n),s.setAttribute("offset",`${100*t.played}%`),r.setAttribute("offset",`${100*t.played}%`)}t.on("video:timeupdate",()=>{s&&r&&(s.setAttribute("offset",`${100*t.played}%`),r.setAttribute("offset",`${100*t.played}%`))}),t.on("setBar",(t,e)=>{s&&r&&"played"===t&&(s.setAttribute("offset",`${100*e}%`),r.setAttribute("offset",`${100*e}%`))}),t.on("ready",()=>l()),t.on("resize",()=>l()),t.on("artplayerPluginDanmuku:loaded",()=>l()),t.on("artplayerPluginDanmuku:points",t=>l(t))}})}},{"@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],ho690:[function(t,e,i,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(i);var o=t("bundle-text:./img/check_off.svg"),s=n.interopDefault(o),r=t("bundle-text:./img/check_on.svg"),l=n.interopDefault(r),d=t("bundle-text:./img/config.svg"),p=n.interopDefault(d),u=t("bundle-text:./img/mode_0_off.svg"),h=n.interopDefault(u),m=t("bundle-text:./img/mode_0_on.svg"),c=n.interopDefault(m),f=t("bundle-text:./img/mode_1_off.svg"),g=n.interopDefault(f),y=t("bundle-text:./img/mode_1_on.svg"),v=n.interopDefault(y),x=t("bundle-text:./img/mode_2_off.svg"),k=n.interopDefault(x),b=t("bundle-text:./img/mode_2_on.svg"),$=n.interopDefault(b),w=t("bundle-text:./img/off.svg"),M=n.interopDefault(w),D=t("bundle-text:./img/on.svg"),S=n.interopDefault(D),E=t("bundle-text:./img/style.svg"),q=n.interopDefault(E),T=t("bundle-text:./style.less"),A=n.interopDefault(T);if(i.default=class{constructor(t,e){this.art=t,this.danmuku=e,this.utils=t.constructor.utils;let{setStyle:i}=this.utils,{$controlsCenter:a}=t.template;i(a,"display","flex"),this.template={$controlsCenter:a,$mount:a,$danmuku:null,$toggle:null,$config:null,$configPanel:null,$configModes:null,$style:null,$stylePanel:null,$styleModes:null,$colors:null,$opacitySlider:null,$opacityValue:null,$marginSlider:null,$marginValue:null,$fontSizeSlider:null,$fontSizeValue:null,$speedSlider:null,$speedValue:null,$input:null,$send:null},this.slider={opacity:null,margin:null,fontSize:null,speed:null},this.emitting=!1,this.isLock=!1,this.timer=null,this.createTemplate(),this.createSliders(),this.createEvents(),this.mount(this.option.mount),t.on("resize",()=>this.resize()),t.on("fullscreen",t=>this.onFullscreen(t)),t.on("fullscreenWeb",t=>this.onFullscreen(t)),t.proxy(this.template.$config,"mouseenter",()=>{this.onMouseEnter({$control:this.template.$config,$panel:this.template.$configPanel})}),t.proxy(this.template.$style,"mouseenter",()=>{this.onMouseEnter({$control:this.template.$style,$panel:this.template.$stylePanel})})}static get icons(){return{$on:S.default,$off:M.default,$config:p.default,$style:q.default,$mode_0_off:h.default,$mode_0_on:c.default,$mode_1_off:g.default,$mode_1_on:v.default,$mode_2_off:k.default,$mode_2_on:$.default,$check_on:l.default,$check_off:s.default}}get option(){return this.danmuku.option}get outside(){return this.template.$mount!==this.template.$controlsCenter}get TEMPLATE(){let{option:t}=this;return`

${S.default}${M.default}
${p.default}
\u{6309}\u{7C7B}\u{578B}\u{5C4F}\u{853D}
${h.default}${c.default}
\u{6EDA}\u{52A8}
${g.default}${v.default}
\u{9876}\u{90E8}
${k.default}${$.default}
\u{5E95}\u{90E8}
${l.default}${s.default} \u{9632}\u{6B62}\u{5F39}\u{5E55}\u{91CD}\u{53E0}
${l.default}${s.default} \u{540C}\u{6B65}\u{89C6}\u{9891}\u{901F}\u{5EA6}
\u{4E0D}\u{900F}\u{660E}\u{5EA6}
\u{672A}\u{77E5}
\u{663E}\u{793A}\u{533A}\u{57DF}
\u{672A}\u{77E5}
\u{5F39}\u{5E55}\u{5B57}\u{53F7}
\u{672A}\u{77E5}
\u{5F39}\u{5E55}\u{901F}\u{5EA6}
\u{672A}\u{77E5}
${q.default}
\u{6A21}\u{5F0F}
${c.default}
\u{6EDA}\u{52A8}
${v.default}
\u{9876}\u{90E8}
${$.default}
\u{5E95}\u{90E8}
\u{989C}\u{8272}
${this.COLOR.map(t=>`
`).join("")}
\u{53D1}\u{9001}
`}get OPACITY(){return{min:0,max:100,steps:[],...this.option.OPACITY}}get FONT_SIZE(){return{min:12,max:120,steps:[],...this.option.FONT_SIZE}}get MARGIN(){return{min:0,max:3,steps:[{name:"1/4",value:[10,"75%"]},{name:"半屏",value:[10,"50%"]},{name:"3/4",value:[10,"25%"]},{name:"满屏",value:[10,10]}],...this.option.MARGIN}}get SPEED(){return{min:0,max:4,steps:[{name:"极慢",value:10},{name:"较慢",value:7.5,hide:!0},{name:"适中",value:5},{name:"较快",value:2.5,hide:!0},{name:"极快",value:1}],...this.option.SPEED}}get COLOR(){return this.option.COLOR.length?this.option.COLOR:["#FE0302","#FF7204","#FFAA02","#FFD302","#FFFF00","#A0EE00","#00CD00","#019899","#4266BE","#89D5FF","#CC0273","#222222","#9B9B9B","#FFFFFF"]}query(t){let{query:e}=this.utils,{$danmuku:i}=this.template;return e(t,i)}append(t,e){let{append:i}=this.utils;[...t.children].includes(e)||i(t,e)}setData(t,e){let{$player:i}=this.art.template,{$mount:a}=this.template;i.dataset[t]=e,this.outside&&(a.dataset[t]=e)}createTemplate(){let{createElement:t,tooltip:e}=this.utils,i=t("div");i.className="artplayer-plugin-danmuku",i.innerHTML=this.TEMPLATE,this.template.$danmuku=i,this.template.$toggle=this.query(".apd-toggle"),this.template.$config=this.query(".apd-config"),this.template.$configPanel=this.query(".apd-config-panel"),this.template.$configModes=this.query(".apd-config-mode .apd-modes"),this.template.$style=this.query(".apd-style"),this.template.$stylePanel=this.query(".apd-style-panel"),this.template.$styleModes=this.query(".apd-style-mode .apd-modes"),this.template.$colors=this.query(".apd-colors"),this.template.$antiOverlap=this.query(".apd-anti-overlap"),this.template.$syncVideo=this.query(".apd-sync-video"),this.template.$opacitySlider=this.query(".apd-config-opacity .apd-slider"),this.template.$opacityValue=this.query(".apd-config-opacity .apd-value"),this.template.$marginSlider=this.query(".apd-config-margin .apd-slider"),this.template.$marginValue=this.query(".apd-config-margin .apd-value"),this.template.$fontSizeSlider=this.query(".apd-config-fontSize .apd-slider"),this.template.$fontSizeValue=this.query(".apd-config-fontSize .apd-value"),this.template.$speedSlider=this.query(".apd-config-speed .apd-slider"),this.template.$speedValue=this.query(".apd-config-speed .apd-value"),this.template.$input=this.query(".apd-input"),this.template.$send=this.query(".apd-send");let{$toggle:a}=this.template;this.art.on("artplayerPluginDanmuku:show",()=>{e(a,"关闭弹幕")}),this.art.on("artplayerPluginDanmuku:hide",()=>{e(a,"打开弹幕")})}createEvents(){let{$toggle:t,$configModes:e,$styleModes:i,$colors:a,$antiOverlap:n,$syncVideo:o,$send:s,$input:r}=this.template;this.art.proxy(t,"click",()=>{this.danmuku.config({visible:!this.option.visible}),this.reset()}),this.art.proxy(e,"click",t=>{let e=t.target.closest(".apd-mode");if(!e)return;let i=Number(e.dataset.mode);this.option.modes.includes(i)?this.danmuku.config({modes:this.option.modes.filter(t=>t!==i)}):this.danmuku.config({modes:[...this.option.modes,i]}),this.reset()}),this.art.proxy(n,"click",()=>{this.danmuku.config({antiOverlap:!this.option.antiOverlap}),this.reset()}),this.art.proxy(o,"click",()=>{this.danmuku.config({synchronousPlayback:!this.option.synchronousPlayback}),this.reset()}),this.art.proxy(i,"click",t=>{let e=t.target.closest(".apd-mode");if(!e)return;let i=Number(e.dataset.mode);this.danmuku.config({mode:i}),this.reset()}),this.art.proxy(a,"click",t=>{let e=t.target.closest(".apd-color");e&&(this.danmuku.config({color:e.dataset.color}),this.reset())}),this.art.proxy(s,"click",()=>this.emit()),this.art.proxy(r,"keypress",t=>{"Enter"===t.key&&(t.preventDefault(),this.emit())})}createSliders(){this.slider.opacity=this.createSlider({...this.OPACITY,container:this.template.$opacitySlider,findIndex:()=>Math.round(100*this.option.opacity),onChange:t=>{let{$opacityValue:e}=this.template;e.textContent=`${t}%`,this.danmuku.config({opacity:t/100})}}),this.slider.margin=this.createSlider({...this.MARGIN,container:this.template.$marginSlider,findIndex:()=>this.MARGIN.steps.findIndex(t=>t.value[0]===this.option.margin[0]&&t.value[1]===this.option.margin[1]),onChange:t=>{let e=this.MARGIN.steps[t];if(!e)return;let{$marginValue:i}=this.template;i.textContent=e.name,this.danmuku.config({margin:e.value})}}),this.slider.fontSize=this.createSlider({...this.FONT_SIZE,container:this.template.$fontSizeSlider,findIndex:()=>this.danmuku.fontSize,onChange:t=>{let{$fontSizeValue:e}=this.template;e.textContent=`${t}px`,t!==this.danmuku.fontSize&&this.danmuku.config({fontSize:t})}}),this.slider.speed=this.createSlider({...this.SPEED,container:this.template.$speedSlider,findIndex:()=>this.SPEED.steps.findIndex(t=>t.value===this.option.speed),onChange:t=>{let e=this.SPEED.steps[t];if(!e)return;let{$speedValue:i}=this.template;i.textContent=e.name,this.danmuku.config({speed:e.value})}})}createSlider({min:t,max:e,container:i,findIndex:a,onChange:n,steps:o=[]}){let{query:s,clamp:r,setStyle:l}=this.utils;l(i,"touch-action","none"),i.innerHTML=`
${o.map(()=>'
').join("")}
${o.map(t=>t.hide?"":`
${t.name}
`).join("")}
`;let d=s(".apd-slider-dot",i),p=s(".apd-slider-progress",i),u=!1;function h(i=a()){if(ie)return;let s=(i-t)/(e-t);d.style.left=`${100*s}%`,0===o.length&&(p.style.width=d.style.left),n(i)}function m(a){let{top:n,height:o,left:s,width:l}=i.getBoundingClientRect();this.art.isRotate?h(Math.round(r(a.clientY-n,0,o)/o*(e-t)+t)):h(Math.round(r(a.clientX-s,0,l)/l*(e-t)+t))}return this.art.proxy(i,"click",t=>{m.call(this,t)}),this.art.proxy(i,"pointerdown",t=>{u=0===t.button}),this.art.proxy(document,"pointermove",t=>{u&&m.call(this,t)}),this.art.proxy(document,"pointerup",t=>{u&&(u=!1,m.call(this,t))}),{reset:h}}onFullscreen(t){let{$danmuku:e,$controlsCenter:i,$mount:a}=this.template;this.outside?t?this.append(i,e):this.append(a,e):this.append(i,e)}onMouseEnter({$control:t,$panel:e}){let{$player:i}=this.art.template,a=t.getBoundingClientRect(),n=e.getBoundingClientRect(),o=i.getBoundingClientRect(),s=n.width/2-a.width/2,r=o.left-(a.left-s),l=a.right+s-o.right;r>0?e.style.left=`${-s+r}px`:l>0?e.style.left=`${-s-l}px`:e.style.left=`${-s}px`}async emit(){let{$input:t}=this.template,e=t.value.trim();if(!e.length||this.isLock||this.emitting)return;let i={text:e,mode:this.option.mode,color:this.option.color,time:this.art.currentTime};try{this.emitting=!0;let e=await this.option.beforeEmit(i);if(this.emitting=!1,!0!==e)return;i.border=!0,delete i.time,this.danmuku.emit(i),t.value="",this.lock()}catch(t){console.error("Error emitting danmuku:",t),this.emitting=!1}}lock(){let{addClass:t}=this.utils,{$send:e}=this.template;this.isLock=!0;let i=this.option.lockTime;e.textContent=i,t(e,"apd-lock");let a=()=>{this.timer=setTimeout(()=>{0===i?this.unlock():(e.textContent=i-=1,a())},1e3)};a()}unlock(){let{removeClass:t}=this.utils,{$send:e}=this.template;clearTimeout(this.timer),this.isLock=!1,e.textContent="发送",t(e,"apd-lock")}resize(){if(this.outside||this.art.fullscreen||this.art.fullscreenWeb)return;let{$player:t,$controlsCenter:e}=this.art.template,{$danmuku:i}=this.template;this.art.widtht.dataset.color===this.option.color.toUpperCase());n&&t(n,"apd-active"),e(i,this.option.visible?"关闭弹幕":"打开弹幕"),this.resize()}mount(t){let{errorHandle:e}=this.utils,i="string"==typeof t?document.querySelector(t):t;e(i,`Can not find the mount point: ${t}`),this.append(i,this.template.$danmuku),this.template.$mount=i,this.reset()}},"undefined"!=typeof document){let t="artplayer-plugin-danmuku",e=document.getElementById(t);e||((e=document.createElement("style")).id=t,"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{document.head.appendChild(e)}):(document.head||document.documentElement).appendChild(e)),e.textContent=A.default}},{"bundle-text:./img/check_off.svg":"gf3jX","bundle-text:./img/check_on.svg":"9EUUq","bundle-text:./img/config.svg":"jqR46","bundle-text:./img/mode_0_off.svg":"fFoDs","bundle-text:./img/mode_0_on.svg":"hkEt9","bundle-text:./img/mode_1_off.svg":"3n5ax","bundle-text:./img/mode_1_on.svg":"hJjtU","bundle-text:./img/mode_2_off.svg":"dWW5U","bundle-text:./img/mode_2_on.svg":"1QGuJ","bundle-text:./img/off.svg":"bMJJY","bundle-text:./img/on.svg":"2h5UL","bundle-text:./img/style.svg":"9tkqu","bundle-text:./style.less":"e4L1w","@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],gf3jX:[function(t,e,i,a){e.exports=''},{}],"9EUUq":[function(t,e,i,a){e.exports=''},{}],jqR46:[function(t,e,i,a){e.exports=''},{}],fFoDs:[function(t,e,i,a){e.exports=''},{}],hkEt9:[function(t,e,i,a){e.exports=''},{}],"3n5ax":[function(t,e,i,a){e.exports=''},{}],hJjtU:[function(t,e,i,a){e.exports=''},{}],dWW5U:[function(t,e,i,a){e.exports=''},{}],"1QGuJ":[function(t,e,i,a){e.exports=''},{}],bMJJY:[function(t,e,i,a){e.exports=''},{}],"2h5UL":[function(t,e,i,a){e.exports=''},{}],"9tkqu":[function(t,e,i,a){e.exports=''},{}],e4L1w:[function(t,e,i,a){e.exports='.artplayer-plugin-danmuku{z-index:99;color:#fff;flex-shrink:0;justify-content:center;align-items:center;gap:10px;width:100%;height:32px;font-size:12px;font-weight:300;display:flex;position:relative}.artplayer-plugin-danmuku .apd-icon{cursor:pointer;opacity:.75;fill:#fff;transition:all .2s}.artplayer-plugin-danmuku .apd-icon:hover{opacity:1}.artplayer-plugin-danmuku .apd-config{display:flex;position:relative}.artplayer-plugin-danmuku .apd-config .apd-config-panel{opacity:0;pointer-events:none;width:320px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-config .apd-config-panel .apd-config-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-config:hover .apd-config-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-config-mode,.artplayer-plugin-danmuku .apd-config-slider,.artplayer-plugin-danmuku .apd-config-other,.artplayer-plugin-danmuku .apd-style-mode{margin-bottom:15px}.artplayer-plugin-danmuku .apd-modes{align-items:center;gap:20px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-modes .apd-mode{cursor:pointer;text-align:center}.artplayer-plugin-danmuku .apd-modes .apd-mode:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-config-slider{align-items:center;gap:12px;display:flex}.artplayer-plugin-danmuku .apd-config-slider .apd-value{text-align:right;width:32px}.artplayer-plugin-danmuku .apd-slider{cursor:pointer;flex:1;justify-content:center;align-items:center;height:20px;display:flex;position:relative}.artplayer-plugin-danmuku .apd-slider .apd-slider-line{background-color:#ffffff40;border-radius:3px;width:100%;height:2px;position:relative;overflow:hidden}.artplayer-plugin-danmuku .apd-slider .apd-slider-points{justify-content:space-between;align-items:center;display:flex;position:absolute;inset:0}.artplayer-plugin-danmuku .apd-slider .apd-slider-points .apd-slider-point{background-color:#ffffff80;border-radius:50%;width:2px;height:2px}.artplayer-plugin-danmuku .apd-slider .apd-slider-progress{background-color:#00a1d6;width:0%;height:100%}.artplayer-plugin-danmuku .apd-slider .apd-slider-dot{background-color:#00a1d6;border-radius:50%;width:12px;height:12px;position:absolute;left:0%;transform:translate(-6px)}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps{color:#777;justify-content:space-between;align-items:center;width:calc(100% + 32px);display:flex;position:absolute;bottom:-12px}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps .apd-slider-step{text-align:center;flex-shrink:0;width:36px;scale:.95}.artplayer-plugin-danmuku .apd-config-other{align-items:center;gap:20px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-check-off,.artplayer-plugin-danmuku .apd-config-other .apd-check-on{width:16px;height:16px}.artplayer-plugin-danmuku .apd-config-other .apd-other{cursor:pointer;align-items:center;gap:2px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-other:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-emitter{background-color:#ffffff40;border-radius:5px;flex:1;align-items:center;height:100%;display:flex}.artplayer-plugin-danmuku .apd-style{justify-content:center;align-items:center;display:flex;position:relative}.artplayer-plugin-danmuku .apd-style .apd-style-panel{opacity:0;pointer-events:none;width:200px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-style .apd-style-panel .apd-style-panel-inner{background-color:#000000d9;border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-style:hover .apd-style-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-colors{flex-wrap:wrap;gap:8px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-colors .apd-color{cursor:pointer;border-radius:2px;width:16px;height:16px}.artplayer-plugin-danmuku .apd-colors .apd-color.apd-active{border:1px solid #000;box-shadow:0 0 0 1px #fff}.artplayer-plugin-danmuku .apd-input{color:#fff;background-color:#0000;border:none;outline:none;flex:1;width:auto;min-width:0;height:100%;line-height:1}.artplayer-plugin-danmuku .apd-input::placeholder{color:#ffffff80}.artplayer-plugin-danmuku .apd-send{cursor:pointer;width:60px;height:100%;text-shadow:none;background-color:#00a1d6;border-top-right-radius:5px;border-bottom-right-radius:5px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.artplayer-plugin-danmuku .apd-send.apd-lock{cursor:not-allowed;color:#666;background-color:#e7e7e7}.art-controls-center .apd-emitter{flex:none;width:260px}.art-fullscreen .artplayer-plugin-danmuku,.art-fullscreen-web .artplayer-plugin-danmuku{gap:16px;height:38px}.art-fullscreen .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen-web .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-on,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-on{width:28px;height:28px}.art-fullscreen .artplayer-plugin-danmuku .apd-emitter,.art-fullscreen-web .artplayer-plugin-danmuku .apd-emitter{flex:none;width:400px}.art-video-player>.artplayer-plugin-danmuku{padding:0 10px;position:absolute;bottom:-40px;left:0;right:0}.art-video-player:has(>.artplayer-plugin-danmuku){margin-bottom:40px}[data-danmuku-emitter=false] .apd-emitter{display:none!important}[data-danmuku-emitter=false] .art-controls-center .artplayer-plugin-danmuku{justify-content:flex-end;gap:18px}[data-danmuku-emitter=false].art-fullscreen .art-controls-center .artplayer-plugin-danmuku,[data-danmuku-emitter=false].art-fullscreen-web .art-controls-center .artplayer-plugin-danmuku{gap:24px}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-icon{fill:#333}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-emitter{background-color:#f1f2f3}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input{color:#000}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input::placeholder{color:#0000004d}[data-danmuku-visible=false] .apd-toggle-off{display:block}[data-danmuku-visible=false] .apd-toggle-on,[data-danmuku-visible=true] .apd-toggle-off{display:none}[data-danmuku-visible=true] .apd-toggle-on{display:block}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-on{display:none}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-off,[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-on{display:block}[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-off,[data-danmuku-sync-video=false] .apd-sync-video .apd-check-on{display:none}[data-danmuku-sync-video=false] .apd-sync-video .apd-check-off,[data-danmuku-sync-video=true] .apd-sync-video .apd-check-on{display:block}[data-danmuku-sync-video=true] .apd-sync-video .apd-check-off{display:none}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-off{display:block}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-on{display:none}[data-danmuku-mode0=false] .art-danmuku [data-mode="0"]{opacity:0!important}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-off{display:none}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-on{display:block}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"]{color:#00a1d6}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"] path{fill:#00a1d6}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-off{display:block}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-on{display:none}[data-danmuku-mode1=false] .art-danmuku [data-mode="1"]{opacity:0!important}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-off{display:none}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-on{display:block}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"]{color:#00a1d6}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"] path{fill:#00a1d6}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-off{display:block}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-on{display:none}[data-danmuku-mode2=false] .art-danmuku [data-mode="2"]{opacity:0!important}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-off{display:none}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-on{display:block}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"]{color:#00a1d6}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"] path{fill:#00a1d6}'},{}]},["666Ok"],"666Ok","parcelRequire4dc0",{}); \ No newline at end of file diff --git a/packages/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.legacy.js b/packages/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.legacy.js index ca721b8d1..71da36514 100644 --- a/packages/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.legacy.js +++ b/packages/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.legacy.js @@ -5,4 +5,4 @@ * (c) 2017-2025 Harvey Zack * Released under the MIT License. */ -!function(e,t,n,r,a,i,o,s){var l="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},u="function"==typeof l[r]&&l[r],c=u.i||{},d=u.cache||{},p="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function f(t,n){if(!d[t]){if(!e[t]){if(a[t])return a[t];var i="function"==typeof l[r]&&l[r];if(!n&&i)return i(t,!0);if(u)return u(t,!0);if(p&&"string"==typeof t)return p(t);var o=Error("Cannot find module '"+t+"'");throw o.code="MODULE_NOT_FOUND",o}c.resolve=function(n){var r=e[t][1][n];return null!=r?r:n},c.cache={};var s=d[t]=new f.Module(t);e[t][0].call(s.exports,c,s,s.exports,l)}return d[t].exports;function c(e){var t=c.resolve(e);return!1===t?{}:f(t)}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.require=p,this.exports={}},f.modules=e,f.cache=d,f.parent=u,f.distDir=void 0,f.publicUrl=void 0,f.devServer=void 0,f.i=c,f.register=function(t,n){e[t]=[function(e,t){t.exports=n},{}]},Object.defineProperty(f,"root",{get:function(){return l[r]}}),l[r]=f;for(var h=0;h=n.time&&n.time>=e-.1&&t.push(n)}),t}},{key:"visibles",get:function(){var e=this,t=[],n=this.$player.clientWidth,r=this.getLeft(this.$player);return this.filter("emit",function(a){var i=a.$ref.offsetTop,o=e.getLeft(a.$ref)-r,s=a.$ref.clientHeight,l=a.$ref.clientWidth,u=o+l,c=u/a.$restTime,d={};d.top=i,d.left=o,d.height=s,d.width=l,d.right=n-u,d.speed=c,d.distance=u,d.time=a.$restTime,d.mode=a.mode,t.push(d)}),t}},{key:"speed",get:function(){return this.option.synchronousPlayback&&this.art.playbackRate?this.option.speed/Number(this.art.playbackRate):this.option.speed}},{key:"load",value:function(e){return(0,i._)(function(){var t,n,r,a,i,o;return(0,c._)(this,function(s){switch(s.label){case 0:t=this.utils.errorHandle,n=[],r=e||this.option.danmuku,s.label=1;case 1:if(s.trys.push([1,13,,14]),"function"!=typeof r)return[3,3];return[4,r()];case 2:case 4:case 6:return n=s.sent(),[3,8];case 3:if(!(r instanceof Promise))return[3,5];return[4,r];case 5:if("string"!=typeof r)return[3,7];return[4,(0,f.bilibiliDanmuParseFromUrl)(r)];case 7:Array.isArray(r)&&(n=r),s.label=8;case 8:t(Array.isArray(n),"Danmuku need return an array as result"),void 0===e&&(this.reset(),this.queue=[],this.states={wait:[],ready:[],emit:[],stop:[]},this.$refs=[],this.$danmuku.textContent=""),a=0,s.label=9;case 9:if(!(a1&&void 0!==arguments[1]&&arguments[1],a=this.utils.clamp,i=this.art.template.$controlsCenter;return(Object.keys(t).some(function(e){return JSON.stringify(n.option[e])!==JSON.stringify(t[e])})||r)&&(this.option=Object.assign({},e.option,this.option,t),this.validator(this.option,e.scheme),this.option.mode=a(this.option.mode,0,2),this.option.speed=a(this.option.speed,1,10),this.option.opacity=a(this.option.opacity,0,1),this.option.lockTime=a(this.option.lockTime,1,60),this.option.maxLength=a(this.option.maxLength,1,1e3),this.option.mount=this.option.mount||i,t.fontSize&&this.reset(),this.option.visible?this.show():this.hide(),this.art.emit("artplayerPluginDanmuku:config",this.option)),this}},{key:"getLeft",value:function(e){var t=e.getBoundingClientRect();return this.isRotate?t.top:t.left}},{key:"postMessage",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new Promise(function(n){t.id=Date.now(),e.worker.postMessage(t),e.worker.onmessage=function(e){var r=e.data;r.id===t.id&&n(r)}})}},{key:"filter",value:function(e,t){for(var n=this.states[e]||[],r=0;rt.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,r=Object.getOwnPropertySymbols(e);at.indexOf(r[a])&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]]);return n}function c(e,t,n,r){var a,o=arguments.length,s=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(("undefined"==typeof Reflect?"undefined":(0,i._)(Reflect))==="object"&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var l=e.length-1;l>=0;l--)(a=e[l])&&(s=(o<3?a(s):o>3?a(t,n,s):a(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}function d(e,t){return function(n,r){t(n,r,e)}}function p(e,t,n,r,a,o){function s(e){if(void 0!==e&&"function"!=typeof e)throw TypeError("Function expected");return e}for(var l,u=r.kind,c="getter"===u?"get":"setter"===u?"set":"value",d=!t&&e?r.static?e:e.prototype:null,p=t||(d?Object.getOwnPropertyDescriptor(d,r.name):{}),f=!1,h=n.length-1;h>=0;h--){var m={};for(var y in r)m[y]="access"===y?{}:r[y];for(var y in r.access)m.access[y]=r.access[y];m.addInitializer=function(e){if(f)throw TypeError("Cannot add initializers after decoration has completed");o.push(s(e||null))};var g=(0,n[h])("accessor"===u?{get:p.get,set:p.set}:p[c],m);if("accessor"===u){if(void 0===g)continue;if(null===g||(void 0===g?"undefined":(0,i._)(g))!=="object")throw TypeError("Object expected");(l=s(g.get))&&(p.get=l),(l=s(g.set))&&(p.set=l),(l=s(g.init))&&a.unshift(l)}else(l=s(g))&&("field"===u?a.unshift(l):p[c]=l)}d&&Object.defineProperty(d,r.name,p),f=!0}function f(e,t,n){for(var r=arguments.length>2,a=0;a0&&a[a.length-1])&&(6===u[0]||2===u[0])){i=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function k(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,a,i=n.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)o.push(r.value)}catch(e){a={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(a)throw a.error}}return o}function w(){for(var e=[],t=0;t1||s(e,t)})},t&&(r[e]=t(r[e])))}function s(e,t){try{var n;(n=a[e](t)).value instanceof S?Promise.resolve(n.value.v).then(l,u):c(i[0][2],n)}catch(e){c(i[0][3],e)}}function l(e){s("next",e)}function u(e){s("throw",e)}function c(e,t){e(t),i.shift(),i.length&&s(i[0][0],i[0][1])}}function M(e){var t,n;return t={},r("next"),r("throw",function(e){throw e}),r("return"),t[Symbol.iterator]=function(){return this},t;function r(r,a){t[r]=e[r]?function(t){return(n=!n)?{value:S(e[r](t)),done:!1}:a?a(t):t}:a}}function P(e){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=x(e),t={},r("next"),r("throw"),r("return"),t[Symbol.asyncIterator]=function(){return this},t);function r(n){t[n]=e[n]&&function(t){return new Promise(function(r,a){var i,o,s;i=r,o=a,s=(t=e[n](t)).done,Promise.resolve(t.value).then(function(e){i({value:e,done:s})},o)})}}}function D(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var E=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},T=function(e){return(T=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t})(e)};function A(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=T(e),r=0;r=0;d-=1){var l=s[d],p=s[d+1],h=l.top+l.height;if(p.top-h>=t.height)return p.top-t.height}else for(var m=1;m=t.height)return v}for(var y=[],_=1;_e.time))})});return A&&A[0]?A[0].top:void 0;case 1:case 2:return}else{switch(t.mode){case 0:y.sort(function(e,t){var r,n,o=(r=Math).min.apply(r,(0,i._)(t.map(function(e){return e.right}))),f=(n=Math).min.apply(n,(0,i._)(e.map(function(e){return e.right})));return o*t.length-f*e.length});break;case 1:case 2:y.sort(function(e,t){var r,n,o=(r=Math).max.apply(r,(0,i._)(t.map(function(e){return e.width})));return(n=Math).max.apply(n,(0,i._)(e.map(function(e){return e.width})))*e.length-o*t.length})}return y[0][0].top}}onmessage=function(e){var t=e.data;t.id&&t.type&&globalThis.postMessage({result:(0,({getDanmuTop:o})[t.type])(t),id:t.id})}},{"@swc/helpers/cjs/_to_consumable_array.cjs":"i81N6"}],i81N6:[function(e,t,r,n){"use strict";var i=e("d402183024004bc7"),o=e("3209e2b12672cd18"),f=e("fc58adb8f1bff142"),u=e("5e213dc122a10171");r._=function(e){return i._(e)||o._(e)||u._(e)||f._()}},{d402183024004bc7:"hfQG0","3209e2b12672cd18":"fQrlQ",fc58adb8f1bff142:"fWabh","5e213dc122a10171":"fh7mx"}],hfQG0:[function(e,t,r,n){"use strict";var i=e("5bd5b10bf87fc8e");r._=function(e){if(Array.isArray(e))return i._(e)}},{"5bd5b10bf87fc8e":"1WOAB"}],"1WOAB":[function(e,t,r,n){"use strict";r._=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r]*?p="(?

[^"]+)"[^>]*>(?.*?)<\\/d>',"gs");return Array.from(e.matchAll(t)).map(function(e){var t=e.groups.p.split(",");return t.length>=8?{text:e.groups.text.trim().replaceAll(""",'"').replaceAll("'","'").replaceAll("<","<").replaceAll(">",">").replaceAll("&","&"),time:Number(t[0]),mode:s(Number(t[1])),fontSize:Number(t[2]),color:"#".concat(Number(t[3]).toString(16)),timestamp:Number(t[4]),pool:Number(t[5]),userID:t[6],rowID:Number(t[7])}:null}).filter(Boolean)}function u(e){var t=e.data,n=t.xml,r=t.id;r&&n&&globalThis.postMessage({danmus:l(n),id:r})}function c(e){return new Promise(function(t){return(0,i._)(function(){var n,r;return(0,o._)(this,function(a){switch(a.label){case 0:return[4,fetch(e)];case 1:return[4,a.sent().text()];case 2:n=a.sent();try{var i;i=new Blob(["\n ".concat(s.toString(),"\n ").concat(l.toString(),"\n onmessage = ").concat(u.toString(),"\n ")],{type:"application/javascript"}),(r=new Worker(URL.createObjectURL(i))).onmessage=function(e){var n=e.data,a=n.danmus;n.id&&a&&(t(a),r.terminate())},r.postMessage({xml:n,id:Date.now()})}catch(e){console.error("Error parsing Bilibili Danmu:",e),t(l(n))}return[2]}})})()})}},{"@swc/helpers/cjs/_async_to_generator.cjs":"cZn0e","@swc/helpers/cjs/_ts_generator.cjs":"eltGh","@parcel/transformer-js/src/esmodule-helpers.js":"qpMMf"}],hLPK6:[function(e,t,n,r){var a=e("@parcel/transformer-js/src/esmodule-helpers.js");a.defineInteropFlag(n),a.export(n,"default",function(){return l});var i=e("@swc/helpers/cjs/_to_consumable_array.cjs"),o=e("@swc/helpers/cjs/_type_of.cjs"),s=function(e,t,n,r,a){return(e-t)*(a-r)/(n-t)+r};function l(e,t,n){var r=e.constructor.utils.query;e.controls.add({name:"heatmap",position:"top",html:"",style:{position:"absolute",top:"-100px",left:"0px",right:"0px",height:"100px",width:"100%",pointerEvents:"none"},mounted:function(a){var l=null,u=null;function c(){var c,d,p=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(l=null,u=null,a.innerHTML="",e.duration&&!e.option.isLive){var f={w:a.offsetWidth,h:a.offsetHeight},h={xMin:0,xMax:f.w,yMin:0,yMax:128,scale:.25,opacity:.2,minHeight:Math.floor(.05*f.h),sampling:Math.floor(f.w/100),smoothing:.2,flattening:.2};(void 0===n?"undefined":(0,o._)(n))==="object"&&Object.assign(h,n);var m=[];if(Array.isArray(p)&&p.length)m=(0,i._)(p);else for(var y=function(e){var n=t.queue.filter(function(t){var n=t.time;return n>e*g&&n<=(e+h.sampling)*g}).length;m.push([e,n])},g=e.duration/f.w,v=0;v<=f.w;v+=h.sampling)y(v);if(0!==m.length){var b=m[m.length-1],_=b[0],x=b[1];_!==f.w&&m.push([f.w,x]);for(var k=m.map(function(e){return e[1]}),w=((c=Math).min.apply(c,(0,i._)(k))+(d=Math).max.apply(d,(0,i._)(k)))/2,j=0;jw?1+h.scale:1-h.scale)+h.minHeight}var O=function(e,t,n,r){var a,i,o=t||e,l=n||e,u={length:Math.sqrt(Math.pow(a=l[0]-o[0],2)+Math.pow(i=l[1]-o[1],2)),angle:Math.atan2(i,a)},c=s(Math.cos(u.angle)*h.flattening,0,1,1,0),d=u.angle*c+(r?Math.PI:0),p=u.length*h.smoothing;return[e[0]+Math.cos(d)*p,e[1]+Math.sin(d)*p]},M=function(e,t,n){var r=O(n[t-1],n[t-2],e),a=O(e,n[t-1],n[t+1],!0),i=t===n.length-1?" z":"";return"C ".concat(r[0],",").concat(r[1]," ").concat(a[0],",").concat(a[1]," ").concat(e[0],",").concat(e[1]).concat(i)},P=m.map(function(e){return[s(e[0],h.xMin,h.xMax,0,f.w),s(e[1],h.yMin,h.yMax,f.h,0)]}).reduce(function(e,t,n,r){return 0===n?"M ".concat(r[r.length-1][0],",").concat(f.h," L ").concat(t[0],",").concat(f.h," L ").concat(t[0],",").concat(t[1]):"".concat(e," ").concat(M(t,n,r))},"");a.innerHTML='\n\n\n\n\n\n\n\n\n\n\n\n '),l=r("#heatmap-start",a),u=r("#heatmap-stop",a),l.setAttribute("offset","".concat(100*e.played,"%")),u.setAttribute("offset","".concat(100*e.played,"%"))}}}e.on("video:timeupdate",function(){l&&u&&(l.setAttribute("offset","".concat(100*e.played,"%")),u.setAttribute("offset","".concat(100*e.played,"%")))}),e.on("setBar",function(e,t){l&&u&&"played"===e&&(l.setAttribute("offset","".concat(100*t,"%")),u.setAttribute("offset","".concat(100*t,"%")))}),e.on("ready",function(){return c()}),e.on("resize",function(){return c()}),e.on("artplayerPluginDanmuku:loaded",function(){return c()}),e.on("artplayerPluginDanmuku:points",function(e){return c(e)})}})}},{"@swc/helpers/cjs/_to_consumable_array.cjs":"i81N6","@swc/helpers/cjs/_type_of.cjs":"iXhRw","@parcel/transformer-js/src/esmodule-helpers.js":"qpMMf"}],i81N6:[function(e,t,n,r){"use strict";var a=e("d402183024004bc7"),i=e("3209e2b12672cd18"),o=e("fc58adb8f1bff142"),s=e("5e213dc122a10171");n._=function(e){return a._(e)||i._(e)||s._(e)||o._()}},{d402183024004bc7:"hfQG0","3209e2b12672cd18":"fQrlQ",fc58adb8f1bff142:"fWabh","5e213dc122a10171":"fh7mx"}],hfQG0:[function(e,t,n,r){"use strict";var a=e("5bd5b10bf87fc8e");n._=function(e){if(Array.isArray(e))return a._(e)}},{"5bd5b10bf87fc8e":"1WOAB"}],"1WOAB":[function(e,t,n,r){"use strict";n._=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n\n '.concat(A.default).concat(E.default,'\n\n

\n ').concat(g.default,'\n
\n
\n
\n 按类型屏蔽\n
\n
\n ').concat(b.default).concat(x.default,'\n
滚动
\n
\n
\n ').concat(w.default).concat($.default,'\n
顶部
\n
\n
\n ').concat(O.default).concat(P.default,'\n
底部
\n
\n
\n
\n
\n
\n ').concat(m.default).concat(f.default,'\n 防止弹幕重叠\n
\n
\n ').concat(m.default).concat(f.default,'\n 同步视频速度\n
\n
\n
\n 不透明度\n
\n
未知
\n
\n
\n 显示区域\n
\n
未知
\n
\n
\n 弹幕字号\n
\n
未知
\n
\n
\n 弹幕速度\n
\n
未知
\n
\n
\n
\n
\n
\n
\n ').concat(C.default,'\n
\n
\n
\n 模式\n
\n
\n ').concat(x.default,'\n
滚动
\n
\n
\n ').concat($.default,'\n
顶部
\n
\n
\n ').concat(P.default,'\n
底部
\n
\n
\n
\n
\n 颜色\n
\n ').concat(this.COLOR.map(function(e){return'
')}).join(""),'\n
\n
\n
\n
\n
\n\n
发送
\n
\n ')}},{key:"OPACITY",get:function(){return(0,l._)({min:0,max:100,steps:[]},this.option.OPACITY)}},{key:"FONT_SIZE",get:function(){return(0,l._)({min:12,max:120,steps:[]},this.option.FONT_SIZE)}},{key:"MARGIN",get:function(){return(0,l._)({min:0,max:3,steps:[{name:"1/4",value:[10,"75%"]},{name:"半屏",value:[10,"50%"]},{name:"3/4",value:[10,"25%"]},{name:"满屏",value:[10,10]}]},this.option.MARGIN)}},{key:"SPEED",get:function(){return(0,l._)({min:0,max:4,steps:[{name:"极慢",value:10},{name:"较慢",value:7.5,hide:!0},{name:"适中",value:5},{name:"较快",value:2.5,hide:!0},{name:"极快",value:1}]},this.option.SPEED)}},{key:"COLOR",get:function(){return this.option.COLOR.length?this.option.COLOR:["#FE0302","#FF7204","#FFAA02","#FFD302","#FFFF00","#A0EE00","#00CD00","#019899","#4266BE","#89D5FF","#CC0273","#222222","#9B9B9B","#FFFFFF"]}},{key:"query",value:function(e){return(0,this.utils.query)(e,this.template.$danmuku)}},{key:"append",value:function(e,t){var n=this.utils.append;(0,c._)(e.children).includes(t)||n(e,t)}},{key:"setData",value:function(e,t){var n=this.art.template.$player,r=this.template.$mount;n.dataset[e]=t,this.outside&&(r.dataset[e]=t)}},{key:"createTemplate",value:function(){var e=this.utils,t=e.createElement,n=e.tooltip,r=t("div");r.className="artplayer-plugin-danmuku",r.innerHTML=this.TEMPLATE,this.template.$danmuku=r,this.template.$toggle=this.query(".apd-toggle"),this.template.$config=this.query(".apd-config"),this.template.$configPanel=this.query(".apd-config-panel"),this.template.$configModes=this.query(".apd-config-mode .apd-modes"),this.template.$style=this.query(".apd-style"),this.template.$stylePanel=this.query(".apd-style-panel"),this.template.$styleModes=this.query(".apd-style-mode .apd-modes"),this.template.$colors=this.query(".apd-colors"),this.template.$antiOverlap=this.query(".apd-anti-overlap"),this.template.$syncVideo=this.query(".apd-sync-video"),this.template.$opacitySlider=this.query(".apd-config-opacity .apd-slider"),this.template.$opacityValue=this.query(".apd-config-opacity .apd-value"),this.template.$marginSlider=this.query(".apd-config-margin .apd-slider"),this.template.$marginValue=this.query(".apd-config-margin .apd-value"),this.template.$fontSizeSlider=this.query(".apd-config-fontSize .apd-slider"),this.template.$fontSizeValue=this.query(".apd-config-fontSize .apd-value"),this.template.$speedSlider=this.query(".apd-config-speed .apd-slider"),this.template.$speedValue=this.query(".apd-config-speed .apd-value"),this.template.$input=this.query(".apd-input"),this.template.$send=this.query(".apd-send");var a=this.template.$toggle;this.art.on("artplayerPluginDanmuku:show",function(){n(a,"关闭弹幕")}),this.art.on("artplayerPluginDanmuku:hide",function(){n(a,"打开弹幕")})}},{key:"createEvents",value:function(){var e=this,t=this.template,n=t.$toggle,r=t.$configModes,a=t.$styleModes,i=t.$colors,o=t.$antiOverlap,s=t.$syncVideo,l=t.$send,u=t.$input;this.art.proxy(n,"click",function(){e.danmuku.config({visible:!e.option.visible}),e.reset()}),this.art.proxy(r,"click",function(t){var n=t.target.closest(".apd-mode");if(n){var r=Number(n.dataset.mode);e.option.modes.includes(r)?e.danmuku.config({modes:e.option.modes.filter(function(e){return e!==r})}):e.danmuku.config({modes:(0,c._)(e.option.modes).concat([r])}),e.reset()}}),this.art.proxy(o,"click",function(){e.danmuku.config({antiOverlap:!e.option.antiOverlap}),e.reset()}),this.art.proxy(s,"click",function(){e.danmuku.config({synchronousPlayback:!e.option.synchronousPlayback}),e.reset()}),this.art.proxy(a,"click",function(t){var n=t.target.closest(".apd-mode");if(n){var r=Number(n.dataset.mode);e.danmuku.config({mode:r}),e.reset()}}),this.art.proxy(i,"click",function(t){var n=t.target.closest(".apd-color");n&&(e.danmuku.config({color:n.dataset.color}),e.reset())}),this.art.proxy(l,"click",function(){return e.emit()}),this.art.proxy(u,"keypress",function(t){"Enter"===t.key&&(t.preventDefault(),e.emit())})}},{key:"createSliders",value:function(){var e=this;this.slider.opacity=this.createSlider((0,u._)((0,l._)({},this.OPACITY),{container:this.template.$opacitySlider,findIndex:function(){return Math.round(100*e.option.opacity)},onChange:function(t){e.template.$opacityValue.textContent="".concat(t,"%"),e.danmuku.config({opacity:t/100})}})),this.slider.margin=this.createSlider((0,u._)((0,l._)({},this.MARGIN),{container:this.template.$marginSlider,findIndex:function(){return e.MARGIN.steps.findIndex(function(t){return t.value[0]===e.option.margin[0]&&t.value[1]===e.option.margin[1]})},onChange:function(t){var n=e.MARGIN.steps[t];n&&(e.template.$marginValue.textContent=n.name,e.danmuku.config({margin:n.value}))}})),this.slider.fontSize=this.createSlider((0,u._)((0,l._)({},this.FONT_SIZE),{container:this.template.$fontSizeSlider,findIndex:function(){return e.danmuku.fontSize},onChange:function(t){e.template.$fontSizeValue.textContent="".concat(t,"px"),t!==e.danmuku.fontSize&&e.danmuku.config({fontSize:t})}})),this.slider.speed=this.createSlider((0,u._)((0,l._)({},this.SPEED),{container:this.template.$speedSlider,findIndex:function(){return e.SPEED.steps.findIndex(function(t){return t.value===e.option.speed})},onChange:function(t){var n=e.SPEED.steps[t];n&&(e.template.$speedValue.textContent=n.name,e.danmuku.config({speed:n.value}))}}))}},{key:"createSlider",value:function(e){var t=this,n=e.min,r=e.max,a=e.container,i=e.findIndex,o=e.onChange,s=e.steps,l=void 0===s?[]:s,u=this.utils,c=u.query,d=u.clamp;(0,u.setStyle)(a,"touch-action","none"),a.innerHTML='\n
\n
\n '.concat(l.map(function(){return'
'}).join(""),'\n
\n
\n
\n
\n
\n ').concat(l.map(function(e){return e.hide?"":'
'.concat(e.name,"
")}).join(""),"\n
\n ");var p=c(".apd-slider-dot",a),f=c(".apd-slider-progress",a),h=!1;function m(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:i();if(!(er)){var t=(e-n)/(r-n);p.style.left="".concat(100*t,"%"),0===l.length&&(f.style.width=p.style.left),o(e)}}function y(e){var t=a.getBoundingClientRect(),i=t.top,o=t.height,s=t.left,l=t.width;this.art.isRotate?m(Math.round(d(e.clientY-i,0,o)/o*(r-n)+n)):m(Math.round(d(e.clientX-s,0,l)/l*(r-n)+n))}return this.art.proxy(a,"click",function(e){y.call(t,e)}),this.art.proxy(a,"pointerdown",function(e){h=0===e.button}),this.art.proxy(document,"pointermove",function(e){h&&y.call(t,e)}),this.art.proxy(document,"pointerup",function(e){h&&(h=!1,y.call(t,e))}),{reset:m}}},{key:"onFullscreen",value:function(e){var t=this.template,n=t.$danmuku,r=t.$controlsCenter,a=t.$mount;this.outside?e?this.append(r,n):this.append(a,n):this.append(r,n)}},{key:"onMouseEnter",value:function(e){var t=e.$control,n=e.$panel,r=this.art.template.$player,a=t.getBoundingClientRect(),i=n.getBoundingClientRect(),o=r.getBoundingClientRect(),s=i.width/2-a.width/2,l=o.left-(a.left-s),u=a.right+s-o.right;l>0?n.style.left="".concat(-s+l,"px"):u>0?n.style.left="".concat(-s-u,"px"):n.style.left="".concat(-s,"px")}},{key:"emit",value:function(){return(0,i._)(function(){var e,t,n,r;return(0,d._)(this,function(a){switch(a.label){case 0:if(!(t=(e=this.template.$input).value.trim()).length||this.isLock||this.emitting)return[2];n={text:t,mode:this.option.mode,color:this.option.color,time:this.art.currentTime},a.label=1;case 1:return a.trys.push([1,3,,4]),this.emitting=!0,[4,this.option.beforeEmit(n)];case 2:if(r=a.sent(),this.emitting=!1,!0!==r)return[2];return n.border=!0,delete n.time,this.danmuku.emit(n),e.value="",this.lock(),[3,4];case 3:return console.error("Error emitting danmuku:",a.sent()),this.emitting=!1,[3,4];case 4:return[2]}})}).call(this)}},{key:"lock",value:function(){var e=this,t=this.utils.addClass,n=this.template.$send;this.isLock=!0;var r=this.option.lockTime;n.textContent=r,t(n,"apd-lock");var a=function(){e.timer=setTimeout(function(){0===r?e.unlock():(n.textContent=r-=1,a())},1e3)};a()}},{key:"unlock",value:function(){var e=this.utils.removeClass,t=this.template.$send;clearTimeout(this.timer),this.isLock=!1,t.textContent="发送",e(t,"apd-lock")}},{key:"resize",value:function(){if(!this.outside&&!this.art.fullscreen&&!this.art.fullscreenWeb){var e=this.art.template,t=e.$player,n=e.$controlsCenter,r=this.template.$danmuku;this.art.width'},{}],ilP9j:[function(e,t,n,r){t.exports=''},{}],"9pxJ0":[function(e,t,n,r){t.exports=''},{}],"5tLUB":[function(e,t,n,r){t.exports=''},{}],atPtW:[function(e,t,n,r){t.exports=''},{}],lYyTv:[function(e,t,n,r){t.exports=''},{}],bzdWd:[function(e,t,n,r){t.exports=''},{}],ckFYR:[function(e,t,n,r){t.exports=''},{}],"2vLQf":[function(e,t,n,r){t.exports=''},{}],"95P3w":[function(e,t,n,r){t.exports=''},{}],jLRWo:[function(e,t,n,r){t.exports=''},{}],XRdY2:[function(e,t,n,r){t.exports=''},{}],jWk9o:[function(e,t,n,r){t.exports='.artplayer-plugin-danmuku{z-index:99;color:#fff;flex-shrink:0;justify-content:center;align-items:center;gap:10px;width:100%;height:32px;font-size:12px;font-weight:300;display:flex;position:relative}.artplayer-plugin-danmuku .apd-icon{cursor:pointer;opacity:.75;fill:#fff;transition:all .2s}.artplayer-plugin-danmuku .apd-icon:hover{opacity:1}.artplayer-plugin-danmuku .apd-config{display:flex;position:relative}.artplayer-plugin-danmuku .apd-config .apd-config-panel{opacity:0;pointer-events:none;width:320px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-config .apd-config-panel .apd-config-panel-inner{background-color:rgba(0,0,0,.85);border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-config:hover .apd-config-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-config-mode,.artplayer-plugin-danmuku .apd-config-slider,.artplayer-plugin-danmuku .apd-config-other,.artplayer-plugin-danmuku .apd-style-mode{margin-bottom:15px}.artplayer-plugin-danmuku .apd-modes{align-items:center;gap:20px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-modes .apd-mode{cursor:pointer;text-align:center}.artplayer-plugin-danmuku .apd-modes .apd-mode:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-config-slider{align-items:center;gap:12px;display:flex}.artplayer-plugin-danmuku .apd-config-slider .apd-value{text-align:right;width:32px}.artplayer-plugin-danmuku .apd-slider{cursor:pointer;flex:1;justify-content:center;align-items:center;height:20px;display:flex;position:relative}.artplayer-plugin-danmuku .apd-slider .apd-slider-line{background-color:rgba(255,255,255,.25);border-radius:3px;width:100%;height:2px;position:relative;overflow:hidden}.artplayer-plugin-danmuku .apd-slider .apd-slider-points{justify-content:space-between;align-items:center;display:flex;position:absolute;top:0;bottom:0;left:0;right:0}.artplayer-plugin-danmuku .apd-slider .apd-slider-points .apd-slider-point{background-color:rgba(255,255,255,.5);border-radius:50%;width:2px;height:2px}.artplayer-plugin-danmuku .apd-slider .apd-slider-progress{background-color:#00a1d6;width:0%;height:100%}.artplayer-plugin-danmuku .apd-slider .apd-slider-dot{background-color:#00a1d6;border-radius:50%;width:12px;height:12px;position:absolute;left:0%;transform:translate(-6px)}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps{color:#777;justify-content:space-between;align-items:center;width:calc(100% + 32px);display:flex;position:absolute;bottom:-12px}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps .apd-slider-step{text-align:center;flex-shrink:0;width:36px;scale:.95}.artplayer-plugin-danmuku .apd-config-other{align-items:center;gap:20px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-check-off,.artplayer-plugin-danmuku .apd-config-other .apd-check-on{width:16px;height:16px}.artplayer-plugin-danmuku .apd-config-other .apd-other{cursor:pointer;align-items:center;gap:2px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-other:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-emitter{background-color:rgba(255,255,255,.25);border-radius:5px;flex:1;align-items:center;height:100%;display:flex}.artplayer-plugin-danmuku .apd-style{justify-content:center;align-items:center;display:flex;position:relative}.artplayer-plugin-danmuku .apd-style .apd-style-panel{opacity:0;pointer-events:none;width:200px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-style .apd-style-panel .apd-style-panel-inner{background-color:rgba(0,0,0,.85);border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-style:hover .apd-style-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-colors{flex-wrap:wrap;gap:8px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-colors .apd-color{cursor:pointer;border-radius:2px;width:16px;height:16px}.artplayer-plugin-danmuku .apd-colors .apd-color.apd-active{border:1px solid #000;box-shadow:0 0 0 1px #fff}.artplayer-plugin-danmuku .apd-input{color:#fff;background-color:transparent;border:none;outline:none;flex:1;width:auto;min-width:0;height:100%;line-height:1}.artplayer-plugin-danmuku .apd-input::placeholder{color:rgba(255,255,255,.5)}.artplayer-plugin-danmuku .apd-input::placeholder{color:rgba(255,255,255,.5)}.artplayer-plugin-danmuku .apd-send{cursor:pointer;width:60px;height:100%;text-shadow:none;background-color:#00a1d6;border-top-right-radius:5px;border-bottom-right-radius:5px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.artplayer-plugin-danmuku .apd-send.apd-lock{cursor:not-allowed;color:#666;background-color:#e7e7e7}.art-controls-center .apd-emitter{flex:none;width:260px}.art-fullscreen .artplayer-plugin-danmuku,.art-fullscreen-web .artplayer-plugin-danmuku{gap:16px;height:38px}.art-fullscreen .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen-web .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-on,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-on{width:28px;height:28px}.art-fullscreen .artplayer-plugin-danmuku .apd-emitter,.art-fullscreen-web .artplayer-plugin-danmuku .apd-emitter{flex:none;width:400px}.art-video-player>.artplayer-plugin-danmuku{padding:0 10px;position:absolute;bottom:-40px;left:0;right:0}.art-video-player:has(>.artplayer-plugin-danmuku){margin-bottom:40px}[data-danmuku-emitter=false] .apd-emitter{display:none!important}[data-danmuku-emitter=false] .art-controls-center .artplayer-plugin-danmuku{justify-content:flex-end;gap:18px}[data-danmuku-emitter=false].art-fullscreen .art-controls-center .artplayer-plugin-danmuku,[data-danmuku-emitter=false].art-fullscreen-web .art-controls-center .artplayer-plugin-danmuku{gap:24px}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-icon{fill:#333}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-emitter{background-color:#f1f2f3}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input{color:#000}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input::placeholder{color:rgba(0,0,0,.3)}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input::placeholder{color:rgba(0,0,0,.3)}[data-danmuku-visible=false] .apd-toggle-off{display:block}[data-danmuku-visible=false] .apd-toggle-on,[data-danmuku-visible=true] .apd-toggle-off{display:none}[data-danmuku-visible=true] .apd-toggle-on{display:block}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-on{display:none}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-off,[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-on{display:block}[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-off,[data-danmuku-sync-video=false] .apd-sync-video .apd-check-on{display:none}[data-danmuku-sync-video=false] .apd-sync-video .apd-check-off,[data-danmuku-sync-video=true] .apd-sync-video .apd-check-on{display:block}[data-danmuku-sync-video=true] .apd-sync-video .apd-check-off{display:none}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-off{display:block}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-on{display:none}[data-danmuku-mode0=false] .art-danmuku [data-mode="0"]{opacity:0!important}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-off{display:none}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-on{display:block}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"]{color:#00a1d6}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"] path{fill:#00a1d6}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-off{display:block}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-on{display:none}[data-danmuku-mode1=false] .art-danmuku [data-mode="1"]{opacity:0!important}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-off{display:none}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-on{display:block}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"]{color:#00a1d6}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"] path{fill:#00a1d6}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-off{display:block}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-on{display:none}[data-danmuku-mode2=false] .art-danmuku [data-mode="2"]{opacity:0!important}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-off{display:none}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-on{display:block}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"]{color:#00a1d6}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"] path{fill:#00a1d6}'},{}]},["l3CkF"],"l3CkF","parcelRequire4dc0",{}); \ No newline at end of file +!function(e,t,n,r,a,i,o,s){var l="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},u="function"==typeof l[r]&&l[r],c=u.i||{},d=u.cache||{},p="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function f(t,n){if(!d[t]){if(!e[t]){if(a[t])return a[t];var i="function"==typeof l[r]&&l[r];if(!n&&i)return i(t,!0);if(u)return u(t,!0);if(p&&"string"==typeof t)return p(t);var o=Error("Cannot find module '"+t+"'");throw o.code="MODULE_NOT_FOUND",o}c.resolve=function(n){var r=e[t][1][n];return null!=r?r:n},c.cache={};var s=d[t]=new f.Module(t);e[t][0].call(s.exports,c,s,s.exports,l)}return d[t].exports;function c(e){var t=c.resolve(e);return!1===t?{}:f(t)}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.require=p,this.exports={}},f.modules=e,f.cache=d,f.parent=u,f.distDir=void 0,f.publicUrl=void 0,f.devServer=void 0,f.i=c,f.register=function(t,n){e[t]=[function(e,t){t.exports=n},{}]},Object.defineProperty(f,"root",{get:function(){return l[r]}}),l[r]=f;for(var h=0;h=n.time&&n.time>=e-.1&&t.push(n)}),t}},{key:"visibles",get:function(){var e=this,t=[],n=this.$player.clientWidth,r=this.getLeft(this.$player);return this.filter("emit",function(a){var i=a.$ref.offsetTop,o=e.getLeft(a.$ref)-r,s=a.$ref.clientHeight,l=a.$ref.clientWidth,u=o+l,c=u/a.$restTime,d={};d.top=i,d.left=o,d.height=s,d.width=l,d.right=n-u,d.speed=c,d.distance=u,d.time=a.$restTime,d.mode=a.mode,t.push(d)}),t}},{key:"speed",get:function(){return this.option.synchronousPlayback&&this.art.playbackRate?this.option.speed/Number(this.art.playbackRate):this.option.speed}},{key:"load",value:function(e){return(0,i._)(function(){var t,n,r,a,i,o;return(0,c._)(this,function(s){switch(s.label){case 0:t=this.utils.errorHandle,n=[],r=e||this.option.danmuku,s.label=1;case 1:if(s.trys.push([1,13,,14]),"function"!=typeof r)return[3,3];return[4,r()];case 2:case 4:case 6:return n=s.sent(),[3,8];case 3:if(!(r instanceof Promise))return[3,5];return[4,r];case 5:if("string"!=typeof r)return[3,7];return[4,(0,f.bilibiliDanmuParseFromUrl)(r)];case 7:Array.isArray(r)&&(n=r),s.label=8;case 8:t(Array.isArray(n),"Danmuku need return an array as result"),void 0===e&&(this.reset(),this.queue=[],this.states={wait:[],ready:[],emit:[],stop:[]},this.$refs=[],this.$danmuku.textContent=""),a=0,s.label=9;case 9:if(!(a1&&void 0!==arguments[1]&&arguments[1],a=this.utils.clamp,i=this.art.template.$controlsCenter;return(Object.keys(t).some(function(e){return JSON.stringify(n.option[e])!==JSON.stringify(t[e])})||r)&&(this.option=Object.assign({},e.option,this.option,t),this.validator(this.option,e.scheme),this.option.mode=a(this.option.mode,0,2),this.option.speed=a(this.option.speed,1,10),this.option.opacity=a(this.option.opacity,0,1),this.option.lockTime=a(this.option.lockTime,1,60),this.option.maxLength=a(this.option.maxLength,1,1e3),this.option.mount=this.option.mount||i,t.fontSize&&this.reset(),this.option.visible?this.show():this.hide(),this.art.emit("artplayerPluginDanmuku:config",this.option)),this}},{key:"getLeft",value:function(e){var t=e.getBoundingClientRect();return this.isRotate?t.top:t.left}},{key:"postMessage",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new Promise(function(n){t.id=Date.now(),e.worker.postMessage(t),e.worker.onmessage=function(e){var r=e.data;r.id===t.id&&n(r)}})}},{key:"filter",value:function(e,t){for(var n=this.states[e]||[],r=0;rt.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,r=Object.getOwnPropertySymbols(e);at.indexOf(r[a])&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]]);return n}function c(e,t,n,r){var a,o=arguments.length,s=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(("undefined"==typeof Reflect?"undefined":(0,i._)(Reflect))==="object"&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var l=e.length-1;l>=0;l--)(a=e[l])&&(s=(o<3?a(s):o>3?a(t,n,s):a(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}function d(e,t){return function(n,r){t(n,r,e)}}function p(e,t,n,r,a,o){function s(e){if(void 0!==e&&"function"!=typeof e)throw TypeError("Function expected");return e}for(var l,u=r.kind,c="getter"===u?"get":"setter"===u?"set":"value",d=!t&&e?r.static?e:e.prototype:null,p=t||(d?Object.getOwnPropertyDescriptor(d,r.name):{}),f=!1,h=n.length-1;h>=0;h--){var m={};for(var y in r)m[y]="access"===y?{}:r[y];for(var y in r.access)m.access[y]=r.access[y];m.addInitializer=function(e){if(f)throw TypeError("Cannot add initializers after decoration has completed");o.push(s(e||null))};var g=(0,n[h])("accessor"===u?{get:p.get,set:p.set}:p[c],m);if("accessor"===u){if(void 0===g)continue;if(null===g||(void 0===g?"undefined":(0,i._)(g))!=="object")throw TypeError("Object expected");(l=s(g.get))&&(p.get=l),(l=s(g.set))&&(p.set=l),(l=s(g.init))&&a.unshift(l)}else(l=s(g))&&("field"===u?a.unshift(l):p[c]=l)}d&&Object.defineProperty(d,r.name,p),f=!0}function f(e,t,n){for(var r=arguments.length>2,a=0;a0&&a[a.length-1])&&(6===u[0]||2===u[0])){i=0;continue}if(3===u[0]&&(!a||u[1]>a[0]&&u[1]=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function k(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,a,i=n.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)o.push(r.value)}catch(e){a={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(a)throw a.error}}return o}function w(){for(var e=[],t=0;t1||s(e,t)})},t&&(r[e]=t(r[e])))}function s(e,t){try{var n;(n=a[e](t)).value instanceof S?Promise.resolve(n.value.v).then(l,u):c(i[0][2],n)}catch(e){c(i[0][3],e)}}function l(e){s("next",e)}function u(e){s("throw",e)}function c(e,t){e(t),i.shift(),i.length&&s(i[0][0],i[0][1])}}function M(e){var t,n;return t={},r("next"),r("throw",function(e){throw e}),r("return"),t[Symbol.iterator]=function(){return this},t;function r(r,a){t[r]=e[r]?function(t){return(n=!n)?{value:S(e[r](t)),done:!1}:a?a(t):t}:a}}function P(e){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=x(e),t={},r("next"),r("throw"),r("return"),t[Symbol.asyncIterator]=function(){return this},t);function r(n){t[n]=e[n]&&function(t){return new Promise(function(r,a){var i,o,s;i=r,o=a,s=(t=e[n](t)).done,Promise.resolve(t.value).then(function(e){i({value:e,done:s})},o)})}}}function D(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var E=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},T=function(e){return(T=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t})(e)};function A(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=T(e),r=0;r=0;d-=1){var l=s[d],p=s[d+1],h=l.top+l.height;if(p.top-h>=t.height)return p.top-t.height}else for(var m=1;m=t.height)return v}for(var y=[],_=1;_e.time))})});return A&&A[0]?A[0].top:void 0;case 1:case 2:return}else{switch(t.mode){case 0:y.sort(function(e,t){var r,n,o=(r=Math).min.apply(r,(0,i._)(t.map(function(e){return e.right}))),f=(n=Math).min.apply(n,(0,i._)(e.map(function(e){return e.right})));return o*t.length-f*e.length});break;case 1:case 2:y.sort(function(e,t){var r,n,o=(r=Math).max.apply(r,(0,i._)(t.map(function(e){return e.width})));return(n=Math).max.apply(n,(0,i._)(e.map(function(e){return e.width})))*e.length-o*t.length})}return y[0][0].top}}onmessage=function(e){var t=e.data;t.id&&t.type&&globalThis.postMessage({result:(0,({getDanmuTop:o})[t.type])(t),id:t.id})}},{"@swc/helpers/cjs/_to_consumable_array.cjs":"i81N6"}],i81N6:[function(e,t,r,n){"use strict";var i=e("d402183024004bc7"),o=e("3209e2b12672cd18"),f=e("fc58adb8f1bff142"),u=e("5e213dc122a10171");r._=function(e){return i._(e)||o._(e)||u._(e)||f._()}},{d402183024004bc7:"hfQG0","3209e2b12672cd18":"fQrlQ",fc58adb8f1bff142:"fWabh","5e213dc122a10171":"fh7mx"}],hfQG0:[function(e,t,r,n){"use strict";var i=e("5bd5b10bf87fc8e");r._=function(e){if(Array.isArray(e))return i._(e)}},{"5bd5b10bf87fc8e":"1WOAB"}],"1WOAB":[function(e,t,r,n){"use strict";r._=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r]*?p="(?

[^"]+)"[^>]*>(?.*?)<\\/d>',"gs");return Array.from(e.matchAll(t)).map(function(e){var t=e.groups.p.split(",");return t.length>=8?{text:e.groups.text.trim().replaceAll(""",'"').replaceAll("'","'").replaceAll("<","<").replaceAll(">",">").replaceAll("&","&"),time:Number(t[0]),mode:s(Number(t[1])),fontSize:Number(t[2]),color:"#".concat(Number(t[3]).toString(16)),timestamp:Number(t[4]),pool:Number(t[5]),userID:t[6],rowID:Number(t[7])}:null}).filter(Boolean)}function u(e){var t=e.data,n=t.xml,r=t.id;r&&n&&globalThis.postMessage({danmus:l(n),id:r})}function c(e){return new Promise(function(t){return(0,i._)(function(){var n,r;return(0,o._)(this,function(a){switch(a.label){case 0:return[4,fetch(e)];case 1:return[4,a.sent().text()];case 2:n=a.sent();try{var i;i=new Blob(["\n ".concat(s.toString(),"\n ").concat(l.toString(),"\n onmessage = ").concat(u.toString(),"\n ")],{type:"application/javascript"}),(r=new Worker(URL.createObjectURL(i))).onmessage=function(e){var n=e.data,a=n.danmus;n.id&&a&&(t(a),r.terminate())},r.postMessage({xml:n,id:Date.now()})}catch(e){console.error("Error parsing Bilibili Danmu:",e),t(l(n))}return[2]}})})()})}},{"@swc/helpers/cjs/_async_to_generator.cjs":"cZn0e","@swc/helpers/cjs/_ts_generator.cjs":"eltGh","@parcel/transformer-js/src/esmodule-helpers.js":"qpMMf"}],hLPK6:[function(e,t,n,r){var a=e("@parcel/transformer-js/src/esmodule-helpers.js");a.defineInteropFlag(n),a.export(n,"default",function(){return l});var i=e("@swc/helpers/cjs/_to_consumable_array.cjs"),o=e("@swc/helpers/cjs/_type_of.cjs"),s=function(e,t,n,r,a){return(e-t)*(a-r)/(n-t)+r};function l(e,t,n){var r=e.constructor.utils.query;e.controls.add({name:"heatmap",position:"top",html:"",style:{position:"absolute",top:"-100px",left:"0px",right:"0px",height:"100px",width:"100%",pointerEvents:"none"},mounted:function(a){var l=null,u=null;function c(){var c,d,p=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(l=null,u=null,a.innerHTML="",e.duration&&!e.option.isLive){var f={w:a.offsetWidth,h:a.offsetHeight},h={xMin:0,xMax:f.w,yMin:0,yMax:128,scale:.25,opacity:.2,minHeight:Math.floor(.05*f.h),sampling:Math.floor(f.w/100),smoothing:.2,flattening:.2};(void 0===n?"undefined":(0,o._)(n))==="object"&&Object.assign(h,n);var m=[];if(Array.isArray(p)&&p.length)m=(0,i._)(p);else for(var y=function(e){var n=t.queue.filter(function(t){var n=t.time;return n>e*g&&n<=(e+h.sampling)*g}).length;m.push([e,n])},g=e.duration/f.w,v=0;v<=f.w;v+=h.sampling)y(v);if(0!==m.length){var b=m[m.length-1],_=b[0],x=b[1];_!==f.w&&m.push([f.w,x]);for(var k=m.map(function(e){return e[1]}),w=((c=Math).min.apply(c,(0,i._)(k))+(d=Math).max.apply(d,(0,i._)(k)))/2,j=0;jw?1+h.scale:1-h.scale)+h.minHeight}var O=function(e,t,n,r){var a,i,o=t||e,l=n||e,u={length:Math.sqrt(Math.pow(a=l[0]-o[0],2)+Math.pow(i=l[1]-o[1],2)),angle:Math.atan2(i,a)},c=s(Math.cos(u.angle)*h.flattening,0,1,1,0),d=u.angle*c+(r?Math.PI:0),p=u.length*h.smoothing;return[e[0]+Math.cos(d)*p,e[1]+Math.sin(d)*p]},M=function(e,t,n){var r=O(n[t-1],n[t-2],e),a=O(e,n[t-1],n[t+1],!0),i=t===n.length-1?" z":"";return"C ".concat(r[0],",").concat(r[1]," ").concat(a[0],",").concat(a[1]," ").concat(e[0],",").concat(e[1]).concat(i)},P=m.map(function(e){return[s(e[0],h.xMin,h.xMax,0,f.w),s(e[1],h.yMin,h.yMax,f.h,0)]}).reduce(function(e,t,n,r){return 0===n?"M ".concat(r[r.length-1][0],",").concat(f.h," L ").concat(t[0],",").concat(f.h," L ").concat(t[0],",").concat(t[1]):"".concat(e," ").concat(M(t,n,r))},"");a.innerHTML='\n\n\n\n\n\n\n\n\n\n\n\n '),l=r("#heatmap-start",a),u=r("#heatmap-stop",a),l.setAttribute("offset","".concat(100*e.played,"%")),u.setAttribute("offset","".concat(100*e.played,"%"))}}}e.on("video:timeupdate",function(){l&&u&&(l.setAttribute("offset","".concat(100*e.played,"%")),u.setAttribute("offset","".concat(100*e.played,"%")))}),e.on("setBar",function(e,t){l&&u&&"played"===e&&(l.setAttribute("offset","".concat(100*t,"%")),u.setAttribute("offset","".concat(100*t,"%")))}),e.on("ready",function(){return c()}),e.on("resize",function(){return c()}),e.on("artplayerPluginDanmuku:loaded",function(){return c()}),e.on("artplayerPluginDanmuku:points",function(e){return c(e)})}})}},{"@swc/helpers/cjs/_to_consumable_array.cjs":"i81N6","@swc/helpers/cjs/_type_of.cjs":"iXhRw","@parcel/transformer-js/src/esmodule-helpers.js":"qpMMf"}],i81N6:[function(e,t,n,r){"use strict";var a=e("d402183024004bc7"),i=e("3209e2b12672cd18"),o=e("fc58adb8f1bff142"),s=e("5e213dc122a10171");n._=function(e){return a._(e)||i._(e)||s._(e)||o._()}},{d402183024004bc7:"hfQG0","3209e2b12672cd18":"fQrlQ",fc58adb8f1bff142:"fWabh","5e213dc122a10171":"fh7mx"}],hfQG0:[function(e,t,n,r){"use strict";var a=e("5bd5b10bf87fc8e");n._=function(e){if(Array.isArray(e))return a._(e)}},{"5bd5b10bf87fc8e":"1WOAB"}],"1WOAB":[function(e,t,n,r){"use strict";n._=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n\n '.concat(A.default).concat(E.default,'\n\n

\n ').concat(g.default,'\n
\n
\n
\n 按类型屏蔽\n
\n
\n ').concat(b.default).concat(x.default,'\n
滚动
\n
\n
\n ').concat(w.default).concat($.default,'\n
顶部
\n
\n
\n ').concat(O.default).concat(P.default,'\n
底部
\n
\n
\n
\n
\n
\n ').concat(m.default).concat(f.default,'\n 防止弹幕重叠\n
\n
\n ').concat(m.default).concat(f.default,'\n 同步视频速度\n
\n
\n
\n 不透明度\n
\n
未知
\n
\n
\n 显示区域\n
\n
未知
\n
\n
\n 弹幕字号\n
\n
未知
\n
\n
\n 弹幕速度\n
\n
未知
\n
\n
\n
\n
\n
\n
\n ').concat(C.default,'\n
\n
\n
\n 模式\n
\n
\n ').concat(x.default,'\n
滚动
\n
\n
\n ').concat($.default,'\n
顶部
\n
\n
\n ').concat(P.default,'\n
底部
\n
\n
\n
\n
\n 颜色\n
\n ').concat(this.COLOR.map(function(e){return'
')}).join(""),'\n
\n
\n
\n
\n
\n\n
发送
\n
\n ')}},{key:"OPACITY",get:function(){return(0,l._)({min:0,max:100,steps:[]},this.option.OPACITY)}},{key:"FONT_SIZE",get:function(){return(0,l._)({min:12,max:120,steps:[]},this.option.FONT_SIZE)}},{key:"MARGIN",get:function(){return(0,l._)({min:0,max:3,steps:[{name:"1/4",value:[10,"75%"]},{name:"半屏",value:[10,"50%"]},{name:"3/4",value:[10,"25%"]},{name:"满屏",value:[10,10]}]},this.option.MARGIN)}},{key:"SPEED",get:function(){return(0,l._)({min:0,max:4,steps:[{name:"极慢",value:10},{name:"较慢",value:7.5,hide:!0},{name:"适中",value:5},{name:"较快",value:2.5,hide:!0},{name:"极快",value:1}]},this.option.SPEED)}},{key:"COLOR",get:function(){return this.option.COLOR.length?this.option.COLOR:["#FE0302","#FF7204","#FFAA02","#FFD302","#FFFF00","#A0EE00","#00CD00","#019899","#4266BE","#89D5FF","#CC0273","#222222","#9B9B9B","#FFFFFF"]}},{key:"query",value:function(e){return(0,this.utils.query)(e,this.template.$danmuku)}},{key:"append",value:function(e,t){var n=this.utils.append;(0,c._)(e.children).includes(t)||n(e,t)}},{key:"setData",value:function(e,t){var n=this.art.template.$player,r=this.template.$mount;n.dataset[e]=t,this.outside&&(r.dataset[e]=t)}},{key:"createTemplate",value:function(){var e=this.utils,t=e.createElement,n=e.tooltip,r=t("div");r.className="artplayer-plugin-danmuku",r.innerHTML=this.TEMPLATE,this.template.$danmuku=r,this.template.$toggle=this.query(".apd-toggle"),this.template.$config=this.query(".apd-config"),this.template.$configPanel=this.query(".apd-config-panel"),this.template.$configModes=this.query(".apd-config-mode .apd-modes"),this.template.$style=this.query(".apd-style"),this.template.$stylePanel=this.query(".apd-style-panel"),this.template.$styleModes=this.query(".apd-style-mode .apd-modes"),this.template.$colors=this.query(".apd-colors"),this.template.$antiOverlap=this.query(".apd-anti-overlap"),this.template.$syncVideo=this.query(".apd-sync-video"),this.template.$opacitySlider=this.query(".apd-config-opacity .apd-slider"),this.template.$opacityValue=this.query(".apd-config-opacity .apd-value"),this.template.$marginSlider=this.query(".apd-config-margin .apd-slider"),this.template.$marginValue=this.query(".apd-config-margin .apd-value"),this.template.$fontSizeSlider=this.query(".apd-config-fontSize .apd-slider"),this.template.$fontSizeValue=this.query(".apd-config-fontSize .apd-value"),this.template.$speedSlider=this.query(".apd-config-speed .apd-slider"),this.template.$speedValue=this.query(".apd-config-speed .apd-value"),this.template.$input=this.query(".apd-input"),this.template.$send=this.query(".apd-send");var a=this.template.$toggle;this.art.on("artplayerPluginDanmuku:show",function(){n(a,"关闭弹幕")}),this.art.on("artplayerPluginDanmuku:hide",function(){n(a,"打开弹幕")})}},{key:"createEvents",value:function(){var e=this,t=this.template,n=t.$toggle,r=t.$configModes,a=t.$styleModes,i=t.$colors,o=t.$antiOverlap,s=t.$syncVideo,l=t.$send,u=t.$input;this.art.proxy(n,"click",function(){e.danmuku.config({visible:!e.option.visible}),e.reset()}),this.art.proxy(r,"click",function(t){var n=t.target.closest(".apd-mode");if(n){var r=Number(n.dataset.mode);e.option.modes.includes(r)?e.danmuku.config({modes:e.option.modes.filter(function(e){return e!==r})}):e.danmuku.config({modes:(0,c._)(e.option.modes).concat([r])}),e.reset()}}),this.art.proxy(o,"click",function(){e.danmuku.config({antiOverlap:!e.option.antiOverlap}),e.reset()}),this.art.proxy(s,"click",function(){e.danmuku.config({synchronousPlayback:!e.option.synchronousPlayback}),e.reset()}),this.art.proxy(a,"click",function(t){var n=t.target.closest(".apd-mode");if(n){var r=Number(n.dataset.mode);e.danmuku.config({mode:r}),e.reset()}}),this.art.proxy(i,"click",function(t){var n=t.target.closest(".apd-color");n&&(e.danmuku.config({color:n.dataset.color}),e.reset())}),this.art.proxy(l,"click",function(){return e.emit()}),this.art.proxy(u,"keypress",function(t){"Enter"===t.key&&(t.preventDefault(),e.emit())})}},{key:"createSliders",value:function(){var e=this;this.slider.opacity=this.createSlider((0,u._)((0,l._)({},this.OPACITY),{container:this.template.$opacitySlider,findIndex:function(){return Math.round(100*e.option.opacity)},onChange:function(t){e.template.$opacityValue.textContent="".concat(t,"%"),e.danmuku.config({opacity:t/100})}})),this.slider.margin=this.createSlider((0,u._)((0,l._)({},this.MARGIN),{container:this.template.$marginSlider,findIndex:function(){return e.MARGIN.steps.findIndex(function(t){return t.value[0]===e.option.margin[0]&&t.value[1]===e.option.margin[1]})},onChange:function(t){var n=e.MARGIN.steps[t];n&&(e.template.$marginValue.textContent=n.name,e.danmuku.config({margin:n.value}))}})),this.slider.fontSize=this.createSlider((0,u._)((0,l._)({},this.FONT_SIZE),{container:this.template.$fontSizeSlider,findIndex:function(){return e.danmuku.fontSize},onChange:function(t){e.template.$fontSizeValue.textContent="".concat(t,"px"),t!==e.danmuku.fontSize&&e.danmuku.config({fontSize:t})}})),this.slider.speed=this.createSlider((0,u._)((0,l._)({},this.SPEED),{container:this.template.$speedSlider,findIndex:function(){return e.SPEED.steps.findIndex(function(t){return t.value===e.option.speed})},onChange:function(t){var n=e.SPEED.steps[t];n&&(e.template.$speedValue.textContent=n.name,e.danmuku.config({speed:n.value}))}}))}},{key:"createSlider",value:function(e){var t=this,n=e.min,r=e.max,a=e.container,i=e.findIndex,o=e.onChange,s=e.steps,l=void 0===s?[]:s,u=this.utils,c=u.query,d=u.clamp;(0,u.setStyle)(a,"touch-action","none"),a.innerHTML='\n
\n
\n '.concat(l.map(function(){return'
'}).join(""),'\n
\n
\n
\n
\n
\n ').concat(l.map(function(e){return e.hide?"":'
'.concat(e.name,"
")}).join(""),"\n
\n ");var p=c(".apd-slider-dot",a),f=c(".apd-slider-progress",a),h=!1;function m(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:i();if(!(er)){var t=(e-n)/(r-n);p.style.left="".concat(100*t,"%"),0===l.length&&(f.style.width=p.style.left),o(e)}}function y(e){var t=a.getBoundingClientRect(),i=t.top,o=t.height,s=t.left,l=t.width;this.art.isRotate?m(Math.round(d(e.clientY-i,0,o)/o*(r-n)+n)):m(Math.round(d(e.clientX-s,0,l)/l*(r-n)+n))}return this.art.proxy(a,"click",function(e){y.call(t,e)}),this.art.proxy(a,"pointerdown",function(e){h=0===e.button}),this.art.proxy(document,"pointermove",function(e){h&&y.call(t,e)}),this.art.proxy(document,"pointerup",function(e){h&&(h=!1,y.call(t,e))}),{reset:m}}},{key:"onFullscreen",value:function(e){var t=this.template,n=t.$danmuku,r=t.$controlsCenter,a=t.$mount;this.outside?e?this.append(r,n):this.append(a,n):this.append(r,n)}},{key:"onMouseEnter",value:function(e){var t=e.$control,n=e.$panel,r=this.art.template.$player,a=t.getBoundingClientRect(),i=n.getBoundingClientRect(),o=r.getBoundingClientRect(),s=i.width/2-a.width/2,l=o.left-(a.left-s),u=a.right+s-o.right;l>0?n.style.left="".concat(-s+l,"px"):u>0?n.style.left="".concat(-s-u,"px"):n.style.left="".concat(-s,"px")}},{key:"emit",value:function(){return(0,i._)(function(){var e,t,n,r;return(0,d._)(this,function(a){switch(a.label){case 0:if(!(t=(e=this.template.$input).value.trim()).length||this.isLock||this.emitting)return[2];n={text:t,mode:this.option.mode,color:this.option.color,time:this.art.currentTime},a.label=1;case 1:return a.trys.push([1,3,,4]),this.emitting=!0,[4,this.option.beforeEmit(n)];case 2:if(r=a.sent(),this.emitting=!1,!0!==r)return[2];return n.border=!0,delete n.time,this.danmuku.emit(n),e.value="",this.lock(),[3,4];case 3:return console.error("Error emitting danmuku:",a.sent()),this.emitting=!1,[3,4];case 4:return[2]}})}).call(this)}},{key:"lock",value:function(){var e=this,t=this.utils.addClass,n=this.template.$send;this.isLock=!0;var r=this.option.lockTime;n.textContent=r,t(n,"apd-lock");var a=function(){e.timer=setTimeout(function(){0===r?e.unlock():(n.textContent=r-=1,a())},1e3)};a()}},{key:"unlock",value:function(){var e=this.utils.removeClass,t=this.template.$send;clearTimeout(this.timer),this.isLock=!1,t.textContent="发送",e(t,"apd-lock")}},{key:"resize",value:function(){if(!this.outside&&!this.art.fullscreen&&!this.art.fullscreenWeb){var e=this.art.template,t=e.$player,n=e.$controlsCenter,r=this.template.$danmuku;this.art.width'},{}],ilP9j:[function(e,t,n,r){t.exports=''},{}],"9pxJ0":[function(e,t,n,r){t.exports=''},{}],"5tLUB":[function(e,t,n,r){t.exports=''},{}],atPtW:[function(e,t,n,r){t.exports=''},{}],lYyTv:[function(e,t,n,r){t.exports=''},{}],bzdWd:[function(e,t,n,r){t.exports=''},{}],ckFYR:[function(e,t,n,r){t.exports=''},{}],"2vLQf":[function(e,t,n,r){t.exports=''},{}],"95P3w":[function(e,t,n,r){t.exports=''},{}],jLRWo:[function(e,t,n,r){t.exports=''},{}],XRdY2:[function(e,t,n,r){t.exports=''},{}],jWk9o:[function(e,t,n,r){t.exports='.artplayer-plugin-danmuku{z-index:99;color:#fff;flex-shrink:0;justify-content:center;align-items:center;gap:10px;width:100%;height:32px;font-size:12px;font-weight:300;display:flex;position:relative}.artplayer-plugin-danmuku .apd-icon{cursor:pointer;opacity:.75;fill:#fff;transition:all .2s}.artplayer-plugin-danmuku .apd-icon:hover{opacity:1}.artplayer-plugin-danmuku .apd-config{display:flex;position:relative}.artplayer-plugin-danmuku .apd-config .apd-config-panel{opacity:0;pointer-events:none;width:320px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-config .apd-config-panel .apd-config-panel-inner{background-color:rgba(0,0,0,.85);border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-config:hover .apd-config-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-config-mode,.artplayer-plugin-danmuku .apd-config-slider,.artplayer-plugin-danmuku .apd-config-other,.artplayer-plugin-danmuku .apd-style-mode{margin-bottom:15px}.artplayer-plugin-danmuku .apd-modes{align-items:center;gap:20px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-modes .apd-mode{cursor:pointer;text-align:center}.artplayer-plugin-danmuku .apd-modes .apd-mode:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-config-slider{align-items:center;gap:12px;display:flex}.artplayer-plugin-danmuku .apd-config-slider .apd-value{text-align:right;width:32px}.artplayer-plugin-danmuku .apd-slider{cursor:pointer;flex:1;justify-content:center;align-items:center;height:20px;display:flex;position:relative}.artplayer-plugin-danmuku .apd-slider .apd-slider-line{background-color:rgba(255,255,255,.25);border-radius:3px;width:100%;height:2px;position:relative;overflow:hidden}.artplayer-plugin-danmuku .apd-slider .apd-slider-points{justify-content:space-between;align-items:center;display:flex;position:absolute;top:0;bottom:0;left:0;right:0}.artplayer-plugin-danmuku .apd-slider .apd-slider-points .apd-slider-point{background-color:rgba(255,255,255,.5);border-radius:50%;width:2px;height:2px}.artplayer-plugin-danmuku .apd-slider .apd-slider-progress{background-color:#00a1d6;width:0%;height:100%}.artplayer-plugin-danmuku .apd-slider .apd-slider-dot{background-color:#00a1d6;border-radius:50%;width:12px;height:12px;position:absolute;left:0%;transform:translate(-6px)}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps{color:#777;justify-content:space-between;align-items:center;width:calc(100% + 32px);display:flex;position:absolute;bottom:-12px}.artplayer-plugin-danmuku .apd-slider .apd-slider-steps .apd-slider-step{text-align:center;flex-shrink:0;width:36px;scale:.95}.artplayer-plugin-danmuku .apd-config-other{align-items:center;gap:20px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-check-off,.artplayer-plugin-danmuku .apd-config-other .apd-check-on{width:16px;height:16px}.artplayer-plugin-danmuku .apd-config-other .apd-other{cursor:pointer;align-items:center;gap:2px;display:flex}.artplayer-plugin-danmuku .apd-config-other .apd-other:hover{color:#00a1d6}.artplayer-plugin-danmuku .apd-emitter{background-color:rgba(255,255,255,.25);border-radius:5px;flex:1;align-items:center;height:100%;display:flex}.artplayer-plugin-danmuku .apd-style{justify-content:center;align-items:center;display:flex;position:relative}.artplayer-plugin-danmuku .apd-style .apd-style-panel{opacity:0;pointer-events:none;width:200px;padding:10px;position:absolute;bottom:24px;left:0}.artplayer-plugin-danmuku .apd-style .apd-style-panel .apd-style-panel-inner{background-color:rgba(0,0,0,.85);border-radius:3px;width:100%;padding:10px}.artplayer-plugin-danmuku .apd-style:hover .apd-style-panel{opacity:100;pointer-events:all}.artplayer-plugin-danmuku .apd-colors{flex-wrap:wrap;gap:8px;margin-top:5px;display:flex}.artplayer-plugin-danmuku .apd-colors .apd-color{cursor:pointer;border-radius:2px;width:16px;height:16px}.artplayer-plugin-danmuku .apd-colors .apd-color.apd-active{border:1px solid #000;box-shadow:0 0 0 1px #fff}.artplayer-plugin-danmuku .apd-input{color:#fff;background-color:transparent;border:none;outline:none;flex:1;width:auto;min-width:0;height:100%;line-height:1}.artplayer-plugin-danmuku .apd-input::placeholder{color:rgba(255,255,255,.5)}.artplayer-plugin-danmuku .apd-input::placeholder{color:rgba(255,255,255,.5)}.artplayer-plugin-danmuku .apd-send{cursor:pointer;width:60px;height:100%;text-shadow:none;background-color:#00a1d6;border-top-right-radius:5px;border-bottom-right-radius:5px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.artplayer-plugin-danmuku .apd-send.apd-lock{cursor:not-allowed;color:#666;background-color:#e7e7e7}.art-controls-center .apd-emitter{flex:none;width:260px}.art-fullscreen .artplayer-plugin-danmuku,.art-fullscreen-web .artplayer-plugin-danmuku{gap:16px;height:38px}.art-fullscreen .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen-web .artplayer-plugin-danmuku .apd-config-icon,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-off,.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-on,.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-on{width:28px;height:28px}.art-fullscreen .artplayer-plugin-danmuku .apd-emitter,.art-fullscreen-web .artplayer-plugin-danmuku .apd-emitter{flex:none;width:400px}.art-video-player>.artplayer-plugin-danmuku{padding:0 10px;position:absolute;bottom:-40px;left:0;right:0}.art-video-player:has(>.artplayer-plugin-danmuku){margin-bottom:40px}[data-danmuku-emitter=false] .apd-emitter{display:none!important}[data-danmuku-emitter=false] .art-controls-center .artplayer-plugin-danmuku{justify-content:flex-end;gap:18px}[data-danmuku-emitter=false].art-fullscreen .art-controls-center .artplayer-plugin-danmuku,[data-danmuku-emitter=false].art-fullscreen-web .art-controls-center .artplayer-plugin-danmuku{gap:24px}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-icon{fill:#333}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-emitter{background-color:#f1f2f3}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input{color:#000}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input::placeholder{color:rgba(0,0,0,.3)}[data-danmuku-theme=light]>.artplayer-plugin-danmuku .apd-input::placeholder{color:rgba(0,0,0,.3)}[data-danmuku-visible=false] .apd-toggle-off{display:block}[data-danmuku-visible=false] .apd-toggle-on,[data-danmuku-visible=true] .apd-toggle-off{display:none}[data-danmuku-visible=true] .apd-toggle-on{display:block}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-on{display:none}[data-danmuku-anti-overlap=false] .apd-anti-overlap .apd-check-off,[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-on{display:block}[data-danmuku-anti-overlap=true] .apd-anti-overlap .apd-check-off,[data-danmuku-sync-video=false] .apd-sync-video .apd-check-on{display:none}[data-danmuku-sync-video=false] .apd-sync-video .apd-check-off,[data-danmuku-sync-video=true] .apd-sync-video .apd-check-on{display:block}[data-danmuku-sync-video=true] .apd-sync-video .apd-check-off{display:none}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-off{display:block}[data-danmuku-mode0=false] .apd-config-mode .apd-mode-0-on{display:none}[data-danmuku-mode0=false] .art-danmuku [data-mode="0"]{opacity:0!important}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-off{display:none}[data-danmuku-mode0=true] .apd-config-mode .apd-mode-0-on{display:block}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"]{color:#00a1d6}[data-danmuku-mode="0"] .apd-style-mode [data-mode="0"] path{fill:#00a1d6}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-off{display:block}[data-danmuku-mode1=false] .apd-config-mode .apd-mode-1-on{display:none}[data-danmuku-mode1=false] .art-danmuku [data-mode="1"]{opacity:0!important}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-off{display:none}[data-danmuku-mode1=true] .apd-config-mode .apd-mode-1-on{display:block}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"]{color:#00a1d6}[data-danmuku-mode="1"] .apd-style-mode [data-mode="1"] path{fill:#00a1d6}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-off{display:block}[data-danmuku-mode2=false] .apd-config-mode .apd-mode-2-on{display:none}[data-danmuku-mode2=false] .art-danmuku [data-mode="2"]{opacity:0!important}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-off{display:none}[data-danmuku-mode2=true] .apd-config-mode .apd-mode-2-on{display:block}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"]{color:#00a1d6}[data-danmuku-mode="2"] .apd-style-mode [data-mode="2"] path{fill:#00a1d6}'},{}]},["l3CkF"],"l3CkF","parcelRequire4dc0",{}); \ No newline at end of file diff --git a/packages/artplayer/types/option.d.ts b/packages/artplayer/types/option.d.ts index 95e4d630d..464cddc61 100644 --- a/packages/artplayer/types/option.d.ts +++ b/packages/artplayer/types/option.d.ts @@ -308,5 +308,3 @@ export interface Option { Record any> > } - -export default Option diff --git a/scripts/build-ts.js b/scripts/build-ts.js index 7595520b1..ab6a43ca7 100644 --- a/scripts/build-ts.js +++ b/scripts/build-ts.js @@ -1,26 +1,44 @@ -import fs from 'fs'; -import cpy from 'cpy'; -import path from 'path'; -import { glob } from 'glob'; +import fs from 'node:fs' +import path from 'node:path' +import { glob } from 'glob' -const reg = /^import.*;$/gim; -const artplayerTS = glob.sync('packages/artplayer/types/*.d.ts'); -const artplayerTSoutput = path.join('docs/assets/ts/artplayer.d.ts'); +function parsePluginInfo(path) { + const file = path.split('/').pop() || '' + const baseName = file.replace('.d.ts', '') -let code = ''; -for (let index = 0; index < artplayerTS.length; index++) { - const type = artplayerTS[index]; - code += String(fs.readFileSync(type)).replace(reg, '') + '\n'; + const name = baseName + .split('-') + .map((word, index) => + index === 0 ? word : word[0].toUpperCase() + word.slice(1), + ) + .join('') + + return { name, file } } -fs.writeFileSync(artplayerTSoutput, code.trim()); +const reg = /^import.*$/gim +const artplayerTS = glob.sync('packages/artplayer/types/*.d.ts') +const artplayerTSoutput = path.join('docs/assets/ts/artplayer.d.ts') + +let code = '' +for (let index = 0; index < artplayerTS.length; index++) { + const type = artplayerTS[index] + code += `${String(fs.readFileSync(type)).replace(reg, '')}\n` +} + +code.replace('export default ', '') +code += `export = Artplayer;\nexport as namespace Artplayer;\n` +fs.writeFileSync(artplayerTSoutput, code.trim()) console.log(`✨ Built ${artplayerTSoutput}`); (async function () { - const pluginsTS = glob.sync('packages/artplayer-plugin-*/types/*.d.ts'); - for (let index = 0; index < pluginsTS.length; index++) { - const type = pluginsTS[index]; - await cpy(type, 'docs/assets/ts/', { flat: true }); - console.log(`✨ Copy ${type}`); - } -})(); + const pluginsTS = glob.sync('packages/artplayer-plugin-*/types/*.d.ts') + for (let index = 0; index < pluginsTS.length; index++) { + const type = pluginsTS[index] + const { name, file } = parsePluginInfo(type) + const code = `${String(fs.readFileSync(type)).replace(reg, '')}\nexport = ${name};\nexport as namespace ${name};\n` + const output = path.join('docs/assets/ts', file) + fs.writeFileSync(output, code.trim()) + console.log(`✨ Built ${output}`) + } +})()