diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 000000000..177c91b84
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,400 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## [Unreleased]
+
+- Rename `.esm.js` to `.mjs`
+- Remove the default `fill` color value of `svg`
+- Optimize the `autoOrientation` logic
+- Add `artplayer-plugin-document-pip` plugin
+- Add `art.events.bindGlobalEvents` method for rebinding global methods
+- Optimize `artplayer.d.ts`, now you can directly import `Option`
+
+```ts
+import type { Option } from 'artplayer'
+
+const option: Option = {
+ container: '.artplayer-app',
+ url: './assets/sample/video.mp4',
+}
+```
+
+## [5.2.5] - 2025-08-01
+
+- Add `ESM` version for all packages, such as `artplayer/dist/artplayer.esm.js`
+- Recognize `globalThis.CUSTOM_USER_AGENT` global variable for customizing `navigator.userAgent`
+- Fix missing `mount` parameter when initializing `artplayer-plugin-danmuku`
+
+## [5.2.3] - 2025-04-20
+
+- Add Vietnamese `vi`
+- Clear the `video.src` property on destroy
+- Add `onClick` option for `Setting`
+- Fix style loading failure of danmuku and chapter plugins when the page has no head tag
+- Add `gesture` option to enable or disable gesture events on mobile `video` element
+
+## [5.2.2] - 2025-01-19
+
+- Fix thumbnail crossover issue
+- Fix style loading failure when the page has no head tag
+- Add slider support in subtitle plugin settings panel for mobile dragging
+- Fix positioning error of settings panel when rotating screen
+- Fix classname switching error when fullscreen state changes
+
+## [5.2.1] - 2024-10-26
+
+- Refactor `Setting` component, fix state loss issue
+- For `Setting` of type `range`, callback now returns an array of numbers instead of a single number
+- Remove `isStringOrNumber` utility function
+- Fix inconsistent state issue in `artplayer-plugin-hls-control`
+- Deprecate `artplayer-plugin-dash-quality` plugin
+- Add new `artplayer-plugin-dash-control` plugin
+- Use `code` instead of deprecated `keyCode` for keyboard events
+- Add `keydown` event to listen for `keydown` from `document`
+
+## [5.2.0] - 2024-10-19
+
+- Add `option.proxy` for proxying third-party `video` and `canvas`
+- Add `artplayer-proxy-canvas` proxy, enabling video playback via `canvas`
+- Add `option.thumbnails.scale` for preview image scaling
+- Fix bug where changing `art.url` didn’t trigger `autoPlayback`: [#797](https://github.com/zhw2590582/ArtPlayer/issues/797)
+- Add `art.subtitle.cues` property for retrieving all subtitle list
+- Add `art.subtitle.activeCues` property for retrieving active subtitles
+- Add `subtitleBeforeUpdate` event triggered before subtitle element rendering
+- Change `subtitleUpdate` event to `subtitleAfterUpdate`, triggered after subtitle element rendering
+- Optimize trigger timing and callback parameters of `subtitleLoad` event
+- Remove `subtitleSwitch` event; use `subtitleLoad` instead
+- Upgrade `artplayer-plugin-hls-quality` to `artplayer-plugin-hls-control`
+- Add `artplayer-plugin-ambilight` plugin
+- Fix `thumbnails` display bug
+
+## [5.1.7] - 2024-08-15
+
+- Add `Artplayer.STYLE` property to return player style text
+- `art.screenshot('your-name')` now supports custom file names
+- When `Artplayer.CONTEXTMENU` is `false`, default context menu is no longer hidden
+- Add `art.thumbnails` property for dynamically setting `thumbnails`
+
+## [5.1.6] - 2024-06-15
+
+- Optimize `setBar` event
+- Add `artplayerPluginChapter` plugin
+- Add `art.plugins.artplayerPluginDanmuku.load(target)` parameter for appending danmuku library
+- Add `width` option to danmuku plugin; when player width is smaller than this, danmuku sender is placed at the bottom
+- Fix `artplayerPluginVttThumbnail` not displaying on mobile
+- Fix danmuku plugin style and percentage font-size bug
+- `thumbnails` are now visible on mobile too
+- Restore `screen.orientation.lock` functionality
+
+## [5.1.5] - 2024-06-01
+
+- Refactor `artplayerPluginDanmuku` plugin
+- Add `artplayerPluginChromecast` plugin
+- Add `fullscreenError` event
+- Optimize double-click event: [#728](https://github.com/zhw2590582/ArtPlayer/pull/728)
+- Fix delayed display of `thumbnails`
+- Add `art.plugins.lock.state = true/false` for manually controlling `lock` state
+- Control bar no longer auto-hides when mouse is on it or when settings panel is open
+- Remove `screen.orientation.lock` due to compatibility issues
+- Fix `fullscreen` bug on mobile
+
+## [5.1.1] - 2024-01-11
+
+- Plugin functions now support both synchronous and asynchronous returns
+
+## [5.1.0] - 2023-12-23
+
+- Plugin functions now support async return
+- Player will no longer be destroyed after reaching error limit for playback address
+- Split language files, core no longer bundles multiple languages [Language Settings](https://artplayer.org/document/start/i18n.html)
+- Updating components now supports updating only specified fields [pull/549](https://github.com/zhw2590582/ArtPlayer/pull/549)
+- Add `muted` event triggered when mute state changes
+- Add `Artplayer.LOG_VERSION` global config to control whether to print player version (default `true`)
+- Add `Artplayer.USE_RAF` global config to control whether to use `requestAnimationFrame` (default `false`), currently for smooth progress bar effect
+- Remove default styles `margin:0;padding:0;` to avoid conflicts with third-party libraries
+- Subtitle line changed from `p` to `div` tag, with classname `art-subtitle-line`
+- On mobile, tapping video toggles control bar display
+- Remove `art.loop` interval playback feature (not commonly used)
+- Subtitle track now has `label` attribute to display subtitle names on mobile
+- Add utility functions `unescape`, `isBrowser`, `setStyleText`
+- Add `artplayerPluginMultipleSubtitles` plugin for merged subtitle files: [demo](https://www.artplayer.org/?libs=./uncompiled/artplayer-plugin-multiple-subtitles/index.js&example=multiple.subtitles)
+- Modify mini progress bar display
+
+## [5.0.9] - 2023-05-14
+
+- Fix `art.autoOrientation` style bug
+- Remove animation effect of player container
+
+## [5.0.8] - 2023-05-13
+
+- Fix conflict of `art.mini`
+- Fix animation bug of `art.aspectRatio`
+
+## [5.0.7] - 2023-05-13
+
+- Switching via `switchUrl` or `switchQuality` preserves existing adjustments such as `aspectRatio`, `playbackRate`, `flip`, `autoSize`
+- Remove the second `name` parameter from `switchUrl` and `switchQuality`
+- Add `isIOS13` utility to fix inaccurate `isMobile` detection on iOS 13+
+- `art.autoSize` and `art.autoHeight` are now methods: `art.autoSize()` and `art.autoHeight()`
+- Add new property `art.quality` for dynamically updating quality list
+- Fix incorrect `art.aspectRatio` property
+- Add `art.switch` setter property, same as `art.switchUrl` method
+
+## [5.0.6] - 2023-05-03
+
+- Fix style bug of settings panel
+
+## [5.0.5] - 2023-05-03
+
+- Add `heatmap` option to danmuku plugin for enabling heatmap (default: off)
+- Fix English subtitle line break style bug
+- Fix settings panel style bug
+- Remove unnecessary global properties
+- Remove `title` option (not useful now)
+- Remove `whitelist` option (not useful now)
+
+## [5.0.4] - 2023-04-27
+
+- Fix controller dropdown list style bug
+
+## [5.0.3] - 2023-04-26
+
+- Fix `event.pageY` value error in volume controller
+- Update build config, `artplayer.legacy.js` now compatible with IE 11
+
+## [5.0.2] - 2023-04-24
+
+- Fix style compatibility issue of control bar position
+
+## [5.0.1] - 2023-04-24
+
+- Fix web fullscreen style bug
+- Fix built-in settings text error
+
+## [5.0.0] - 2023-04-23
+
+- Rewrite volume controller
+- Fix incorrect progress drag angle on mobile
+- Rewrite `mini` mode, now video detaches from original container
+- All components (layers, controller, contextmenu, settings panel) support dynamic deletion and updating
+- Subtitle option adds `onVttLoad` for modifying vtt text before output
+- Rewrite all styles, add many `css` variables
+- Add `cssVar` option for initializing `css` variables
+- Add `cssVar` method for getting/setting `css` variables
+- `artplayer-plugin-hls-quality` adds `getResolution` function option for getting resolution text from level
+- Add `artplayer-plugin-dash-quality` plugin for adding Dash quality list to player
+- Fix `lock` and `loop` event issues
+- Add Russian `ru` and Indonesian `id` languages
+- Update `artplayer-plugin-control` for `artplayer@5.0.0`
+- Update `artplayer-plugin-dash-quality` for `artplayer@5.0.0`
+- Update `artplayer-plugin-hls-quality` for `artplayer@5.0.0`
+- Update `artplayer-plugin-danmuku` for `artplayer@5.0.0`
+
+## [4.6.2] - 2023-01-26
+
+- Default `Artplayer.PROGRESS_HEIGHT` changed to `6`
+- Add `artplayer-plugin-vtt-thumbnail` to generate video preview images from vtt subtitle files
+- Add `Artplayer.FULLSCREEN_WEB_IN_BODY` for whether to mount player to `document.body` in web fullscreen (default `false`)
+- Change subtitle offset adjustment to slider
+- Subtitle option adds `escape` (default `true`) for HTML escaping
+
+## [4.6.1] - 2023-01-11
+
+- Write brand new docs
+- Optimize `d.ts`
+- Remove redundant events
+- Optimize some styles
+- Add `i18n` option
+
+## [4.6.0] - 2022-12-31
+
+- Optimize style effects of control bar icons
+- Optimize style effects of settings panel
+- Fix incorrect `art.fullscreen` state detection
+- Add `artplayer-plugin-control` plugin to change control bar style
+
+## [4.5.12] - 2022-11-20
+
+- Fix `art.loop = []` display bug
+
+## [4.5.11] - 2022-11-06
+
+- Add `Artplayer.CONTEXTMENU` for controlling whether to show contextmenu (default `true`)
+- Whitelist function default `true` on mobile, all devices use player UI
+
+## [4.5.10] - 2022-11-05
+
+- Fix subtitle not showing in Firefox: [#pull/415](https://github.com/zhw2590582/ArtPlayer/pull/415)
+- Info popup supports clicking to select video property text
+
+## [4.5.9] - 2022-11-05
+
+- Add `art.type` property to get/set video type
+- Add `art.video` property to get video element
+- Add `artplayer-plugin-iframe` plugin to control player inside iframe
+- Add `artplayer-plugin-hls-quality` plugin for adding Hls quality list
+- Add `Artplayer.PLAYBACK_RATE` for default playback rates `[0.5, 0.75, 1, 1.25, 1.5, 2]`
+- Add `Artplayer.ASPECT_RATIO` for default ratios `['default','4:3','16:9']`
+- Add `Artplayer.FLIP` for default flip options `['normal','horizontal','vertical']`
+- Add `Artplayer.PROGRESS_HEIGHT` (default: `4`)
+- Add `legacy.js` version for older browsers (larger size)
+- Remove `examples` dir, no longer provide Vue/React examples
+
+## [4.5.8] - 2022-10-09
+
+- Add Farsi language
+- Add `Artplayer.DEBUG` (default `false`) for debug logs
+- Add `art.setting.update()` for dynamic settings update
+- Optimize `artplayer.d.ts`
+
+## [4.5.7] - 2022-09-28
+
+- Add `Artplayer.VOLUME_STEP` for controlling volume step (default `0.1`)
+- Add `Artplayer.SEEK_STEP` for controlling seek step (default `5s`)
+- Fix some svg icons not showing on mobile
+- Fix desktop progress bar cannot click+drag simultaneously
+- Fix mobile progress bar cannot click+drag
+- Add `art.isRotate` property for detecting auto fullscreen rotation
+- Settings panel `range` adds `onChange` option for real-time values
+
+```js
+var art = new Artplayer({
+ container: '.artplayer-app',
+ url: '/assets/sample/video.mp4',
+ setting: true,
+ settings: [
+ {
+ html: 'Slider',
+ tooltip: '5x',
+ range: [5, 1, 10, 0.1],
+ onChange: function (item) {
+ return item.range + 'x';
+ },
+ },
+ ],
+});
+```
+
+## [4.5.6] - 2022-09-19
+
+- Fix hls.js not working in Safari
+
+## [4.5.5] - 2022-09-19
+
+- Ad plugin adds `option.muted` for autoplay muted ads
+- Danmuku plugin exposes `art.plugins.artplayerPluginDanmuku.reset()` to clear display
+- Danmuku plugin exposes `art.plugins.artplayerPluginDanmuku.option` for current config
+- Fix subtitle bug in iOS fullscreen
+- Add Spanish `es`
+
+## [4.5.4] - 2022-08-01
+
+### Added
+
+- Add `Artplayer.AUTO_PLAYBACK_MIN` for min playback memory value (default `5s`)
+- Add `Artplayer.TOUCH_MOVE_RATIO` for mobile progress drag ratio (default `0.5`)
+- `option.thumbnails` adds optional `width`/`height`
+- Add `option.id` for unique playback memory identifier
+
+## [4.5.3] - 2022-07-13
+
+### Added
+
+- `url` option allows empty string for async `art.url`
+
+```js
+const art = new Artplayer({
+ url: '',
+ container: '.artplayer-app',
+});
+
+setTimeout(() => {
+ art.url = '/assets/sample/video.mp4';
+}, 1000);
+```
+
+- `art.play()` always returns Promise; `play` event is async
+
+```js
+const art = new Artplayer({
+ url: '/assets/sample/video.mp4',
+ container: '.artplayer-app',
+});
+
+art.on('ready', async () => {
+ try {
+ await art.play();
+ console.log('Play success');
+ } catch (error) {
+ console.log('Play failed', error.message);
+ }
+});
+```
+
+- Add `airplay` (only Safari)
+
+```js
+const art = new Artplayer({
+ url: '/assets/sample/video.mp4',
+ container: '.artplayer-app',
+ airplay: true,
+});
+```
+
+## [4.5.2] - 2022-06-22
+
+- Optimize auto-playback to allow user choice
+
+## [4.5.0] - 2022-06-21
+
+- Remove built-in ads
+- Add ad plugin
+
+## [4.4.7] - 2022-06-13
+
+- Support danmuku lib d.ts
+- Update deps
+
+## [4.4.6] - 2022-06-11
+
+- Add danmuku lib d.ts
+- Adjust subtitle font-size param
+- Optimize regex parsing of xml danmuku
+
+## [4.4.5] - 2022-06-02
+
+- Fix theme color missing in mini mode
+
+## [4.4.3] - 2022-05-26
+
+- Fix custom mounted input residual on danmuku destroy
+- Fix mini mode size calculation error
+
+## [4.4.2] - 2022-05-20
+
+- Remove UI init `video:loadedmetadata` event
+- Danmuku exposes `load` for switching sources
+- Add error icon after video load error limit
+- Fix multiple init of setting panel bug
+
+## [4.4.1] - 2022-05-17
+
+- Add `art.isInput`, when true control bar won’t auto-hide (e.g. typing danmuku)
+- Add `art.isLock`, when true on mobile prevents seek/play/pause
+- Fix fixed width bug of danmuku input box
+- Settings panel supports `range` and `onRange`
+- Add `isAndroid` and `isIOS` utils
+- Danmuku adds `lockTime`, `maxLength`, `minWidth`, `maxWidth`, `mount`, `beforeEmit`, `theme`
+
+## [4.4.0] - 2022-05-15
+
+- Settings panel supports `switch` and `onSwitch`
+- Danmuku plugin adds settings panel and send
+- Danmuku adds default mode and font-size
+- Danmuku font-size supports percentage of player
+- Fix flip icon missing
+- Player with focus won’t auto-hide control bar
+- Remove subtitle toggle button (manual config required)
diff --git a/CHANGELOG_CN.md b/CHANGELOG_CN.md
deleted file mode 100644
index 8abe33f65..000000000
--- a/CHANGELOG_CN.md
+++ /dev/null
@@ -1,424 +0,0 @@
-# Changelog
-
-All notable changes to this project will be documented in this file.
-
-The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-
-## [Unreleased]
-
-- 重命名 `.esm.js` 到 `.mjs`
-- 移除 `svg` 默认的 `fill` 颜色值
-- 优化 `autoOrientation` 逻辑
-- 添加 `artplayer-plugin-document-pip` 插件
-- 添加 `art.events.bindGlobalEvents` 方法,用于重新绑定全局方法
-- 优化 `artplayer.d.ts`, 现在可以直接导入 `Option`
-
-```ts
-import type { Option } from 'artplayer'
-
-const option: Option = {
- container: '.artplayer-app',
- url: './assets/sample/video.mp4',
-}
-```
-
-## [5.2.5] - 2025-08-01
-
-- 为所有包添加 `ESM` 版本如 `artplayer/dist/artplayer.esm.js`
-- 识别 `globalThis.CUSTOM_USER_AGENT` 全局变量,用于自定义 `navigator.userAgent`
-- 修复 `artplayer-plugin-danmuku` 初始化时 `mount` 参数缺失的错误
-
-## [5.2.3] - 2025-04-20
-
-- 添加越南语 `vi`
-- 销毁时,清空 `video.src` 属性
-- 为 `Setting` 添加 `onClick` 选项
-- 修复当网页没有head时,弹幕插件和章节插件引起的样式加载失败问题
-- 添加 `gesture` 选项,用于是否开启移动端的 `video` 元素的手势事件
-
-## [5.2.2] - 2025-01-19
-
-- 修复缩略图跨越问题
-- 修复当网页没有head时引起的样式加载失败问题
-- 新增字幕插件的设置面板的滑块支持移动端拖动
-- 修复设置面板在旋屏时的定位错误
-- 修复全屏状态变化时类名切换错误问题
-
-## [5.2.1] - 2024-10-26
-
-- 重构 `Setting` 组件,修复状态丢失的问题
-- 类型是 `range` 的 `Setting`,现在回调函数返回的 `range` 是数字的数组,不再是单一数字
-- 删除 `isStringOrNumber` 工具函数
-- 修复 `artplayer-plugin-hls-control` 状态不统一的问题
-- 废弃 `artplayer-plugin-dash-quality` 插件
-- 新增 `artplayer-plugin-dash-control` 插件
-- 使用 `code` 替代已废弃的`keyCode` 监听键盘事件
-- 新增 `keydown` 事件,监听来自 `document` 的 `keydown` 事件
-
-## [5.2.0] - 2024-10-19
-
-- 新增 `option.proxy` 选项,用于代理第三方的 `video` 和 `canvas`
-- 新增 `artplayer-proxy-canvas` 代理,可以使用 `canvas` 播放视频
-- 新增 `option.thumbnails.scale`, 用于预览图缩放
-- 修复 `art.url` 更改不能触发 `autoPlayback` 的 `bug`: [#797](https://github.com/zhw2590582/ArtPlayer/issues/797)
-- 新增 `art.subtitle.cues` 属性, 获取整体的字幕列表
-- 新增 `art.subtitle.activeCues` 属性, 获取活跃的字幕列表
-- 新增 `subtitleBeforeUpdate` 事件, 在字幕元素渲染前触发
-- 修改 `subtitleUpdate` 事件为 `subtitleAfterUpdate`, 在字幕元素渲染后触发
-- 优化 `subtitleLoad` 事件的触发时机和回调参数
-- 删除 `subtitleSwitch` 事件,请使用 `subtitleLoad` 代替
-- 升级 `artplayer-plugin-hls-quality` 为 `artplayer-plugin-hls-control`
-- 新增 `artplayer-plugin-ambilight` 插件
-- 修复 `thumbnails` 显示 bug
-
-## [5.1.7] - 2024-8-15
-
-- 新增 `Artplayer.STYLE` 属性,返回播放器样式文本
-- `art.screenshot('your-name')` 截图功能支持自定义文件名字
-- `Artplayer.CONTEXTMENU` 为 `false` 时,不再隐藏默认右键菜单
-- 新增 `art.thumbnails` 属性,用于动态设置 `thumbnails`
-
-## [5.1.6] - 2024-6-15
-
-- 优化 `setBar` 事件
-- 新增 `artplayerPluginChapter` 插件
-- 新增 `art.plugins.artplayerPluginDanmuku.load(target)` 参数,用于追加弹幕库
-- 新增弹幕插件的 `width` 选项参数,当播放器宽度小于此值时,弹幕发射器置于播放器底部
-- 修复 `artplayerPluginVttThumbnail` 在移动端不显示的问题
-- 修复弹幕插件样式,和字号百分比显示的 `bug`
-- 移动端也可以看到 `thumbnails` 了
-- 恢复 `screen.orientation.lock` 功能
-
-## [5.1.5] - 2024-6-1
-
-- 重构 `artplayerPluginDanmuku` 插件
-- 新增 `artplayerPluginChromecast` 插件
-- 添加 `fullscreenError` 事件
-- 优化双击事件: [#728](https://github.com/zhw2590582/ArtPlayer/pull/728)
-- 修复 `thumbnails` 延迟显示问题
-- 新增 `art.plugins.lock.state = true/false`, 用于手动控制 `lock` 状态
-- 当鼠标在控制栏上,或者打开了设置面板,控制栏不再自动隐藏
-- 由于兼容性不足,删除 `screen.orientation.lock` 功能
-- 修复移动端的 `fullscreen` bug
-
-## [5.1.1] - 2024-1-11
-
-- 插件函数支持同步和异步返回
-
-## [5.1.0] - 2023-12-23
-
-- 插件函数改为支持异步返回
-- 当播放地址发生错误到达上限后,不会再主动销毁播放器
-- 分离语言文件,核心代码不再捆绑多国语言 [语言设置](https://artplayer.org/document/start/i18n.html)
-- 更新组件时,支持填写只更新的字段 [pull/549](https://github.com/zhw2590582/ArtPlayer/pull/549)
-- 添加 `muted` 事件,当静音的状态变化时触发
-- 添加 `Artplayer.LOG_VERSION` 全局配置,设置是否打印播放器版本,默认为 `true`
-- 添加 `Artplayer.USE_RAF` 全局配置,设置是否使用 `requestAnimationFrame` ,默认为 `false`,目前主要用于进度条的平滑效果
-- 移除默认样式 `margin:0;padding:0;`,因为容易与第三方库起样式冲突,导致难以覆写
-- 字幕行从 `p` 标签改为 `div` 标签,并且添加类名 `art-subtitle-line`
-- 在移动端,点击视频会切换控制栏的显示与隐藏
-- 由于功能不常用,删除 `art.loop` 区间播放功能
-- 字幕轨添加 `label` 属性,用于在移动设备上显示字幕名字
-- 添加 `unescape`, `isBrowser`, `setStyleText` 工具函数
-- 添加 `artplayerPluginMultipleSubtitles` 插件,用于显示合并后的字幕文件: [demo](https://www.artplayer.org/?libs=./uncompiled/artplayer-plugin-multiple-subtitles/index.js&example=multiple.subtitles)
-- 修改迷你进度条的显示方式
-
-## [5.0.9] - 2023-5-14
-
-- 修复 `art.autoOrientation` 样式错误问题
-- 移除播放器容器的动画效果
-
-## [5.0.8] - 2023-5-13
-
-- 修复 `art.mini` 的互斥关系
-- 修复 `art.aspectRatio` 动画效果问题
-
-## [5.0.7] - 2023-5-13
-
-- 使用 `switchUrl` 或者 `switchQuality` 方法切换地址后会保持原有的调整如:`aspectRatio`, `playbackRate`, `flip`, `autoSize`
-- 删除 `switchUrl` 方法和 `switchQuality` 方法的第二个 `name` 参数
-- 添加 `isIOS13` 工具,用于修复在 `IOS13` 以上版本的设备上的 `isMobile` 判断不准确的问题
-- `art.autoSize` 和 `art.autoHeight` 改为方法的形式调用,即 `art.autoSize()` 和 `art.autoHeight()`
-- 添加新的属性 `art.quality`,用于动态更新画质列表
-- 修复 `art.aspectRatio` 属性不正确的问题
-- 添加 `art.switch` Setter 属性, 功能和 `art.switchUrl` 方法一样
-
-## [5.0.6] - 2023-5-3
-
-- 修复设置面板的样式错误
-
-## [5.0.5] - 2023-5-3
-
-- 弹幕插件添加 `heatmap` 选项,用于是否开启热度图,默认为关闭
-- 修复英文字幕换行的样式错误
-- 修复设置面板的样式错误
-- 移除多余的全局属性
-- 移除 `title` 选项,因为目前用处不大
-- 移除 `whitelist` 选项,因为目前用处不大
-
-## [5.0.4] - 2023-4-27
-
-- 修复控制器的上拉列表的样式 bug
-
-## [5.0.3] - 2023-4-26
-
-- 修复音量控制器 `event.pageY` 取值错误
-- 修改构建配置,`artplayer.legacy.js` 可以兼容到 `IE 11`
-
-## [5.0.2] - 2023-4-24
-
-- 修复控制栏位置的样式兼容问题
-
-## [5.0.1] - 2023-4-24
-
-- 修复网页全屏的样式错误
-- 修改内置设置项的文本错误
-
-## [5.0.0] - 2023-4-23
-
-- 重写了音量控制器
-- 修复在移动端下,进度拖动的角度不正确的问题
-- 重写了 `mini` 模式,现在这个模式下,视频会脱离原来的容器
-- 全部组件(层,控制器,右键菜单,设置面板)支持动态删除和动态更新
-- 字幕选项添加了 `onVttLoad` 方法,用于在字幕输出前修改 `vtt` 文本
-- 重写了全部样式,添加了许多 `css` 变量
-- 添加 `cssVar` 选项,用于初始化 `css` 变量
-- 添加 `cssVar` 方法,用于设置和获取 `css` 变量
-- 插件 `artplayer-plugin-hls-quality` 添加 `getResolution` 函数选项,用于获取从 `level` 中分辨率的文本
-- 新增 `artplayer-plugin-dash-quality` 插件,用于添加 `Dash` 画质列表到播放器
-- 修复 `lock` 和 `loop` 事件失效问题
-- 添加俄语 `ru` 和印度尼西亚 `id` 语言
-- 更新 `artplayer-plugin-control`,用于兼容`artplayer@5.0.0`
-- 更新 `artplayer-plugin-dash-quality`,用于兼容`artplayer@5.0.0`
-- 更新 `artplayer-plugin-hls-quality`,用于兼容`artplayer@5.0.0`
-- 更新 `artplayer-plugin-danmuku`,用于兼容`artplayer@5.0.0`
-
-## [4.6.2] - 2023-1-26
-
-- `Artplayer.PROGRESS_HEIGHT` 默认值改为 `6`
-- 添加 `artplayer-plugin-vtt-thumbnail` 用于使用 `vtt` 字幕文件生成视频预览图
-- 添加 `Artplayer.FULLSCREEN_WEB_IN_BODY` 用于网页全屏时,是否把播放器挂载于 `document.body` 上,默认为 `false`
-- 修改字幕偏移的方式为滑块
-- 字幕选项添加 `escape`,用于是否转义 `html` 标签,默认为 `true`
-
-## [4.6.1] - 2023-1-11
-
-- 编写全新的文档
-- 优化`d.ts`
-- 移除多余的事件
-- 优化部分样式
-- 添加`i18n`选项
-
-## [4.6.0] - 2022-12-31
-
-- 优化控制栏图标的样式效果
-- 优化设置面板的样式效果
-- 修复 `art.fullscreen` 监听状态错误的问题
-- 添加 `artplayer-plugin-control` 插件,用于改变控制栏样式
-
-## [4.5.12] - 2022-11-20
-
-- 修复 `art.loop = []` 的显示 `bug`
-
-## [4.5.11] - 2022-11-6
-
-- 新增 `Artplayer.CONTEXTMENU` 用于设置是否显示右键菜单,默认为 `true`
-- 移动设备 `Whitelist` 功能默认为 `true`,即全部移动设备都使用播放器 `UI`
-
-## [4.5.10] - 2022-11-5
-
-- 修复字幕在 `firefox` 不显示的问题:[#pull/415](https://github.com/zhw2590582/ArtPlayer/pull/415)
-- 信息弹窗支持点击选中视频属性文本值
-
-## [4.5.9] - 2022-11-5
-
-- 添加 `art.type` 属性,用于获取和设置视频类型
-- 添加 `art.video` 属性,用于获取 `video` 元素
-- 添加 `artplayer-plugin-iframe` 插件,用于控制 `iframe` 里的播放器
-- 添加 `artplayer-plugin-hls-quality` 插件,用于添加 `Hls` 画质列表到播放器
-- 新增 `Artplayer.PLAYBACK_RATE` 用于设置默认播放速度,默认 `[0.5, 0.75, 1, 1.25, 1.5, 2]`
-- 新增 `Artplayer.ASPECT_RATIO` 用于设置默认长宽比,默认 `['default', '4:3', '16:9']`
-- 新增 `Artplayer.FLIP` 用于设置默认翻转功能,默认 `['normal', 'horizontal', 'vertical']`
-- 新增 `Artplayer.PROGRESS_HEIGHT` 用于设置进度条高度,默认为 `4`
-- 添加 `legacy.js` 版本,用于兼容更老的浏览器,但相对体积较大
-- 移除 `examples` 目录,不再提供 `vue.js` 和 `react.js` 的例子文件
-
-## [4.5.8] - 2022-10-9
-
-- 添加 `farsi` 语言
-- 新增 `Artplayer.DEBUG` 用于打印 `debug` 信息,默认为 `false`
-- 新增 `art.setting.update()` 用于动态更新设置面板
-- 优化 `artplayer.d.ts`
-
-## [4.5.7] - 2022-9-28
-
-- 新增 `Artplayer.VOLUME_STEP` 用于控制调整 `音量` 的步长,默认为 `0.1`
-- 新增 `Artplayer.SEEK_STEP` 用于控制调整 `快进/快退` 的步长,默认为 `5` 秒
-- 修复部分 `svg` 图标在移动端不显示的问题
-- 修复在桌面端进度条不能同时点击和拖动的问题
-- 修复在移动端进度条不能点击和拖动的问题
-- 新增 `art.isRotate` 属性,用于识别是否自动全屏旋转
-- 设置面板 `range` 添加 `onChange` 选项,可以实时获取当前值
-
-```js
-var art = new Artplayer({
- container: '.artplayer-app',
- url: '/assets/sample/video.mp4',
- setting: true,
- settings: [
- {
- html: 'Slider',
- tooltip: '5x',
- range: [5, 1, 10, 0.1],
- onChange: function (item) {
- return item.range + 'x';
- },
- },
- ],
-});
-```
-
-## [4.5.6] - 2022-9-19
-
-- 修复 `hls.js` 在 `Safari` 播放失效的问题
-
-## [4.5.5] - 2022-9-19
-
-- 广告插件添加 `option.muted` 选项,用于静音自动播放广告
-- 弹幕库插件暴露 `art.plugins.artplayerPluginDanmuku.reset()` 方法,用于清空当前弹幕显示
-- 弹幕库插件暴露 `art.plugins.artplayerPluginDanmuku.option` 属性,用于获取当前弹幕配置
-- 修复在 `IOS` 全屏模式下,字幕失效的问题
-- 添加 `es` 语言
-
-## [4.5.4] - 2022-8-1
-
-### Added
-
-- 新增 `Artplayer.AUTO_PLAYBACK_MIN` 用于控制最小可以记忆播放的进度值,默认为 `5` 秒
-- 新增 `Artplayer.TOUCH_MOVE_RATIO` 用于控制移动端进度条拖放比例,默认为 `0.5`
-- `option.thumbnails` 添加可选的 `width` 和 `height`
-- 新增播放器编号选项 `option.id`,可用于记忆播放时的唯一标识
-
-## [4.5.3] - 2022-7-13
-
-### Added
-
-- `url` 选项允许传空字符串,可用于异步设置 `art.url`
-
-```js
-const art = new Artplayer({
- url: '',
- container: '.artplayer-app',
-});
-
-setTimeout(() => {
- art.url = '/assets/sample/video.mp4';
-}, 1000);
-```
-
-- `art.play()` 方法统一返回 `Promise`, `play` 事件也改为异步触发
-
-```js
-const art = new Artplayer({
- url: '/assets/sample/video.mp4',
- container: '.artplayer-app',
-});
-
-art.on('ready', async () => {
- try {
- await art.play();
- console.log('播放成功');
- } catch (error) {
- console.log('播放失败', error.message);
- }
-});
-```
-
-- 新增 `airplay` (隔空播放) 功能,当前只在 Safari 下可用
-
-```js
-const art = new Artplayer({
- url: '/assets/sample/video.mp4',
- container: '.artplayer-app',
- airplay: true,
-});
-```
-
-## [4.5.2] - 2022-6-22
-
-### Added
-
-- 优化自动回放功能,让用户自行选择
-
-## [4.5.0] - 2022-6-21
-
-### Added
-
-- 移除内置广告功能
-- 新增广告插件
-
-## [4.4.7] - 2022-6-13
-
-### Added
-
-- 兼容弹幕库 d.ts
-- 更新依赖库
-
-## [4.4.6] - 2022-6-11
-
-### Added
-
-- 添加弹幕库 d.ts
-- 调整字幕字体大小参数
-- 优化正则解析 xml 弹幕
-
-## [4.4.5] - 2022-6-2
-
-### Added
-
-- 修复迷你模式时,主题色缺失的 bug
-
-## [4.4.3] - 2022-05-26
-
-### Added
-
-- 修复弹幕库销毁时,自定义挂载输入框的残留
-- 修复迷你模式的尺寸计算错误
-
-## [4.4.2] - 2022-05-20
-
-### Added
-
-- 移除播放器 UI 初始化的 video:loadedmetadata 事件
-- 弹幕库暴露 load 方法,用于切换弹幕源
-- 添加 error 图标,出现于视频加载错误达到上限后
-- 修复 setting 多次初始化时产生的 bug
-
-## [4.4.1] - 2022-05-17
-
-### Added
-
-- 添加 art.isInput 属性,当为 true 的时候不自动隐藏控制栏,如弹幕正在输入时
-- 添加 art.isLock 属性,在移动端当为 true 的时候不能操作快进、开始和暂停
-- 修复弹幕输入框的固定宽度 bug
-- 设置面板支持 range 和 onRange 选项
-- 添加 isAndroid 和 isIOS 工具函数
-- 弹幕库添加 lockTime 选项,可自定义输入框的锁定时间
-- 弹幕库添加 maxLength 选项,控制输入最大可输入字数
-- 弹幕库添加 minWidth 选项,控制输入框最小宽度
-- 弹幕库添加 maxWidth 选项,控制输入框最大宽度
-- 弹幕库添加 mount 选项,控制输入框自定义挂载位置
-- 弹幕库添加 beforeEmit 选项,控制弹幕发送前的校验
-- 弹幕库添加 theme 选项,控制输入框自定义挂载的主题色
-
-## [4.4.0] - 2022-05-15
-
-### Added
-
-- 设置面板支持 switch 和 onSwitch 选项
-- 弹幕库插件添加设置面板和弹幕发送
-- 弹幕库的选项添加默认模式和默认字号
-- 弹幕库字号支持按播放器的百分百
-- 修复翻转设置的图标缺失
-- 默认播放器获取了焦点后,不会自动隐藏控制栏
-- 删除字幕开关按钮,需要自行配置字幕开关
diff --git a/README.md b/README.md
index 401f4bebb..82b401b5a 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
-
+
@@ -21,9 +21,9 @@
・
API Document
・
- 弹幕演示
+ Danmuku
・
- 更新记录
+ Changelog
・
@@ -126,7 +126,7 @@ let art = new Artplayer({
## Changelog
-[CHANGELOG_CN.md](./CHANGELOG_CN.md)
+[CHANGELOG.md](./CHANGELOG.md)
## Contributing
diff --git a/docs/compiled/artplayer-plugin-vast.js b/docs/compiled/artplayer-plugin-vast.js
new file mode 100644
index 000000000..1ff86f3f2
--- /dev/null
+++ b/docs/compiled/artplayer-plugin-vast.js
@@ -0,0 +1,8 @@
+
+/*!
+ * artplayer-plugin-vast.js v1.0.2
+ * Github: https://github.com/zhw2590582/ArtPlayer
+ * (c) 2017-2025 Harvey Zack
+ * Released under the MIT License.
+ */
+!function(e,t,i,n,r,s,o,a){var d="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},u="function"==typeof d[n]&&d[n],h=u.i||{},l=u.cache||{},c="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function f(t,i){if(!l[t]){if(!e[t]){if(r[t])return r[t];var s="function"==typeof d[n]&&d[n];if(!i&&s)return s(t,!0);if(u)return u(t,!0);if(c&&"string"==typeof t)return c(t);var o=Error("Cannot find module '"+t+"'");throw o.code="MODULE_NOT_FOUND",o}h.resolve=function(i){var n=e[t][1][i];return null!=n?n:i},h.cache={};var a=l[t]=new f.Module(t);e[t][0].call(a.exports,h,a,a.exports,d)}return l[t].exports;function h(e){var t=h.resolve(e);return!1===t?{}:f(t)}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.require=c,this.exports={}},f.modules=e,f.cache=l,f.parent=u,f.distDir=void 0,f.publicUrl=void 0,f.devServer=void 0,f.i=h,f.register=function(t,i){e[t]=[function(e,t){t.exports=i},{}]},Object.defineProperty(f,"root",{get:function(){return d[n]}}),d[n]=f;for(var p=0;po);var s=e("@glomex/vast-ima-player");function o(e){return async t=>{let{template:i,constructor:n}=t,{createElement:r,setStyles:o}=n.utils,{$video:a,$player:d}=i;await (0,s.loadImaSdk)();let u=window.google.ima,h=new u.AdsRenderingSettings;h.restoreCustomPlaybackStateOnAdBreakComplete=!0,h.enablePreloading=!0;let l=new(0,s.PlayerOptions),c=!1,f=null,p=null;function v(){return f||(p=function(){let e=r("div");return e.id=`art-vast-${Date.now()}`,o(e,{position:"absolute",inset:"0",width:"100%",height:"100%",zIndex:"150",backgroundColor:"black",display:"none",pointerEvents:"auto"}),e}(),d.appendChild(p),(f=new(0,s.Player)(u,a,p,h,l)).addEventListener("AdStarted",()=>{c=!0,p.style.display="block"}),f.addEventListener("AdComplete",()=>{c=!1,p.style.display="none"}),f.addEventListener("AdError",e=>{console.error("VAST Ad Error:",e.detail),c=!1,p.style.display="none"})),f}return"function"==typeof e&&await e({art:t,playUrl:function(e){if(c)return;f||v();let t=new u.AdsRequest;t.adTagUrl=e,f.playAds(t)},playRes:function(e){if(c)return;f||v();let t=new u.AdsRequest;t.adsResponse=e,f.playAds(t)},ima:u,imaPlayer:f,get container(){return p}}),{name:"artplayerPluginVast",destroy:function(){f?.destroy&&f.destroy(),p?.parentNode&&p.parentNode.removeChild(p),p=null,f=null}}}}"undefined"!=typeof window&&(window.artplayerPluginVast=o)},{"@glomex/vast-ima-player":"edhqb","@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],edhqb:[function(e,t,i,n){var r,s,o=e("@parcel/transformer-js/src/esmodule-helpers.js");o.defineInteropFlag(i),o.export(i,"Player",()=>eu),o.export(i,"PlayerError",()=>j),o.export(i,"PlayerEvent",()=>L),o.export(i,"PlayerOptions",()=>M),o.export(i,"loadImaSdk",()=>u);var a=null,d=function(){a=null},u=function(){var e=window;return e.google&&e.google.ima?Promise.resolve(e.google.ima):a||((a=new Promise(function(e,t){var i=document.createElement("script");i.async=!0,i.src="https://imasdk.googleapis.com/js/sdkloader/ima3.js",i.onload=e,i.onerror=t,document.body.appendChild(i)}).then(function(){return e.google.ima})).then(d).catch(d),a)};function h(e,t){for(var i=0;ie.length)&&(t=e.length);for(var i=0,n=Array(t);i-1&&(O(this,ee)[ee].splice(t,1),this.g(O(this,ee)[ee]))},i.resizeAd=function(e,t){O(this,G)[G]=e,O(this,H)[H]=t,O(this,F)[F]&&O(this,F)[F].resize(e,t,this.k()),O(this,x)[x].style.width=e+"px",O(this,x)[x].style.height=t+"px"},i.reset=function(e){void 0===e&&(e=!1),e&&(O(this,X)[X]=!1,O(this,$)[$]=!1,O(this,J)[J]=!1),this.C(),O(this,ee)[ee]=[],O(this,eo)[eo]=!1,O(this,en)[en]=void 0,O(this,F)[F]&&O(this,F)[F].destroy(),O(this,F)[F]=void 0,O(this,B)[B].settings.setAutoPlayAdBreaks(!0),e&&this.P(),O(this,x)[x].style.display="none"},i.P=function(){O(this,q)[q]&&(O(this,q)[q].removeEventListener(O(this,B)[B].AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,this.u,!1),O(this,q)[q].removeEventListener(O(this,B)[B].AdErrorEvent.Type.AD_ERROR,this.l,!1),O(this,q)[q].destroy()),O(this,V)[V]&&O(this,V)[V].destroy()},i.destroy=function(){var e,t,i,n,r=this;this.reset(!0),O(this,U)[U].destroy(),I.forEach(function(e){O(r,N)[N].removeEventListener(e,r.o)}),null==(e=O(this,q)[q])||e.removeEventListener(O(this,B)[B].AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,this.u,!1),null==(t=O(this,V)[V])||t.destroy(),null==(i=O(this,q)[q])||i.destroy(),O(this,X)[X]=!1,O(this,J)[J]=!1,O(this,$)[$]=!1,null==(n=O(this,Q)[Q])||n.disconnect()},i.isCustomPlaybackUsed=function(){return!1===O(this,B)[B].settings.getDisableCustomPlaybackForIOS10Plus()&&!O(this,x)[x].querySelector("video")},i.C=function(){window.clearTimeout(O(this,er)[er]),window.clearTimeout(O(this,es)[es]),O(this,er)[er]=void 0,O(this,es)[es]=void 0,O(this,K)[K]=void 0,O(this,et)[et]=void 0,O(this,ei)[ei]=void 0,O(this,x)[x].style.display="none",O(this,x)[x].classList.remove("nonlinear"),O(this,F)[F]&&this.R()},i.o=function(e){var t=this;if(O(this,U)[U].enabled||"volumechange"===e.type){if("timeupdate"===e.type){if(O(this,F)[F]){var i=O(this,F)[F].getCuePoints().filter(function(e){return e>=0&&e=.5&&(this.dispatchEvent(new R(L.MEDIA_IMPRESSION)),O(this,X)[X]=!0)}if("play"!==e.type||O(this,$)[$]||O(this,Z)[Z]||(this.dispatchEvent(new R(L.MEDIA_START)),O(this,$)[$]=!0),"ended"===e.type&&(this.isCustomPlaybackUsed()&&O(this,N)[N].currentTime===O(this,N)[N].duration&&O(this,ee)[ee].indexOf(-1)>-1&&(O(this,N)[N].currentTime=O(this,N)[N].duration-1e-5,O(this,J)[J]=!0),O(this,q)[q].contentComplete(),O(this,F)[F]||this.T()),!window.ResizeObserver&&O(this,W)[W].autoResize&&"loadedmetadata"===e.type){var n=O(this,N)[N],r=n.offsetHeight,s=n.offsetWidth;O(this,G)[G]=s,O(this,H)[H]=r,this.R()}O(this,Z)[Z]&&"volumechange"!==e.type||this.dispatchEvent(new R(e.type))}},i.S=function(e){var t=this,i=O(this,B)[B].AdEvent;switch(e.type){case i.Type.LOADED:var n=e.getAd();O(this,en)[en]&&0===O(this,ee)[ee].length?O(this,en)[en]({ad:n,start:function(){t.M(),O(t,en)[en]=void 0},startWithoutReset:function(){t.M()}}):O(this,Y)[Y]=n;break;case i.Type.AD_BREAK_READY:this.C(),O(this,en)[en]?(O(this,en)[en]({ad:O(this,Y)[Y],adBreakTime:e.getAdData().adBreakTime,start:function(){t.M(),O(t,en)[en]=void 0},startWithoutReset:function(){t.M()}}),O(this,Y)[Y]=void 0):this.M();break;case i.Type.STARTED:var r=O(this,K)[K]=e.getAd();r.getAdPodInfo().getAdPosition()>1&&O(this,F)[F].setVolume(O(this,F)[F].getVolume()),O(this,x)[x].classList.remove("nonlinear"),this.R(),r.isLinear()?(O(this,U)[U].disable(),O(this,ei)[ei]=r.getDuration(),O(this,et)[et]=0):(O(this,x)[x].classList.add("nonlinear"),this.I()),O(this,x)[x].style.display="",O(this,eo)[eo]&&(O(this,eo)[eo]=!1,O(this,F)[F].pause());break;case i.Type.ALL_ADS_COMPLETED:if(O(this,J)[J])return;this.isCustomPlaybackUsed()&&O(this,K)[K]&&-1!==O(this,K)[K].getAdPodInfo().getTimeOffset()&&this.I(),this.reset();break;case i.Type.CONTENT_PAUSE_REQUESTED:this.C(),O(this,K)[K]=e.getAd(),O(this,x)[x].style.display="",O(this,N)[N].pause(),this.R(),O(this,K)[K]&&this.A(O(this,K)[K].getAdPodInfo().getTimeOffset()),O(this,F)[F].setVolume(O(this,N)[N].muted?0:O(this,N)[N].volume),O(this,U)[U].disable(),O(this,ei)[ei]=O(this,K)[K].getDuration(),O(this,et)[et]=0;break;case i.Type.CONTENT_RESUME_REQUESTED:var s=!!O(this,K)[K];if(s){var o=O(this,F)[F].getVolume();O(this,N)[N].muted=0===o,O(this,N)[N].volume=O(this,ea)[ea]}O(this,J)[J]&&(O(this,N)[N].currentTime=O(this,N)[N].duration+1,O(this,J)[J]=!1),O(this,N)[N].ended?(this.reset(),this.T()):this.C(),s&&(O(this,eo)[eo]=!1,this.I());break;case i.Type.AD_METADATA:this.g(O(this,F)[F].getCuePoints()),-1===O(this,ee)[ee].indexOf(0)&&(O(this,en)[en]?O(this,en)[en]({start:function(){t.I(),O(t,en)[en]=void 0},startWithoutReset:function(){t.I()}}):this.I());break;case i.Type.AD_PROGRESS:var a=e.getAdData();O(this,et)[et]=a.currentTime,O(this,ei)[ei]=a.duration;break;case i.Type.LOG:var d=e.getAdData();O(this,en)[en]?O(this,en)[en]({start:function(){t.I(),O(t,en)[en]=void 0},startWithoutReset:function(){t.I()}}):d.adError&&!O(this,K)[K]&&this.I();break;case i.Type.VOLUME_CHANGED:var u=O(this,F)[F].getVolume();u>0&&(O(this,ea)[ea]=u)}},i.l=function(e){this.j(this.B(e))},i.u=function(e){var t,i=this,n=O(this,B)[B],r=n.AdEvent,s=n.AdErrorEvent.Type.AD_ERROR;window.clearTimeout(O(this,er)[er]);var o=O(this,F)[F]=e.getAdsManager(O(this,U)[U],O(this,z)[z]);Object.keys(r.Type).forEach(function(e){o.addEventListener(r.Type[e],function(t){if(i.S(t),L[e]){var n=["LOG","AD_PROGRESS"].indexOf(e)>-1;i.dispatchEvent(new R(L[e],{detail:{ad:t.getAd()||O(i,K)[K],adData:n?t.getAdData():{}}}))}})}),o.addEventListener(s,function(e){return i.j(i.B(e))});try{o.init(O(this,G)[G],O(this,H)[H],this.k()),o.setVolume(O(this,N)[N].muted?0:O(this,N)[N].volume),null==(t=O(this,V)[V])||t.initialize(),O(this,en)[en]||this.M()}catch(e){this.j(new j(e.message))}},i.M=function(){if(O(this,$)[$]||(this.dispatchEvent(new R(L.MEDIA_START)),O(this,$)[$]=!0),O(this,F)[F])try{O(this,F)[F].start()}catch(e){this.j(new j(e.message))}else this.I()},i.T=function(){var e=this;setTimeout(function(){O(e,X)[X]=!1,O(e,$)[$]=!1,O(e,J)[J]=!1,e.dispatchEvent(new R(L.MEDIA_STOP))},1)},i.v=function(e){for(var t,i=function(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(i)return(i=i.call(e)).next.bind(i);if(Array.isArray(e)||(i=function(e,t){if(e){if("string"==typeof e)return A(e,void 0);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?A(e,void 0):void 0}}(e))){i&&(e=i);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(e);!(t=i()).done;){var n=t.value;n.contentBoxSize&&1===n.contentBoxSize.length?(O(this,G)[G]=n.contentBoxSize[0].inlineSize,O(this,H)[H]=n.contentBoxSize[0].blockSize):n.contentBoxSize&&n.contentBoxSize.inlineSize?(O(this,G)[G]=n.contentBoxSize.inlineSize,O(this,H)[H]=n.contentBoxSize.blockSize):(O(this,G)[G]=n.contentRect.width,O(this,H)[H]=n.contentRect.height)}this.R()},i.R=function(){if(O(this,W)[W].autoResize&&O(this,F)[F]){var e=O(this,K)[K],t=this.k();e&&!e.isLinear()?e&&(e.getWidth()>O(this,G)[G]||e.getHeight()>O(this,H)[H]?this.resizeAd(O(this,G)[G],O(this,H)[H]):(O(this,F)[F].resize(e.getWidth(),e.getHeight()+20,t),O(this,x)[x].style.width=e.getWidth()+"px",O(this,x)[x].style.height=e.getHeight()+20+"px")):this.resizeAd(O(this,G)[G],O(this,H)[H])}},i.k=function(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||O(this,N)[N].webkitDisplayingFullscreen?O(this,B)[B].ViewMode.FULLSCREEN:O(this,B)[B].ViewMode.NORMAL},i.I=function(){var e=this;O(this,x)[x].style.display="none",O(this,N)[N].ended||(O(this,U)[U].enable(),O(this,eo)[eo]?(O(this,N)[N].pause(),this.dispatchEvent(new R("pause"))):(this.p().then(function(){}).catch(function(){e.dispatchEvent(new R("pause"))}),this.dispatchEvent(new R("play")),this.dispatchEvent(new R(L.MEDIA_RESUMED))),O(this,eo)[eo]=!1)},i.B=function(e){var t=e.getError(),i=new j(t.getMessage());return i.type=t.getType(),i.errorCode=t.getErrorCode(),i.vastErrorCode=t.getVastErrorCode&&t.getVastErrorCode(),i.innerError=t.getInnerError(),i},i.j=function(e){var t=this;this.dispatchEvent(new R(L.AD_ERROR,{detail:{error:e}})),this.C(),O(this,en)[en]?O(this,en)[en]({start:function(){t.I(),O(t,en)[en]=void 0},startWithoutReset:function(){t.I()}}):this.I()},l(t,[{key:"volume",get:function(){return!O(this,U)[U].enabled&&O(this,F)[F]?O(this,F)[F].getVolume():O(this,N)[N].volume},set:function(e){!O(this,U)[U].enabled&&O(this,F)[F]&&O(this,F)[F].setVolume(e),O(this,N)[N].volume=e}},{key:"muted",get:function(){return!O(this,U)[U].enabled&&O(this,F)[F]?0===O(this,F)[F].getVolume():O(this,N)[N].muted},set:function(e){!O(this,U)[U].enabled&&O(this,F)[F]&&O(this,F)[F].setVolume(e?0:O(this,ea)[ea]),O(this,N)[N].muted=e}},{key:"currentTime",get:function(){return void 0!==O(this,et)[et]?O(this,et)[et]:O(this,N)[N].currentTime},set:function(e){O(this,U)[U].enabled&&(O(this,N)[N].currentTime=e)}},{key:"duration",get:function(){return void 0!==O(this,ei)[ei]?O(this,ei)[ei]:O(this,N)[N].duration}},{key:"cuePoints",get:function(){return[].concat(O(this,ee)[ee])}}]),t}(k)},{"@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],"6ykb1":[function(e,t,i,n){i.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},i.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},i.exportAll=function(e,t){return Object.keys(e).forEach(function(i){"default"===i||"__esModule"===i||Object.prototype.hasOwnProperty.call(t,i)||Object.defineProperty(t,i,{enumerable:!0,get:function(){return e[i]}})}),t},i.export=function(e,t,i){Object.defineProperty(e,t,{enumerable:!0,get:i})}},{}]},["dwHLV"],"dwHLV","parcelRequire4dc0",{});
\ No newline at end of file
diff --git a/docs/compiled/artplayer-plugin-vast.legacy.js b/docs/compiled/artplayer-plugin-vast.legacy.js
new file mode 100644
index 000000000..4c785b2da
--- /dev/null
+++ b/docs/compiled/artplayer-plugin-vast.legacy.js
@@ -0,0 +1,8 @@
+
+/*!
+ * artplayer-plugin-vast.js v1.0.2
+ * Github: https://github.com/zhw2590582/ArtPlayer
+ * (c) 2017-2025 Harvey Zack
+ * Released under the MIT License.
+ */
+!function(e,t,n,r,i,o,s,a){var u="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},c="function"==typeof u[r]&&u[r],l=c.i||{},d=c.cache||{},h="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function f(t,n){if(!d[t]){if(!e[t]){if(i[t])return i[t];var o="function"==typeof u[r]&&u[r];if(!n&&o)return o(t,!0);if(c)return c(t,!0);if(h&&"string"==typeof t)return h(t);var s=Error("Cannot find module '"+t+"'");throw s.code="MODULE_NOT_FOUND",s}l.resolve=function(n){var r=e[t][1][n];return null!=r?r:n},l.cache={};var a=d[t]=new f.Module(t);e[t][0].call(a.exports,l,a,a.exports,u)}return d[t].exports;function l(e){var t=l.resolve(e);return!1===t?{}:f(t)}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.require=h,this.exports={}},f.modules=e,f.cache=d,f.parent=c,f.distDir=void 0,f.publicUrl=void 0,f.devServer=void 0,f.i=l,f.register=function(t,n){e[t]=[function(e,t){t.exports=n},{}]},Object.defineProperty(f,"root",{get:function(){return u[r]}}),u[r]=f;for(var p=0;pt.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var i=0,r=Object.getOwnPropertySymbols(e);it.indexOf(r[i])&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]]);return n}function l(e,t,n,r){var i,s=arguments.length,a=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(("undefined"==typeof Reflect?"undefined":(0,o._)(Reflect))==="object"&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var u=e.length-1;u>=0;u--)(i=e[u])&&(a=(s<3?i(a):s>3?i(t,n,a):i(t,n))||a);return s>3&&a&&Object.defineProperty(t,n,a),a}function d(e,t){return function(n,r){t(n,r,e)}}function h(e,t,n,r,i,s){function a(e){if(void 0!==e&&"function"!=typeof e)throw TypeError("Function expected");return e}for(var u,c=r.kind,l="getter"===c?"get":"setter"===c?"set":"value",d=!t&&e?r.static?e:e.prototype:null,h=t||(d?Object.getOwnPropertyDescriptor(d,r.name):{}),f=!1,p=n.length-1;p>=0;p--){var v={};for(var y in r)v[y]="access"===y?{}:r[y];for(var y in r.access)v.access[y]=r.access[y];v.addInitializer=function(e){if(f)throw TypeError("Cannot add initializers after decoration has completed");s.push(a(e||null))};var b=(0,n[p])("accessor"===c?{get:h.get,set:h.set}:h[l],v);if("accessor"===c){if(void 0===b)continue;if(null===b||(void 0===b?"undefined":(0,o._)(b))!=="object")throw TypeError("Object expected");(u=a(b.get))&&(h.get=u),(u=a(b.set))&&(h.set=u),(u=a(b.init))&&i.unshift(u)}else(u=a(b))&&("field"===c?i.unshift(u):h[l]=u)}d&&Object.defineProperty(d,r.name,h),f=!0}function f(e,t,n){for(var r=arguments.length>2,i=0;i0&&i[i.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!i||c[1]>i[0]&&c[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 A(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)s.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return s}function w(){for(var e=[],t=0;t1||a(e,t)})},t&&(r[e]=t(r[e])))}function a(e,t){try{var n;(n=i[e](t)).value instanceof S?Promise.resolve(n.value.v).then(u,c):l(o[0][2],n)}catch(e){l(o[0][3],e)}}function u(e){a("next",e)}function c(e){a("throw",e)}function l(e,t){e(t),o.shift(),o.length&&a(o[0][0],o[0][1])}}function j(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,i){t[r]=e[r]?function(t){return(n=!n)?{value:S(e[r](t)),done:!1}:i?i(t):t}:i}}function R(e){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=g(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,i){var o,s,a;o=r,s=i,a=(t=e[n](t)).done,Promise.resolve(t.value).then(function(e){o({value:e,done:a})},s)})}}}function D(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var x=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},I=function(e){return(I=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 C(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=I(e),r=0;re.length)&&(t=e.length);for(var n=0,r=Array(t);n-1&&(A(this,ee)[ee].splice(t,1),this.g(A(this,ee)[ee]))},n.resizeAd=function(e,t){A(this,V)[V]=e,A(this,H)[H]=t,A(this,G)[G]&&A(this,G)[G].resize(e,t,this.k()),A(this,N)[N].style.width=e+"px",A(this,N)[N].style.height=t+"px"},n.reset=function(e){void 0===e&&(e=!1),e&&(A(this,Y)[Y]=!1,A(this,X)[X]=!1,A(this,J)[J]=!1),this.C(),A(this,ee)[ee]=[],A(this,es)[es]=!1,A(this,er)[er]=void 0,A(this,G)[G]&&A(this,G)[G].destroy(),A(this,G)[G]=void 0,A(this,F)[F].settings.setAutoPlayAdBreaks(!0),e&&this.P(),A(this,N)[N].style.display="none"},n.P=function(){A(this,q)[q]&&(A(this,q)[q].removeEventListener(A(this,F)[F].AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,this.u,!1),A(this,q)[q].removeEventListener(A(this,F)[F].AdErrorEvent.Type.AD_ERROR,this.l,!1),A(this,q)[q].destroy()),A(this,B)[B]&&A(this,B)[B].destroy()},n.destroy=function(){var e,t,n,r,i=this;this.reset(!0),A(this,U)[U].destroy(),I.forEach(function(e){A(i,L)[L].removeEventListener(e,i.o)}),null==(e=A(this,q)[q])||e.removeEventListener(A(this,F)[F].AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,this.u,!1),null==(t=A(this,B)[B])||t.destroy(),null==(n=A(this,q)[q])||n.destroy(),A(this,Y)[Y]=!1,A(this,J)[J]=!1,A(this,X)[X]=!1,null==(r=A(this,Q)[Q])||r.disconnect()},n.isCustomPlaybackUsed=function(){return!1===A(this,F)[F].settings.getDisableCustomPlaybackForIOS10Plus()&&!A(this,N)[N].querySelector("video")},n.C=function(){window.clearTimeout(A(this,ei)[ei]),window.clearTimeout(A(this,eo)[eo]),A(this,ei)[ei]=void 0,A(this,eo)[eo]=void 0,A(this,K)[K]=void 0,A(this,et)[et]=void 0,A(this,en)[en]=void 0,A(this,N)[N].style.display="none",A(this,N)[N].classList.remove("nonlinear"),A(this,G)[G]&&this.R()},n.o=function(e){var t=this;if(A(this,U)[U].enabled||"volumechange"===e.type){if("timeupdate"===e.type){if(A(this,G)[G]){var n=A(this,G)[G].getCuePoints().filter(function(e){return e>=0&&e=.5&&(this.dispatchEvent(new S(C.MEDIA_IMPRESSION)),A(this,Y)[Y]=!0)}if("play"!==e.type||A(this,X)[X]||A(this,Z)[Z]||(this.dispatchEvent(new S(C.MEDIA_START)),A(this,X)[X]=!0),"ended"===e.type&&(this.isCustomPlaybackUsed()&&A(this,L)[L].currentTime===A(this,L)[L].duration&&A(this,ee)[ee].indexOf(-1)>-1&&(A(this,L)[L].currentTime=A(this,L)[L].duration-1e-5,A(this,J)[J]=!0),A(this,q)[q].contentComplete(),A(this,G)[G]||this.T()),!window.ResizeObserver&&A(this,W)[W].autoResize&&"loadedmetadata"===e.type){var r=A(this,L)[L],i=r.offsetHeight,o=r.offsetWidth;A(this,V)[V]=o,A(this,H)[H]=i,this.R()}A(this,Z)[Z]&&"volumechange"!==e.type||this.dispatchEvent(new S(e.type))}},n.S=function(e){var t=this,n=A(this,F)[F].AdEvent;switch(e.type){case n.Type.LOADED:var r=e.getAd();A(this,er)[er]&&0===A(this,ee)[ee].length?A(this,er)[er]({ad:r,start:function(){t.M(),A(t,er)[er]=void 0},startWithoutReset:function(){t.M()}}):A(this,$)[$]=r;break;case n.Type.AD_BREAK_READY:this.C(),A(this,er)[er]?(A(this,er)[er]({ad:A(this,$)[$],adBreakTime:e.getAdData().adBreakTime,start:function(){t.M(),A(t,er)[er]=void 0},startWithoutReset:function(){t.M()}}),A(this,$)[$]=void 0):this.M();break;case n.Type.STARTED:var i=A(this,K)[K]=e.getAd();i.getAdPodInfo().getAdPosition()>1&&A(this,G)[G].setVolume(A(this,G)[G].getVolume()),A(this,N)[N].classList.remove("nonlinear"),this.R(),i.isLinear()?(A(this,U)[U].disable(),A(this,en)[en]=i.getDuration(),A(this,et)[et]=0):(A(this,N)[N].classList.add("nonlinear"),this.I()),A(this,N)[N].style.display="",A(this,es)[es]&&(A(this,es)[es]=!1,A(this,G)[G].pause());break;case n.Type.ALL_ADS_COMPLETED:if(A(this,J)[J])return;this.isCustomPlaybackUsed()&&A(this,K)[K]&&-1!==A(this,K)[K].getAdPodInfo().getTimeOffset()&&this.I(),this.reset();break;case n.Type.CONTENT_PAUSE_REQUESTED:this.C(),A(this,K)[K]=e.getAd(),A(this,N)[N].style.display="",A(this,L)[L].pause(),this.R(),A(this,K)[K]&&this.A(A(this,K)[K].getAdPodInfo().getTimeOffset()),A(this,G)[G].setVolume(A(this,L)[L].muted?0:A(this,L)[L].volume),A(this,U)[U].disable(),A(this,en)[en]=A(this,K)[K].getDuration(),A(this,et)[et]=0;break;case n.Type.CONTENT_RESUME_REQUESTED:var o=!!A(this,K)[K];if(o){var s=A(this,G)[G].getVolume();A(this,L)[L].muted=0===s,A(this,L)[L].volume=A(this,ea)[ea]}A(this,J)[J]&&(A(this,L)[L].currentTime=A(this,L)[L].duration+1,A(this,J)[J]=!1),A(this,L)[L].ended?(this.reset(),this.T()):this.C(),o&&(A(this,es)[es]=!1,this.I());break;case n.Type.AD_METADATA:this.g(A(this,G)[G].getCuePoints()),-1===A(this,ee)[ee].indexOf(0)&&(A(this,er)[er]?A(this,er)[er]({start:function(){t.I(),A(t,er)[er]=void 0},startWithoutReset:function(){t.I()}}):this.I());break;case n.Type.AD_PROGRESS:var a=e.getAdData();A(this,et)[et]=a.currentTime,A(this,en)[en]=a.duration;break;case n.Type.LOG:var u=e.getAdData();A(this,er)[er]?A(this,er)[er]({start:function(){t.I(),A(t,er)[er]=void 0},startWithoutReset:function(){t.I()}}):u.adError&&!A(this,K)[K]&&this.I();break;case n.Type.VOLUME_CHANGED:var c=A(this,G)[G].getVolume();c>0&&(A(this,ea)[ea]=c)}},n.l=function(e){this.j(this.B(e))},n.u=function(e){var t,n=this,r=A(this,F)[F],i=r.AdEvent,o=r.AdErrorEvent.Type.AD_ERROR;window.clearTimeout(A(this,ei)[ei]);var s=A(this,G)[G]=e.getAdsManager(A(this,U)[U],A(this,z)[z]);Object.keys(i.Type).forEach(function(e){s.addEventListener(i.Type[e],function(t){if(n.S(t),C[e]){var r=["LOG","AD_PROGRESS"].indexOf(e)>-1;n.dispatchEvent(new S(C[e],{detail:{ad:t.getAd()||A(n,K)[K],adData:r?t.getAdData():{}}}))}})}),s.addEventListener(o,function(e){return n.j(n.B(e))});try{s.init(A(this,V)[V],A(this,H)[H],this.k()),s.setVolume(A(this,L)[L].muted?0:A(this,L)[L].volume),null==(t=A(this,B)[B])||t.initialize(),A(this,er)[er]||this.M()}catch(e){this.j(new M(e.message))}},n.M=function(){if(A(this,X)[X]||(this.dispatchEvent(new S(C.MEDIA_START)),A(this,X)[X]=!0),A(this,G)[G])try{A(this,G)[G].start()}catch(e){this.j(new M(e.message))}else this.I()},n.T=function(){var e=this;setTimeout(function(){A(e,Y)[Y]=!1,A(e,X)[X]=!1,A(e,J)[J]=!1,e.dispatchEvent(new S(C.MEDIA_STOP))},1)},n.v=function(e){for(var t,n=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return _(e,void 0);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_(e,void 0):void 0}}(e))){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(e);!(t=n()).done;){var r=t.value;r.contentBoxSize&&1===r.contentBoxSize.length?(A(this,V)[V]=r.contentBoxSize[0].inlineSize,A(this,H)[H]=r.contentBoxSize[0].blockSize):r.contentBoxSize&&r.contentBoxSize.inlineSize?(A(this,V)[V]=r.contentBoxSize.inlineSize,A(this,H)[H]=r.contentBoxSize.blockSize):(A(this,V)[V]=r.contentRect.width,A(this,H)[H]=r.contentRect.height)}this.R()},n.R=function(){if(A(this,W)[W].autoResize&&A(this,G)[G]){var e=A(this,K)[K],t=this.k();e&&!e.isLinear()?e&&(e.getWidth()>A(this,V)[V]||e.getHeight()>A(this,H)[H]?this.resizeAd(A(this,V)[V],A(this,H)[H]):(A(this,G)[G].resize(e.getWidth(),e.getHeight()+20,t),A(this,N)[N].style.width=e.getWidth()+"px",A(this,N)[N].style.height=e.getHeight()+20+"px")):this.resizeAd(A(this,V)[V],A(this,H)[H])}},n.k=function(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||A(this,L)[L].webkitDisplayingFullscreen?A(this,F)[F].ViewMode.FULLSCREEN:A(this,F)[F].ViewMode.NORMAL},n.I=function(){var e=this;A(this,N)[N].style.display="none",A(this,L)[L].ended||(A(this,U)[U].enable(),A(this,es)[es]?(A(this,L)[L].pause(),this.dispatchEvent(new S("pause"))):(this.p().then(function(){}).catch(function(){e.dispatchEvent(new S("pause"))}),this.dispatchEvent(new S("play")),this.dispatchEvent(new S(C.MEDIA_RESUMED))),A(this,es)[es]=!1)},n.B=function(e){var t=e.getError(),n=new M(t.getMessage());return n.type=t.getType(),n.errorCode=t.getErrorCode(),n.vastErrorCode=t.getVastErrorCode&&t.getVastErrorCode(),n.innerError=t.getInnerError(),n},n.j=function(e){var t=this;this.dispatchEvent(new S(C.AD_ERROR,{detail:{error:e}})),this.C(),A(this,er)[er]?A(this,er)[er]({start:function(){t.I(),A(t,er)[er]=void 0},startWithoutReset:function(){t.I()}}):this.I()},d(t,[{key:"volume",get:function(){return!A(this,U)[U].enabled&&A(this,G)[G]?A(this,G)[G].getVolume():A(this,L)[L].volume},set:function(e){!A(this,U)[U].enabled&&A(this,G)[G]&&A(this,G)[G].setVolume(e),A(this,L)[L].volume=e}},{key:"muted",get:function(){return!A(this,U)[U].enabled&&A(this,G)[G]?0===A(this,G)[G].getVolume():A(this,L)[L].muted},set:function(e){!A(this,U)[U].enabled&&A(this,G)[G]&&A(this,G)[G].setVolume(e?0:A(this,ea)[ea]),A(this,L)[L].muted=e}},{key:"currentTime",get:function(){return void 0!==A(this,et)[et]?A(this,et)[et]:A(this,L)[L].currentTime},set:function(e){A(this,U)[U].enabled&&(A(this,L)[L].currentTime=e)}},{key:"duration",get:function(){return void 0!==A(this,en)[en]?A(this,en)[en]:A(this,L)[L].duration}},{key:"cuePoints",get:function(){return[].concat(A(this,ee)[ee])}}]),t}(x)},{"@parcel/transformer-js/src/esmodule-helpers.js":"qpMMf"}]},["bxP13"],"bxP13","parcelRequire4dc0",{});
\ No newline at end of file
diff --git a/docs/compiled/artplayer-plugin-vast.mjs b/docs/compiled/artplayer-plugin-vast.mjs
new file mode 100644
index 000000000..614acf9a4
--- /dev/null
+++ b/docs/compiled/artplayer-plugin-vast.mjs
@@ -0,0 +1,8 @@
+
+/*!
+ * artplayer-plugin-vast.js v1.0.2
+ * Github: https://github.com/zhw2590582/ArtPlayer
+ * (c) 2017-2025 Harvey Zack
+ * Released under the MIT License.
+ */
+!function(e,t,i,n,r,s,o,a){var d="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},u="function"==typeof d[n]&&d[n],h=u.i||{},l=u.cache||{},c="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function f(t,i){if(!l[t]){if(!e[t]){if(r[t])return r[t];var s="function"==typeof d[n]&&d[n];if(!i&&s)return s(t,!0);if(u)return u(t,!0);if(c&&"string"==typeof t)return c(t);var o=Error("Cannot find module '"+t+"'");throw o.code="MODULE_NOT_FOUND",o}h.resolve=function(i){var n=e[t][1][i];return null!=n?n:i},h.cache={};var a=l[t]=new f.Module(t);e[t][0].call(a.exports,h,a,a.exports,d)}return l[t].exports;function h(e){var t=h.resolve(e);return!1===t?{}:f(t)}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.require=c,this.exports={}},f.modules=e,f.cache=l,f.parent=u,f.distDir=void 0,f.publicUrl=void 0,f.devServer=void 0,f.i=h,f.register=function(t,i){e[t]=[function(e,t){t.exports=i},{}]},Object.defineProperty(f,"root",{get:function(){return d[n]}}),d[n]=f;for(var p=0;po);var s=e("@glomex/vast-ima-player");function o(e){return async t=>{let{template:i,constructor:n}=t,{createElement:r,setStyles:o}=n.utils,{$video:a,$player:d}=i;await (0,s.loadImaSdk)();let u=window.google.ima,h=new u.AdsRenderingSettings;h.restoreCustomPlaybackStateOnAdBreakComplete=!0,h.enablePreloading=!0;let l=new(0,s.PlayerOptions),c=!1,f=null,p=null;function v(){return f||(p=function(){let e=r("div");return e.id=`art-vast-${Date.now()}`,o(e,{position:"absolute",inset:"0",width:"100%",height:"100%",zIndex:"150",backgroundColor:"black",display:"none",pointerEvents:"auto"}),e}(),d.appendChild(p),(f=new(0,s.Player)(u,a,p,h,l)).addEventListener("AdStarted",()=>{c=!0,p.style.display="block"}),f.addEventListener("AdComplete",()=>{c=!1,p.style.display="none"}),f.addEventListener("AdError",e=>{console.error("VAST Ad Error:",e.detail),c=!1,p.style.display="none"})),f}return"function"==typeof e&&await e({art:t,playUrl:function(e){if(c)return;f||v();let t=new u.AdsRequest;t.adTagUrl=e,f.playAds(t)},playRes:function(e){if(c)return;f||v();let t=new u.AdsRequest;t.adsResponse=e,f.playAds(t)},ima:u,imaPlayer:f,get container(){return p}}),{name:"artplayerPluginVast",destroy:function(){f?.destroy&&f.destroy(),p?.parentNode&&p.parentNode.removeChild(p),p=null,f=null}}}}"undefined"!=typeof window&&(window.artplayerPluginVast=o)},{"@glomex/vast-ima-player":"1iE81","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"1iE81":[function(e,t,i,n){var r,s,o=e("@parcel/transformer-js/src/esmodule-helpers.js");o.defineInteropFlag(i),o.export(i,"Player",()=>eu),o.export(i,"PlayerError",()=>j),o.export(i,"PlayerEvent",()=>M),o.export(i,"PlayerOptions",()=>L),o.export(i,"loadImaSdk",()=>u);var a=null,d=function(){a=null},u=function(){var e=window;return e.google&&e.google.ima?Promise.resolve(e.google.ima):a||((a=new Promise(function(e,t){var i=document.createElement("script");i.async=!0,i.src="https://imasdk.googleapis.com/js/sdkloader/ima3.js",i.onload=e,i.onerror=t,document.body.appendChild(i)}).then(function(){return e.google.ima})).then(d).catch(d),a)};function h(e,t){for(var i=0;ie.length)&&(t=e.length);for(var i=0,n=Array(t);i-1&&(O(this,ee)[ee].splice(t,1),this.g(O(this,ee)[ee]))},i.resizeAd=function(e,t){O(this,G)[G]=e,O(this,q)[q]=t,O(this,F)[F]&&O(this,F)[F].resize(e,t,this.k()),O(this,x)[x].style.width=e+"px",O(this,x)[x].style.height=t+"px"},i.reset=function(e){void 0===e&&(e=!1),e&&(O(this,Y)[Y]=!1,O(this,X)[X]=!1,O(this,J)[J]=!1),this.C(),O(this,ee)[ee]=[],O(this,eo)[eo]=!1,O(this,en)[en]=void 0,O(this,F)[F]&&O(this,F)[F].destroy(),O(this,F)[F]=void 0,O(this,B)[B].settings.setAutoPlayAdBreaks(!0),e&&this.P(),O(this,x)[x].style.display="none"},i.P=function(){O(this,H)[H]&&(O(this,H)[H].removeEventListener(O(this,B)[B].AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,this.u,!1),O(this,H)[H].removeEventListener(O(this,B)[B].AdErrorEvent.Type.AD_ERROR,this.l,!1),O(this,H)[H].destroy()),O(this,V)[V]&&O(this,V)[V].destroy()},i.destroy=function(){var e,t,i,n,r=this;this.reset(!0),O(this,U)[U].destroy(),I.forEach(function(e){O(r,N)[N].removeEventListener(e,r.o)}),null==(e=O(this,H)[H])||e.removeEventListener(O(this,B)[B].AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,this.u,!1),null==(t=O(this,V)[V])||t.destroy(),null==(i=O(this,H)[H])||i.destroy(),O(this,Y)[Y]=!1,O(this,J)[J]=!1,O(this,X)[X]=!1,null==(n=O(this,Q)[Q])||n.disconnect()},i.isCustomPlaybackUsed=function(){return!1===O(this,B)[B].settings.getDisableCustomPlaybackForIOS10Plus()&&!O(this,x)[x].querySelector("video")},i.C=function(){window.clearTimeout(O(this,er)[er]),window.clearTimeout(O(this,es)[es]),O(this,er)[er]=void 0,O(this,es)[es]=void 0,O(this,K)[K]=void 0,O(this,et)[et]=void 0,O(this,ei)[ei]=void 0,O(this,x)[x].style.display="none",O(this,x)[x].classList.remove("nonlinear"),O(this,F)[F]&&this.R()},i.o=function(e){var t=this;if(O(this,U)[U].enabled||"volumechange"===e.type){if("timeupdate"===e.type){if(O(this,F)[F]){var i=O(this,F)[F].getCuePoints().filter(function(e){return e>=0&&e=.5&&(this.dispatchEvent(new R(M.MEDIA_IMPRESSION)),O(this,Y)[Y]=!0)}if("play"!==e.type||O(this,X)[X]||O(this,$)[$]||(this.dispatchEvent(new R(M.MEDIA_START)),O(this,X)[X]=!0),"ended"===e.type&&(this.isCustomPlaybackUsed()&&O(this,N)[N].currentTime===O(this,N)[N].duration&&O(this,ee)[ee].indexOf(-1)>-1&&(O(this,N)[N].currentTime=O(this,N)[N].duration-1e-5,O(this,J)[J]=!0),O(this,H)[H].contentComplete(),O(this,F)[F]||this.T()),!window.ResizeObserver&&O(this,W)[W].autoResize&&"loadedmetadata"===e.type){var n=O(this,N)[N],r=n.offsetHeight,s=n.offsetWidth;O(this,G)[G]=s,O(this,q)[q]=r,this.R()}O(this,$)[$]&&"volumechange"!==e.type||this.dispatchEvent(new R(e.type))}},i.S=function(e){var t=this,i=O(this,B)[B].AdEvent;switch(e.type){case i.Type.LOADED:var n=e.getAd();O(this,en)[en]&&0===O(this,ee)[ee].length?O(this,en)[en]({ad:n,start:function(){t.M(),O(t,en)[en]=void 0},startWithoutReset:function(){t.M()}}):O(this,Z)[Z]=n;break;case i.Type.AD_BREAK_READY:this.C(),O(this,en)[en]?(O(this,en)[en]({ad:O(this,Z)[Z],adBreakTime:e.getAdData().adBreakTime,start:function(){t.M(),O(t,en)[en]=void 0},startWithoutReset:function(){t.M()}}),O(this,Z)[Z]=void 0):this.M();break;case i.Type.STARTED:var r=O(this,K)[K]=e.getAd();r.getAdPodInfo().getAdPosition()>1&&O(this,F)[F].setVolume(O(this,F)[F].getVolume()),O(this,x)[x].classList.remove("nonlinear"),this.R(),r.isLinear()?(O(this,U)[U].disable(),O(this,ei)[ei]=r.getDuration(),O(this,et)[et]=0):(O(this,x)[x].classList.add("nonlinear"),this.I()),O(this,x)[x].style.display="",O(this,eo)[eo]&&(O(this,eo)[eo]=!1,O(this,F)[F].pause());break;case i.Type.ALL_ADS_COMPLETED:if(O(this,J)[J])return;this.isCustomPlaybackUsed()&&O(this,K)[K]&&-1!==O(this,K)[K].getAdPodInfo().getTimeOffset()&&this.I(),this.reset();break;case i.Type.CONTENT_PAUSE_REQUESTED:this.C(),O(this,K)[K]=e.getAd(),O(this,x)[x].style.display="",O(this,N)[N].pause(),this.R(),O(this,K)[K]&&this.A(O(this,K)[K].getAdPodInfo().getTimeOffset()),O(this,F)[F].setVolume(O(this,N)[N].muted?0:O(this,N)[N].volume),O(this,U)[U].disable(),O(this,ei)[ei]=O(this,K)[K].getDuration(),O(this,et)[et]=0;break;case i.Type.CONTENT_RESUME_REQUESTED:var s=!!O(this,K)[K];if(s){var o=O(this,F)[F].getVolume();O(this,N)[N].muted=0===o,O(this,N)[N].volume=O(this,ea)[ea]}O(this,J)[J]&&(O(this,N)[N].currentTime=O(this,N)[N].duration+1,O(this,J)[J]=!1),O(this,N)[N].ended?(this.reset(),this.T()):this.C(),s&&(O(this,eo)[eo]=!1,this.I());break;case i.Type.AD_METADATA:this.g(O(this,F)[F].getCuePoints()),-1===O(this,ee)[ee].indexOf(0)&&(O(this,en)[en]?O(this,en)[en]({start:function(){t.I(),O(t,en)[en]=void 0},startWithoutReset:function(){t.I()}}):this.I());break;case i.Type.AD_PROGRESS:var a=e.getAdData();O(this,et)[et]=a.currentTime,O(this,ei)[ei]=a.duration;break;case i.Type.LOG:var d=e.getAdData();O(this,en)[en]?O(this,en)[en]({start:function(){t.I(),O(t,en)[en]=void 0},startWithoutReset:function(){t.I()}}):d.adError&&!O(this,K)[K]&&this.I();break;case i.Type.VOLUME_CHANGED:var u=O(this,F)[F].getVolume();u>0&&(O(this,ea)[ea]=u)}},i.l=function(e){this.j(this.B(e))},i.u=function(e){var t,i=this,n=O(this,B)[B],r=n.AdEvent,s=n.AdErrorEvent.Type.AD_ERROR;window.clearTimeout(O(this,er)[er]);var o=O(this,F)[F]=e.getAdsManager(O(this,U)[U],O(this,z)[z]);Object.keys(r.Type).forEach(function(e){o.addEventListener(r.Type[e],function(t){if(i.S(t),M[e]){var n=["LOG","AD_PROGRESS"].indexOf(e)>-1;i.dispatchEvent(new R(M[e],{detail:{ad:t.getAd()||O(i,K)[K],adData:n?t.getAdData():{}}}))}})}),o.addEventListener(s,function(e){return i.j(i.B(e))});try{o.init(O(this,G)[G],O(this,q)[q],this.k()),o.setVolume(O(this,N)[N].muted?0:O(this,N)[N].volume),null==(t=O(this,V)[V])||t.initialize(),O(this,en)[en]||this.M()}catch(e){this.j(new j(e.message))}},i.M=function(){if(O(this,X)[X]||(this.dispatchEvent(new R(M.MEDIA_START)),O(this,X)[X]=!0),O(this,F)[F])try{O(this,F)[F].start()}catch(e){this.j(new j(e.message))}else this.I()},i.T=function(){var e=this;setTimeout(function(){O(e,Y)[Y]=!1,O(e,X)[X]=!1,O(e,J)[J]=!1,e.dispatchEvent(new R(M.MEDIA_STOP))},1)},i.v=function(e){for(var t,i=function(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(i)return(i=i.call(e)).next.bind(i);if(Array.isArray(e)||(i=function(e,t){if(e){if("string"==typeof e)return A(e,void 0);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?A(e,void 0):void 0}}(e))){i&&(e=i);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(e);!(t=i()).done;){var n=t.value;n.contentBoxSize&&1===n.contentBoxSize.length?(O(this,G)[G]=n.contentBoxSize[0].inlineSize,O(this,q)[q]=n.contentBoxSize[0].blockSize):n.contentBoxSize&&n.contentBoxSize.inlineSize?(O(this,G)[G]=n.contentBoxSize.inlineSize,O(this,q)[q]=n.contentBoxSize.blockSize):(O(this,G)[G]=n.contentRect.width,O(this,q)[q]=n.contentRect.height)}this.R()},i.R=function(){if(O(this,W)[W].autoResize&&O(this,F)[F]){var e=O(this,K)[K],t=this.k();e&&!e.isLinear()?e&&(e.getWidth()>O(this,G)[G]||e.getHeight()>O(this,q)[q]?this.resizeAd(O(this,G)[G],O(this,q)[q]):(O(this,F)[F].resize(e.getWidth(),e.getHeight()+20,t),O(this,x)[x].style.width=e.getWidth()+"px",O(this,x)[x].style.height=e.getHeight()+20+"px")):this.resizeAd(O(this,G)[G],O(this,q)[q])}},i.k=function(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||O(this,N)[N].webkitDisplayingFullscreen?O(this,B)[B].ViewMode.FULLSCREEN:O(this,B)[B].ViewMode.NORMAL},i.I=function(){var e=this;O(this,x)[x].style.display="none",O(this,N)[N].ended||(O(this,U)[U].enable(),O(this,eo)[eo]?(O(this,N)[N].pause(),this.dispatchEvent(new R("pause"))):(this.p().then(function(){}).catch(function(){e.dispatchEvent(new R("pause"))}),this.dispatchEvent(new R("play")),this.dispatchEvent(new R(M.MEDIA_RESUMED))),O(this,eo)[eo]=!1)},i.B=function(e){var t=e.getError(),i=new j(t.getMessage());return i.type=t.getType(),i.errorCode=t.getErrorCode(),i.vastErrorCode=t.getVastErrorCode&&t.getVastErrorCode(),i.innerError=t.getInnerError(),i},i.j=function(e){var t=this;this.dispatchEvent(new R(M.AD_ERROR,{detail:{error:e}})),this.C(),O(this,en)[en]?O(this,en)[en]({start:function(){t.I(),O(t,en)[en]=void 0},startWithoutReset:function(){t.I()}}):this.I()},l(t,[{key:"volume",get:function(){return!O(this,U)[U].enabled&&O(this,F)[F]?O(this,F)[F].getVolume():O(this,N)[N].volume},set:function(e){!O(this,U)[U].enabled&&O(this,F)[F]&&O(this,F)[F].setVolume(e),O(this,N)[N].volume=e}},{key:"muted",get:function(){return!O(this,U)[U].enabled&&O(this,F)[F]?0===O(this,F)[F].getVolume():O(this,N)[N].muted},set:function(e){!O(this,U)[U].enabled&&O(this,F)[F]&&O(this,F)[F].setVolume(e?0:O(this,ea)[ea]),O(this,N)[N].muted=e}},{key:"currentTime",get:function(){return void 0!==O(this,et)[et]?O(this,et)[et]:O(this,N)[N].currentTime},set:function(e){O(this,U)[U].enabled&&(O(this,N)[N].currentTime=e)}},{key:"duration",get:function(){return void 0!==O(this,ei)[ei]?O(this,ei)[ei]:O(this,N)[N].duration}},{key:"cuePoints",get:function(){return[].concat(O(this,ee)[ee])}}]),t}(k)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],loqXi:[function(e,t,i,n){i.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},i.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},i.exportAll=function(e,t){return Object.keys(e).forEach(function(i){"default"===i||"__esModule"===i||Object.prototype.hasOwnProperty.call(t,i)||Object.defineProperty(t,i,{enumerable:!0,get:function(){return e[i]}})}),t},i.export=function(e,t,i){Object.defineProperty(e,t,{enumerable:!0,get:i})}},{}]},["cVeZd"],"cVeZd","parcelRequire4dc0",{});let{default:e}=parcelRequire4dc0("cVeZd");export{e as default};
\ No newline at end of file
diff --git a/docs/compiled/artplayer-plugin-vtt-thumbnail.js b/docs/compiled/artplayer-plugin-vtt-thumbnail.js
new file mode 100644
index 000000000..1dd1bc7a6
--- /dev/null
+++ b/docs/compiled/artplayer-plugin-vtt-thumbnail.js
@@ -0,0 +1,8 @@
+
+/*!
+ * artplayer-plugin-vtt-thumbnail.js v1.0.3
+ * Github: https://github.com/zhw2590582/ArtPlayer
+ * (c) 2017-2025 Harvey Zack
+ * Released under the MIT License.
+ */
+!function(e,t,n,r,o,i,l,u){var f="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},d="function"==typeof f[r]&&f[r],a=d.i||{},s=d.cache||{},p="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function c(t,n){if(!s[t]){if(!e[t]){if(o[t])return o[t];var i="function"==typeof f[r]&&f[r];if(!n&&i)return i(t,!0);if(d)return d(t,!0);if(p&&"string"==typeof t)return p(t);var l=Error("Cannot find module '"+t+"'");throw l.code="MODULE_NOT_FOUND",l}a.resolve=function(n){var r=e[t][1][n];return null!=r?r:n},a.cache={};var u=s[t]=new c.Module(t);e[t][0].call(u.exports,a,u,u.exports,f)}return s[t].exports;function a(e){var t=a.resolve(e);return!1===t?{}:c(t)}}c.isParcelRequire=!0,c.Module=function(e){this.id=e,this.bundle=c,this.require=p,this.exports={}},c.modules=e,c.cache=s,c.parent=d,c.distDir=void 0,c.publicUrl=void 0,c.devServer=void 0,c.i=a,c.register=function(t,n){e[t]=[function(e,t){t.exports=n},{}]},Object.defineProperty(c,"root",{get:function(){return f[r]}}),f[r]=c;for(var h=0;hu);var i=e("./getVttArray"),l=o.interopDefault(i);function u(e){return async t=>{let{constructor:{utils:{setStyle:n,isMobile:r,addClass:o}},template:{$progress:i}}=t,u=null,f=await (0,l.default)(e.vtt);return t.controls.add({name:"vtt-thumbnail",position:"top",index:20,style:e.style||{},mounted(e){o(e,"art-control-thumbnails"),t.on("setBar",async(o,l,d)=>{let a="played"===o&&d&&r;if("hover"===o||a){let o=i.clientWidth*l,d=l*t.duration;n(e,"display","flex");let s=f.find(e=>d>=e.start&&d<=e.end);if(!s)return n(e,"display","none");if(o>0&&oi.clientWidth-s.w/2?n(e,"left",`${i.clientWidth-s.w}px`):n(e,"left",`${o-s.w/2}px`);else r||n(e,"display","none");a&&(clearTimeout(u),u=setTimeout(()=>{n(e,"display","none")},500))}})}}),{name:"artplayerPluginVttThumbnail"}}}"undefined"!=typeof window&&(window.artplayerPluginVttThumbnail=u)},{"./getVttArray":"53JTS","@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],"53JTS":[function(e,t,n,r){var o=e("@parcel/transformer-js/src/esmodule-helpers.js");function i(e){var t,n,r;let o=e.split("."),i=o[0].split(":")||[],l=Number((t=o[1]||"0",n=3,r="0",t.length>n?String(t):((n-=t.length)>r.length&&(r+=r.repeat(n/r.length)),String(t)+r.slice(0,n))))/1e3,u=3600*Number(i[i.length-3]||0);return u+60*Number(i[i.length-2]||0)+Number(i[i.length-1]||0)+l}async function l(e=""){let t=(await (await fetch(e)).text()).split(/[\n\r]/g).filter(e=>e.trim()),n=[];for(let r=1;r?((?:\d{2}:)?(?:\d{2}:)?\d{2}(?:.\d{3})?)/,f=o.match(u),d=/(.*)#(\w{4})=(.*)/,a=l.match(d),s=Math.floor(i(f[1])),p=Math.floor(i(f[2])),c=a[1];if(!/^\/|(?:https?|ftp|file):\/\//i.test(c)){let t=e.split("/");t.pop(),t.push(c),c=t.join("/")}let h={start:s,end:p,url:c},m=a[2].split(""),y=a[3].split(",");for(let e=0;el)},{"@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],"6ykb1":[function(e,t,n,r){n.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},n.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.exportAll=function(e,t){return Object.keys(e).forEach(function(n){"default"===n||"__esModule"===n||Object.prototype.hasOwnProperty.call(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:function(){return e[n]}})}),t},n.export=function(e,t,n){Object.defineProperty(e,t,{enumerable:!0,get:n})}},{}]},["dNMrC"],"dNMrC","parcelRequire4dc0",{});
\ No newline at end of file
diff --git a/docs/compiled/artplayer-plugin-vtt-thumbnail.legacy.js b/docs/compiled/artplayer-plugin-vtt-thumbnail.legacy.js
new file mode 100644
index 000000000..1af9909e4
--- /dev/null
+++ b/docs/compiled/artplayer-plugin-vtt-thumbnail.legacy.js
@@ -0,0 +1,8 @@
+
+/*!
+ * artplayer-plugin-vtt-thumbnail.js v1.0.3
+ * Github: https://github.com/zhw2590582/ArtPlayer
+ * (c) 2017-2025 Harvey Zack
+ * Released under the MIT License.
+ */
+!function(e,t,r,n,o,i,c,u){var a="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},s="function"==typeof a[n]&&a[n],f=s.i||{},l=s.cache||{},p="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function d(t,r){if(!l[t]){if(!e[t]){if(o[t])return o[t];var i="function"==typeof a[n]&&a[n];if(!r&&i)return i(t,!0);if(s)return s(t,!0);if(p&&"string"==typeof t)return p(t);var c=Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}f.resolve=function(r){var n=e[t][1][r];return null!=n?n:r},f.cache={};var u=l[t]=new d.Module(t);e[t][0].call(u.exports,f,u,u.exports,a)}return l[t].exports;function f(e){var t=f.resolve(e);return!1===t?{}:d(t)}}d.isParcelRequire=!0,d.Module=function(e){this.id=e,this.bundle=d,this.require=p,this.exports={}},d.modules=e,d.cache=l,d.parent=s,d.distDir=void 0,d.publicUrl=void 0,d.devServer=void 0,d.i=f,d.register=function(t,r){e[t]=[function(e,t){t.exports=r},{}]},Object.defineProperty(d,"root",{get:function(){return a[n]}}),a[n]=d;for(var y=0;y=e.start&&d<=e.end})))return[2,n(e,"display","none")];if(p>0&&ps.clientWidth-y.w/2?n(e,"left","".concat(s.clientWidth-y.w,"px")):n(e,"left","".concat(p-y.w/2,"px"));else o||n(e,"display","none");i&&(clearTimeout(f),f=setTimeout(function(){n(e,"display","none")},500))}return[2]})})()})}}),[2,{name:"artplayerPluginVttThumbnail"}]}})})()}}"undefined"!=typeof window&&(window.artplayerPluginVttThumbnail=s)},{"@swc/helpers/cjs/_async_to_generator.cjs":"cZn0e","@swc/helpers/cjs/_ts_generator.cjs":"eltGh","./getVttArray":"j5vq0","@parcel/transformer-js/src/esmodule-helpers.js":"qpMMf"}],cZn0e:[function(e,t,r,n){"use strict";function o(e,t,r,n,o,i,c){try{var u=e[i](c),a=u.value}catch(e){r(e);return}u.done?t(a):Promise.resolve(a).then(n,o)}r._=function(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var c=e.apply(t,r);function u(e){o(c,n,i,u,a,"next",e)}function a(e){o(c,n,i,u,a,"throw",e)}u(void 0)})}}},{}],eltGh:[function(e,t,r,n){"use strict";r._=e("eb260df52bffddd").__generator},{eb260df52bffddd:"6yrAu"}],"6yrAu":[function(e,t,r,n){var o=e("@parcel/transformer-js/src/esmodule-helpers.js");o.defineInteropFlag(r),o.export(r,"__extends",function(){return u}),o.export(r,"__assign",function(){return a}),o.export(r,"__rest",function(){return s}),o.export(r,"__decorate",function(){return f}),o.export(r,"__param",function(){return l}),o.export(r,"__esDecorate",function(){return p}),o.export(r,"__runInitializers",function(){return d}),o.export(r,"__propKey",function(){return y}),o.export(r,"__setFunctionName",function(){return _}),o.export(r,"__metadata",function(){return h}),o.export(r,"__awaiter",function(){return v}),o.export(r,"__generator",function(){return b}),o.export(r,"__createBinding",function(){return m}),o.export(r,"__exportStar",function(){return g}),o.export(r,"__values",function(){return w}),o.export(r,"__read",function(){return j}),o.export(r,"__spread",function(){return x}),o.export(r,"__spreadArrays",function(){return O}),o.export(r,"__spreadArray",function(){return P}),o.export(r,"__await",function(){return S}),o.export(r,"__asyncGenerator",function(){return E}),o.export(r,"__asyncDelegator",function(){return T}),o.export(r,"__asyncValues",function(){return I}),o.export(r,"__makeTemplateObject",function(){return M}),o.export(r,"__importStar",function(){return A}),o.export(r,"__importDefault",function(){return k}),o.export(r,"__classPrivateFieldGet",function(){return F}),o.export(r,"__classPrivateFieldSet",function(){return q}),o.export(r,"__classPrivateFieldIn",function(){return N}),o.export(r,"__addDisposableResource",function(){return C}),o.export(r,"__disposeResources",function(){return V}),o.export(r,"__rewriteRelativeImportExtension",function(){return K});var i=e("@swc/helpers/cjs/_type_of.cjs"),c=function(e,t){return(c=Object.setPrototypeOf||({__proto__:[]})instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)};function u(e,t){if("function"!=typeof t&&null!==t)throw TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}c(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var a=function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;rt.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,n=Object.getOwnPropertySymbols(e);ot.indexOf(n[o])&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]]);return r}function f(e,t,r,n){var o,c=arguments.length,u=c<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,r):n;if(("undefined"==typeof Reflect?"undefined":(0,i._)(Reflect))==="object"&&"function"==typeof Reflect.decorate)u=Reflect.decorate(e,t,r,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(u=(c<3?o(u):c>3?o(t,r,u):o(t,r))||u);return c>3&&u&&Object.defineProperty(t,r,u),u}function l(e,t){return function(r,n){t(r,n,e)}}function p(e,t,r,n,o,c){function u(e){if(void 0!==e&&"function"!=typeof e)throw TypeError("Function expected");return e}for(var a,s=n.kind,f="getter"===s?"get":"setter"===s?"set":"value",l=!t&&e?n.static?e:e.prototype:null,p=t||(l?Object.getOwnPropertyDescriptor(l,n.name):{}),d=!1,y=r.length-1;y>=0;y--){var _={};for(var h in n)_[h]="access"===h?{}:n[h];for(var h in n.access)_.access[h]=n.access[h];_.addInitializer=function(e){if(d)throw TypeError("Cannot add initializers after decoration has completed");c.push(u(e||null))};var v=(0,r[y])("accessor"===s?{get:p.get,set:p.set}:p[f],_);if("accessor"===s){if(void 0===v)continue;if(null===v||(void 0===v?"undefined":(0,i._)(v))!=="object")throw TypeError("Object expected");(a=u(v.get))&&(p.get=a),(a=u(v.set))&&(p.set=a),(a=u(v.init))&&o.unshift(a)}else(a=u(v))&&("field"===s?o.unshift(a):p[f]=a)}l&&Object.defineProperty(l,n.name,p),d=!0}function d(e,t,r){for(var n=arguments.length>2,o=0;o0&&o[o.length-1])&&(6===s[0]||2===s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function j(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,i=r.call(e),c=[];try{for(;(void 0===t||t-- >0)&&!(n=i.next()).done;)c.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return c}function x(){for(var e=[],t=0;t1||u(e,t)})},t&&(n[e]=t(n[e])))}function u(e,t){try{var r;(r=o[e](t)).value instanceof S?Promise.resolve(r.value.v).then(a,s):f(i[0][2],r)}catch(e){f(i[0][3],e)}}function a(e){u("next",e)}function s(e){u("throw",e)}function f(e,t){e(t),i.shift(),i.length&&u(i[0][0],i[0][1])}}function T(e){var t,r;return t={},n("next"),n("throw",function(e){throw e}),n("return"),t[Symbol.iterator]=function(){return this},t;function n(n,o){t[n]=e[n]?function(t){return(r=!r)?{value:S(e[n](t)),done:!1}:o?o(t):t}:o}}function I(e){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var t,r=e[Symbol.asyncIterator];return r?r.call(e):(e=w(e),t={},n("next"),n("throw"),n("return"),t[Symbol.asyncIterator]=function(){return this},t);function n(r){t[r]=e[r]&&function(t){return new Promise(function(n,o){var i,c,u;i=n,c=o,u=(t=e[r](t)).done,Promise.resolve(t.value).then(function(e){i({value:e,done:u})},c)})}}}function M(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var D=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},R=function(e){return(R=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t})(e)};function A(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=R(e),n=0;nr?String(t):((r-=t.length)>n.length&&(n+=n.repeat(r/n.length)),String(t)+n.slice(0,r))))/1e3;return 3600*Number(i[i.length-3]||0)+60*Number(i[i.length-2]||0)+Number(i[i.length-1]||0)+c}function a(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return(0,i._)(function(){var t,r,n,o,i,a,s,f,l,p,d,y,_,h,v,b,m;return(0,c._)(this,function(c){switch(c.label){case 0:return[4,fetch(e)];case 1:return[4,c.sent().text()];case 2:for(n=1,t=c.sent().split(/[\n\r]/g).filter(function(e){return e.trim()}),r=[];n?((?:\d{2}:)?(?:\d{2}:)?\d{2}(?:.\d{3})?)/,s=o.match(a),f=/(.*)#(\w{4})=(.*)/,l=i.match(f),p=Math.floor(u(s[1])),d=Math.floor(u(s[2])),y=l[1],/^\/|(?:https?|ftp|file):\/\//i.test(y)||((_=e.split("/")).pop(),_.push(y),y=_.join("/")),h={start:p,end:d,url:y},v=l[2].split(""),b=l[3].split(","),m=0;mu);var i=e("./getVttArray"),l=o.interopDefault(i);function u(e){return async t=>{let{constructor:{utils:{setStyle:n,isMobile:r,addClass:o}},template:{$progress:i}}=t,u=null,f=await (0,l.default)(e.vtt);return t.controls.add({name:"vtt-thumbnail",position:"top",index:20,style:e.style||{},mounted(e){o(e,"art-control-thumbnails"),t.on("setBar",async(o,l,a)=>{let d="played"===o&&a&&r;if("hover"===o||d){let o=i.clientWidth*l,a=l*t.duration;n(e,"display","flex");let s=f.find(e=>a>=e.start&&a<=e.end);if(!s)return n(e,"display","none");if(o>0&&oi.clientWidth-s.w/2?n(e,"left",`${i.clientWidth-s.w}px`):n(e,"left",`${o-s.w/2}px`);else r||n(e,"display","none");d&&(clearTimeout(u),u=setTimeout(()=>{n(e,"display","none")},500))}})}}),{name:"artplayerPluginVttThumbnail"}}}"undefined"!=typeof window&&(window.artplayerPluginVttThumbnail=u)},{"./getVttArray":"i9qdo","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],i9qdo:[function(e,t,n,r){var o=e("@parcel/transformer-js/src/esmodule-helpers.js");function i(e){var t,n,r;let o=e.split("."),i=o[0].split(":")||[],l=Number((t=o[1]||"0",n=3,r="0",t.length>n?String(t):((n-=t.length)>r.length&&(r+=r.repeat(n/r.length)),String(t)+r.slice(0,n))))/1e3,u=3600*Number(i[i.length-3]||0);return u+60*Number(i[i.length-2]||0)+Number(i[i.length-1]||0)+l}async function l(e=""){let t=(await (await fetch(e)).text()).split(/[\n\r]/g).filter(e=>e.trim()),n=[];for(let r=1;r?((?:\d{2}:)?(?:\d{2}:)?\d{2}(?:.\d{3})?)/,f=o.match(u),a=/(.*)#(\w{4})=(.*)/,d=l.match(a),s=Math.floor(i(f[1])),c=Math.floor(i(f[2])),p=d[1];if(!/^\/|(?:https?|ftp|file):\/\//i.test(p)){let t=e.split("/");t.pop(),t.push(p),p=t.join("/")}let h={start:s,end:c,url:p},m=d[2].split(""),g=d[3].split(",");for(let e=0;el)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],loqXi:[function(e,t,n,r){n.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},n.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.exportAll=function(e,t){return Object.keys(e).forEach(function(n){"default"===n||"__esModule"===n||Object.prototype.hasOwnProperty.call(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:function(){return e[n]}})}),t},n.export=function(e,t,n){Object.defineProperty(e,t,{enumerable:!0,get:n})}},{}]},["egVzc"],"egVzc","parcelRequire4dc0",{});let{default:e}=parcelRequire4dc0("egVzc");export{e as default};
\ No newline at end of file
diff --git a/docs/compiled/artplayer-proxy-canvas.js b/docs/compiled/artplayer-proxy-canvas.js
new file mode 100644
index 000000000..1ac7c69ae
--- /dev/null
+++ b/docs/compiled/artplayer-proxy-canvas.js
@@ -0,0 +1,8 @@
+
+/*!
+ * artplayer-proxy-canvas.js v1.0.0
+ * Github: https://github.com/zhw2590582/ArtPlayer
+ * (c) 2017-2025 Harvey Zack
+ * Released under the MIT License.
+ */
+!function(e,t,n,r,o,i,a,f){var u="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},d="function"==typeof u[r]&&u[r],l=d.i||{},c=d.cache||{},s="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function p(t,n){if(!c[t]){if(!e[t]){if(o[t])return o[t];var i="function"==typeof u[r]&&u[r];if(!n&&i)return i(t,!0);if(d)return d(t,!0);if(s&&"string"==typeof t)return s(t);var a=Error("Cannot find module '"+t+"'");throw a.code="MODULE_NOT_FOUND",a}l.resolve=function(n){var r=e[t][1][n];return null!=r?r:n},l.cache={};var f=c[t]=new p.Module(t);e[t][0].call(f.exports,l,f,f.exports,u)}return c[t].exports;function l(e){var t=l.resolve(e);return!1===t?{}:p(t)}}p.isParcelRequire=!0,p.Module=function(e){this.id=e,this.bundle=p,this.require=s,this.exports={}},p.modules=e,p.cache=c,p.parent=d,p.distDir=void 0,p.publicUrl=void 0,p.devServer=void 0,p.i=l,p.register=function(t,n){e[t]=[function(e,t){t.exports=n},{}]},Object.defineProperty(p,"root",{get:function(){return u[r]}}),u[r]=p;for(var y=0;y{let{constructor:n}=t,{createElement:r}=n.utils,o=r("canvas"),i=r("video"),a=o.getContext("2d"),f=null,u={};for(let e in o)"function"==typeof o[e]&&(u[e]=o[e].bind(o));for(let e in i)e in o||Object.defineProperty(o,e,{get(){let t=i[e];return"function"==typeof t?t.bind(i):t},set(t){i[e]=t},configurable:!0,enumerable:!0});for(let e in u)o[e]=function(...t){return e in u?u[e](...t):i[e](...t)};return function(){let{events:e}=n.config;setTimeout(()=>{e.forEach(e=>{t.proxy(i,e,e=>{t.emit(`video:${e.type}`,e)})})})}(),t.on("video:loadedmetadata",()=>{o.width=i.videoWidth,o.height=i.videoHeight}),t.on("video:play",()=>{cancelAnimationFrame(f),l()}),t.on("video:pause",()=>{cancelAnimationFrame(f)}),t.on("resize",()=>{!function(){let e,n,r=t.template?.$player;if(!r||t.option.autoSize)return;let a=i.videoWidth/i.videoHeight,f=r.clientWidth,u=r.clientHeight;f/u>a?e=(n=u)*a:n=(e=f)/a,o.width=e,o.height=n;let d=(f-e)/2,l=(u-n)/2;Object.assign(o.style,{padding:`${l}px ${d}px`})}(),d()}),t.on("destroy",()=>{cancelAnimationFrame(f)}),o;async function d(){try{if("undefined"!=typeof createImageBitmap){let e=await createImageBitmap(i);a.drawImage(e,0,0,o.width,o.height),e.close()}else a.drawImage(i,0,0,o.width,o.height);e&&e(a,i),t.emit("artplayerProxyCanvas:draw",a,i)}catch(e){t.emit("artplayerProxyCanvas:error",e)}}async function l(){await d(),f=requestAnimationFrame(l)}}}o.defineInteropFlag(n),o.export(n,"default",()=>i),"undefined"!=typeof window&&(window.artplayerProxyCanvas=i)},{"@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],"6ykb1":[function(e,t,n,r){n.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},n.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.exportAll=function(e,t){return Object.keys(e).forEach(function(n){"default"===n||"__esModule"===n||Object.prototype.hasOwnProperty.call(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:function(){return e[n]}})}),t},n.export=function(e,t,n){Object.defineProperty(e,t,{enumerable:!0,get:n})}},{}]},["fsIOq"],"fsIOq","parcelRequire4dc0",{});
\ No newline at end of file
diff --git a/docs/compiled/artplayer-proxy-canvas.legacy.js b/docs/compiled/artplayer-proxy-canvas.legacy.js
new file mode 100644
index 000000000..3d60576a4
--- /dev/null
+++ b/docs/compiled/artplayer-proxy-canvas.legacy.js
@@ -0,0 +1,8 @@
+
+/*!
+ * artplayer-proxy-canvas.js v1.0.0
+ * Github: https://github.com/zhw2590582/ArtPlayer
+ * (c) 2017-2025 Harvey Zack
+ * Released under the MIT License.
+ */
+!function(e,t,r,n,o,i,c,a){var u="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},f="function"==typeof u[n]&&u[n],s=f.i||{},l=f.cache||{},p="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function d(t,r){if(!l[t]){if(!e[t]){if(o[t])return o[t];var i="function"==typeof u[n]&&u[n];if(!r&&i)return i(t,!0);if(f)return f(t,!0);if(p&&"string"==typeof t)return p(t);var c=Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}s.resolve=function(r){var n=e[t][1][r];return null!=n?n:r},s.cache={};var a=l[t]=new d.Module(t);e[t][0].call(a.exports,s,a,a.exports,u)}return l[t].exports;function s(e){var t=s.resolve(e);return!1===t?{}:d(t)}}d.isParcelRequire=!0,d.Module=function(e){this.id=e,this.bundle=d,this.require=p,this.exports={}},d.modules=e,d.cache=l,d.parent=f,d.distDir=void 0,d.publicUrl=void 0,d.devServer=void 0,d.i=s,d.register=function(t,r){e[t]=[function(e,t){t.exports=r},{}]},Object.defineProperty(d,"root",{get:function(){return u[n]}}),u[n]=d;for(var y=0;yi?r=(n=a)*i:n=(r=c)/i,s.width=r,s.height=n;var u=(c-r)/2,f=(a-n)/2;Object.assign(s.style,{padding:"".concat(f,"px ").concat(u,"px")})}}(),b()}),t.on("destroy",function(){cancelAnimationFrame(d)}),s;function b(){return(0,i._)(function(){var r,n;return(0,a._)(this,function(o){switch(o.label){case 0:if(o.trys.push([0,4,,5]),"undefined"==typeof createImageBitmap)return[3,2];return[4,createImageBitmap(l)];case 1:return r=o.sent(),p.drawImage(r,0,0,s.width,s.height),r.close(),[3,3];case 2:p.drawImage(l,0,0,s.width,s.height),o.label=3;case 3:return e&&e(p,l),t.emit("artplayerProxyCanvas:draw",p,l),[3,5];case 4:return n=o.sent(),t.emit("artplayerProxyCanvas:error",n),[3,5];case 5:return[2]}})})()}}}"undefined"!=typeof window&&(window.artplayerProxyCanvas=u)},{"@swc/helpers/cjs/_async_to_generator.cjs":"cZn0e","@swc/helpers/cjs/_to_consumable_array.cjs":"i81N6","@swc/helpers/cjs/_ts_generator.cjs":"eltGh","@parcel/transformer-js/src/esmodule-helpers.js":"qpMMf"}],cZn0e:[function(e,t,r,n){"use strict";function o(e,t,r,n,o,i,c){try{var a=e[i](c),u=a.value}catch(e){r(e);return}a.done?t(u):Promise.resolve(u).then(n,o)}r._=function(e){return function(){var t=this,r=arguments;return new Promise(function(n,i){var c=e.apply(t,r);function a(e){o(c,n,i,a,u,"next",e)}function u(e){o(c,n,i,a,u,"throw",e)}a(void 0)})}}},{}],i81N6:[function(e,t,r,n){"use strict";var o=e("d402183024004bc7"),i=e("3209e2b12672cd18"),c=e("fc58adb8f1bff142"),a=e("5e213dc122a10171");r._=function(e){return o._(e)||i._(e)||a._(e)||c._()}},{d402183024004bc7:"hfQG0","3209e2b12672cd18":"fQrlQ",fc58adb8f1bff142:"fWabh","5e213dc122a10171":"fh7mx"}],hfQG0:[function(e,t,r,n){"use strict";var o=e("5bd5b10bf87fc8e");r._=function(e){if(Array.isArray(e))return o._(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);rt.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,n=Object.getOwnPropertySymbols(e);ot.indexOf(n[o])&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]]);return r}function s(e,t,r,n){var o,c=arguments.length,a=c<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,r):n;if(("undefined"==typeof Reflect?"undefined":(0,i._)(Reflect))==="object"&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,r,n);else for(var u=e.length-1;u>=0;u--)(o=e[u])&&(a=(c<3?o(a):c>3?o(t,r,a):o(t,r))||a);return c>3&&a&&Object.defineProperty(t,r,a),a}function l(e,t){return function(r,n){t(r,n,e)}}function p(e,t,r,n,o,c){function a(e){if(void 0!==e&&"function"!=typeof e)throw TypeError("Function expected");return e}for(var u,f=n.kind,s="getter"===f?"get":"setter"===f?"set":"value",l=!t&&e?n.static?e:e.prototype:null,p=t||(l?Object.getOwnPropertyDescriptor(l,n.name):{}),d=!1,y=r.length-1;y>=0;y--){var _={};for(var h in n)_[h]="access"===h?{}:n[h];for(var h in n.access)_.access[h]=n.access[h];_.addInitializer=function(e){if(d)throw TypeError("Cannot add initializers after decoration has completed");c.push(a(e||null))};var v=(0,r[y])("accessor"===f?{get:p.get,set:p.set}:p[s],_);if("accessor"===f){if(void 0===v)continue;if(null===v||(void 0===v?"undefined":(0,i._)(v))!=="object")throw TypeError("Object expected");(u=a(v.get))&&(p.get=u),(u=a(v.set))&&(p.set=u),(u=a(v.init))&&o.unshift(u)}else(u=a(v))&&("field"===f?o.unshift(u):p[s]=u)}l&&Object.defineProperty(l,n.name,p),d=!0}function d(e,t,r){for(var n=arguments.length>2,o=0;o0&&o[o.length-1])&&(6===f[0]||2===f[0])){i=0;continue}if(3===f[0]&&(!o||f[1]>o[0]&&f[1]=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function j(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,i=r.call(e),c=[];try{for(;(void 0===t||t-- >0)&&!(n=i.next()).done;)c.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return c}function x(){for(var e=[],t=0;t1||a(e,t)})},t&&(n[e]=t(n[e])))}function a(e,t){try{var r;(r=o[e](t)).value instanceof S?Promise.resolve(r.value.v).then(u,f):s(i[0][2],r)}catch(e){s(i[0][3],e)}}function u(e){a("next",e)}function f(e){a("throw",e)}function s(e,t){e(t),i.shift(),i.length&&a(i[0][0],i[0][1])}}function A(e){var t,r;return t={},n("next"),n("throw",function(e){throw e}),n("return"),t[Symbol.iterator]=function(){return this},t;function n(n,o){t[n]=e[n]?function(t){return(r=!r)?{value:S(e[n](t)),done:!1}:o?o(t):t}:o}}function I(e){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var t,r=e[Symbol.asyncIterator];return r?r.call(e):(e=g(e),t={},n("next"),n("throw"),n("return"),t[Symbol.asyncIterator]=function(){return this},t);function n(r){t[r]=e[r]&&function(t){return new Promise(function(n,o){var i,c,a;i=n,c=o,a=(t=e[r](t)).done,Promise.resolve(t.value).then(function(e){i({value:e,done:a})},c)})}}}function T(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var D=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},R=function(e){return(R=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t})(e)};function F(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=R(e),n=0;n{let{constructor:n}=t,{createElement:r}=n.utils,o=r("canvas"),i=r("video"),a=o.getContext("2d"),u=null,d={};for(let e in o)"function"==typeof o[e]&&(d[e]=o[e].bind(o));for(let e in i)e in o||Object.defineProperty(o,e,{get(){let t=i[e];return"function"==typeof t?t.bind(i):t},set(t){i[e]=t},configurable:!0,enumerable:!0});for(let e in d)o[e]=function(...t){return e in d?d[e](...t):i[e](...t)};return function(){let{events:e}=n.config;setTimeout(()=>{e.forEach(e=>{t.proxy(i,e,e=>{t.emit(`video:${e.type}`,e)})})})}(),t.on("video:loadedmetadata",()=>{o.width=i.videoWidth,o.height=i.videoHeight}),t.on("video:play",()=>{cancelAnimationFrame(u),l()}),t.on("video:pause",()=>{cancelAnimationFrame(u)}),t.on("resize",()=>{!function(){let e,n,r=t.template?.$player;if(!r||t.option.autoSize)return;let a=i.videoWidth/i.videoHeight,u=r.clientWidth,d=r.clientHeight;u/d>a?e=(n=d)*a:n=(e=u)/a,o.width=e,o.height=n;let f=(u-e)/2,l=(d-n)/2;Object.assign(o.style,{padding:`${l}px ${f}px`})}(),f()}),t.on("destroy",()=>{cancelAnimationFrame(u)}),o;async function f(){try{if("undefined"!=typeof createImageBitmap){let e=await createImageBitmap(i);a.drawImage(e,0,0,o.width,o.height),e.close()}else a.drawImage(i,0,0,o.width,o.height);e&&e(a,i),t.emit("artplayerProxyCanvas:draw",a,i)}catch(e){t.emit("artplayerProxyCanvas:error",e)}}async function l(){await f(),u=requestAnimationFrame(l)}}}o.defineInteropFlag(n),o.export(n,"default",()=>i),"undefined"!=typeof window&&(window.artplayerProxyCanvas=i)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],loqXi:[function(e,t,n,r){n.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},n.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.exportAll=function(e,t){return Object.keys(e).forEach(function(n){"default"===n||"__esModule"===n||Object.prototype.hasOwnProperty.call(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:function(){return e[n]}})}),t},n.export=function(e,t,n){Object.defineProperty(e,t,{enumerable:!0,get:n})}},{}]},["7gEKL"],"7gEKL","parcelRequire4dc0",{});let{default:e}=parcelRequire4dc0("7gEKL");export{e as default};
\ No newline at end of file
diff --git a/docs/compiled/artplayer-tool-thumbnail.js b/docs/compiled/artplayer-tool-thumbnail.js
new file mode 100644
index 000000000..0f733d44d
--- /dev/null
+++ b/docs/compiled/artplayer-tool-thumbnail.js
@@ -0,0 +1,8 @@
+
+/*!
+ * artplayer-tool-thumbnail.js v4.3.12
+ * Github: https://github.com/zhw2590582/ArtPlayer
+ * (c) 2017-2025 Harvey Zack
+ * Released under the MIT License.
+ */
+!function(e,t,i,n,o,r,s,l){var a="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},h="function"==typeof a[n]&&a[n],d=h.i||{},u=h.cache||{},p="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function c(t,i){if(!u[t]){if(!e[t]){if(o[t])return o[t];var r="function"==typeof a[n]&&a[n];if(!i&&r)return r(t,!0);if(h)return h(t,!0);if(p&&"string"==typeof t)return p(t);var s=Error("Cannot find module '"+t+"'");throw s.code="MODULE_NOT_FOUND",s}d.resolve=function(i){var n=e[t][1][i];return null!=n?n:i},d.cache={};var l=u[t]=new c.Module(t);e[t][0].call(l.exports,d,l,l.exports,a)}return u[t].exports;function d(e){var t=d.resolve(e);return!1===t?{}:c(t)}}c.isParcelRequire=!0,c.Module=function(e){this.id=e,this.bundle=c,this.require=p,this.exports={}},c.modules=e,c.cache=u,c.parent=h,c.distDir=void 0,c.publicUrl=void 0,c.devServer=void 0,c.i=d,c.register=function(t,i){e[t]=[function(e,t){t.exports=i},{}]},Object.defineProperty(c,"root",{get:function(){return a[n]}}),a[n]=c;for(var f=0;f{this.errorHandle("number"==typeof this.option[e],`The '${e}' is not a number`)}),this.option.number=(0,l.clamp)(i,10,1e3),this.option.width=(0,l.clamp)(n,10,1e3),this.option.column=(0,l.clamp)(o,1,1e3),this}static creatVideo(){let e=document.createElement("video");return e.style.position="absolute",e.style.top="-9999px",e.style.left="-9999px",e.muted=!0,e.controls=!0,document.body.appendChild(e),e}inputChange(e){let t=this.option.fileInput.files[0];this.loadVideo(t),e.target.value=""}loadVideo(e){if(e){let t=this.video.canPlayType(e.type);this.errorHandle("maybe"===t||"probably"===t,`Playback of this file format is not supported: ${e.type}`);let i=URL.createObjectURL(e);this.videoUrl=i,this.file=e,this.emit("file",this.file),this.video.src=i,this.emit("video",this.video)}}start(){if(!this.video.duration)return(0,l.sleep)(1e3).then(()=>this.start());let{width:e,number:t,begin:i,end:n}=this.option,o=this.video.videoHeight/this.video.videoWidth*e;this.option.height=o,this.option.begin=(0,l.clamp)(i,0,this.video.duration),this.option.end=(0,l.clamp)(n||this.video.duration,i,this.video.duration),this.errorHandle(this.option.end>this.option.begin,"End time must be greater than the start time"),this.duration=this.option.end-this.option.begin,this.density=t/this.duration,this.errorHandle(this.file&&this.video,"Please select the video file first"),this.errorHandle(!this.processing,"There is currently a task in progress, please wait a moment..."),this.errorHandle(this.density<=1,`The preview density cannot be greater than 1, but got ${this.density}`);let r=this.creatScreenshotDate(),s=this.creatCanvas(),a=s.getContext("2d");this.emit("canvas",s);let h=r.map((i,n)=>()=>new Promise(r=>{this.video.oncanplay=()=>{a.drawImage(this.video,i.x,i.y,e,o),s.toBlob(e=>{this.thumbnailUrl&&URL.revokeObjectURL(this.thumbnailUrl),this.thumbnailUrl=URL.createObjectURL(e),this.emit("update",this.thumbnailUrl,(n+1)/t),this.video.oncanplay=null,r()})},this.video.currentTime=i.time}));return this.processing=!0,(0,l.runPromisesInSeries)(h).then(()=>{this.processing=!1,this.emit("done")}).catch(e=>{throw this.processing=!1,this.emit("error",e.message),e})}creatScreenshotDate(){let{number:e,width:t,height:i,column:n,begin:o}=this.option,r=this.duration/e,s=[o+r];for(;s.length({time:e-r/2,x:o%n*t,y:Math.floor(o/n)*i}))}creatCanvas(){let{number:e,width:t,height:i,column:n}=this.option,o=document.createElement("canvas"),r=o.getContext("2d");return o.width=t*n,o.height=Math.ceil(e/n)*i+30,r.fillStyle="black",r.fillRect(0,0,o.width,o.height),r.font="14px Georgia",r.fillStyle="#fff",r.fillText(`From: https://artplayer.org/, Number: ${e}, Width: ${t}, Height: ${i}, Column: ${n}`,10,o.height-11),o}download(){this.errorHandle(this.file&&this.thumbnailUrl,"Download does not seem to be ready, please create preview first"),this.errorHandle(!this.processing,"There is currently a task in progress, please wait a moment...");let e=document.createElement("a"),t=`${(0,l.getFileName)(this.file.name)}.png`;return e.download=t,e.href=this.thumbnailUrl,document.body.appendChild(e),e.click(),document.body.removeChild(e),this.emit("download",t),this}errorHandle(e,t){if(!e)throw this.emit("error",t),Error(t)}destroy(){this.option.fileInput.removeEventListener("change",this.inputChange),this.option.fileInput.removeEventListener("dragover",a.ondragover),this.option.fileInput.removeEventListener("drop",a.ondrop),document.body.removeChild(this.video),this.videoUrl&&URL.revokeObjectURL(this.videoUrl),this.thumbnailUrl&&URL.revokeObjectURL(this.thumbnailUrl),this.emit("destroy")}}i.default=a,window.ArtplayerToolThumbnail=a},{"./emitter":"dvI7H","./utils":"faufc","@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],dvI7H:[function(e,t,i,n){e("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(i),i.default=class{on(e,t,i){let n=this.e||(this.e={});return(n[e]||(n[e]=[])).push({fn:t,ctx:i}),this}once(e,t,i){let n=this;function o(...r){n.off(e,o),t.apply(i,r)}return o._=t,this.on(e,o,i)}emit(e,...t){let i=((this.e||(this.e={}))[e]||[]).slice();for(let e=0;esetTimeout(t,e))}function s(e){return e.reduce((e,t)=>e.then(t),Promise.resolve())}function l(e){let t=e.split(".");return t.pop(),t.join(".")}function a(e,t,i){return Math.max(Math.min(e,Math.max(t,i)),Math.min(t,i))}o.defineInteropFlag(i),o.export(i,"sleep",()=>r),o.export(i,"runPromisesInSeries",()=>s),o.export(i,"getFileName",()=>l),o.export(i,"clamp",()=>a)},{"@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}]},["c0Aef"],"c0Aef","parcelRequire4dc0",{});
\ No newline at end of file
diff --git a/docs/compiled/artplayer-tool-thumbnail.legacy.js b/docs/compiled/artplayer-tool-thumbnail.legacy.js
new file mode 100644
index 000000000..107b1f29e
--- /dev/null
+++ b/docs/compiled/artplayer-tool-thumbnail.legacy.js
@@ -0,0 +1,8 @@
+
+/*!
+ * artplayer-tool-thumbnail.js v4.3.12
+ * Github: https://github.com/zhw2590582/ArtPlayer
+ * (c) 2017-2025 Harvey Zack
+ * Released under the MIT License.
+ */
+!function(e,t,n,r,i,o,s,a){var c="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},u="function"==typeof c[r]&&c[r],l=u.i||{},f=u.cache||{},h="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function d(t,n){if(!f[t]){if(!e[t]){if(i[t])return i[t];var o="function"==typeof c[r]&&c[r];if(!n&&o)return o(t,!0);if(u)return u(t,!0);if(h&&"string"==typeof t)return h(t);var s=Error("Cannot find module '"+t+"'");throw s.code="MODULE_NOT_FOUND",s}l.resolve=function(n){var r=e[t][1][n];return null!=r?r:n},l.cache={};var a=f[t]=new d.Module(t);e[t][0].call(a.exports,l,a,a.exports,c)}return f[t].exports;function l(e){var t=l.resolve(e);return!1===t?{}:d(t)}}d.isParcelRequire=!0,d.Module=function(e){this.id=e,this.bundle=d,this.require=h,this.exports={}},d.modules=e,d.cache=f,d.parent=u,d.distDir=void 0,d.publicUrl=void 0,d.devServer=void 0,d.i=l,d.register=function(t,n){e[t]=[function(e,t){t.exports=n},{}]},Object.defineProperty(d,"root",{get:function(){return c[r]}}),c[r]=d;for(var p=0;p0&&void 0!==arguments[0]?arguments[0]:{};return(0,s._)(this,t),(e=(0,o._)(this,t)).processing=!1,e.option={},e.setup(Object.assign({},t.DEFAULTS,n)),e.video=t.creatVideo(),e.duration=0,e.inputChange=e.inputChange.bind(e),e.ondrop=e.ondrop.bind(e),e.option.fileInput.addEventListener("change",e.inputChange),e.option.fileInput.addEventListener("dragover",t.ondragover),e.option.fileInput.addEventListener("drop",t.ondrop),e}return(0,c._)(t,e),(0,a._)(t,[{key:"ondrop",value:function(e){e.preventDefault();var t=e.dataTransfer.files[0];this.loadVideo(t)}},{key:"setup",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.option=Object.assign({},this.option,t);var n=this.option,r=n.fileInput,i=n.number,o=n.width,s=n.column;if(this.errorHandle(r instanceof Element,"The 'fileInput' is not a Element"),"INPUT"!==r.tagName||"file"!==r.type){r.style.position="relative";var a=document.createElement("input");a.type="file",a.style.position="absolute",a.style.width="100%",a.style.height="100%",a.style.left="0",a.style.top="0",a.style.right="0",a.style.bottom="0",a.style.opacity="0",r.appendChild(a),this.option.fileInput=a}return["number","width","column","begin","end"].forEach(function(t){e.errorHandle("number"==typeof e.option[t],"The '".concat(t,"' is not a number"))}),this.option.number=(0,f.clamp)(i,10,1e3),this.option.width=(0,f.clamp)(o,10,1e3),this.option.column=(0,f.clamp)(s,1,1e3),this}},{key:"inputChange",value:function(e){var t=this.option.fileInput.files[0];this.loadVideo(t),e.target.value=""}},{key:"loadVideo",value:function(e){if(e){var t=this.video.canPlayType(e.type);this.errorHandle("maybe"===t||"probably"===t,"Playback of this file format is not supported: ".concat(e.type));var n=URL.createObjectURL(e);this.videoUrl=n,this.file=e,this.emit("file",this.file),this.video.src=n,this.emit("video",this.video)}}},{key:"start",value:function(){var e=this;if(!this.video.duration)return(0,f.sleep)(1e3).then(function(){return e.start()});var t=this.option,n=t.width,r=t.number,i=t.begin,o=t.end,s=this.video.videoHeight/this.video.videoWidth*n;this.option.height=s,this.option.begin=(0,f.clamp)(i,0,this.video.duration),this.option.end=(0,f.clamp)(o||this.video.duration,i,this.video.duration),this.errorHandle(this.option.end>this.option.begin,"End time must be greater than the start time"),this.duration=this.option.end-this.option.begin,this.density=r/this.duration,this.errorHandle(this.file&&this.video,"Please select the video file first"),this.errorHandle(!this.processing,"There is currently a task in progress, please wait a moment..."),this.errorHandle(this.density<=1,"The preview density cannot be greater than 1, but got ".concat(this.density));var a=this.creatScreenshotDate(),c=this.creatCanvas(),u=c.getContext("2d");this.emit("canvas",c);var l=a.map(function(t,i){return function(){return new Promise(function(o){e.video.oncanplay=function(){u.drawImage(e.video,t.x,t.y,n,s),c.toBlob(function(t){e.thumbnailUrl&&URL.revokeObjectURL(e.thumbnailUrl),e.thumbnailUrl=URL.createObjectURL(t),e.emit("update",e.thumbnailUrl,(i+1)/r),e.video.oncanplay=null,o()})},e.video.currentTime=t.time})}});return this.processing=!0,(0,f.runPromisesInSeries)(l).then(function(){e.processing=!1,e.emit("done")}).catch(function(t){throw e.processing=!1,e.emit("error",t.message),t})}},{key:"creatScreenshotDate",value:function(){for(var e=this.option,t=e.number,n=e.width,r=e.height,i=e.column,o=e.begin,s=this.duration/t,a=[o+s];a.length1?t-1:0),r=1;r{this.errorHandle("number"==typeof this.option[e],`The '${e}' is not a number`)}),this.option.number=(0,l.clamp)(i,10,1e3),this.option.width=(0,l.clamp)(o,10,1e3),this.option.column=(0,l.clamp)(n,1,1e3),this}static creatVideo(){let e=document.createElement("video");return e.style.position="absolute",e.style.top="-9999px",e.style.left="-9999px",e.muted=!0,e.controls=!0,document.body.appendChild(e),e}inputChange(e){let t=this.option.fileInput.files[0];this.loadVideo(t),e.target.value=""}loadVideo(e){if(e){let t=this.video.canPlayType(e.type);this.errorHandle("maybe"===t||"probably"===t,`Playback of this file format is not supported: ${e.type}`);let i=URL.createObjectURL(e);this.videoUrl=i,this.file=e,this.emit("file",this.file),this.video.src=i,this.emit("video",this.video)}}start(){if(!this.video.duration)return(0,l.sleep)(1e3).then(()=>this.start());let{width:e,number:t,begin:i,end:o}=this.option,n=this.video.videoHeight/this.video.videoWidth*e;this.option.height=n,this.option.begin=(0,l.clamp)(i,0,this.video.duration),this.option.end=(0,l.clamp)(o||this.video.duration,i,this.video.duration),this.errorHandle(this.option.end>this.option.begin,"End time must be greater than the start time"),this.duration=this.option.end-this.option.begin,this.density=t/this.duration,this.errorHandle(this.file&&this.video,"Please select the video file first"),this.errorHandle(!this.processing,"There is currently a task in progress, please wait a moment..."),this.errorHandle(this.density<=1,`The preview density cannot be greater than 1, but got ${this.density}`);let r=this.creatScreenshotDate(),s=this.creatCanvas(),a=s.getContext("2d");this.emit("canvas",s);let h=r.map((i,o)=>()=>new Promise(r=>{this.video.oncanplay=()=>{a.drawImage(this.video,i.x,i.y,e,n),s.toBlob(e=>{this.thumbnailUrl&&URL.revokeObjectURL(this.thumbnailUrl),this.thumbnailUrl=URL.createObjectURL(e),this.emit("update",this.thumbnailUrl,(o+1)/t),this.video.oncanplay=null,r()})},this.video.currentTime=i.time}));return this.processing=!0,(0,l.runPromisesInSeries)(h).then(()=>{this.processing=!1,this.emit("done")}).catch(e=>{throw this.processing=!1,this.emit("error",e.message),e})}creatScreenshotDate(){let{number:e,width:t,height:i,column:o,begin:n}=this.option,r=this.duration/e,s=[n+r];for(;s.length({time:e-r/2,x:n%o*t,y:Math.floor(n/o)*i}))}creatCanvas(){let{number:e,width:t,height:i,column:o}=this.option,n=document.createElement("canvas"),r=n.getContext("2d");return n.width=t*o,n.height=Math.ceil(e/o)*i+30,r.fillStyle="black",r.fillRect(0,0,n.width,n.height),r.font="14px Georgia",r.fillStyle="#fff",r.fillText(`From: https://artplayer.org/, Number: ${e}, Width: ${t}, Height: ${i}, Column: ${o}`,10,n.height-11),n}download(){this.errorHandle(this.file&&this.thumbnailUrl,"Download does not seem to be ready, please create preview first"),this.errorHandle(!this.processing,"There is currently a task in progress, please wait a moment...");let e=document.createElement("a"),t=`${(0,l.getFileName)(this.file.name)}.png`;return e.download=t,e.href=this.thumbnailUrl,document.body.appendChild(e),e.click(),document.body.removeChild(e),this.emit("download",t),this}errorHandle(e,t){if(!e)throw this.emit("error",t),Error(t)}destroy(){this.option.fileInput.removeEventListener("change",this.inputChange),this.option.fileInput.removeEventListener("dragover",a.ondragover),this.option.fileInput.removeEventListener("drop",a.ondrop),document.body.removeChild(this.video),this.videoUrl&&URL.revokeObjectURL(this.videoUrl),this.thumbnailUrl&&URL.revokeObjectURL(this.thumbnailUrl),this.emit("destroy")}}i.default=a,window.ArtplayerToolThumbnail=a},{"./emitter":"2Mzft","./utils":"3Nqqx","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"2Mzft":[function(e,t,i,o){e("@parcel/transformer-js/src/esmodule-helpers.js").defineInteropFlag(i),i.default=class{on(e,t,i){let o=this.e||(this.e={});return(o[e]||(o[e]=[])).push({fn:t,ctx:i}),this}once(e,t,i){let o=this;function n(...r){o.off(e,n),t.apply(i,r)}return n._=t,this.on(e,n,i)}emit(e,...t){let i=((this.e||(this.e={}))[e]||[]).slice();for(let e=0;esetTimeout(t,e))}function s(e){return e.reduce((e,t)=>e.then(t),Promise.resolve())}function l(e){let t=e.split(".");return t.pop(),t.join(".")}function a(e,t,i){return Math.max(Math.min(e,Math.max(t,i)),Math.min(t,i))}n.defineInteropFlag(i),n.export(i,"sleep",()=>r),n.export(i,"runPromisesInSeries",()=>s),n.export(i,"getFileName",()=>l),n.export(i,"clamp",()=>a)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}]},["81Ebp"],"81Ebp","parcelRequire4dc0",{});let{default:e}=parcelRequire4dc0("81Ebp");export{e as default};
\ No newline at end of file
diff --git a/docs/document/404.html b/docs/document/404.html
index ec70f570d..bbfa44b14 100644
--- a/docs/document/404.html
+++ b/docs/document/404.html
@@ -9,7 +9,7 @@
-
+
@@ -21,7 +21,7 @@
-
+